<?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>114871</bug_id>
          
          <creation_ts>2013-04-19 06:49:51 -0700</creation_ts>
          <short_desc>[GTK] Reimplement atk_text_get_text_*_offset for WORD boundaries</short_desc>
          <delta_ts>2013-08-02 09:01:05 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>118179</dependson>
    
    <dependson>118908</dependson>
          <blocked>114867</blocked>
    
    <blocked>114872</blocked>
    
    <blocked>114873</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Mario Sanchez Prada">mario</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>878414</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-04-19 06:49:51 -0700</bug_when>
    <thetext>We need to get rid of Pango/Gail dependency, and this is one of the functionalities we would need to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895836</commentid>
    <comment_count>1</comment_count>
      <attachid>203426</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-05-31 02:34:57 -0700</bug_when>
    <thetext>Created attachment 203426
Patch proposal

Attaching a patch proposal to fix this. I&apos;ve checked this idea with Accerciser and Orca and seems to work fine. It also does not break any (layout or unit) test and I even added some more cases to those to check edge cases we were not checking previously (asking for &quot;text before/after offset&quot; for over the first/last position).

Thus, kindly asking for review. If this patch gets in I&apos;ll work on the LINE boundaries bug next :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895849</commentid>
    <comment_count>2</comment_count>
      <attachid>203426</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-05-31 03:28:41 -0700</bug_when>
    <thetext>Comment on attachment 203426
Patch proposal

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

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:686
&gt; +    Node* node = originalPosition.deepEquivalent().containerNode();
&gt; +    RefPtr&lt;Range&gt; selectedRange = Range::create(node-&gt;document(), startPosition.deepEquivalent(), endPosition.deepEquivalent());

Informal auto-review: these two lines should NOT be here. Please ignore them when doing the actual review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895868</commentid>
    <comment_count>3</comment_count>
      <attachid>203438</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-05-31 06:30:16 -0700</bug_when>
    <thetext>Created attachment 203438
Patch proposal

New version of the patch fixing the previous issue and adding some more bits to refactor code related to translate offsets between the WebCore to Atk worlds.

This refactor will also be used by further patches for LINE and SENTENCE boundaries, although they are a win already right now (and increases readability)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895869</commentid>
    <comment_count>4</comment_count>
      <attachid>203438</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-31 06:34:41 -0700</bug_when>
    <thetext>Comment on attachment 203438
Patch proposal

Attachment 203438 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/662392</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895870</commentid>
    <comment_count>5</comment_count>
      <attachid>203438</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-31 06:34:56 -0700</bug_when>
    <thetext>Comment on attachment 203438
Patch proposal

Attachment 203438 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/734182</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895878</commentid>
    <comment_count>6</comment_count>
      <attachid>203441</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-05-31 06:51:58 -0700</bug_when>
    <thetext>Created attachment 203441
Patch proposal

Make EWS bots happy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896077</commentid>
    <comment_count>7</comment_count>
      <attachid>203441</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-06-01 01:06:00 -0700</bug_when>
    <thetext>Comment on attachment 203441
Patch proposal

Looks like this is a couple patches appended?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896095</commentid>
    <comment_count>8</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-06-01 02:41:53 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 203441 [details])
&gt; Looks like this is a couple patches appended?

Not really. Although I agree we could split it into two separate things: maybe one for the refactoring and other for the implementation of WORD (based on that), or something like that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902282</commentid>
    <comment_count>9</comment_count>
      <attachid>203441</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-06-20 13:18:01 -0700</bug_when>
    <thetext>Comment on attachment 203441
Patch proposal

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

Sorry for the late review. I&apos;ve a couple questions about the patch. Nice testing!

&gt; Source/WebCore/ChangeLog:50
&gt; +

Double changelog here.

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:473
&gt; +static gint offsetAdjustmentForObject(const AccessibilityObject* object)

Maybe call this listItemMarkerOffsetForObject?

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:489
&gt; +static gint webCoreOffsetToAtkOffset(const AccessibilityObject* object, gint offset)

You shouldn&apos;t use glib types for private functions. So gint -&gt; int and for the rest of this patch.

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:544
&gt; +    Node* referenceNode = rangeStartNode-&gt;isInShadowTree() ? rangeStartNode-&gt;highestAncestor() : node;

Does the shadow DOM still exist?

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:644
&gt; +    // word following.

I&apos;m curious why you don&apos;t use things like startOfWord and endOfWord to do these tasks.

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:691
&gt; +        if (isStartOfWord(originalPosition) &amp;&amp; isWhitespace(originalPosition.characterBefore()))

In what situations can something be a start of a word and not prefixed by whitespace. Does this account for if this position is the very first position in the document?

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:700
&gt; +        endPosition = nextWordPosition(startPosition);

Why not endOfWord?

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:806
&gt; +        return webkitAccessibleTextGetWord(text, offset, boundaryType, textPosition, startOffset, endOffset);

webkitAccessibleTextGetWord -&gt; webkitAccessibleTextGetAtWordBoundary?

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:813
&gt; +    // has been properly implemented without using Pango/Cairo.
&gt;      GailOffsetType offsetType;
&gt;      switch (textPosition) {
&gt;      case GetTextPositionBefore:

I guess this isn&apos;t the last one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903672</commentid>
    <comment_count>10</comment_count>
      <attachid>203441</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-06-26 06:07:14 -0700</bug_when>
    <thetext>Comment on attachment 203441
Patch proposal

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

Thanks for the review Martin, and no problem for the delay. I&apos;ve been busy with other matters as well and wouldn&apos;t have had time before now anyway, so &quot;perfect timing&quot; in the end :).

Now see my comments below...

&gt;&gt; Source/WebCore/ChangeLog:50
&gt;&gt; +
&gt; 
&gt; Double changelog here.

Oops! Will fix that.

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:473
&gt;&gt; +static gint offsetAdjustmentForObject(const AccessibilityObject* object)
&gt; 
&gt; Maybe call this listItemMarkerOffsetForObject?

Well, the idea is that it might server for more adjustments in the future, not just the list item. That said, reality is that at this moment it is just about list items, so I&apos;m fine with changing the name now.

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:489
&gt;&gt; +static gint webCoreOffsetToAtkOffset(const AccessibilityObject* object, gint offset)
&gt; 
&gt; You shouldn&apos;t use glib types for private functions. So gint -&gt; int and for the rest of this patch.

Argh! Will fix it. Thx

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:544
&gt;&gt; +    Node* referenceNode = rangeStartNode-&gt;isInShadowTree() ? rangeStartNode-&gt;highestAncestor() : node;
&gt; 
&gt; Does the shadow DOM still exist?

At the time of writing this patch it did, but I will double check that.

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:644
&gt;&gt; +    // word following.
&gt; 
&gt; I&apos;m curious why you don&apos;t use things like startOfWord and endOfWord to do these tasks.

:-) Believe me I tried, but there&apos;s a explanation for that change:

The reason is that semantics for startOfWord() and endOfWord() are slightly different than what we need to do here, since we need to take into account different kind of boundaries (WORD_START, WORD_END), deal with special characters (e.g. the period or the &apos;+&apos;) in special ways to provide what ATs expect to receive when you ask things like &quot;What are the word boundaries for the current offset?&quot;. Also, startOfWord() and endOfWord() consider a &quot;whitespace between words&quot; as yet another &quot;word&quot;, which is clearly not what we want, and more things like that.

For instance, if you have the following sentence:

  &quot;This is a stupid sentence. WebKitGTK+ rocks. My taylor is rich&quot;

If you just use startOfWord() and endOfWord(), you could easily conclude that things like &quot; &quot;, &quot;. &quot; or &quot;+ &quot; are valid words for the WORD_START boundary, unless you do a lot of specific, case-by-case, tests.

However, if you use this &quot;trick&quot; going forward and backwards (which I got the idea for from FrameSelection.cpp, as per Enrica&apos;s comment while at the meeting), it&apos;s more easy to get the expected results without having to deal with all those special cases yourself, since are already considered in lower layers.

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:691
&gt;&gt; +        if (isStartOfWord(originalPosition) &amp;&amp; isWhitespace(originalPosition.characterBefore()))
&gt; 
&gt; In what situations can something be a start of a word and not prefixed by whitespace. Does this account for if this position is the very first position in the document?

According to the semantics of startOfWort(), which considers spaces between words as another &quot;word&quot;, you can get into this situation fairly easily.

For instance, if you have the &quot;foo bar baz&quot; string and you are in the 4th position (right at the end of &quot;foo&quot; and before the space), you would exactly be in that situation. Furthermore, if you call endOfWord() from that position you will be given the 5th position, right before &quot;baz&quot;, since that &quot; &quot; in the middle is a &quot;word&quot; to the eyes of those functions.

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:700
&gt;&gt; +        endPosition = nextWordPosition(startPosition);
&gt; 
&gt; Why not endOfWord?

Because that would return you the beginning of the word coming right after the end of the previous word, which is basically where the space between the two words ends (so you would have the boundaries for the whitespace between them).

If you have doubts and want to check your self what happens, think that nextWordPosition() works pretty similar to Ctrl+RightArrow when you have your cursor located in an editable text field. For instance, if you have the sentence &quot;foo bar baz&quot; and you put the cursor at the end of &quot;foo&quot;, what happens if you press Ctrl+RightArrow? You move to the end of &quot;bar&quot;, which is exactly what you want here. That&apos;s why :)

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:806
&gt;&gt; +        return webkitAccessibleTextGetWord(text, offset, boundaryType, textPosition, startOffset, endOffset);
&gt; 
&gt; webkitAccessibleTextGetWord -&gt; webkitAccessibleTextGetAtWordBoundary?

Ok

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:813
&gt;&gt;      case GetTextPositionBefore:
&gt; 
&gt; I guess this isn&apos;t the last one?

Nope. Unfortunately we still need one for LINE and other for SENTENCE boundaries. Hopefully those should be easier once we have the WORD boundary fixed, I believe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903711</commentid>
    <comment_count>11</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-06-26 08:05:00 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; [...]
&gt; &gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:806
&gt; &gt;&gt; +        return webkitAccessibleTextGetWord(text, offset, boundaryType, textPosition, startOffset, endOffset);
&gt; &gt; 
&gt; &gt; webkitAccessibleTextGetWord -&gt; webkitAccessibleTextGetAtWordBoundary?
&gt; 
&gt; Ok

Well, actually I would name it webkitAccessibleTextGetWordForBoundary() instead, since this static function is used internally for the AT, AFTER and BEFORE cases (see the textPosition param), not only the AT one.

Also, you are not getting anything &quot;at the word boundary&quot;, you are getting the word at/after/before the word at the specified offset :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904576</commentid>
    <comment_count>12</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-06-28 05:20:58 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 203441 [details] [details])
&gt; &gt; Looks like this is a couple patches appended?
&gt; 
&gt; Not really. Although I agree we could split it into two separate things: maybe
&gt; one for the refactoring and other for the implementation of WORD (based on
&gt; that), or something like that?

I did this splitting in the end. Find the patch for the refactoring waiting for review here: https://bugs.webkit.org/show_bug.cgi?id=118179</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907910</commentid>
    <comment_count>13</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-12 05:30:31 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; [...]
&gt; &gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:544
&gt; &gt;&gt; +    Node* referenceNode = rangeStartNode-&gt;isInShadowTree() ? rangeStartNode-&gt;highestAncestor() : node;
&gt; &gt; 
&gt; &gt; Does the shadow DOM still exist?
&gt; 
&gt; At the time of writing this patch it did, but I will double check that.

Sorry for the confusion with this. You were right, we do not have Shadow DOM in WebKitGTK+ and so this is not a valid approach anymore.

Fortunately, I&apos;ve been working in a new patch for this bug which uses a different approach (based on VisiblePositions) so we don&apos;t need this Shadow DOM thing anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907913</commentid>
    <comment_count>14</comment_count>
      <attachid>206528</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-12 05:35:23 -0700</bug_when>
    <thetext>Created attachment 206528
Patch proposal plus new Unit tests

After working for a while on the previous patch + the suggestions from Martin, I realized there were some issues with that patch that needed more changes, so here you have the new patch, which I believe works at least as well (or as bad) as the previous -pango based- implementation. I&apos;d even say it works better, at least in the tests I did, but I&apos;m prudent and won&apos;t say that :)

Additionally, I found some issues while developing it (some of them already present in the previous implementation) that I&apos;ve fixed along the way with this patch, so that&apos;s why I&apos;m also providing a new unit test for checking things related to embedded objects, and extending a bit previous ones.

I&apos;d therefore kindly ask for a review over this one and will move on to the LINE boundary in the meantime... getting closer to the no-pango thing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907914</commentid>
    <comment_count>15</comment_count>
      <attachid>206528</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-07-12 05:40:12 -0700</bug_when>
    <thetext>Comment on attachment 206528
Patch proposal plus new Unit tests

Attachment 206528 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/899774</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907915</commentid>
    <comment_count>16</comment_count>
      <attachid>206528</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-07-12 05:40:39 -0700</bug_when>
    <thetext>Comment on attachment 206528
Patch proposal plus new Unit tests

Attachment 206528 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/913794</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908355</commentid>
    <comment_count>17</comment_count>
      <attachid>206652</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-15 03:10:25 -0700</bug_when>
    <thetext>Created attachment 206652
Patch proposal plus new Unit tests

New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908940</commentid>
    <comment_count>18</comment_count>
      <attachid>206793</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-16 10:10:06 -0700</bug_when>
    <thetext>Created attachment 206793
Patch proposal plus new Layout test

... and yet another patch fixing a minor issue I found while working on the LINE boundary patch which, btw, I&apos;m attaching to bugzilla right now too :)

I know GTK reviewers are quite busy these days, but if we could get this ones reviewed soon that would be awesome. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910193</commentid>
    <comment_count>19</comment_count>
      <attachid>207115</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-19 10:07:09 -0700</bug_when>
    <thetext>Created attachment 207115
Patch proposal plus new Unit test

New patch after taking some stuff from the previous one out to a different bug (see bug 118908)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912550</commentid>
    <comment_count>20</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-29 10:34:37 -0700</bug_when>
    <thetext>Martin, would you mind reviewing this one now that the blocking bug 118908 has been fixed? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914077</commentid>
    <comment_count>21</comment_count>
      <attachid>207115</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-08-02 03:16:50 -0700</bug_when>
    <thetext>Comment on attachment 207115
Patch proposal plus new Unit test

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

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:645
&gt; +static gchar* webkitAccessibleTextGetChar(AtkText* text, gint offset, GetTextRelativePosition textPosition, gint* startOffset, gint* endOffset)

gchar -&gt; char, gint -&gt; int</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914166</commentid>
    <comment_count>22</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-08-02 09:00:04 -0700</bug_when>
    <thetext>Thanks Martin for reviewing this patch (the biggest one, btw!)

(In reply to comment #21)
&gt; (From update of attachment 207115 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=207115&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:645
&gt; &gt; +static gchar* webkitAccessibleTextGetChar(AtkText* text, gint offset, GetTextRelativePosition textPosition, gint* startOffset, gint* endOffset)
&gt; 
&gt; gchar -&gt; char, gint -&gt; int

I&apos;ll do that before landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914167</commentid>
    <comment_count>23</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-08-02 09:01:05 -0700</bug_when>
    <thetext>Committed r153652: &lt;http://trac.webkit.org/changeset/153652&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203426</attachid>
            <date>2013-05-31 02:34:57 -0700</date>
            <delta_ts>2013-05-31 06:30:16 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2013-05-30-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>19918</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA1MmFmOWMzY2QxOWE1Yzc5OWMyM2Q2MWEwNDgzNDdmYTczMTJlMjYwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogRnJpLCAxOSBBcHIgMjAxMyAxNDo0NDozMSArMDEwMApTdWJqZWN0OiBb
UEFUQ0hdIDIwMTMtMDUtMzAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZv
ciBXT1JECiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
NDg3MQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgUmUtaW1w
bGVtZW50IHRoaXMgZnVuY3Rpb25zIHdpdGhvdXQgdXNpbmcgR2FpbFRleHRVdGlsIG5vciBQYW5n
by4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
VGV4dC5jcHA6CiAgICAgICAgKGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QpOiBGaXggdGhl
IGxvZ2ljIHRvIHdvcmsgcHJvcGVybHkKICAgICAgICB3aXRoIFNoYWRvdyBET00gdHJlZXMgKGUu
Zy4gdGV4dCBpbnNpZGUgaW5wdXQgZmllbGRzKS4KICAgICAgICAobmV4dFdvcmRTdGFydFBvc2l0
aW9uKTogSGVscGVyIGZ1bmN0aW9uIHRvIHJlbGlhYmx5IGZpbmQgdGhlCiAgICAgICAgc3RhcnQg
b2YgdGhlIG5leHQgd29yZCBhcyBhbmQgdXNlciB3b3VsZCBkbyBpdCBieSBuYXZpZ2F0aW5nIHdp
dGgKICAgICAgICBDdHJsIGFuZCB0aGUgYXJyb3dzIChjb25zaWRlcmluZyBzcGFjZXMgYW5kIHB1
bmN0dWF0aW9uKS4KICAgICAgICAocHJldmlvdXNXb3JkRW5kUG9zaXRpb24pOiBTaW1pbGFyIHRv
IG5leHRXb3JkU3RhcnRQb3NpdGlvbiwgYnV0CiAgICAgICAgd3JpdHRlbiB0byBoZWxwIGZpbmQg
dGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgb25lLgogICAgICAgICh3b3JkQXRQb3NpdGlvbkZvckF0
a0JvdW5kYXJ5KTogSGVscGVyIGZ1bmN0aW9uIHRvIGZpbmRzIHRoZSB3b3JkCiAgICAgICAgYXQg
YSBnaXZlbiBwb3NpdGlvbiBjb25zaWRlcmluZyB2YWx1ZXMgb2YgQXRrVGV4dEJvdW5kYXJ5Lgog
ICAgICAgIChzdWJzdHJpbmdXaXRoTGluZUJyZWFrcyk6IEhlbHBlciBmdW5jdGlvbiB0aGF0IHJl
dHVybnMgYQogICAgICAgIHN1YnN0cmluZyBmb3IgYSBnaXZlbiBBdGtUZXh0IG9iamVjdCBjb25z
aWRlcmluZyBzdGFydCBhbmQgZW5kCiAgICAgICAgb2Zmc2V0cywgdmFsdWVzIGZvciBBdGtUZXh0
Qm91bmRhcnkgYW5kIHBvdGVudGlhbCBsaW5lIGJyZWFrcy4KICAgICAgICAod2Via2l0QWNjZXNz
aWJsZVRleHRHZXRXb3JkKTogTmV3IGZ1bmN0aW9uLCBpbXBsZW1lbnRpbmcKICAgICAgICBhdGtf
dGV4dF9nZXRfdGV4dF8qX29mZnNldCBmb3IgV09SRC4KICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRUZXh0Rm9yT2Zmc2V0KTogQ2FsbCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFdvcmQu
CgoyMDEzLTA1LTMwICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5j
b20+CgogICAgICAgIEltcGxlbWVudCBhdGtfdGV4dF9nZXRfdGV4dF8qX29mZnNldCBmb3IgV09S
RAogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ4NzEK
CiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFVwZGF0ZWQgdW5p
dCB0ZXN0cyB0byBjaGVjayBtb3JlIGNhc2VzIG9mIGNhbGxpbmcgdGhlCiAgICAgICAgYXRrX3Rl
eHRfZ2V0X3RleHRfKl9vZmZzZXQoKSBmdW5jdGlvbnMgZm9yIFdPUkQuCgogICAgICAgICogdGVz
dHMvdGVzdGF0ay5jOgogICAgICAgIChydW5HZXRUZXh0VGVzdHMpOiBBZGQgbW9yZSB0ZXN0cyBm
b3IgV09SRCBib3VuZGFyaWVzLgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAzOSArKysrKwogLi4uL2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAgICAgICAgICAgfCAgMTgyICsrKysrKysrKysrKysrKysrKystCiBT
b3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMg
KysKIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyAgICAgICAgICAgICAgICAgIHwg
ICAzMSArKystCiA0IGZpbGVzIGNoYW5nZWQsIDI1NiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9u
cygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAyYTlhYjg5Li40MmY2YTUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNDIgQEAKKzIwMTMtMDUtMzAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBz
YW1zdW5nLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZz
ZXQgZm9yIFdPUkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExNDg3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlLWltcGxlbWVudCB0aGlzIGZ1bmN0aW9ucyB3aXRob3V0IHVzaW5nIEdhaWxUZXh0VXRp
bCBub3IgUGFuZ28uCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2Jq
ZWN0KTogRml4IHRoZSBsb2dpYyB0byB3b3JrIHByb3Blcmx5CisgICAgICAgIHdpdGggU2hhZG93
IERPTSB0cmVlcyAoZS5nLiB0ZXh0IGluc2lkZSBpbnB1dCBmaWVsZHMpLgorICAgICAgICAobmV4
dFdvcmRTdGFydFBvc2l0aW9uKTogSGVscGVyIGZ1bmN0aW9uIHRvIHJlbGlhYmx5IGZpbmQgdGhl
CisgICAgICAgIHN0YXJ0IG9mIHRoZSBuZXh0IHdvcmQgYXMgYW5kIHVzZXIgd291bGQgZG8gaXQg
YnkgbmF2aWdhdGluZyB3aXRoCisgICAgICAgIEN0cmwgYW5kIHRoZSBhcnJvd3MgKGNvbnNpZGVy
aW5nIHNwYWNlcyBhbmQgcHVuY3R1YXRpb24pLgorICAgICAgICAocHJldmlvdXNXb3JkRW5kUG9z
aXRpb24pOiBTaW1pbGFyIHRvIG5leHRXb3JkU3RhcnRQb3NpdGlvbiwgYnV0CisgICAgICAgIHdy
aXR0ZW4gdG8gaGVscCBmaW5kIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIG9uZS4KKyAgICAgICAg
KHdvcmRBdFBvc2l0aW9uRm9yQXRrQm91bmRhcnkpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZmluZHMg
dGhlIHdvcmQKKyAgICAgICAgYXQgYSBnaXZlbiBwb3NpdGlvbiBjb25zaWRlcmluZyB2YWx1ZXMg
b2YgQXRrVGV4dEJvdW5kYXJ5LgorICAgICAgICAoc3Vic3RyaW5nV2l0aExpbmVCcmVha3MpOiBI
ZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEKKyAgICAgICAgc3Vic3RyaW5nIGZvciBhIGdp
dmVuIEF0a1RleHQgb2JqZWN0IGNvbnNpZGVyaW5nIHN0YXJ0IGFuZCBlbmQKKyAgICAgICAgb2Zm
c2V0cywgdmFsdWVzIGZvciBBdGtUZXh0Qm91bmRhcnkgYW5kIHBvdGVudGlhbCBsaW5lIGJyZWFr
cy4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0V29yZCk6IE5ldyBmdW5jdGlvbiwg
aW1wbGVtZW50aW5nCisgICAgICAgIGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZvciBXT1JE
LgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0Rm9yT2Zmc2V0KTogQ2FsbCB3
ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFdvcmQuCisKKzIwMTMtMDUtMzAgIE1hcmlvIFNhbmNoZXog
UHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYXRr
X3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDg3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgdW5pdCB0ZXN0cyB0byBjaGVjayBtb3Jl
IGNhc2VzIG9mIGNhbGxpbmcgdGhlCisgICAgICAgIGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0
KCkgZnVuY3Rpb25zIGZvciBXT1JELgorCisgICAgICAgICogdGVzdHMvdGVzdGF0ay5jOgorICAg
ICAgICAocnVuR2V0VGV4dFRlc3RzKTogQWRkIG1vcmUgdGVzdHMgZm9yIFdPUkQgYm91bmRhcmll
cy4KKwogMjAxMy0wNS0zMCAgRXVnZW5lIEtseXVjaG5pa292ICA8ZXVzdGFzQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBzZWxlY3Rpb25TdGFydC9zZWxlY3Rpb25FbmQgcmV0dXJuICJvYnNvbGV0
ZSIgdmFsdWVzIHdoZW4gcmVxdWVzdGVkIGR1cmluZyAiaW5wdXQiIGV2ZW50CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKaW5kZXggZTA2MzRmZS4uM2RiNmU4MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtNTA3LDE2ICs1MDcsMjIgQEAgc3RhdGlj
IHZvaWQgZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0LCBWaXNpYmwKICAgICBlbHNlCiAgICAgICAgIG5vZGVSYW5nZUVuZCA9IHNlbFJh
bmdlLT5lbmRQb3NpdGlvbigpOwogCi0gICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIG9mIHRoZSBz
ZWxlY3RlZCByYW5nZSBpbnNpZGUgdGhlIG9iamVjdC4KLSAgICBQb3NpdGlvbiBwYXJlbnRGaXJz
dFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2VJblBhcmVudCA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwg
cGFyZW50Rmlyc3RQb3NpdGlvbiwgbm9kZVJhbmdlU3RhcnQpOworICAgIC8vIENhbGN1bGF0ZSB0
aGUgcmVmZXJlbmNlIHBvc2l0aW9uIGZvciB0aGUgc2VsZWN0ZWQgcmFuZ2UgaW5zaWRlIHRoZSBv
YmplY3QuCisgICAgLy8gV2UgbmVlZCB0byBjb25zaWRlciBzcGVjaWFsIGNhc2VzIGxpa2UgaW5w
dXQgZmllbGRzIG90IHRleHQgYXJlYXMsIHdob3NlCisgICAgLy8gdGV4dCBub2RlcyBjb250YWlu
aW5nIHRoZSB0ZXh0IG1pZ2h0IGV4aXN0IGluc2lkZSBzaGFkb3cgRE9NIHRyZWVzLgorICAgIE5v
ZGUqIHJhbmdlU3RhcnROb2RlID0gbm9kZVJhbmdlU3RhcnQuY29udGFpbmVyTm9kZSgpOworICAg
IE5vZGUqIHJlZmVyZW5jZU5vZGUgPSByYW5nZVN0YXJ0Tm9kZS0+aXNJblNoYWRvd1RyZWUoKSA/
IHJhbmdlU3RhcnROb2RlLT5oaWdoZXN0QW5jZXN0b3IoKSA6IG5vZGU7CisKKyAgICBQb3NpdGlv
biByZWZlcmVuY2VQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShyZWZlcmVu
Y2VOb2RlKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlSW5QYXJlbnQgPSBSYW5nZTo6Y3JlYXRl
KG5vZGUtPmRvY3VtZW50KCksIHJlZmVyZW5jZVBvc2l0aW9uLCBub2RlUmFuZ2VTdGFydCk7CiAK
ICAgICAvLyBTZXQgdmFsdWVzIGZvciBzdGFydCBhbmQgZW5kIG9mZnNldHMuCiAgICAgc3RhcnRP
ZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlSW5QYXJlbnQuZ2V0KCksIHRy
dWUpOwogCi0gICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIG9mZnNldHMgZm9yIHRoZSBsaXN0
IGl0ZW0gbWFya2VyLgorICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBvZmZzZXRzIGZvciB0
aGUgbGlzdCBpdGVtIG1hcmtlciBpbgorICAgIC8vIExlZnQtVG8tUmlnaHQgdGV4dCwgc2luY2Ug
d2UgZXhwb3NlIGl0IHRvZ2V0aGVyIHdpdGggdGhlIHRleHQuCiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJl
bmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKKyAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlz
TGlzdEl0ZW0oKSAmJiByZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CiAg
ICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlciktPm1h
cmtlclRleHRXaXRoU3VmZml4KCk7CiAgICAgICAgIHN0YXJ0T2Zmc2V0ICs9IG1hcmtlclRleHQu
bGVuZ3RoKCk7CiAgICAgfQpAQCAtNjA3LDYgKzYxMywxNjUgQEAgc3RhdGljIGdjaGFyKiB3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldENoYXIoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEdldFRl
eHRSZWwKICAgICByZXR1cm4gZ191dGY4X3N1YnN0cmluZyh0ZXh0RGF0YS5nZXQoKSwgKnN0YXJ0
T2Zmc2V0LCAqZW5kT2Zmc2V0KTsKIH0KIAorc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0V29y
ZFN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZvcmlnaW5hbFBvc2l0aW9uKQor
eworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQgPSBuZXh0V29y
ZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOworCisgICAgLy8gSW4gb3JkZXIgdG8gc2tpcCBz
cGFjZXMgd2hlbiBtb3ZpbmcgcmlnaHQsIHdlIGFkdmFuY2Ugb25lIHdvcmQgZnVydGhlcgorICAg
IC8vIGFuZCB0aGVuIG1vdmUgb25lIHdvcmQgYmFjay4gVGhpcyB3aWxsIHB1dCB1cyBhdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZQorICAgIC8vIHdvcmQgZm9sbG93aW5nLgorICAgIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZvbGxvd2luZ1dvcmQgPSBuZXh0V29yZFBvc2l0
aW9uKHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCk7CisKKyAgICBpZiAocG9zaXRpb25BZnRlclNw
YWNpbmdBbmRGb2xsb3dpbmdXb3JkICE9IHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCkKKyAgICAg
ICAgcG9zaXRpb25BZnRlckN1cnJlbnRXb3JkID0gcHJldmlvdXNXb3JkUG9zaXRpb24ocG9zaXRp
b25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkKTsKKworICAgIGJvb2wgbW92aW5nQmFja3dh
cmRzTW92ZWRQb3NpdGlvblRvU3RhcnRPZkN1cnJlbnRXb3JkID0gcG9zaXRpb25BZnRlckN1cnJl
bnRXb3JkID09IHByZXZpb3VzV29yZFBvc2l0aW9uKG5leHRXb3JkUG9zaXRpb24ob3JpZ2luYWxQ
b3NpdGlvbikpOworICAgIGlmIChtb3ZpbmdCYWNrd2FyZHNNb3ZlZFBvc2l0aW9uVG9TdGFydE9m
Q3VycmVudFdvcmQpCisgICAgICAgIHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCA9IHBvc2l0aW9u
QWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZDsKKworICAgIHJldHVybiBwb3NpdGlvbkFmdGVy
Q3VycmVudFdvcmQ7Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNXb3JkRW5k
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZvcmlnaW5hbFBvc2l0aW9uKQoreworICAg
IC8vIFdlIG1vdmUgZm9yd2FyZCBhbmQgdGhlbiBiYWNrd2FyZCB0byBwb3NpdGlvbiBvdXJzZWx2
ZXMgYXQgdGhlIGJlZ2lubmluZworICAgIC8vIG9mIHRoZSBjdXJyZW50IHdvcmQgZm9yIHRoaXMg
Ym91bmRhcnksIG1ha2luZyB0aGUgbW9zdCBvZiB0aGUgc2VtYW50aWNzCisgICAgLy8gb2YgcHJl
dmlvdXNXb3JkUG9zaXRpb24oKSBhbmQgbmV4dFdvcmRQb3NpdGlvbigpLgorICAgIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkID0gcHJldmlvdXNXb3JkUG9zaXRp
b24obmV4dFdvcmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKSk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uQXRQcmV2aW91c1dvcmQgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihvcmlnaW5h
bFBvc2l0aW9uKTsKKworICAgIC8vIE5lZWQgdG8gY29uc2lkZXIgc3BlY2lhbCBjYXNlcyAocHVu
Y3R1YXRpb24pIHdoZW4gd2UgYXJlIGluIHRoZSBsYXN0IHdvcmQgb2YgYSBzZW50ZW5jZS4KKyAg
ICBpZiAoaXNTdGFydE9mV29yZChvcmlnaW5hbFBvc2l0aW9uKSAmJiBwb3NpdGlvbkF0UHJldmlv
dXNXb3JkICE9IG9yaWdpbmFsUG9zaXRpb24gJiYgcG9zaXRpb25BdFByZXZpb3VzV29yZCA9PSBw
b3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkKQorICAgICAgICByZXR1cm4gbmV4dFdvcmRQb3Np
dGlvbihwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkKTsKKworICAgIC8vIEluIG9yZGVyIHRv
IHNraXAgc3BhY2VzIHdoZW4gbW92aW5nIGxlZnQsIHdlIGFkdmFuY2Ugb25lIHdvcmQgYmFja3dh
cmRzCisgICAgLy8gYW5kIHRoZW4gbW92ZSBvbmUgd29yZCBmb3J3YXJkLiBUaGlzIHdpbGwgcHV0
IHVzIGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAvLyB0aGUgd29yZCBmb2xsb3dpbmcuCisgICAg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlU3BhY2luZ0FuZFByZWNlZWRpbmdXb3JkID0g
cHJldmlvdXNXb3JkUG9zaXRpb24ocG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCk7CisKKyAg
ICBpZiAocG9zaXRpb25CZWZvcmVTcGFjaW5nQW5kUHJlY2VlZGluZ1dvcmQgIT0gcG9zaXRpb25B
dFN0YXJ0T2ZDdXJyZW50V29yZCkKKyAgICAgICAgcG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29y
ZCA9IG5leHRXb3JkUG9zaXRpb24ocG9zaXRpb25CZWZvcmVTcGFjaW5nQW5kUHJlY2VlZGluZ1dv
cmQpOworCisgICAgYm9vbCBtb3ZpbmdGb3J3YXJkTW92ZWRQb3NpdGlvblRvRW5kT2ZDdXJyZW50
V29yZCA9IG5leHRXb3JkUG9zaXRpb24ocG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCkgPT0g
cHJldmlvdXNXb3JkUG9zaXRpb24obmV4dFdvcmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKSk7
CisgICAgaWYgKG1vdmluZ0ZvcndhcmRNb3ZlZFBvc2l0aW9uVG9FbmRPZkN1cnJlbnRXb3JkKQor
ICAgICAgICBwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkID0gcG9zaXRpb25CZWZvcmVTcGFj
aW5nQW5kUHJlY2VlZGluZ1dvcmQ7CisKKyAgICByZXR1cm4gcG9zaXRpb25BdFN0YXJ0T2ZDdXJy
ZW50V29yZDsKK30KKworc3RhdGljIFZpc2libGVTZWxlY3Rpb24gd29yZEF0UG9zaXRpb25Gb3JB
dGtCb3VuZGFyeShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlUG9zaXRp
b24gb3JpZ2luYWxQb3NpdGlvbiwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSkKK3sKKyAg
ICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbjsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5k
UG9zaXRpb247CisKKyAgICBzd2l0Y2ggKGJvdW5kYXJ5VHlwZSkgeworICAgIGNhc2UgQVRLX1RF
WFRfQk9VTkRBUllfV09SRF9TVEFSVDoKKyAgICAgICAgaWYgKGlzU3RhcnRPZldvcmQob3JpZ2lu
YWxQb3NpdGlvbikgJiYgaXNXaGl0ZXNwYWNlKG9yaWdpbmFsUG9zaXRpb24uY2hhcmFjdGVyQmVm
b3JlKCkpKQorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IG9yaWdpbmFsUG9zaXRpb247Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBwcmV2aW91c1dvcmRQb3Np
dGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgZW5kUG9zaXRpb24gPSBuZXh0V29yZFN0
YXJ0UG9zaXRpb24oc3RhcnRQb3NpdGlvbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBB
VEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORDoKKyAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHByZXZp
b3VzV29yZEVuZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOworICAgICAgICBlbmRQb3NpdGlv
biA9IG5leHRXb3JkUG9zaXRpb24oc3RhcnRQb3NpdGlvbik7CisgICAgICAgIGJyZWFrOworCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
Tm9kZSogbm9kZSA9IG9yaWdpbmFsUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJO
b2RlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShu
b2RlLT5kb2N1bWVudCgpLCBzdGFydFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCksIGVuZFBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCkpOworCisgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhh
dCB3ZSBsb29rIGZvciB0aGUgd29yZCBpbiB0aGUgY3VycmVudCBsaW5lIHdoZW4KKyAgICAvLyB3
ZSBhcmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBsaW5lLCBhbmQgbm90IGxvb2sgaW50byB0
aGUgcHJldmlvdXMgb25lCisgICAgLy8gYXQgYWxsLCB3aGljaCBtaWdodCBoYXBwZW4gd2hlbiBs
aW5lcyBiZWxvbmcgdG8gZGlmZmVyZW50IG5vZGVzLgorICAgIGlmIChib3VuZGFyeVR5cGUgPT0g
QVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCAmJiBpc1N0YXJ0T2ZMaW5lKG9yaWdpbmFsUG9z
aXRpb24pICYmIGlzU3RhcnRPZkxpbmUoZW5kUG9zaXRpb24pKSB7CisgICAgICAgIHN0YXJ0UG9z
aXRpb24gPSBlbmRQb3NpdGlvbjsKKyAgICAgICAgZW5kUG9zaXRpb24gPSBuZXh0V29yZFN0YXJ0
UG9zaXRpb24oc3RhcnRQb3NpdGlvbik7CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHN0YXJ0
UG9zaXRpb24gaXMgYWx3YXlzIGJlZm9yZSBlbmRQb3NpdGlvbiwgYmVmb3JlIHJldHVybmluZy4K
KyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBvcmRlcmVkUmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNp
YmxlUG9zaXRpb25SYW5nZUZvclVub3JkZXJlZFBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBlbmRQ
b3NpdGlvbik7CisgICAgcmV0dXJuIFZpc2libGVTZWxlY3Rpb24ob3JkZXJlZFJhbmdlLnN0YXJ0
LCBvcmRlcmVkUmFuZ2UuZW5kKTsKK30KKworc3RhdGljIGdjaGFyKiBzdWJzdHJpbmdXaXRoTGlu
ZUJyZWFrcyhBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0LCBnaW50IGVuZCwgQXRrVGV4dEJvdW5k
YXJ5IGJvdW5kYXJ5VHlwZSkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0
ID0gY29yZSh0ZXh0KTsKKyAgICBHT3duUHRyPGNoYXI+IHJlc3VsdFN0cmluZyh3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldFRleHQodGV4dCwgc3RhcnQsIGVuZCkpOworCisgICAgLy8gV2UgbmVlZCB0
byBjaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gYXBwZW5kIG9yIHByZXBlbmQgYSAnXG4nIHRvIHRo
ZSByZXN1bHQgdGV4dC4KKyAgICBWaXNpYmxlUG9zaXRpb24gd29yZFN0YXJ0ID0gY29yZU9iamVj
dC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoc3RhcnQpOworICAgIFZpc2libGVQb3NpdGlvbiB3
b3JkRW5kID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoZW5kKTsKKyAgICBz
d2l0Y2ggKGJvdW5kYXJ5VHlwZSkgeworICAgIGNhc2UgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9T
VEFSVDoKKyAgICAgICAgaWYgKChpc1N0YXJ0T2ZMaW5lKHdvcmRFbmQpICYmICFpc1N0YXJ0T2ZQ
YXJhZ3JhcGgod29yZEVuZCkpIHx8IChpc0VuZE9mTGluZSh3b3JkRW5kKSAmJiAhaXNFbmRPZlBh
cmFncmFwaCh3b3JkRW5kKSkpCisgICAgICAgICAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmKCIl
c1xuIiwgcmVzdWx0U3RyaW5nLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFU
S19URVhUX0JPVU5EQVJZX1dPUkRfRU5EOgorICAgICAgICBpZiAoKGlzU3RhcnRPZkxpbmUod29y
ZFN0YXJ0KSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKHdvcmRTdGFydCkpIHx8IChpc0VuZE9mTGlu
ZSh3b3JkU3RhcnQpICYmICFpc0VuZE9mUGFyYWdyYXBoKHdvcmRTdGFydCkpKQorICAgICAgICAg
ICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZigiXG4lcyIsIHJlc3VsdFN0cmluZy5nZXQoKSk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdFN0cmluZy5yZWxlYXNlKCk7Cit9CisKK3N0
YXRpYyBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRXb3JkKEF0a1RleHQqIHRleHQsIGdp
bnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRhcnlUeXBlLCBHZXRUZXh0UmVsYXRpdmVQ
b3NpdGlvbiB0ZXh0UG9zaXRpb24sIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQp
Cit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7Cisg
ICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGdfc3RyZHVwKCIiKTsKKworICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAg
ICAgICAgcmV0dXJuIGdfc3RyZHVwKCIiKTsKKworICAgIC8vIEZvciBtdWx0aXBsZSBjaGFyYWN0
ZXJzIHNlbGVjdGlvbiB3ZSB3aWxsIGFsd2F5cyBjb25zaWRlciB0aGUgZXh0ZW50CisgICAgLy8g
b2YgdGhhdCBzZWxlY3Rpb24gYXMgdGhlIG9yaWdpbmFsIHBvc2l0aW9uIG9mIHRoZSBjYXJldC4K
KyAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IGNvcmVPYmplY3QtPnZpc2libGVQ
b3NpdGlvbkZvckluZGV4KG9mZnNldCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3RlZFdv
cmQgPSB3b3JkQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KGNvcmVPYmplY3QsIGNhcmV0UG9zaXRp
b24sIGJvdW5kYXJ5VHlwZSk7CisKKyAgICAvLyBDb25zaWRlciBhbHNvIHRoZSBCRUZPUkUgYW5k
IEFGVEVSIHZhcmlhbnRzIG9mIHRoaXMgbWV0aG9kLgorICAgIGlmICh0ZXh0UG9zaXRpb24gIT0g
R2V0VGV4dFBvc2l0aW9uQXQpIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9sZFdvcmRTdGFy
dCA9IHNlbGVjdGVkV29yZC5zdGFydCgpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gb2xkV29y
ZEVuZCA9IHNlbGVjdGVkV29yZC5lbmQoKTsKKworICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3
UG9zaXRpb247CisgICAgICAgIHN3aXRjaCAodGV4dFBvc2l0aW9uKSB7CisgICAgICAgIGNhc2Ug
R2V0VGV4dFBvc2l0aW9uQmVmb3JlOgorICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzdGFydE9m
V29yZChvbGRXb3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQWZ0ZXI6CisgICAgICAgICAgICBu
ZXdQb3NpdGlvbiA9IGVuZE9mV29yZChvbGRXb3JkRW5kLCBSaWdodFdvcmRJZk9uQm91bmRhcnkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRyZWF0IGVkZ2UgY2Fz
ZXMgc2VwYXJhdGVseSAodGV4dCBiZWZvcmUgdGhlIGJlZ2lubmluZyBvciBhZnRlciB0aGUgZW5k
KS4KKyAgICAgICAgaWYgKG5ld1Bvc2l0aW9uID09IG9sZFdvcmRTdGFydCB8fCBuZXdQb3NpdGlv
biA9PSBvbGRXb3JkRW5kKSB7CisgICAgICAgICAgICAqc3RhcnRPZmZzZXQgPSBuZXdQb3NpdGlv
biA9PSBvbGRXb3JkU3RhcnQgPyAwIDogYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb3JlT2Jq
ZWN0KTsKKyAgICAgICAgICAgICplbmRPZmZzZXQgPSAqc3RhcnRPZmZzZXQ7CisgICAgICAgICAg
ICByZXR1cm4gZ19zdHJkdXAoIiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2VsZWN0IHdv
cmQgYXQgdGhlIG5ldyBwb3NpdGlvbi4KKyAgICAgICAgc2VsZWN0ZWRXb3JkID0gd29yZEF0UG9z
aXRpb25Gb3JBdGtCb3VuZGFyeShjb3JlT2JqZWN0LCBuZXdQb3NpdGlvbiwgYm91bmRhcnlUeXBl
KTsKKyAgICB9CisgICAgLy8gQ29udmVydCBWaXNpYmxlUG9zaXRpb25zIHRvIG9mZnNldHMgcmVs
YXRpdmUgdG8gdGhlIEF0a1RleHQgb2JqZWN0IHVuZGVyIGNvbnNpZGVyYXRpb24uCisgICAgZ2V0
U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdChjb3JlT2JqZWN0LCBzZWxlY3RlZFdvcmQsICpzdGFy
dE9mZnNldCwgKmVuZE9mZnNldCk7CisgICAgcmV0dXJuIHN1YnN0cmluZ1dpdGhMaW5lQnJlYWtz
KHRleHQsICpzdGFydE9mZnNldCwgKmVuZE9mZnNldCwgYm91bmRhcnlUeXBlKTsKK30KKwogc3Rh
dGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRGb3JPZmZzZXQoQXRrVGV4dCog
dGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUsIEdldFRleHRS
ZWxhdGl2ZVBvc2l0aW9uIHRleHRQb3NpdGlvbiwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVu
ZE9mZnNldCkKIHsKICAgICAvLyBNYWtlIHN1cmUgd2UgYWx3YXlzIHJldHVybiB2YWxpZCB2YWxp
ZCB2YWx1ZXMgZm9yIG9mZnNldHMuCkBAIC02MTYsOSArNzgxLDEyIEBAIHN0YXRpYyBnY2hhciog
d2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0Rm9yT2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQg
b2Zmc2V0LCBBCiAgICAgaWYgKGJvdW5kYXJ5VHlwZSA9PSBBVEtfVEVYVF9CT1VOREFSWV9DSEFS
KQogICAgICAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyKHRleHQsIG9mZnNl
dCwgdGV4dFBvc2l0aW9uLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIAorICAgIGlmIChib3Vu
ZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCB8fCBib3VuZGFyeVR5cGUg
PT0gQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQpCisgICAgICAgIHJldHVybiB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldFdvcmQodGV4dCwgb2Zmc2V0LCBib3VuZGFyeVR5cGUsIHRleHRQb3NpdGlv
biwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisKICNpZiBQTEFURk9STShHVEspCi0gICAgLy8g
RklYTUU6IEdldCByaWQgb2YgdGhlIGNvZGUgYmVsb3cgb25jZSBldmVyeSBzaW5nbGUgZ2V0X3Rl
eHRfKl9vZmZzZXQKLSAgICAvLyBmdW5jdGlvbiBoYXMgYmVlbiBwcm9wZXJseSBpbXBsZW1lbnRl
ZCB3aXRob3V0IHVzaW5nIFBhbmdvL0NhaXJvLgorICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRo
ZSBjb2RlIGJlbG93IG9uY2UgZXZlcnkgc2luZ2xlIHBhcnQgYWJvdmUKKyAgICAvLyBoYXMgYmVl
biBwcm9wZXJseSBpbXBsZW1lbnRlZCB3aXRob3V0IHVzaW5nIFBhbmdvL0NhaXJvLgogICAgIEdh
aWxPZmZzZXRUeXBlIG9mZnNldFR5cGU7CiAgICAgc3dpdGNoICh0ZXh0UG9zaXRpb24pIHsKICAg
ICBjYXNlIEdldFRleHRQb3NpdGlvbkJlZm9yZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAwNWEyNmU2
Li4wZTJhN2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDUtMzAg
IE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKworICAgICAg
ICBJbXBsZW1lbnQgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDg3MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgdW5pdCB0ZXN0
cyB0byBjaGVjayBtb3JlIGNhc2VzIG9mIGNhbGxpbmcgdGhlCisgICAgICAgIGF0a190ZXh0X2dl
dF90ZXh0Xypfb2Zmc2V0KCkgZnVuY3Rpb25zIGZvciBXT1JELgorCisgICAgICAgICogdGVzdHMv
dGVzdGF0ay5jOgorICAgICAgICAocnVuR2V0VGV4dFRlc3RzKTogQWRkIG1vcmUgdGVzdHMgZm9y
IFdPUkQgYm91bmRhcmllcy4KKwogMjAxMy0wNS0zMCAgRW5yaXF1ZSBPY2FuYSBHb256YWxleiAg
PGVvY2FuaGFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBGaXggcGFzc19ieV92YWx1ZSBj
b3Zlcml0eSB3YXJuaW5nIGluIENocm9tZUNsaWVudEd0awpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0
ay5jCmluZGV4IDEwNzE2NmEuLjM0MTI4YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3RhdGsuYworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMK
QEAgLTEzNiwxMiArMTM2LDIxIEBAIHN0YXRpYyB2b2lkIHJ1bkdldFRleHRUZXN0cyhBdGtUZXh0
KiB0ZXh0T2JqZWN0KQogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3Rl
eHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAogICAg
ICAgICAgICAgICAgICAgICAgICAgNTgsICJ0aGlyZC4iLCA1OCwgNjQpOwogCisgICAgdGVzdEdl
dFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFU
S19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCisgICAgICAgICAgICAgICAgICAgICAgICA2NCwg
InRoaXJkLiIsIDU4LCA2NCk7CisKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3Qs
IGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRf
U1RBUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAiIiwgMCwgMCk7CisKICAgICB0ZXN0
R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZz
ZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICA1LCAiVGhpcyAiLCAwLCA1KTsKIAogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVj
dCwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09S
RF9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgIDcsICJUaGlzICIsIDAsIDUpOwogCisg
ICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZv
cmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAorICAgICAgICAgICAgICAg
ICAgICAgICAgNjQsICJ0aGUgIiwgNTQsIDU4KTsKKwogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24o
dGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VO
REFSWV9XT1JEX1NUQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgMCwgImlzICIsIDUsIDgp
OwogCkBAIC0xNTEsNiArMTYwLDkgQEAgc3RhdGljIHZvaWQgcnVuR2V0VGV4dFRlc3RzKEF0a1Rl
eHQqIHRleHRPYmplY3QpCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtf
dGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAzLCAiaXMgIiwgNSwgOCk7CiAKKyAgICB0ZXN0R2V0
VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwg
QVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDY0
LCAiIiwgNjQsIDY0KTsKKwogICAgIC8qIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5EICovCiAg
ICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9v
ZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgIlRoaXMiLCAwLCA0KTsKQEAgLTE2NCw2ICsxNzYsMTUgQEAgc3RhdGljIHZvaWQgcnVu
R2V0VGV4dFRlc3RzKEF0a1RleHQqIHRleHRPYmplY3QpCiAgICAgdGVzdEdldFRleHRGdW5jdGlv
bih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5E
QVJZX1dPUkRfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgOSwgIiB0ZXN0IiwgOSwgMTQp
OwogCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4
dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAorICAgICAgICAgICAgICAg
ICAgICAgICAgNTgsICIgdGhpcmQiLCA1NywgNjMpOworCisgICAgdGVzdEdldFRleHRGdW5jdGlv
bih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5E
QVJZX1dPUkRfRU5ELAorICAgICAgICAgICAgICAgICAgICAgICAgNjQsICIuIiwgNjMsIDY0KTsK
KworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRf
YmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAwLCAiIiwgMCwgMCk7CisKICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRP
YmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZ
X1dPUkRfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgNSwgIlRoaXMiLCAwLCA0KTsKIApA
QCAtMTczLDE0ICsxOTQsMjAgQEAgc3RhdGljIHZvaWQgcnVuR2V0VGV4dFRlc3RzKEF0a1RleHQq
IHRleHRPYmplY3QpCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4
dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIDcsICIgaXMiLCA0LCA3KTsKIAorICAgIHRlc3RHZXRUZXh0
RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRL
X1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgICAgICAgICAgICAgICAgICAgICA2NCwgIiB0
aGlyZCIsIDU3LCA2Myk7CisKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0
a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQs
CisgICAgICAgICAgICAgICAgICAgICAgICAwLCAiIGlzIiwgNCwgNyk7CisKICAgICB0ZXN0R2V0
VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwg
QVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICA1LCAi
IGEiLCA3LCA5KTsKIAogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3Rl
eHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIDQsICIgYSIsIDcsIDkpOwogCi0gICAgdGVzdEdldFRleHRG
dW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhU
X0JPVU5EQVJZX1dPUkRfRU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgNTgsICIgdGhpcmQi
LCA1NywgNjMpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRf
Z2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIDY0LCAiIiwgNjQsIDY0KTsKIAogICAgIC8qIEFUS19URVhUX0JP
VU5EQVJZX1NFTlRFTkNFX1NUQVJUICovCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2Jq
ZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NFTlRF
TkNFX1NUQVJULAotLSAKMS43LjEwLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203438</attachid>
            <date>2013-05-31 06:30:16 -0700</date>
            <delta_ts>2013-05-31 06:51:58 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2013-05-30-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>25232</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBjYTdmNzk2NjA1YTNhOTdlMWZhMDdmYjUwMGY4ODFhMzE0NDZlYTAyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogRnJpLCAxOSBBcHIgMjAxMyAxNDo0NDozMSArMDEwMApTdWJqZWN0OiBb
UEFUQ0hdIDIwMTMtMDUtMzAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZv
ciBXT1JECiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
NDg3MQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgUmUtaW1w
bGVtZW50IHRoaXMgZnVuY3Rpb25zIHdpdGhvdXQgdXNpbmcgR2FpbFRleHRVdGlsIG5vciBQYW5n
by4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
VGV4dC5jcHA6CiAgICAgICAgKG9mZnNldEFkanVzdG1lbnRGb3JPYmplY3QpOiBIZWxwZXIgZnVu
Y3Rpb24gdG8gcmVmYWN0b3IgY29kZQogICAgICAgIG5lZWRlZCB0byB0cmFuc2xhdGUgb2Zmc2V0
cyBmcm9tIFdlYkNvcmUgdG8gQVRLIHdvcmxkcy4gQ3VycmVudGx5CiAgICAgICAgcmVsYXRlZCB0
byBjb25zaWRlcmluZyBsaXN0IGl0ZW0gbWFya2VycyBpbiBMVFIgdGV4dCBvbmx5LgogICAgICAg
ICh3ZWJDb3JlT2Zmc2V0VG9BdGtPZmZzZXQpOiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY29k
ZQogICAgICAgIHJlYWRhYmlsaXR5IHB1cnBvc2VzLiBJdCBqdXN0IGNhbGxzIG9mZnNldEFkanVz
dG1lbnRGb3JPYmplY3QuCiAgICAgICAgKGF0a09mZnNldFRvV2ViQ29yZU9mZnNldCk6IExpa2V3
aXNlLgogICAgICAgIChnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KTogRml4IHRoZSBsb2dp
YyB0byB3b3JrIHByb3Blcmx5CiAgICAgICAgd2l0aCBTaGFkb3cgRE9NIHRyZWVzIChlLmcuIHRl
eHQgaW5zaWRlIGlucHV0IGZpZWxkcykuCiAgICAgICAgKG5leHRXb3JkU3RhcnRQb3NpdGlvbik6
IEhlbHBlciBmdW5jdGlvbiB0byByZWxpYWJseSBmaW5kIHRoZQogICAgICAgIHN0YXJ0IG9mIHRo
ZSBuZXh0IHdvcmQgYXMgYW5kIHVzZXIgd291bGQgZG8gaXQgYnkgbmF2aWdhdGluZyB3aXRoCiAg
ICAgICAgQ3RybCBhbmQgdGhlIGFycm93cyAoY29uc2lkZXJpbmcgc3BhY2VzIGFuZCBwdW5jdHVh
dGlvbikuCiAgICAgICAgKHByZXZpb3VzV29yZEVuZFBvc2l0aW9uKTogU2ltaWxhciB0byBuZXh0
V29yZFN0YXJ0UG9zaXRpb24sIGJ1dAogICAgICAgIHdyaXR0ZW4gdG8gaGVscCBmaW5kIHRoZSBl
bmQgb2YgdGhlIHByZXZpb3VzIG9uZS4KICAgICAgICAod29yZEF0UG9zaXRpb25Gb3JBdGtCb3Vu
ZGFyeSk6IEhlbHBlciBmdW5jdGlvbiB0byBmaW5kcyB0aGUgd29yZAogICAgICAgIGF0IGEgZ2l2
ZW4gcG9zaXRpb24gY29uc2lkZXJpbmcgdmFsdWVzIG9mIEF0a1RleHRCb3VuZGFyeS4KICAgICAg
ICAoc3Vic3RyaW5nV2l0aExpbmVCcmVha3MpOiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5z
IGEKICAgICAgICBzdWJzdHJpbmcgZm9yIGEgZ2l2ZW4gQXRrVGV4dCBvYmplY3QgY29uc2lkZXJp
bmcgc3RhcnQgYW5kIGVuZAogICAgICAgIG9mZnNldHMsIHZhbHVlcyBmb3IgQXRrVGV4dEJvdW5k
YXJ5IGFuZCBwb3RlbnRpYWwgbGluZSBicmVha3MuCiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0V29yZCk6IE5ldyBmdW5jdGlvbiwgaW1wbGVtZW50aW5nCiAgICAgICAgYXRrX3RleHRf
Z2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQuCiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0VGV4dEZvck9mZnNldCk6IENhbGwgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRXb3JkLgogICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENhcmV0T2Zmc2V0KTogVXNlIHdlYkNvcmVPZmZz
ZXRUb0F0a09mZnNldAogICAgICAgIHRvIHRyYW5zbGF0ZSBhbiBvZmZzZXQgZnJvbSBXZWJDb3Jl
IHRvIEFUSyBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4
dFNldFNlbGVjdGlvbik6IFVzZSBhdGtPZmZzZXRUb1dlYkNvcmVPZmZzZXQKICAgICAgICB0byB0
cmFuc2xhdGUgYW4gb2Zmc2V0IGZyb20gV2ViQ29yZSB0byBBVEsgYmVmb3JlIHVzaW5nIGl0Lgog
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldENhcmV0T2Zmc2V0KTogTGlrZXdpc2UuCgoy
MDEzLTA1LTMwICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+
CgogICAgICAgIEltcGxlbWVudCBhdGtfdGV4dF9nZXRfdGV4dF8qX29mZnNldCBmb3IgV09SRAog
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ4NzEKCiAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFVwZGF0ZWQgdW5pdCB0
ZXN0cyB0byBjaGVjayBtb3JlIGNhc2VzIG9mIGNhbGxpbmcgdGhlCiAgICAgICAgYXRrX3RleHRf
Z2V0X3RleHRfKl9vZmZzZXQoKSBmdW5jdGlvbnMgZm9yIFdPUkQuCgogICAgICAgICogdGVzdHMv
dGVzdGF0ay5jOgogICAgICAgIChydW5HZXRUZXh0VGVzdHMpOiBBZGQgbW9yZSB0ZXN0cyBmb3Ig
V09SRCBib3VuZGFyaWVzLgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICA1MCArKysrCiAuLi4vYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUZXh0LmNwcCAgICAgICAgICB8ICAyNDkgKysrKysrKysrKysrKysrKystLS0KIFNvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArCiBT
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMgICAgICAgICAgICAgICAgICB8ICAgMzEg
KystCiA0IGZpbGVzIGNoYW5nZWQsIDMwNCBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggMmE5YWI4OS4uNjMwM2ZiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUz
IEBACisyMDEzLTA1LTMwICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZv
ciBXT1JECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTQ4NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZS1pbXBsZW1lbnQgdGhpcyBmdW5jdGlvbnMgd2l0aG91dCB1c2luZyBHYWlsVGV4dFV0aWwgbm9y
IFBhbmdvLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwOgorICAgICAgICAob2Zmc2V0QWRqdXN0bWVudEZvck9iamVjdCk6IEhl
bHBlciBmdW5jdGlvbiB0byByZWZhY3RvciBjb2RlCisgICAgICAgIG5lZWRlZCB0byB0cmFuc2xh
dGUgb2Zmc2V0cyBmcm9tIFdlYkNvcmUgdG8gQVRLIHdvcmxkcy4gQ3VycmVudGx5CisgICAgICAg
IHJlbGF0ZWQgdG8gY29uc2lkZXJpbmcgbGlzdCBpdGVtIG1hcmtlcnMgaW4gTFRSIHRleHQgb25s
eS4KKyAgICAgICAgKHdlYkNvcmVPZmZzZXRUb0F0a09mZnNldCk6IENvbnZlbmllbmNlIGZ1bmN0
aW9uIGZvciBjb2RlCisgICAgICAgIHJlYWRhYmlsaXR5IHB1cnBvc2VzLiBJdCBqdXN0IGNhbGxz
IG9mZnNldEFkanVzdG1lbnRGb3JPYmplY3QuCisgICAgICAgIChhdGtPZmZzZXRUb1dlYkNvcmVP
ZmZzZXQpOiBMaWtld2lzZS4KKyAgICAgICAgKGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3Qp
OiBGaXggdGhlIGxvZ2ljIHRvIHdvcmsgcHJvcGVybHkKKyAgICAgICAgd2l0aCBTaGFkb3cgRE9N
IHRyZWVzIChlLmcuIHRleHQgaW5zaWRlIGlucHV0IGZpZWxkcykuCisgICAgICAgIChuZXh0V29y
ZFN0YXJ0UG9zaXRpb24pOiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVsaWFibHkgZmluZCB0aGUKKyAg
ICAgICAgc3RhcnQgb2YgdGhlIG5leHQgd29yZCBhcyBhbmQgdXNlciB3b3VsZCBkbyBpdCBieSBu
YXZpZ2F0aW5nIHdpdGgKKyAgICAgICAgQ3RybCBhbmQgdGhlIGFycm93cyAoY29uc2lkZXJpbmcg
c3BhY2VzIGFuZCBwdW5jdHVhdGlvbikuCisgICAgICAgIChwcmV2aW91c1dvcmRFbmRQb3NpdGlv
bik6IFNpbWlsYXIgdG8gbmV4dFdvcmRTdGFydFBvc2l0aW9uLCBidXQKKyAgICAgICAgd3JpdHRl
biB0byBoZWxwIGZpbmQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgb25lLgorICAgICAgICAod29y
ZEF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeSk6IEhlbHBlciBmdW5jdGlvbiB0byBmaW5kcyB0aGUg
d29yZAorICAgICAgICBhdCBhIGdpdmVuIHBvc2l0aW9uIGNvbnNpZGVyaW5nIHZhbHVlcyBvZiBB
dGtUZXh0Qm91bmRhcnkuCisgICAgICAgIChzdWJzdHJpbmdXaXRoTGluZUJyZWFrcyk6IEhlbHBl
ciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYQorICAgICAgICBzdWJzdHJpbmcgZm9yIGEgZ2l2ZW4g
QXRrVGV4dCBvYmplY3QgY29uc2lkZXJpbmcgc3RhcnQgYW5kIGVuZAorICAgICAgICBvZmZzZXRz
LCB2YWx1ZXMgZm9yIEF0a1RleHRCb3VuZGFyeSBhbmQgcG90ZW50aWFsIGxpbmUgYnJlYWtzLgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRXb3JkKTogTmV3IGZ1bmN0aW9uLCBpbXBs
ZW1lbnRpbmcKKyAgICAgICAgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQuCisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRGb3JPZmZzZXQpOiBDYWxsIHdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0V29yZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
Q2FyZXRPZmZzZXQpOiBVc2Ugd2ViQ29yZU9mZnNldFRvQXRrT2Zmc2V0CisgICAgICAgIHRvIHRy
YW5zbGF0ZSBhbiBvZmZzZXQgZnJvbSBXZWJDb3JlIHRvIEFUSyBiZWZvcmUgcmV0dXJuaW5nIGl0
LgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRTZXRTZWxlY3Rpb24pOiBVc2UgYXRrT2Zm
c2V0VG9XZWJDb3JlT2Zmc2V0CisgICAgICAgIHRvIHRyYW5zbGF0ZSBhbiBvZmZzZXQgZnJvbSBX
ZWJDb3JlIHRvIEFUSyBiZWZvcmUgdXNpbmcgaXQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
VGV4dFNldENhcmV0T2Zmc2V0KTogTGlrZXdpc2UuCisKKzIwMTMtMDUtMzAgIE1hcmlvIFNhbmNo
ZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQg
YXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDg3MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgdW5pdCB0ZXN0cyB0byBjaGVjayBt
b3JlIGNhc2VzIG9mIGNhbGxpbmcgdGhlCisgICAgICAgIGF0a190ZXh0X2dldF90ZXh0Xypfb2Zm
c2V0KCkgZnVuY3Rpb25zIGZvciBXT1JELgorCisgICAgICAgICogdGVzdHMvdGVzdGF0ay5jOgor
ICAgICAgICAocnVuR2V0VGV4dFRlc3RzKTogQWRkIG1vcmUgdGVzdHMgZm9yIFdPUkQgYm91bmRh
cmllcy4KKwogMjAxMy0wNS0zMCAgRXVnZW5lIEtseXVjaG5pa292ICA8ZXVzdGFzQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBzZWxlY3Rpb25TdGFydC9zZWxlY3Rpb25FbmQgcmV0dXJuICJvYnNv
bGV0ZSIgdmFsdWVzIHdoZW4gcmVxdWVzdGVkIGR1cmluZyAiaW5wdXQiIGV2ZW50CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKaW5kZXggZTA2MzRmZS4uY2NhYzFjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtNDcwLDYgKzQ3MCwzNiBAQCBzdGF0
aWMgSW50UmVjdCB0ZXh0RXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBn
aW50IGxlbmd0aCwgQXRrQ29vcgogICAgIHJldHVybiBleHRlbnRzOwogfQogCitzdGF0aWMgZ3Vp
bnQgb2Zmc2V0QWRqdXN0bWVudEZvck9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmplY3QpCit7CisgICAgaWYgKCFvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBvZmZz
ZXRzIGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlciBpbgorICAgIC8vIExlZnQtVG8tUmlnaHQgdGV4
dCwgc2luY2Ugd2UgZXhwb3NlIGl0IHRvZ2V0aGVyIHdpdGggdGhlIHRleHQuCisgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIg
JiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSAmJiByZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9u
KCkgPT0gTFRSKSB7CisgICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRl
bShyZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7CisgICAgICAgIHJldHVybiBtYXJr
ZXJUZXh0Lmxlbmd0aCgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgZ3Vp
bnQgd2ViQ29yZU9mZnNldFRvQXRrT2Zmc2V0KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCwgZ3VpbnQgb2Zmc2V0KQoreworICAgIHJldHVybiBvZmZzZXQgKyBvZmZzZXRBZGp1c3Rt
ZW50Rm9yT2JqZWN0KG9iamVjdCk7Cit9CisKK3N0YXRpYyBndWludCBhdGtPZmZzZXRUb1dlYkNv
cmVPZmZzZXQoQXRrVGV4dCogdGV4dCwgZ3VpbnQgb2Zmc2V0KQoreworICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIGlmICghY29yZU9iamVjdCB8
fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJl
dHVybiBvZmZzZXQ7CisKKyAgICByZXR1cm4gb2Zmc2V0IC0gb2Zmc2V0QWRqdXN0bWVudEZvck9i
amVjdChjb3JlT2JqZWN0KTsKK30KKwogc3RhdGljIHZvaWQgZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zv
ck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24sIGdpbnQmIHN0YXJ0T2Zmc2V0LCBnaW50JiBlbmRPZmZzZXQpCiB7CiAgICAg
aWYgKCFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKQEAgLTUwNywx
OSArNTM3LDE3IEBAIHN0YXRpYyB2b2lkIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsCiAgICAgZWxzZQogICAgICAgICBu
b2RlUmFuZ2VFbmQgPSBzZWxSYW5nZS0+ZW5kUG9zaXRpb24oKTsKIAotICAgIC8vIENhbGN1bGF0
ZSBwb3NpdGlvbiBvZiB0aGUgc2VsZWN0ZWQgcmFuZ2UgaW5zaWRlIHRoZSBvYmplY3QuCi0gICAg
UG9zaXRpb24gcGFyZW50Rmlyc3RQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShub2RlKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlSW5QYXJlbnQgPSBSYW5nZTo6Y3JlYXRl
KG5vZGUtPmRvY3VtZW50KCksIHBhcmVudEZpcnN0UG9zaXRpb24sIG5vZGVSYW5nZVN0YXJ0KTsK
KyAgICAvLyBDYWxjdWxhdGUgdGhlIHJlZmVyZW5jZSBwb3NpdGlvbiBmb3IgdGhlIHNlbGVjdGVk
IHJhbmdlIGluc2lkZSB0aGUgb2JqZWN0LgorICAgIC8vIFdlIG5lZWQgdG8gY29uc2lkZXIgc3Bl
Y2lhbCBjYXNlcyBsaWtlIGlucHV0IGZpZWxkcyBvdCB0ZXh0IGFyZWFzLCB3aG9zZQorICAgIC8v
IHRleHQgbm9kZXMgY29udGFpbmluZyB0aGUgdGV4dCBtaWdodCBleGlzdCBpbnNpZGUgc2hhZG93
IERPTSB0cmVlcy4KKyAgICBOb2RlKiByYW5nZVN0YXJ0Tm9kZSA9IG5vZGVSYW5nZVN0YXJ0LmNv
bnRhaW5lck5vZGUoKTsKKyAgICBOb2RlKiByZWZlcmVuY2VOb2RlID0gcmFuZ2VTdGFydE5vZGUt
PmlzSW5TaGFkb3dUcmVlKCkgPyByYW5nZVN0YXJ0Tm9kZS0+aGlnaGVzdEFuY2VzdG9yKCkgOiBu
b2RlOwogCi0gICAgLy8gU2V0IHZhbHVlcyBmb3Igc3RhcnQgYW5kIGVuZCBvZmZzZXRzLgotICAg
IHN0YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZUluUGFyZW50Lmdl
dCgpLCB0cnVlKTsKKyAgICBQb3NpdGlvbiByZWZlcmVuY2VQb3NpdGlvbiA9IGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShyZWZlcmVuY2VOb2RlKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
SW5QYXJlbnQgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIHJlZmVyZW5jZVBvc2l0
aW9uLCBub2RlUmFuZ2VTdGFydCk7CiAKLSAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zm
c2V0cyBmb3IgdGhlIGxpc3QgaXRlbSBtYXJrZXIuCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVy
LT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxp
c3RJdGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLSAgICAgICAgc3RhcnRP
ZmZzZXQgKz0gbWFya2VyVGV4dC5sZW5ndGgoKTsKLSAgICB9CisgICAgLy8gU2V0IHZhbHVlcyBm
b3Igc3RhcnQgYW5kIGVuZCBvZmZzZXRzLgorICAgIHN0YXJ0T2Zmc2V0ID0gd2ViQ29yZU9mZnNl
dFRvQXRrT2Zmc2V0KGNvcmVPYmplY3QsIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VJ
blBhcmVudC5nZXQoKSwgdHJ1ZSkpOwogCiAgICAgUmVmUHRyPFJhbmdlPiBub2RlUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIG5vZGVSYW5nZVN0YXJ0LCBub2RlUmFuZ2VF
bmQpOwogICAgIGVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChub2RlUmFuZ2UuZ2V0KCksIHRydWUpOwpAQCAtNjA3LDYgKzYzNSwxNjQgQEAgc3RhdGlj
IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXIoQXRrVGV4dCogdGV4dCwgZ2ludCBv
ZmZzZXQsIEdldFRleHRSZWwKICAgICByZXR1cm4gZ191dGY4X3N1YnN0cmluZyh0ZXh0RGF0YS5n
ZXQoKSwgKnN0YXJ0T2Zmc2V0LCAqZW5kT2Zmc2V0KTsKIH0KIAorc3RhdGljIFZpc2libGVQb3Np
dGlvbiBuZXh0V29yZFN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZvcmlnaW5h
bFBvc2l0aW9uKQoreworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVyQ3VycmVudFdv
cmQgPSBuZXh0V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOworCisgICAgLy8gSW4gb3Jk
ZXIgdG8gc2tpcCBzcGFjZXMgd2hlbiBtb3ZpbmcgcmlnaHQsIHdlIGFkdmFuY2Ugb25lIHdvcmQg
ZnVydGhlcgorICAgIC8vIGFuZCB0aGVuIG1vdmUgb25lIHdvcmQgYmFjay4gVGhpcyB3aWxsIHB1
dCB1cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgIC8vIHdvcmQgZm9sbG93aW5nLgorICAg
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZvbGxvd2luZ1dvcmQgPSBu
ZXh0V29yZFBvc2l0aW9uKHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCk7CisKKyAgICBpZiAocG9z
aXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkICE9IHBvc2l0aW9uQWZ0ZXJDdXJyZW50
V29yZCkKKyAgICAgICAgcG9zaXRpb25BZnRlckN1cnJlbnRXb3JkID0gcHJldmlvdXNXb3JkUG9z
aXRpb24ocG9zaXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkKTsKKworICAgIGJvb2wg
bW92aW5nQmFja3dhcmRzTW92ZWRQb3NpdGlvblRvU3RhcnRPZkN1cnJlbnRXb3JkID0gcG9zaXRp
b25BZnRlckN1cnJlbnRXb3JkID09IHByZXZpb3VzV29yZFBvc2l0aW9uKG5leHRXb3JkUG9zaXRp
b24ob3JpZ2luYWxQb3NpdGlvbikpOworICAgIGlmIChtb3ZpbmdCYWNrd2FyZHNNb3ZlZFBvc2l0
aW9uVG9TdGFydE9mQ3VycmVudFdvcmQpCisgICAgICAgIHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29y
ZCA9IHBvc2l0aW9uQWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZDsKKworICAgIHJldHVybiBw
b3NpdGlvbkFmdGVyQ3VycmVudFdvcmQ7Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJl
dmlvdXNXb3JkRW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZvcmlnaW5hbFBvc2l0
aW9uKQoreworICAgIC8vIFdlIG1vdmUgZm9yd2FyZCBhbmQgdGhlbiBiYWNrd2FyZCB0byBwb3Np
dGlvbiBvdXJzZWx2ZXMgYXQgdGhlIGJlZ2lubmluZworICAgIC8vIG9mIHRoZSBjdXJyZW50IHdv
cmQgZm9yIHRoaXMgYm91bmRhcnksIG1ha2luZyB0aGUgbW9zdCBvZiB0aGUgc2VtYW50aWNzCisg
ICAgLy8gb2YgcHJldmlvdXNXb3JkUG9zaXRpb24oKSBhbmQgbmV4dFdvcmRQb3NpdGlvbigpLgor
ICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkID0gcHJldmlv
dXNXb3JkUG9zaXRpb24obmV4dFdvcmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKSk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQXRQcmV2aW91c1dvcmQgPSBwcmV2aW91c1dvcmRQb3Np
dGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKKworICAgIC8vIE5lZWQgdG8gY29uc2lkZXIgc3BlY2lh
bCBjYXNlcyAocHVuY3R1YXRpb24pIHdoZW4gd2UgYXJlIGluIHRoZSBsYXN0IHdvcmQgb2YgYSBz
ZW50ZW5jZS4KKyAgICBpZiAoaXNTdGFydE9mV29yZChvcmlnaW5hbFBvc2l0aW9uKSAmJiBwb3Np
dGlvbkF0UHJldmlvdXNXb3JkICE9IG9yaWdpbmFsUG9zaXRpb24gJiYgcG9zaXRpb25BdFByZXZp
b3VzV29yZCA9PSBwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkKQorICAgICAgICByZXR1cm4g
bmV4dFdvcmRQb3NpdGlvbihwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkKTsKKworICAgIC8v
IEluIG9yZGVyIHRvIHNraXAgc3BhY2VzIHdoZW4gbW92aW5nIGxlZnQsIHdlIGFkdmFuY2Ugb25l
IHdvcmQgYmFja3dhcmRzCisgICAgLy8gYW5kIHRoZW4gbW92ZSBvbmUgd29yZCBmb3J3YXJkLiBU
aGlzIHdpbGwgcHV0IHVzIGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAvLyB0aGUgd29yZCBmb2xs
b3dpbmcuCisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlU3BhY2luZ0FuZFByZWNl
ZWRpbmdXb3JkID0gcHJldmlvdXNXb3JkUG9zaXRpb24ocG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50
V29yZCk7CisKKyAgICBpZiAocG9zaXRpb25CZWZvcmVTcGFjaW5nQW5kUHJlY2VlZGluZ1dvcmQg
IT0gcG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCkKKyAgICAgICAgcG9zaXRpb25BdFN0YXJ0
T2ZDdXJyZW50V29yZCA9IG5leHRXb3JkUG9zaXRpb24ocG9zaXRpb25CZWZvcmVTcGFjaW5nQW5k
UHJlY2VlZGluZ1dvcmQpOworCisgICAgYm9vbCBtb3ZpbmdGb3J3YXJkTW92ZWRQb3NpdGlvblRv
RW5kT2ZDdXJyZW50V29yZCA9IG5leHRXb3JkUG9zaXRpb24ocG9zaXRpb25BdFN0YXJ0T2ZDdXJy
ZW50V29yZCkgPT0gcHJldmlvdXNXb3JkUG9zaXRpb24obmV4dFdvcmRQb3NpdGlvbihvcmlnaW5h
bFBvc2l0aW9uKSk7CisgICAgaWYgKG1vdmluZ0ZvcndhcmRNb3ZlZFBvc2l0aW9uVG9FbmRPZkN1
cnJlbnRXb3JkKQorICAgICAgICBwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkID0gcG9zaXRp
b25CZWZvcmVTcGFjaW5nQW5kUHJlY2VlZGluZ1dvcmQ7CisKKyAgICByZXR1cm4gcG9zaXRpb25B
dFN0YXJ0T2ZDdXJyZW50V29yZDsKK30KKworc3RhdGljIFZpc2libGVTZWxlY3Rpb24gd29yZEF0
UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBW
aXNpYmxlUG9zaXRpb24gb3JpZ2luYWxQb3NpdGlvbiwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5
VHlwZSkKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbjsKKyAgICBWaXNpYmxl
UG9zaXRpb24gZW5kUG9zaXRpb247CisKKyAgICBzd2l0Y2ggKGJvdW5kYXJ5VHlwZSkgeworICAg
IGNhc2UgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVDoKKyAgICAgICAgaWYgKGlzU3RhcnRP
ZldvcmQob3JpZ2luYWxQb3NpdGlvbikgJiYgaXNXaGl0ZXNwYWNlKG9yaWdpbmFsUG9zaXRpb24u
Y2hhcmFjdGVyQmVmb3JlKCkpKQorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IG9yaWdpbmFs
UG9zaXRpb247CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBwcmV2
aW91c1dvcmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgZW5kUG9zaXRpb24g
PSBuZXh0V29yZFN0YXJ0UG9zaXRpb24oc3RhcnRQb3NpdGlvbik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORDoKKyAgICAgICAgc3RhcnRQb3Np
dGlvbiA9IHByZXZpb3VzV29yZEVuZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOworICAgICAg
ICBlbmRQb3NpdGlvbiA9IG5leHRXb3JkUG9zaXRpb24oc3RhcnRQb3NpdGlvbik7CisgICAgICAg
IGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBsb29rIGZvciB0aGUg
d29yZCBpbiB0aGUgY3VycmVudCBsaW5lIHdoZW4KKyAgICAvLyB3ZSBhcmUgYXQgdGhlIGJlZ2lu
bmluZyBvZiBhIG5ldyBsaW5lLCBhbmQgbm90IGxvb2sgaW50byB0aGUgcHJldmlvdXMgb25lCisg
ICAgLy8gYXQgYWxsLCB3aGljaCBtaWdodCBoYXBwZW4gd2hlbiBsaW5lcyBiZWxvbmcgdG8gZGlm
ZmVyZW50IG5vZGVzLgorICAgIGlmIChib3VuZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllf
V09SRF9TVEFSVCAmJiBpc1N0YXJ0T2ZMaW5lKG9yaWdpbmFsUG9zaXRpb24pICYmIGlzU3RhcnRP
ZkxpbmUoZW5kUG9zaXRpb24pKSB7CisgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBlbmRQb3NpdGlv
bjsKKyAgICAgICAgZW5kUG9zaXRpb24gPSBuZXh0V29yZFN0YXJ0UG9zaXRpb24oc3RhcnRQb3Np
dGlvbik7CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHN0YXJ0UG9zaXRpb24gaXMgYWx3YXlz
IGJlZm9yZSBlbmRQb3NpdGlvbiwgYmVmb3JlIHJldHVybmluZy4KKyAgICBWaXNpYmxlUG9zaXRp
b25SYW5nZSBvcmRlcmVkUmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZv
clVub3JkZXJlZFBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgcmV0
dXJuIFZpc2libGVTZWxlY3Rpb24ob3JkZXJlZFJhbmdlLnN0YXJ0LCBvcmRlcmVkUmFuZ2UuZW5k
KTsKK30KKworc3RhdGljIGdjaGFyKiBzdWJzdHJpbmdXaXRoTGluZUJyZWFrcyhBdGtUZXh0KiB0
ZXh0LCBnaW50IHN0YXJ0LCBnaW50IGVuZCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSkK
K3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAg
ICBHT3duUHRyPGNoYXI+IHJlc3VsdFN0cmluZyh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQo
dGV4dCwgc3RhcnQsIGVuZCkpOworCisgICAgLy8gV2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIHdl
IG5lZWQgdG8gYXBwZW5kIG9yIHByZXBlbmQgYSAnXG4nIHRvIHRoZSByZXN1bHQgdGV4dC4KKyAg
ICBWaXNpYmxlUG9zaXRpb24gd29yZFN0YXJ0ID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9u
Rm9ySW5kZXgoc3RhcnQpOworICAgIFZpc2libGVQb3NpdGlvbiB3b3JkRW5kID0gY29yZU9iamVj
dC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoZW5kKTsKKyAgICBzd2l0Y2ggKGJvdW5kYXJ5VHlw
ZSkgeworICAgIGNhc2UgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVDoKKyAgICAgICAgaWYg
KChpc1N0YXJ0T2ZMaW5lKHdvcmRFbmQpICYmICFpc1N0YXJ0T2ZQYXJhZ3JhcGgod29yZEVuZCkp
IHx8IChpc0VuZE9mTGluZSh3b3JkRW5kKSAmJiAhaXNFbmRPZlBhcmFncmFwaCh3b3JkRW5kKSkp
CisgICAgICAgICAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmKCIlc1xuIiwgcmVzdWx0U3RyaW5n
LmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFUS19URVhUX0JPVU5EQVJZX1dP
UkRfRU5EOgorICAgICAgICBpZiAoKGlzU3RhcnRPZkxpbmUod29yZFN0YXJ0KSAmJiAhaXNTdGFy
dE9mUGFyYWdyYXBoKHdvcmRTdGFydCkpIHx8IChpc0VuZE9mTGluZSh3b3JkU3RhcnQpICYmICFp
c0VuZE9mUGFyYWdyYXBoKHdvcmRTdGFydCkpKQorICAgICAgICAgICAgcmV0dXJuIGdfc3RyZHVw
X3ByaW50ZigiXG4lcyIsIHJlc3VsdFN0cmluZy5nZXQoKSk7CisgICAgICAgIGJyZWFrOworCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdFN0cmluZy5yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBnY2hhciogd2Via2l0
QWNjZXNzaWJsZVRleHRHZXRXb3JkKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0
Qm91bmRhcnkgYm91bmRhcnlUeXBlLCBHZXRUZXh0UmVsYXRpdmVQb3NpdGlvbiB0ZXh0UG9zaXRp
b24sIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCit7CisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgaWYgKCFjb3JlT2JqZWN0
IHx8ICFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAg
cmV0dXJuIGdfc3RyZHVwKCIiKTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmpl
Y3QtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGdfc3Ry
ZHVwKCIiKTsKKworICAgIGludCBhY3R1YWxPZmZzZXQgPSBhdGtPZmZzZXRUb1dlYkNvcmVPZmZz
ZXQodGV4dCwgb2Zmc2V0KTsKKworICAgIC8vIEZvciBtdWx0aXBsZSBjaGFyYWN0ZXJzIHNlbGVj
dGlvbiB3ZSB3aWxsIGFsd2F5cyBjb25zaWRlciB0aGUgZXh0ZW50CisgICAgLy8gb2YgdGhhdCBz
ZWxlY3Rpb24gYXMgdGhlIG9yaWdpbmFsIHBvc2l0aW9uIG9mIHRoZSBjYXJldC4KKyAgICBWaXNp
YmxlUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvbkZv
ckluZGV4KGFjdHVhbE9mZnNldCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3RlZFdvcmQg
PSB3b3JkQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KGNvcmVPYmplY3QsIGNhcmV0UG9zaXRpb24s
IGJvdW5kYXJ5VHlwZSk7CisKKyAgICAvLyBDb25zaWRlciBhbHNvIHRoZSBCRUZPUkUgYW5kIEFG
VEVSIHZhcmlhbnRzIG9mIHRoaXMgbWV0aG9kLgorICAgIGlmICh0ZXh0UG9zaXRpb24gIT0gR2V0
VGV4dFBvc2l0aW9uQXQpIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9sZFdvcmRTdGFydCA9
IHNlbGVjdGVkV29yZC5zdGFydCgpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gb2xkV29yZEVu
ZCA9IHNlbGVjdGVkV29yZC5lbmQoKTsKKworICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3UG9z
aXRpb247CisgICAgICAgIHN3aXRjaCAodGV4dFBvc2l0aW9uKSB7CisgICAgICAgIGNhc2UgR2V0
VGV4dFBvc2l0aW9uQmVmb3JlOgorICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzdGFydE9mV29y
ZChvbGRXb3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQWZ0ZXI6CisgICAgICAgICAgICBuZXdQ
b3NpdGlvbiA9IGVuZE9mV29yZChvbGRXb3JkRW5kLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRyZWF0IGVkZ2UgY2FzZXMg
c2VwYXJhdGVseSAodGV4dCBiZWZvcmUgdGhlIGJlZ2lubmluZyBvciBhZnRlciB0aGUgZW5kKS4K
KyAgICAgICAgaWYgKG5ld1Bvc2l0aW9uID09IG9sZFdvcmRTdGFydCB8fCBuZXdQb3NpdGlvbiA9
PSBvbGRXb3JkRW5kKSB7CisgICAgICAgICAgICAqc3RhcnRPZmZzZXQgPSBuZXdQb3NpdGlvbiA9
PSBvbGRXb3JkU3RhcnQgPyAwIDogYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb3JlT2JqZWN0
KTsKKyAgICAgICAgICAgICplbmRPZmZzZXQgPSAqc3RhcnRPZmZzZXQ7CisgICAgICAgICAgICBy
ZXR1cm4gZ19zdHJkdXAoIiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2VsZWN0IHdvcmQg
YXQgdGhlIG5ldyBwb3NpdGlvbi4KKyAgICAgICAgc2VsZWN0ZWRXb3JkID0gd29yZEF0UG9zaXRp
b25Gb3JBdGtCb3VuZGFyeShjb3JlT2JqZWN0LCBuZXdQb3NpdGlvbiwgYm91bmRhcnlUeXBlKTsK
KyAgICB9CisgICAgLy8gQ29udmVydCBWaXNpYmxlUG9zaXRpb25zIHRvIG9mZnNldHMgcmVsYXRp
dmUgdG8gdGhlIEF0a1RleHQgb2JqZWN0IHVuZGVyIGNvbnNpZGVyYXRpb24uCisgICAgZ2V0U2Vs
ZWN0aW9uT2Zmc2V0c0Zvck9iamVjdChjb3JlT2JqZWN0LCBzZWxlY3RlZFdvcmQsICpzdGFydE9m
ZnNldCwgKmVuZE9mZnNldCk7CisgICAgcmV0dXJuIHN1YnN0cmluZ1dpdGhMaW5lQnJlYWtzKHRl
eHQsICpzdGFydE9mZnNldCwgKmVuZE9mZnNldCwgYm91bmRhcnlUeXBlKTsKK30KKwogc3RhdGlj
IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRGb3JPZmZzZXQoQXRrVGV4dCogdGV4
dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUsIEdldFRleHRSZWxh
dGl2ZVBvc2l0aW9uIHRleHRQb3NpdGlvbiwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9m
ZnNldCkKIHsKICAgICAvLyBNYWtlIHN1cmUgd2UgYWx3YXlzIHJldHVybiB2YWxpZCB2YWxpZCB2
YWx1ZXMgZm9yIG9mZnNldHMuCkBAIC02MTYsOSArODAyLDEyIEBAIHN0YXRpYyBnY2hhciogd2Vi
a2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0Rm9yT2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zm
c2V0LCBBCiAgICAgaWYgKGJvdW5kYXJ5VHlwZSA9PSBBVEtfVEVYVF9CT1VOREFSWV9DSEFSKQog
ICAgICAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyKHRleHQsIG9mZnNldCwg
dGV4dFBvc2l0aW9uLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIAorICAgIGlmIChib3VuZGFy
eVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCB8fCBib3VuZGFyeVR5cGUgPT0g
QVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQpCisgICAgICAgIHJldHVybiB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldFdvcmQodGV4dCwgb2Zmc2V0LCBib3VuZGFyeVR5cGUsIHRleHRQb3NpdGlvbiwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisKICNpZiBQTEFURk9STShHVEspCi0gICAgLy8gRklY
TUU6IEdldCByaWQgb2YgdGhlIGNvZGUgYmVsb3cgb25jZSBldmVyeSBzaW5nbGUgZ2V0X3RleHRf
Kl9vZmZzZXQKLSAgICAvLyBmdW5jdGlvbiBoYXMgYmVlbiBwcm9wZXJseSBpbXBsZW1lbnRlZCB3
aXRob3V0IHVzaW5nIFBhbmdvL0NhaXJvLgorICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoZSBj
b2RlIGJlbG93IG9uY2UgZXZlcnkgc2luZ2xlIHBhcnQgYWJvdmUKKyAgICAvLyBoYXMgYmVlbiBw
cm9wZXJseSBpbXBsZW1lbnRlZCB3aXRob3V0IHVzaW5nIFBhbmdvL0NhaXJvLgogICAgIEdhaWxP
ZmZzZXRUeXBlIG9mZnNldFR5cGU7CiAgICAgc3dpdGNoICh0ZXh0UG9zaXRpb24pIHsKICAgICBj
YXNlIEdldFRleHRQb3NpdGlvbkJlZm9yZToKQEAgLTY4MywxNiArODcyLDcgQEAgc3RhdGljIGdp
bnQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDYXJldE9mZnNldChBdGtUZXh0KiB0ZXh0KQogICAg
IGlmICghb2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKGNvcmVPYmplY3QsIG9m
ZnNldCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5p
c0xpc3RJdGVtKCkpIHsKLSAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJ
dGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLQotICAgICAgICAvLyBXZSBu
ZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0IGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KLSAgICAg
ICAgb2Zmc2V0ICs9IG1hcmtlclRleHQubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgLy8gVE9ETzog
VmVyaWZ5IHRoaXMgZm9yIFJUTCB0ZXh0LgotICAgIHJldHVybiBvZmZzZXQ7CisgICAgcmV0dXJu
IHdlYkNvcmVPZmZzZXRUb0F0a09mZnNldChjb3JlT2JqZWN0LCBvZmZzZXQpOwogfQogCiBzdGF0
aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJ1bkF0dHJpYnV0ZXMo
QXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRP
ZmZzZXQpCkBAIC04MjQsMTUgKzEwMDQsMTMgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdEFjY2Vz
c2libGVUZXh0U2V0U2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnUKICAg
ICAgICAgZW5kT2Zmc2V0ID0gdGV4dENvdW50OwogCiAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3Qg
dGhlIG9mZnNldHMgZm9yIHRoZSBsaXN0IGl0ZW0gbWFya2VyLgotICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBjb3JlT2JqZWN0LT5yZW5kZXJlcigpOwotICAgIGlmIChyZW5kZXJlciAmJiBy
ZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7Ci0gICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9S
ZW5kZXJMaXN0SXRlbShyZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7Ci0gICAgICAg
IGludCBtYXJrZXJMZW5ndGggPSBtYXJrZXJUZXh0Lmxlbmd0aCgpOwotICAgICAgICBpZiAoc3Rh
cnRPZmZzZXQgPCBtYXJrZXJMZW5ndGggfHwgZW5kT2Zmc2V0IDwgbWFya2VyTGVuZ3RoKQorICAg
IGd1aW50IG9mZnNldEFkanVzdG1lbnQgPSBvZmZzZXRBZGp1c3RtZW50Rm9yT2JqZWN0KGNvcmVP
YmplY3QpOworICAgIGlmIChvZmZzZXRBZGp1c3RtZW50KSB7CisgICAgICAgIGlmIChzdGFydE9m
ZnNldCA8IG9mZnNldEFkanVzdG1lbnQgfHwgZW5kT2Zmc2V0IDwgb2Zmc2V0QWRqdXN0bWVudCkK
ICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKIAotICAgICAgICBzdGFydE9mZnNldCAtPSBtYXJr
ZXJMZW5ndGg7Ci0gICAgICAgIGVuZE9mZnNldCAtPSBtYXJrZXJMZW5ndGg7CisgICAgICAgIHN0
YXJ0T2Zmc2V0ID0gYXRrT2Zmc2V0VG9XZWJDb3JlT2Zmc2V0KHRleHQsIHN0YXJ0T2Zmc2V0KTsK
KyAgICAgICAgZW5kT2Zmc2V0ID0gYXRrT2Zmc2V0VG9XZWJDb3JlT2Zmc2V0KHRleHQsIGVuZE9m
ZnNldCk7CiAgICAgfQogCiAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlKHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7CkBAIC04NjcsMTUgKzEwNDUsMTIgQEAgc3RhdGlj
IGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0Q2FyZXRPZmZzZXQoQXRrVGV4dCogdGV4
dCwgZ2ludCBvZmZzZXQpCiAgICAgaWYgKCFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJl
bmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1Jl
bmRlckxpc3RJdGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLSAgICAgICAg
aW50IG1hcmtlckxlbmd0aCA9IG1hcmtlclRleHQubGVuZ3RoKCk7Ci0gICAgICAgIGlmIChvZmZz
ZXQgPCBtYXJrZXJMZW5ndGgpCisgICAgZ3VpbnQgb2Zmc2V0QWRqdXN0bWVudCA9IG9mZnNldEFk
anVzdG1lbnRGb3JPYmplY3QoY29yZU9iamVjdCk7CisgICAgaWYgKG9mZnNldEFkanVzdG1lbnQp
IHsKKyAgICAgICAgaWYgKG9mZnNldCA8IG9mZnNldEFkanVzdG1lbnQpCiAgICAgICAgICAgICBy
ZXR1cm4gRkFMU0U7CiAKLSAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIG9mZnNldCBm
b3IgbGlzdCBpdGVtcy4KLSAgICAgICAgb2Zmc2V0IC09IG1hcmtlckxlbmd0aDsKKyAgICAgICAg
b2Zmc2V0ID0gYXRrT2Zmc2V0VG9XZWJDb3JlT2Zmc2V0KHRleHQsIG9mZnNldCk7CiAgICAgfQog
CiAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlKG9mZnNldCwgMCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cK
aW5kZXggMDVhMjZlNi4uMGUyYTdiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBA
CisyMDEzLTA1LTMwICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5j
b20+CisKKyAgICAgICAgSW1wbGVtZW50IGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZvciBX
T1JECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ4
NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGVkIHVuaXQgdGVzdHMgdG8gY2hlY2sgbW9yZSBjYXNlcyBvZiBjYWxsaW5nIHRoZQorICAgICAg
ICBhdGtfdGV4dF9nZXRfdGV4dF8qX29mZnNldCgpIGZ1bmN0aW9ucyBmb3IgV09SRC4KKworICAg
ICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKKyAgICAgICAgKHJ1bkdldFRleHRUZXN0cyk6IEFkZCBt
b3JlIHRlc3RzIGZvciBXT1JEIGJvdW5kYXJpZXMuCisKIDIwMTMtMDUtMzAgIEVucmlxdWUgT2Nh
bmEgR29uemFsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gRml4IHBh
c3NfYnlfdmFsdWUgY292ZXJpdHkgd2FybmluZyBpbiBDaHJvbWVDbGllbnRHdGsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3RhdGsuYwppbmRleCAxMDcxNjZhLi4zNDEyOGIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKKysrIGIvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGF0ay5jCkBAIC0xMzYsMTIgKzEzNiwyMSBAQCBzdGF0aWMgdm9pZCBydW5HZXRUZXh0
VGVzdHMoQXRrVGV4dCogdGV4dE9iamVjdCkKICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRP
YmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09S
RF9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgIDU4LCAidGhpcmQuIiwgNTgsIDY0KTsK
IAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRf
YXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAorICAgICAgICAgICAgICAg
ICAgICAgICAgNjQsICJ0aGlyZC4iLCA1OCwgNjQpOworCisgICAgdGVzdEdldFRleHRGdW5jdGlv
bih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9C
T1VOREFSWV9XT1JEX1NUQVJULAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgIiIsIDAsIDAp
OworCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4
dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAogICAgICAgICAg
ICAgICAgICAgICAgICAgNSwgIlRoaXMgIiwgMCwgNSk7CiAKICAgICB0ZXN0R2V0VGV4dEZ1bmN0
aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhU
X0JPVU5EQVJZX1dPUkRfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICA3LCAiVGhpcyAi
LCAwLCA1KTsKIAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRf
Z2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIDY0LCAidGhlICIsIDU0LCA1OCk7CisKICAgICB0ZXN0R2V0
VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwg
QVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgIDAs
ICJpcyAiLCA1LCA4KTsKIApAQCAtMTUxLDYgKzE2MCw5IEBAIHN0YXRpYyB2b2lkIHJ1bkdldFRl
eHRUZXN0cyhBdGtUZXh0KiB0ZXh0T2JqZWN0KQogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4
dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFS
WV9XT1JEX1NUQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgMywgImlzICIsIDUsIDgpOwog
CisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9h
ZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCisgICAgICAgICAgICAg
ICAgICAgICAgICA2NCwgIiIsIDY0LCA2NCk7CisKICAgICAvKiBBVEtfVEVYVF9CT1VOREFSWV9X
T1JEX0VORCAqLwogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRf
Z2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsICJUaGlzIiwgMCwgNCk7CkBAIC0xNjQsNiArMTc2LDE1IEBAIHN0
YXRpYyB2b2lkIHJ1bkdldFRleHRUZXN0cyhBdGtUZXh0KiB0ZXh0T2JqZWN0KQogICAgIHRlc3RH
ZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBB
VEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgIDksICIg
dGVzdCIsIDksIDE0KTsKIAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRr
X3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIDU4LCAiIHRoaXJkIiwgNTcsIDYzKTsKKworICAgIHRlc3RH
ZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBB
VEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDY0LCAi
LiIsIDYzLCA2NCk7CisKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190
ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAor
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgIiIsIDAsIDApOworCiAgICAgdGVzdEdldFRleHRG
dW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtf
VEVYVF9CT1VOREFSWV9XT1JEX0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgIDUsICJUaGlz
IiwgMCwgNCk7CiAKQEAgLTE3MywxNCArMTk0LDIwIEBAIHN0YXRpYyB2b2lkIHJ1bkdldFRleHRU
ZXN0cyhBdGtUZXh0KiB0ZXh0T2JqZWN0KQogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9i
amVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllf
V09SRF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICA3LCAiIGlzIiwgNCwgNyk7CiAKKyAg
ICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9y
ZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAorICAgICAgICAgICAgICAgICAg
ICAgICAgNjQsICIgdGhpcmQiLCA1NywgNjMpOworCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0
ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5E
QVJZX1dPUkRfRU5ELAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgIiBpcyIsIDQsIDcpOwor
CiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9h
ZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAgICAg
ICAgICAgICAgNSwgIiBhIiwgNywgOSk7CiAKICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRP
YmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllf
V09SRF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICA0LCAiIGEiLCA3LCA5KTsKIAotICAg
IHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zm
c2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IDU4LCAiIHRoaXJkIiwgNTcsIDYzKTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmpl
Y3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09S
RF9FTkQsCisgICAgICAgICAgICAgICAgICAgICAgICA2NCwgIiIsIDY0LCA2NCk7CiAKICAgICAv
KiBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCAqLwogICAgIHRlc3RHZXRUZXh0RnVu
Y3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9C
T1VOREFSWV9TRU5URU5DRV9TVEFSVCwKLS0gCjEuNy4xMC40Cgo=
</data>
<flag name="commit-queue"
          id="224895"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203441</attachid>
            <date>2013-05-31 06:51:58 -0700</date>
            <delta_ts>2013-07-12 05:35:23 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2013-05-30-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>25225</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA3MjA1Y2M3YTUzYzYyYzMyZjEyOWI0YTY0YmZhMDk3ZDc1NWQ1MGZiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogRnJpLCAxOSBBcHIgMjAxMyAxNDo0NDozMSArMDEwMApTdWJqZWN0OiBb
UEFUQ0hdIDIwMTMtMDUtMzAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZv
ciBXT1JECiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
NDg3MQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgUmUtaW1w
bGVtZW50IHRoaXMgZnVuY3Rpb25zIHdpdGhvdXQgdXNpbmcgR2FpbFRleHRVdGlsIG5vciBQYW5n
by4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
VGV4dC5jcHA6CiAgICAgICAgKG9mZnNldEFkanVzdG1lbnRGb3JPYmplY3QpOiBIZWxwZXIgZnVu
Y3Rpb24gdG8gcmVmYWN0b3IgY29kZQogICAgICAgIG5lZWRlZCB0byB0cmFuc2xhdGUgb2Zmc2V0
cyBmcm9tIFdlYkNvcmUgdG8gQVRLIHdvcmxkcy4gQ3VycmVudGx5CiAgICAgICAgcmVsYXRlZCB0
byBjb25zaWRlcmluZyBsaXN0IGl0ZW0gbWFya2VycyBpbiBMVFIgdGV4dCBvbmx5LgogICAgICAg
ICh3ZWJDb3JlT2Zmc2V0VG9BdGtPZmZzZXQpOiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY29k
ZQogICAgICAgIHJlYWRhYmlsaXR5IHB1cnBvc2VzLiBJdCBqdXN0IGNhbGxzIG9mZnNldEFkanVz
dG1lbnRGb3JPYmplY3QuCiAgICAgICAgKGF0a09mZnNldFRvV2ViQ29yZU9mZnNldCk6IExpa2V3
aXNlLgogICAgICAgIChnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KTogRml4IHRoZSBsb2dp
YyB0byB3b3JrIHByb3Blcmx5CiAgICAgICAgd2l0aCBTaGFkb3cgRE9NIHRyZWVzIChlLmcuIHRl
eHQgaW5zaWRlIGlucHV0IGZpZWxkcykuCiAgICAgICAgKG5leHRXb3JkU3RhcnRQb3NpdGlvbik6
IEhlbHBlciBmdW5jdGlvbiB0byByZWxpYWJseSBmaW5kIHRoZQogICAgICAgIHN0YXJ0IG9mIHRo
ZSBuZXh0IHdvcmQgYXMgYW5kIHVzZXIgd291bGQgZG8gaXQgYnkgbmF2aWdhdGluZyB3aXRoCiAg
ICAgICAgQ3RybCBhbmQgdGhlIGFycm93cyAoY29uc2lkZXJpbmcgc3BhY2VzIGFuZCBwdW5jdHVh
dGlvbikuCiAgICAgICAgKHByZXZpb3VzV29yZEVuZFBvc2l0aW9uKTogU2ltaWxhciB0byBuZXh0
V29yZFN0YXJ0UG9zaXRpb24sIGJ1dAogICAgICAgIHdyaXR0ZW4gdG8gaGVscCBmaW5kIHRoZSBl
bmQgb2YgdGhlIHByZXZpb3VzIG9uZS4KICAgICAgICAod29yZEF0UG9zaXRpb25Gb3JBdGtCb3Vu
ZGFyeSk6IEhlbHBlciBmdW5jdGlvbiB0byBmaW5kcyB0aGUgd29yZAogICAgICAgIGF0IGEgZ2l2
ZW4gcG9zaXRpb24gY29uc2lkZXJpbmcgdmFsdWVzIG9mIEF0a1RleHRCb3VuZGFyeS4KICAgICAg
ICAoc3Vic3RyaW5nV2l0aExpbmVCcmVha3MpOiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5z
IGEKICAgICAgICBzdWJzdHJpbmcgZm9yIGEgZ2l2ZW4gQXRrVGV4dCBvYmplY3QgY29uc2lkZXJp
bmcgc3RhcnQgYW5kIGVuZAogICAgICAgIG9mZnNldHMsIHZhbHVlcyBmb3IgQXRrVGV4dEJvdW5k
YXJ5IGFuZCBwb3RlbnRpYWwgbGluZSBicmVha3MuCiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0V29yZCk6IE5ldyBmdW5jdGlvbiwgaW1wbGVtZW50aW5nCiAgICAgICAgYXRrX3RleHRf
Z2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQuCiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0VGV4dEZvck9mZnNldCk6IENhbGwgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRXb3JkLgogICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENhcmV0T2Zmc2V0KTogVXNlIHdlYkNvcmVPZmZz
ZXRUb0F0a09mZnNldAogICAgICAgIHRvIHRyYW5zbGF0ZSBhbiBvZmZzZXQgZnJvbSBXZWJDb3Jl
IHRvIEFUSyBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4
dFNldFNlbGVjdGlvbik6IFVzZSBhdGtPZmZzZXRUb1dlYkNvcmVPZmZzZXQKICAgICAgICB0byB0
cmFuc2xhdGUgYW4gb2Zmc2V0IGZyb20gV2ViQ29yZSB0byBBVEsgYmVmb3JlIHVzaW5nIGl0Lgog
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldENhcmV0T2Zmc2V0KTogTGlrZXdpc2UuCgoy
MDEzLTA1LTMwICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+
CgogICAgICAgIEltcGxlbWVudCBhdGtfdGV4dF9nZXRfdGV4dF8qX29mZnNldCBmb3IgV09SRAog
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ4NzEKCiAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFVwZGF0ZWQgdW5pdCB0
ZXN0cyB0byBjaGVjayBtb3JlIGNhc2VzIG9mIGNhbGxpbmcgdGhlCiAgICAgICAgYXRrX3RleHRf
Z2V0X3RleHRfKl9vZmZzZXQoKSBmdW5jdGlvbnMgZm9yIFdPUkQuCgogICAgICAgICogdGVzdHMv
dGVzdGF0ay5jOgogICAgICAgIChydW5HZXRUZXh0VGVzdHMpOiBBZGQgbW9yZSB0ZXN0cyBmb3Ig
V09SRCBib3VuZGFyaWVzLgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICA1MCArKysrCiAuLi4vYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUZXh0LmNwcCAgICAgICAgICB8ICAyNDkgKysrKysrKysrKysrKysrKystLS0KIFNvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArCiBT
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMgICAgICAgICAgICAgICAgICB8ICAgMzEg
KystCiA0IGZpbGVzIGNoYW5nZWQsIDMwNCBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggMmE5YWI4OS4uNjMwM2ZiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUz
IEBACisyMDEzLTA1LTMwICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZv
ciBXT1JECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTQ4NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZS1pbXBsZW1lbnQgdGhpcyBmdW5jdGlvbnMgd2l0aG91dCB1c2luZyBHYWlsVGV4dFV0aWwgbm9y
IFBhbmdvLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwOgorICAgICAgICAob2Zmc2V0QWRqdXN0bWVudEZvck9iamVjdCk6IEhl
bHBlciBmdW5jdGlvbiB0byByZWZhY3RvciBjb2RlCisgICAgICAgIG5lZWRlZCB0byB0cmFuc2xh
dGUgb2Zmc2V0cyBmcm9tIFdlYkNvcmUgdG8gQVRLIHdvcmxkcy4gQ3VycmVudGx5CisgICAgICAg
IHJlbGF0ZWQgdG8gY29uc2lkZXJpbmcgbGlzdCBpdGVtIG1hcmtlcnMgaW4gTFRSIHRleHQgb25s
eS4KKyAgICAgICAgKHdlYkNvcmVPZmZzZXRUb0F0a09mZnNldCk6IENvbnZlbmllbmNlIGZ1bmN0
aW9uIGZvciBjb2RlCisgICAgICAgIHJlYWRhYmlsaXR5IHB1cnBvc2VzLiBJdCBqdXN0IGNhbGxz
IG9mZnNldEFkanVzdG1lbnRGb3JPYmplY3QuCisgICAgICAgIChhdGtPZmZzZXRUb1dlYkNvcmVP
ZmZzZXQpOiBMaWtld2lzZS4KKyAgICAgICAgKGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3Qp
OiBGaXggdGhlIGxvZ2ljIHRvIHdvcmsgcHJvcGVybHkKKyAgICAgICAgd2l0aCBTaGFkb3cgRE9N
IHRyZWVzIChlLmcuIHRleHQgaW5zaWRlIGlucHV0IGZpZWxkcykuCisgICAgICAgIChuZXh0V29y
ZFN0YXJ0UG9zaXRpb24pOiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVsaWFibHkgZmluZCB0aGUKKyAg
ICAgICAgc3RhcnQgb2YgdGhlIG5leHQgd29yZCBhcyBhbmQgdXNlciB3b3VsZCBkbyBpdCBieSBu
YXZpZ2F0aW5nIHdpdGgKKyAgICAgICAgQ3RybCBhbmQgdGhlIGFycm93cyAoY29uc2lkZXJpbmcg
c3BhY2VzIGFuZCBwdW5jdHVhdGlvbikuCisgICAgICAgIChwcmV2aW91c1dvcmRFbmRQb3NpdGlv
bik6IFNpbWlsYXIgdG8gbmV4dFdvcmRTdGFydFBvc2l0aW9uLCBidXQKKyAgICAgICAgd3JpdHRl
biB0byBoZWxwIGZpbmQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgb25lLgorICAgICAgICAod29y
ZEF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeSk6IEhlbHBlciBmdW5jdGlvbiB0byBmaW5kcyB0aGUg
d29yZAorICAgICAgICBhdCBhIGdpdmVuIHBvc2l0aW9uIGNvbnNpZGVyaW5nIHZhbHVlcyBvZiBB
dGtUZXh0Qm91bmRhcnkuCisgICAgICAgIChzdWJzdHJpbmdXaXRoTGluZUJyZWFrcyk6IEhlbHBl
ciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYQorICAgICAgICBzdWJzdHJpbmcgZm9yIGEgZ2l2ZW4g
QXRrVGV4dCBvYmplY3QgY29uc2lkZXJpbmcgc3RhcnQgYW5kIGVuZAorICAgICAgICBvZmZzZXRz
LCB2YWx1ZXMgZm9yIEF0a1RleHRCb3VuZGFyeSBhbmQgcG90ZW50aWFsIGxpbmUgYnJlYWtzLgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRXb3JkKTogTmV3IGZ1bmN0aW9uLCBpbXBs
ZW1lbnRpbmcKKyAgICAgICAgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQuCisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRGb3JPZmZzZXQpOiBDYWxsIHdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0V29yZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
Q2FyZXRPZmZzZXQpOiBVc2Ugd2ViQ29yZU9mZnNldFRvQXRrT2Zmc2V0CisgICAgICAgIHRvIHRy
YW5zbGF0ZSBhbiBvZmZzZXQgZnJvbSBXZWJDb3JlIHRvIEFUSyBiZWZvcmUgcmV0dXJuaW5nIGl0
LgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRTZXRTZWxlY3Rpb24pOiBVc2UgYXRrT2Zm
c2V0VG9XZWJDb3JlT2Zmc2V0CisgICAgICAgIHRvIHRyYW5zbGF0ZSBhbiBvZmZzZXQgZnJvbSBX
ZWJDb3JlIHRvIEFUSyBiZWZvcmUgdXNpbmcgaXQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
VGV4dFNldENhcmV0T2Zmc2V0KTogTGlrZXdpc2UuCisKKzIwMTMtMDUtMzAgIE1hcmlvIFNhbmNo
ZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQg
YXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDg3MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgdW5pdCB0ZXN0cyB0byBjaGVjayBt
b3JlIGNhc2VzIG9mIGNhbGxpbmcgdGhlCisgICAgICAgIGF0a190ZXh0X2dldF90ZXh0Xypfb2Zm
c2V0KCkgZnVuY3Rpb25zIGZvciBXT1JELgorCisgICAgICAgICogdGVzdHMvdGVzdGF0ay5jOgor
ICAgICAgICAocnVuR2V0VGV4dFRlc3RzKTogQWRkIG1vcmUgdGVzdHMgZm9yIFdPUkQgYm91bmRh
cmllcy4KKwogMjAxMy0wNS0zMCAgRXVnZW5lIEtseXVjaG5pa292ICA8ZXVzdGFzQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBzZWxlY3Rpb25TdGFydC9zZWxlY3Rpb25FbmQgcmV0dXJuICJvYnNv
bGV0ZSIgdmFsdWVzIHdoZW4gcmVxdWVzdGVkIGR1cmluZyAiaW5wdXQiIGV2ZW50CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKaW5kZXggZTA2MzRmZS4uZTdkYzVkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtNDcwLDYgKzQ3MCwzNiBAQCBzdGF0
aWMgSW50UmVjdCB0ZXh0RXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBn
aW50IGxlbmd0aCwgQXRrQ29vcgogICAgIHJldHVybiBleHRlbnRzOwogfQogCitzdGF0aWMgZ2lu
dCBvZmZzZXRBZGp1c3RtZW50Rm9yT2JqZWN0KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBpZiAoIW9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIG9mZnNl
dHMgZm9yIHRoZSBsaXN0IGl0ZW0gbWFya2VyIGluCisgICAgLy8gTGVmdC1Uby1SaWdodCB0ZXh0
LCBzaW5jZSB3ZSBleHBvc2UgaXQgdG9nZXRoZXIgd2l0aCB0aGUgdGV4dC4KKyAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gb2JqZWN0LT5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlciAm
JiByZW5kZXJlci0+aXNMaXN0SXRlbSgpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24o
KSA9PSBMVFIpIHsKKyAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVt
KHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKKyAgICAgICAgcmV0dXJuIG1hcmtl
clRleHQubGVuZ3RoKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnaW50
IHdlYkNvcmVPZmZzZXRUb0F0a09mZnNldChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmpl
Y3QsIGdpbnQgb2Zmc2V0KQoreworICAgIHJldHVybiBvZmZzZXQgKyBvZmZzZXRBZGp1c3RtZW50
Rm9yT2JqZWN0KG9iamVjdCk7Cit9CisKK3N0YXRpYyBnaW50IGF0a09mZnNldFRvV2ViQ29yZU9m
ZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBpZiAoIWNvcmVPYmplY3QgfHwgIWNv
cmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1cm4g
b2Zmc2V0OworCisgICAgcmV0dXJuIG9mZnNldCAtIG9mZnNldEFkanVzdG1lbnRGb3JPYmplY3Qo
Y29yZU9iamVjdCk7Cit9CisKIHN0YXRpYyB2b2lkIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmpl
Y3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uLCBnaW50JiBzdGFydE9mZnNldCwgZ2ludCYgZW5kT2Zmc2V0KQogewogICAgIGlmICgh
Y29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCkBAIC01MDcsMTkgKzUz
NywxNyBAQCBzdGF0aWMgdm9pZCBnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libAogICAgIGVsc2UKICAgICAgICAgbm9kZVJh
bmdlRW5kID0gc2VsUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CiAKLSAgICAvLyBDYWxjdWxhdGUgcG9z
aXRpb24gb2YgdGhlIHNlbGVjdGVkIHJhbmdlIGluc2lkZSB0aGUgb2JqZWN0LgotICAgIFBvc2l0
aW9uIHBhcmVudEZpcnN0UG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9k
ZSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZUluUGFyZW50ID0gUmFuZ2U6OmNyZWF0ZShub2Rl
LT5kb2N1bWVudCgpLCBwYXJlbnRGaXJzdFBvc2l0aW9uLCBub2RlUmFuZ2VTdGFydCk7CisgICAg
Ly8gQ2FsY3VsYXRlIHRoZSByZWZlcmVuY2UgcG9zaXRpb24gZm9yIHRoZSBzZWxlY3RlZCByYW5n
ZSBpbnNpZGUgdGhlIG9iamVjdC4KKyAgICAvLyBXZSBuZWVkIHRvIGNvbnNpZGVyIHNwZWNpYWwg
Y2FzZXMgbGlrZSBpbnB1dCBmaWVsZHMgb3QgdGV4dCBhcmVhcywgd2hvc2UKKyAgICAvLyB0ZXh0
IG5vZGVzIGNvbnRhaW5pbmcgdGhlIHRleHQgbWlnaHQgZXhpc3QgaW5zaWRlIHNoYWRvdyBET00g
dHJlZXMuCisgICAgTm9kZSogcmFuZ2VTdGFydE5vZGUgPSBub2RlUmFuZ2VTdGFydC5jb250YWlu
ZXJOb2RlKCk7CisgICAgTm9kZSogcmVmZXJlbmNlTm9kZSA9IHJhbmdlU3RhcnROb2RlLT5pc0lu
U2hhZG93VHJlZSgpID8gcmFuZ2VTdGFydE5vZGUtPmhpZ2hlc3RBbmNlc3RvcigpIDogbm9kZTsK
IAotICAgIC8vIFNldCB2YWx1ZXMgZm9yIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cy4KLSAgICBzdGFy
dE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VJblBhcmVudC5nZXQoKSwg
dHJ1ZSk7CisgICAgUG9zaXRpb24gcmVmZXJlbmNlUG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5P
ckJlZm9yZU5vZGUocmVmZXJlbmNlTm9kZSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZUluUGFy
ZW50ID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCByZWZlcmVuY2VQb3NpdGlvbiwg
bm9kZVJhbmdlU3RhcnQpOwogCi0gICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIG9mZnNldHMg
Zm9yIHRoZSBsaXN0IGl0ZW0gbWFya2VyLgotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBj
b3JlT2JqZWN0LT5yZW5kZXJlcigpOwotICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNM
aXN0SXRlbSgpKSB7Ci0gICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRl
bShyZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7Ci0gICAgICAgIHN0YXJ0T2Zmc2V0
ICs9IG1hcmtlclRleHQubGVuZ3RoKCk7Ci0gICAgfQorICAgIC8vIFNldCB2YWx1ZXMgZm9yIHN0
YXJ0IGFuZCBlbmQgb2Zmc2V0cy4KKyAgICBzdGFydE9mZnNldCA9IHdlYkNvcmVPZmZzZXRUb0F0
a09mZnNldChjb3JlT2JqZWN0LCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlSW5QYXJl
bnQuZ2V0KCksIHRydWUpKTsKIAogICAgIFJlZlB0cjxSYW5nZT4gbm9kZVJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBub2RlUmFuZ2VTdGFydCwgbm9kZVJhbmdlRW5kKTsK
ICAgICBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bm9kZVJhbmdlLmdldCgpLCB0cnVlKTsKQEAgLTYwNyw2ICs2MzUsMTY0IEBAIHN0YXRpYyBnY2hh
ciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0
LCBHZXRUZXh0UmVsCiAgICAgcmV0dXJuIGdfdXRmOF9zdWJzdHJpbmcodGV4dERhdGEuZ2V0KCks
ICpzdGFydE9mZnNldCwgKmVuZE9mZnNldCk7CiB9CiAKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24g
bmV4dFdvcmRTdGFydFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmb3JpZ2luYWxQb3Np
dGlvbikKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BZnRlckN1cnJlbnRXb3JkID0g
bmV4dFdvcmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKKworICAgIC8vIEluIG9yZGVyIHRv
IHNraXAgc3BhY2VzIHdoZW4gbW92aW5nIHJpZ2h0LCB3ZSBhZHZhbmNlIG9uZSB3b3JkIGZ1cnRo
ZXIKKyAgICAvLyBhbmQgdGhlbiBtb3ZlIG9uZSB3b3JkIGJhY2suIFRoaXMgd2lsbCBwdXQgdXMg
YXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgICAvLyB3b3JkIGZvbGxvd2luZy4KKyAgICBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkID0gbmV4dFdv
cmRQb3NpdGlvbihwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQpOworCisgICAgaWYgKHBvc2l0aW9u
QWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZCAhPSBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQp
CisgICAgICAgIHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCA9IHByZXZpb3VzV29yZFBvc2l0aW9u
KHBvc2l0aW9uQWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZCk7CisKKyAgICBib29sIG1vdmlu
Z0JhY2t3YXJkc01vdmVkUG9zaXRpb25Ub1N0YXJ0T2ZDdXJyZW50V29yZCA9IHBvc2l0aW9uQWZ0
ZXJDdXJyZW50V29yZCA9PSBwcmV2aW91c1dvcmRQb3NpdGlvbihuZXh0V29yZFBvc2l0aW9uKG9y
aWdpbmFsUG9zaXRpb24pKTsKKyAgICBpZiAobW92aW5nQmFja3dhcmRzTW92ZWRQb3NpdGlvblRv
U3RhcnRPZkN1cnJlbnRXb3JkKQorICAgICAgICBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQgPSBw
b3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZvbGxvd2luZ1dvcmQ7CisKKyAgICByZXR1cm4gcG9zaXRp
b25BZnRlckN1cnJlbnRXb3JkOworfQorCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3Vz
V29yZEVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmb3JpZ2luYWxQb3NpdGlvbikK
K3sKKyAgICAvLyBXZSBtb3ZlIGZvcndhcmQgYW5kIHRoZW4gYmFja3dhcmQgdG8gcG9zaXRpb24g
b3Vyc2VsdmVzIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAvLyBvZiB0aGUgY3VycmVudCB3b3JkIGZv
ciB0aGlzIGJvdW5kYXJ5LCBtYWtpbmcgdGhlIG1vc3Qgb2YgdGhlIHNlbWFudGljcworICAgIC8v
IG9mIHByZXZpb3VzV29yZFBvc2l0aW9uKCkgYW5kIG5leHRXb3JkUG9zaXRpb24oKS4KKyAgICBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCA9IHByZXZpb3VzV29y
ZFBvc2l0aW9uKG5leHRXb3JkUG9zaXRpb24ob3JpZ2luYWxQb3NpdGlvbikpOworICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbkF0UHJldmlvdXNXb3JkID0gcHJldmlvdXNXb3JkUG9zaXRpb24o
b3JpZ2luYWxQb3NpdGlvbik7CisKKyAgICAvLyBOZWVkIHRvIGNvbnNpZGVyIHNwZWNpYWwgY2Fz
ZXMgKHB1bmN0dWF0aW9uKSB3aGVuIHdlIGFyZSBpbiB0aGUgbGFzdCB3b3JkIG9mIGEgc2VudGVu
Y2UuCisgICAgaWYgKGlzU3RhcnRPZldvcmQob3JpZ2luYWxQb3NpdGlvbikgJiYgcG9zaXRpb25B
dFByZXZpb3VzV29yZCAhPSBvcmlnaW5hbFBvc2l0aW9uICYmIHBvc2l0aW9uQXRQcmV2aW91c1dv
cmQgPT0gcG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCkKKyAgICAgICAgcmV0dXJuIG5leHRX
b3JkUG9zaXRpb24ocG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCk7CisKKyAgICAvLyBJbiBv
cmRlciB0byBza2lwIHNwYWNlcyB3aGVuIG1vdmluZyBsZWZ0LCB3ZSBhZHZhbmNlIG9uZSB3b3Jk
IGJhY2t3YXJkcworICAgIC8vIGFuZCB0aGVuIG1vdmUgb25lIHdvcmQgZm9yd2FyZC4gVGhpcyB3
aWxsIHB1dCB1cyBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgLy8gdGhlIHdvcmQgZm9sbG93aW5n
LgorICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVNwYWNpbmdBbmRQcmVjZWVkaW5n
V29yZCA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHBvc2l0aW9uQXRTdGFydE9mQ3VycmVudFdvcmQp
OworCisgICAgaWYgKHBvc2l0aW9uQmVmb3JlU3BhY2luZ0FuZFByZWNlZWRpbmdXb3JkICE9IHBv
c2l0aW9uQXRTdGFydE9mQ3VycmVudFdvcmQpCisgICAgICAgIHBvc2l0aW9uQXRTdGFydE9mQ3Vy
cmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlU3BhY2luZ0FuZFByZWNl
ZWRpbmdXb3JkKTsKKworICAgIGJvb2wgbW92aW5nRm9yd2FyZE1vdmVkUG9zaXRpb25Ub0VuZE9m
Q3VycmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKHBvc2l0aW9uQXRTdGFydE9mQ3VycmVudFdv
cmQpID09IHByZXZpb3VzV29yZFBvc2l0aW9uKG5leHRXb3JkUG9zaXRpb24ob3JpZ2luYWxQb3Np
dGlvbikpOworICAgIGlmIChtb3ZpbmdGb3J3YXJkTW92ZWRQb3NpdGlvblRvRW5kT2ZDdXJyZW50
V29yZCkKKyAgICAgICAgcG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCA9IHBvc2l0aW9uQmVm
b3JlU3BhY2luZ0FuZFByZWNlZWRpbmdXb3JkOworCisgICAgcmV0dXJuIHBvc2l0aW9uQXRTdGFy
dE9mQ3VycmVudFdvcmQ7Cit9CisKK3N0YXRpYyBWaXNpYmxlU2VsZWN0aW9uIHdvcmRBdFBvc2l0
aW9uRm9yQXRrQm91bmRhcnkoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJs
ZVBvc2l0aW9uIG9yaWdpbmFsUG9zaXRpb24sIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUp
Cit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb247CisgICAgVmlzaWJsZVBvc2l0
aW9uIGVuZFBvc2l0aW9uOworCisgICAgc3dpdGNoIChib3VuZGFyeVR5cGUpIHsKKyAgICBjYXNl
IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQ6CisgICAgICAgIGlmIChpc1N0YXJ0T2ZXb3Jk
KG9yaWdpbmFsUG9zaXRpb24pICYmIGlzV2hpdGVzcGFjZShvcmlnaW5hbFBvc2l0aW9uLmNoYXJh
Y3RlckJlZm9yZSgpKSkKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBvcmlnaW5hbFBvc2l0
aW9uOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gcHJldmlvdXNX
b3JkUG9zaXRpb24ob3JpZ2luYWxQb3NpdGlvbik7CisgICAgICAgIGVuZFBvc2l0aW9uID0gbmV4
dFdvcmRTdGFydFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQ6CisgICAgICAgIHN0YXJ0UG9zaXRpb24g
PSBwcmV2aW91c1dvcmRFbmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgZW5k
UG9zaXRpb24gPSBuZXh0V29yZFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOworICAgICAgICBicmVh
azsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KworICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgbG9vayBmb3IgdGhlIHdvcmQg
aW4gdGhlIGN1cnJlbnQgbGluZSB3aGVuCisgICAgLy8gd2UgYXJlIGF0IHRoZSBiZWdpbm5pbmcg
b2YgYSBuZXcgbGluZSwgYW5kIG5vdCBsb29rIGludG8gdGhlIHByZXZpb3VzIG9uZQorICAgIC8v
IGF0IGFsbCwgd2hpY2ggbWlnaHQgaGFwcGVuIHdoZW4gbGluZXMgYmVsb25nIHRvIGRpZmZlcmVu
dCBub2Rlcy4KKyAgICBpZiAoYm91bmRhcnlUeXBlID09IEFUS19URVhUX0JPVU5EQVJZX1dPUkRf
U1RBUlQgJiYgaXNTdGFydE9mTGluZShvcmlnaW5hbFBvc2l0aW9uKSAmJiBpc1N0YXJ0T2ZMaW5l
KGVuZFBvc2l0aW9uKSkgeworICAgICAgICBzdGFydFBvc2l0aW9uID0gZW5kUG9zaXRpb247Cisg
ICAgICAgIGVuZFBvc2l0aW9uID0gbmV4dFdvcmRTdGFydFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24p
OworICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSBzdGFydFBvc2l0aW9uIGlzIGFsd2F5cyBiZWZv
cmUgZW5kUG9zaXRpb24sIGJlZm9yZSByZXR1cm5pbmcuCisgICAgVmlzaWJsZVBvc2l0aW9uUmFu
Z2Ugb3JkZXJlZFJhbmdlID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9y
ZGVyZWRQb3NpdGlvbnMoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIHJldHVybiBW
aXNpYmxlU2VsZWN0aW9uKG9yZGVyZWRSYW5nZS5zdGFydCwgb3JkZXJlZFJhbmdlLmVuZCk7Cit9
CisKK3N0YXRpYyBnY2hhciogc3Vic3RyaW5nV2l0aExpbmVCcmVha3MoQXRrVGV4dCogdGV4dCwg
Z2ludCBzdGFydCwgZ2ludCBlbmQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUpCit7Cisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgR093
blB0cjxjaGFyPiByZXN1bHRTdHJpbmcod2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KHRleHQs
IHN0YXJ0LCBlbmQpKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciB3ZSBuZWVk
IHRvIGFwcGVuZCBvciBwcmVwZW5kIGEgJ1xuJyB0byB0aGUgcmVzdWx0IHRleHQuCisgICAgVmlz
aWJsZVBvc2l0aW9uIHdvcmRTdGFydCA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvbkZvcklu
ZGV4KHN0YXJ0KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gd29yZEVuZCA9IGNvcmVPYmplY3QtPnZp
c2libGVQb3NpdGlvbkZvckluZGV4KGVuZCk7CisgICAgc3dpdGNoIChib3VuZGFyeVR5cGUpIHsK
KyAgICBjYXNlIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQ6CisgICAgICAgIGlmICgoaXNT
dGFydE9mTGluZSh3b3JkRW5kKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKHdvcmRFbmQpKSB8fCAo
aXNFbmRPZkxpbmUod29yZEVuZCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgod29yZEVuZCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZigiJXNcbiIsIHJlc3VsdFN0cmluZy5nZXQo
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VO
RDoKKyAgICAgICAgaWYgKChpc1N0YXJ0T2ZMaW5lKHdvcmRTdGFydCkgJiYgIWlzU3RhcnRPZlBh
cmFncmFwaCh3b3JkU3RhcnQpKSB8fCAoaXNFbmRPZkxpbmUod29yZFN0YXJ0KSAmJiAhaXNFbmRP
ZlBhcmFncmFwaCh3b3JkU3RhcnQpKSkKKyAgICAgICAgICAgIHJldHVybiBnX3N0cmR1cF9wcmlu
dGYoIlxuJXMiLCByZXN1bHRTdHJpbmcuZ2V0KCkpOworICAgICAgICBicmVhazsKKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHRTdHJpbmcucmVsZWFzZSgpOworfQorCitzdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0V29yZChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5k
YXJ5IGJvdW5kYXJ5VHlwZSwgR2V0VGV4dFJlbGF0aXZlUG9zaXRpb24gdGV4dFBvc2l0aW9uLCBn
aW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQoreworICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIGlmICghY29yZU9iamVjdCB8fCAh
Y29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVy
biBnX3N0cmR1cCgiIik7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5k
b2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBnX3N0cmR1cCgi
Iik7CisKKyAgICBpbnQgYWN0dWFsT2Zmc2V0ID0gYXRrT2Zmc2V0VG9XZWJDb3JlT2Zmc2V0KHRl
eHQsIG9mZnNldCk7CisKKyAgICAvLyBGb3IgbXVsdGlwbGUgY2hhcmFjdGVycyBzZWxlY3Rpb24g
d2Ugd2lsbCBhbHdheXMgY29uc2lkZXIgdGhlIGV4dGVudAorICAgIC8vIG9mIHRoYXQgc2VsZWN0
aW9uIGFzIHRoZSBvcmlnaW5hbCBwb3NpdGlvbiBvZiB0aGUgY2FyZXQuCisgICAgVmlzaWJsZVBv
c2l0aW9uIGNhcmV0UG9zaXRpb24gPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRl
eChhY3R1YWxPZmZzZXQpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0ZWRXb3JkID0gd29y
ZEF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShjb3JlT2JqZWN0LCBjYXJldFBvc2l0aW9uLCBib3Vu
ZGFyeVR5cGUpOworCisgICAgLy8gQ29uc2lkZXIgYWxzbyB0aGUgQkVGT1JFIGFuZCBBRlRFUiB2
YXJpYW50cyBvZiB0aGlzIG1ldGhvZC4KKyAgICBpZiAodGV4dFBvc2l0aW9uICE9IEdldFRleHRQ
b3NpdGlvbkF0KSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBvbGRXb3JkU3RhcnQgPSBzZWxl
Y3RlZFdvcmQuc3RhcnQoKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9sZFdvcmRFbmQgPSBz
ZWxlY3RlZFdvcmQuZW5kKCk7CisKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1Bvc2l0aW9u
OworICAgICAgICBzd2l0Y2ggKHRleHRQb3NpdGlvbikgeworICAgICAgICBjYXNlIEdldFRleHRQ
b3NpdGlvbkJlZm9yZToKKyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3RhcnRPZldvcmQob2xk
V29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIEdldFRleHRQb3NpdGlvbkFmdGVyOgorICAgICAgICAgICAgbmV3UG9zaXRp
b24gPSBlbmRPZldvcmQob2xkV29yZEVuZCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUcmVhdCBlZGdlIGNhc2VzIHNlcGFy
YXRlbHkgKHRleHQgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb3IgYWZ0ZXIgdGhlIGVuZCkuCisgICAg
ICAgIGlmIChuZXdQb3NpdGlvbiA9PSBvbGRXb3JkU3RhcnQgfHwgbmV3UG9zaXRpb24gPT0gb2xk
V29yZEVuZCkgeworICAgICAgICAgICAgKnN0YXJ0T2Zmc2V0ID0gbmV3UG9zaXRpb24gPT0gb2xk
V29yZFN0YXJ0ID8gMCA6IGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgoY29yZU9iamVjdCk7Cisg
ICAgICAgICAgICAqZW5kT2Zmc2V0ID0gKnN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgcmV0dXJu
IGdfc3RyZHVwKCIiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlbGVjdCB3b3JkIGF0IHRo
ZSBuZXcgcG9zaXRpb24uCisgICAgICAgIHNlbGVjdGVkV29yZCA9IHdvcmRBdFBvc2l0aW9uRm9y
QXRrQm91bmRhcnkoY29yZU9iamVjdCwgbmV3UG9zaXRpb24sIGJvdW5kYXJ5VHlwZSk7CisgICAg
fQorICAgIC8vIENvbnZlcnQgVmlzaWJsZVBvc2l0aW9ucyB0byBvZmZzZXRzIHJlbGF0aXZlIHRv
IHRoZSBBdGtUZXh0IG9iamVjdCB1bmRlciBjb25zaWRlcmF0aW9uLgorICAgIGdldFNlbGVjdGlv
bk9mZnNldHNGb3JPYmplY3QoY29yZU9iamVjdCwgc2VsZWN0ZWRXb3JkLCAqc3RhcnRPZmZzZXQs
ICplbmRPZmZzZXQpOworICAgIHJldHVybiBzdWJzdHJpbmdXaXRoTGluZUJyZWFrcyh0ZXh0LCAq
c3RhcnRPZmZzZXQsICplbmRPZmZzZXQsIGJvdW5kYXJ5VHlwZSk7Cit9CisKIHN0YXRpYyBnY2hh
ciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0Rm9yT2Zmc2V0KEF0a1RleHQqIHRleHQsIGdp
bnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRhcnlUeXBlLCBHZXRUZXh0UmVsYXRpdmVQ
b3NpdGlvbiB0ZXh0UG9zaXRpb24sIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQp
CiB7CiAgICAgLy8gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdmFsaWQgdmFsaWQgdmFsdWVz
IGZvciBvZmZzZXRzLgpAQCAtNjE2LDkgKzgwMiwxMiBAQCBzdGF0aWMgZ2NoYXIqIHdlYmtpdEFj
Y2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwg
QQogICAgIGlmIChib3VuZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfQ0hBUikKICAgICAg
ICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcih0ZXh0LCBvZmZzZXQsIHRleHRQ
b3NpdGlvbiwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAKKyAgICBpZiAoYm91bmRhcnlUeXBl
ID09IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQgfHwgYm91bmRhcnlUeXBlID09IEFUS19U
RVhUX0JPVU5EQVJZX1dPUkRfRU5EKQorICAgICAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZVRl
eHRHZXRXb3JkKHRleHQsIG9mZnNldCwgYm91bmRhcnlUeXBlLCB0ZXh0UG9zaXRpb24sIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQpOworCiAjaWYgUExBVEZPUk0oR1RLKQotICAgIC8vIEZJWE1FOiBH
ZXQgcmlkIG9mIHRoZSBjb2RlIGJlbG93IG9uY2UgZXZlcnkgc2luZ2xlIGdldF90ZXh0Xypfb2Zm
c2V0Ci0gICAgLy8gZnVuY3Rpb24gaGFzIGJlZW4gcHJvcGVybHkgaW1wbGVtZW50ZWQgd2l0aG91
dCB1c2luZyBQYW5nby9DYWlyby4KKyAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGUgY29kZSBi
ZWxvdyBvbmNlIGV2ZXJ5IHNpbmdsZSBwYXJ0IGFib3ZlCisgICAgLy8gaGFzIGJlZW4gcHJvcGVy
bHkgaW1wbGVtZW50ZWQgd2l0aG91dCB1c2luZyBQYW5nby9DYWlyby4KICAgICBHYWlsT2Zmc2V0
VHlwZSBvZmZzZXRUeXBlOwogICAgIHN3aXRjaCAodGV4dFBvc2l0aW9uKSB7CiAgICAgY2FzZSBH
ZXRUZXh0UG9zaXRpb25CZWZvcmU6CkBAIC02ODMsMTYgKzg3Miw3IEBAIHN0YXRpYyBnaW50IHdl
YmtpdEFjY2Vzc2libGVUZXh0R2V0Q2FyZXRPZmZzZXQoQXRrVGV4dCogdGV4dCkKICAgICBpZiAo
IW9iamVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChjb3JlT2JqZWN0LCBvZmZzZXQp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3Jl
T2JqZWN0LT5yZW5kZXJlcigpOwotICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNMaXN0
SXRlbSgpKSB7Ci0gICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShy
ZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7Ci0KLSAgICAgICAgLy8gV2UgbmVlZCB0
byBhZGp1c3QgdGhlIG9mZnNldCBmb3IgdGhlIGxpc3QgaXRlbSBtYXJrZXIuCi0gICAgICAgIG9m
ZnNldCArPSBtYXJrZXJUZXh0Lmxlbmd0aCgpOwotICAgIH0KLQotICAgIC8vIFRPRE86IFZlcmlm
eSB0aGlzIGZvciBSVEwgdGV4dC4KLSAgICByZXR1cm4gb2Zmc2V0OworICAgIHJldHVybiB3ZWJD
b3JlT2Zmc2V0VG9BdGtPZmZzZXQoY29yZU9iamVjdCwgb2Zmc2V0KTsKIH0KIAogc3RhdGljIEF0
a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRSdW5BdHRyaWJ1dGVzKEF0a1Rl
eHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0
KQpAQCAtODI0LDE1ICsxMDA0LDEzIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxl
VGV4dFNldFNlbGVjdGlvbihBdGtUZXh0KiB0ZXh0LCBnaW50IHNlbGVjdGlvbk51CiAgICAgICAg
IGVuZE9mZnNldCA9IHRleHRDb3VudDsKIAogICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBv
ZmZzZXRzIGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gY29yZU9iamVjdC0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVy
ZXItPmlzTGlzdEl0ZW0oKSkgewotICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVy
TGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOwotICAgICAgICBpbnQg
bWFya2VyTGVuZ3RoID0gbWFya2VyVGV4dC5sZW5ndGgoKTsKLSAgICAgICAgaWYgKHN0YXJ0T2Zm
c2V0IDwgbWFya2VyTGVuZ3RoIHx8IGVuZE9mZnNldCA8IG1hcmtlckxlbmd0aCkKKyAgICBnaW50
IG9mZnNldEFkanVzdG1lbnQgPSBvZmZzZXRBZGp1c3RtZW50Rm9yT2JqZWN0KGNvcmVPYmplY3Qp
OworICAgIGlmIChvZmZzZXRBZGp1c3RtZW50KSB7CisgICAgICAgIGlmIChzdGFydE9mZnNldCA8
IG9mZnNldEFkanVzdG1lbnQgfHwgZW5kT2Zmc2V0IDwgb2Zmc2V0QWRqdXN0bWVudCkKICAgICAg
ICAgICAgIHJldHVybiBGQUxTRTsKIAotICAgICAgICBzdGFydE9mZnNldCAtPSBtYXJrZXJMZW5n
dGg7Ci0gICAgICAgIGVuZE9mZnNldCAtPSBtYXJrZXJMZW5ndGg7CisgICAgICAgIHN0YXJ0T2Zm
c2V0ID0gYXRrT2Zmc2V0VG9XZWJDb3JlT2Zmc2V0KHRleHQsIHN0YXJ0T2Zmc2V0KTsKKyAgICAg
ICAgZW5kT2Zmc2V0ID0gYXRrT2Zmc2V0VG9XZWJDb3JlT2Zmc2V0KHRleHQsIGVuZE9mZnNldCk7
CiAgICAgfQogCiAgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQgLSBzdGFydE9mZnNldCk7CkBAIC04NjcsMTUgKzEwNDUsMTIgQEAgc3RhdGljIGdib29s
ZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0Q2FyZXRPZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2lu
dCBvZmZzZXQpCiAgICAgaWYgKCFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVy
LT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxp
c3RJdGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLSAgICAgICAgaW50IG1h
cmtlckxlbmd0aCA9IG1hcmtlclRleHQubGVuZ3RoKCk7Ci0gICAgICAgIGlmIChvZmZzZXQgPCBt
YXJrZXJMZW5ndGgpCisgICAgZ2ludCBvZmZzZXRBZGp1c3RtZW50ID0gb2Zmc2V0QWRqdXN0bWVu
dEZvck9iamVjdChjb3JlT2JqZWN0KTsKKyAgICBpZiAob2Zmc2V0QWRqdXN0bWVudCkgeworICAg
ICAgICBpZiAob2Zmc2V0IDwgb2Zmc2V0QWRqdXN0bWVudCkKICAgICAgICAgICAgIHJldHVybiBG
QUxTRTsKIAotICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0IGZvciBsaXN0
IGl0ZW1zLgotICAgICAgICBvZmZzZXQgLT0gbWFya2VyTGVuZ3RoOworICAgICAgICBvZmZzZXQg
PSBhdGtPZmZzZXRUb1dlYkNvcmVPZmZzZXQodGV4dCwgb2Zmc2V0KTsKICAgICB9CiAKICAgICBQ
bGFpblRleHRSYW5nZSB0ZXh0UmFuZ2Uob2Zmc2V0LCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAw
NWEyNmU2Li4wZTJhN2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMt
MDUtMzAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBJbXBsZW1lbnQgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDg3MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgdW5p
dCB0ZXN0cyB0byBjaGVjayBtb3JlIGNhc2VzIG9mIGNhbGxpbmcgdGhlCisgICAgICAgIGF0a190
ZXh0X2dldF90ZXh0Xypfb2Zmc2V0KCkgZnVuY3Rpb25zIGZvciBXT1JELgorCisgICAgICAgICog
dGVzdHMvdGVzdGF0ay5jOgorICAgICAgICAocnVuR2V0VGV4dFRlc3RzKTogQWRkIG1vcmUgdGVz
dHMgZm9yIFdPUkQgYm91bmRhcmllcy4KKwogMjAxMy0wNS0zMCAgRW5yaXF1ZSBPY2FuYSBHb256
YWxleiAgPGVvY2FuaGFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBGaXggcGFzc19ieV92
YWx1ZSBjb3Zlcml0eSB3YXJuaW5nIGluIENocm9tZUNsaWVudEd0awpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGF0ay5jCmluZGV4IDEwNzE2NmEuLjM0MTI4YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
YXRrLmMKQEAgLTEzNiwxMiArMTM2LDIxIEBAIHN0YXRpYyB2b2lkIHJ1bkdldFRleHRUZXN0cyhB
dGtUZXh0KiB0ZXh0T2JqZWN0KQogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwg
YXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJU
LAogICAgICAgICAgICAgICAgICAgICAgICAgNTgsICJ0aGlyZC4iLCA1OCwgNjQpOwogCisgICAg
dGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZz
ZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCisgICAgICAgICAgICAgICAgICAgICAg
ICA2NCwgInRoaXJkLiIsIDU4LCA2NCk7CisKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRP
YmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZ
X1dPUkRfU1RBUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAiIiwgMCwgMCk7CisKICAg
ICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9y
ZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICA1LCAiVGhpcyAiLCAwLCA1KTsKIAogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4
dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRB
UllfV09SRF9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgIDcsICJUaGlzICIsIDAsIDUp
OwogCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4
dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAorICAgICAgICAg
ICAgICAgICAgICAgICAgNjQsICJ0aGUgIiwgNTQsIDU4KTsKKwogICAgIHRlc3RHZXRUZXh0RnVu
Y3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVY
VF9CT1VOREFSWV9XT1JEX1NUQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgMCwgImlzICIs
IDUsIDgpOwogCkBAIC0xNTEsNiArMTYwLDkgQEAgc3RhdGljIHZvaWQgcnVuR2V0VGV4dFRlc3Rz
KEF0a1RleHQqIHRleHRPYmplY3QpCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0
LCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRf
U1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAzLCAiaXMgIiwgNSwgOCk7CiAKKyAgICB0
ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29m
ZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIDY0LCAiIiwgNjQsIDY0KTsKKwogICAgIC8qIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5E
ICovCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4
dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgIlRoaXMiLCAwLCA0KTsKQEAgLTE2NCw2ICsxNzYsMTUgQEAgc3RhdGljIHZv
aWQgcnVuR2V0VGV4dFRlc3RzKEF0a1RleHQqIHRleHRPYmplY3QpCiAgICAgdGVzdEdldFRleHRG
dW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhU
X0JPVU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgOSwgIiB0ZXN0Iiwg
OSwgMTQpOwogCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9n
ZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAorICAgICAgICAg
ICAgICAgICAgICAgICAgNTgsICIgdGhpcmQiLCA1NywgNjMpOworCisgICAgdGVzdEdldFRleHRG
dW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhU
X0JPVU5EQVJZX1dPUkRfRU5ELAorICAgICAgICAgICAgICAgICAgICAgICAgNjQsICIuIiwgNjMs
IDY0KTsKKworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0
X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAwLCAiIiwgMCwgMCk7CisKICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9u
KHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JP
VU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgNSwgIlRoaXMiLCAwLCA0
KTsKIApAQCAtMTczLDE0ICsxOTQsMjAgQEAgc3RhdGljIHZvaWQgcnVuR2V0VGV4dFRlc3RzKEF0
a1RleHQqIHRleHRPYmplY3QpCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBh
dGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VO
RCwKICAgICAgICAgICAgICAgICAgICAgICAgIDcsICIgaXMiLCA0LCA3KTsKIAorICAgIHRlc3RH
ZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNl
dCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgICAgICAgICAgICAgICAgICAgICA2
NCwgIiB0aGlyZCIsIDU3LCA2Myk7CisKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmpl
Y3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09S
RF9FTkQsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAiIGlzIiwgNCwgNyk7CisKICAgICB0
ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29m
ZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICA1LCAiIGEiLCA3LCA5KTsKIAogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwg
YXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VO
RCwKICAgICAgICAgICAgICAgICAgICAgICAgIDQsICIgYSIsIDcsIDkpOwogCi0gICAgdGVzdEdl
dFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFU
S19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgNTgsICIg
dGhpcmQiLCA1NywgNjMpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRr
X3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIDY0LCAiIiwgNjQsIDY0KTsKIAogICAgIC8qIEFUS19U
RVhUX0JPVU5EQVJZX1NFTlRFTkNFX1NUQVJUICovCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0
ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZ
X1NFTlRFTkNFX1NUQVJULAotLSAKMS43LjEwLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206528</attachid>
            <date>2013-07-12 05:35:23 -0700</date>
            <delta_ts>2013-07-15 03:10:09 -0700</delta_ts>
            <desc>Patch proposal plus new Unit tests</desc>
            <filename>0001-Implement-atk_text_get_text_-_offset-for-WORD.patch</filename>
            <type>text/plain</type>
            <size>33308</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBmMTQ5OGVkYWVlODZjZGI1MTcwZTEwY2VkNGE2OTljOWVlMzYwYjhmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogRnJpLCAxMiBKdWwgMjAxMyAxMzoyMDo1NyArMDEwMApTdWJqZWN0OiBb
UEFUQ0hdIEltcGxlbWVudCBhdGtfdGV4dF9nZXRfdGV4dF8qX29mZnNldCBmb3IgV09SRAogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDg3MQoKLS0tCiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDMgKysrCiAu
Li4vYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcCAgICAgICAgICB8ICAzMDQg
KysrKysrKysrKysrKysrKystLS0KIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAxNiArKwogU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0
ay5jICAgICAgICAgICAgICAgICAgfCAgMTAzICsrKysrKy0KIDQgZmlsZXMgY2hhbmdlZCwgNDE5
IGluc2VydGlvbnMoKyksIDQ3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MDM3MTQzLi5m
ZDYyMmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTMtMDctMTIgIE1hcmlvIFNh
bmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKworICAgICAgICBJbXBsZW1l
bnQgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDg3MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlLWltcGxlbWVudCB0aGlzIGZ1bmN0aW9u
cyB3aXRob3V0IHVzaW5nIEdhaWxUZXh0VXRpbCBub3IgUGFuZ28uCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAg
ICh0ZXh0Rm9yT2JqZWN0KTogTWFkZSB0aGUgcGFyYW1ldGVyIGEgY29uc3QsIHRvIGF2b2lkIHdh
cm5pbmdzLgorICAgICAgICAoZ2V0Tm9kZUZvckFjY2Vzc2liaWxpdHlPYmplY3QpOiBOZXcgaGVs
cGVyIGZ1bmN0aW9uIHRvIGVuc3VyZSB3ZQorICAgICAgICBhbHdheXMgZ2V0IHRoZSByZWxldmFu
dCBvYmplY3QgZnJvbSB0aGUgRE9NIHRyZWUgZm9yIGEgZ2l2ZW4KKyAgICAgICAgYWNjZXNzaWJp
bGl0eSBvYmplY3QsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZgorICAg
ICAgICBBdGtUZXh0LCBzbyBpdCB3b3JrcyBib3RoIHdpdGggVGV4dCBDb250cm9scyBhbmQgb3Ro
ZXIgZWxlbWVudHMuCisgICAgICAgIChnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KTogUmV3
cml0dGVuIHRoaXMgZnVuY3Rpb24gaW4gdGVybXMKKyAgICAgICAgb2YgVmlzaWJsZVBvc2l0aW9u
cyBhbmQgYXZvaWRpbmcgd2VpcmQgb3BlcmF0aW9ucyB3aXRoIHJhbmdlcywgc28KKyAgICAgICAg
d2UgaGF2ZSBtb3JlIGNvbnRyb2wgdG8gZmluZSB0dW5lIHRoZSByZXN1bHRzIGFuZCBnaXZlIG1v
cmUKKyAgICAgICAgYWNjdXJhdGUgb25lcy4gQmVzaWRlcywgbm93IGl0IHdvcmtzIGJldHRlciB3
aXRoIGVkZ2UgY2FzZXMuCisgICAgICAgIChlbXB0eVRleHRTZWxlY3Rpb25BdE9mZnNldCk6IENv
bnZlbmllbmNlIGZ1bmN0aW9uIHRvIGJlIHVzZWQgaW4KKyAgICAgICAgZWFybHkgcmV0dXJucyBm
cm9tIGZ1bmN0aW9ucyByZXR1cm5pbmcgYm90aCB0ZXh0IGFuZCBvZmZzZXRzLgorICAgICAgICAo
d2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyKTogVXNlIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zm
c2V0KCkuCisgICAgICAgIChuZXh0V29yZFN0YXJ0UG9zaXRpb24pOiBIZWxwZXIgZnVuY3Rpb24g
dG8gcmVsaWFibHkgZmluZCB0aGUKKyAgICAgICAgc3RhcnQgb2YgdGhlIG5leHQgd29yZCBhcyBh
bmQgdXNlciB3b3VsZCBkbyBpdCBieSBuYXZpZ2F0aW5nIHdpdGgKKyAgICAgICAgQ3RybCBhbmQg
dGhlIGFycm93cyAoY29uc2lkZXJpbmcgc3BhY2VzIGFuZCBwdW5jdHVhdGlvbikuCisgICAgICAg
IChwcmV2aW91c1dvcmRFbmRQb3NpdGlvbik6IFNpbWlsYXIgdG8gbmV4dFdvcmRTdGFydFBvc2l0
aW9uLCBidXQKKyAgICAgICAgd3JpdHRlbiB0byBoZWxwIGZpbmQgdGhlIGVuZCBvZiB0aGUgcHJl
dmlvdXMgb25lLgorICAgICAgICAod29yZEF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeSk6IEhlbHBl
ciBmdW5jdGlvbiB0byBmaW5kcyB0aGUgd29yZAorICAgICAgICBhdCBhIGdpdmVuIHBvc2l0aW9u
IGNvbnNpZGVyaW5nIHZhbHVlcyBvZiBBdGtUZXh0Qm91bmRhcnkuCisgICAgICAgIChudW1iZXJP
ZlJlcGxhY2VkRWxlbWVudHNCZWZvcmVPZmZzZXQpOiBIZWxwZXIgZnVuY3Rpb24gdG8gaGVscAor
ICAgICAgICBmaWd1cmUgb3V0IGhvdyBtYW55IGVtYmVkZGVkIG9iamVjdHMgd2UgaGF2ZSBleHBv
c2VkIGZvciBhbgorICAgICAgICBBdGtUZXh0IG9iamVjdCwgdXNlZCB0byBhZGp1c3Qgb2Zmc2V0
cyBjb21pbmcgZnJvbSBvdXRzaWRlLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRX
b3JkRm9yQm91bmRhcnkpOiBOZXcgZnVuY3Rpb24sCisgICAgICAgIGltcGxlbWVudGluZyBhdGtf
dGV4dF9nZXRfdGV4dF8qX29mZnNldCBmb3IgV09SRC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0VGV4dEZvck9mZnNldCk6IFJlcGxhY2UgdXNhZ2Ugb2YgR2FpbCBmb3IKKyAgICAg
ICAgV09SRCBib3VuZGFyaWVzIHdpdGggd2Via2l0QWNjZXNzaWJsZVRleHRHZXRXb3JkRm9yQm91
bmRhcnkoKS4KKyAgICAgICAgQWxzbywgbW92ZWQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBz
dGFydCBhbmQgZW5kIG9mZnNldHMgdG8gdGhlCisgICAgICAgIGJvdHRvbSwgaW50byB0aGUgZ2Fp
bC9wYW5nbyBzZWN0aW9uLCBzaW5jZSB0aG9zZSB2YWx1ZXMgd2lsbCBiZQorICAgICAgICBmcm9t
IG5vdyBvbiBpbml0aWFsaXplZCBpbiBnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KCkuCisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFNlbGVjdGlvbik6IFJlbW92ZWQgdGhlIGlu
aXRpYWxpemF0aW9uIG9mCisgICAgICAgIHRoZSBzdGFydCBhbmQgZW5kIG9mZnNldHMsIHNpbmNl
IHRob3NlIHZhbHVlcyB3aWxsIGJlIGZyb20gbm93IG9uCisgICAgICAgIGluaXRpYWxpemVkIGlu
IGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoKS4KKwogMjAxMy0wNy0xMSAgTWFyaW8gU2Fu
Y2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtHVEtdIExh
eW91dCBUZXN0IGFjY2Vzc2liaWxpdHkvZGVsZXRpbmctaWZyYW1lLWRlc3Ryb3lzLWF4Y2FjaGUu
aHRtbCwgcGxhdGZvcm0vZ3RrL2FjY2Vzc2liaWxpdHkvcmVwbGFjZWQtb2JqZWN0cy1pbi1hbm9u
eW1vdXMtYmxvY2tzLmh0bWwgYXJlIGZhaWxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
ZXh0LmNwcAppbmRleCAxMmU1MWUzLi4zOTg3ZmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50
aSBMdGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwogICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4KICAqCiAgKiBQb3J0aW9ucyBmcm9tIE1vemlsbGEgYTEx
eSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6CiAgKgpAQCAtNDksNiArNTAsNyBAQAogI2luY2x1ZGUg
IldlYktpdEFjY2Vzc2libGVVdGlsLmgiCiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBw
ZXJBdGsuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgorI2luY2x1ZGUgPHd0Zi9Ob3RGb3Vu
ZC5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKQEAgLTEzNiw3ICsxMzgsNyBAQCBzdGF0aWMgZ2NoYXIqIHRleHRGb3JS
ZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIHJldHVybiBnX3N0cmluZ19mcmVl
KHJlc3VsdFRleHQsIEZBTFNFKTsKIH0KIAotc3RhdGljIGdjaGFyKiB0ZXh0Rm9yT2JqZWN0KEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCitzdGF0aWMgZ2NoYXIqIHRleHRGb3JPYmpl
Y3QoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKIHsKICAgICBHU3RyaW5n
KiBzdHIgPSBnX3N0cmluZ19uZXcoMCk7CiAKQEAgLTUwMCw1MyArNTAyLDg1IEBAIHN0YXRpYyBp
bnQgYXRrT2Zmc2V0VG9XZWJDb3JlT2Zmc2V0KEF0a1RleHQqIHRleHQsIGludCBvZmZzZXQpCiAg
ICAgcmV0dXJuIG9mZnNldCAtIG9mZnNldEFkanVzdG1lbnRGb3JMaXN0SXRlbShjb3JlT2JqZWN0
KTsKIH0KIAorc3RhdGljIE5vZGUqIGdldE5vZGVGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCit7CisgICAgaWYgKCFjb3JlT2JqZWN0LT5pc05h
dGl2ZVRleHRDb250cm9sKCkpCisgICAgICAgIHJldHVybiBjb3JlT2JqZWN0LT5ub2RlKCk7CisK
KyAgICAvLyBGb3IgdGV4dCBjb250cm9scywgd2UgZ2V0IHRoZSBmaXJzdCB2aXNpYmxlIHBvc2l0
aW9uIG9uIGl0ICh3aGljaCB3aWxsCisgICAgLy8gYmVsb25nIHRvIGl0cyBpbm5lciBlbGVtZW50
LCB1bnJlYWNoYWJsZSBmcm9tIHRoZSBET00pIGFuZCByZXR1cm4gaXRzCisgICAgLy8gcGFyZW50
IG5vZGUsIHNvIHdlIGhhdmUgYSAiYm91bmRpbmcgbm9kZSIgZm9yIHRoZSBhY2Nlc3NpYmlsaXR5
IG9iamVjdC4KKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25JblRleHRDb250cm9sSW5uZXJF
bGVtZW50ID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoMCwgdHJ1ZSk7Cisg
ICAgTm9kZSogaW5uZXJNb3N0Tm9kZSA9IHBvc2l0aW9uSW5UZXh0Q29udHJvbElubmVyRWxlbWVu
dC5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKTsKKyAgICBpZiAoIWlubmVyTW9zdE5vZGUp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGlubmVyTW9zdE5vZGUtPnBhcmVudE5v
ZGUoKTsKK30KKwogc3RhdGljIHZvaWQgZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IGdpbnQmIHN0YXJ0T2Zmc2V0LCBnaW50JiBlbmRPZmZzZXQpCiB7Ci0gICAgaWYgKCFjb3JlT2Jq
ZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAvLyBEZWZhdWx0IHZhbHVl
cywgdW5sZXNzIHRoZSBjb250cmFyeSBpcyBwcm92ZWQuCisgICAgc3RhcnRPZmZzZXQgPSAwOwor
ICAgIGVuZE9mZnNldCA9IDA7CisKKyAgICBOb2RlKiBub2RlID0gZ2V0Tm9kZUZvckFjY2Vzc2li
aWxpdHlPYmplY3QoY29yZU9iamVjdCk7CisgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHNlbGVjdGlvbiBkb2Vzbid0IGFmZmVjdCB0
aGUgc2VsZWN0ZWQgbm9kZS4KLSAgICBpZiAoIXNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChjb3Jl
T2JqZWN0LCBzZWxlY3Rpb24pKQorICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIC8vIFdlIG5lZWQgdG8gZmluZCB0aGUgZXhhY3Qgc3RhcnQgYW5kIGVu
ZCBwb3NpdGlvbnMgaW4gdGhlCi0gICAgLy8gc2VsZWN0ZWQgbm9kZSB0aGF0IGludGVyc2VjdHMg
dGhlIHNlbGVjdGlvbiwgdG8gbGF0ZXIgb24gZ2V0Ci0gICAgLy8gdGhlIHJpZ2h0IHZhbHVlcyBm
b3IgdGhlIGVmZmVjdGl2ZSBzdGFydCBhbmQgZW5kIG9mZnNldHMuCi0gICAgUG9zaXRpb24gbm9k
ZVJhbmdlU3RhcnQ7Ci0gICAgUG9zaXRpb24gbm9kZVJhbmdlRW5kOwotICAgIE5vZGUqIG5vZGUg
PSBjb3JlT2JqZWN0LT5ub2RlKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxSYW5nZSA9IHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotCi0gICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBhZmZl
Y3RzIHRoZSBzZWxlY3RlZCBub2RlIGFuZCBpdHMgZmlyc3QKLSAgICAvLyBwb3NzaWJsZSBwb3Np
dGlvbiBpcyBhbHNvIGluIHRoZSBzZWxlY3Rpb24sIHdlIG11c3Qgc2V0Ci0gICAgLy8gbm9kZVJh
bmdlU3RhcnQgdG8gdGhhdCBwb3NpdGlvbiwgb3RoZXJ3aXNlIHRvIHRoZSBzZWxlY3Rpb24ncwot
ICAgIC8vIHN0YXJ0IHBvc2l0aW9uIChpdCB3b3VsZCBiZWxvbmcgdG8gdGhlIG5vZGUgYW55d2F5
KS4KLSAgICBOb2RlKiBmaXJzdExlYWZOb2RlID0gbm9kZS0+Zmlyc3REZXNjZW5kYW50KCk7Ci0g
ICAgaWYgKHNlbFJhbmdlLT5pc1BvaW50SW5SYW5nZShmaXJzdExlYWZOb2RlLCAwLCBJR05PUkVf
RVhDRVBUSU9OKSkKLSAgICAgICAgbm9kZVJhbmdlU3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUoZmlyc3RMZWFmTm9kZSk7Ci0gICAgZWxzZQotICAgICAgICBub2RlUmFuZ2VTdGFy
dCA9IHNlbFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0KLSAgICAvLyBJZiB0aGUgc2VsZWN0aW9u
IGFmZmVjdHMgdGhlIHNlbGVjdGVkIG5vZGUgYW5kIGl0cyBsYXN0Ci0gICAgLy8gcG9zc2libGUg
cG9zaXRpb24gaXMgYWxzbyBpbiB0aGUgc2VsZWN0aW9uLCB3ZSBtdXN0IHNldAotICAgIC8vIG5v
ZGVSYW5nZUVuZCB0byB0aGF0IHBvc2l0aW9uLCBvdGhlcndpc2UgdG8gdGhlIHNlbGVjdGlvbidz
Ci0gICAgLy8gZW5kIHBvc2l0aW9uIChpdCB3b3VsZCBiZWxvbmcgdG8gdGhlIG5vZGUgYW55d2F5
KS4KLSAgICBOb2RlKiBsYXN0TGVhZk5vZGUgPSBub2RlLT5sYXN0RGVzY2VuZGFudCgpOwotICAg
IGlmIChzZWxSYW5nZS0+aXNQb2ludEluUmFuZ2UobGFzdExlYWZOb2RlLCBsYXN0T2Zmc2V0SW5O
b2RlKGxhc3RMZWFmTm9kZSksIElHTk9SRV9FWENFUFRJT04pKQotICAgICAgICBub2RlUmFuZ2VF
bmQgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGxhc3RMZWFmTm9kZSk7Ci0gICAgZWxzZQot
ICAgICAgICBub2RlUmFuZ2VFbmQgPSBzZWxSYW5nZS0+ZW5kUG9zaXRpb24oKTsKKyAgICAvLyBX
ZSBuZWVkIHRvIGxpbWl0IG91ciBzZWFyY2ggdG8gcG9zaXRpb25zIHRoYXQgZmFsbCBpbnNpZGUg
dGhlIGRvbWFpbiBvZiB0aGUgY3VycmVudCBvYmplY3QuCisgICAgUG9zaXRpb24gZmlyc3RWYWxp
ZFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUtPmZpcnN0RGVzY2Vu
ZGFudCgpKTsKKyAgICBQb3NpdGlvbiBsYXN0VmFsaWRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbklu
T3JBZnRlck5vZGUobm9kZS0+bGFzdERlc2NlbmRhbnQoKSk7CisKKyAgICAvLyBFYXJseSByZXR1
cm4gd2l0aCBwcm9wZXIgdmFsdWVzIGlmIHRoZSBzZWxlY3Rpb24gZmFsbHMgZW50aXJlbHkgb3V0
IG9mIHRoZSBvYmplY3QuCisgICAgaWYgKCFzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QoY29yZU9i
amVjdCwgc2VsZWN0aW9uKSkgeworICAgICAgICBzdGFydE9mZnNldCA9IGNvbXBhcmVQb3NpdGlv
bnMoc2VsZWN0aW9uLnN0YXJ0KCksIGZpcnN0VmFsaWRQb3NpdGlvbikgPCAwID8gMCA6IGFjY2Vz
c2liaWxpdHlPYmplY3RMZW5ndGgoY29yZU9iamVjdCk7CisgICAgICAgIGVuZE9mZnNldCA9IHN0
YXJ0T2Zmc2V0OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRmluZCB0aGUgcHJv
cGVyIHJhbmdlIGZvciB0aGUgc2VsZWN0aW9uIHRoYXQgZmFsbHMgaW5zaWRlIHRoZSBvYmplY3Qu
CisgICAgUG9zaXRpb24gbm9kZVJhbmdlU3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKKyAgICBp
ZiAoY29tcGFyZVBvc2l0aW9ucyhub2RlUmFuZ2VTdGFydCwgZmlyc3RWYWxpZFBvc2l0aW9uKSA8
IDApCisgICAgICAgIG5vZGVSYW5nZVN0YXJ0ID0gZmlyc3RWYWxpZFBvc2l0aW9uOworCisgICAg
UG9zaXRpb24gbm9kZVJhbmdlRW5kID0gc2VsZWN0aW9uLmVuZCgpOworICAgIGlmIChjb21wYXJl
UG9zaXRpb25zKG5vZGVSYW5nZUVuZCwgbGFzdFZhbGlkUG9zaXRpb24pID4gMCkKKyAgICAgICAg
bm9kZVJhbmdlRW5kID0gbGFzdFZhbGlkUG9zaXRpb247CiAKICAgICAvLyBDYWxjdWxhdGUgcG9z
aXRpb24gb2YgdGhlIHNlbGVjdGVkIHJhbmdlIGluc2lkZSB0aGUgb2JqZWN0LgogICAgIFBvc2l0
aW9uIHBhcmVudEZpcnN0UG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9k
ZSk7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZUluUGFyZW50ID0gUmFuZ2U6OmNyZWF0ZShub2Rl
LT5kb2N1bWVudCgpLCBwYXJlbnRGaXJzdFBvc2l0aW9uLCBub2RlUmFuZ2VTdGFydCk7CiAKLQot
ICAgIC8vIFNldCB2YWx1ZXMgZm9yIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cy4KKyAgICAvLyBTZXQg
dmFsdWVzIGZvciBzdGFydCBvZmZzZXRzIGFuZCBjYWxjdWxhdGUgaW5pdGlhbCByYW5nZSBsZW5n
dGguCisgICAgLy8gVGhlc2UgdmFsdWVzIG1pZ2h0IGJlIGFkanVzdGVkIGxhdGVyIHRvIGNvdmVy
IHNwZWNpYWwgY2FzZXMuCiAgICAgc3RhcnRPZmZzZXQgPSB3ZWJDb3JlT2Zmc2V0VG9BdGtPZmZz
ZXQoY29yZU9iamVjdCwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZUluUGFyZW50Lmdl
dCgpLCB0cnVlKSk7Ci0KICAgICBSZWZQdHI8UmFuZ2U+IG5vZGVSYW5nZSA9IFJhbmdlOjpjcmVh
dGUobm9kZS0+ZG9jdW1lbnQoKSwgbm9kZVJhbmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7Ci0gICAg
ZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG5vZGVS
YW5nZS5nZXQoKSwgdHJ1ZSk7CisgICAgaW50IHJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChub2RlUmFuZ2UuZ2V0KCksIHRydWUpOworCisgICAgLy8gU3BlY2lhbCBjYXNl
cyB0aGF0IGFyZSBvbmx5IHJlbGV2YW50IHdoZW4gd29ya2luZyB3aXRoICpfRU5EIGJvdW5kYXJp
ZXMuCisgICAgaWYgKHNlbGVjdGlvbi5hZmZpbml0eSgpID09IFVQU1RSRUFNKSB7CisgICAgICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQobm9kZVJhbmdlU3RhcnQsIFVQU1RSRUFNKTsK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQobm9kZVJhbmdlRW5kLCBVUFNUUkVB
TSk7CisKKyAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3Qgb2Zmc2V0cyB3aGVuIGZpbmRpbmcg
d3JhcHBlZCBsaW5lcyBzbyB0aGUgcG9zaXRpb24gYXQgdGhlIGVuZAorICAgICAgICAvLyBvZiB0
aGUgbGluZSBpcyBwcm9wZXJseSB0YWtpbmcgaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcg
dGhlIG9mZnNldHMuCisgICAgICAgIGlmIChpc0VuZE9mTGluZSh2aXNpYmxlU3RhcnQpICYmICFs
aW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbih2aXNpYmxlU3RhcnQpKSB7CisgICAgICAg
ICAgICBpZiAoaXNTdGFydE9mTGluZSh2aXNpYmxlU3RhcnQubmV4dCgpKSkKKyAgICAgICAgICAg
ICAgICByYW5nZUxlbmd0aCsrOworCisgICAgICAgICAgICBpZiAoIWlzRW5kT2ZCbG9jayh2aXNp
YmxlU3RhcnQpKQorICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3RkOjptYXgoc3RhcnRP
ZmZzZXQgLSAxLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0VuZE9mTGluZSh2aXNp
YmxlRW5kKSAmJiAhbGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24odmlzaWJsZUVuZCkg
JiYgIWlzRW5kT2ZCbG9jayh2aXNpYmxlRW5kKSkKKyAgICAgICAgICAgIHJhbmdlTGVuZ3RoLS07
CisgICAgfQorCisgICAgZW5kT2Zmc2V0ID0gc3RkOjptaW4oc3RhcnRPZmZzZXQgKyByYW5nZUxl
bmd0aCwgc3RhdGljX2Nhc3Q8aW50PihhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNvcmVPYmpl
Y3QpKSk7CiB9CiAKIHN0YXRpYyBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KEF0
a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQpAQCAtNjAwLDEx
ICs2MzQsMTkgQEAgZW51bSBHZXRUZXh0UmVsYXRpdmVQb3NpdGlvbiB7CiAgICAgR2V0VGV4dFBv
c2l0aW9uQWZ0ZXIKIH07CiAKKy8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGJlIHVzZWQgaW4g
ZWFybHkgcmV0dXJucy4KK3N0YXRpYyBjaGFyKiBlbXB0eVRleHRTZWxlY3Rpb25BdE9mZnNldChp
bnQgb2Zmc2V0LCBpbnQqIHN0YXJ0T2Zmc2V0LCBpbnQqIGVuZE9mZnNldCkKK3sKKyAgICAqc3Rh
cnRPZmZzZXQgPSBvZmZzZXQ7CisgICAgKmVuZE9mZnNldCA9IG9mZnNldDsKKyAgICByZXR1cm4g
Z19zdHJkdXAoIiIpOworfQorCiBzdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
Q2hhcihBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgR2V0VGV4dFJlbGF0aXZlUG9zaXRpb24g
dGV4dFBvc2l0aW9uLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQogewogICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwogICAgIGlmICgh
Y29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkp
Ci0gICAgICAgIHJldHVybiBnX3N0cmR1cCgiIik7CisgICAgICAgIHJldHVybiBlbXB0eVRleHRT
ZWxlY3Rpb25BdE9mZnNldCgwLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIAogICAgIGludCBh
Y3R1YWxPZmZzZXQgPSBvZmZzZXQ7CiAgICAgaWYgKHRleHRQb3NpdGlvbiA9PSBHZXRUZXh0UG9z
aXRpb25CZWZvcmUpCkBAIC02MjcsMTggKzY2OSwxODkgQEAgc3RhdGljIGdjaGFyKiB3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldENoYXIoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEdldFRleHRS
ZWwKICAgICByZXR1cm4gZ191dGY4X3N1YnN0cmluZyh0ZXh0RGF0YS5nZXQoKSwgKnN0YXJ0T2Zm
c2V0LCAqZW5kT2Zmc2V0KTsKIH0KIAotc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldFRleHRGb3JPZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3Vu
ZGFyeSBib3VuZGFyeVR5cGUsIEdldFRleHRSZWxhdGl2ZVBvc2l0aW9uIHRleHRQb3NpdGlvbiwg
Z2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKK3N0YXRpYyBWaXNpYmxlUG9zaXRp
b24gbmV4dFdvcmRTdGFydFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmb3JpZ2luYWxQ
b3NpdGlvbikKIHsKLSAgICAvLyBNYWtlIHN1cmUgd2UgYWx3YXlzIHJldHVybiB2YWxpZCB2YWxp
ZCB2YWx1ZXMgZm9yIG9mZnNldHMuCi0gICAgKnN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAqZW5kT2Zm
c2V0ID0gMDsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BZnRlckN1cnJlbnRXb3JkID0g
bmV4dFdvcmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKKworICAgIC8vIEluIG9yZGVyIHRv
IHNraXAgc3BhY2VzIHdoZW4gbW92aW5nIHJpZ2h0LCB3ZSBhZHZhbmNlIG9uZSB3b3JkIGZ1cnRo
ZXIKKyAgICAvLyBhbmQgdGhlbiBtb3ZlIG9uZSB3b3JkIGJhY2suIFRoaXMgd2lsbCBwdXQgdXMg
YXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgICAvLyB3b3JkIGZvbGxvd2luZy4KKyAgICBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkID0gbmV4dFdv
cmRQb3NpdGlvbihwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQpOworCisgICAgaWYgKHBvc2l0aW9u
QWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZCAhPSBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQp
CisgICAgICAgIHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCA9IHByZXZpb3VzV29yZFBvc2l0aW9u
KHBvc2l0aW9uQWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZCk7CisKKyAgICBib29sIG1vdmlu
Z0JhY2t3YXJkc01vdmVkUG9zaXRpb25Ub1N0YXJ0T2ZDdXJyZW50V29yZCA9IHBvc2l0aW9uQWZ0
ZXJDdXJyZW50V29yZCA9PSBwcmV2aW91c1dvcmRQb3NpdGlvbihuZXh0V29yZFBvc2l0aW9uKG9y
aWdpbmFsUG9zaXRpb24pKTsKKyAgICBpZiAobW92aW5nQmFja3dhcmRzTW92ZWRQb3NpdGlvblRv
U3RhcnRPZkN1cnJlbnRXb3JkKQorICAgICAgICBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQgPSBw
b3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZvbGxvd2luZ1dvcmQ7CisKKyAgICByZXR1cm4gcG9zaXRp
b25BZnRlckN1cnJlbnRXb3JkOworfQorCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3Vz
V29yZEVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmb3JpZ2luYWxQb3NpdGlvbikK
K3sKKyAgICAvLyBXZSBtb3ZlIGZvcndhcmQgYW5kIHRoZW4gYmFja3dhcmQgdG8gcG9zaXRpb24g
b3Vyc2VsdmVzIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAvLyBvZiB0aGUgY3VycmVudCB3b3JkIGZv
ciB0aGlzIGJvdW5kYXJ5LCBtYWtpbmcgdGhlIG1vc3Qgb2YgdGhlIHNlbWFudGljcworICAgIC8v
IG9mIHByZXZpb3VzV29yZFBvc2l0aW9uKCkgYW5kIG5leHRXb3JkUG9zaXRpb24oKS4KKyAgICBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCA9IHByZXZpb3VzV29y
ZFBvc2l0aW9uKG5leHRXb3JkUG9zaXRpb24ob3JpZ2luYWxQb3NpdGlvbikpOworICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbkF0UHJldmlvdXNXb3JkID0gcHJldmlvdXNXb3JkUG9zaXRpb24o
b3JpZ2luYWxQb3NpdGlvbik7CisKKyAgICAvLyBOZWVkIHRvIGNvbnNpZGVyIHNwZWNpYWwgY2Fz
ZXMgKHB1bmN0dWF0aW9uKSB3aGVuIHdlIGFyZSBpbiB0aGUgbGFzdCB3b3JkIG9mIGEgc2VudGVu
Y2UuCisgICAgaWYgKGlzU3RhcnRPZldvcmQob3JpZ2luYWxQb3NpdGlvbikgJiYgcG9zaXRpb25B
dFByZXZpb3VzV29yZCAhPSBvcmlnaW5hbFBvc2l0aW9uICYmIHBvc2l0aW9uQXRQcmV2aW91c1dv
cmQgPT0gcG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCkKKyAgICAgICAgcmV0dXJuIG5leHRX
b3JkUG9zaXRpb24ocG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCk7CisKKyAgICAvLyBJbiBv
cmRlciB0byBza2lwIHNwYWNlcyB3aGVuIG1vdmluZyBsZWZ0LCB3ZSBhZHZhbmNlIG9uZSB3b3Jk
IGJhY2t3YXJkcworICAgIC8vIGFuZCB0aGVuIG1vdmUgb25lIHdvcmQgZm9yd2FyZC4gVGhpcyB3
aWxsIHB1dCB1cyBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgLy8gdGhlIHdvcmQgZm9sbG93aW5n
LgorICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVNwYWNpbmdBbmRQcmVjZWVkaW5n
V29yZCA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHBvc2l0aW9uQXRTdGFydE9mQ3VycmVudFdvcmQp
OworCisgICAgaWYgKHBvc2l0aW9uQmVmb3JlU3BhY2luZ0FuZFByZWNlZWRpbmdXb3JkICE9IHBv
c2l0aW9uQXRTdGFydE9mQ3VycmVudFdvcmQpCisgICAgICAgIHBvc2l0aW9uQXRTdGFydE9mQ3Vy
cmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlU3BhY2luZ0FuZFByZWNl
ZWRpbmdXb3JkKTsKIAorICAgIGJvb2wgbW92aW5nRm9yd2FyZE1vdmVkUG9zaXRpb25Ub0VuZE9m
Q3VycmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKHBvc2l0aW9uQXRTdGFydE9mQ3VycmVudFdv
cmQpID09IHByZXZpb3VzV29yZFBvc2l0aW9uKG5leHRXb3JkUG9zaXRpb24ob3JpZ2luYWxQb3Np
dGlvbikpOworICAgIGlmIChtb3ZpbmdGb3J3YXJkTW92ZWRQb3NpdGlvblRvRW5kT2ZDdXJyZW50
V29yZCkKKyAgICAgICAgcG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCA9IHBvc2l0aW9uQmVm
b3JlU3BhY2luZ0FuZFByZWNlZWRpbmdXb3JkOworCisgICAgcmV0dXJuIHBvc2l0aW9uQXRTdGFy
dE9mQ3VycmVudFdvcmQ7Cit9CisKK3N0YXRpYyBWaXNpYmxlU2VsZWN0aW9uIHdvcmRBdFBvc2l0
aW9uRm9yQXRrQm91bmRhcnkoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJs
ZVBvc2l0aW9uIG9yaWdpbmFsUG9zaXRpb24sIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUp
Cit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb247CisgICAgVmlzaWJsZVBvc2l0
aW9uIGVuZFBvc2l0aW9uOworCisgICAgc3dpdGNoIChib3VuZGFyeVR5cGUpIHsKKyAgICBjYXNl
IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQ6CisgICAgICAgIC8vIGlzU3RhcnRPZldvcmQo
KSByZXR1cm5zIHRydWUgYm90aCB3aGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSAicmVhbCIgd29y
ZAorICAgICAgICAvLyBhcyB3aGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSB3aGl0ZXNwYWNlIHJh
bmdlIGJldHdlZW4gdHdvICJyZWFsIiB3b3JkcywKKyAgICAgICAgLy8gc2luY2UgdGhhdCB3aGl0
ZXNwYWNlIGlzIGNvbnNpZGVyZWQgYSAid29yZCIgYXMgd2VsbC4gQW5kIGluIGNhc2Ugd2UgYXJl
CisgICAgICAgIC8vIGFscmVhZHkgYXQgdGhlIGJlZ2lubmluZyBvZiBhICJyZWFsIiB3b3JkIHdl
IGRvIG5vdCBuZWVkIHRvIGxvb2sgYmFja3dhcmRzLgorICAgICAgICBpZiAoaXNTdGFydE9mV29y
ZChvcmlnaW5hbFBvc2l0aW9uKSAmJiBpc1doaXRlc3BhY2Uob3JpZ2luYWxQb3NpdGlvbi5jaGFy
YWN0ZXJCZWZvcmUoKSkpCisgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gb3JpZ2luYWxQb3Np
dGlvbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHByZXZpb3Vz
V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOworICAgICAgICBlbmRQb3NpdGlvbiA9IG5l
eHRXb3JkU3RhcnRQb3NpdGlvbihzdGFydFBvc2l0aW9uKTsKKworICAgICAgICAvLyBXZSBuZWVk
IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGxvb2sgZm9yIHRoZSB3b3JkIGluIHRoZSBjdXJyZW50IGxp
bmUgd2hlbgorICAgICAgICAvLyB3ZSBhcmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBsaW5l
LCBhbmQgbm90IGxvb2sgaW50byB0aGUgcHJldmlvdXMgb25lCisgICAgICAgIC8vIGF0IGFsbCwg
d2hpY2ggbWlnaHQgaGFwcGVuIHdoZW4gbGluZXMgYmVsb25nIHRvIGRpZmZlcmVudCBub2Rlcy4K
KyAgICAgICAgaWYgKGlzU3RhcnRPZkxpbmUob3JpZ2luYWxQb3NpdGlvbikgJiYgaXNTdGFydE9m
TGluZShlbmRQb3NpdGlvbikpIHsKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBlbmRQb3Np
dGlvbjsKKyAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gbmV4dFdvcmRTdGFydFBvc2l0aW9uKHN0
YXJ0UG9zaXRpb24pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBBVEtf
VEVYVF9CT1VOREFSWV9XT1JEX0VORDoKKyAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHByZXZpb3Vz
V29yZEVuZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOworICAgICAgICBlbmRQb3NpdGlvbiA9
IG5leHRXb3JkUG9zaXRpb24oc3RhcnRQb3NpdGlvbik7CisgICAgICAgIHN0YXJ0UG9zaXRpb24u
c2V0QWZmaW5pdHkoVVBTVFJFQU0pOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0ZWRXb3JkKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKworICAgIC8vIFdl
IG1hcmsgdGhlIHNlbGVjdGlvbiBhcyAndXBzdHJlYW0nIHNvIHdlIGNhbiB1c2UgdGhhdCBpbmZv
cm1hdGlvbiBsYXRlciwKKyAgICAvLyB3aGVuIGZpbmRpbmcgdGhlIGFjdHVhbCBvZmZzZXRzIGlu
IGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoKS4KKyAgICBpZiAoYm91bmRhcnlUeXBlID09
IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5EKQorICAgICAgICBzZWxlY3RlZFdvcmQuc2V0QWZm
aW5pdHkoVVBTVFJFQU0pOworCisgICAgcmV0dXJuIHNlbGVjdGVkV29yZDsKK30KKworc3RhdGlj
IGludCBudW1iZXJPZlJlcGxhY2VkRWxlbWVudHNCZWZvcmVPZmZzZXQoQXRrVGV4dCogdGV4dCwg
aW50IG9mZnNldCkKK3sKKyAgICBHT3duUHRyPGNoYXI+IHRleHRGb3JPYmplY3Qod2Via2l0QWNj
ZXNzaWJsZVRleHRHZXRUZXh0KHRleHQsIDAsIG9mZnNldCkpOworICAgIFN0cmluZyB0ZXh0QmVm
b3JlT2Zmc2V0ID0gU3RyaW5nOjpmcm9tVVRGOCh0ZXh0Rm9yT2JqZWN0LmdldCgpKTsKKworICAg
IGludCBjb3VudCA9IDA7CisgICAgc2l6ZV90IGluZGV4ID0gdGV4dEJlZm9yZU9mZnNldC5maW5k
KG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAwKTsKKyAgICB3aGlsZSAoaW5kZXggIT0gV1RG
Ojpub3RGb3VuZCkgeworICAgICAgICBjb3VudCsrOworICAgICAgICBpZiAoaW5kZXggPj0gb2Zm
c2V0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGluZGV4ID0gdGV4dEJlZm9yZU9mZnNl
dC5maW5kKG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCBpbmRleCArIDEpOworICAgIH0KKyAg
ICByZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdl
dFdvcmRGb3JCb3VuZGFyeShBdGtUZXh0KiB0ZXh0LCBpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRh
cnkgYm91bmRhcnlUeXBlLCBHZXRUZXh0UmVsYXRpdmVQb3NpdGlvbiB0ZXh0UG9zaXRpb24sIGlu
dCogc3RhcnRPZmZzZXQsIGludCogZW5kT2Zmc2V0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIGlmICghY29yZU9iamVjdCB8fCAhY29y
ZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBl
bXB0eVRleHRTZWxlY3Rpb25BdE9mZnNldCgwLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKwor
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3VtZW50KCk7CisgICAgaWYg
KCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0KDAs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgTm9kZSogbm9kZSA9IGdldE5vZGVGb3JB
Y2Nlc3NpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3QpOworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0KDAsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQpOworCisgICAgaW50IGFjdHVhbE9mZnNldCA9IGF0a09mZnNldFRvV2ViQ29yZU9mZnNldCh0
ZXh0LCBvZmZzZXQpOworCisgICAgLy8gQmVzaWRlcyBvZiB0aGUgdXN1YWwgY29udmVyc2lvbiBm
cm9tIEFUSyBvZmZzZXRzIHRvIFdlYkNvcmUgb2Zmc2V0cywKKyAgICAvLyB3ZSBuZWVkIHRvIGNv
bnNpZGVyIHRoZSBwb3RlbnRpYWwgZW1iZWRkZWQgb2JqZWN0cyB0aGF0IG1pZ2h0IGhhdmUgYmVl
bgorICAgIC8vIGluc2VydGVkIGluIHRoZSB0ZXh0IGV4cG9zZWQgdGhyb3VnaCBBdGtUZXh0IHdo
ZW4gY2FsY3VsYXRpbmcgdGhlIG9mZnNldC4KKyAgICBhY3R1YWxPZmZzZXQgLT0gbnVtYmVyT2ZS
ZXBsYWNlZEVsZW1lbnRzQmVmb3JlT2Zmc2V0KHRleHQsIGFjdHVhbE9mZnNldCk7CisKKyAgICBW
aXNpYmxlUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlv
bkZvckluZGV4KGFjdHVhbE9mZnNldCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50V29y
ZCA9IHdvcmRBdFBvc2l0aW9uRm9yQXRrQm91bmRhcnkoY29yZU9iamVjdCwgY2FyZXRQb3NpdGlv
biwgYm91bmRhcnlUeXBlKTsKKworICAgIC8vIFRha2UgaW50byBhY2NvdW50IG90aGVyIHJlbGF0
aXZlIHBvc2l0aW9ucywgaWYgbmVlZGVkLCBieQorICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBuZXcg
cG9zaXRpb24gdGhhdCB3ZSB3b3VsZCBuZWVkIHRvIGNvbnNpZGVyLgorICAgIFZpc2libGVQb3Np
dGlvbiBuZXdQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb247CisgICAgc3dpdGNoICh0ZXh0UG9zaXRp
b24pIHsKKyAgICBjYXNlIEdldFRleHRQb3NpdGlvbkF0OgorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgR2V0VGV4dFBvc2l0aW9uQmVmb3JlOgorICAgICAgICAvLyBFYXJseSByZXR1cm4gaWYg
YXNraW5nIGZvciB0aGUgcHJldmlvdXMgd29yZCB3aGlsZSBhbHJlYWR5IGF0IHRoZSBiZWdpbm5p
bmcuCisgICAgICAgIGlmIChpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGN1cnJlbnRXb3Jk
LnZpc2libGVTdGFydCgpLCBub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVRleHRTZWxl
Y3Rpb25BdE9mZnNldCgwLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgICAgICBpZiAo
aXNTdGFydE9mTGluZShjdXJyZW50V29yZC5lbmQoKSkpCisgICAgICAgICAgICBuZXdQb3NpdGlv
biA9IGN1cnJlbnRXb3JkLnZpc2libGVTdGFydCgpLnByZXZpb3VzKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3RhcnRPZldvcmQoY3VycmVudFdvcmQuc3RhcnQo
KSwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgR2V0
VGV4dFBvc2l0aW9uQWZ0ZXI6CisgICAgICAgIC8vIEVhcmx5IHJldHVybiBpZiBhc2tpbmcgZm9y
IHRoZSBmb2xsb3dpbmcgd29yZCB3aGlsZSBhbHJlYWR5IGF0IHRoZSBlbmQuCisgICAgICAgIGlm
IChpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY3VycmVudFdvcmQudmlzaWJsZUVuZCgpLCBu
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVRleHRTZWxlY3Rpb25BdE9mZnNldChhY2Nl
c3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNvcmVPYmplY3QpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
KTsKKworICAgICAgICBpZiAoaXNFbmRPZkxpbmUoY3VycmVudFdvcmQuZW5kKCkpKQorICAgICAg
ICAgICAgbmV3UG9zaXRpb24gPSBjdXJyZW50V29yZC52aXNpYmxlRW5kKCkubmV4dCgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBuZXdQb3NpdGlvbiA9IGVuZE9mV29yZChjdXJyZW50V29y
ZC5lbmQoKSwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICAvLyBE
ZXRlcm1pbmUgdGhlIHJlbGV2YW50IHdvcmQgd2UgYXJlIGFjdHVhbGx5IGludGVyZXN0ZWQgaW4K
KyAgICAvLyBhbmQgY2FsY3VsYXRlIHRoZSBBVEsgb2Zmc2V0cyBmb3IgaXQsIHRoZW4gcmV0dXJu
IGV2ZXJ5dGhpbmcuCisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3RlZFdvcmQgPSBuZXdQb3Np
dGlvbiAhPSBjYXJldFBvc2l0aW9uID8gd29yZEF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShjb3Jl
T2JqZWN0LCBuZXdQb3NpdGlvbiwgYm91bmRhcnlUeXBlKSA6IGN1cnJlbnRXb3JkOworICAgIGdl
dFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoY29yZU9iamVjdCwgc2VsZWN0ZWRXb3JkLCAqc3Rh
cnRPZmZzZXQsICplbmRPZmZzZXQpOworICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdl
dFRleHQodGV4dCwgKnN0YXJ0T2Zmc2V0LCAqZW5kT2Zmc2V0KTsKK30KKworc3RhdGljIGdjaGFy
KiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRGb3JPZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2lu
dCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUsIEdldFRleHRSZWxhdGl2ZVBv
c2l0aW9uIHRleHRQb3NpdGlvbiwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkK
K3sKICAgICBpZiAoYm91bmRhcnlUeXBlID09IEFUS19URVhUX0JPVU5EQVJZX0NIQVIpCiAgICAg
ICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXIodGV4dCwgb2Zmc2V0LCB0ZXh0
UG9zaXRpb24sIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogCisgICAgaWYgKGJvdW5kYXJ5VHlw
ZSA9PSBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJUIHx8IGJvdW5kYXJ5VHlwZSA9PSBBVEtf
VEVYVF9CT1VOREFSWV9XT1JEX0VORCkKKyAgICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0V29yZEZvckJvdW5kYXJ5KHRleHQsIG9mZnNldCwgYm91bmRhcnlUeXBlLCB0ZXh0UG9z
aXRpb24sIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCiAjaWYgUExBVEZPUk0oR1RLKQotICAg
IC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoZSBjb2RlIGJlbG93IG9uY2UgZXZlcnkgc2luZ2xlIGdl
dF90ZXh0Xypfb2Zmc2V0Ci0gICAgLy8gZnVuY3Rpb24gaGFzIGJlZW4gcHJvcGVybHkgaW1wbGVt
ZW50ZWQgd2l0aG91dCB1c2luZyBQYW5nby9DYWlyby4KKyAgICAvLyBGSVhNRTogR2V0IHJpZCBv
ZiB0aGUgY29kZSBiZWxvdyBvbmNlIGV2ZXJ5IHNpbmdsZSBwYXJ0IGFib3ZlCisgICAgLy8gaGFz
IGJlZW4gcHJvcGVybHkgaW1wbGVtZW50ZWQgd2l0aG91dCB1c2luZyBQYW5nby9DYWlyby4KICAg
ICBHYWlsT2Zmc2V0VHlwZSBvZmZzZXRUeXBlID0gR0FJTF9BVF9PRkZTRVQ7CiAgICAgc3dpdGNo
ICh0ZXh0UG9zaXRpb24pIHsKICAgICBjYXNlIEdldFRleHRQb3NpdGlvbkJlZm9yZToKQEAgLTY1
Niw2ICs4NjksMTAgQEAgc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRG
b3JPZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEEKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQogCisgICAgLy8gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4g
dmFsaWQgdmFsaWQgdmFsdWVzIGZvciBvZmZzZXRzLgorICAgICpzdGFydE9mZnNldCA9IDA7Cisg
ICAgKmVuZE9mZnNldCA9IDA7CisKICAgICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxfZ2V0X3RleHQo
Z2V0R2FpbFRleHRVdGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZvckF0ayh0ZXh0KSwg
b2Zmc2V0VHlwZSwgYm91bmRhcnlUeXBlLCBvZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQp
OwogI2VuZGlmCiAKQEAgLTc5MCw5ICsxMDA3LDYgQEAgc3RhdGljIGdpbnQgd2Via2l0QWNjZXNz
aWJsZVRleHRHZXROU2VsZWN0aW9ucyhBdGtUZXh0KiB0ZXh0KQogCiBzdGF0aWMgZ2NoYXIqIHdl
YmtpdEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0
aW9uTnVtLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQogewotICAgIC8vIERl
ZmF1bHQgdmFsdWVzLCB1bmxlc3MgdGhlIGNvbnRyYXJ5IGlzIHByb3ZlZAotICAgICpzdGFydE9m
ZnNldCA9ICplbmRPZmZzZXQgPSAwOwotCiAgICAgLy8gV2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0
IG11bHRpcGxlIHNlbGVjdGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3QgbWFrZSBzZW5z
ZSBmb3Igbm93LgogICAgIGlmIChzZWxlY3Rpb25OdW0pCiAgICAgICAgIHJldHVybiAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCmluZGV4IGNhNmE0NWYuLmZlOTc3YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxMy0wNy0xMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRh
QHNhbXN1bmcuY29tPgorCisgICAgICAgIEltcGxlbWVudCBhdGtfdGV4dF9nZXRfdGV4dF8qX29m
ZnNldCBmb3IgV09SRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE0ODcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVXBkYXRlZCBjdXJyZW50IHVuaXQgdGVzdHMgYW5kIGFkZCBhIG5ldyBvbmUgc3BlY2lm
aWMgZm9yIGVtYmVkZGVkCisgICAgICAgIG9iamVjdHMsIHRvIGVuc3VyZSB3ZSBhcmUgY292ZXJp
bmcgZXZlbiBtb3JlIGNhc2VzIHRoYW4gYmVmb3JlLgorCisgICAgICAgICogdGVzdHMvdGVzdGF0
ay5jOgorICAgICAgICAocnVuR2V0VGV4dFRlc3RzKTogVXBkYXRlZCB1bml0IHRlc3RzIHRvIGNo
ZWNrIG1vcmUgY2FzZXMgb2YKKyAgICAgICAgY2FsbGluZyB0aGUgYXRrX3RleHRfZ2V0X3RleHRf
Kl9vZmZzZXQoKSBmdW5jdGlvbnMgZm9yIFdPUkQuCisgICAgICAgICh0ZXN0V2Via2l0QXRrR2V0
VGV4dEF0T2Zmc2V0V2l0aEVtYmVkZGVkT2JqZWN0cyk6IE5ldy4KKyAgICAgICAgKG1haW4pOiBB
ZGRlZCBuZXcgdGVzdCB0byB0aGUgdGVzdCBzdWl0ZS4KKwogMjAxMy0wNy0wOSAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4g
VXBkYXRlIE5FV1MgYW5kIFZlcnNpb25zLm00IGZvciAyLjEuMyByZWxlYXNlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jIGIvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdGF0ay5jCmluZGV4IDI0MmYxZDcuLmI2YzRlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0YXRrLmMKQEAgLTUyLDYgKzUyLDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRz
V2l0aEV4dHJhbmVvdXNXaGl0ZVNwYWNlcyA9ICI8aHRtbD48aGVhZD48Ym9keT48cD5UaGkKIAog
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzV2l0aFdyYXBwZWRMaW5lcyA9ICI8aHRtbD48Ym9k
eT48cCBzdHlsZT0nbWF4LXdpZHRoOjE1MHB4Oyc+VGhpcyBpcyBvbmUgbGluZSB3cmFwcGVkIGJl
Y2F1c2Ugb2YgdGhlIG1heGltdW0gd2lkdGggb2YgaXRzIGNvbnRhaW5lci48L3A+PHA+VGhpcyBp
cyBhbm90aGVyIGxpbmUgd3JhcHBlZDxicj5iZWNhdXNlIG9mIG9uZSBmb3JjZWQ8YnI+bGluZSBi
cmVhayBpbiB0aGUgbWlkZGxlLjwvYm9keT48L2h0bWw+IjsKIAorc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnRlbnRzV2l0aEVtYmVkZGVkT2JqZWN0cyA9ICI8aHRtbD48Ym9keT5UaGlzIGlzIG9uZSBs
aW5lIGNvbnRhaW5pbmcgdHdvIDxpbWc+IGVtYmVkZGVkIG9iamVjdHMgPGltZz4gaW4gdGhlIG1p
ZGRsZS48L2JvZHk+PC9odG1sPiI7CisKIHN0YXRpYyBjb25zdCBjaGFyKiBjb21ib0JveFNlbGVj
dG9yID0gIjxodG1sPjxib2R5PjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0nZm9vJz5m
b288L29wdGlvbj48b3B0aW9uIHZhbHVlPSdiYXInPmJhcjwvb3B0aW9uPjwvc2VsZWN0PjwvYm9k
eT48L2h0bWw+IjsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGVtYmVkZGVkT2JqZWN0cyA9ICI8aHRt
bD48Ym9keT48cD5DaG9vc2U6IDxpbnB1dCB2YWx1ZT0nZm9vJyB0eXBlPSdjaGVja2JveCcvPmZv
byA8aW5wdXQgdmFsdWU9J2JhcicgdHlwZT0nY2hlY2tib3gnLz5iYXIgKHBpY2sgb25lKTwvcD48
cD5DaG9vc2U6IDxzZWxlY3QgbmFtZT0nZm9vJz48b3B0aW9uPmJhcjwvb3B0aW9uPjxvcHRpb24+
YmF6PC9vcHRpb24+PC9zZWxlY3Q+IChwaWNrIG9uZSk8L3A+PHA+PGlucHV0IG5hbWU9J2Zvb2Jh
cmJ1dHRvbicgdmFsdWU9J2Zvb2JhcicgdHlwZT0nYnV0dG9uJy8+PC9wPjwvYm9keT48L2h0bWw+
IjsKQEAgLTEzOCwxMiArMTQwLDIxIEBAIHN0YXRpYyB2b2lkIHJ1bkdldFRleHRUZXN0cyhBdGtU
ZXh0KiB0ZXh0T2JqZWN0KQogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRr
X3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAog
ICAgICAgICAgICAgICAgICAgICAgICAgNTgsICJ0aGlyZC4iLCA1OCwgNjQpOwogCisgICAgdGVz
dEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQs
IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCisgICAgICAgICAgICAgICAgICAgICAgICA2
NCwgInRoaXJkLiIsIDU4LCA2NCk7CisKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmpl
Y3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dP
UkRfU1RBUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAiIiwgMCwgMCk7CisKICAgICB0
ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9v
ZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICA1LCAiVGhpcyAiLCAwLCA1KTsKIAogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9i
amVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllf
V09SRF9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgIDcsICJUaGlzICIsIDAsIDUpOwog
CisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9i
ZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAorICAgICAgICAgICAg
ICAgICAgICAgICAgNjQsICJ0aGUgIiwgNTQsIDU4KTsKKwogICAgIHRlc3RHZXRUZXh0RnVuY3Rp
b24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9C
T1VOREFSWV9XT1JEX1NUQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgMCwgImlzICIsIDUs
IDgpOwogCkBAIC0xNTMsNiArMTY0LDkgQEAgc3RhdGljIHZvaWQgcnVuR2V0VGV4dFRlc3RzKEF0
a1RleHQqIHRleHRPYmplY3QpCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBh
dGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RB
UlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAzLCAiaXMgIiwgNSwgOCk7CiAKKyAgICB0ZXN0
R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNl
dCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IDY0LCAiIiwgNjQsIDY0KTsKKwogICAgIC8qIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5EICov
CiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9h
dF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgIlRoaXMiLCAwLCA0KTsKQEAgLTE2Niw2ICsxODAsMTUgQEAgc3RhdGljIHZvaWQg
cnVuR2V0VGV4dFRlc3RzKEF0a1RleHQqIHRleHRPYmplY3QpCiAgICAgdGVzdEdldFRleHRGdW5j
dGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JP
VU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgOSwgIiB0ZXN0IiwgOSwg
MTQpOwogCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRf
dGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAorICAgICAgICAgICAg
ICAgICAgICAgICAgNTgsICIgdGhpcmQiLCA1NywgNjMpOworCisgICAgdGVzdEdldFRleHRGdW5j
dGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JP
VU5EQVJZX1dPUkRfRU5ELAorICAgICAgICAgICAgICAgICAgICAgICAgNjQsICIuIiwgNjMsIDY0
KTsKKworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3Rl
eHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAwLCAiIiwgMCwgMCk7CisKICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRl
eHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5E
QVJZX1dPUkRfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgNSwgIlRoaXMiLCAwLCA0KTsK
IApAQCAtMTc1LDE0ICsxOTgsMjAgQEAgc3RhdGljIHZvaWQgcnVuR2V0VGV4dFRlc3RzKEF0a1Rl
eHQqIHRleHRPYmplY3QpCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtf
dGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIDcsICIgaXMiLCA0LCA3KTsKIAorICAgIHRlc3RHZXRU
ZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwg
QVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgICAgICAgICAgICAgICAgICAgICA2NCwg
IiB0aGlyZCIsIDU3LCA2Myk7CisKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3Qs
IGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9F
TkQsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAiIGlzIiwgNCwgNyk7CisKICAgICB0ZXN0
R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNl
dCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICA1
LCAiIGEiLCA3LCA5KTsKIAogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRr
X3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIDQsICIgYSIsIDcsIDkpOwogCi0gICAgdGVzdEdldFRl
eHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19U
RVhUX0JPVU5EQVJZX1dPUkRfRU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgNTgsICIgdGhp
cmQiLCA1NywgNjMpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3Rl
eHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIDY0LCAiIiwgNjQsIDY0KTsKIAogICAgIC8qIEFUS19URVhU
X0JPVU5EQVJZX1NFTlRFTkNFX1NUQVJUICovCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0
T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1NF
TlRFTkNFX1NUQVJULApAQCAtMTAyNyw2ICsxMDU2LDc1IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJr
aXRBdGtHZXRUZXh0QXRPZmZzZXRXaXRoV3JhcHBlZExpbmVzKCkKICAgICBnX29iamVjdF91bnJl
Zih3ZWJWaWV3KTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNl
dFdpdGhFbWJlZGRlZE9iamVjdHMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZf
c2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgw
MCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmll
dyksICZhbGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmll
dywgY29udGVudHNXaXRoRW1iZWRkZWRPYmplY3RzLCAwLCAwLCAwKTsKKworICAgIC8qIEVuYWJs
ZSBjYXJldCBicm93c2luZy4gKi8KKyAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpOworICAgIGdfb2JqZWN0X3NldChz
ZXR0aW5ncywgImVuYWJsZS1jYXJldC1icm93c2luZyIsIFRSVUUsIE5VTEwpOworICAgIHdlYmtp
dF93ZWJfdmlld19zZXRfc2V0dGluZ3Mod2ViVmlldywgc2V0dGluZ3MpOworCisgICAgLyogR2V0
IHRvIHRoZSBpbm5lciBBdGtUZXh0IG9iamVjdC4gKi8KKyAgICBBdGtPYmplY3QqIG9iamVjdCA9
IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAg
IC8qIENoZWNrIHRoZSBwYXJhZ3JhcGggd2l0aCB0aGUgdGV4dCB3cmFwcGVkIGJlY2F1c2Ugb2Yg
bWF4LXdpZHRoLiAqLworICAgIEF0a1RleHQqIHBhcmFncmFwaCA9IEFUS19URVhUKGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKSk7CisgICAgZ19hc3NlcnQoQVRLX0lT
X1RFWFQocGFyYWdyYXBoKSk7CisKKyAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0
KHBhcmFncmFwaCwgMCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlRoaXMg
aXMgb25lIGxpbmUgY29udGFpbmluZyB0d28gXDM1N1wyNzdcMjc0IGVtYmVkZGVkIG9iamVjdHMg
XDM1N1wyNzdcMjc0IGluIHRoZSBtaWRkbGUuIik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAg
LyogQ2hlY2sgcmlnaHQgYmVmb3JlIHRoZSBmaXJzdCBlbWJlZGRlZCBvYmplY3QgKi8KKyAgICB0
ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0
LCBBVEtfVEVYVF9CT1VOREFSWV9DSEFSLCAzMiwgIlwzNTdcMjc3XDI3NCIsIDMyLCAzMyk7Cisg
ICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29m
ZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwgMzIsICJ0d28gXDM1N1wyNzdcMjc0
ICIsIDI4LCAzNCk7CisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0
X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsIDMyLCAiIFwz
NTdcMjc3XDI3NCBlbWJlZGRlZCIsIDMxLCA0Mik7CisKKyAgICAvKiBDaGVjayByaWdodCBhZnRl
ciB0aGUgZmlyc3QgZW1iZWRkZWQgb2JqZWN0IChhbmQgYmVmb3JlIHRoZSBmaXJzdCB3b3JkIGFm
dGVyIGl0KSAqLworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9n
ZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX0NIQVIsIDMzLCAiICIsIDMzLCAz
NCk7CisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0
X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwgMzMsICJ0d28gXDM1N1wy
NzdcMjc0ICIsIDI4LCAzNCk7CisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0
a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsIDMz
LCAiIFwzNTdcMjc3XDI3NCBlbWJlZGRlZCIsIDMxLCA0Mik7CisKKyAgICAvKiBDaGVjayBhdCB0
aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCB3b3JkIGJldHdlZW4gdGhlIHR3byBlbWJlZGRlZCBv
YmplY3RzICovCisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dl
dF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfQ0hBUiwgMzQsICJlIiwgMzQsIDM1
KTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRf
YXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULCAzNCwgImVtYmVkZGVkICIs
IDM0LCA0Myk7CisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dl
dF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsIDM0LCAiIFwzNTdc
Mjc3XDI3NCBlbWJlZGRlZCIsIDMxLCA0Mik7CisKKyAgICAvKiBDaGVjayBhdCB0aGUgZW5kIG9m
IHRoZSBmaXJzdCB3b3JkIGJldHdlZW4gdGhlIHR3byBlbWJlZGRlZCBvYmplY3RzICovCisgICAg
dGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNl
dCwgQVRLX1RFWFRfQk9VTkRBUllfQ0hBUiwgNDIsICIgIiwgNDIsIDQzKTsKKyAgICB0ZXN0R2V0
VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtf
VEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULCA0MiwgImVtYmVkZGVkICIsIDM0LCA0Myk7CisgICAg
dGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNl
dCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsIDQyLCAiIG9iamVjdHMiLCA0MiwgNTApOwor
CisgICAgLyogQ2hlY2sgcmlnaHQgYmVmb3JlIHRoZSBzZWNvbmQgZW1iZWRkZWQgb2JqZWN0ICov
CisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0
X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfQ0hBUiwgNTEsICJcMzU3XDI3N1wyNzQiLCA1MSwg
NTIpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4
dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsIDUxLCAib2JqZWN0cyBc
MzU3XDI3N1wyNzQgIiwgNDMsIDUzKTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFw
aCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VO
RCwgNTEsICIgXDM1N1wyNzdcMjc0IGluIiwgNTAsIDU1KTsKKworICAgIC8qIENoZWNrIHJpZ2h0
IGFmdGVyIHRoZSBzZWNvbmQgZW1iZWRkZWQgb2JqZWN0IChhbmQgYmVmb3JlIHRoZSBmaXJzdCB3
b3JkIGFmdGVyIGl0KSAqLworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtf
dGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX0NIQVIsIDUyLCAiICIs
IDUyLCA1Myk7CisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dl
dF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwgNTIsICJvYmpl
Y3RzIFwzNTdcMjc3XDI3NCAiLCA0MywgNTMpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFy
YWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dP
UkRfRU5ELCA1MiwgIiBcMzU3XDI3N1wyNzQgaW4iLCA1MCwgNTUpOworCisgICAgLyogQ2hlY2sg
YXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3Qgd29yZCBhZnRlciB0aGUgdHdvIGVtYmVkZGVk
IG9iamVjdHMgKi8KKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRf
Z2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9DSEFSLCA1MywgImkiLCA1Mywg
NTQpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4
dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsIDUzLCAiaW4gIiwgNTMs
IDU2KTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3Rl
eHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwgNTMsICIgXDM1N1wyNzdc
Mjc0IGluIiwgNTAsIDU1KTsKKworICAgIC8qIENoZWNrIGF0IHRoZSBlbmQgb2YgdGhlIGZpcnN0
IHdvcmQgYWZ0ZXIgdGhlIHR3byBlbWJlZGRlZCBvYmplY3RzICovCisgICAgdGVzdEdldFRleHRG
dW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRf
Qk9VTkRBUllfQ0hBUiwgNTUsICIgIiwgNTUsIDU2KTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9u
KHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFS
WV9XT1JEX1NUQVJULCA1NSwgImluICIsIDUzLCA1Nik7CisgICAgdGVzdEdldFRleHRGdW5jdGlv
bihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRB
UllfV09SRF9FTkQsIDU1LCAiIHRoZSIsIDU1LCA1OSk7CisKKyAgICBnX29iamVjdF91bnJlZihw
YXJhZ3JhcGgpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCiBzdGF0aWMgdm9p
ZCB0ZXN0V2Via2l0QXRrR2V0VGV4dEluUGFyYWdyYXBoQW5kQm9keVNpbXBsZSgpCiB7CiAgICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwpAQCAtMjA5OCw2ICsyMTk2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEF0T2Zmc2V0V2l0
aFByZWZvcm1hdHRlZFRleHQiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0V2l0aFByZWZv
cm1hdHRlZFRleHQpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEF0
T2Zmc2V0V2l0aFNwZWNpYWxDaGFyYWN0ZXJzIiwgdGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNl
dFdpdGhTcGVjaWFsQ2hhcmFjdGVycyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay9nZXRUZXh0QXRPZmZzZXRXaXRoV3JhcHBlZExpbmVzIiwgdGVzdFdlYmtpdEF0a0dldFRleHRB
dE9mZnNldFdpdGhXcmFwcGVkTGluZXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9h
dGsvZ2V0VGV4dEF0T2Zmc2V0V2l0aEVtYmVkZGVkT2JqZWN0cyIsIHRlc3RXZWJraXRBdGtHZXRU
ZXh0QXRPZmZzZXRXaXRoRW1iZWRkZWRPYmplY3RzKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvYXRrL2dldFRleHRJblBhcmFncmFwaEFuZEJvZHlTaW1wbGUiLCB0ZXN0V2Via2l0QXRr
R2V0VGV4dEluUGFyYWdyYXBoQW5kQm9keVNpbXBsZSk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2F0ay9nZXRUZXh0SW5QYXJhZ3JhcGhBbmRCb2R5TW9kZXJhdGUiLCB0ZXN0V2Via2l0
QXRrR2V0VGV4dEluUGFyYWdyYXBoQW5kQm9keU1vZGVyYXRlKTsKICAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvYXRrL2dldFRleHRJblRhYmxlIiwgdGVzdFdlYmtpdEF0a0dldFRleHRJblRh
YmxlKTsKLS0gCjEuNy4xMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206652</attachid>
            <date>2013-07-15 03:10:25 -0700</date>
            <delta_ts>2013-07-16 10:10:06 -0700</delta_ts>
            <desc>Patch proposal plus new Unit tests</desc>
            <filename>bug-114871-20130715110927.patch</filename>
            <type>text/plain</type>
            <size>32846</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJmMzA0ODZlNDViNDgx
ODBhNzA0OTQ3ZTdkNTc2ZGY2ODE3M2QyYS4uNTgzMWQyZTA0NWZkYjBkMjA5YzIyOGRhMjAxMjAz
YzFiYjc4YzRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEzLTA3LTEyICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgSW1w
bGVtZW50IGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZvciBXT1JECisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ4NzEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZS1pbXBsZW1lbnQgdGhpcyBmdW5j
dGlvbnMgd2l0aG91dCB1c2luZyBHYWlsVGV4dFV0aWwgbm9yIFBhbmdvLgorCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAg
ICAgICAodGV4dEZvck9iamVjdCk6IE1hZGUgdGhlIHBhcmFtZXRlciBhIGNvbnN0LCB0byBhdm9p
ZCB3YXJuaW5ncy4KKyAgICAgICAgKGdldE5vZGVGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KTogTmV3
IGhlbHBlciBmdW5jdGlvbiB0byBlbnN1cmUgd2UKKyAgICAgICAgYWx3YXlzIGdldCB0aGUgcmVs
ZXZhbnQgb2JqZWN0IGZyb20gdGhlIERPTSB0cmVlIGZvciBhIGdpdmVuCisgICAgICAgIGFjY2Vz
c2liaWxpdHkgb2JqZWN0LCBpbiB0aGUgY29udGV4dCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YK
KyAgICAgICAgQXRrVGV4dCwgc28gaXQgd29ya3MgYm90aCB3aXRoIFRleHQgQ29udHJvbHMgYW5k
IG90aGVyIGVsZW1lbnRzLgorICAgICAgICAoZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdCk6
IFJld3JpdHRlbiB0aGlzIGZ1bmN0aW9uIGluIHRlcm1zCisgICAgICAgIG9mIFZpc2libGVQb3Np
dGlvbnMgYW5kIGF2b2lkaW5nIHdlaXJkIG9wZXJhdGlvbnMgd2l0aCByYW5nZXMsIHNvCisgICAg
ICAgIHdlIGhhdmUgbW9yZSBjb250cm9sIHRvIGZpbmUgdHVuZSB0aGUgcmVzdWx0cyBhbmQgZ2l2
ZSBtb3JlCisgICAgICAgIGFjY3VyYXRlIG9uZXMuIEJlc2lkZXMsIG5vdyBpdCB3b3JrcyBiZXR0
ZXIgd2l0aCBlZGdlIGNhc2VzLgorICAgICAgICAoZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQp
OiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBiZSB1c2VkIGluCisgICAgICAgIGVhcmx5IHJldHVy
bnMgZnJvbSBmdW5jdGlvbnMgcmV0dXJuaW5nIGJvdGggdGV4dCBhbmQgb2Zmc2V0cy4KKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcik6IFVzZSBlbXB0eVRleHRTZWxlY3Rpb25B
dE9mZnNldCgpLgorICAgICAgICAobmV4dFdvcmRTdGFydFBvc2l0aW9uKTogSGVscGVyIGZ1bmN0
aW9uIHRvIHJlbGlhYmx5IGZpbmQgdGhlCisgICAgICAgIHN0YXJ0IG9mIHRoZSBuZXh0IHdvcmQg
YXMgYW5kIHVzZXIgd291bGQgZG8gaXQgYnkgbmF2aWdhdGluZyB3aXRoCisgICAgICAgIEN0cmwg
YW5kIHRoZSBhcnJvd3MgKGNvbnNpZGVyaW5nIHNwYWNlcyBhbmQgcHVuY3R1YXRpb24pLgorICAg
ICAgICAocHJldmlvdXNXb3JkRW5kUG9zaXRpb24pOiBTaW1pbGFyIHRvIG5leHRXb3JkU3RhcnRQ
b3NpdGlvbiwgYnV0CisgICAgICAgIHdyaXR0ZW4gdG8gaGVscCBmaW5kIHRoZSBlbmQgb2YgdGhl
IHByZXZpb3VzIG9uZS4KKyAgICAgICAgKHdvcmRBdFBvc2l0aW9uRm9yQXRrQm91bmRhcnkpOiBI
ZWxwZXIgZnVuY3Rpb24gdG8gZmluZHMgdGhlIHdvcmQKKyAgICAgICAgYXQgYSBnaXZlbiBwb3Np
dGlvbiBjb25zaWRlcmluZyB2YWx1ZXMgb2YgQXRrVGV4dEJvdW5kYXJ5LgorICAgICAgICAobnVt
YmVyT2ZSZXBsYWNlZEVsZW1lbnRzQmVmb3JlT2Zmc2V0KTogSGVscGVyIGZ1bmN0aW9uIHRvIGhl
bHAKKyAgICAgICAgZmlndXJlIG91dCBob3cgbWFueSBlbWJlZGRlZCBvYmplY3RzIHdlIGhhdmUg
ZXhwb3NlZCBmb3IgYW4KKyAgICAgICAgQXRrVGV4dCBvYmplY3QsIHVzZWQgdG8gYWRqdXN0IG9m
ZnNldHMgY29taW5nIGZyb20gb3V0c2lkZS4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0V29yZEZvckJvdW5kYXJ5KTogTmV3IGZ1bmN0aW9uLAorICAgICAgICBpbXBsZW1lbnRpbmcg
YXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQuCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldFRleHRGb3JPZmZzZXQpOiBSZXBsYWNlIHVzYWdlIG9mIEdhaWwgZm9yCisg
ICAgICAgIFdPUkQgYm91bmRhcmllcyB3aXRoIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0V29yZEZv
ckJvdW5kYXJ5KCkuCisgICAgICAgIEFsc28sIG1vdmVkIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0
aGUgc3RhcnQgYW5kIGVuZCBvZmZzZXRzIHRvIHRoZQorICAgICAgICBib3R0b20sIGludG8gdGhl
IGdhaWwvcGFuZ28gc2VjdGlvbiwgc2luY2UgdGhvc2UgdmFsdWVzIHdpbGwgYmUKKyAgICAgICAg
ZnJvbSBub3cgb24gaW5pdGlhbGl6ZWQgaW4gZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdCgp
LgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRTZWxlY3Rpb24pOiBSZW1vdmVkIHRo
ZSBpbml0aWFsaXphdGlvbiBvZgorICAgICAgICB0aGUgc3RhcnQgYW5kIGVuZCBvZmZzZXRzLCBz
aW5jZSB0aG9zZSB2YWx1ZXMgd2lsbCBiZSBmcm9tIG5vdyBvbgorICAgICAgICBpbml0aWFsaXpl
ZCBpbiBnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KCkuCisKIDIwMTMtMDctMTQgIEpvbiBM
ZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIE9yaWdpbnMgd2l0aCBpbnZhbGlkIHBv
cnRzIGFyZSBub3QgbWFya2VkIGFzIHVuaXF1ZSAoMTE4NjUyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4
IGNhNmE0NWYyYjdlM2M2N2VhNjBhNGM5NzVkOWMyMGEzNzQzZDUyZDMuLmZlOTc3YmUzNTdjMjE2
ZDhiOWYyODFiNTZmNWIwZjM0MDIxYWJmZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAxMy0wNy0xMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1
bmcuY29tPgorCisgICAgICAgIEltcGxlbWVudCBhdGtfdGV4dF9nZXRfdGV4dF8qX29mZnNldCBm
b3IgV09SRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE0ODcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXBkYXRlZCBjdXJyZW50IHVuaXQgdGVzdHMgYW5kIGFkZCBhIG5ldyBvbmUgc3BlY2lmaWMgZm9y
IGVtYmVkZGVkCisgICAgICAgIG9iamVjdHMsIHRvIGVuc3VyZSB3ZSBhcmUgY292ZXJpbmcgZXZl
biBtb3JlIGNhc2VzIHRoYW4gYmVmb3JlLgorCisgICAgICAgICogdGVzdHMvdGVzdGF0ay5jOgor
ICAgICAgICAocnVuR2V0VGV4dFRlc3RzKTogVXBkYXRlZCB1bml0IHRlc3RzIHRvIGNoZWNrIG1v
cmUgY2FzZXMgb2YKKyAgICAgICAgY2FsbGluZyB0aGUgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZz
ZXQoKSBmdW5jdGlvbnMgZm9yIFdPUkQuCisgICAgICAgICh0ZXN0V2Via2l0QXRrR2V0VGV4dEF0
T2Zmc2V0V2l0aEVtYmVkZGVkT2JqZWN0cyk6IE5ldy4KKyAgICAgICAgKG1haW4pOiBBZGRlZCBu
ZXcgdGVzdCB0byB0aGUgdGVzdCBzdWl0ZS4KKwogMjAxMy0wNy0wOSAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gVXBkYXRl
IE5FV1MgYW5kIFZlcnNpb25zLm00IGZvciAyLjEuMyByZWxlYXNlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwCmluZGV4IDEyZTUxZTNjOTJlMzcwODM3MzJmNGJhOTdlZGIxOGFi
ZTgwMmM1NjIuLjI1NWI2MDRlYmY2NTk3OGQ0MTBlY2UwYWU1MGYzNDYwMzliNTdkMzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxv
bnpvCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLgogICoKICAqIFBvcnRp
b25zIGZyb20gTW96aWxsYSBhMTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKICAqCkBAIC00OSw2
ICs1MCw3IEBACiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIKICNpbmNsdWRlICJX
ZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisj
aW5jbHVkZSA8d3RmL05vdEZvdW5kLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMTM2LDcgKzEzOCw3IEBAIHN0
YXRpYyBnY2hhciogdGV4dEZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAg
cmV0dXJuIGdfc3RyaW5nX2ZyZWUocmVzdWx0VGV4dCwgRkFMU0UpOwogfQogCi1zdGF0aWMgZ2No
YXIqIHRleHRGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKK3N0YXRp
YyBnY2hhciogdGV4dEZvck9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2Jq
ZWN0KQogewogICAgIEdTdHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKIApAQCAtNTAwLDUz
ICs1MDIsODUgQEAgc3RhdGljIGludCBhdGtPZmZzZXRUb1dlYkNvcmVPZmZzZXQoQXRrVGV4dCog
dGV4dCwgaW50IG9mZnNldCkKICAgICByZXR1cm4gb2Zmc2V0IC0gb2Zmc2V0QWRqdXN0bWVudEZv
ckxpc3RJdGVtKGNvcmVPYmplY3QpOwogfQogCitzdGF0aWMgTm9kZSogZ2V0Tm9kZUZvckFjY2Vz
c2liaWxpdHlPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKK3sKKyAgICBp
ZiAoIWNvcmVPYmplY3QtPmlzTmF0aXZlVGV4dENvbnRyb2woKSkKKyAgICAgICAgcmV0dXJuIGNv
cmVPYmplY3QtPm5vZGUoKTsKKworICAgIC8vIEZvciB0ZXh0IGNvbnRyb2xzLCB3ZSBnZXQgdGhl
IGZpcnN0IHZpc2libGUgcG9zaXRpb24gb24gaXQgKHdoaWNoIHdpbGwKKyAgICAvLyBiZWxvbmcg
dG8gaXRzIGlubmVyIGVsZW1lbnQsIHVucmVhY2hhYmxlIGZyb20gdGhlIERPTSkgYW5kIHJldHVy
biBpdHMKKyAgICAvLyBwYXJlbnQgbm9kZSwgc28gd2UgaGF2ZSBhICJib3VuZGluZyBub2RlIiBm
b3IgdGhlIGFjY2Vzc2liaWxpdHkgb2JqZWN0LgorICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
bkluVGV4dENvbnRyb2xJbm5lckVsZW1lbnQgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25G
b3JJbmRleCgwLCB0cnVlKTsKKyAgICBOb2RlKiBpbm5lck1vc3ROb2RlID0gcG9zaXRpb25JblRl
eHRDb250cm9sSW5uZXJFbGVtZW50LmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpOworICAg
IGlmICghaW5uZXJNb3N0Tm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaW5u
ZXJNb3N0Tm9kZS0+cGFyZW50Tm9kZSgpOworfQorCiBzdGF0aWMgdm9pZCBnZXRTZWxlY3Rpb25P
ZmZzZXRzRm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiwgZ2ludCYgc3RhcnRPZmZzZXQsIGdpbnQmIGVuZE9mZnNldCkK
IHsKLSAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQor
ICAgIC8vIERlZmF1bHQgdmFsdWVzLCB1bmxlc3MgdGhlIGNvbnRyYXJ5IGlzIHByb3ZlZC4KKyAg
ICBzdGFydE9mZnNldCA9IDA7CisgICAgZW5kT2Zmc2V0ID0gMDsKKworICAgIE5vZGUqIG5vZGUg
PSBnZXROb2RlRm9yQWNjZXNzaWJpbGl0eU9iamVjdChjb3JlT2JqZWN0KTsKKyAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgc2VsZWN0
aW9uIGRvZXNuJ3QgYWZmZWN0IHRoZSBzZWxlY3RlZCBub2RlLgotICAgIGlmICghc2VsZWN0aW9u
QmVsb25nc1RvT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlvbikpCisgICAgaWYgKHNlbGVjdGlv
bi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2UgbmVlZCB0byBmaW5kIHRo
ZSBleGFjdCBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyBpbiB0aGUKLSAgICAvLyBzZWxlY3RlZCBu
b2RlIHRoYXQgaW50ZXJzZWN0cyB0aGUgc2VsZWN0aW9uLCB0byBsYXRlciBvbiBnZXQKLSAgICAv
LyB0aGUgcmlnaHQgdmFsdWVzIGZvciB0aGUgZWZmZWN0aXZlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0
cy4KLSAgICBQb3NpdGlvbiBub2RlUmFuZ2VTdGFydDsKLSAgICBQb3NpdGlvbiBub2RlUmFuZ2VF
bmQ7Ci0gICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKLSAgICBSZWZQdHI8UmFu
Z2U+IHNlbFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0KLSAgICAvLyBJ
ZiB0aGUgc2VsZWN0aW9uIGFmZmVjdHMgdGhlIHNlbGVjdGVkIG5vZGUgYW5kIGl0cyBmaXJzdAot
ICAgIC8vIHBvc3NpYmxlIHBvc2l0aW9uIGlzIGFsc28gaW4gdGhlIHNlbGVjdGlvbiwgd2UgbXVz
dCBzZXQKLSAgICAvLyBub2RlUmFuZ2VTdGFydCB0byB0aGF0IHBvc2l0aW9uLCBvdGhlcndpc2Ug
dG8gdGhlIHNlbGVjdGlvbidzCi0gICAgLy8gc3RhcnQgcG9zaXRpb24gKGl0IHdvdWxkIGJlbG9u
ZyB0byB0aGUgbm9kZSBhbnl3YXkpLgotICAgIE5vZGUqIGZpcnN0TGVhZk5vZGUgPSBub2RlLT5m
aXJzdERlc2NlbmRhbnQoKTsKLSAgICBpZiAoc2VsUmFuZ2UtPmlzUG9pbnRJblJhbmdlKGZpcnN0
TGVhZk5vZGUsIDAsIElHTk9SRV9FWENFUFRJT04pKQotICAgICAgICBub2RlUmFuZ2VTdGFydCA9
IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShmaXJzdExlYWZOb2RlKTsKLSAgICBlbHNlCi0g
ICAgICAgIG5vZGVSYW5nZVN0YXJ0ID0gc2VsUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLQotICAg
IC8vIElmIHRoZSBzZWxlY3Rpb24gYWZmZWN0cyB0aGUgc2VsZWN0ZWQgbm9kZSBhbmQgaXRzIGxh
c3QKLSAgICAvLyBwb3NzaWJsZSBwb3NpdGlvbiBpcyBhbHNvIGluIHRoZSBzZWxlY3Rpb24sIHdl
IG11c3Qgc2V0Ci0gICAgLy8gbm9kZVJhbmdlRW5kIHRvIHRoYXQgcG9zaXRpb24sIG90aGVyd2lz
ZSB0byB0aGUgc2VsZWN0aW9uJ3MKLSAgICAvLyBlbmQgcG9zaXRpb24gKGl0IHdvdWxkIGJlbG9u
ZyB0byB0aGUgbm9kZSBhbnl3YXkpLgotICAgIE5vZGUqIGxhc3RMZWFmTm9kZSA9IG5vZGUtPmxh
c3REZXNjZW5kYW50KCk7Ci0gICAgaWYgKHNlbFJhbmdlLT5pc1BvaW50SW5SYW5nZShsYXN0TGVh
Zk5vZGUsIGxhc3RPZmZzZXRJbk5vZGUobGFzdExlYWZOb2RlKSwgSUdOT1JFX0VYQ0VQVElPTikp
Ci0gICAgICAgIG5vZGVSYW5nZUVuZCA9IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobGFzdExl
YWZOb2RlKTsKLSAgICBlbHNlCi0gICAgICAgIG5vZGVSYW5nZUVuZCA9IHNlbFJhbmdlLT5lbmRQ
b3NpdGlvbigpOworICAgIC8vIFdlIG5lZWQgdG8gbGltaXQgb3VyIHNlYXJjaCB0byBwb3NpdGlv
bnMgdGhhdCBmYWxsIGluc2lkZSB0aGUgZG9tYWluIG9mIHRoZSBjdXJyZW50IG9iamVjdC4KKyAg
ICBQb3NpdGlvbiBmaXJzdFZhbGlkUG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5v
ZGUobm9kZS0+Zmlyc3REZXNjZW5kYW50KCkpOworICAgIFBvc2l0aW9uIGxhc3RWYWxpZFBvc2l0
aW9uID0gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2RlLT5sYXN0RGVzY2VuZGFudCgpKTsK
KworICAgIC8vIEVhcmx5IHJldHVybiB3aXRoIHByb3BlciB2YWx1ZXMgaWYgdGhlIHNlbGVjdGlv
biBmYWxscyBlbnRpcmVseSBvdXQgb2YgdGhlIG9iamVjdC4KKyAgICBpZiAoIXNlbGVjdGlvbkJl
bG9uZ3NUb09iamVjdChjb3JlT2JqZWN0LCBzZWxlY3Rpb24pKSB7CisgICAgICAgIHN0YXJ0T2Zm
c2V0ID0gY29tcGFyZVBvc2l0aW9ucyhzZWxlY3Rpb24uc3RhcnQoKSwgZmlyc3RWYWxpZFBvc2l0
aW9uKSA8IDAgPyAwIDogYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb3JlT2JqZWN0KTsKKyAg
ICAgICAgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBGaW5kIHRoZSBwcm9wZXIgcmFuZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdGhhdCBmYWxs
cyBpbnNpZGUgdGhlIG9iamVjdC4KKyAgICBQb3NpdGlvbiBub2RlUmFuZ2VTdGFydCA9IHNlbGVj
dGlvbi5zdGFydCgpOworICAgIGlmIChjb21wYXJlUG9zaXRpb25zKG5vZGVSYW5nZVN0YXJ0LCBm
aXJzdFZhbGlkUG9zaXRpb24pIDwgMCkKKyAgICAgICAgbm9kZVJhbmdlU3RhcnQgPSBmaXJzdFZh
bGlkUG9zaXRpb247CisKKyAgICBQb3NpdGlvbiBub2RlUmFuZ2VFbmQgPSBzZWxlY3Rpb24uZW5k
KCk7CisgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMobm9kZVJhbmdlRW5kLCBsYXN0VmFsaWRQb3Np
dGlvbikgPiAwKQorICAgICAgICBub2RlUmFuZ2VFbmQgPSBsYXN0VmFsaWRQb3NpdGlvbjsKIAog
ICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBvZiB0aGUgc2VsZWN0ZWQgcmFuZ2UgaW5zaWRlIHRo
ZSBvYmplY3QuCiAgICAgUG9zaXRpb24gcGFyZW50Rmlyc3RQb3NpdGlvbiA9IGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShub2RlKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlSW5QYXJlbnQg
PSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIHBhcmVudEZpcnN0UG9zaXRpb24sIG5v
ZGVSYW5nZVN0YXJ0KTsKIAotCi0gICAgLy8gU2V0IHZhbHVlcyBmb3Igc3RhcnQgYW5kIGVuZCBv
ZmZzZXRzLgorICAgIC8vIFNldCB2YWx1ZXMgZm9yIHN0YXJ0IG9mZnNldHMgYW5kIGNhbGN1bGF0
ZSBpbml0aWFsIHJhbmdlIGxlbmd0aC4KKyAgICAvLyBUaGVzZSB2YWx1ZXMgbWlnaHQgYmUgYWRq
dXN0ZWQgbGF0ZXIgdG8gY292ZXIgc3BlY2lhbCBjYXNlcy4KICAgICBzdGFydE9mZnNldCA9IHdl
YkNvcmVPZmZzZXRUb0F0a09mZnNldChjb3JlT2JqZWN0LCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHJhbmdlSW5QYXJlbnQuZ2V0KCksIHRydWUpKTsKLQogICAgIFJlZlB0cjxSYW5nZT4gbm9k
ZVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBub2RlUmFuZ2VTdGFydCwg
bm9kZVJhbmdlRW5kKTsKLSAgICBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgobm9kZVJhbmdlLmdldCgpLCB0cnVlKTsKKyAgICBpbnQgcmFuZ2VMZW5n
dGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG5vZGVSYW5nZS5nZXQoKSwgdHJ1ZSk7CisK
KyAgICAvLyBTcGVjaWFsIGNhc2VzIHRoYXQgYXJlIG9ubHkgcmVsZXZhbnQgd2hlbiB3b3JraW5n
IHdpdGggKl9FTkQgYm91bmRhcmllcy4KKyAgICBpZiAoc2VsZWN0aW9uLmFmZmluaXR5KCkgPT0g
VVBTVFJFQU0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChub2RlUmFu
Z2VTdGFydCwgVVBTVFJFQU0pOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChu
b2RlUmFuZ2VFbmQsIFVQU1RSRUFNKTsKKworICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCBv
ZmZzZXRzIHdoZW4gZmluZGluZyB3cmFwcGVkIGxpbmVzIHNvIHRoZSBwb3NpdGlvbiBhdCB0aGUg
ZW5kCisgICAgICAgIC8vIG9mIHRoZSBsaW5lIGlzIHByb3Blcmx5IHRha2luZyBpbnRvIGFjY291
bnQgd2hlbiBjYWxjdWxhdGluZyB0aGUgb2Zmc2V0cy4KKyAgICAgICAgaWYgKGlzRW5kT2ZMaW5l
KHZpc2libGVTdGFydCkgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2li
bGVTdGFydCkpIHsKKyAgICAgICAgICAgIGlmIChpc1N0YXJ0T2ZMaW5lKHZpc2libGVTdGFydC5u
ZXh0KCkpKQorICAgICAgICAgICAgICAgIHJhbmdlTGVuZ3RoKys7CisKKyAgICAgICAgICAgIGlm
ICghaXNFbmRPZkJsb2NrKHZpc2libGVTdGFydCkpCisgICAgICAgICAgICAgICAgc3RhcnRPZmZz
ZXQgPSBzdGQ6Om1heChzdGFydE9mZnNldCAtIDEsIDApOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzRW5kT2ZMaW5lKHZpc2libGVFbmQpICYmICFsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQ
b3NpdGlvbih2aXNpYmxlRW5kKSAmJiAhaXNFbmRPZkJsb2NrKHZpc2libGVFbmQpKQorICAgICAg
ICAgICAgcmFuZ2VMZW5ndGgtLTsKKyAgICB9CisKKyAgICBlbmRPZmZzZXQgPSBzdGQ6Om1pbihz
dGFydE9mZnNldCArIHJhbmdlTGVuZ3RoLCBzdGF0aWNfY2FzdDxpbnQ+KGFjY2Vzc2liaWxpdHlP
YmplY3RMZW5ndGgoY29yZU9iamVjdCkpKTsKIH0KIAogc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldFRleHQoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBl
bmRPZmZzZXQpCkBAIC02MDAsMTEgKzYzNCwxOSBAQCBlbnVtIEdldFRleHRSZWxhdGl2ZVBvc2l0
aW9uIHsKICAgICBHZXRUZXh0UG9zaXRpb25BZnRlcgogfTsKIAorLy8gQ29udmVuaWVuY2UgZnVu
Y3Rpb24gdG8gYmUgdXNlZCBpbiBlYXJseSByZXR1cm5zLgorc3RhdGljIGNoYXIqIGVtcHR5VGV4
dFNlbGVjdGlvbkF0T2Zmc2V0KGludCBvZmZzZXQsIGludCogc3RhcnRPZmZzZXQsIGludCogZW5k
T2Zmc2V0KQoreworICAgICpzdGFydE9mZnNldCA9IG9mZnNldDsKKyAgICAqZW5kT2Zmc2V0ID0g
b2Zmc2V0OworICAgIHJldHVybiBnX3N0cmR1cCgiIik7Cit9CisKIHN0YXRpYyBnY2hhciogd2Vi
a2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBHZXRU
ZXh0UmVsYXRpdmVQb3NpdGlvbiB0ZXh0UG9zaXRpb24sIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50
KiBlbmRPZmZzZXQpCiB7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNv
cmUodGV4dCk7CiAgICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5pc0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGdfc3RyZHVwKCIiKTsKKyAgICAg
ICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0KDAsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQpOwogCiAgICAgaW50IGFjdHVhbE9mZnNldCA9IG9mZnNldDsKICAgICBpZiAodGV4dFBv
c2l0aW9uID09IEdldFRleHRQb3NpdGlvbkJlZm9yZSkKQEAgLTYyNywxOCArNjY5LDE4NyBAQCBz
dGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcihBdGtUZXh0KiB0ZXh0LCBn
aW50IG9mZnNldCwgR2V0VGV4dFJlbAogICAgIHJldHVybiBnX3V0Zjhfc3Vic3RyaW5nKHRleHRE
YXRhLmdldCgpLCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOwogfQogCi1zdGF0aWMgZ2NoYXIq
IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50
IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgR2V0VGV4dFJlbGF0aXZlUG9z
aXRpb24gdGV4dFBvc2l0aW9uLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQor
c3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0V29yZFN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZvcmlnaW5hbFBvc2l0aW9uKQogewotICAgIC8vIE1ha2Ugc3VyZSB3ZSBhbHdh
eXMgcmV0dXJuIHZhbGlkIHZhbGlkIHZhbHVlcyBmb3Igb2Zmc2V0cy4KLSAgICAqc3RhcnRPZmZz
ZXQgPSAwOwotICAgICplbmRPZmZzZXQgPSAwOworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
bkFmdGVyQ3VycmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOwor
CisgICAgLy8gSW4gb3JkZXIgdG8gc2tpcCBzcGFjZXMgd2hlbiBtb3ZpbmcgcmlnaHQsIHdlIGFk
dmFuY2Ugb25lIHdvcmQgZnVydGhlcgorICAgIC8vIGFuZCB0aGVuIG1vdmUgb25lIHdvcmQgYmFj
ay4gVGhpcyB3aWxsIHB1dCB1cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgIC8vIHdvcmQg
Zm9sbG93aW5nLgorICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZv
bGxvd2luZ1dvcmQgPSBuZXh0V29yZFBvc2l0aW9uKHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCk7
CisKKyAgICBpZiAocG9zaXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkICE9IHBvc2l0
aW9uQWZ0ZXJDdXJyZW50V29yZCkKKyAgICAgICAgcG9zaXRpb25BZnRlckN1cnJlbnRXb3JkID0g
cHJldmlvdXNXb3JkUG9zaXRpb24ocG9zaXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3Jk
KTsKKworICAgIGJvb2wgbW92aW5nQmFja3dhcmRzTW92ZWRQb3NpdGlvblRvU3RhcnRPZkN1cnJl
bnRXb3JkID0gcG9zaXRpb25BZnRlckN1cnJlbnRXb3JkID09IHByZXZpb3VzV29yZFBvc2l0aW9u
KG5leHRXb3JkUG9zaXRpb24ob3JpZ2luYWxQb3NpdGlvbikpOworICAgIGlmIChtb3ZpbmdCYWNr
d2FyZHNNb3ZlZFBvc2l0aW9uVG9TdGFydE9mQ3VycmVudFdvcmQpCisgICAgICAgIHBvc2l0aW9u
QWZ0ZXJDdXJyZW50V29yZCA9IHBvc2l0aW9uQWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZDsK
KworICAgIHJldHVybiBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQ7Cit9CisKK3N0YXRpYyBWaXNp
YmxlUG9zaXRpb24gcHJldmlvdXNXb3JkRW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZvcmlnaW5hbFBvc2l0aW9uKQoreworICAgIC8vIFdlIG1vdmUgZm9yd2FyZCBhbmQgdGhlbiBi
YWNrd2FyZCB0byBwb3NpdGlvbiBvdXJzZWx2ZXMgYXQgdGhlIGJlZ2lubmluZworICAgIC8vIG9m
IHRoZSBjdXJyZW50IHdvcmQgZm9yIHRoaXMgYm91bmRhcnksIG1ha2luZyB0aGUgbW9zdCBvZiB0
aGUgc2VtYW50aWNzCisgICAgLy8gb2YgcHJldmlvdXNXb3JkUG9zaXRpb24oKSBhbmQgbmV4dFdv
cmRQb3NpdGlvbigpLgorICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkF0U3RhcnRPZkN1cnJl
bnRXb3JkID0gcHJldmlvdXNXb3JkUG9zaXRpb24obmV4dFdvcmRQb3NpdGlvbihvcmlnaW5hbFBv
c2l0aW9uKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQXRQcmV2aW91c1dvcmQgPSBw
cmV2aW91c1dvcmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKKworICAgIC8vIE5lZWQgdG8g
Y29uc2lkZXIgc3BlY2lhbCBjYXNlcyAocHVuY3R1YXRpb24pIHdoZW4gd2UgYXJlIGluIHRoZSBs
YXN0IHdvcmQgb2YgYSBzZW50ZW5jZS4KKyAgICBpZiAoaXNTdGFydE9mV29yZChvcmlnaW5hbFBv
c2l0aW9uKSAmJiBwb3NpdGlvbkF0UHJldmlvdXNXb3JkICE9IG9yaWdpbmFsUG9zaXRpb24gJiYg
cG9zaXRpb25BdFByZXZpb3VzV29yZCA9PSBwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkKQor
ICAgICAgICByZXR1cm4gbmV4dFdvcmRQb3NpdGlvbihwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRX
b3JkKTsKKworICAgIC8vIEluIG9yZGVyIHRvIHNraXAgc3BhY2VzIHdoZW4gbW92aW5nIGxlZnQs
IHdlIGFkdmFuY2Ugb25lIHdvcmQgYmFja3dhcmRzCisgICAgLy8gYW5kIHRoZW4gbW92ZSBvbmUg
d29yZCBmb3J3YXJkLiBUaGlzIHdpbGwgcHV0IHVzIGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAv
LyB0aGUgd29yZCBmb2xsb3dpbmcuCisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQmVmb3Jl
U3BhY2luZ0FuZFByZWNlZWRpbmdXb3JkID0gcHJldmlvdXNXb3JkUG9zaXRpb24ocG9zaXRpb25B
dFN0YXJ0T2ZDdXJyZW50V29yZCk7CisKKyAgICBpZiAocG9zaXRpb25CZWZvcmVTcGFjaW5nQW5k
UHJlY2VlZGluZ1dvcmQgIT0gcG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCkKKyAgICAgICAg
cG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCA9IG5leHRXb3JkUG9zaXRpb24ocG9zaXRpb25C
ZWZvcmVTcGFjaW5nQW5kUHJlY2VlZGluZ1dvcmQpOwogCisgICAgYm9vbCBtb3ZpbmdGb3J3YXJk
TW92ZWRQb3NpdGlvblRvRW5kT2ZDdXJyZW50V29yZCA9IG5leHRXb3JkUG9zaXRpb24ocG9zaXRp
b25BdFN0YXJ0T2ZDdXJyZW50V29yZCkgPT0gcHJldmlvdXNXb3JkUG9zaXRpb24obmV4dFdvcmRQ
b3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKSk7CisgICAgaWYgKG1vdmluZ0ZvcndhcmRNb3ZlZFBv
c2l0aW9uVG9FbmRPZkN1cnJlbnRXb3JkKQorICAgICAgICBwb3NpdGlvbkF0U3RhcnRPZkN1cnJl
bnRXb3JkID0gcG9zaXRpb25CZWZvcmVTcGFjaW5nQW5kUHJlY2VlZGluZ1dvcmQ7CisKKyAgICBy
ZXR1cm4gcG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZDsKK30KKworc3RhdGljIFZpc2libGVT
ZWxlY3Rpb24gd29yZEF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlT2JqZWN0LCBWaXNpYmxlUG9zaXRpb24gb3JpZ2luYWxQb3NpdGlvbiwgQXRrVGV4dEJv
dW5kYXJ5IGJvdW5kYXJ5VHlwZSkKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlv
bjsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb247CisKKyAgICBzd2l0Y2ggKGJvdW5k
YXJ5VHlwZSkgeworICAgIGNhc2UgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVDoKKyAgICAg
ICAgLy8gaXNTdGFydE9mV29yZCgpIHJldHVybnMgdHJ1ZSBib3RoIHdoZW4gYXQgdGhlIGJlZ2lu
bmluZyBvZiBhICJyZWFsIiB3b3JkCisgICAgICAgIC8vIGFzIHdoZW4gYXQgdGhlIGJlZ2lubmlu
ZyBvZiBhIHdoaXRlc3BhY2UgcmFuZ2UgYmV0d2VlbiB0d28gInJlYWwiIHdvcmRzLAorICAgICAg
ICAvLyBzaW5jZSB0aGF0IHdoaXRlc3BhY2UgaXMgY29uc2lkZXJlZCBhICJ3b3JkIiBhcyB3ZWxs
LiBBbmQgaW4gY2FzZSB3ZSBhcmUKKyAgICAgICAgLy8gYWxyZWFkeSBhdCB0aGUgYmVnaW5uaW5n
IG9mIGEgInJlYWwiIHdvcmQgd2UgZG8gbm90IG5lZWQgdG8gbG9vayBiYWNrd2FyZHMuCisgICAg
ICAgIGlmIChpc1N0YXJ0T2ZXb3JkKG9yaWdpbmFsUG9zaXRpb24pICYmIGlzV2hpdGVzcGFjZShv
cmlnaW5hbFBvc2l0aW9uLmNoYXJhY3RlckJlZm9yZSgpKSkKKyAgICAgICAgICAgIHN0YXJ0UG9z
aXRpb24gPSBvcmlnaW5hbFBvc2l0aW9uOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdGFy
dFBvc2l0aW9uID0gcHJldmlvdXNXb3JkUG9zaXRpb24ob3JpZ2luYWxQb3NpdGlvbik7CisgICAg
ICAgIGVuZFBvc2l0aW9uID0gbmV4dFdvcmRTdGFydFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOwor
CisgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgbG9vayBmb3IgdGhlIHdv
cmQgaW4gdGhlIGN1cnJlbnQgbGluZSB3aGVuCisgICAgICAgIC8vIHdlIGFyZSBhdCB0aGUgYmVn
aW5uaW5nIG9mIGEgbmV3IGxpbmUsIGFuZCBub3QgbG9vayBpbnRvIHRoZSBwcmV2aW91cyBvbmUK
KyAgICAgICAgLy8gYXQgYWxsLCB3aGljaCBtaWdodCBoYXBwZW4gd2hlbiBsaW5lcyBiZWxvbmcg
dG8gZGlmZmVyZW50IG5vZGVzLgorICAgICAgICBpZiAoaXNTdGFydE9mTGluZShvcmlnaW5hbFBv
c2l0aW9uKSAmJiBpc1N0YXJ0T2ZMaW5lKGVuZFBvc2l0aW9uKSkgeworICAgICAgICAgICAgc3Rh
cnRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uOworICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBuZXh0
V29yZFN0YXJ0UG9zaXRpb24oc3RhcnRQb3NpdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5EOgorICAgICAgICBzdGFy
dFBvc2l0aW9uID0gcHJldmlvdXNXb3JkRW5kUG9zaXRpb24ob3JpZ2luYWxQb3NpdGlvbik7Cisg
ICAgICAgIGVuZFBvc2l0aW9uID0gbmV4dFdvcmRQb3NpdGlvbihzdGFydFBvc2l0aW9uKTsKKyAg
ICAgICAgc3RhcnRQb3NpdGlvbi5zZXRBZmZpbml0eShVUFNUUkVBTSk7CisgICAgICAgIGJyZWFr
OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3RlZFdvcmQoc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24pOworCisgICAgLy8gV2UgbWFyayB0aGUgc2VsZWN0aW9uIGFzICd1cHN0cmVhbScgc28g
d2UgY2FuIHVzZSB0aGF0IGluZm9ybWF0aW9uIGxhdGVyLAorICAgIC8vIHdoZW4gZmluZGluZyB0
aGUgYWN0dWFsIG9mZnNldHMgaW4gZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdCgpLgorICAg
IGlmIChib3VuZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQpCisgICAgICAg
IHNlbGVjdGVkV29yZC5zZXRBZmZpbml0eShVUFNUUkVBTSk7CisKKyAgICByZXR1cm4gc2VsZWN0
ZWRXb3JkOworfQorCitzdGF0aWMgaW50IG51bWJlck9mUmVwbGFjZWRFbGVtZW50c0JlZm9yZU9m
ZnNldChBdGtUZXh0KiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgR093blB0cjxjaGFy
PiB0ZXh0Rm9yT2JqZWN0KHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dCh0ZXh0LCAwLCBvZmZz
ZXQpKTsKKyAgICBTdHJpbmcgdGV4dEJlZm9yZU9mZnNldCA9IFN0cmluZzo6ZnJvbVVURjgodGV4
dEZvck9iamVjdC5nZXQoKSk7CisKKyAgICBpbnQgY291bnQgPSAwOworICAgIHNpemVfdCBpbmRl
eCA9IHRleHRCZWZvcmVPZmZzZXQuZmluZChvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwgMCk7
CisgICAgd2hpbGUgKGluZGV4IDwgb2Zmc2V0ICYmIGluZGV4ICE9IFdURjo6bm90Rm91bmQpIHsK
KyAgICAgICAgaW5kZXggPSB0ZXh0QmVmb3JlT2Zmc2V0LmZpbmQob2JqZWN0UmVwbGFjZW1lbnRD
aGFyYWN0ZXIsIGluZGV4ICsgMSk7CisgICAgICAgIGNvdW50Kys7CisgICAgfQorICAgIHJldHVy
biBjb3VudDsKK30KKworc3RhdGljIGNoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0V29yZEZv
ckJvdW5kYXJ5KEF0a1RleHQqIHRleHQsIGludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3Vu
ZGFyeVR5cGUsIEdldFRleHRSZWxhdGl2ZVBvc2l0aW9uIHRleHRQb3NpdGlvbiwgaW50KiBzdGFy
dE9mZnNldCwgaW50KiBlbmRPZmZzZXQpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0
LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5VGV4
dFNlbGVjdGlvbkF0T2Zmc2V0KDAsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3Vt
ZW50KQorICAgICAgICByZXR1cm4gZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQoMCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCk7CisKKyAgICBOb2RlKiBub2RlID0gZ2V0Tm9kZUZvckFjY2Vzc2li
aWxpdHlPYmplY3QoY29yZU9iamVjdCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4g
ZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQoMCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisK
KyAgICBpbnQgYWN0dWFsT2Zmc2V0ID0gYXRrT2Zmc2V0VG9XZWJDb3JlT2Zmc2V0KHRleHQsIG9m
ZnNldCk7CisKKyAgICAvLyBCZXNpZGVzIG9mIHRoZSB1c3VhbCBjb252ZXJzaW9uIGZyb20gQVRL
IG9mZnNldHMgdG8gV2ViQ29yZSBvZmZzZXRzLAorICAgIC8vIHdlIG5lZWQgdG8gY29uc2lkZXIg
dGhlIHBvdGVudGlhbCBlbWJlZGRlZCBvYmplY3RzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuCisgICAg
Ly8gaW5zZXJ0ZWQgaW4gdGhlIHRleHQgZXhwb3NlZCB0aHJvdWdoIEF0a1RleHQgd2hlbiBjYWxj
dWxhdGluZyB0aGUgb2Zmc2V0LgorICAgIGFjdHVhbE9mZnNldCAtPSBudW1iZXJPZlJlcGxhY2Vk
RWxlbWVudHNCZWZvcmVPZmZzZXQodGV4dCwgYWN0dWFsT2Zmc2V0KTsKKworICAgIFZpc2libGVQ
b3NpdGlvbiBjYXJldFBvc2l0aW9uID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5k
ZXgoYWN0dWFsT2Zmc2V0KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3JkID0gd29y
ZEF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShjb3JlT2JqZWN0LCBjYXJldFBvc2l0aW9uLCBib3Vu
ZGFyeVR5cGUpOworCisgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgb3RoZXIgcmVsYXRpdmUgcG9z
aXRpb25zLCBpZiBuZWVkZWQsIGJ5CisgICAgLy8gY2FsY3VsYXRpbmcgdGhlIG5ldyBwb3NpdGlv
biB0aGF0IHdlIHdvdWxkIG5lZWQgdG8gY29uc2lkZXIuCisgICAgVmlzaWJsZVBvc2l0aW9uIG5l
d1Bvc2l0aW9uID0gY2FyZXRQb3NpdGlvbjsKKyAgICBzd2l0Y2ggKHRleHRQb3NpdGlvbikgewor
ICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQXQ6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBH
ZXRUZXh0UG9zaXRpb25CZWZvcmU6CisgICAgICAgIC8vIEVhcmx5IHJldHVybiBpZiBhc2tpbmcg
Zm9yIHRoZSBwcmV2aW91cyB3b3JkIHdoaWxlIGFscmVhZHkgYXQgdGhlIGJlZ2lubmluZy4KKyAg
ICAgICAgaWYgKGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY3VycmVudFdvcmQudmlzaWJs
ZVN0YXJ0KCksIG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0
T2Zmc2V0KDAsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgICAgIGlmIChpc1N0YXJ0
T2ZMaW5lKGN1cnJlbnRXb3JkLmVuZCgpKSkKKyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gY3Vy
cmVudFdvcmQudmlzaWJsZVN0YXJ0KCkucHJldmlvdXMoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbmV3UG9zaXRpb24gPSBzdGFydE9mV29yZChjdXJyZW50V29yZC5zdGFydCgpLCBMZWZ0
V29yZElmT25Cb3VuZGFyeSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBHZXRUZXh0UG9z
aXRpb25BZnRlcjoKKyAgICAgICAgLy8gRWFybHkgcmV0dXJuIGlmIGFza2luZyBmb3IgdGhlIGZv
bGxvd2luZyB3b3JkIHdoaWxlIGFscmVhZHkgYXQgdGhlIGVuZC4KKyAgICAgICAgaWYgKGlzTGFz
dFZpc2libGVQb3NpdGlvbkluTm9kZShjdXJyZW50V29yZC52aXNpYmxlRW5kKCksIG5vZGUpKQor
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0KGFjY2Vzc2liaWxp
dHlPYmplY3RMZW5ndGgoY29yZU9iamVjdCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisg
ICAgICAgIGlmIChpc0VuZE9mTGluZShjdXJyZW50V29yZC5lbmQoKSkpCisgICAgICAgICAgICBu
ZXdQb3NpdGlvbiA9IGN1cnJlbnRXb3JkLnZpc2libGVFbmQoKS5uZXh0KCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gZW5kT2ZXb3JkKGN1cnJlbnRXb3JkLmVuZCgp
LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIC8vIERldGVybWlu
ZSB0aGUgcmVsZXZhbnQgd29yZCB3ZSBhcmUgYWN0dWFsbHkgaW50ZXJlc3RlZCBpbgorICAgIC8v
IGFuZCBjYWxjdWxhdGUgdGhlIEFUSyBvZmZzZXRzIGZvciBpdCwgdGhlbiByZXR1cm4gZXZlcnl0
aGluZy4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGVkV29yZCA9IG5ld1Bvc2l0aW9uICE9
IGNhcmV0UG9zaXRpb24gPyB3b3JkQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KGNvcmVPYmplY3Qs
IG5ld1Bvc2l0aW9uLCBib3VuZGFyeVR5cGUpIDogY3VycmVudFdvcmQ7CisgICAgZ2V0U2VsZWN0
aW9uT2Zmc2V0c0Zvck9iamVjdChjb3JlT2JqZWN0LCBzZWxlY3RlZFdvcmQsICpzdGFydE9mZnNl
dCwgKmVuZE9mZnNldCk7CisgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dCh0
ZXh0LCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOworfQorCitzdGF0aWMgZ2NoYXIqIHdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNl
dCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgR2V0VGV4dFJlbGF0aXZlUG9zaXRpb24g
dGV4dFBvc2l0aW9uLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQorewogICAg
IGlmIChib3VuZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfQ0hBUikKICAgICAgICAgcmV0
dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcih0ZXh0LCBvZmZzZXQsIHRleHRQb3NpdGlv
biwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAKKyAgICBpZiAoYm91bmRhcnlUeXBlID09IEFU
S19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQgfHwgYm91bmRhcnlUeXBlID09IEFUS19URVhUX0JP
VU5EQVJZX1dPUkRfRU5EKQorICAgICAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRX
b3JkRm9yQm91bmRhcnkodGV4dCwgb2Zmc2V0LCBib3VuZGFyeVR5cGUsIHRleHRQb3NpdGlvbiwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisKICNpZiBQTEFURk9STShHVEspCi0gICAgLy8gRklY
TUU6IEdldCByaWQgb2YgdGhlIGNvZGUgYmVsb3cgb25jZSBldmVyeSBzaW5nbGUgZ2V0X3RleHRf
Kl9vZmZzZXQKLSAgICAvLyBmdW5jdGlvbiBoYXMgYmVlbiBwcm9wZXJseSBpbXBsZW1lbnRlZCB3
aXRob3V0IHVzaW5nIFBhbmdvL0NhaXJvLgorICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoZSBj
b2RlIGJlbG93IG9uY2UgZXZlcnkgc2luZ2xlIHBhcnQgYWJvdmUKKyAgICAvLyBoYXMgYmVlbiBw
cm9wZXJseSBpbXBsZW1lbnRlZCB3aXRob3V0IHVzaW5nIFBhbmdvL0NhaXJvLgogICAgIEdhaWxP
ZmZzZXRUeXBlIG9mZnNldFR5cGUgPSBHQUlMX0FUX09GRlNFVDsKICAgICBzd2l0Y2ggKHRleHRQ
b3NpdGlvbikgewogICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQmVmb3JlOgpAQCAtNjU2LDYgKzg2
NywxMCBAQCBzdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNl
dChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICB9CiAKKyAgICAvLyBNYWtlIHN1cmUgd2UgYWx3YXlzIHJldHVybiB2YWxpZCB2
YWxpZCB2YWx1ZXMgZm9yIG9mZnNldHMuCisgICAgKnN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAqZW5k
T2Zmc2V0ID0gMDsKKwogICAgIHJldHVybiBnYWlsX3RleHRfdXRpbF9nZXRfdGV4dChnZXRHYWls
VGV4dFV0aWxGb3JBdGsodGV4dCksIGdldFBhbmdvTGF5b3V0Rm9yQXRrKHRleHQpLCBvZmZzZXRU
eXBlLCBib3VuZGFyeVR5cGUsIG9mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAjZW5k
aWYKIApAQCAtNzkwLDkgKzEwMDUsNiBAQCBzdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldE5TZWxlY3Rpb25zKEF0a1RleHQqIHRleHQpCiAKIHN0YXRpYyBnY2hhciogd2Via2l0QWNj
ZXNzaWJsZVRleHRHZXRTZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rpb25OdW0s
IGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCiB7Ci0gICAgLy8gRGVmYXVsdCB2
YWx1ZXMsIHVubGVzcyB0aGUgY29udHJhcnkgaXMgcHJvdmVkCi0gICAgKnN0YXJ0T2Zmc2V0ID0g
KmVuZE9mZnNldCA9IDA7Ci0KICAgICAvLyBXZWJDb3JlIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlw
bGUgc2VsZWN0aW9uLCBzbyBhbnl0aGluZyBidXQgMCBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciBu
b3cuCiAgICAgaWYgKHNlbGVjdGlvbk51bSkKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0YXRrLmMKaW5kZXggMjQyZjFkNzhhN2Q1NDUxMDZhODUyOTBiMTNiYzFlN2JmNzUz
NGJjMy4uYjZjNGVmZmQ0YzNlNDU0YWQzOWU2YTMwNDQ4NDJlYzE0MjcyODQzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3RhdGsuYwpAQCAtNTIsNiArNTIsOCBAQCBzdGF0aWMgY29uc3QgY2hhciog
Y29udGVudHNXaXRoRXh0cmFuZW91c1doaXRlU3BhY2VzID0gIjxodG1sPjxoZWFkPjxib2R5Pjxw
PlRoaQogCiBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNXaXRoV3JhcHBlZExpbmVzID0gIjxo
dG1sPjxib2R5PjxwIHN0eWxlPSdtYXgtd2lkdGg6MTUwcHg7Jz5UaGlzIGlzIG9uZSBsaW5lIHdy
YXBwZWQgYmVjYXVzZSBvZiB0aGUgbWF4aW11bSB3aWR0aCBvZiBpdHMgY29udGFpbmVyLjwvcD48
cD5UaGlzIGlzIGFub3RoZXIgbGluZSB3cmFwcGVkPGJyPmJlY2F1c2Ugb2Ygb25lIGZvcmNlZDxi
cj5saW5lIGJyZWFrIGluIHRoZSBtaWRkbGUuPC9ib2R5PjwvaHRtbD4iOwogCitzdGF0aWMgY29u
c3QgY2hhciogY29udGVudHNXaXRoRW1iZWRkZWRPYmplY3RzID0gIjxodG1sPjxib2R5PlRoaXMg
aXMgb25lIGxpbmUgY29udGFpbmluZyB0d28gPGltZz4gZW1iZWRkZWQgb2JqZWN0cyA8aW1nPiBp
biB0aGUgbWlkZGxlLjwvYm9keT48L2h0bWw+IjsKKwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbWJv
Qm94U2VsZWN0b3IgPSAiPGh0bWw+PGJvZHk+PHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkIHZhbHVl
PSdmb28nPmZvbzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2Jhcic+YmFyPC9vcHRpb24+PC9zZWxl
Y3Q+PC9ib2R5PjwvaHRtbD4iOwogCiBzdGF0aWMgY29uc3QgY2hhciogZW1iZWRkZWRPYmplY3Rz
ID0gIjxodG1sPjxib2R5PjxwPkNob29zZTogPGlucHV0IHZhbHVlPSdmb28nIHR5cGU9J2NoZWNr
Ym94Jy8+Zm9vIDxpbnB1dCB2YWx1ZT0nYmFyJyB0eXBlPSdjaGVja2JveCcvPmJhciAocGljayBv
bmUpPC9wPjxwPkNob29zZTogPHNlbGVjdCBuYW1lPSdmb28nPjxvcHRpb24+YmFyPC9vcHRpb24+
PG9wdGlvbj5iYXo8L29wdGlvbj48L3NlbGVjdD4gKHBpY2sgb25lKTwvcD48cD48aW5wdXQgbmFt
ZT0nZm9vYmFyYnV0dG9uJyB2YWx1ZT0nZm9vYmFyJyB0eXBlPSdidXR0b24nLz48L3A+PC9ib2R5
PjwvaHRtbD4iOwpAQCAtMTM4LDEyICsxNDAsMjEgQEAgc3RhdGljIHZvaWQgcnVuR2V0VGV4dFRl
c3RzKEF0a1RleHQqIHRleHRPYmplY3QpCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2Jq
ZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRf
U1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICA1OCwgInRoaXJkLiIsIDU4LCA2NCk7CiAK
KyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2F0
X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDY0LCAidGhpcmQuIiwgNTgsIDY0KTsKKworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24o
dGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9V
TkRBUllfV09SRF9TVEFSVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsICIiLCAwLCAwKTsK
KwogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRf
YmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIDUsICJUaGlzICIsIDAsIDUpOwogCiAgICAgdGVzdEdldFRleHRGdW5jdGlv
bih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9C
T1VOREFSWV9XT1JEX1NUQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgNywgIlRoaXMgIiwg
MCwgNSk7CiAKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dl
dF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCisgICAg
ICAgICAgICAgICAgICAgICAgICA2NCwgInRoZSAiLCA1NCwgNTgpOworCiAgICAgdGVzdEdldFRl
eHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFU
S19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAwLCAi
aXMgIiwgNSwgOCk7CiAKQEAgLTE1Myw2ICsxNjQsOSBAQCBzdGF0aWMgdm9pZCBydW5HZXRUZXh0
VGVzdHMoQXRrVGV4dCogdGV4dE9iamVjdCkKICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRP
YmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllf
V09SRF9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgIDMsICJpcyAiLCA1LCA4KTsKIAor
ICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0
ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAorICAgICAgICAgICAgICAg
ICAgICAgICAgNjQsICIiLCA2NCwgNjQpOworCiAgICAgLyogQVRLX1RFWFRfQk9VTkRBUllfV09S
RF9FTkQgKi8KICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dl
dF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCAiVGhpcyIsIDAsIDQpOwpAQCAtMTY2LDYgKzE4MCwxNSBAQCBzdGF0
aWMgdm9pZCBydW5HZXRUZXh0VGVzdHMoQXRrVGV4dCogdGV4dE9iamVjdCkKICAgICB0ZXN0R2V0
VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRL
X1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICA5LCAiIHRl
c3QiLCA5LCAxNCk7CiAKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190
ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAg
ICAgICAgICAgICAgICAgICAgICA1OCwgIiB0aGlyZCIsIDU3LCA2Myk7CisKKyAgICB0ZXN0R2V0
VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRL
X1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgICAgICAgICAgICAgICAgICAgICA2NCwgIi4i
LCA2MywgNjQpOworCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4
dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIDAsICIiLCAwLCAwKTsKKwogICAgIHRlc3RHZXRUZXh0RnVu
Y3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RF
WFRfQk9VTkRBUllfV09SRF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICA1LCAiVGhpcyIs
IDAsIDQpOwogCkBAIC0xNzUsMTQgKzE5OCwyMCBAQCBzdGF0aWMgdm9pZCBydW5HZXRUZXh0VGVz
dHMoQXRrVGV4dCogdGV4dE9iamVjdCkKICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmpl
Y3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dP
UkRfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgNywgIiBpcyIsIDQsIDcpOwogCisgICAg
dGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVf
b2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIDY0LCAiIHRoaXJkIiwgNTcsIDYzKTsKKworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4
dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFS
WV9XT1JEX0VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsICIgaXMiLCA0LCA3KTsKKwog
ICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0
ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIDUsICIgYSIsIDcsIDkpOwogCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2Jq
ZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dP
UkRfRU5ELAogICAgICAgICAgICAgICAgICAgICAgICAgNCwgIiBhIiwgNywgOSk7CiAKLSAgICB0
ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNl
dCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCi0gICAgICAgICAgICAgICAgICAgICAgICA1
OCwgIiB0aGlyZCIsIDU3LCA2Myk7CisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0
LCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRf
RU5ELAorICAgICAgICAgICAgICAgICAgICAgICAgNjQsICIiLCA2NCwgNjQpOwogCiAgICAgLyog
QVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQgKi8KICAgICB0ZXN0R2V0VGV4dEZ1bmN0
aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9V
TkRBUllfU0VOVEVOQ0VfU1RBUlQsCkBAIC0xMDI3LDYgKzEwNTYsNzUgQEAgc3RhdGljIHZvaWQg
dGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldFdpdGhXcmFwcGVkTGluZXMoKQogICAgIGdfb2Jq
ZWN0X3VucmVmKHdlYlZpZXcpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0VGV4
dEF0T2Zmc2V0V2l0aEVtYmVkZGVkT2JqZWN0cygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2Vi
VmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2Jq
ZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsg
MCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdF
VCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmlu
Zyh3ZWJWaWV3LCBjb250ZW50c1dpdGhFbWJlZGRlZE9iamVjdHMsIDAsIDAsIDApOworCisgICAg
LyogRW5hYmxlIGNhcmV0IGJyb3dzaW5nLiAqLworICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0
aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyk7CisgICAgZ19vYmpl
Y3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxlLWNhcmV0LWJyb3dzaW5nIiwgVFJVRSwgTlVMTCk7Cisg
ICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyh3ZWJWaWV3LCBzZXR0aW5ncyk7CisKKyAg
ICAvKiBHZXQgdG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0LiAqLworICAgIEF0a09iamVjdCog
b2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3Qp
OworCisgICAgLyogQ2hlY2sgdGhlIHBhcmFncmFwaCB3aXRoIHRoZSB0ZXh0IHdyYXBwZWQgYmVj
YXVzZSBvZiBtYXgtd2lkdGguICovCisgICAgQXRrVGV4dCogcGFyYWdyYXBoID0gQVRLX1RFWFQo
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApKTsKKyAgICBnX2Fzc2Vy
dChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKKworICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRf
Z2V0X3RleHQocGFyYWdyYXBoLCAwLCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09
LCAiVGhpcyBpcyBvbmUgbGluZSBjb250YWluaW5nIHR3byBcMzU3XDI3N1wyNzQgZW1iZWRkZWQg
b2JqZWN0cyBcMzU3XDI3N1wyNzQgaW4gdGhlIG1pZGRsZS4iKTsKKyAgICBnX2ZyZWUodGV4dCk7
CisKKyAgICAvKiBDaGVjayByaWdodCBiZWZvcmUgdGhlIGZpcnN0IGVtYmVkZGVkIG9iamVjdCAq
LworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9h
dF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX0NIQVIsIDMyLCAiXDM1N1wyNzdcMjc0IiwgMzIs
IDMzKTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3Rl
eHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULCAzMiwgInR3byBcMzU3
XDI3N1wyNzQgIiwgMjgsIDM0KTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwg
YXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwg
MzIsICIgXDM1N1wyNzdcMjc0IGVtYmVkZGVkIiwgMzEsIDQyKTsKKworICAgIC8qIENoZWNrIHJp
Z2h0IGFmdGVyIHRoZSBmaXJzdCBlbWJlZGRlZCBvYmplY3QgKGFuZCBiZWZvcmUgdGhlIGZpcnN0
IHdvcmQgYWZ0ZXIgaXQpICovCisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0
a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfQ0hBUiwgMzMsICIg
IiwgMzMsIDM0KTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRf
Z2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULCAzMywgInR3
byBcMzU3XDI3N1wyNzQgIiwgMjgsIDM0KTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFn
cmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JE
X0VORCwgMzMsICIgXDM1N1wyNzdcMjc0IGVtYmVkZGVkIiwgMzEsIDQyKTsKKworICAgIC8qIENo
ZWNrIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IHdvcmQgYmV0d2VlbiB0aGUgdHdvIGVt
YmVkZGVkIG9iamVjdHMgKi8KKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRr
X3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9DSEFSLCAzNCwgImUi
LCAzNCwgMzUpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9n
ZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsIDM0LCAiZW1i
ZWRkZWQgIiwgMzQsIDQzKTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRr
X3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwgMzQs
ICIgXDM1N1wyNzdcMjc0IGVtYmVkZGVkIiwgMzEsIDQyKTsKKworICAgIC8qIENoZWNrIGF0IHRo
ZSBlbmQgb2YgdGhlIGZpcnN0IHdvcmQgYmV0d2VlbiB0aGUgdHdvIGVtYmVkZGVkIG9iamVjdHMg
Ki8KKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRf
YXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9DSEFSLCA0MiwgIiAiLCA0MiwgNDMpOworICAg
IHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZz
ZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsIDQyLCAiZW1iZWRkZWQgIiwgMzQsIDQz
KTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRf
YXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwgNDIsICIgb2JqZWN0cyIsIDQy
LCA1MCk7CisKKyAgICAvKiBDaGVjayByaWdodCBiZWZvcmUgdGhlIHNlY29uZCBlbWJlZGRlZCBv
YmplY3QgKi8KKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0
X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9DSEFSLCA1MSwgIlwzNTdcMjc3XDI3
NCIsIDUxLCA1Mik7CisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0
X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwgNTEsICJv
YmplY3RzIFwzNTdcMjc3XDI3NCAiLCA0MywgNTMpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24o
cGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZ
X1dPUkRfRU5ELCA1MSwgIiBcMzU3XDI3N1wyNzQgaW4iLCA1MCwgNTUpOworCisgICAgLyogQ2hl
Y2sgcmlnaHQgYWZ0ZXIgdGhlIHNlY29uZCBlbWJlZGRlZCBvYmplY3QgKGFuZCBiZWZvcmUgdGhl
IGZpcnN0IHdvcmQgYWZ0ZXIgaXQpICovCisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3Jh
cGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfQ0hBUiwg
NTIsICIgIiwgNTIsIDUzKTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRr
X3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULCA1
MiwgIm9iamVjdHMgXDM1N1wyNzdcMjc0ICIsIDQzLCA1Myk7CisgICAgdGVzdEdldFRleHRGdW5j
dGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9V
TkRBUllfV09SRF9FTkQsIDUyLCAiIFwzNTdcMjc3XDI3NCBpbiIsIDUwLCA1NSk7CisKKyAgICAv
KiBDaGVjayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCB3b3JkIGFmdGVyIHRoZSB0d28g
ZW1iZWRkZWQgb2JqZWN0cyAqLworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBh
dGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX0NIQVIsIDUzLCAi
aSIsIDUzLCA1NCk7CisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0
X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwgNTMsICJp
biAiLCA1MywgNTYpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4
dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELCA1MywgIiBc
MzU3XDI3N1wyNzQgaW4iLCA1MCwgNTUpOworCisgICAgLyogQ2hlY2sgYXQgdGhlIGVuZCBvZiB0
aGUgZmlyc3Qgd29yZCBhZnRlciB0aGUgdHdvIGVtYmVkZGVkIG9iamVjdHMgKi8KKyAgICB0ZXN0
R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBB
VEtfVEVYVF9CT1VOREFSWV9DSEFSLCA1NSwgIiAiLCA1NSwgNTYpOworICAgIHRlc3RHZXRUZXh0
RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhU
X0JPVU5EQVJZX1dPUkRfU1RBUlQsIDU1LCAiaW4gIiwgNTMsIDU2KTsKKyAgICB0ZXN0R2V0VGV4
dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVY
VF9CT1VOREFSWV9XT1JEX0VORCwgNTUsICIgdGhlIiwgNTUsIDU5KTsKKworICAgIGdfb2JqZWN0
X3VucmVmKHBhcmFncmFwaCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKIHN0
YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtHZXRUZXh0SW5QYXJhZ3JhcGhBbmRCb2R5U2ltcGxlKCkK
IHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7CkBAIC0yMDk4LDYgKzIxOTYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0QXRP
ZmZzZXRXaXRoUHJlZm9ybWF0dGVkVGV4dCIsIHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRX
aXRoUHJlZm9ybWF0dGVkVGV4dCk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9n
ZXRUZXh0QXRPZmZzZXRXaXRoU3BlY2lhbENoYXJhY3RlcnMiLCB0ZXN0V2Via2l0QXRrR2V0VGV4
dEF0T2Zmc2V0V2l0aFNwZWNpYWxDaGFyYWN0ZXJzKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvYXRrL2dldFRleHRBdE9mZnNldFdpdGhXcmFwcGVkTGluZXMiLCB0ZXN0V2Via2l0QXRr
R2V0VGV4dEF0T2Zmc2V0V2l0aFdyYXBwZWRMaW5lcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2F0ay9nZXRUZXh0QXRPZmZzZXRXaXRoRW1iZWRkZWRPYmplY3RzIiwgdGVzdFdlYmtp
dEF0a0dldFRleHRBdE9mZnNldFdpdGhFbWJlZGRlZE9iamVjdHMpOwogICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEluUGFyYWdyYXBoQW5kQm9keVNpbXBsZSIsIHRlc3RX
ZWJraXRBdGtHZXRUZXh0SW5QYXJhZ3JhcGhBbmRCb2R5U2ltcGxlKTsKICAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvYXRrL2dldFRleHRJblBhcmFncmFwaEFuZEJvZHlNb2RlcmF0ZSIsIHRl
c3RXZWJraXRBdGtHZXRUZXh0SW5QYXJhZ3JhcGhBbmRCb2R5TW9kZXJhdGUpOwogICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEluVGFibGUiLCB0ZXN0V2Via2l0QXRrR2V0
VGV4dEluVGFibGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206793</attachid>
            <date>2013-07-16 10:10:06 -0700</date>
            <delta_ts>2013-07-19 10:07:09 -0700</delta_ts>
            <desc>Patch proposal plus new Layout test</desc>
            <filename>0001-Implement-atk_text_get_text_-_offset-for-WORD.patch</filename>
            <type>text/plain</type>
            <size>36088</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAxNDY5YWE5ZDY1ZWIzYzhkZDBiNjg1ZjY2YzUxZjZlNDcyOWNlM2U5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogRnJpLCAxMiBKdWwgMjAxMyAxNDozMjo0MSArMDEwMApTdWJqZWN0OiBb
UEFUQ0ggMS8yXSBJbXBsZW1lbnQgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQK
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ4NzEKClJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgoKU291cmNlL1dlYkNvcmU6CgpSZS1pbXBsZW1lbnQgdGhpcyBm
dW5jdGlvbnMgd2l0aG91dCB1c2luZyBHYWlsVGV4dFV0aWwgbm9yIFBhbmdvLgoKKiBhY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHA6Cih0ZXh0Rm9yT2Jq
ZWN0KTogTWFkZSB0aGUgcGFyYW1ldGVyIGEgY29uc3QsIHRvIGF2b2lkIHdhcm5pbmdzLgooZ2V0
Tm9kZUZvckFjY2Vzc2liaWxpdHlPYmplY3QpOiBOZXcgaGVscGVyIGZ1bmN0aW9uIHRvIGVuc3Vy
ZSB3ZQphbHdheXMgZ2V0IHRoZSByZWxldmFudCBvYmplY3QgZnJvbSB0aGUgRE9NIHRyZWUgZm9y
IGEgZ2l2ZW4KYWNjZXNzaWJpbGl0eSBvYmplY3QsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZgpBdGtUZXh0LCBzbyBpdCB3b3JrcyBib3RoIHdpdGggVGV4dCBDb250cm9s
cyBhbmQgb3RoZXIgZWxlbWVudHMuCihnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KTogUmV3
cml0dGVuIHRoaXMgZnVuY3Rpb24gaW4gdGVybXMKb2YgVmlzaWJsZVBvc2l0aW9ucyBhbmQgYXZv
aWRpbmcgd2VpcmQgb3BlcmF0aW9ucyB3aXRoIHJhbmdlcywgc28Kd2UgaGF2ZSBtb3JlIGNvbnRy
b2wgdG8gZmluZSB0dW5lIHRoZSByZXN1bHRzIGFuZCBnaXZlIG1vcmUKYWNjdXJhdGUgb25lcy4g
QmVzaWRlcywgbm93IGl0IHdvcmtzIGJldHRlciB3aXRoIGVkZ2UgY2FzZXMuCihlbXB0eVRleHRT
ZWxlY3Rpb25BdE9mZnNldCk6IENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGJlIHVzZWQgaW4KZWFy
bHkgcmV0dXJucyBmcm9tIGZ1bmN0aW9ucyByZXR1cm5pbmcgYm90aCB0ZXh0IGFuZCBvZmZzZXRz
Lgood2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyKTogVXNlIGVtcHR5VGV4dFNlbGVjdGlvbkF0
T2Zmc2V0KCksCmFuZCByZW1vdmUgY2hlY2tzIHRoYXQgYXJlIG5vdyBkb25lIG91dHNpZGUgb2Yg
dGhpcyBmdW5jdGlvbiwgaW4Kd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0Rm9yT2Zmc2V0KCku
CihuZXh0V29yZFN0YXJ0UG9zaXRpb24pOiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVsaWFibHkgZmlu
ZCB0aGUKc3RhcnQgb2YgdGhlIG5leHQgd29yZCBhcyBhbmQgdXNlciB3b3VsZCBkbyBpdCBieSBu
YXZpZ2F0aW5nIHdpdGgKQ3RybCBhbmQgdGhlIGFycm93cyAoY29uc2lkZXJpbmcgc3BhY2VzIGFu
ZCBwdW5jdHVhdGlvbikuCihwcmV2aW91c1dvcmRFbmRQb3NpdGlvbik6IFNpbWlsYXIgdG8gbmV4
dFdvcmRTdGFydFBvc2l0aW9uLCBidXQKd3JpdHRlbiB0byBoZWxwIGZpbmQgdGhlIGVuZCBvZiB0
aGUgcHJldmlvdXMgb25lLgood29yZEF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeSk6IEhlbHBlciBm
dW5jdGlvbiB0byBmaW5kIHRoZSB3b3JkCmF0IGEgZ2l2ZW4gcG9zaXRpb24gY29uc2lkZXJpbmcg
dmFsdWVzIG9mIEF0a1RleHRCb3VuZGFyeS4KKG51bWJlck9mUmVwbGFjZWRFbGVtZW50c0JlZm9y
ZU9mZnNldCk6IEhlbHBlciBmdW5jdGlvbiB0byBoZWxwCmZpZ3VyZSBvdXQgaG93IG1hbnkgZW1i
ZWRkZWQgb2JqZWN0cyB3ZSBoYXZlIGV4cG9zZWQgZm9yIGFuCkF0a1RleHQgb2JqZWN0LCB1c2Vk
IHRvIGFkanVzdCBvZmZzZXRzIGNvbWluZyBmcm9tIG91dHNpZGUuCih3ZWJraXRBY2Nlc3NpYmxl
VGV4dEdldFdvcmRGb3JCb3VuZGFyeSk6IE5ldyBmdW5jdGlvbiwKaW1wbGVtZW50aW5nIGF0a190
ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZvciBXT1JELgood2Via2l0QWNjZXNzaWJsZVRleHRHZXRU
ZXh0Rm9yT2Zmc2V0KTogUmVwbGFjZSB1c2FnZSBvZiBHYWlsIGZvcgpXT1JEIGJvdW5kYXJpZXMg
d2l0aCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFdvcmRGb3JCb3VuZGFyeSgpLgpBbHNvLCBtb3Zl
ZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cyB0byB0aGUK
Ym90dG9tLCBpbnRvIHRoZSBnYWlsL3BhbmdvIHNlY3Rpb24sIHNpbmNlIHRob3NlIHZhbHVlcyB3
aWxsIGJlCmZyb20gbm93IG9uIGluaXRpYWxpemVkIGluIGdldFNlbGVjdGlvbk9mZnNldHNGb3JP
YmplY3QoKS4KKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0aW9uKTogUmVtb3ZlZCB0aGUg
aW5pdGlhbGl6YXRpb24gb2YKdGhlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cywgc2luY2UgdGhvc2Ug
dmFsdWVzIHdpbGwgYmUgZnJvbSBub3cgb24KaW5pdGlhbGl6ZWQgaW4gZ2V0U2VsZWN0aW9uT2Zm
c2V0c0Zvck9iamVjdCgpLgoKU291cmNlL1dlYktpdC9ndGs6CgpVcGRhdGVkIGN1cnJlbnQgdW5p
dCB0ZXN0cyBhbmQgYWRkIGEgbmV3IG9uZSBzcGVjaWZpYyBmb3IgZW1iZWRkZWQKb2JqZWN0cywg
dG8gZW5zdXJlIHdlIGFyZSBjb3ZlcmluZyBldmVuIG1vcmUgY2FzZXMgdGhhbiBiZWZvcmUuCgoq
IHRlc3RzL3Rlc3RhdGsuYzoKKHJ1bkdldFRleHRUZXN0cyk6IFVwZGF0ZWQgdW5pdCB0ZXN0cyB0
byBjaGVjayBtb3JlIGNhc2VzIG9mCmNhbGxpbmcgdGhlIGF0a190ZXh0X2dldF90ZXh0Xypfb2Zm
c2V0KCkgZnVuY3Rpb25zIGZvciBXT1JELgoodGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldFdp
dGhFbWJlZGRlZE9iamVjdHMpOiBOZXcuCihtYWluKTogQWRkZWQgbmV3IHRlc3QgdG8gdGhlIHRl
c3Qgc3VpdGUuCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDQ1ICsrKwogLi4uL2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4
dC5jcHAgICAgICAgICAgfCAgMzAyICsrKysrKysrKysrKysrKysrLS0tCiBTb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTYgKysKIFNvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyAgICAgICAgICAgICAgICAgIHwgIDEwNCArKysrKyst
CiA0IGZpbGVzIGNoYW5nZWQsIDQxOCBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggMWJmMzA0OC4uN2QzOWM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBA
CisyMDEzLTA3LTEyICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5j
b20+CisKKyAgICAgICAgSW1wbGVtZW50IGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZvciBX
T1JECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ4
NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZS1p
bXBsZW1lbnQgdGhpcyBmdW5jdGlvbnMgd2l0aG91dCB1c2luZyBHYWlsVGV4dFV0aWwgbm9yIFBh
bmdvLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwOgorICAgICAgICAodGV4dEZvck9iamVjdCk6IE1hZGUgdGhlIHBhcmFtZXRl
ciBhIGNvbnN0LCB0byBhdm9pZCB3YXJuaW5ncy4KKyAgICAgICAgKGdldE5vZGVGb3JBY2Nlc3Np
YmlsaXR5T2JqZWN0KTogTmV3IGhlbHBlciBmdW5jdGlvbiB0byBlbnN1cmUgd2UKKyAgICAgICAg
YWx3YXlzIGdldCB0aGUgcmVsZXZhbnQgb2JqZWN0IGZyb20gdGhlIERPTSB0cmVlIGZvciBhIGdp
dmVuCisgICAgICAgIGFjY2Vzc2liaWxpdHkgb2JqZWN0LCBpbiB0aGUgY29udGV4dCBvZiB0aGUg
aW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgQXRrVGV4dCwgc28gaXQgd29ya3MgYm90aCB3aXRo
IFRleHQgQ29udHJvbHMgYW5kIG90aGVyIGVsZW1lbnRzLgorICAgICAgICAoZ2V0U2VsZWN0aW9u
T2Zmc2V0c0Zvck9iamVjdCk6IFJld3JpdHRlbiB0aGlzIGZ1bmN0aW9uIGluIHRlcm1zCisgICAg
ICAgIG9mIFZpc2libGVQb3NpdGlvbnMgYW5kIGF2b2lkaW5nIHdlaXJkIG9wZXJhdGlvbnMgd2l0
aCByYW5nZXMsIHNvCisgICAgICAgIHdlIGhhdmUgbW9yZSBjb250cm9sIHRvIGZpbmUgdHVuZSB0
aGUgcmVzdWx0cyBhbmQgZ2l2ZSBtb3JlCisgICAgICAgIGFjY3VyYXRlIG9uZXMuIEJlc2lkZXMs
IG5vdyBpdCB3b3JrcyBiZXR0ZXIgd2l0aCBlZGdlIGNhc2VzLgorICAgICAgICAoZW1wdHlUZXh0
U2VsZWN0aW9uQXRPZmZzZXQpOiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBiZSB1c2VkIGluCisg
ICAgICAgIGVhcmx5IHJldHVybnMgZnJvbSBmdW5jdGlvbnMgcmV0dXJuaW5nIGJvdGggdGV4dCBh
bmQgb2Zmc2V0cy4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcik6IFVzZSBl
bXB0eVRleHRTZWxlY3Rpb25BdE9mZnNldCgpLAorICAgICAgICBhbmQgcmVtb3ZlIGNoZWNrcyB0
aGF0IGFyZSBub3cgZG9uZSBvdXRzaWRlIG9mIHRoaXMgZnVuY3Rpb24sIGluCisgICAgICAgIHdl
YmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldCgpLgorICAgICAgICAobmV4dFdvcmRT
dGFydFBvc2l0aW9uKTogSGVscGVyIGZ1bmN0aW9uIHRvIHJlbGlhYmx5IGZpbmQgdGhlCisgICAg
ICAgIHN0YXJ0IG9mIHRoZSBuZXh0IHdvcmQgYXMgYW5kIHVzZXIgd291bGQgZG8gaXQgYnkgbmF2
aWdhdGluZyB3aXRoCisgICAgICAgIEN0cmwgYW5kIHRoZSBhcnJvd3MgKGNvbnNpZGVyaW5nIHNw
YWNlcyBhbmQgcHVuY3R1YXRpb24pLgorICAgICAgICAocHJldmlvdXNXb3JkRW5kUG9zaXRpb24p
OiBTaW1pbGFyIHRvIG5leHRXb3JkU3RhcnRQb3NpdGlvbiwgYnV0CisgICAgICAgIHdyaXR0ZW4g
dG8gaGVscCBmaW5kIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIG9uZS4KKyAgICAgICAgKHdvcmRB
dFBvc2l0aW9uRm9yQXRrQm91bmRhcnkpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZmluZCB0aGUgd29y
ZAorICAgICAgICBhdCBhIGdpdmVuIHBvc2l0aW9uIGNvbnNpZGVyaW5nIHZhbHVlcyBvZiBBdGtU
ZXh0Qm91bmRhcnkuCisgICAgICAgIChudW1iZXJPZlJlcGxhY2VkRWxlbWVudHNCZWZvcmVPZmZz
ZXQpOiBIZWxwZXIgZnVuY3Rpb24gdG8gaGVscAorICAgICAgICBmaWd1cmUgb3V0IGhvdyBtYW55
IGVtYmVkZGVkIG9iamVjdHMgd2UgaGF2ZSBleHBvc2VkIGZvciBhbgorICAgICAgICBBdGtUZXh0
IG9iamVjdCwgdXNlZCB0byBhZGp1c3Qgb2Zmc2V0cyBjb21pbmcgZnJvbSBvdXRzaWRlLgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRXb3JkRm9yQm91bmRhcnkpOiBOZXcgZnVuY3Rp
b24sCisgICAgICAgIGltcGxlbWVudGluZyBhdGtfdGV4dF9nZXRfdGV4dF8qX29mZnNldCBmb3Ig
V09SRC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldCk6IFJl
cGxhY2UgdXNhZ2Ugb2YgR2FpbCBmb3IKKyAgICAgICAgV09SRCBib3VuZGFyaWVzIHdpdGggd2Vi
a2l0QWNjZXNzaWJsZVRleHRHZXRXb3JkRm9yQm91bmRhcnkoKS4KKyAgICAgICAgQWxzbywgbW92
ZWQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzdGFydCBhbmQgZW5kIG9mZnNldHMgdG8gdGhl
CisgICAgICAgIGJvdHRvbSwgaW50byB0aGUgZ2FpbC9wYW5nbyBzZWN0aW9uLCBzaW5jZSB0aG9z
ZSB2YWx1ZXMgd2lsbCBiZQorICAgICAgICBmcm9tIG5vdyBvbiBpbml0aWFsaXplZCBpbiBnZXRT
ZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KCkuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldFNlbGVjdGlvbik6IFJlbW92ZWQgdGhlIGluaXRpYWxpemF0aW9uIG9mCisgICAgICAgIHRo
ZSBzdGFydCBhbmQgZW5kIG9mZnNldHMsIHNpbmNlIHRob3NlIHZhbHVlcyB3aWxsIGJlIGZyb20g
bm93IG9uCisgICAgICAgIGluaXRpYWxpemVkIGluIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmpl
Y3QoKS4KKwogMjAxMy0wNy0xNCAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgT3JpZ2lucyB3aXRoIGludmFsaWQgcG9ydHMgYXJlIG5vdCBtYXJrZWQgYXMgdW5pcXVlICgx
MTg2NTIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKaW5kZXggMTJlNTFlMy4u
ZTA1YjE4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtMiw2ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgogICogQ29weXJpZ2h0IChD
KSAyMDA5IEphbiBBbG9uem8KICAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAx
MiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3Mu
CiAgKgogICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGExMXksIGNvcHlyaWdodCBhcyBmb2xsb3dz
OgogICoKQEAgLTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlVXRpbC5o
IgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgiCiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKKyNpbmNsdWRlIDx3dGYvTm90Rm91bmQuaD4KICNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC0xMzYs
NyArMTM4LDcgQEAgc3RhdGljIGdjaGFyKiB0ZXh0Rm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKICAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShyZXN1bHRUZXh0LCBGQUxTRSk7CiB9
CiAKLXN0YXRpYyBnY2hhciogdGV4dEZvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0KQorc3RhdGljIGdjaGFyKiB0ZXh0Rm9yT2JqZWN0KGNvbnN0IEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QpCiB7CiAgICAgR1N0cmluZyogc3RyID0gZ19zdHJpbmdfbmV3KDAp
OwogCkBAIC01MDAsNTMgKzUwMiw4NSBAQCBzdGF0aWMgaW50IGF0a09mZnNldFRvV2ViQ29yZU9m
ZnNldChBdGtUZXh0KiB0ZXh0LCBpbnQgb2Zmc2V0KQogICAgIHJldHVybiBvZmZzZXQgLSBvZmZz
ZXRBZGp1c3RtZW50Rm9yTGlzdEl0ZW0oY29yZU9iamVjdCk7CiB9CiAKK3N0YXRpYyBOb2RlKiBn
ZXROb2RlRm9yQWNjZXNzaWJpbGl0eU9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2Jq
ZWN0KQoreworICAgIGlmICghY29yZU9iamVjdC0+aXNOYXRpdmVUZXh0Q29udHJvbCgpKQorICAg
ICAgICByZXR1cm4gY29yZU9iamVjdC0+bm9kZSgpOworCisgICAgLy8gRm9yIHRleHQgY29udHJv
bHMsIHdlIGdldCB0aGUgZmlyc3QgdmlzaWJsZSBwb3NpdGlvbiBvbiBpdCAod2hpY2ggd2lsbAor
ICAgIC8vIGJlbG9uZyB0byBpdHMgaW5uZXIgZWxlbWVudCwgdW5yZWFjaGFibGUgZnJvbSB0aGUg
RE9NKSBhbmQgcmV0dXJuIGl0cworICAgIC8vIHBhcmVudCBub2RlLCBzbyB3ZSBoYXZlIGEgImJv
dW5kaW5nIG5vZGUiIGZvciB0aGUgYWNjZXNzaWJpbGl0eSBvYmplY3QuCisgICAgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uSW5UZXh0Q29udHJvbElubmVyRWxlbWVudCA9IGNvcmVPYmplY3QtPnZp
c2libGVQb3NpdGlvbkZvckluZGV4KDAsIHRydWUpOworICAgIE5vZGUqIGlubmVyTW9zdE5vZGUg
PSBwb3NpdGlvbkluVGV4dENvbnRyb2xJbm5lckVsZW1lbnQuZGVlcEVxdWl2YWxlbnQoKS5hbmNo
b3JOb2RlKCk7CisgICAgaWYgKCFpbm5lck1vc3ROb2RlKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHJldHVybiBpbm5lck1vc3ROb2RlLT5wYXJlbnROb2RlKCk7Cit9CisKIHN0YXRpYyB2b2lk
IGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCwgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBnaW50JiBzdGFydE9mZnNldCwgZ2lu
dCYgZW5kT2Zmc2V0KQogewotICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0KCkpCisgICAgLy8gRGVmYXVsdCB2YWx1ZXMsIHVubGVzcyB0aGUgY29udHJhcnkg
aXMgcHJvdmVkLgorICAgIHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICBlbmRPZmZzZXQgPSAwOworCisg
ICAgTm9kZSogbm9kZSA9IGdldE5vZGVGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3Qp
OworICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRWFybHkgcmV0dXJu
IGlmIHRoZSBzZWxlY3Rpb24gZG9lc24ndCBhZmZlY3QgdGhlIHNlbGVjdGVkIG5vZGUuCi0gICAg
aWYgKCFzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QoY29yZU9iamVjdCwgc2VsZWN0aW9uKSkKKyAg
ICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXZSBu
ZWVkIHRvIGZpbmQgdGhlIGV4YWN0IHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIGluIHRoZQotICAg
IC8vIHNlbGVjdGVkIG5vZGUgdGhhdCBpbnRlcnNlY3RzIHRoZSBzZWxlY3Rpb24sIHRvIGxhdGVy
IG9uIGdldAotICAgIC8vIHRoZSByaWdodCB2YWx1ZXMgZm9yIHRoZSBlZmZlY3RpdmUgc3RhcnQg
YW5kIGVuZCBvZmZzZXRzLgotICAgIFBvc2l0aW9uIG5vZGVSYW5nZVN0YXJ0OwotICAgIFBvc2l0
aW9uIG5vZGVSYW5nZUVuZDsKLSAgICBOb2RlKiBub2RlID0gY29yZU9iamVjdC0+bm9kZSgpOwot
ICAgIFJlZlB0cjxSYW5nZT4gc2VsUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLQotICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gYWZmZWN0cyB0aGUgc2VsZWN0ZWQgbm9kZSBh
bmQgaXRzIGZpcnN0Ci0gICAgLy8gcG9zc2libGUgcG9zaXRpb24gaXMgYWxzbyBpbiB0aGUgc2Vs
ZWN0aW9uLCB3ZSBtdXN0IHNldAotICAgIC8vIG5vZGVSYW5nZVN0YXJ0IHRvIHRoYXQgcG9zaXRp
b24sIG90aGVyd2lzZSB0byB0aGUgc2VsZWN0aW9uJ3MKLSAgICAvLyBzdGFydCBwb3NpdGlvbiAo
aXQgd291bGQgYmVsb25nIHRvIHRoZSBub2RlIGFueXdheSkuCi0gICAgTm9kZSogZmlyc3RMZWFm
Tm9kZSA9IG5vZGUtPmZpcnN0RGVzY2VuZGFudCgpOwotICAgIGlmIChzZWxSYW5nZS0+aXNQb2lu
dEluUmFuZ2UoZmlyc3RMZWFmTm9kZSwgMCwgSUdOT1JFX0VYQ0VQVElPTikpCi0gICAgICAgIG5v
ZGVSYW5nZVN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGZpcnN0TGVhZk5vZGUp
OwotICAgIGVsc2UKLSAgICAgICAgbm9kZVJhbmdlU3RhcnQgPSBzZWxSYW5nZS0+c3RhcnRQb3Np
dGlvbigpOwotCi0gICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBhZmZlY3RzIHRoZSBzZWxlY3RlZCBu
b2RlIGFuZCBpdHMgbGFzdAotICAgIC8vIHBvc3NpYmxlIHBvc2l0aW9uIGlzIGFsc28gaW4gdGhl
IHNlbGVjdGlvbiwgd2UgbXVzdCBzZXQKLSAgICAvLyBub2RlUmFuZ2VFbmQgdG8gdGhhdCBwb3Np
dGlvbiwgb3RoZXJ3aXNlIHRvIHRoZSBzZWxlY3Rpb24ncwotICAgIC8vIGVuZCBwb3NpdGlvbiAo
aXQgd291bGQgYmVsb25nIHRvIHRoZSBub2RlIGFueXdheSkuCi0gICAgTm9kZSogbGFzdExlYWZO
b2RlID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKLSAgICBpZiAoc2VsUmFuZ2UtPmlzUG9pbnRJ
blJhbmdlKGxhc3RMZWFmTm9kZSwgbGFzdE9mZnNldEluTm9kZShsYXN0TGVhZk5vZGUpLCBJR05P
UkVfRVhDRVBUSU9OKSkKLSAgICAgICAgbm9kZVJhbmdlRW5kID0gbGFzdFBvc2l0aW9uSW5PckFm
dGVyTm9kZShsYXN0TGVhZk5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgbm9kZVJhbmdlRW5kID0g
c2VsUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgLy8gV2UgbmVlZCB0byBsaW1pdCBvdXIgc2Vh
cmNoIHRvIHBvc2l0aW9ucyB0aGF0IGZhbGwgaW5zaWRlIHRoZSBkb21haW4gb2YgdGhlIGN1cnJl
bnQgb2JqZWN0LgorICAgIFBvc2l0aW9uIGZpcnN0VmFsaWRQb3NpdGlvbiA9IGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShub2RlLT5maXJzdERlc2NlbmRhbnQoKSk7CisgICAgUG9zaXRpb24g
bGFzdFZhbGlkUG9zaXRpb24gPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUtPmxhc3RE
ZXNjZW5kYW50KCkpOworCisgICAgLy8gRWFybHkgcmV0dXJuIHdpdGggcHJvcGVyIHZhbHVlcyBp
ZiB0aGUgc2VsZWN0aW9uIGZhbGxzIGVudGlyZWx5IG91dCBvZiB0aGUgb2JqZWN0LgorICAgIGlm
ICghc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlvbikpIHsKKyAg
ICAgICAgc3RhcnRPZmZzZXQgPSBjb21wYXJlUG9zaXRpb25zKHNlbGVjdGlvbi5zdGFydCgpLCBm
aXJzdFZhbGlkUG9zaXRpb24pIDwgMCA/IDAgOiBhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNv
cmVPYmplY3QpOworICAgICAgICBlbmRPZmZzZXQgPSBzdGFydE9mZnNldDsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIEZpbmQgdGhlIHByb3BlciByYW5nZSBmb3IgdGhlIHNlbGVj
dGlvbiB0aGF0IGZhbGxzIGluc2lkZSB0aGUgb2JqZWN0LgorICAgIFBvc2l0aW9uIG5vZGVSYW5n
ZVN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CisgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMobm9k
ZVJhbmdlU3RhcnQsIGZpcnN0VmFsaWRQb3NpdGlvbikgPCAwKQorICAgICAgICBub2RlUmFuZ2VT
dGFydCA9IGZpcnN0VmFsaWRQb3NpdGlvbjsKKworICAgIFBvc2l0aW9uIG5vZGVSYW5nZUVuZCA9
IHNlbGVjdGlvbi5lbmQoKTsKKyAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhub2RlUmFuZ2VFbmQs
IGxhc3RWYWxpZFBvc2l0aW9uKSA+IDApCisgICAgICAgIG5vZGVSYW5nZUVuZCA9IGxhc3RWYWxp
ZFBvc2l0aW9uOwogCiAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIG9mIHRoZSBzZWxlY3RlZCBy
YW5nZSBpbnNpZGUgdGhlIG9iamVjdC4KICAgICBQb3NpdGlvbiBwYXJlbnRGaXJzdFBvc2l0aW9u
ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwogICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2VJblBhcmVudCA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgcGFyZW50Rmly
c3RQb3NpdGlvbiwgbm9kZVJhbmdlU3RhcnQpOwogCi0KLSAgICAvLyBTZXQgdmFsdWVzIGZvciBz
dGFydCBhbmQgZW5kIG9mZnNldHMuCisgICAgLy8gU2V0IHZhbHVlcyBmb3Igc3RhcnQgb2Zmc2V0
cyBhbmQgY2FsY3VsYXRlIGluaXRpYWwgcmFuZ2UgbGVuZ3RoLgorICAgIC8vIFRoZXNlIHZhbHVl
cyBtaWdodCBiZSBhZGp1c3RlZCBsYXRlciB0byBjb3ZlciBzcGVjaWFsIGNhc2VzLgogICAgIHN0
YXJ0T2Zmc2V0ID0gd2ViQ29yZU9mZnNldFRvQXRrT2Zmc2V0KGNvcmVPYmplY3QsIFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VJblBhcmVudC5nZXQoKSwgdHJ1ZSkpOwotCiAgICAgUmVm
UHRyPFJhbmdlPiBub2RlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIG5v
ZGVSYW5nZVN0YXJ0LCBub2RlUmFuZ2VFbmQpOwotICAgIGVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0
ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChub2RlUmFuZ2UuZ2V0KCksIHRydWUpOworICAg
IGludCByYW5nZUxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobm9kZVJhbmdlLmdl
dCgpLCB0cnVlKTsKKworICAgIC8vIFNwZWNpYWwgY2FzZXMgdGhhdCBhcmUgb25seSByZWxldmFu
dCB3aGVuIHdvcmtpbmcgd2l0aCAqX0VORCBib3VuZGFyaWVzLgorICAgIGlmIChzZWxlY3Rpb24u
YWZmaW5pdHkoKSA9PSBVUFNUUkVBTSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVN0YXJ0KG5vZGVSYW5nZVN0YXJ0LCBVUFNUUkVBTSk7CisgICAgICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlRW5kKG5vZGVSYW5nZUVuZCwgVVBTVFJFQU0pOworCisgICAgICAgIC8vIFdlIG5l
ZWQgdG8gYWRqdXN0IG9mZnNldHMgd2hlbiBmaW5kaW5nIHdyYXBwZWQgbGluZXMgc28gdGhlIHBv
c2l0aW9uIGF0IHRoZSBlbmQKKyAgICAgICAgLy8gb2YgdGhlIGxpbmUgaXMgcHJvcGVybHkgdGFr
aW5nIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBvZmZzZXRzLgorICAgICAgICBp
ZiAoaXNFbmRPZkxpbmUodmlzaWJsZVN0YXJ0KSAmJiAhbGluZUJyZWFrRXhpc3RzQXRWaXNpYmxl
UG9zaXRpb24odmlzaWJsZVN0YXJ0KSkgeworICAgICAgICAgICAgaWYgKGlzU3RhcnRPZkxpbmUo
dmlzaWJsZVN0YXJ0Lm5leHQoKSkpCisgICAgICAgICAgICAgICAgcmFuZ2VMZW5ndGgrKzsKKwor
ICAgICAgICAgICAgaWYgKCFpc0VuZE9mQmxvY2sodmlzaWJsZVN0YXJ0KSkKKyAgICAgICAgICAg
ICAgICBzdGFydE9mZnNldCA9IHN0ZDo6bWF4KHN0YXJ0T2Zmc2V0IC0gMSwgMCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaXNFbmRPZkxpbmUodmlzaWJsZUVuZCkgJiYgIWxpbmVCcmVha0V4
aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2libGVFbmQpICYmICFpc0VuZE9mQmxvY2sodmlzaWJs
ZUVuZCkpCisgICAgICAgICAgICByYW5nZUxlbmd0aC0tOworICAgIH0KKworICAgIGVuZE9mZnNl
dCA9IHN0ZDo6bWluKHN0YXJ0T2Zmc2V0ICsgcmFuZ2VMZW5ndGgsIHN0YXRpY19jYXN0PGludD4o
YWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb3JlT2JqZWN0KSkpOwogfQogCiBzdGF0aWMgZ2No
YXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dChBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0
T2Zmc2V0LCBnaW50IGVuZE9mZnNldCkKQEAgLTYwMCwxMiArNjM0LDE2IEBAIGVudW0gR2V0VGV4
dFJlbGF0aXZlUG9zaXRpb24gewogICAgIEdldFRleHRQb3NpdGlvbkFmdGVyCiB9OwogCi1zdGF0
aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcihBdGtUZXh0KiB0ZXh0LCBnaW50
IG9mZnNldCwgR2V0VGV4dFJlbGF0aXZlUG9zaXRpb24gdGV4dFBvc2l0aW9uLCBnaW50KiBzdGFy
dE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQorLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gYmUg
dXNlZCBpbiBlYXJseSByZXR1cm5zLgorc3RhdGljIGNoYXIqIGVtcHR5VGV4dFNlbGVjdGlvbkF0
T2Zmc2V0KGludCBvZmZzZXQsIGludCogc3RhcnRPZmZzZXQsIGludCogZW5kT2Zmc2V0KQogewot
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotICAgIGlm
ICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
KCkpCi0gICAgICAgIHJldHVybiBnX3N0cmR1cCgiIik7CisgICAgKnN0YXJ0T2Zmc2V0ID0gb2Zm
c2V0OworICAgICplbmRPZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJuIGdfc3RyZHVwKCIiKTsK
K30KIAorc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXIoQXRrVGV4dCog
dGV4dCwgZ2ludCBvZmZzZXQsIEdldFRleHRSZWxhdGl2ZVBvc2l0aW9uIHRleHRQb3NpdGlvbiwg
Z2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKK3sKICAgICBpbnQgYWN0dWFsT2Zm
c2V0ID0gb2Zmc2V0OwogICAgIGlmICh0ZXh0UG9zaXRpb24gPT0gR2V0VGV4dFBvc2l0aW9uQmVm
b3JlKQogICAgICAgICBhY3R1YWxPZmZzZXQtLTsKQEAgLTYyNywxOCArNjY1LDE4NyBAQCBzdGF0
aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcihBdGtUZXh0KiB0ZXh0LCBnaW50
IG9mZnNldCwgR2V0VGV4dFJlbAogICAgIHJldHVybiBnX3V0Zjhfc3Vic3RyaW5nKHRleHREYXRh
LmdldCgpLCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOwogfQogCitzdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIG5leHRXb3JkU3RhcnRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJm9yaWdp
bmFsUG9zaXRpb24pCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJDdXJyZW50
V29yZCA9IG5leHRXb3JkUG9zaXRpb24ob3JpZ2luYWxQb3NpdGlvbik7CisKKyAgICAvLyBJbiBv
cmRlciB0byBza2lwIHNwYWNlcyB3aGVuIG1vdmluZyByaWdodCwgd2UgYWR2YW5jZSBvbmUgd29y
ZCBmdXJ0aGVyCisgICAgLy8gYW5kIHRoZW4gbW92ZSBvbmUgd29yZCBiYWNrLiBUaGlzIHdpbGwg
cHV0IHVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgLy8gd29yZCBmb2xsb3dpbmcuCisg
ICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZCA9
IG5leHRXb3JkUG9zaXRpb24ocG9zaXRpb25BZnRlckN1cnJlbnRXb3JkKTsKKworICAgIGlmIChw
b3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZvbGxvd2luZ1dvcmQgIT0gcG9zaXRpb25BZnRlckN1cnJl
bnRXb3JkKQorICAgICAgICBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQgPSBwcmV2aW91c1dvcmRQ
b3NpdGlvbihwb3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZvbGxvd2luZ1dvcmQpOworCisgICAgYm9v
bCBtb3ZpbmdCYWNrd2FyZHNNb3ZlZFBvc2l0aW9uVG9TdGFydE9mQ3VycmVudFdvcmQgPSBwb3Np
dGlvbkFmdGVyQ3VycmVudFdvcmQgPT0gcHJldmlvdXNXb3JkUG9zaXRpb24obmV4dFdvcmRQb3Np
dGlvbihvcmlnaW5hbFBvc2l0aW9uKSk7CisgICAgaWYgKG1vdmluZ0JhY2t3YXJkc01vdmVkUG9z
aXRpb25Ub1N0YXJ0T2ZDdXJyZW50V29yZCkKKyAgICAgICAgcG9zaXRpb25BZnRlckN1cnJlbnRX
b3JkID0gcG9zaXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkOworCisgICAgcmV0dXJu
IHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZDsKK30KKworc3RhdGljIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91c1dvcmRFbmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJm9yaWdpbmFsUG9z
aXRpb24pCit7CisgICAgLy8gV2UgbW92ZSBmb3J3YXJkIGFuZCB0aGVuIGJhY2t3YXJkIHRvIHBv
c2l0aW9uIG91cnNlbHZlcyBhdCB0aGUgYmVnaW5uaW5nCisgICAgLy8gb2YgdGhlIGN1cnJlbnQg
d29yZCBmb3IgdGhpcyBib3VuZGFyeSwgbWFraW5nIHRoZSBtb3N0IG9mIHRoZSBzZW1hbnRpY3MK
KyAgICAvLyBvZiBwcmV2aW91c1dvcmRQb3NpdGlvbigpIGFuZCBuZXh0V29yZFBvc2l0aW9uKCku
CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQXRTdGFydE9mQ3VycmVudFdvcmQgPSBwcmV2
aW91c1dvcmRQb3NpdGlvbihuZXh0V29yZFBvc2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pKTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BdFByZXZpb3VzV29yZCA9IHByZXZpb3VzV29yZFBv
c2l0aW9uKG9yaWdpbmFsUG9zaXRpb24pOworCisgICAgLy8gTmVlZCB0byBjb25zaWRlciBzcGVj
aWFsIGNhc2VzIChwdW5jdHVhdGlvbikgd2hlbiB3ZSBhcmUgaW4gdGhlIGxhc3Qgd29yZCBvZiBh
IHNlbnRlbmNlLgorICAgIGlmIChpc1N0YXJ0T2ZXb3JkKG9yaWdpbmFsUG9zaXRpb24pICYmIHBv
c2l0aW9uQXRQcmV2aW91c1dvcmQgIT0gb3JpZ2luYWxQb3NpdGlvbiAmJiBwb3NpdGlvbkF0UHJl
dmlvdXNXb3JkID09IHBvc2l0aW9uQXRTdGFydE9mQ3VycmVudFdvcmQpCisgICAgICAgIHJldHVy
biBuZXh0V29yZFBvc2l0aW9uKHBvc2l0aW9uQXRTdGFydE9mQ3VycmVudFdvcmQpOworCisgICAg
Ly8gSW4gb3JkZXIgdG8gc2tpcCBzcGFjZXMgd2hlbiBtb3ZpbmcgbGVmdCwgd2UgYWR2YW5jZSBv
bmUgd29yZCBiYWNrd2FyZHMKKyAgICAvLyBhbmQgdGhlbiBtb3ZlIG9uZSB3b3JkIGZvcndhcmQu
IFRoaXMgd2lsbCBwdXQgdXMgYXQgdGhlIGJlZ2lubmluZyBvZgorICAgIC8vIHRoZSB3b3JkIGZv
bGxvd2luZy4KKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25CZWZvcmVTcGFjaW5nQW5kUHJl
Y2VlZGluZ1dvcmQgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihwb3NpdGlvbkF0U3RhcnRPZkN1cnJl
bnRXb3JkKTsKKworICAgIGlmIChwb3NpdGlvbkJlZm9yZVNwYWNpbmdBbmRQcmVjZWVkaW5nV29y
ZCAhPSBwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkKQorICAgICAgICBwb3NpdGlvbkF0U3Rh
cnRPZkN1cnJlbnRXb3JkID0gbmV4dFdvcmRQb3NpdGlvbihwb3NpdGlvbkJlZm9yZVNwYWNpbmdB
bmRQcmVjZWVkaW5nV29yZCk7CisKKyAgICBib29sIG1vdmluZ0ZvcndhcmRNb3ZlZFBvc2l0aW9u
VG9FbmRPZkN1cnJlbnRXb3JkID0gbmV4dFdvcmRQb3NpdGlvbihwb3NpdGlvbkF0U3RhcnRPZkN1
cnJlbnRXb3JkKSA9PSBwcmV2aW91c1dvcmRQb3NpdGlvbihuZXh0V29yZFBvc2l0aW9uKG9yaWdp
bmFsUG9zaXRpb24pKTsKKyAgICBpZiAobW92aW5nRm9yd2FyZE1vdmVkUG9zaXRpb25Ub0VuZE9m
Q3VycmVudFdvcmQpCisgICAgICAgIHBvc2l0aW9uQXRTdGFydE9mQ3VycmVudFdvcmQgPSBwb3Np
dGlvbkJlZm9yZVNwYWNpbmdBbmRQcmVjZWVkaW5nV29yZDsKKworICAgIHJldHVybiBwb3NpdGlv
bkF0U3RhcnRPZkN1cnJlbnRXb3JkOworfQorCitzdGF0aWMgVmlzaWJsZVNlbGVjdGlvbiB3b3Jk
QXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3Qs
IFZpc2libGVQb3NpdGlvbiBvcmlnaW5hbFBvc2l0aW9uLCBBdGtUZXh0Qm91bmRhcnkgYm91bmRh
cnlUeXBlKQoreworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uOworICAgIFZpc2li
bGVQb3NpdGlvbiBlbmRQb3NpdGlvbjsKKworICAgIHN3aXRjaCAoYm91bmRhcnlUeXBlKSB7Cisg
ICAgY2FzZSBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJUOgorICAgICAgICAvLyBpc1N0YXJ0
T2ZXb3JkKCkgcmV0dXJucyB0cnVlIGJvdGggd2hlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgInJl
YWwiIHdvcmQKKyAgICAgICAgLy8gYXMgd2hlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgd2hpdGVz
cGFjZSByYW5nZSBiZXR3ZWVuIHR3byAicmVhbCIgd29yZHMsCisgICAgICAgIC8vIHNpbmNlIHRo
YXQgd2hpdGVzcGFjZSBpcyBjb25zaWRlcmVkIGEgIndvcmQiIGFzIHdlbGwuIEFuZCBpbiBjYXNl
IHdlIGFyZQorICAgICAgICAvLyBhbHJlYWR5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSAicmVhbCIg
d29yZCB3ZSBkbyBub3QgbmVlZCB0byBsb29rIGJhY2t3YXJkcy4KKyAgICAgICAgaWYgKGlzU3Rh
cnRPZldvcmQob3JpZ2luYWxQb3NpdGlvbikgJiYgaXNXaGl0ZXNwYWNlKG9yaWdpbmFsUG9zaXRp
b24uY2hhcmFjdGVyQmVmb3JlKCkpKQorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IG9yaWdp
bmFsUG9zaXRpb247CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBw
cmV2aW91c1dvcmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgZW5kUG9zaXRp
b24gPSBuZXh0V29yZFN0YXJ0UG9zaXRpb24oc3RhcnRQb3NpdGlvbik7CisKKyAgICAgICAgLy8g
V2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBsb29rIGZvciB0aGUgd29yZCBpbiB0aGUgY3Vy
cmVudCBsaW5lIHdoZW4KKyAgICAgICAgLy8gd2UgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBu
ZXcgbGluZSwgYW5kIG5vdCBsb29rIGludG8gdGhlIHByZXZpb3VzIG9uZQorICAgICAgICAvLyBh
dCBhbGwsIHdoaWNoIG1pZ2h0IGhhcHBlbiB3aGVuIGxpbmVzIGJlbG9uZyB0byBkaWZmZXJlbnQg
bm9kZXMuCisgICAgICAgIGlmIChpc1N0YXJ0T2ZMaW5lKG9yaWdpbmFsUG9zaXRpb24pICYmIGlz
U3RhcnRPZkxpbmUoZW5kUG9zaXRpb24pKSB7CisgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0g
ZW5kUG9zaXRpb247CisgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IG5leHRXb3JkU3RhcnRQb3Np
dGlvbihzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNh
c2UgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQ6CisgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBw
cmV2aW91c1dvcmRFbmRQb3NpdGlvbihvcmlnaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgZW5kUG9z
aXRpb24gPSBuZXh0V29yZFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOworICAgICAgICBicmVhazsK
KworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0ZWRXb3JkKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0
aW9uKTsKKworICAgIC8vIFdlIG1hcmsgdGhlIHNlbGVjdGlvbiBhcyAndXBzdHJlYW0nIHNvIHdl
IGNhbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiBsYXRlciwKKyAgICAvLyB3aGVuIGZpbmRpbmcgdGhl
IGFjdHVhbCBvZmZzZXRzIGluIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoKS4KKyAgICBp
ZiAoYm91bmRhcnlUeXBlID09IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5EKQorICAgICAgICBz
ZWxlY3RlZFdvcmQuc2V0QWZmaW5pdHkoVVBTVFJFQU0pOworCisgICAgcmV0dXJuIHNlbGVjdGVk
V29yZDsKK30KKworc3RhdGljIGludCBudW1iZXJPZlJlcGxhY2VkRWxlbWVudHNCZWZvcmVPZmZz
ZXQoQXRrVGV4dCogdGV4dCwgdW5zaWduZWQgb2Zmc2V0KQoreworICAgIEdPd25QdHI8Y2hhcj4g
dGV4dEZvck9iamVjdCh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQodGV4dCwgMCwgb2Zmc2V0
KSk7CisgICAgU3RyaW5nIHRleHRCZWZvcmVPZmZzZXQgPSBTdHJpbmc6OmZyb21VVEY4KHRleHRG
b3JPYmplY3QuZ2V0KCkpOworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBzaXplX3QgaW5kZXgg
PSB0ZXh0QmVmb3JlT2Zmc2V0LmZpbmQob2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIsIDApOwor
ICAgIHdoaWxlIChpbmRleCA8IG9mZnNldCAmJiBpbmRleCAhPSBXVEY6Om5vdEZvdW5kKSB7Cisg
ICAgICAgIGluZGV4ID0gdGV4dEJlZm9yZU9mZnNldC5maW5kKG9iamVjdFJlcGxhY2VtZW50Q2hh
cmFjdGVyLCBpbmRleCArIDEpOworICAgICAgICBjb3VudCsrOworICAgIH0KKyAgICByZXR1cm4g
Y291bnQ7Cit9CisKK3N0YXRpYyBjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFdvcmRGb3JC
b3VuZGFyeShBdGtUZXh0KiB0ZXh0LCBpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRh
cnlUeXBlLCBHZXRUZXh0UmVsYXRpdmVQb3NpdGlvbiB0ZXh0UG9zaXRpb24sIGludCogc3RhcnRP
ZmZzZXQsIGludCogZW5kT2Zmc2V0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVP
YmplY3QgPSBjb3JlKHRleHQpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3Qt
PmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGVtcHR5VGV4
dFNlbGVjdGlvbkF0T2Zmc2V0KDAsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgTm9k
ZSogbm9kZSA9IGdldE5vZGVGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3QpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0KDAs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgaW50IGFjdHVhbE9mZnNldCA9IGF0a09m
ZnNldFRvV2ViQ29yZU9mZnNldCh0ZXh0LCBvZmZzZXQpOworCisgICAgLy8gQmVzaWRlcyBvZiB0
aGUgdXN1YWwgY29udmVyc2lvbiBmcm9tIEFUSyBvZmZzZXRzIHRvIFdlYkNvcmUgb2Zmc2V0cywK
KyAgICAvLyB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZW1iZWRkZWQgb2JqZWN0
cyB0aGF0IG1pZ2h0IGhhdmUgYmVlbgorICAgIC8vIGluc2VydGVkIGluIHRoZSB0ZXh0IGV4cG9z
ZWQgdGhyb3VnaCBBdGtUZXh0IHdoZW4gY2FsY3VsYXRpbmcgdGhlIG9mZnNldC4KKyAgICBhY3R1
YWxPZmZzZXQgLT0gbnVtYmVyT2ZSZXBsYWNlZEVsZW1lbnRzQmVmb3JlT2Zmc2V0KHRleHQsIGFj
dHVhbE9mZnNldCk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IGNvcmVP
YmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KGFjdHVhbE9mZnNldCk7CisgICAgVmlzaWJs
ZVNlbGVjdGlvbiBjdXJyZW50V29yZCA9IHdvcmRBdFBvc2l0aW9uRm9yQXRrQm91bmRhcnkoY29y
ZU9iamVjdCwgY2FyZXRQb3NpdGlvbiwgYm91bmRhcnlUeXBlKTsKKworICAgIC8vIFRha2UgaW50
byBhY2NvdW50IG90aGVyIHJlbGF0aXZlIHBvc2l0aW9ucywgaWYgbmVlZGVkLCBieQorICAgIC8v
IGNhbGN1bGF0aW5nIHRoZSBuZXcgcG9zaXRpb24gdGhhdCB3ZSB3b3VsZCBuZWVkIHRvIGNvbnNp
ZGVyLgorICAgIFZpc2libGVQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb247Cisg
ICAgc3dpdGNoICh0ZXh0UG9zaXRpb24pIHsKKyAgICBjYXNlIEdldFRleHRQb3NpdGlvbkF0Ogor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQmVmb3JlOgorICAgICAg
ICAvLyBFYXJseSByZXR1cm4gaWYgYXNraW5nIGZvciB0aGUgcHJldmlvdXMgd29yZCB3aGlsZSBh
bHJlYWR5IGF0IHRoZSBiZWdpbm5pbmcuCisgICAgICAgIGlmIChpc0ZpcnN0VmlzaWJsZVBvc2l0
aW9uSW5Ob2RlKGN1cnJlbnRXb3JkLnZpc2libGVTdGFydCgpLCBub2RlKSkKKyAgICAgICAgICAg
IHJldHVybiBlbXB0eVRleHRTZWxlY3Rpb25BdE9mZnNldCgwLCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0KTsKKworICAgICAgICBpZiAoaXNTdGFydE9mTGluZShjdXJyZW50V29yZC5lbmQoKSkpCisg
ICAgICAgICAgICBuZXdQb3NpdGlvbiA9IGN1cnJlbnRXb3JkLnZpc2libGVTdGFydCgpLnByZXZp
b3VzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3RhcnRPZldv
cmQoY3VycmVudFdvcmQuc3RhcnQoKSwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQWZ0ZXI6CisgICAgICAgIC8vIEVhcmx5
IHJldHVybiBpZiBhc2tpbmcgZm9yIHRoZSBmb2xsb3dpbmcgd29yZCB3aGlsZSBhbHJlYWR5IGF0
IHRoZSBlbmQuCisgICAgICAgIGlmIChpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY3VycmVu
dFdvcmQudmlzaWJsZUVuZCgpLCBub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVRleHRT
ZWxlY3Rpb25BdE9mZnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNvcmVPYmplY3QpLCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgICAgICBpZiAoaXNFbmRPZkxpbmUoY3VycmVu
dFdvcmQuZW5kKCkpKQorICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBjdXJyZW50V29yZC52aXNp
YmxlRW5kKCkubmV4dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdQb3NpdGlvbiA9
IGVuZE9mV29yZChjdXJyZW50V29yZC5lbmQoKSwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHJlbGV2YW50IHdvcmQgd2UgYXJlIGFj
dHVhbGx5IGludGVyZXN0ZWQgaW4KKyAgICAvLyBhbmQgY2FsY3VsYXRlIHRoZSBBVEsgb2Zmc2V0
cyBmb3IgaXQsIHRoZW4gcmV0dXJuIGV2ZXJ5dGhpbmcuCisgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3RlZFdvcmQgPSBuZXdQb3NpdGlvbiAhPSBjYXJldFBvc2l0aW9uID8gd29yZEF0UG9zaXRp
b25Gb3JBdGtCb3VuZGFyeShjb3JlT2JqZWN0LCBuZXdQb3NpdGlvbiwgYm91bmRhcnlUeXBlKSA6
IGN1cnJlbnRXb3JkOworICAgIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoY29yZU9iamVj
dCwgc2VsZWN0ZWRXb3JkLCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOworICAgIHJldHVybiB3
ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQodGV4dCwgKnN0YXJ0T2Zmc2V0LCAqZW5kT2Zmc2V0
KTsKK30KKwogc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRGb3JPZmZz
ZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5
cGUsIEdldFRleHRSZWxhdGl2ZVBvc2l0aW9uIHRleHRQb3NpdGlvbiwgZ2ludCogc3RhcnRPZmZz
ZXQsIGdpbnQqIGVuZE9mZnNldCkKIHsKLSAgICAvLyBNYWtlIHN1cmUgd2UgYWx3YXlzIHJldHVy
biB2YWxpZCB2YWxpZCB2YWx1ZXMgZm9yIG9mZnNldHMuCi0gICAgKnN0YXJ0T2Zmc2V0ID0gMDsK
LSAgICAqZW5kT2Zmc2V0ID0gMDsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0
ID0gY29yZSh0ZXh0KTsKKyAgICBpZiAoIWNvcmVPYmplY3QgfHwgIWNvcmVPYmplY3QtPmlzQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1cm4gZW1wdHlUZXh0U2VsZWN0
aW9uQXRPZmZzZXQoMCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAKICAgICBpZiAoYm91bmRh
cnlUeXBlID09IEFUS19URVhUX0JPVU5EQVJZX0NIQVIpCiAgICAgICAgIHJldHVybiB3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldENoYXIodGV4dCwgb2Zmc2V0LCB0ZXh0UG9zaXRpb24sIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQpOwogCisgICAgaWYgKGJvdW5kYXJ5VHlwZSA9PSBBVEtfVEVYVF9CT1VO
REFSWV9XT1JEX1NUQVJUIHx8IGJvdW5kYXJ5VHlwZSA9PSBBVEtfVEVYVF9CT1VOREFSWV9XT1JE
X0VORCkKKyAgICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0V29yZEZvckJvdW5k
YXJ5KHRleHQsIG9mZnNldCwgYm91bmRhcnlUeXBlLCB0ZXh0UG9zaXRpb24sIHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQpOworCiAjaWYgUExBVEZPUk0oR1RLKQotICAgIC8vIEZJWE1FOiBHZXQgcmlk
IG9mIHRoZSBjb2RlIGJlbG93IG9uY2UgZXZlcnkgc2luZ2xlIGdldF90ZXh0Xypfb2Zmc2V0Ci0g
ICAgLy8gZnVuY3Rpb24gaGFzIGJlZW4gcHJvcGVybHkgaW1wbGVtZW50ZWQgd2l0aG91dCB1c2lu
ZyBQYW5nby9DYWlyby4KKyAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGUgY29kZSBiZWxvdyBv
bmNlIGV2ZXJ5IHNpbmdsZSBwYXJ0IGFib3ZlCisgICAgLy8gaGFzIGJlZW4gcHJvcGVybHkgaW1w
bGVtZW50ZWQgd2l0aG91dCB1c2luZyBQYW5nby9DYWlyby4KICAgICBHYWlsT2Zmc2V0VHlwZSBv
ZmZzZXRUeXBlID0gR0FJTF9BVF9PRkZTRVQ7CiAgICAgc3dpdGNoICh0ZXh0UG9zaXRpb24pIHsK
ICAgICBjYXNlIEdldFRleHRQb3NpdGlvbkJlZm9yZToKQEAgLTY1Niw2ICs4NjMsMTAgQEAgc3Rh
dGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRGb3JPZmZzZXQoQXRrVGV4dCog
dGV4dCwgZ2ludCBvZmZzZXQsIEEKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogCisgICAgLy8gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdmFsaWQgdmFsaWQgdmFsdWVz
IGZvciBvZmZzZXRzLgorICAgICpzdGFydE9mZnNldCA9IDA7CisgICAgKmVuZE9mZnNldCA9IDA7
CisKICAgICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxfZ2V0X3RleHQoZ2V0R2FpbFRleHRVdGlsRm9y
QXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZvckF0ayh0ZXh0KSwgb2Zmc2V0VHlwZSwgYm91bmRh
cnlUeXBlLCBvZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogI2VuZGlmCiAKQEAgLTc5
MCw5ICsxMDAxLDYgQEAgc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXROU2VsZWN0
aW9ucyhBdGtUZXh0KiB0ZXh0KQogCiBzdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0U2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtLCBnaW50KiBzdGFy
dE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQogewotICAgIC8vIERlZmF1bHQgdmFsdWVzLCB1bmxl
c3MgdGhlIGNvbnRyYXJ5IGlzIHByb3ZlZAotICAgICpzdGFydE9mZnNldCA9ICplbmRPZmZzZXQg
PSAwOwotCiAgICAgLy8gV2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlv
biwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93LgogICAgIGlm
IChzZWxlY3Rpb25OdW0pCiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGNh
NmE0NWYuLmZlOTc3YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMy0w
Ny0xMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29tPgorCisg
ICAgICAgIEltcGxlbWVudCBhdGtfdGV4dF9nZXRfdGV4dF8qX29mZnNldCBmb3IgV09SRAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0ODcxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBjdXJy
ZW50IHVuaXQgdGVzdHMgYW5kIGFkZCBhIG5ldyBvbmUgc3BlY2lmaWMgZm9yIGVtYmVkZGVkCisg
ICAgICAgIG9iamVjdHMsIHRvIGVuc3VyZSB3ZSBhcmUgY292ZXJpbmcgZXZlbiBtb3JlIGNhc2Vz
IHRoYW4gYmVmb3JlLgorCisgICAgICAgICogdGVzdHMvdGVzdGF0ay5jOgorICAgICAgICAocnVu
R2V0VGV4dFRlc3RzKTogVXBkYXRlZCB1bml0IHRlc3RzIHRvIGNoZWNrIG1vcmUgY2FzZXMgb2YK
KyAgICAgICAgY2FsbGluZyB0aGUgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQoKSBmdW5jdGlv
bnMgZm9yIFdPUkQuCisgICAgICAgICh0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0V2l0aEVt
YmVkZGVkT2JqZWN0cyk6IE5ldy4KKyAgICAgICAgKG1haW4pOiBBZGRlZCBuZXcgdGVzdCB0byB0
aGUgdGVzdCBzdWl0ZS4KKwogMjAxMy0wNy0wOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gVXBkYXRlIE5FV1MgYW5kIFZl
cnNpb25zLm00IGZvciAyLjEuMyByZWxlYXNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGF0ay5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCmlu
ZGV4IDI0MmYxZDcuLjQyY2MxM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3RhdGsuYworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtNTIsNiArNTMsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNXaXRoRXh0cmFuZW91
c1doaXRlU3BhY2VzID0gIjxodG1sPjxoZWFkPjxib2R5PjxwPlRoaQogCiBzdGF0aWMgY29uc3Qg
Y2hhciogY29udGVudHNXaXRoV3JhcHBlZExpbmVzID0gIjxodG1sPjxib2R5PjxwIHN0eWxlPSdt
YXgtd2lkdGg6MTUwcHg7Jz5UaGlzIGlzIG9uZSBsaW5lIHdyYXBwZWQgYmVjYXVzZSBvZiB0aGUg
bWF4aW11bSB3aWR0aCBvZiBpdHMgY29udGFpbmVyLjwvcD48cD5UaGlzIGlzIGFub3RoZXIgbGlu
ZSB3cmFwcGVkPGJyPmJlY2F1c2Ugb2Ygb25lIGZvcmNlZDxicj5saW5lIGJyZWFrIGluIHRoZSBt
aWRkbGUuPC9ib2R5PjwvaHRtbD4iOwogCitzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNXaXRo
RW1iZWRkZWRPYmplY3RzID0gIjxodG1sPjxib2R5PlRoaXMgaXMgb25lIGxpbmUgY29udGFpbmlu
ZyB0d28gPGltZz4gZW1iZWRkZWQgb2JqZWN0cyA8aW1nPiBpbiB0aGUgbWlkZGxlLjwvYm9keT48
L2h0bWw+IjsKKwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbWJvQm94U2VsZWN0b3IgPSAiPGh0bWw+
PGJvZHk+PHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSdmb28nPmZvbzwvb3B0aW9uPjxv
cHRpb24gdmFsdWU9J2Jhcic+YmFyPC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOwog
CiBzdGF0aWMgY29uc3QgY2hhciogZW1iZWRkZWRPYmplY3RzID0gIjxodG1sPjxib2R5PjxwPkNo
b29zZTogPGlucHV0IHZhbHVlPSdmb28nIHR5cGU9J2NoZWNrYm94Jy8+Zm9vIDxpbnB1dCB2YWx1
ZT0nYmFyJyB0eXBlPSdjaGVja2JveCcvPmJhciAocGljayBvbmUpPC9wPjxwPkNob29zZTogPHNl
bGVjdCBuYW1lPSdmb28nPjxvcHRpb24+YmFyPC9vcHRpb24+PG9wdGlvbj5iYXo8L29wdGlvbj48
L3NlbGVjdD4gKHBpY2sgb25lKTwvcD48cD48aW5wdXQgbmFtZT0nZm9vYmFyYnV0dG9uJyB2YWx1
ZT0nZm9vYmFyJyB0eXBlPSdidXR0b24nLz48L3A+PC9ib2R5PjwvaHRtbD4iOwpAQCAtMTM4LDEy
ICsxNDEsMjEgQEAgc3RhdGljIHZvaWQgcnVuR2V0VGV4dFRlc3RzKEF0a1RleHQqIHRleHRPYmpl
Y3QpCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4
dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICA1OCwgInRoaXJkLiIsIDU4LCA2NCk7CiAKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0
aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9V
TkRBUllfV09SRF9TVEFSVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDY0LCAidGhpcmQuIiwg
NTgsIDY0KTsKKworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRf
Z2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIDAsICIiLCAwLCAwKTsKKwogICAgIHRlc3RHZXRUZXh0RnVu
Y3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RF
WFRfQk9VTkRBUllfV09SRF9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgIDUsICJUaGlz
ICIsIDAsIDUpOwogCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4
dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAog
ICAgICAgICAgICAgICAgICAgICAgICAgNywgIlRoaXMgIiwgMCwgNSk7CiAKKyAgICB0ZXN0R2V0
VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQs
IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCisgICAgICAgICAgICAgICAgICAgICAgICA2
NCwgInRoZSAiLCA1NCwgNTgpOworCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0
LCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRf
U1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAwLCAiaXMgIiwgNSwgOCk7CiAKQEAgLTE1
Myw2ICsxNjUsOSBAQCBzdGF0aWMgdm9pZCBydW5HZXRUZXh0VGVzdHMoQXRrVGV4dCogdGV4dE9i
amVjdCkKICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90
ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIDMsICJpcyAiLCA1LCA4KTsKIAorICAgIHRlc3RHZXRUZXh0RnVuY3Rp
b24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9C
T1VOREFSWV9XT1JEX1NUQVJULAorICAgICAgICAgICAgICAgICAgICAgICAgNjQsICIiLCA2NCwg
NjQpOworCiAgICAgLyogQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQgKi8KICAgICB0ZXN0R2V0
VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRL
X1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAwLCAiVGhp
cyIsIDAsIDQpOwpAQCAtMTY2LDYgKzE4MSwxNSBAQCBzdGF0aWMgdm9pZCBydW5HZXRUZXh0VGVz
dHMoQXRrVGV4dCogdGV4dE9iamVjdCkKICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmpl
Y3QsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9F
TkQsCiAgICAgICAgICAgICAgICAgICAgICAgICA5LCAiIHRlc3QiLCA5LCAxNCk7CiAKKyAgICB0
ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNl
dCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsCisgICAgICAgICAgICAgICAgICAgICAgICA1
OCwgIiB0aGlyZCIsIDU3LCA2Myk7CisKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmpl
Y3QsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9F
TkQsCisgICAgICAgICAgICAgICAgICAgICAgICA2NCwgIi4iLCA2MywgNjQpOworCisgICAgdGVz
dEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zm
c2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IDAsICIiLCAwLCAwKTsKKwogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRr
X3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQs
CiAgICAgICAgICAgICAgICAgICAgICAgICA1LCAiVGhpcyIsIDAsIDQpOwogCkBAIC0xNzUsMTQg
KzE5OSwyMCBAQCBzdGF0aWMgdm9pZCBydW5HZXRUZXh0VGVzdHMoQXRrVGV4dCogdGV4dE9iamVj
dCkKICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0
X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAg
ICAgICAgICAgICAgNywgIiBpcyIsIDQsIDcpOwogCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0
ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VO
REFSWV9XT1JEX0VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDY0LCAiIHRoaXJkIiwgNTcs
IDYzKTsKKworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0
X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIDAsICIgaXMiLCA0LCA3KTsKKwogICAgIHRlc3RHZXRUZXh0RnVuY3Rp
b24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9C
T1VOREFSWV9XT1JEX0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgIDUsICIgYSIsIDcsIDkp
OwogCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4
dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAg
ICAgICAgICAgICAgNCwgIiBhIiwgNywgOSk7CiAKLSAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRl
eHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllf
V09SRF9FTkQsCi0gICAgICAgICAgICAgICAgICAgICAgICA1OCwgIiB0aGlyZCIsIDU3LCA2Myk7
CisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9h
ZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAorICAgICAgICAgICAgICAg
ICAgICAgICAgNjQsICIiLCA2NCwgNjQpOwogCiAgICAgLyogQVRLX1RFWFRfQk9VTkRBUllfU0VO
VEVOQ0VfU1RBUlQgKi8KICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190
ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQs
CkBAIC0xMDI3LDYgKzEwNTcsNzUgQEAgc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldFRleHRB
dE9mZnNldFdpdGhXcmFwcGVkTGluZXMoKQogICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwog
fQogCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0V2l0aEVtYmVkZGVk
T2JqZWN0cygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcp
OworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAg
ICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRp
b24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50c1dp
dGhFbWJlZGRlZE9iamVjdHMsIDAsIDAsIDApOworCisgICAgLyogRW5hYmxlIGNhcmV0IGJyb3dz
aW5nLiAqLworICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3Mod2ViVmlldyk7CisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZW5h
YmxlLWNhcmV0LWJyb3dzaW5nIiwgVFJVRSwgTlVMTCk7CisgICAgd2Via2l0X3dlYl92aWV3X3Nl
dF9zZXR0aW5ncyh3ZWJWaWV3LCBzZXR0aW5ncyk7CisKKyAgICAvKiBHZXQgdG8gdGhlIGlubmVy
IEF0a1RleHQgb2JqZWN0LiAqLworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9i
amVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgLyogQ2hlY2sgdGhl
IHBhcmFncmFwaCB3aXRoIHRoZSB0ZXh0IHdyYXBwZWQgYmVjYXVzZSBvZiBtYXgtd2lkdGguICov
CisgICAgQXRrVGV4dCogcGFyYWdyYXBoID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChvYmplY3QsIDApKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3Jh
cGgpKTsKKworICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQocGFyYWdyYXBoLCAw
LCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiVGhpcyBpcyBvbmUgbGluZSBj
b250YWluaW5nIHR3byBcMzU3XDI3N1wyNzQgZW1iZWRkZWQgb2JqZWN0cyBcMzU3XDI3N1wyNzQg
aW4gdGhlIG1pZGRsZS4iKTsKKyAgICBnX2ZyZWUodGV4dCk7CisKKyAgICAvKiBDaGVjayByaWdo
dCBiZWZvcmUgdGhlIGZpcnN0IGVtYmVkZGVkIG9iamVjdCAqLworICAgIHRlc3RHZXRUZXh0RnVu
Y3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JP
VU5EQVJZX0NIQVIsIDMyLCAiXDM1N1wyNzdcMjc0IiwgMzIsIDMzKTsKKyAgICB0ZXN0R2V0VGV4
dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVY
VF9CT1VOREFSWV9XT1JEX1NUQVJULCAzMiwgInR3byBcMzU3XDI3N1wyNzQgIiwgMjgsIDM0KTsK
KyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRf
b2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwgMzIsICIgXDM1N1wyNzdcMjc0IGVt
YmVkZGVkIiwgMzEsIDQyKTsKKworICAgIC8qIENoZWNrIHJpZ2h0IGFmdGVyIHRoZSBmaXJzdCBl
bWJlZGRlZCBvYmplY3QgKGFuZCBiZWZvcmUgdGhlIGZpcnN0IHdvcmQgYWZ0ZXIgaXQpICovCisg
ICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29m
ZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfQ0hBUiwgMzMsICIgIiwgMzMsIDM0KTsKKyAgICB0ZXN0
R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBB
VEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULCAzMywgInR3byBcMzU3XDI3N1wyNzQgIiwgMjgs
IDM0KTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3Rl
eHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwgMzMsICIgXDM1N1wyNzdc
Mjc0IGVtYmVkZGVkIiwgMzEsIDQyKTsKKworICAgIC8qIENoZWNrIGF0IHRoZSBiZWdpbm5pbmcg
b2YgdGhlIGZpcnN0IHdvcmQgYmV0d2VlbiB0aGUgdHdvIGVtYmVkZGVkIG9iamVjdHMgKi8KKyAg
ICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zm
c2V0LCBBVEtfVEVYVF9CT1VOREFSWV9DSEFSLCAzNCwgImUiLCAzNCwgMzUpOworICAgIHRlc3RH
ZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFU
S19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsIDM0LCAiZW1iZWRkZWQgIiwgMzQsIDQzKTsKKyAg
ICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zm
c2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwgMzQsICIgXDM1N1wyNzdcMjc0IGVtYmVk
ZGVkIiwgMzEsIDQyKTsKKworICAgIC8qIENoZWNrIGF0IHRoZSBlbmQgb2YgdGhlIGZpcnN0IHdv
cmQgYmV0d2VlbiB0aGUgdHdvIGVtYmVkZGVkIG9iamVjdHMgKi8KKyAgICB0ZXN0R2V0VGV4dEZ1
bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9C
T1VOREFSWV9DSEFSLCA0MiwgIiAiLCA0MiwgNDMpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24o
cGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZ
X1dPUkRfU1RBUlQsIDQyLCAiZW1iZWRkZWQgIiwgMzQsIDQzKTsKKyAgICB0ZXN0R2V0VGV4dEZ1
bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9C
T1VOREFSWV9XT1JEX0VORCwgNDIsICIgb2JqZWN0cyIsIDQyLCA1MCk7CisKKyAgICAvKiBDaGVj
ayByaWdodCBiZWZvcmUgdGhlIHNlY29uZCBlbWJlZGRlZCBvYmplY3QgKi8KKyAgICB0ZXN0R2V0
VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtf
VEVYVF9CT1VOREFSWV9DSEFSLCA1MSwgIlwzNTdcMjc3XDI3NCIsIDUxLCA1Mik7CisgICAgdGVz
dEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwg
QVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwgNTEsICJvYmplY3RzIFwzNTdcMjc3XDI3NCAi
LCA0MywgNTMpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9n
ZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELCA1MSwgIiBcMzU3
XDI3N1wyNzQgaW4iLCA1MCwgNTUpOworCisgICAgLyogQ2hlY2sgcmlnaHQgYWZ0ZXIgdGhlIHNl
Y29uZCBlbWJlZGRlZCBvYmplY3QgKGFuZCBiZWZvcmUgdGhlIGZpcnN0IHdvcmQgYWZ0ZXIgaXQp
ICovCisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0
X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfQ0hBUiwgNTIsICIgIiwgNTIsIDUzKTsKKyAg
ICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zm
c2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULCA1MiwgIm9iamVjdHMgXDM1N1wyNzdc
Mjc0ICIsIDQzLCA1Myk7CisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190
ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsIDUyLCAi
IFwzNTdcMjc3XDI3NCBpbiIsIDUwLCA1NSk7CisKKyAgICAvKiBDaGVjayBhdCB0aGUgYmVnaW5u
aW5nIG9mIHRoZSBmaXJzdCB3b3JkIGFmdGVyIHRoZSB0d28gZW1iZWRkZWQgb2JqZWN0cyAqLwor
ICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9v
ZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX0NIQVIsIDUzLCAiaSIsIDUzLCA1NCk7CisgICAgdGVz
dEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwg
QVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwgNTMsICJpbiAiLCA1MywgNTYpOworICAgIHRl
c3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQs
IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELCA1MywgIiBcMzU3XDI3N1wyNzQgaW4iLCA1MCwg
NTUpOworCisgICAgLyogQ2hlY2sgYXQgdGhlIGVuZCBvZiB0aGUgZmlyc3Qgd29yZCBhZnRlciB0
aGUgdHdvIGVtYmVkZGVkIG9iamVjdHMgKi8KKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFn
cmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9DSEFS
LCA1NSwgIiAiLCA1NSwgNTYpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBh
dGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQs
IDU1LCAiaW4gIiwgNTMsIDU2KTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwg
YXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwg
NTUsICIgdGhlIiwgNTUsIDU5KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7Cisg
ICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RXZWJraXRB
dGtHZXRUZXh0SW5QYXJhZ3JhcGhBbmRCb2R5U2ltcGxlKCkKIHsKICAgICBXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CkBAIC0y
MDk4LDYgKzIxOTcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0QXRPZmZzZXRXaXRoUHJlZm9ybWF0dGVk
VGV4dCIsIHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRXaXRoUHJlZm9ybWF0dGVkVGV4dCk7
CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0QXRPZmZzZXRXaXRoU3Bl
Y2lhbENoYXJhY3RlcnMiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0V2l0aFNwZWNpYWxD
aGFyYWN0ZXJzKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldFRleHRBdE9m
ZnNldFdpdGhXcmFwcGVkTGluZXMiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0V2l0aFdy
YXBwZWRMaW5lcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0QXRP
ZmZzZXRXaXRoRW1iZWRkZWRPYmplY3RzIiwgdGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldFdp
dGhFbWJlZGRlZE9iamVjdHMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0
VGV4dEluUGFyYWdyYXBoQW5kQm9keVNpbXBsZSIsIHRlc3RXZWJraXRBdGtHZXRUZXh0SW5QYXJh
Z3JhcGhBbmRCb2R5U2ltcGxlKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dl
dFRleHRJblBhcmFncmFwaEFuZEJvZHlNb2RlcmF0ZSIsIHRlc3RXZWJraXRBdGtHZXRUZXh0SW5Q
YXJhZ3JhcGhBbmRCb2R5TW9kZXJhdGUpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9h
dGsvZ2V0VGV4dEluVGFibGUiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEluVGFibGUpOwotLSAKMS43
LjEwLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207115</attachid>
            <date>2013-07-19 10:07:09 -0700</date>
            <delta_ts>2013-08-02 03:16:50 -0700</delta_ts>
            <desc>Patch proposal plus new Unit test</desc>
            <filename>0002-2013-07-19-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>27539</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBiY2Q3NGYyNzFiMGFkYzRjOGRkODJjMTcyYmEyNmFhZDg5NmI2OTU4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogRnJpLCAxOSBKdWwgMjAxMyAxNzo1NjoyOCArMDEwMApTdWJqZWN0OiBb
UEFUQ0ggMi80XSAyMDEzLTA3LTE5ICBNYXJpbyBTYW5jaGV6IFByYWRhIAogPG1hcmlvLnByYWRh
QHNhbXN1bmcuY29tPgoKICAgICAgICBJbXBsZW1lbnQgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZz
ZXQgZm9yIFdPUkQKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE0ODcxCgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBS
ZS1pbXBsZW1lbnQgdGhpcyBmdW5jdGlvbnMgd2l0aG91dCB1c2luZyBHYWlsVGV4dFV0aWwgbm9y
IFBhbmdvLgoKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUZXh0LmNwcDoKICAgICAgICAodGV4dEZvck9iamVjdCk6IE1hZGUgdGhlIHBhcmFtZXRl
ciBhIGNvbnN0LCB0byBhdm9pZCB3YXJuaW5ncy4KICAgICAgICAoZ2V0U2VsZWN0aW9uT2Zmc2V0
c0Zvck9iamVjdCk6IEFkZCBzcGVjaWFsIGNhc2VzIGZvciBFTkQgYm91bmRhcmllcy4KICAgICAg
ICAoZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQpOiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBi
ZSB1c2VkIGluCiAgICAgICAgZWFybHkgcmV0dXJucyBmcm9tIGZ1bmN0aW9ucyByZXR1cm5pbmcg
Ym90aCB0ZXh0IGFuZCBvZmZzZXRzLgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENo
YXIpOiBVc2UgZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQoKSwKICAgICAgICBhbmQgcmVtb3Zl
IGNoZWNrcyB0aGF0IGFyZSBub3cgZG9uZSBvdXRzaWRlIG9mIHRoaXMgZnVuY3Rpb24sIGluCiAg
ICAgICAgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0Rm9yT2Zmc2V0KCkuCiAgICAgICAgKG5l
eHRXb3JkU3RhcnRQb3NpdGlvbik6IEhlbHBlciBmdW5jdGlvbiB0byByZWxpYWJseSBmaW5kIHRo
ZQogICAgICAgIHN0YXJ0IG9mIHRoZSBuZXh0IHdvcmQgYXMgYW5kIHVzZXIgd291bGQgZG8gaXQg
YnkgbmF2aWdhdGluZyB3aXRoCiAgICAgICAgQ3RybCBhbmQgdGhlIGFycm93cyAoY29uc2lkZXJp
bmcgc3BhY2VzIGFuZCBwdW5jdHVhdGlvbikuCiAgICAgICAgKHByZXZpb3VzV29yZEVuZFBvc2l0
aW9uKTogU2ltaWxhciB0byBuZXh0V29yZFN0YXJ0UG9zaXRpb24sIGJ1dAogICAgICAgIHdyaXR0
ZW4gdG8gaGVscCBmaW5kIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIG9uZS4KICAgICAgICAod29y
ZEF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeSk6IEhlbHBlciBmdW5jdGlvbiB0byBmaW5kIHRoZSB3
b3JkCiAgICAgICAgYXQgYSBnaXZlbiBwb3NpdGlvbiBjb25zaWRlcmluZyB2YWx1ZXMgb2YgQXRr
VGV4dEJvdW5kYXJ5LgogICAgICAgIChudW1iZXJPZlJlcGxhY2VkRWxlbWVudHNCZWZvcmVPZmZz
ZXQpOiBIZWxwZXIgZnVuY3Rpb24gdG8gaGVscAogICAgICAgIGZpZ3VyZSBvdXQgaG93IG1hbnkg
ZW1iZWRkZWQgb2JqZWN0cyB3ZSBoYXZlIGV4cG9zZWQgZm9yIGFuCiAgICAgICAgQXRrVGV4dCBv
YmplY3QsIHVzZWQgdG8gYWRqdXN0IG9mZnNldHMgY29taW5nIGZyb20gb3V0c2lkZS4KICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRXb3JkRm9yQm91bmRhcnkpOiBOZXcgZnVuY3Rpb24s
CiAgICAgICAgaW1wbGVtZW50aW5nIGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZvciBXT1JE
LgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRGb3JPZmZzZXQpOiBSZXBsYWNl
IHVzYWdlIG9mIEdhaWwgZm9yCiAgICAgICAgV09SRCBib3VuZGFyaWVzIHdpdGggd2Via2l0QWNj
ZXNzaWJsZVRleHRHZXRXb3JkRm9yQm91bmRhcnkoKS4KICAgICAgICBBbHNvLCBtb3ZlZCB0aGUg
aW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cyB0byB0aGUKICAgICAg
ICBib3R0b20sIGludG8gdGhlIGdhaWwvcGFuZ28gc2VjdGlvbiwgc2luY2UgdGhvc2UgdmFsdWVz
IHdpbGwgYmUKICAgICAgICBmcm9tIG5vdyBvbiBpbml0aWFsaXplZCBpbiBnZXRTZWxlY3Rpb25P
ZmZzZXRzRm9yT2JqZWN0KCkuCiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0
aW9uKTogUmVtb3ZlZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YKICAgICAgICB0aGUgc3RhcnQgYW5k
IGVuZCBvZmZzZXRzLCBzaW5jZSB0aG9zZSB2YWx1ZXMgd2lsbCBiZSBmcm9tIG5vdyBvbgogICAg
ICAgIGluaXRpYWxpemVkIGluIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoKS4KCjIwMTMt
MDctMTkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KCiAg
ICAgICAgSW1wbGVtZW50IGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0IGZvciBXT1JECiAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDg3MQoKICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgVXBkYXRlZCBjdXJyZW50IHVu
aXQgdGVzdHMgYW5kIGFkZCBhIG5ldyBvbmUgc3BlY2lmaWMgZm9yIGVtYmVkZGVkCiAgICAgICAg
b2JqZWN0cywgdG8gZW5zdXJlIHdlIGFyZSBjb3ZlcmluZyBldmVuIG1vcmUgY2FzZXMgdGhhbiBi
ZWZvcmUuCgogICAgICAgICogdGVzdHMvdGVzdGF0ay5jOgogICAgICAgICh0ZXN0V2Via2l0QXRr
R2V0VGV4dEF0T2Zmc2V0V2l0aEVtYmVkZGVkT2JqZWN0cyk6IE5ldy4KICAgICAgICAobWFpbik6
IEFkZGVkIG5ldyB0ZXN0IHRvIHRoZSB0ZXN0IHN1aXRlLgotLS0KIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzOCArKysrCiAuLi4vYXRrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcCAgICAgICAgICB8ICAyMjIgKysrKysrKysr
KysrKysrKysrLS0KIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAxNCArKwogU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jICAgICAg
ICAgICAgICAgICAgfCAgIDczICsrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMzM0IGluc2VydGlv
bnMoKyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNjExNWYyLi5lZjU4OWY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDUgKzEsNDMgQEAKIDIwMTMtMDctMTkgIE1hcmlvIFNhbmNoZXogUHJh
ZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KIAorICAgICAgICBJbXBsZW1lbnQgYXRrX3Rl
eHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDg3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlLWltcGxlbWVudCB0aGlzIGZ1bmN0aW9ucyB3aXRob3V0
IHVzaW5nIEdhaWxUZXh0VXRpbCBub3IgUGFuZ28uCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgICh0ZXh0Rm9y
T2JqZWN0KTogTWFkZSB0aGUgcGFyYW1ldGVyIGEgY29uc3QsIHRvIGF2b2lkIHdhcm5pbmdzLgor
ICAgICAgICAoZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdCk6IEFkZCBzcGVjaWFsIGNhc2Vz
IGZvciBFTkQgYm91bmRhcmllcy4KKyAgICAgICAgKGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0
KTogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gYmUgdXNlZCBpbgorICAgICAgICBlYXJseSByZXR1
cm5zIGZyb20gZnVuY3Rpb25zIHJldHVybmluZyBib3RoIHRleHQgYW5kIG9mZnNldHMuCisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXIpOiBVc2UgZW1wdHlUZXh0U2VsZWN0aW9u
QXRPZmZzZXQoKSwKKyAgICAgICAgYW5kIHJlbW92ZSBjaGVja3MgdGhhdCBhcmUgbm93IGRvbmUg
b3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLCBpbgorICAgICAgICB3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldFRleHRGb3JPZmZzZXQoKS4KKyAgICAgICAgKG5leHRXb3JkU3RhcnRQb3NpdGlvbik6IEhl
bHBlciBmdW5jdGlvbiB0byByZWxpYWJseSBmaW5kIHRoZQorICAgICAgICBzdGFydCBvZiB0aGUg
bmV4dCB3b3JkIGFzIGFuZCB1c2VyIHdvdWxkIGRvIGl0IGJ5IG5hdmlnYXRpbmcgd2l0aAorICAg
ICAgICBDdHJsIGFuZCB0aGUgYXJyb3dzIChjb25zaWRlcmluZyBzcGFjZXMgYW5kIHB1bmN0dWF0
aW9uKS4KKyAgICAgICAgKHByZXZpb3VzV29yZEVuZFBvc2l0aW9uKTogU2ltaWxhciB0byBuZXh0
V29yZFN0YXJ0UG9zaXRpb24sIGJ1dAorICAgICAgICB3cml0dGVuIHRvIGhlbHAgZmluZCB0aGUg
ZW5kIG9mIHRoZSBwcmV2aW91cyBvbmUuCisgICAgICAgICh3b3JkQXRQb3NpdGlvbkZvckF0a0Jv
dW5kYXJ5KTogSGVscGVyIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIHdvcmQKKyAgICAgICAgYXQgYSBn
aXZlbiBwb3NpdGlvbiBjb25zaWRlcmluZyB2YWx1ZXMgb2YgQXRrVGV4dEJvdW5kYXJ5LgorICAg
ICAgICAobnVtYmVyT2ZSZXBsYWNlZEVsZW1lbnRzQmVmb3JlT2Zmc2V0KTogSGVscGVyIGZ1bmN0
aW9uIHRvIGhlbHAKKyAgICAgICAgZmlndXJlIG91dCBob3cgbWFueSBlbWJlZGRlZCBvYmplY3Rz
IHdlIGhhdmUgZXhwb3NlZCBmb3IgYW4KKyAgICAgICAgQXRrVGV4dCBvYmplY3QsIHVzZWQgdG8g
YWRqdXN0IG9mZnNldHMgY29taW5nIGZyb20gb3V0c2lkZS4KKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0V29yZEZvckJvdW5kYXJ5KTogTmV3IGZ1bmN0aW9uLAorICAgICAgICBpbXBs
ZW1lbnRpbmcgYXRrX3RleHRfZ2V0X3RleHRfKl9vZmZzZXQgZm9yIFdPUkQuCisgICAgICAgICh3
ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRGb3JPZmZzZXQpOiBSZXBsYWNlIHVzYWdlIG9mIEdh
aWwgZm9yCisgICAgICAgIFdPUkQgYm91bmRhcmllcyB3aXRoIHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0V29yZEZvckJvdW5kYXJ5KCkuCisgICAgICAgIEFsc28sIG1vdmVkIHRoZSBpbml0aWFsaXph
dGlvbiBvZiB0aGUgc3RhcnQgYW5kIGVuZCBvZmZzZXRzIHRvIHRoZQorICAgICAgICBib3R0b20s
IGludG8gdGhlIGdhaWwvcGFuZ28gc2VjdGlvbiwgc2luY2UgdGhvc2UgdmFsdWVzIHdpbGwgYmUK
KyAgICAgICAgZnJvbSBub3cgb24gaW5pdGlhbGl6ZWQgaW4gZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zv
ck9iamVjdCgpLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRTZWxlY3Rpb24pOiBS
ZW1vdmVkIHRoZSBpbml0aWFsaXphdGlvbiBvZgorICAgICAgICB0aGUgc3RhcnQgYW5kIGVuZCBv
ZmZzZXRzLCBzaW5jZSB0aG9zZSB2YWx1ZXMgd2lsbCBiZSBmcm9tIG5vdyBvbgorICAgICAgICBp
bml0aWFsaXplZCBpbiBnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KCkuCisKKzIwMTMtMDct
MTkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKwogICAg
ICAgICBbQVRLXSBJc3N1ZXMgd2l0aCBlZGdlIGNhc2VzIHdoZW4gZ2V0dGluZyBvZmZzZXRzIGZv
ciBhIHRleHQgcmFuZ2UgaW4gQXRrVGV4dAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTE4OTA4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcAppbmRleCA1MDVhMjE1Li42MTU3OGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZVRleHQuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBM
dGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwogICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwLCAyMDExLCAyMDEyIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
U2Ftc3VuZyBFbGVjdHJvbmljcy4KICAqCiAgKiBQb3J0aW9ucyBmcm9tIE1vemlsbGEgYTExeSwg
Y29weXJpZ2h0IGFzIGZvbGxvd3M6CiAgKgpAQCAtNDksNiArNTAsNyBAQAogI2luY2x1ZGUgIldl
YktpdEFjY2Vzc2libGVVdGlsLmgiCiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJB
dGsuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgorI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5o
PgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKQEAgLTEzNiw3ICsxMzgsNyBAQCBzdGF0aWMgZ2NoYXIqIHRleHRGb3JSZW5k
ZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHJl
c3VsdFRleHQsIEZBTFNFKTsKIH0KIAotc3RhdGljIGdjaGFyKiB0ZXh0Rm9yT2JqZWN0KEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCitzdGF0aWMgZ2NoYXIqIHRleHRGb3JPYmplY3Qo
Y29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKIHsKICAgICBHU3RyaW5nKiBz
dHIgPSBnX3N0cmluZ19uZXcoMCk7CiAKQEAgLTU1OCw2ICs1NjAsMjYgQEAgc3RhdGljIHZvaWQg
Z2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2Jq
ZWN0LCBWaXNpYmwKICAgICBzdGFydE9mZnNldCA9IHdlYkNvcmVPZmZzZXRUb0F0a09mZnNldChj
b3JlT2JqZWN0LCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlSW5QYXJlbnQuZ2V0KCks
IHRydWUpKTsKICAgICBSZWZQdHI8UmFuZ2U+IG5vZGVSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9k
ZS0+ZG9jdW1lbnQoKSwgbm9kZVJhbmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7CiAgICAgaW50IHJh
bmdlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChub2RlUmFuZ2UuZ2V0KCksIHRy
dWUpOworCisgICAgLy8gU3BlY2lhbCBjYXNlcyB0aGF0IGFyZSBvbmx5IHJlbGV2YW50IHdoZW4g
d29ya2luZyB3aXRoICpfRU5EIGJvdW5kYXJpZXMuCisgICAgaWYgKHNlbGVjdGlvbi5hZmZpbml0
eSgpID09IFVQU1RSRUFNKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQo
bm9kZVJhbmdlU3RhcnQsIFVQU1RSRUFNKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVFbmQobm9kZVJhbmdlRW5kLCBVUFNUUkVBTSk7CisKKyAgICAgICAgLy8gV2UgbmVlZCB0byBh
ZGp1c3Qgb2Zmc2V0cyB3aGVuIGZpbmRpbmcgd3JhcHBlZCBsaW5lcyBzbyB0aGUgcG9zaXRpb24g
YXQgdGhlIGVuZAorICAgICAgICAvLyBvZiB0aGUgbGluZSBpcyBwcm9wZXJseSB0YWtpbmcgaW50
byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIG9mZnNldHMuCisgICAgICAgIGlmIChpc0Vu
ZE9mTGluZSh2aXNpYmxlU3RhcnQpICYmICFsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlv
bih2aXNpYmxlU3RhcnQpKSB7CisgICAgICAgICAgICBpZiAoaXNTdGFydE9mTGluZSh2aXNpYmxl
U3RhcnQubmV4dCgpKSkKKyAgICAgICAgICAgICAgICByYW5nZUxlbmd0aCsrOworCisgICAgICAg
ICAgICBpZiAoIWlzRW5kT2ZCbG9jayh2aXNpYmxlU3RhcnQpKQorICAgICAgICAgICAgICAgIHN0
YXJ0T2Zmc2V0ID0gc3RkOjptYXgoc3RhcnRPZmZzZXQgLSAxLCAwKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpc0VuZE9mTGluZSh2aXNpYmxlRW5kKSAmJiAhbGluZUJyZWFrRXhpc3RzQXRW
aXNpYmxlUG9zaXRpb24odmlzaWJsZUVuZCkgJiYgIWlzRW5kT2ZCbG9jayh2aXNpYmxlRW5kKSkK
KyAgICAgICAgICAgIHJhbmdlTGVuZ3RoLS07CisgICAgfQorCiAgICAgZW5kT2Zmc2V0ID0gc3Rk
OjptaW4oc3RhcnRPZmZzZXQgKyByYW5nZUxlbmd0aCwgc3RhdGljX2Nhc3Q8aW50PihhY2Nlc3Np
YmlsaXR5T2JqZWN0TGVuZ3RoKGNvcmVPYmplY3QpKSk7CiB9CiAKQEAgLTYxMiwxMiArNjM0LDE2
IEBAIGVudW0gR2V0VGV4dFJlbGF0aXZlUG9zaXRpb24gewogICAgIEdldFRleHRQb3NpdGlvbkFm
dGVyCiB9OwogCi1zdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcihBdGtU
ZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgR2V0VGV4dFJlbGF0aXZlUG9zaXRpb24gdGV4dFBvc2l0
aW9uLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQorLy8gQ29udmVuaWVuY2Ug
ZnVuY3Rpb24gdG8gYmUgdXNlZCBpbiBlYXJseSByZXR1cm5zLgorc3RhdGljIGNoYXIqIGVtcHR5
VGV4dFNlbGVjdGlvbkF0T2Zmc2V0KGludCBvZmZzZXQsIGludCogc3RhcnRPZmZzZXQsIGludCog
ZW5kT2Zmc2V0KQogewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3Jl
KHRleHQpOwotICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBnX3N0cmR1cCgiIik7CisgICAgKnN0
YXJ0T2Zmc2V0ID0gb2Zmc2V0OworICAgICplbmRPZmZzZXQgPSBvZmZzZXQ7CisgICAgcmV0dXJu
IGdfc3RyZHVwKCIiKTsKK30KIAorc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdl
dENoYXIoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEdldFRleHRSZWxhdGl2ZVBvc2l0aW9u
IHRleHRQb3NpdGlvbiwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKK3sKICAg
ICBpbnQgYWN0dWFsT2Zmc2V0ID0gb2Zmc2V0OwogICAgIGlmICh0ZXh0UG9zaXRpb24gPT0gR2V0
VGV4dFBvc2l0aW9uQmVmb3JlKQogICAgICAgICBhY3R1YWxPZmZzZXQtLTsKQEAgLTYzOSwxOCAr
NjY1LDE4NyBAQCBzdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcihBdGtU
ZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgR2V0VGV4dFJlbAogICAgIHJldHVybiBnX3V0Zjhfc3Vi
c3RyaW5nKHRleHREYXRhLmdldCgpLCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOwogfQogCitz
dGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRXb3JkU3RhcnRQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24gJnBvc2l0aW9uKQoreworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVy
Q3VycmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKHBvc2l0aW9uKTsKKworICAgIC8vIEluIG9y
ZGVyIHRvIHNraXAgc3BhY2VzIHdoZW4gbW92aW5nIHJpZ2h0LCB3ZSBhZHZhbmNlIG9uZSB3b3Jk
IGZ1cnRoZXIKKyAgICAvLyBhbmQgdGhlbiBtb3ZlIG9uZSB3b3JkIGJhY2suIFRoaXMgd2lsbCBw
dXQgdXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgICAvLyB3b3JkIGZvbGxvd2luZy4KKyAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkID0g
bmV4dFdvcmRQb3NpdGlvbihwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQpOworCisgICAgaWYgKHBv
c2l0aW9uQWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZCAhPSBwb3NpdGlvbkFmdGVyQ3VycmVu
dFdvcmQpCisgICAgICAgIHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCA9IHByZXZpb3VzV29yZFBv
c2l0aW9uKHBvc2l0aW9uQWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZCk7CisKKyAgICBib29s
IG1vdmluZ0JhY2t3YXJkc01vdmVkUG9zaXRpb25Ub1N0YXJ0T2ZDdXJyZW50V29yZCA9IHBvc2l0
aW9uQWZ0ZXJDdXJyZW50V29yZCA9PSBwcmV2aW91c1dvcmRQb3NpdGlvbihuZXh0V29yZFBvc2l0
aW9uKHBvc2l0aW9uKSk7CisgICAgaWYgKG1vdmluZ0JhY2t3YXJkc01vdmVkUG9zaXRpb25Ub1N0
YXJ0T2ZDdXJyZW50V29yZCkKKyAgICAgICAgcG9zaXRpb25BZnRlckN1cnJlbnRXb3JkID0gcG9z
aXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkOworCisgICAgcmV0dXJuIHBvc2l0aW9u
QWZ0ZXJDdXJyZW50V29yZDsKK30KKworc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1dv
cmRFbmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvc2l0aW9uKQoreworICAgIC8v
IFdlIG1vdmUgZm9yd2FyZCBhbmQgdGhlbiBiYWNrd2FyZCB0byBwb3NpdGlvbiBvdXJzZWx2ZXMg
YXQgdGhlIGJlZ2lubmluZworICAgIC8vIG9mIHRoZSBjdXJyZW50IHdvcmQgZm9yIHRoaXMgYm91
bmRhcnksIG1ha2luZyB0aGUgbW9zdCBvZiB0aGUgc2VtYW50aWNzCisgICAgLy8gb2YgcHJldmlv
dXNXb3JkUG9zaXRpb24oKSBhbmQgbmV4dFdvcmRQb3NpdGlvbigpLgorICAgIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkID0gcHJldmlvdXNXb3JkUG9zaXRpb24o
bmV4dFdvcmRQb3NpdGlvbihwb3NpdGlvbikpOworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
bkF0UHJldmlvdXNXb3JkID0gcHJldmlvdXNXb3JkUG9zaXRpb24ocG9zaXRpb24pOworCisgICAg
Ly8gTmVlZCB0byBjb25zaWRlciBzcGVjaWFsIGNhc2VzIChwdW5jdHVhdGlvbikgd2hlbiB3ZSBh
cmUgaW4gdGhlIGxhc3Qgd29yZCBvZiBhIHNlbnRlbmNlLgorICAgIGlmIChpc1N0YXJ0T2ZXb3Jk
KHBvc2l0aW9uKSAmJiBwb3NpdGlvbkF0UHJldmlvdXNXb3JkICE9IHBvc2l0aW9uICYmIHBvc2l0
aW9uQXRQcmV2aW91c1dvcmQgPT0gcG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCkKKyAgICAg
ICAgcmV0dXJuIG5leHRXb3JkUG9zaXRpb24ocG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCk7
CisKKyAgICAvLyBJbiBvcmRlciB0byBza2lwIHNwYWNlcyB3aGVuIG1vdmluZyBsZWZ0LCB3ZSBh
ZHZhbmNlIG9uZSB3b3JkIGJhY2t3YXJkcworICAgIC8vIGFuZCB0aGVuIG1vdmUgb25lIHdvcmQg
Zm9yd2FyZC4gVGhpcyB3aWxsIHB1dCB1cyBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgLy8gdGhl
IHdvcmQgZm9sbG93aW5nLgorICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVNwYWNp
bmdBbmRQcmVjZWVkaW5nV29yZCA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHBvc2l0aW9uQXRTdGFy
dE9mQ3VycmVudFdvcmQpOworCisgICAgaWYgKHBvc2l0aW9uQmVmb3JlU3BhY2luZ0FuZFByZWNl
ZWRpbmdXb3JkICE9IHBvc2l0aW9uQXRTdGFydE9mQ3VycmVudFdvcmQpCisgICAgICAgIHBvc2l0
aW9uQXRTdGFydE9mQ3VycmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKHBvc2l0aW9uQmVmb3Jl
U3BhY2luZ0FuZFByZWNlZWRpbmdXb3JkKTsKKworICAgIGJvb2wgbW92aW5nRm9yd2FyZE1vdmVk
UG9zaXRpb25Ub0VuZE9mQ3VycmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKHBvc2l0aW9uQXRT
dGFydE9mQ3VycmVudFdvcmQpID09IHByZXZpb3VzV29yZFBvc2l0aW9uKG5leHRXb3JkUG9zaXRp
b24ocG9zaXRpb24pKTsKKyAgICBpZiAobW92aW5nRm9yd2FyZE1vdmVkUG9zaXRpb25Ub0VuZE9m
Q3VycmVudFdvcmQpCisgICAgICAgIHBvc2l0aW9uQXRTdGFydE9mQ3VycmVudFdvcmQgPSBwb3Np
dGlvbkJlZm9yZVNwYWNpbmdBbmRQcmVjZWVkaW5nV29yZDsKKworICAgIHJldHVybiBwb3NpdGlv
bkF0U3RhcnRPZkN1cnJlbnRXb3JkOworfQorCitzdGF0aWMgVmlzaWJsZVNlbGVjdGlvbiB3b3Jk
QXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVP
YmplY3QsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIEF0a1RleHRCb3VuZGFyeSBi
b3VuZGFyeVR5cGUpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb247CisgICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uOworCisgICAgc3dpdGNoIChib3VuZGFyeVR5cGUp
IHsKKyAgICBjYXNlIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQ6CisgICAgICAgIC8vIGlz
U3RhcnRPZldvcmQoKSByZXR1cm5zIHRydWUgYm90aCB3aGVuIGF0IHRoZSBiZWdpbm5pbmcgb2Yg
YSAicmVhbCIgd29yZAorICAgICAgICAvLyBhcyB3aGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSB3
aGl0ZXNwYWNlIHJhbmdlIGJldHdlZW4gdHdvICJyZWFsIiB3b3JkcywKKyAgICAgICAgLy8gc2lu
Y2UgdGhhdCB3aGl0ZXNwYWNlIGlzIGNvbnNpZGVyZWQgYSAid29yZCIgYXMgd2VsbC4gQW5kIGlu
IGNhc2Ugd2UgYXJlCisgICAgICAgIC8vIGFscmVhZHkgYXQgdGhlIGJlZ2lubmluZyBvZiBhICJy
ZWFsIiB3b3JkIHdlIGRvIG5vdCBuZWVkIHRvIGxvb2sgYmFja3dhcmRzLgorICAgICAgICBpZiAo
aXNTdGFydE9mV29yZChwb3NpdGlvbikgJiYgaXNXaGl0ZXNwYWNlKHBvc2l0aW9uLmNoYXJhY3Rl
ckJlZm9yZSgpKSkKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHByZXZpb3VzV29yZFBvc2l0aW9u
KHBvc2l0aW9uKTsKKyAgICAgICAgZW5kUG9zaXRpb24gPSBuZXh0V29yZFN0YXJ0UG9zaXRpb24o
c3RhcnRQb3NpdGlvbik7CisKKyAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3
ZSBsb29rIGZvciB0aGUgd29yZCBpbiB0aGUgY3VycmVudCBsaW5lIHdoZW4KKyAgICAgICAgLy8g
d2UgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgbGluZSwgYW5kIG5vdCBsb29rIGludG8g
dGhlIHByZXZpb3VzIG9uZQorICAgICAgICAvLyBhdCBhbGwsIHdoaWNoIG1pZ2h0IGhhcHBlbiB3
aGVuIGxpbmVzIGJlbG9uZyB0byBkaWZmZXJlbnQgbm9kZXMuCisgICAgICAgIGlmIChpc1N0YXJ0
T2ZMaW5lKHBvc2l0aW9uKSAmJiBpc1N0YXJ0T2ZMaW5lKGVuZFBvc2l0aW9uKSkgeworICAgICAg
ICAgICAgc3RhcnRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uOworICAgICAgICAgICAgZW5kUG9zaXRp
b24gPSBuZXh0V29yZFN0YXJ0UG9zaXRpb24oc3RhcnRQb3NpdGlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5EOgorICAg
ICAgICBzdGFydFBvc2l0aW9uID0gcHJldmlvdXNXb3JkRW5kUG9zaXRpb24ocG9zaXRpb24pOwor
ICAgICAgICBlbmRQb3NpdGlvbiA9IG5leHRXb3JkUG9zaXRpb24oc3RhcnRQb3NpdGlvbik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorCisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3RlZFdvcmQoc3RhcnRQb3Np
dGlvbiwgZW5kUG9zaXRpb24pOworCisgICAgLy8gV2UgbWFyayB0aGUgc2VsZWN0aW9uIGFzICd1
cHN0cmVhbScgc28gd2UgY2FuIHVzZSB0aGF0IGluZm9ybWF0aW9uIGxhdGVyLAorICAgIC8vIHdo
ZW4gZmluZGluZyB0aGUgYWN0dWFsIG9mZnNldHMgaW4gZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9i
amVjdCgpLgorICAgIGlmIChib3VuZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfV09SRF9F
TkQpCisgICAgICAgIHNlbGVjdGVkV29yZC5zZXRBZmZpbml0eShVUFNUUkVBTSk7CisKKyAgICBy
ZXR1cm4gc2VsZWN0ZWRXb3JkOworfQorCitzdGF0aWMgaW50IG51bWJlck9mUmVwbGFjZWRFbGVt
ZW50c0JlZm9yZU9mZnNldChBdGtUZXh0KiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQpCit7CisgICAg
R093blB0cjxjaGFyPiB0ZXh0Rm9yT2JqZWN0KHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dCh0
ZXh0LCAwLCBvZmZzZXQpKTsKKyAgICBTdHJpbmcgdGV4dEJlZm9yZU9mZnNldCA9IFN0cmluZzo6
ZnJvbVVURjgodGV4dEZvck9iamVjdC5nZXQoKSk7CisKKyAgICBpbnQgY291bnQgPSAwOworICAg
IHNpemVfdCBpbmRleCA9IHRleHRCZWZvcmVPZmZzZXQuZmluZChvYmplY3RSZXBsYWNlbWVudENo
YXJhY3RlciwgMCk7CisgICAgd2hpbGUgKGluZGV4IDwgb2Zmc2V0ICYmIGluZGV4ICE9IFdURjo6
bm90Rm91bmQpIHsKKyAgICAgICAgaW5kZXggPSB0ZXh0QmVmb3JlT2Zmc2V0LmZpbmQob2JqZWN0
UmVwbGFjZW1lbnRDaGFyYWN0ZXIsIGluZGV4ICsgMSk7CisgICAgICAgIGNvdW50Kys7CisgICAg
fQorICAgIHJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNoYXIqIHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0V29yZEZvckJvdW5kYXJ5KEF0a1RleHQqIHRleHQsIGludCBvZmZzZXQsIEF0a1RleHRC
b3VuZGFyeSBib3VuZGFyeVR5cGUsIEdldFRleHRSZWxhdGl2ZVBvc2l0aW9uIHRleHRQb3NpdGlv
biwgaW50KiBzdGFydE9mZnNldCwgaW50KiBlbmRPZmZzZXQpCit7CisgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICBy
ZXR1cm4gZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQoMCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCk7CisKKyAgICBOb2RlKiBub2RlID0gZ2V0Tm9kZUZvckFjY2Vzc2liaWxpdHlPYmplY3QoY29y
ZU9iamVjdCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZW1wdHlUZXh0U2VsZWN0
aW9uQXRPZmZzZXQoMCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisKKyAgICBpbnQgYWN0dWFs
T2Zmc2V0ID0gYXRrT2Zmc2V0VG9XZWJDb3JlT2Zmc2V0KHRleHQsIG9mZnNldCk7CisKKyAgICAv
LyBCZXNpZGVzIG9mIHRoZSB1c3VhbCBjb252ZXJzaW9uIGZyb20gQVRLIG9mZnNldHMgdG8gV2Vi
Q29yZSBvZmZzZXRzLAorICAgIC8vIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBl
bWJlZGRlZCBvYmplY3RzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuCisgICAgLy8gaW5zZXJ0ZWQgaW4g
dGhlIHRleHQgZXhwb3NlZCB0aHJvdWdoIEF0a1RleHQgd2hlbiBjYWxjdWxhdGluZyB0aGUgb2Zm
c2V0LgorICAgIGFjdHVhbE9mZnNldCAtPSBudW1iZXJPZlJlcGxhY2VkRWxlbWVudHNCZWZvcmVP
ZmZzZXQodGV4dCwgYWN0dWFsT2Zmc2V0KTsKKworICAgIFZpc2libGVQb3NpdGlvbiBjYXJldFBv
c2l0aW9uID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoYWN0dWFsT2Zmc2V0
KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3JkID0gd29yZEF0UG9zaXRpb25Gb3JB
dGtCb3VuZGFyeShjb3JlT2JqZWN0LCBjYXJldFBvc2l0aW9uLCBib3VuZGFyeVR5cGUpOworCisg
ICAgLy8gVGFrZSBpbnRvIGFjY291bnQgb3RoZXIgcmVsYXRpdmUgcG9zaXRpb25zLCBpZiBuZWVk
ZWQsIGJ5CisgICAgLy8gY2FsY3VsYXRpbmcgdGhlIG5ldyBwb3NpdGlvbiB0aGF0IHdlIHdvdWxk
IG5lZWQgdG8gY29uc2lkZXIuCisgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gY2Fy
ZXRQb3NpdGlvbjsKKyAgICBzd2l0Y2ggKHRleHRQb3NpdGlvbikgeworICAgIGNhc2UgR2V0VGV4
dFBvc2l0aW9uQXQ6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBHZXRUZXh0UG9zaXRpb25C
ZWZvcmU6CisgICAgICAgIC8vIEVhcmx5IHJldHVybiBpZiBhc2tpbmcgZm9yIHRoZSBwcmV2aW91
cyB3b3JkIHdoaWxlIGFscmVhZHkgYXQgdGhlIGJlZ2lubmluZy4KKyAgICAgICAgaWYgKGlzRmly
c3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY3VycmVudFdvcmQudmlzaWJsZVN0YXJ0KCksIG5vZGUp
KQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0KDAsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgICAgIGlmIChpc1N0YXJ0T2ZMaW5lKGN1cnJlbnRX
b3JkLmVuZCgpKSkKKyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gY3VycmVudFdvcmQudmlzaWJs
ZVN0YXJ0KCkucHJldmlvdXMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3UG9zaXRp
b24gPSBzdGFydE9mV29yZChjdXJyZW50V29yZC5zdGFydCgpLCBMZWZ0V29yZElmT25Cb3VuZGFy
eSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBHZXRUZXh0UG9zaXRpb25BZnRlcjoKKyAg
ICAgICAgLy8gRWFybHkgcmV0dXJuIGlmIGFza2luZyBmb3IgdGhlIGZvbGxvd2luZyB3b3JkIHdo
aWxlIGFscmVhZHkgYXQgdGhlIGVuZC4KKyAgICAgICAgaWYgKGlzTGFzdFZpc2libGVQb3NpdGlv
bkluTm9kZShjdXJyZW50V29yZC52aXNpYmxlRW5kKCksIG5vZGUpKQorICAgICAgICAgICAgcmV0
dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0KGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgo
Y29yZU9iamVjdCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgICAgIGlmIChpc0Vu
ZE9mTGluZShjdXJyZW50V29yZC5lbmQoKSkpCisgICAgICAgICAgICBuZXdQb3NpdGlvbiA9IGN1
cnJlbnRXb3JkLnZpc2libGVFbmQoKS5uZXh0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG5ld1Bvc2l0aW9uID0gZW5kT2ZXb3JkKGN1cnJlbnRXb3JkLmVuZCgpLCBSaWdodFdvcmRJZk9u
Qm91bmRhcnkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIC8vIERldGVybWluZSB0aGUgcmVsZXZhbnQg
d29yZCB3ZSBhcmUgYWN0dWFsbHkgaW50ZXJlc3RlZCBpbgorICAgIC8vIGFuZCBjYWxjdWxhdGUg
dGhlIEFUSyBvZmZzZXRzIGZvciBpdCwgdGhlbiByZXR1cm4gZXZlcnl0aGluZy4KKyAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGVkV29yZCA9IG5ld1Bvc2l0aW9uICE9IGNhcmV0UG9zaXRpb24g
PyB3b3JkQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KGNvcmVPYmplY3QsIG5ld1Bvc2l0aW9uLCBi
b3VuZGFyeVR5cGUpIDogY3VycmVudFdvcmQ7CisgICAgZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9i
amVjdChjb3JlT2JqZWN0LCBzZWxlY3RlZFdvcmQsICpzdGFydE9mZnNldCwgKmVuZE9mZnNldCk7
CisgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dCh0ZXh0LCAqc3RhcnRPZmZz
ZXQsICplbmRPZmZzZXQpOworfQorCiBzdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0VGV4dEZvck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5k
YXJ5IGJvdW5kYXJ5VHlwZSwgR2V0VGV4dFJlbGF0aXZlUG9zaXRpb24gdGV4dFBvc2l0aW9uLCBn
aW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQogewotICAgIC8vIE1ha2Ugc3VyZSB3
ZSBhbHdheXMgcmV0dXJuIHZhbGlkIHZhbGlkIHZhbHVlcyBmb3Igb2Zmc2V0cy4KLSAgICAqc3Rh
cnRPZmZzZXQgPSAwOwotICAgICplbmRPZmZzZXQgPSAwOworICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIGlmICghY29yZU9iamVjdCB8fCAhY29y
ZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBl
bXB0eVRleHRTZWxlY3Rpb25BdE9mZnNldCgwLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIAog
ICAgIGlmIChib3VuZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfQ0hBUikKICAgICAgICAg
cmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcih0ZXh0LCBvZmZzZXQsIHRleHRQb3Np
dGlvbiwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAKKyAgICBpZiAoYm91bmRhcnlUeXBlID09
IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQgfHwgYm91bmRhcnlUeXBlID09IEFUS19URVhU
X0JPVU5EQVJZX1dPUkRfRU5EKQorICAgICAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRXb3JkRm9yQm91bmRhcnkodGV4dCwgb2Zmc2V0LCBib3VuZGFyeVR5cGUsIHRleHRQb3NpdGlv
biwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisKICNpZiBQTEFURk9STShHVEspCi0gICAgLy8g
RklYTUU6IEdldCByaWQgb2YgdGhlIGNvZGUgYmVsb3cgb25jZSBldmVyeSBzaW5nbGUgZ2V0X3Rl
eHRfKl9vZmZzZXQKLSAgICAvLyBmdW5jdGlvbiBoYXMgYmVlbiBwcm9wZXJseSBpbXBsZW1lbnRl
ZCB3aXRob3V0IHVzaW5nIFBhbmdvL0NhaXJvLgorICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRo
ZSBjb2RlIGJlbG93IG9uY2UgZXZlcnkgc2luZ2xlIHBhcnQgYWJvdmUKKyAgICAvLyBoYXMgYmVl
biBwcm9wZXJseSBpbXBsZW1lbnRlZCB3aXRob3V0IHVzaW5nIFBhbmdvL0NhaXJvLgogICAgIEdh
aWxPZmZzZXRUeXBlIG9mZnNldFR5cGUgPSBHQUlMX0FUX09GRlNFVDsKICAgICBzd2l0Y2ggKHRl
eHRQb3NpdGlvbikgewogICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQmVmb3JlOgpAQCAtNjY4LDYg
Kzg2MywxMCBAQCBzdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9m
ZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQQogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKKyAgICAvLyBNYWtlIHN1cmUgd2UgYWx3YXlzIHJldHVybiB2YWxp
ZCB2YWxpZCB2YWx1ZXMgZm9yIG9mZnNldHMuCisgICAgKnN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAq
ZW5kT2Zmc2V0ID0gMDsKKwogICAgIHJldHVybiBnYWlsX3RleHRfdXRpbF9nZXRfdGV4dChnZXRH
YWlsVGV4dFV0aWxGb3JBdGsodGV4dCksIGdldFBhbmdvTGF5b3V0Rm9yQXRrKHRleHQpLCBvZmZz
ZXRUeXBlLCBib3VuZGFyeVR5cGUsIG9mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAj
ZW5kaWYKIApAQCAtODAyLDkgKzEwMDEsNiBAQCBzdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxl
VGV4dEdldE5TZWxlY3Rpb25zKEF0a1RleHQqIHRleHQpCiAKIHN0YXRpYyBnY2hhciogd2Via2l0
QWNjZXNzaWJsZVRleHRHZXRTZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rpb25O
dW0sIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCiB7Ci0gICAgLy8gRGVmYXVs
dCB2YWx1ZXMsIHVubGVzcyB0aGUgY29udHJhcnkgaXMgcHJvdmVkCi0gICAgKnN0YXJ0T2Zmc2V0
ID0gKmVuZE9mZnNldCA9IDA7Ci0KICAgICAvLyBXZWJDb3JlIGRvZXMgbm90IHN1cHBvcnQgbXVs
dGlwbGUgc2VsZWN0aW9uLCBzbyBhbnl0aGluZyBidXQgMCBkb2VzIG5vdCBtYWtlIHNlbnNlIGZv
ciBub3cuCiAgICAgaWYgKHNlbGVjdGlvbk51bSkKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKaW5kZXggNTg4Y2Y3My4uODU4MGE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSw1ICsx
LDE5IEBACiAyMDEzLTA3LTE5ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ft
c3VuZy5jb20+CiAKKyAgICAgICAgSW1wbGVtZW50IGF0a190ZXh0X2dldF90ZXh0Xypfb2Zmc2V0
IGZvciBXT1JECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTQ4NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBVcGRhdGVkIGN1cnJlbnQgdW5pdCB0ZXN0cyBhbmQgYWRkIGEgbmV3IG9uZSBzcGVjaWZpYyBm
b3IgZW1iZWRkZWQKKyAgICAgICAgb2JqZWN0cywgdG8gZW5zdXJlIHdlIGFyZSBjb3ZlcmluZyBl
dmVuIG1vcmUgY2FzZXMgdGhhbiBiZWZvcmUuCisKKyAgICAgICAgKiB0ZXN0cy90ZXN0YXRrLmM6
CisgICAgICAgICh0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0V2l0aEVtYmVkZGVkT2JqZWN0
cyk6IE5ldy4KKyAgICAgICAgKG1haW4pOiBBZGRlZCBuZXcgdGVzdCB0byB0aGUgdGVzdCBzdWl0
ZS4KKworMjAxMy0wNy0xOSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1
bmcuY29tPgorCiAgICAgICAgIFtBVEtdIElzc3VlcyB3aXRoIGVkZ2UgY2FzZXMgd2hlbiBnZXR0
aW5nIG9mZnNldHMgZm9yIGEgdGV4dCByYW5nZSBpbiBBdGtUZXh0CiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg5MDgKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGF0ay5jCmluZGV4IDYwZWM4OTIuLjQyY2MxM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
YXRrLmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBT
LkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNTIsNiArNTMsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNX
aXRoRXh0cmFuZW91c1doaXRlU3BhY2VzID0gIjxodG1sPjxoZWFkPjxib2R5PjxwPlRoaQogCiBz
dGF0aWMgY29uc3QgY2hhciogY29udGVudHNXaXRoV3JhcHBlZExpbmVzID0gIjxodG1sPjxib2R5
PjxwIHN0eWxlPSdtYXgtd2lkdGg6MTUwcHg7Jz5UaGlzIGlzIG9uZSBsaW5lIHdyYXBwZWQgYmVj
YXVzZSBvZiB0aGUgbWF4aW11bSB3aWR0aCBvZiBpdHMgY29udGFpbmVyLjwvcD48cD5UaGlzIGlz
IGFub3RoZXIgbGluZSB3cmFwcGVkPGJyPmJlY2F1c2Ugb2Ygb25lIGZvcmNlZDxicj5saW5lIGJy
ZWFrIGluIHRoZSBtaWRkbGUuPC9ib2R5PjwvaHRtbD4iOwogCitzdGF0aWMgY29uc3QgY2hhciog
Y29udGVudHNXaXRoRW1iZWRkZWRPYmplY3RzID0gIjxodG1sPjxib2R5PlRoaXMgaXMgb25lIGxp
bmUgY29udGFpbmluZyB0d28gPGltZz4gZW1iZWRkZWQgb2JqZWN0cyA8aW1nPiBpbiB0aGUgbWlk
ZGxlLjwvYm9keT48L2h0bWw+IjsKKwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbWJvQm94U2VsZWN0
b3IgPSAiPGh0bWw+PGJvZHk+PHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSdmb28nPmZv
bzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2Jhcic+YmFyPC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5
PjwvaHRtbD4iOwogCiBzdGF0aWMgY29uc3QgY2hhciogZW1iZWRkZWRPYmplY3RzID0gIjxodG1s
Pjxib2R5PjxwPkNob29zZTogPGlucHV0IHZhbHVlPSdmb28nIHR5cGU9J2NoZWNrYm94Jy8+Zm9v
IDxpbnB1dCB2YWx1ZT0nYmFyJyB0eXBlPSdjaGVja2JveCcvPmJhciAocGljayBvbmUpPC9wPjxw
PkNob29zZTogPHNlbGVjdCBuYW1lPSdmb28nPjxvcHRpb24+YmFyPC9vcHRpb24+PG9wdGlvbj5i
YXo8L29wdGlvbj48L3NlbGVjdD4gKHBpY2sgb25lKTwvcD48cD48aW5wdXQgbmFtZT0nZm9vYmFy
YnV0dG9uJyB2YWx1ZT0nZm9vYmFyJyB0eXBlPSdidXR0b24nLz48L3A+PC9ib2R5PjwvaHRtbD4i
OwpAQCAtMTA1NCw2ICsxMDU3LDc1IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtHZXRUZXh0
QXRPZmZzZXRXaXRoV3JhcHBlZExpbmVzKCkKICAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsK
IH0KIAorc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldFdpdGhFbWJlZGRl
ZE9iamVjdHMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3
KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Cisg
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0
aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHNX
aXRoRW1iZWRkZWRPYmplY3RzLCAwLCAwLCAwKTsKKworICAgIC8qIEVuYWJsZSBjYXJldCBicm93
c2luZy4gKi8KKyAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpOworICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgImVu
YWJsZS1jYXJldC1icm93c2luZyIsIFRSVUUsIE5VTEwpOworICAgIHdlYmtpdF93ZWJfdmlld19z
ZXRfc2V0dGluZ3Mod2ViVmlldywgc2V0dGluZ3MpOworCisgICAgLyogR2V0IHRvIHRoZSBpbm5l
ciBBdGtUZXh0IG9iamVjdC4gKi8KKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFP
YmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAgIC8qIENoZWNrIHRo
ZSBwYXJhZ3JhcGggd2l0aCB0aGUgdGV4dCB3cmFwcGVkIGJlY2F1c2Ugb2YgbWF4LXdpZHRoLiAq
LworICAgIEF0a1RleHQqIHBhcmFncmFwaCA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCAwKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdy
YXBoKSk7CisKKyAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KHBhcmFncmFwaCwg
MCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlRoaXMgaXMgb25lIGxpbmUg
Y29udGFpbmluZyB0d28gXDM1N1wyNzdcMjc0IGVtYmVkZGVkIG9iamVjdHMgXDM1N1wyNzdcMjc0
IGluIHRoZSBtaWRkbGUuIik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgLyogQ2hlY2sgcmln
aHQgYmVmb3JlIHRoZSBmaXJzdCBlbWJlZGRlZCBvYmplY3QgKi8KKyAgICB0ZXN0R2V0VGV4dEZ1
bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9C
T1VOREFSWV9DSEFSLCAzMiwgIlwzNTdcMjc3XDI3NCIsIDMyLCAzMyk7CisgICAgdGVzdEdldFRl
eHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RF
WFRfQk9VTkRBUllfV09SRF9TVEFSVCwgMzIsICJ0d28gXDM1N1wyNzdcMjc0ICIsIDI4LCAzNCk7
CisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0
X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsIDMyLCAiIFwzNTdcMjc3XDI3NCBl
bWJlZGRlZCIsIDMxLCA0Mik7CisKKyAgICAvKiBDaGVjayByaWdodCBhZnRlciB0aGUgZmlyc3Qg
ZW1iZWRkZWQgb2JqZWN0IChhbmQgYmVmb3JlIHRoZSBmaXJzdCB3b3JkIGFmdGVyIGl0KSAqLwor
ICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9v
ZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX0NIQVIsIDMzLCAiICIsIDMzLCAzNCk7CisgICAgdGVz
dEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwg
QVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwgMzMsICJ0d28gXDM1N1wyNzdcMjc0ICIsIDI4
LCAzNCk7CisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90
ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsIDMzLCAiIFwzNTdcMjc3
XDI3NCBlbWJlZGRlZCIsIDMxLCA0Mik7CisKKyAgICAvKiBDaGVjayBhdCB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBmaXJzdCB3b3JkIGJldHdlZW4gdGhlIHR3byBlbWJlZGRlZCBvYmplY3RzICovCisg
ICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29m
ZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfQ0hBUiwgMzQsICJlIiwgMzQsIDM1KTsKKyAgICB0ZXN0
R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBB
VEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULCAzNCwgImVtYmVkZGVkICIsIDM0LCA0Myk7Cisg
ICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29m
ZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQsIDM0LCAiIFwzNTdcMjc3XDI3NCBlbWJl
ZGRlZCIsIDMxLCA0Mik7CisKKyAgICAvKiBDaGVjayBhdCB0aGUgZW5kIG9mIHRoZSBmaXJzdCB3
b3JkIGJldHdlZW4gdGhlIHR3byBlbWJlZGRlZCBvYmplY3RzICovCisgICAgdGVzdEdldFRleHRG
dW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRf
Qk9VTkRBUllfQ0hBUiwgNDIsICIgIiwgNDIsIDQzKTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9u
KHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFS
WV9XT1JEX1NUQVJULCA0MiwgImVtYmVkZGVkICIsIDM0LCA0Myk7CisgICAgdGVzdEdldFRleHRG
dW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRf
Qk9VTkRBUllfV09SRF9FTkQsIDQyLCAiIG9iamVjdHMiLCA0MiwgNTApOworCisgICAgLyogQ2hl
Y2sgcmlnaHQgYmVmb3JlIHRoZSBzZWNvbmQgZW1iZWRkZWQgb2JqZWN0ICovCisgICAgdGVzdEdl
dFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRL
X1RFWFRfQk9VTkRBUllfQ0hBUiwgNTEsICJcMzU3XDI3N1wyNzQiLCA1MSwgNTIpOworICAgIHRl
c3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQs
IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsIDUxLCAib2JqZWN0cyBcMzU3XDI3N1wyNzQg
IiwgNDMsIDUzKTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRf
Z2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwgNTEsICIgXDM1
N1wyNzdcMjc0IGluIiwgNTAsIDU1KTsKKworICAgIC8qIENoZWNrIHJpZ2h0IGFmdGVyIHRoZSBz
ZWNvbmQgZW1iZWRkZWQgb2JqZWN0IChhbmQgYmVmb3JlIHRoZSBmaXJzdCB3b3JkIGFmdGVyIGl0
KSAqLworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4
dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX0NIQVIsIDUyLCAiICIsIDUyLCA1Myk7Cisg
ICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29m
ZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwgNTIsICJvYmplY3RzIFwzNTdcMjc3
XDI3NCAiLCA0MywgNTMpOworICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtf
dGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELCA1Miwg
IiBcMzU3XDI3N1wyNzQgaW4iLCA1MCwgNTUpOworCisgICAgLyogQ2hlY2sgYXQgdGhlIGJlZ2lu
bmluZyBvZiB0aGUgZmlyc3Qgd29yZCBhZnRlciB0aGUgdHdvIGVtYmVkZGVkIG9iamVjdHMgKi8K
KyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRf
b2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9DSEFSLCA1MywgImkiLCA1MywgNTQpOworICAgIHRl
c3RHZXRUZXh0RnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQs
IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsIDUzLCAiaW4gIiwgNTMsIDU2KTsKKyAgICB0
ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0
LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwgNTMsICIgXDM1N1wyNzdcMjc0IGluIiwgNTAs
IDU1KTsKKworICAgIC8qIENoZWNrIGF0IHRoZSBlbmQgb2YgdGhlIGZpcnN0IHdvcmQgYWZ0ZXIg
dGhlIHR3byBlbWJlZGRlZCBvYmplY3RzICovCisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJh
Z3JhcGgsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfQ0hB
UiwgNTUsICIgIiwgNTUsIDU2KTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHBhcmFncmFwaCwg
YXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJU
LCA1NSwgImluICIsIDUzLCA1Nik7CisgICAgdGVzdEdldFRleHRGdW5jdGlvbihwYXJhZ3JhcGgs
IGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9FTkQs
IDU1LCAiIHRoZSIsIDU1LCA1OSk7CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgpOwor
ICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0V2Via2l0
QXRrR2V0VGV4dEluUGFyYWdyYXBoQW5kQm9keVNpbXBsZSgpCiB7CiAgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwpAQCAt
MjEyNSw2ICsyMTk3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEF0T2Zmc2V0V2l0aFByZWZvcm1hdHRl
ZFRleHQiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0V2l0aFByZWZvcm1hdHRlZFRleHQp
OwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEF0T2Zmc2V0V2l0aFNw
ZWNpYWxDaGFyYWN0ZXJzIiwgdGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldFdpdGhTcGVjaWFs
Q2hhcmFjdGVycyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0QXRP
ZmZzZXRXaXRoV3JhcHBlZExpbmVzIiwgdGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldFdpdGhX
cmFwcGVkTGluZXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEF0
T2Zmc2V0V2l0aEVtYmVkZGVkT2JqZWN0cyIsIHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRX
aXRoRW1iZWRkZWRPYmplY3RzKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dl
dFRleHRJblBhcmFncmFwaEFuZEJvZHlTaW1wbGUiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEluUGFy
YWdyYXBoQW5kQm9keVNpbXBsZSk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9n
ZXRUZXh0SW5QYXJhZ3JhcGhBbmRCb2R5TW9kZXJhdGUiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dElu
UGFyYWdyYXBoQW5kQm9keU1vZGVyYXRlKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
YXRrL2dldFRleHRJblRhYmxlIiwgdGVzdFdlYmtpdEF0a0dldFRleHRJblRhYmxlKTsKLS0gCjEu
Ny4xMC40Cgo=
</data>
<flag name="review"
          id="228884"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>