<?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>155908</bug_id>
          
          <creation_ts>2016-03-25 16:44:47 -0700</creation_ts>
          <short_desc>Spell checking should not use DOM types</short_desc>
          <delta_ts>2016-03-30 08:35:53 -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>HTML Editing</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1178169</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-25 16:44:47 -0700</bug_when>
    <thetext>Spell checking should not use DOM types

This is a follow-on from https://bugs.webkit.org/show_bug.cgi?id=155532

As Darin pointed out in some of the comments in that bug, the patch to resolve that issue started using DOM typed in spell checking code, but generally we have avoided doing that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178175</commentid>
    <comment_count>1</comment_count>
      <attachid>274954</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-25 16:49:51 -0700</bug_when>
    <thetext>Created attachment 274954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178184</commentid>
    <comment_count>2</comment_count>
      <attachid>274958</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-25 17:18:15 -0700</bug_when>
    <thetext>Created attachment 274958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178479</commentid>
    <comment_count>3</comment_count>
      <attachid>275033</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-28 11:51:13 -0700</bug_when>
    <thetext>Created attachment 275033
Patch

This iteration should fix the Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178751</commentid>
    <comment_count>4</comment_count>
      <attachid>275118</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-03-29 12:31:50 -0700</bug_when>
    <thetext>Created attachment 275118
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179060</commentid>
    <comment_count>5</comment_count>
      <attachid>275118</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-30 08:35:53 -0700</bug_when>
    <thetext>Comment on attachment 275118
Patch

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

It’s excellent to do this work to eliminate the layering violation. I like the direction we are going here, but I think we need more refinement to make the code sufficiently clear.

I think that many of the more-obscure call sites aren’t doing this quite right. And even the ones that are right are unnecessarily fragile, computing the text and the offset separately and counting on the two matching without a clear enough guarantee.

To me, the insertion point offset seems to go hand in hand with the text to be checked; to make it likely we get this right I would want a struct that combines a StringView with an Optional&lt;unsigned&gt; that represents a paragraph with insertion point information. That struct could help us organize the code better because it would encourage us to have functions that compute both at the same time. And it would make it much clearer what the offset is relative to; it’s an offset within the StringView.

Given the idiom is a bit repetitive, we might consider a slightly different helper function. Every call site seems to be starting with the frame or a document or node and working its way to the insertion point. Part of that, though, is because we have moved the code so it’s not unified with the code extracting the text. If it was unified, then more likely we would have a paragraph range to pass in since we’d be using that same range to extract the text. So it’s unclear exactly which helper function we’d want until we do that work. I think we should refactor and figure out once that is done exactly which helper function is useful. I am guessing we probably won’t decide to put it in the TextIterator class itself, but not sure. It mostly depends on what happens as we move the extraction of this offset so that it’s unified with the extraction of the text.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:427
&gt; +        checkTextOfParagraph(*textChecker, stringValue(), TextCheckingTypeSpelling, results, TextIterator::insertionPointOffsetInParagraph(frame-&gt;selection().selection()));

I don’t understand what guarantees that stringValue() is the text of an entire paragraph. It seems to me we want the insertion point offset relative to the start of stringValue(), not relative to the start of what the TextIterator thinks is a paragraph.

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:1161
&gt; +        checkTextOfParagraph(*checker, text, TextCheckingTypeSpelling, results, TextIterator::insertionPointOffsetInParagraph(node-&gt;document().frame()-&gt;selection().selection()));

I don’t understand what guarantees that “text” is the text of an entire paragraph. It seems to me we want the insertion point offset relative to the start of the text in &quot;text&quot;, not relative to the start of what the TextIterator thinks is a paragraph.

&gt; Source/WebCore/editing/AlternativeTextController.cpp:356
&gt; +        textChecker()-&gt;getGuessesForWord(m_alternativeTextInfo.originalText, paragraphText, TextIterator::insertionPointOffsetInParagraph(m_frame.selection().selection()), suggestions);

What guarantees that TextCheckingParagraph gets the exact same paragraph that TextIterator::insertionPointOffsetInParagraph gets? It seems like they both do similar work, but I don’t see how it’s guaranteed they will match.

&gt; Source/WebCore/editing/Editor.cpp:2131
&gt; +        textChecker()-&gt;getGuessesForWord(word, String(), TextIterator::insertionPointOffsetInParagraph(m_frame.selection().selection()), guesses);

How is it helpful to have the insertion point relative to the start of the paragraph in this case, since we are not passing in the text of the paragraph? The text checker is only getting a single word, so what is the reference point for the insertion point we are passing. I think that in this case we either don’t need to pass the insertion point information, or we need to restructure the code so we can get a correct value for it.

&gt; Source/WebCore/editing/Editor.cpp:2405
&gt; +    checkTextOfParagraph(*textChecker(), paragraphToCheck.text(), resolveTextCheckingTypeMask(textCheckingOptions), results, TextIterator::insertionPointOffsetInParagraph(m_frame.selection().selection()));

Same question as above about whether TextCheckingParagraph is guaranteed to be dealing with the same paragraph as TextIterator::insertionPointOffsetInParagraph.

I think the cure is to use the same range to extract the text and to compute the insertion point offset within the range. That probably means moving the code into the TextCheckingParagraph class in this particular case.

&gt; Source/WebCore/editing/SpellChecker.cpp:185
&gt; +    client()-&gt;requestCheckingOfString(m_processingRequest, TextIterator::insertionPointOffsetInParagraph(m_frame.selection().selection()));

Seems more natural that this would be captured at the time m_processingRequest was created. The text will be captured at that point. It seems a bit peculiar to have the offset be captured now instead of at the same time the text was captured. Perhaps there is some benefit to this different timing, but I suspect it just makes the code unnecessarily fragile.

&gt; Source/WebCore/editing/TextCheckingHelper.cpp:352
&gt; +                    insertionPointOffset = TextIterator::insertionPointOffsetInParagraph(frame-&gt;selection().selection());

Seems safer if we actually use paragraphRange here instead of depending on TextIterator::insertionPointOffsetInParagraph finding the same paragraph.

&gt; Source/WebCore/editing/TextCheckingHelper.cpp:587
&gt; +        insertionPointOffset = TextIterator::insertionPointOffsetInParagraph(frame-&gt;selection().selection());

Ditto.

&gt; Source/WebCore/editing/TextCheckingHelper.cpp:594
&gt; +            m_client-&gt;textChecker()-&gt;getGuessesForWord(misspelledWord, String(), insertionPointOffset, guesses);

With no context to go with it, unclear how the insertionPointOffset will be valuable here.

&gt; Source/WebCore/editing/TextCheckingHelper.h:106
&gt; +void checkTextOfParagraph(TextCheckerClient&amp;, StringView, TextCheckingTypeMask, Vector&lt;TextCheckingResult&gt;&amp;, int insertionPointOffset);

Since I presume the insertion point offset &quot;goes with&quot; the StringView, I would expect them to be consecutive arguments, and I would also expect that we’d use unsigned since that’s the type for offsets within a StringView.

We might also consider whether we want to use Optional&lt;unsigned&gt; rather than passing a pre-selected value such as 0 when there is no insertion point.

&gt; Source/WebCore/platform/text/TextCheckerClient.h:52
&gt; +    virtual Vector&lt;TextCheckingResult&gt; checkTextOfParagraph(StringView, TextCheckingTypeMask checkingTypes, int insertionPointOffset) = 0;

Same though that the insertion point offset should be &quot;next to&quot; the StringView that it’s relative to.

&gt; Source/WebCore/platform/text/TextCheckerClient.h:58
&gt; +    virtual void getGuessesForWord(const String&amp; word, const String&amp; context, int insertionPointOffset, Vector&lt;String&gt;&amp; guesses) = 0;

Unclear whether the offset is relative to the language identification context or relative to the word. Also would be nice in future to use StringView for these rather than const String&amp;.

&gt; Source/WebCore/platform/text/TextCheckerClient.h:59
&gt; +    virtual void requestCheckingOfString(PassRefPtr&lt;TextCheckingRequest&gt;, int insertionPointOffset) = 0;

It’s unclear to me what this insertion point offset is relative to. I think this should move into TextCheckingRequest rather than being passed separately.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274954</attachid>
            <date>2016-03-25 16:49:51 -0700</date>
            <delta_ts>2016-03-25 17:18:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>30426</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTAzLTI1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTcGVsbCBjaGVja2luZyBzaG91bGQg
bm90IHVzZSBET00gdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NTkwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgsIHJlcXVlc3RD
aGVja2luZ09mU3RyaW5nLCBhbmQgCisgICAgICAgIGdldEd1ZXNzZXNGb3JXb3JkIHRha2UgYW4g
aW50IGZvciB0aGUgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCBpbnN0ZWFkIG9mIGEgCisgICAgICAg
IFZpc2libGVTZWxlY3Rpb24uIFRoZSBWaXNpYmxlU2VsZWN0aW9uIHdhcyBvbmx5IG5lZWRlZCB0
byBleHRyYWN0IHRoZSBpbnQgCisgICAgICAgIGFueXdheS4gCisKKyAgICAgICAgVGhpcyBwYXRj
aCBhbHNvIGFkZHMgYSBuZXcgY29udmVuaWVuY2UgZnVuY3Rpb24gCisgICAgICAgIFRleHRJdGVy
YXRvcjo6bGVuZ3RoVG9JbnNlcnRpb25Qb2ludEZyb21QYXJhZ3JhcGhTdGFydCgpIHRoYXQgYWxs
IG9mIHRoZSAKKyAgICAgICAgY2FsbGVycyBvZiB0aGVzZSBzcGVsbCBjaGVja2luZyBmdW5jdGlv
bnMgY2FuIHVzZSBpbiBvcmRlciB0byBjb21wdXRlIHRoZSAKKyAgICAgICAgaW5zZXJ0aW9uIHBv
aW50LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc01pc3NwZWxsaW5nKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3BlbGxpbmcpOgorICAgICAg
ICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgICogZWRp
dGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yTWlz
c3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tl
ci5jcHA6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFk
R3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5oOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6c3VicmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEl0ZXJhdG9yOjpsZW5ndGhUb0luc2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0KToK
KyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5oOgorICAgICAgICAqIGxvYWRlci9FbXB0
eUNsaWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlUZXh0Q2hlY2tlckNsaWVudDo6
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50Lmg6CisKIDIwMTYt
MDMtMjUgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1
c2Ugb2YgZXh0ZXJuICJDIiB0byBpbmNsdWRlIFF1YXJ0ekNvcmUgZmlsZXMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAkocmV2aXNpb24gMTk4NjYwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI0LDcgKzQyNCw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzTWlzc3BlbGxpbmcKIAogICAgIGlmICh1bmlmaWVk
VGV4dENoZWNrZXJFbmFibGVkKGZyYW1lKSkgewogICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiByZXN1bHRzOwotICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNr
ZXIsIHN0cmluZ1ZhbHVlKCksIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cywgZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcs
IHJlc3VsdHMsIFRleHRJdGVyYXRvcjo6bGVuZ3RoVG9JbnNlcnRpb25Qb2ludEZyb21QYXJhZ3Jh
cGhTdGFydChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpKTsKICAgICAgICAgaWYgKCFy
ZXN1bHRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGlzTWlzc3BlbGxlZCA9IHRydWU7CiAgICAg
ICAgIHJldHVybiBpc01pc3NwZWxsZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTk4NjYwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTExNTgsNyArMTE1OCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5n
U2V0U3BlbGxpbmcKICAgICAgICAgCiAgICAgICAgIC8vIGNoZWNrVGV4dE9mUGFyYWdyYXBoIGlz
IHRoZSBvbmx5IHNwZWxsaW5nL2dyYW1tYXIgY2hlY2tlciBpbXBsZW1lbnRlZCBpbiBXSzEgYW5k
IFdLMgogICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgICAg
ICBjaGVja1RleHRPZlBhcmFncmFwaCgqY2hlY2tlciwgdGV4dCwgVGV4dENoZWNraW5nVHlwZVNw
ZWxsaW5nLCByZXN1bHRzLCBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKmNoZWNrZXIsIHRleHQs
IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cywgVGV4dEl0ZXJhdG9yOjpsZW5ndGhU
b0luc2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0KG5vZGUtPmRvY3VtZW50KCkuZnJhbWUo
KS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpKTsKICAgICAgICAgCiAgICAgICAgIHNpemVfdCBz
aXplID0gcmVzdWx0cy5zaXplKCk7CiAgICAgICAgIE5TTnVtYmVyKiB0cnVlVmFsdWUgPSBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTk4NjYw
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6dGltZXJGaXIKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBTdHJpbmcg
cGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgobV9hbHRlcm5h
dGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3JhcGhSYW5nZSgpLmdldCgp
KTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAgICAgIHRleHRDaGVj
a2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5vcmlnaW5hbFRl
eHQsIHBhcmFncmFwaFRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHN1Z2dl
c3Rpb25zKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9hbHRl
cm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgVGV4dEl0ZXJhdG9y
OjpsZW5ndGhUb0luc2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0KG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpLCBzdWdnZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9u
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdp
dGhBbHRlcm5hdGl2ZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDE5ODY2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyOCw3ICsyMTI4LDcgQEAg
VmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbAogCiAgICAgVmVjdG9yPFN0
cmluZz4gZ3Vlc3NlczsKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCkt
PmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIFN0cmluZygpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLCBndWVzc2VzKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0Zv
cldvcmQod29yZCwgU3RyaW5nKCksIFRleHRJdGVyYXRvcjo6bGVuZ3RoVG9JbnNlcnRpb25Qb2lu
dEZyb21QYXJhZ3JhcGhTdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSwgZ3Vl
c3Nlcyk7CiAgICAgcmV0dXJuIGd1ZXNzZXM7CiB9CiAKQEAgLTI0MDIsNyArMjQwMiw3IEBAIHZv
aWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICB9CiAKICAgICBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVzb2x2ZVRleHRDaGVj
a2luZ1R5cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMpLCByZXN1bHRzLCBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNr
ZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFz
ayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cywgVGV4dEl0ZXJhdG9yOjpsZW5ndGhUb0lu
c2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpKTsKICAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2UoKSwgcmVzdWx0
cyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAJKHJl
dmlzaW9uIDE5ODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmdI
ZWxwZXIuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJodG1sZWRpdGlu
Zy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xODEsNyArMTgyLDcgQEAgdm9pZCBTcGVs
bENoZWNrZXI6Omludm9rZVJlcXVlc3QoUGFzc1JlZgogICAgIGlmICghY2xpZW50KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICBjbGll
bnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcobV9wcm9jZXNzaW5nUmVxdWVzdCwgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nKG1fcHJvY2Vzc2luZ1JlcXVlc3QsIFRleHRJdGVyYXRvcjo6bGVuZ3RoVG9JbnNl
cnRpb25Qb2ludEZyb21QYXJhZ3JhcGhTdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKSk7CiB9CiAKIHZvaWQgU3BlbGxDaGVja2VyOjplbnF1ZXVlUmVxdWVzdChQYXNzUmVmUHRy
PFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAkocmV2aXNpb24gMTk4NjYwKQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDcsMTAgKzM0NywxMCBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RN
aXNzCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4gcmVzdWx0czsKICAgICAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBj
aGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8
IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAg
ICAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CisgICAgICAg
ICAgICAgICAgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQgPSAwOwogICAgICAgICAgICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3JhcGhSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1l
KCkpCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
Km1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMs
IHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBsZW5ndGhU
b0luc2VydGlvblBvaW50ID0gVGV4dEl0ZXJhdG9yOjpsZW5ndGhUb0luc2VydGlvblBvaW50RnJv
bVBhcmFncmFwaFN0YXJ0KGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAg
ICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMsIGxlbmd0aFRvSW5zZXJ0aW9u
UG9pbnQpOwogCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZXN1bHQgOiByZXN1bHRzKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBl
U3BlbGxpbmcgJiYgcmVzdWx0LmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1
bHQubG9jYXRpb24gKyByZXN1bHQubGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQpIHsKQEAgLTU4
MiwxNiArNTgyLDE2IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3MK
IAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgVGV4dENoZWNr
aW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdU
eXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBl
U3BlbGxpbmc7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uOworICAgIGlu
dCBsZW5ndGhUb0luc2VydGlvblBvaW50ID0gMDsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9y
YW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24g
PSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGgudGV4dCgpLCBjaGVja2luZ1R5
cGVzLCByZXN1bHRzLCBjdXJyZW50U2VsZWN0aW9uKTsKKyAgICAgICAgbGVuZ3RoVG9JbnNlcnRp
b25Qb2ludCA9IFRleHRJdGVyYXRvcjo6bGVuZ3RoVG9JbnNlcnRpb25Qb2ludEZyb21QYXJhZ3Jh
cGhTdGFydChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGNoZWNrVGV4dE9m
UGFyYWdyYXBoKCptX2NsaWVudC0+dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hl
Y2tpbmdUeXBlcywgcmVzdWx0cywgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCk7CiAKICAgICBmb3Ig
KGF1dG8mIHJlc3VsdCA6IHJlc3VsdHMpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRl
eHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNoZXMo
cmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKSkgewogICAgICAgICAgICAgU3RyaW5nIG1p
c3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoLmNoZWNraW5nU3Vic3RyaW5nKCk7CiAgICAgICAgICAg
ICBBU1NFUlQobWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9jbGllbnQt
PnRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBTdHJpbmco
KSwgY3VycmVudFNlbGVjdGlvbiwgZ3Vlc3Nlcyk7CisgICAgICAgICAgICBtX2NsaWVudC0+dGV4
dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3BlbGxlZFdvcmQsIFN0cmluZygpLCBs
ZW5ndGhUb0luc2VydGlvblBvaW50LCBndWVzc2VzKTsKICAgICAgICAgICAgIG1fY2xpZW50LT51
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKICAgICAg
ICAgICAgIG1pc3NwZWxsZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CkBA
IC02NDUsMTAgKzY0NSwxMCBAQCBib29sIFRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRD
aGVjCiAgICAgcmV0dXJuIG1fcmFuZ2UgJiYgV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5h
YmxlZChtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CiB9CiAKLXZvaWQgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0
LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiYgcmVzdWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlv
bikKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwg
U3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cywgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9p
bnQpCiB7CiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICByZXN1bHRzID0gY2xp
ZW50LmNoZWNrVGV4dE9mUGFyYWdyYXBoKHRleHQsIGNoZWNraW5nVHlwZXMsIGN1cnJlbnRTZWxl
Y3Rpb24pOworICAgIHJlc3VsdHMgPSBjbGllbnQuY2hlY2tUZXh0T2ZQYXJhZ3JhcGgodGV4dCwg
Y2hlY2tpbmdUeXBlcywgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCk7CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShjdXJyZW50U2VsZWN0aW9uKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCShyZXZpc2lvbiAxOTg2NjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMs
NyArMTAzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotdm9pZCBjaGVja1RleHRPZlBhcmFn
cmFwaChUZXh0Q2hlY2tlckNsaWVudCYsIFN0cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5cGVNYXNr
LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1
cnJlbnRTZWxlY3Rpb24pOwordm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNs
aWVudCYsIFN0cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5cGVNYXNrLCBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiYsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KTsKIAogYm9vbCB1bmlmaWVk
VGV4dENoZWNrZXJFbmFibGVkKGNvbnN0IEZyYW1lKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE5ODY2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1Nyw2ICsy
NDU3LDEzIEBAIFJlZjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShSYW5nZSoKICAgICBy
ZXR1cm4gY2hhcmFjdGVyU3VicmFuZ2UoZW50aXJlUmFuZ2UtPm93bmVyRG9jdW1lbnQoKSwgZW50
aXJlUmFuZ2VJdGVyYXRvciwgY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJDb3VudCk7CiB9CiAK
K2ludCBUZXh0SXRlcmF0b3I6Omxlbmd0aFRvSW5zZXJ0aW9uUG9pbnRGcm9tUGFyYWdyYXBoU3Rh
cnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAgIFZpc2libGVQb3Np
dGlvbiBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0
YXJ0KTsKKyAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFy
YWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Cit9CisKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc0luc2lkZVJlcGxhY2VkRWxlbWVudChUZXh0SXRlcmF0b3ImIGl0ZXJhdG9yKQogewog
ICAgIEFTU0VSVCghaXRlcmF0b3IuYXRFbmQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmgJKHJldmlzaW9uIDE5ODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJGaW5kT3B0aW9ucy5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dEl0
ZXJhdG9yQmVoYXZpb3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIApAQCAt
MTE0LDYgKzExNSw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBn
ZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShOb2RlKiBzY29wZSwgY29uc3QgUmFuZ2UqLCBz
aXplX3QmIGxvY2F0aW9uLCBzaXplX3QmIGxlbmd0aCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZjxSYW5nZT4gc3VicmFuZ2UoUmFuZ2UqIGVudGlyZVJhbmdlLCBpbnQgY2hhcmFjdGVy
T2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpOwogCisgICAgc3RhdGljIGludCBsZW5ndGhUb0lu
c2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsK
KwogcHJpdmF0ZToKICAgICB2b2lkIGV4aXROb2RlKCk7CiAgICAgYm9vbCBzaG91bGRSZXByZXNl
bnROb2RlT2Zmc2V0WmVybygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50
cy5jcHAJKHJldmlzaW9uIDE5ODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNs
aWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsNyArMjM4LDcgQEAgUGFzc1JlZlB0cjxG
cmFtZU5ldHdvcmtpbmdDb250ZXh0PiBFbXB0eQogICAgIHJldHVybiBQYXNzUmVmUHRyPEZyYW1l
TmV0d29ya2luZ0NvbnRleHQ+KCk7CiB9CiAKLXZvaWQgRW1wdHlUZXh0Q2hlY2tlckNsaWVudDo6
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0Piwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCit2b2lkIEVtcHR5VGV4dENoZWNrZXJDbGllbnQ6OnJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4sIGlu
dCkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNp
b24gMTk4NjYwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MjUsMTEgKzQyNSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjaGVja0dy
YW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBp
bnQqKSBvdmVycmlkZSB7IH0KIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmll
dywgVGV4dENoZWNraW5nVHlwZU1hc2ssIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBvdmVycmlk
ZSB7IHJldHVybiBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PigpOyB9CisgICAgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENo
ZWNraW5nVHlwZU1hc2ssIGludCkgb3ZlcnJpZGUgeyByZXR1cm4gVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4oKTsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBWZWN0b3I8
U3RyaW5nPiYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmco
UGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYp
IG92ZXJyaWRlOworICAgIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgaW50LCBWZWN0b3I8U3RyaW5nPiYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQg
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0Piwg
aW50KSBvdmVycmlkZTsKIH07CiAKIGNsYXNzIEVtcHR5RWRpdG9yQ2xpZW50IDogcHVibGljIEVk
aXRvckNsaWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVj
a2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q2hlY2tlckNsaWVudC5oCShyZXZpc2lvbiAxOTg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDgg
KzM3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBWaXNpYmxlU2VsZWN0aW9u
OwotCiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGV4
dENoZWNrZXJDbGllbnQoKSB7fQpAQCAtNTEsMTQgKzQ5LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPEdyYW1tYXJE
ZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCkg
PSAwOwogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICB2aXJ0dWFsIFZlY3Rv
cjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFRl
eHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IGN1cnJlbnRTZWxlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5cGVN
YXNrIGNoZWNraW5nVHlwZXMsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KSA9IDA7CiAjZW5k
aWYKIAogICAgIC8vIEZvciBzcGVsbGNoZWNrZXJzIHRoYXQgc3VwcG9ydCBtdWx0aXBsZSBsYW5n
dWFnZXMsIGl0J3Mgb2Z0ZW4gaW1wb3J0YW50IHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgdGhlIGxh
bmd1YWdlIGluIG9yZGVyIHRvCiAgICAgLy8gcHJvdmlkZSBtb3JlIGFjY3VyYXRlIGNvcnJlY3Rp
b24gc3VnZ2VzdGlvbnMuIENhbGxlciBjYW4gcGFzcyBpbiBtb3JlIHRleHQgaW4gImNvbnRleHQi
IHRvIGFpZCBzdWNoIHNwZWxsY2hlY2tlcnMgb24gbGFuZ3VhZ2UKICAgICAvLyBpZGVudGlmaWNh
dGlvbi4gTm9yYW1sbHkgaXQncyB0aGUgdGV4dCBzdXJyb3VuZGluZyB0aGUgIndvcmQiIGZvciB3
aGljaCB3ZSBhcmUgZ2V0dGluZyBjb3JyZWN0aW9uIHN1Z2dlc3Rpb25zLgotICAgIHZpcnR1YWwg
dm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYg
Y29udGV4dCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwgVmVjdG9y
PFN0cmluZz4mIGd1ZXNzZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5n
T2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVz
c2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50
IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENo
ZWNraW5nUmVxdWVzdD4sIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KSA9IDA7CiB9OwogCiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTg3MDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxNi0wMy0yNSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3BlbGwgY2hlY2tpbmcgc2hvdWxk
IG5vdCB1c2UgRE9NIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTU5MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGNoZWNrVGV4dE9mUGFyYWdyYXBoLCByZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZywgYW5kIAorICAgICAgICBnZXRHdWVzc2VzRm9yV29yZCB0YWtlIGFu
IGludCBmb3IgdGhlIGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQgaW5zdGVhZCBvZiBhIAorICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uLiBUaGUgVmlzaWJsZVNlbGVjdGlvbiB3YXMgb25seSBuZWVkZWQg
dG8gZXh0cmFjdCB0aGUgaW50IAorICAgICAgICBhbnl3YXkuIAorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKwogMjAx
Ni0wMy0yNSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IHVzZSBvZiBleHRlcm4gIkMiIHRvIGluY2x1ZGUgUXVhcnR6Q29yZSBmaWxlcwpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMTk4NjYwKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NzYsMTkgKzQ3NiwxMiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFt
bWFyT2ZTdHJpCiAgICAgKmJhZEdyYW1tYXJMZW5ndGggPSByZXN1bHRMZW5ndGg7CiB9CiAKLXN0
YXRpYyBpbnQzMl90IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKLXsKLSAgICBWaXNpYmxlUG9zaXRpb24g
c2VsZWN0aW9uU3RhcnQgPSBjdXJyZW50U2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZp
c2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
U3RhcnQpOwotICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKLX0KLQogI2lmIFVTRShVTklG
SUVEX1RFWFRfQ0hFQ0tJTkcpCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JD
bGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgV2ViQ29y
ZTo6VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgY3VycmVudFNlbGVjdGlvbikKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVk
aXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBpbnQgbGVuZ3RoVG9J
bnNlcnRpb25Qb2ludCkKIHsKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRz
OwogCi0gICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVja1Rl
eHRPZlBhcmFncmFwaChzdHJpbmdWaWV3LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgY2hlY2tp
bmdUeXBlcywgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0
aW9uKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoOjpSZXBs
eShyZXN1bHRzKSk7CisgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpDaGVja1RleHRPZlBhcmFncmFwaChzdHJpbmdWaWV3LnRvU3RyaW5nV2l0aG91dENvcHlpbmco
KSwgY2hlY2tpbmdUeXBlcywgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCksIE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoOjpSZXBseShyZXN1bHRzKSk7CiAKICAgICBy
ZXR1cm4gcmVzdWx0czsKIH0KQEAgLTUxNiwxOSArNTA5LDE5IEBAIGJvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzcGVsbGluZ1VJSXNTaG93aW4KICAgICByZXR1cm4gaXNTaG93aW5nOwogfQogCi12b2lk
IFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBj
b25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxl
Y3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6Omdl
dEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0
LCBpbnQgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2Vz
Rm9yV29yZCh3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9u
KGN1cnJlbnRTZWxlY3Rpb24pKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0Zv
cldvcmQ6OlJlcGx5KGd1ZXNzZXMpKTsKKyAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIGNvbnRleHQsIGxlbmd0aFRvSW5z
ZXJ0aW9uUG9pbnQpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2VzRm9yV29yZDo6
UmVwbHkoZ3Vlc3NlcykpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNr
aW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+IHBycFJlcXVl
c3QsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCit2
b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVm
UHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+IHBycFJlcXVlc3QsIGludCBsZW5ndGhUb0luc2VydGlv
blBvaW50KQogewogICAgIFJlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0ID0gcHJw
UmVxdWVzdDsKIAogICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IGdlbmVyYXRlVGV4dENoZWNraW5n
UmVxdWVzdElEKCk7CiAgICAgbV9wYWdlLT5hZGRUZXh0Q2hlY2tpbmdSZXF1ZXN0KHJlcXVlc3RJ
RCwgcmVxdWVzdCk7CiAKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
UmVxdWVzdENoZWNraW5nT2ZTdHJpbmcocmVxdWVzdElELCByZXF1ZXN0LT5kYXRhKCksIGluc2Vy
dGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikpKTsKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVxdWVzdENoZWNraW5nT2ZTdHJp
bmcocmVxdWVzdElELCByZXF1ZXN0LT5kYXRhKCksIGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQpKTsK
IH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTk4NjYwKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM5LDE2ICsxMzksMTYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgZ2V0QXV0b0Nv
cnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVk
V29yZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3
LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlv
biwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBvdmVycmlkZTsKICNpZiBVU0UoVU5JRklFRF9URVhU
X0NIRUNLSU5HKQotICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNr
VGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNr
IGNoZWNraW5nVHlwZXMsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRT
ZWxlY3Rpb24pIG92ZXJyaWRlOworICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1
bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KSBvdmVy
cmlkZTsKICNlbmRpZgogICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpIG92ZXJyaWRl
OwogICAgIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0
R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQs
IGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3Rv
cjxTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBpbnQgbGVuZ3RoVG9J
bnNlcnRpb25Qb2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIG92ZXJyaWRlOwogICAgIHZv
aWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldElucHV0
TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0
PiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgb3Zl
cnJpZGU7CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4sIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50
KSBvdmVycmlkZTsKIAogI2lmIFBMQVRGT1JNKEdUSykKICAgICBib29sIHNob3VsZFNob3dVbmlj
b2RlTWVudSgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4NzAy
KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjQgQEAKKzIwMTYtMDMtMjUgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFNwZWxsIGNoZWNraW5nIHNob3VsZCBub3QgdXNlIERPTSB0eXBlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1OTA4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBj
aGVja1RleHRPZlBhcmFncmFwaCwgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcsIGFuZCAKKyAgICAg
ICAgZ2V0R3Vlc3Nlc0ZvcldvcmQgdGFrZSBhbiBpbnQgZm9yIHRoZSBsZW5ndGhUb0luc2VydGlv
blBvaW50IGluc3RlYWQgb2YgYSAKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbi4gVGhlIFZpc2li
bGVTZWxlY3Rpb24gd2FzIG9ubHkgbmVlZGVkIHRvIGV4dHJhY3QgdGhlIGludCAKKyAgICAgICAg
YW55d2F5LiAKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdl
YkVkaXRvckNsaWVudDo6cGFzdGVib2FyZENoYW5nZUNvdW50KToKKyAgICAgICAgKFdlYkVkaXRv
ckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50
OjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRpZENoZWNr
U3VjY2VlZCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3Ry
aW5nKToKKyAgICAgICAgKGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24pOiBEZWxl
dGVkLgorCiAyMDE2LTAzLTI0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBs
ZSxjb20+CiAKICAgICAgICAgQ2hhbmdlIE5hdGl2ZUltYWdlUHRyIGZvciBDRyB0byBiZSBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiAxOTg2NjApCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTU4LDE2ICsxNTgsMTYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoZWNrU3BlbGxpbmdP
ZlN0cmluZyhTdHJpbmdWaWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3Bl
bGxpbmdMZW5ndGgpIG92ZXJyaWRlOwogICAgIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rp
b25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIGNo
ZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0
YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIG92
ZXJyaWRlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4
dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNo
ZWNraW5nVHlwZXMsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxl
Y3Rpb24pIG92ZXJyaWRlOworICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+
IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5
cGVNYXNrIGNoZWNraW5nVHlwZXMsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KSBvdmVycmlk
ZTsKICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJp
bmcmLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
OwogICAgIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSBvdmVycmlkZTsKICAgICBib29s
IHNwZWxsaW5nVUlJc1Nob3dpbmcoKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiYg
Z3Vlc3Nlcykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJp
bmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9p
bnQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsKIAogICAgIHZvaWQgd2lsbFNl
dElucHV0TWV0aG9kU3RhdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldElucHV0TWV0aG9kU3Rh
dGUoYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3Ry
aW5nKFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFdlYkNv
cmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92ZXJyaWRlOworICAgIHZv
aWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdSZXF1ZXN0PiwgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQpIG92ZXJyaWRlOwogCiAjaWYg
UExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIw
MAogICAgIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbiYpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkocmV2aXNpb24gMTk4NjYwKQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC04ODEsNyArODgxLDcgQEAgaW50IFdlYkVkaXRvckNsaWVudDo6cGFzdGVib2Fy
ZENoYW5nZUNvdQogICAgIHJldHVybiAwOwogfQogCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5n
LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJikKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRDaGVja2luZ1R5cGVNYXNrIGNo
ZWNraW5nVHlwZXMsIGludCkKIHsKICAgICBBU1NFUlQoY2hlY2tpbmdUeXBlcyAmIE5TVGV4dENo
ZWNraW5nVHlwZVNwZWxsaW5nKTsKIApAQCAtMTA1MCwyMCArMTA1MCwxMSBAQCBzdGF0aWMgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShOCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAK
LSNpZiBIQVZFKEFEVkFOQ0VEX1NQRUxMX0NIRUNLSU5HKQotc3RhdGljIGludCBpbnNlcnRpb25Q
b2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRT
ZWxlY3Rpb24pCi17Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gY3VycmVu
dFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBo
U3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICByZXR1cm4gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlv
blN0YXJ0KS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4g
V2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZywg
VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgY3VycmVudFNlbGVjdGlvbikKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRv
ckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRDaGVj
a2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KQog
ewogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKICNpZiBIQVZFKEFEVkFOQ0VEX1NQ
RUxMX0NIRUNLSU5HKQotICAgIG9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2luZ0luc2VydGlvblBv
aW50S2V5IDogIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBv
aW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbildIH07CisgICAgb3B0aW9u
cyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVyIG51bWJl
cldpdGhVbnNpZ25lZEludGVnZXI6bGVuZ3RoVG9JbnNlcnRpb25Qb2ludF0gfTsKICNlbmRpZgog
ICAgIHJldHVybiBjb3JlKFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBjaGVj
a1N0cmluZzpzdHJpbmcuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpLmdldCgpIHJhbmdl
Ok5TTWFrZVJhbmdlKDAsIHN0cmluZy5sZW5ndGgoKSkgdHlwZXM6KGNoZWNraW5nVHlwZXMgfCBO
U1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeSkgb3B0aW9uczpvcHRpb25zIGluU3BlbGxEb2N1
bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBvcnRob2dyYXBoeTpOVUxMIHdv
cmRDb3VudDpOVUxMXSwgY2hlY2tpbmdUeXBlcyk7CiB9CkBAIC0xMTAxLDcgKzEwOTIsNyBAQCBi
b29sIFdlYkVkaXRvckNsaWVudDo6c3BlbGxpbmdVSUlzU2hvd2luCiAgICAgcmV0dXJuIFtbW05T
U3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gc3BlbGxpbmdQYW5lbF0gaXNWaXNpYmxl
XTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0
cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpWaXNpYmxl
U2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3Zv
aWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQs
IGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQsIFZlY3Rv
cjxTdHJpbmc+JiBndWVzc2VzKQogewogICAgIGd1ZXNzZXMuY2xlYXIoKTsKICAgICBOU1N0cmlu
ZyogbGFuZ3VhZ2UgPSBuaWw7CkBAIC0xMTA5LDcgKzExMDAsNyBAQCB2b2lkIFdlYkVkaXRvckNs
aWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoCiAgICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBb
TlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKICAgICBOU0RpY3Rpb25hcnkgKm9w
dGlvbnMgPSBuaWw7CiAjaWYgSEFWRShBRFZBTkNFRF9TUEVMTF9DSEVDS0lORykKLSAgICBvcHRp
b25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleSA6ICBbTlNOdW1iZXIgbnVt
YmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9u
KGN1cnJlbnRTZWxlY3Rpb24pXSB9OworICAgIG9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2luZ0lu
c2VydGlvblBvaW50S2V5IDogIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmxl
bmd0aFRvSW5zZXJ0aW9uUG9pbnRdIH07CiAjZW5kaWYKICAgICBpZiAoY29udGV4dC5sZW5ndGgo
KSkgewogICAgICAgICBbY2hlY2tlciBjaGVja1N0cmluZzpjb250ZXh0IHJhbmdlOk5TTWFrZVJh
bmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIHR5cGVzOk5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3Jh
cGh5IG9wdGlvbnM6b3B0aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRv
Y3VtZW50VGFnKCkgb3J0aG9ncmFwaHk6Jm9ydGhvZ3JhcGh5IHdvcmRDb3VudDowXTsKQEAgLTEy
ODgsNyArMTI3OSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRDaGVja1N1Y2NlZWQoaW4K
IH0KICNlbmRpZgogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJp
bmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0LCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQordm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNr
aW5nUmVxdWVzdD4gcmVxdWVzdCwgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQpCiB7CiAjaWYg
IVBMQVRGT1JNKElPUykKICAgICBBU1NFUlQoIW1fdGV4dENoZWNraW5nUmVxdWVzdCk7CkBAIC0x
Mjk5LDcgKzEyOTAsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZT
CiAgICAgTlNSdW5Mb29wKiBjdXJyZW50TG9vcCA9IFtOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3Bd
OwogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKICNpZiBIQVZFKEFEVkFOQ0VEX1NQ
RUxMX0NIRUNLSU5HKQotICAgIG9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2luZ0luc2VydGlvblBv
aW50S2V5IDogIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBv
aW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbildIH07CisgICAgb3B0aW9u
cyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVyIG51bWJl
cldpdGhVbnNpZ25lZEludGVnZXI6bGVuZ3RoVG9JbnNlcnRpb25Qb2ludF0gfTsKICNlbmRpZgog
ICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSByZXF1ZXN0Q2hlY2tpbmdP
ZlN0cmluZzptX3RleHRDaGVja2luZ1JlcXVlc3QtPmRhdGEoKS50ZXh0KCkgcmFuZ2U6cmFuZ2Ug
dHlwZXM6TlNUZXh0Q2hlY2tpbmdBbGxTeXN0ZW1UeXBlcyBvcHRpb25zOm9wdGlvbnMgaW5TcGVs
bERvY3VtZW50V2l0aFRhZzowIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNJbnRlZ2VyLCBOU0FycmF5
KiByZXN1bHRzLCBOU09ydGhvZ3JhcGh5KiwgTlNJbnRlZ2VyKSB7CiAgICAgICAgICAgICBbY3Vy
cmVudExvb3AgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihwZXJmb3JtKSAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274958</attachid>
            <date>2016-03-25 17:18:15 -0700</date>
            <delta_ts>2016-03-28 11:51:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>30748</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTAzLTI1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTcGVsbCBjaGVja2luZyBzaG91bGQg
bm90IHVzZSBET00gdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NTkwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgsIHJlcXVlc3RD
aGVja2luZ09mU3RyaW5nLCBhbmQgCisgICAgICAgIGdldEd1ZXNzZXNGb3JXb3JkIHRha2UgYW4g
aW50IGZvciB0aGUgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCBpbnN0ZWFkIG9mIGEgCisgICAgICAg
IFZpc2libGVTZWxlY3Rpb24uIFRoZSBWaXNpYmxlU2VsZWN0aW9uIHdhcyBvbmx5IG5lZWRlZCB0
byBleHRyYWN0IHRoZSBpbnQgCisgICAgICAgIGFueXdheS4gCisKKyAgICAgICAgVGhpcyBwYXRj
aCBhbHNvIGFkZHMgYSBuZXcgY29udmVuaWVuY2UgZnVuY3Rpb24gCisgICAgICAgIFRleHRJdGVy
YXRvcjo6bGVuZ3RoVG9JbnNlcnRpb25Qb2ludEZyb21QYXJhZ3JhcGhTdGFydCgpIHRoYXQgYWxs
IG9mIHRoZSAKKyAgICAgICAgY2FsbGVycyBvZiB0aGVzZSBzcGVsbCBjaGVja2luZyBmdW5jdGlv
bnMgY2FuIHVzZSBpbiBvcmRlciB0byBjb21wdXRlIHRoZSAKKyAgICAgICAgaW5zZXJ0aW9uIHBv
aW50LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc01pc3NwZWxsaW5nKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3BlbGxpbmcpOgorICAgICAg
ICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgICogZWRp
dGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yTWlz
c3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tl
ci5jcHA6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFk
R3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5oOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6c3VicmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEl0ZXJhdG9yOjpsZW5ndGhUb0luc2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0KToK
KyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5oOgorICAgICAgICAqIGxvYWRlci9FbXB0
eUNsaWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlUZXh0Q2hlY2tlckNsaWVudDo6
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50Lmg6CisKIDIwMTYt
MDMtMjUgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1
c2Ugb2YgZXh0ZXJuICJDIiB0byBpbmNsdWRlIFF1YXJ0ekNvcmUgZmlsZXMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAkocmV2aXNpb24gMTk4NjYwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI0LDcgKzQyNCw3IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzTWlzc3BlbGxpbmcKIAogICAgIGlmICh1bmlmaWVk
VGV4dENoZWNrZXJFbmFibGVkKGZyYW1lKSkgewogICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiByZXN1bHRzOwotICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNr
ZXIsIHN0cmluZ1ZhbHVlKCksIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cywgZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcs
IHJlc3VsdHMsIFRleHRJdGVyYXRvcjo6bGVuZ3RoVG9JbnNlcnRpb25Qb2ludEZyb21QYXJhZ3Jh
cGhTdGFydChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpKTsKICAgICAgICAgaWYgKCFy
ZXN1bHRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGlzTWlzc3BlbGxlZCA9IHRydWU7CiAgICAg
ICAgIHJldHVybiBpc01pc3NwZWxsZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTk4NjYwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTExNTgsNyArMTE1OCw3IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5n
U2V0U3BlbGxpbmcKICAgICAgICAgCiAgICAgICAgIC8vIGNoZWNrVGV4dE9mUGFyYWdyYXBoIGlz
IHRoZSBvbmx5IHNwZWxsaW5nL2dyYW1tYXIgY2hlY2tlciBpbXBsZW1lbnRlZCBpbiBXSzEgYW5k
IFdLMgogICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgICAg
ICBjaGVja1RleHRPZlBhcmFncmFwaCgqY2hlY2tlciwgdGV4dCwgVGV4dENoZWNraW5nVHlwZVNw
ZWxsaW5nLCByZXN1bHRzLCBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKmNoZWNrZXIsIHRleHQs
IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cywgVGV4dEl0ZXJhdG9yOjpsZW5ndGhU
b0luc2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0KG5vZGUtPmRvY3VtZW50KCkuZnJhbWUo
KS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpKTsKICAgICAgICAgCiAgICAgICAgIHNpemVfdCBz
aXplID0gcmVzdWx0cy5zaXplKCk7CiAgICAgICAgIE5TTnVtYmVyKiB0cnVlVmFsdWUgPSBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTk4NjYw
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6dGltZXJGaXIKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBTdHJpbmcg
cGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgobV9hbHRlcm5h
dGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3JhcGhSYW5nZSgpLmdldCgp
KTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAgICAgIHRleHRDaGVj
a2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5vcmlnaW5hbFRl
eHQsIHBhcmFncmFwaFRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIHN1Z2dl
c3Rpb25zKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9hbHRl
cm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgVGV4dEl0ZXJhdG9y
OjpsZW5ndGhUb0luc2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0KG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkpLCBzdWdnZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9u
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdp
dGhBbHRlcm5hdGl2ZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDE5ODY2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyOCw3ICsyMTI4LDcgQEAg
VmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbAogCiAgICAgVmVjdG9yPFN0
cmluZz4gZ3Vlc3NlczsKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCkt
PmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIFN0cmluZygpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLCBndWVzc2VzKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0Zv
cldvcmQod29yZCwgU3RyaW5nKCksIFRleHRJdGVyYXRvcjo6bGVuZ3RoVG9JbnNlcnRpb25Qb2lu
dEZyb21QYXJhZ3JhcGhTdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSwgZ3Vl
c3Nlcyk7CiAgICAgcmV0dXJuIGd1ZXNzZXM7CiB9CiAKQEAgLTI0MDIsNyArMjQwMiw3IEBAIHZv
aWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICB9CiAKICAgICBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KCp0ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVzb2x2ZVRleHRDaGVj
a2luZ1R5cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMpLCByZXN1bHRzLCBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNr
ZXIoKSwgcGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFz
ayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cywgVGV4dEl0ZXJhdG9yOjpsZW5ndGhUb0lu
c2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkpKTsKICAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2UoKSwgcmVzdWx0
cyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAJKHJl
dmlzaW9uIDE5ODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmdI
ZWxwZXIuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJodG1sZWRpdGlu
Zy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xODEsNyArMTgyLDcgQEAgdm9pZCBTcGVs
bENoZWNrZXI6Omludm9rZVJlcXVlc3QoUGFzc1JlZgogICAgIGlmICghY2xpZW50KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICBjbGll
bnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcobV9wcm9jZXNzaW5nUmVxdWVzdCwgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nKG1fcHJvY2Vzc2luZ1JlcXVlc3QsIFRleHRJdGVyYXRvcjo6bGVuZ3RoVG9JbnNl
cnRpb25Qb2ludEZyb21QYXJhZ3JhcGhTdGFydChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKSk7CiB9CiAKIHZvaWQgU3BlbGxDaGVja2VyOjplbnF1ZXVlUmVxdWVzdChQYXNzUmVmUHRy
PFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAkocmV2aXNpb24gMTk4NjYwKQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDcsMTAgKzM0NywxMCBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RN
aXNzCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4gcmVzdWx0czsKICAgICAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBj
aGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8
IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAg
ICAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CisgICAgICAg
ICAgICAgICAgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQgPSAwOwogICAgICAgICAgICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSBwYXJhZ3JhcGhSYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1l
KCkpCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
Km1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMs
IHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBsZW5ndGhU
b0luc2VydGlvblBvaW50ID0gVGV4dEl0ZXJhdG9yOjpsZW5ndGhUb0luc2VydGlvblBvaW50RnJv
bVBhcmFncmFwaFN0YXJ0KGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgICAg
ICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGhTdHJpbmcsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMsIGxlbmd0aFRvSW5zZXJ0aW9u
UG9pbnQpOwogCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZXN1bHQgOiByZXN1bHRzKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBl
U3BlbGxpbmcgJiYgcmVzdWx0LmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1
bHQubG9jYXRpb24gKyByZXN1bHQubGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQpIHsKQEAgLTU4
MiwxNiArNTgyLDE2IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3MK
IAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgVGV4dENoZWNr
aW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdU
eXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBl
U3BlbGxpbmc7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uOworICAgIGlu
dCBsZW5ndGhUb0luc2VydGlvblBvaW50ID0gMDsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9y
YW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24g
PSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGgudGV4dCgpLCBjaGVja2luZ1R5
cGVzLCByZXN1bHRzLCBjdXJyZW50U2VsZWN0aW9uKTsKKyAgICAgICAgbGVuZ3RoVG9JbnNlcnRp
b25Qb2ludCA9IFRleHRJdGVyYXRvcjo6bGVuZ3RoVG9JbnNlcnRpb25Qb2ludEZyb21QYXJhZ3Jh
cGhTdGFydChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGNoZWNrVGV4dE9m
UGFyYWdyYXBoKCptX2NsaWVudC0+dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hl
Y2tpbmdUeXBlcywgcmVzdWx0cywgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCk7CiAKICAgICBmb3Ig
KGF1dG8mIHJlc3VsdCA6IHJlc3VsdHMpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRl
eHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNoZXMo
cmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKSkgewogICAgICAgICAgICAgU3RyaW5nIG1p
c3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoLmNoZWNraW5nU3Vic3RyaW5nKCk7CiAgICAgICAgICAg
ICBBU1NFUlQobWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9jbGllbnQt
PnRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBTdHJpbmco
KSwgY3VycmVudFNlbGVjdGlvbiwgZ3Vlc3Nlcyk7CisgICAgICAgICAgICBtX2NsaWVudC0+dGV4
dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3BlbGxlZFdvcmQsIFN0cmluZygpLCBs
ZW5ndGhUb0luc2VydGlvblBvaW50LCBndWVzc2VzKTsKICAgICAgICAgICAgIG1fY2xpZW50LT51
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKICAgICAg
ICAgICAgIG1pc3NwZWxsZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CkBA
IC02NDUsMTAgKzY0NSwxMCBAQCBib29sIFRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRD
aGVjCiAgICAgcmV0dXJuIG1fcmFuZ2UgJiYgV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5h
YmxlZChtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CiB9CiAKLXZvaWQgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0
LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiYgcmVzdWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlv
bikKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwg
U3RyaW5nVmlldyB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cywgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9p
bnQpCiB7CiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICByZXN1bHRzID0gY2xp
ZW50LmNoZWNrVGV4dE9mUGFyYWdyYXBoKHRleHQsIGNoZWNraW5nVHlwZXMsIGN1cnJlbnRTZWxl
Y3Rpb24pOworICAgIHJlc3VsdHMgPSBjbGllbnQuY2hlY2tUZXh0T2ZQYXJhZ3JhcGgodGV4dCwg
Y2hlY2tpbmdUeXBlcywgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCk7CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShjdXJyZW50U2VsZWN0aW9uKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCShyZXZpc2lvbiAxOTg2NjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMs
NyArMTAzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotdm9pZCBjaGVja1RleHRPZlBhcmFn
cmFwaChUZXh0Q2hlY2tlckNsaWVudCYsIFN0cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5cGVNYXNr
LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1
cnJlbnRTZWxlY3Rpb24pOwordm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNs
aWVudCYsIFN0cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5cGVNYXNrLCBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiYsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KTsKIAogYm9vbCB1bmlmaWVk
VGV4dENoZWNrZXJFbmFibGVkKGNvbnN0IEZyYW1lKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE5ODY2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1Nyw2ICsy
NDU3LDEzIEBAIFJlZjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShSYW5nZSoKICAgICBy
ZXR1cm4gY2hhcmFjdGVyU3VicmFuZ2UoZW50aXJlUmFuZ2UtPm93bmVyRG9jdW1lbnQoKSwgZW50
aXJlUmFuZ2VJdGVyYXRvciwgY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJDb3VudCk7CiB9CiAK
K2ludCBUZXh0SXRlcmF0b3I6Omxlbmd0aFRvSW5zZXJ0aW9uUG9pbnRGcm9tUGFyYWdyYXBoU3Rh
cnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAgIFZpc2libGVQb3Np
dGlvbiBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0
YXJ0KTsKKyAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFy
YWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Cit9CisKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc0luc2lkZVJlcGxhY2VkRWxlbWVudChUZXh0SXRlcmF0b3ImIGl0ZXJhdG9yKQogewog
ICAgIEFTU0VSVCghaXRlcmF0b3IuYXRFbmQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmgJKHJldmlzaW9uIDE5ODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJGaW5kT3B0aW9ucy5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dEl0
ZXJhdG9yQmVoYXZpb3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIApAQCAt
MTE0LDYgKzExNSw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBn
ZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShOb2RlKiBzY29wZSwgY29uc3QgUmFuZ2UqLCBz
aXplX3QmIGxvY2F0aW9uLCBzaXplX3QmIGxlbmd0aCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZjxSYW5nZT4gc3VicmFuZ2UoUmFuZ2UqIGVudGlyZVJhbmdlLCBpbnQgY2hhcmFjdGVy
T2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpOwogCisgICAgc3RhdGljIGludCBsZW5ndGhUb0lu
c2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsK
KwogcHJpdmF0ZToKICAgICB2b2lkIGV4aXROb2RlKCk7CiAgICAgYm9vbCBzaG91bGRSZXByZXNl
bnROb2RlT2Zmc2V0WmVybygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50
cy5jcHAJKHJldmlzaW9uIDE5ODY2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNs
aWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsNyArMjM4LDcgQEAgUGFzc1JlZlB0cjxG
cmFtZU5ldHdvcmtpbmdDb250ZXh0PiBFbXB0eQogICAgIHJldHVybiBQYXNzUmVmUHRyPEZyYW1l
TmV0d29ya2luZ0NvbnRleHQ+KCk7CiB9CiAKLXZvaWQgRW1wdHlUZXh0Q2hlY2tlckNsaWVudDo6
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0Piwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCit2b2lkIEVtcHR5VGV4dENoZWNrZXJDbGllbnQ6OnJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4sIGlu
dCkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNp
b24gMTk4NjYwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MjUsMTEgKzQyNSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjaGVja0dy
YW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBp
bnQqKSBvdmVycmlkZSB7IH0KIAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmll
dywgVGV4dENoZWNraW5nVHlwZU1hc2ssIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBvdmVycmlk
ZSB7IHJldHVybiBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PigpOyB9CisgICAgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENo
ZWNraW5nVHlwZU1hc2ssIGludCkgb3ZlcnJpZGUgeyByZXR1cm4gVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4oKTsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBWZWN0b3I8
U3RyaW5nPiYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmco
UGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYp
IG92ZXJyaWRlOworICAgIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgaW50LCBWZWN0b3I8U3RyaW5nPiYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQg
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0Piwg
aW50KSBvdmVycmlkZTsKIH07CiAKIGNsYXNzIEVtcHR5RWRpdG9yQ2xpZW50IDogcHVibGljIEVk
aXRvckNsaWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVj
a2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q2hlY2tlckNsaWVudC5oCShyZXZpc2lvbiAxOTg2NjApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDgg
KzM3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBWaXNpYmxlU2VsZWN0aW9u
OwotCiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGV4
dENoZWNrZXJDbGllbnQoKSB7fQpAQCAtNTEsMTQgKzQ5LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPEdyYW1tYXJE
ZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCkg
PSAwOwogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICB2aXJ0dWFsIFZlY3Rv
cjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFRl
eHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IGN1cnJlbnRTZWxlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5cGVN
YXNrIGNoZWNraW5nVHlwZXMsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KSA9IDA7CiAjZW5k
aWYKIAogICAgIC8vIEZvciBzcGVsbGNoZWNrZXJzIHRoYXQgc3VwcG9ydCBtdWx0aXBsZSBsYW5n
dWFnZXMsIGl0J3Mgb2Z0ZW4gaW1wb3J0YW50IHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgdGhlIGxh
bmd1YWdlIGluIG9yZGVyIHRvCiAgICAgLy8gcHJvdmlkZSBtb3JlIGFjY3VyYXRlIGNvcnJlY3Rp
b24gc3VnZ2VzdGlvbnMuIENhbGxlciBjYW4gcGFzcyBpbiBtb3JlIHRleHQgaW4gImNvbnRleHQi
IHRvIGFpZCBzdWNoIHNwZWxsY2hlY2tlcnMgb24gbGFuZ3VhZ2UKICAgICAvLyBpZGVudGlmaWNh
dGlvbi4gTm9yYW1sbHkgaXQncyB0aGUgdGV4dCBzdXJyb3VuZGluZyB0aGUgIndvcmQiIGZvciB3
aGljaCB3ZSBhcmUgZ2V0dGluZyBjb3JyZWN0aW9uIHN1Z2dlc3Rpb25zLgotICAgIHZpcnR1YWwg
dm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYg
Y29udGV4dCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwgVmVjdG9y
PFN0cmluZz4mIGd1ZXNzZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5n
T2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVz
c2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50
IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENo
ZWNraW5nUmVxdWVzdD4sIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KSA9IDA7CiB9OwogCiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTg3MDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxNi0wMy0yNSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3BlbGwgY2hlY2tpbmcgc2hvdWxk
IG5vdCB1c2UgRE9NIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTU5MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGNoZWNrVGV4dE9mUGFyYWdyYXBoLCByZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZywgYW5kIAorICAgICAgICBnZXRHdWVzc2VzRm9yV29yZCB0YWtlIGFu
IGludCBmb3IgdGhlIGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQgaW5zdGVhZCBvZiBhIAorICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uLiBUaGUgVmlzaWJsZVNlbGVjdGlvbiB3YXMgb25seSBuZWVkZWQg
dG8gZXh0cmFjdCB0aGUgaW50IAorICAgICAgICBhbnl3YXkuIAorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKwogMjAx
Ni0wMy0yNSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IHVzZSBvZiBleHRlcm4gIkMiIHRvIGluY2x1ZGUgUXVhcnR6Q29yZSBmaWxlcwpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMTk4NjYwKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NzYsMTkgKzQ3NiwxMiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFt
bWFyT2ZTdHJpCiAgICAgKmJhZEdyYW1tYXJMZW5ndGggPSByZXN1bHRMZW5ndGg7CiB9CiAKLXN0
YXRpYyBpbnQzMl90IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKLXsKLSAgICBWaXNpYmxlUG9zaXRpb24g
c2VsZWN0aW9uU3RhcnQgPSBjdXJyZW50U2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZp
c2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
U3RhcnQpOwotICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKLX0KLQogI2lmIFVTRShVTklG
SUVEX1RFWFRfQ0hFQ0tJTkcpCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JD
bGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgV2ViQ29y
ZTo6VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgY3VycmVudFNlbGVjdGlvbikKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVk
aXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBpbnQgbGVuZ3RoVG9J
bnNlcnRpb25Qb2ludCkKIHsKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRz
OwogCi0gICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVja1Rl
eHRPZlBhcmFncmFwaChzdHJpbmdWaWV3LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgY2hlY2tp
bmdUeXBlcywgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0
aW9uKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoOjpSZXBs
eShyZXN1bHRzKSk7CisgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpDaGVja1RleHRPZlBhcmFncmFwaChzdHJpbmdWaWV3LnRvU3RyaW5nV2l0aG91dENvcHlpbmco
KSwgY2hlY2tpbmdUeXBlcywgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCksIE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoOjpSZXBseShyZXN1bHRzKSk7CiAKICAgICBy
ZXR1cm4gcmVzdWx0czsKIH0KQEAgLTUxNiwxOSArNTA5LDE5IEBAIGJvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzcGVsbGluZ1VJSXNTaG93aW4KICAgICByZXR1cm4gaXNTaG93aW5nOwogfQogCi12b2lk
IFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBj
b25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxl
Y3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6Omdl
dEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0
LCBpbnQgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2Vz
Rm9yV29yZCh3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9u
KGN1cnJlbnRTZWxlY3Rpb24pKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0Zv
cldvcmQ6OlJlcGx5KGd1ZXNzZXMpKTsKKyAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIGNvbnRleHQsIGxlbmd0aFRvSW5z
ZXJ0aW9uUG9pbnQpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2VzRm9yV29yZDo6
UmVwbHkoZ3Vlc3NlcykpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNr
aW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+IHBycFJlcXVl
c3QsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCit2
b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVm
UHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+IHBycFJlcXVlc3QsIGludCBsZW5ndGhUb0luc2VydGlv
blBvaW50KQogewogICAgIFJlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0ID0gcHJw
UmVxdWVzdDsKIAogICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IGdlbmVyYXRlVGV4dENoZWNraW5n
UmVxdWVzdElEKCk7CiAgICAgbV9wYWdlLT5hZGRUZXh0Q2hlY2tpbmdSZXF1ZXN0KHJlcXVlc3RJ
RCwgcmVxdWVzdCk7CiAKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
UmVxdWVzdENoZWNraW5nT2ZTdHJpbmcocmVxdWVzdElELCByZXF1ZXN0LT5kYXRhKCksIGluc2Vy
dGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikpKTsKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVxdWVzdENoZWNraW5nT2ZTdHJp
bmcocmVxdWVzdElELCByZXF1ZXN0LT5kYXRhKCksIGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQpKTsK
IH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OndpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTk4NjYwKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM5LDE2ICsxMzksMTYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgZ2V0QXV0b0Nv
cnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVk
V29yZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3
LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlv
biwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBvdmVycmlkZTsKICNpZiBVU0UoVU5JRklFRF9URVhU
X0NIRUNLSU5HKQotICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNr
VGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNr
IGNoZWNraW5nVHlwZXMsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRT
ZWxlY3Rpb24pIG92ZXJyaWRlOworICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1
bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KSBvdmVy
cmlkZTsKICNlbmRpZgogICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpIG92ZXJyaWRl
OwogICAgIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0
R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQs
IGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3Rv
cjxTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBpbnQgbGVuZ3RoVG9J
bnNlcnRpb25Qb2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIG92ZXJyaWRlOwogICAgIHZv
aWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldElucHV0
TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0
PiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgb3Zl
cnJpZGU7CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4sIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50
KSBvdmVycmlkZTsKIAogI2lmIFBMQVRGT1JNKEdUSykKICAgICBib29sIHNob3VsZFNob3dVbmlj
b2RlTWVudSgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4NzAy
KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjQgQEAKKzIwMTYtMDMtMjUgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFNwZWxsIGNoZWNraW5nIHNob3VsZCBub3QgdXNlIERPTSB0eXBlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1OTA4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBj
aGVja1RleHRPZlBhcmFncmFwaCwgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcsIGFuZCAKKyAgICAg
ICAgZ2V0R3Vlc3Nlc0ZvcldvcmQgdGFrZSBhbiBpbnQgZm9yIHRoZSBsZW5ndGhUb0luc2VydGlv
blBvaW50IGluc3RlYWQgb2YgYSAKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbi4gVGhlIFZpc2li
bGVTZWxlY3Rpb24gd2FzIG9ubHkgbmVlZGVkIHRvIGV4dHJhY3QgdGhlIGludCAKKyAgICAgICAg
YW55d2F5LiAKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdl
YkVkaXRvckNsaWVudDo6cGFzdGVib2FyZENoYW5nZUNvdW50KToKKyAgICAgICAgKFdlYkVkaXRv
ckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50
OjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRpZENoZWNr
U3VjY2VlZCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3Ry
aW5nKToKKyAgICAgICAgKGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24pOiBEZWxl
dGVkLgorCiAyMDE2LTAzLTI0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBs
ZSxjb20+CiAKICAgICAgICAgQ2hhbmdlIE5hdGl2ZUltYWdlUHRyIGZvciBDRyB0byBiZSBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiAxOTg2NjApCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTU4LDE2ICsxNTgsMTYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoZWNrU3BlbGxpbmdP
ZlN0cmluZyhTdHJpbmdWaWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3Bl
bGxpbmdMZW5ndGgpIG92ZXJyaWRlOwogICAgIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rp
b25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIGNo
ZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0
YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIG92
ZXJyaWRlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4
dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNo
ZWNraW5nVHlwZXMsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxl
Y3Rpb24pIG92ZXJyaWRlOworICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+
IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5
cGVNYXNrIGNoZWNraW5nVHlwZXMsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KSBvdmVycmlk
ZTsKICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJp
bmcmLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
OwogICAgIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSBvdmVycmlkZTsKICAgICBib29s
IHNwZWxsaW5nVUlJc1Nob3dpbmcoKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiYg
Z3Vlc3Nlcykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJp
bmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9p
bnQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsKIAogICAgIHZvaWQgd2lsbFNl
dElucHV0TWV0aG9kU3RhdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldElucHV0TWV0aG9kU3Rh
dGUoYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3Ry
aW5nKFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFdlYkNv
cmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92ZXJyaWRlOworICAgIHZv
aWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdSZXF1ZXN0PiwgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQpIG92ZXJyaWRlOwogCiAjaWYg
UExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIw
MAogICAgIHZvaWQgcmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbiYpOwpAQCAtMjgwLDcgKzI4MCw3IEBAIGlubGluZSBib29sIFdlYkVk
aXRvckNsaWVudDo6c3BlbGxpbmdVSUkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSB2
b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYsIFZlY3RvcjxTdHJp
bmc+JikKK2lubGluZSB2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgaW50LCBWZWN0b3I8U3RyaW5nPiYpCiB7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0JKHJldmlzaW9uIDE5ODY2MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtODgxLDcgKzg4
MSw3IEBAIGludCBXZWJFZGl0b3JDbGllbnQ6OnBhc3RlYm9hcmRDaGFuZ2VDb3UKICAgICByZXR1
cm4gMDsKIH0KIAotVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50Ojpj
aGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZywgVGV4dENoZWNraW5nVHlwZU1h
c2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCitWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmlu
Z1ZpZXcgc3RyaW5nLCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBpbnQpCiB7
CiAgICAgQVNTRVJUKGNoZWNraW5nVHlwZXMgJiBOU1RleHRDaGVja2luZ1R5cGVTcGVsbGluZyk7
CiAKQEAgLTEwNTAsMjAgKzEwNTAsMTEgQEAgc3RhdGljIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1
bHQ+IGNvcmUoTgogICAgIHJldHVybiByZXN1bHRzOwogfQogCi0jaWYgSEFWRShBRFZBTkNFRF9T
UEVMTF9DSEVDS0lORykKLXN0YXRpYyBpbnQgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQotewotICAgIFZp
c2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJsZVN0
YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotfQot
I2VuZGlmCi0KLVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRDaGVja2luZ1R5cGVNYXNr
IGNoZWNraW5nVHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24p
CitWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9m
UGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2lu
Z1R5cGVzLCBpbnQgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCkKIHsKICAgICBOU0RpY3Rpb25hcnkg
Km9wdGlvbnMgPSBuaWw7CiAjaWYgSEFWRShBRFZBTkNFRF9TUEVMTF9DSEVDS0lORykKLSAgICBv
cHRpb25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleSA6ICBbTlNOdW1iZXIg
bnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0
aW9uKGN1cnJlbnRTZWxlY3Rpb24pXSB9OworICAgIG9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2lu
Z0luc2VydGlvblBvaW50S2V5IDogIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2Vy
Omxlbmd0aFRvSW5zZXJ0aW9uUG9pbnRdIH07CiAjZW5kaWYKICAgICByZXR1cm4gY29yZShbW05T
U3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gY2hlY2tTdHJpbmc6c3RyaW5nLmNyZWF0
ZU5TU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJp
bmcubGVuZ3RoKCkpIHR5cGVzOihjaGVja2luZ1R5cGVzIHwgTlNUZXh0Q2hlY2tpbmdUeXBlT3J0
aG9ncmFwaHkpIG9wdGlvbnM6b3B0aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hl
Y2tlckRvY3VtZW50VGFnKCkgb3J0aG9ncmFwaHk6TlVMTCB3b3JkQ291bnQ6TlVMTF0sIGNoZWNr
aW5nVHlwZXMpOwogfQpAQCAtMTEwMSw3ICsxMDkyLDcgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNwZWxsaW5nVUlJc1Nob3dpbgogICAgIHJldHVybiBbW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRT
cGVsbENoZWNrZXJdIHNwZWxsaW5nUGFuZWxdIGlzVmlzaWJsZV07CiB9CiAKLXZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0
cmluZyYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNl
bGVjdGlvbiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6
Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRl
eHQsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykK
IHsKICAgICBndWVzc2VzLmNsZWFyKCk7CiAgICAgTlNTdHJpbmcqIGxhbmd1YWdlID0gbmlsOwpA
QCAtMTEwOSw3ICsxMTAwLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JX
b3JkKAogICAgIE5TU3BlbGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJl
ZFNwZWxsQ2hlY2tlcl07CiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOwogI2lmIEhB
VkUoQURWQU5DRURfU1BFTExfQ0hFQ0tJTkcpCi0gICAgb3B0aW9ucyA9IEB7IE5TVGV4dENoZWNr
aW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVn
ZXI6aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKV0g
fTsKKyAgICBvcHRpb25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleSA6ICBb
TlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjpsZW5ndGhUb0luc2VydGlvblBvaW50
XSB9OwogI2VuZGlmCiAgICAgaWYgKGNvbnRleHQubGVuZ3RoKCkpIHsKICAgICAgICAgW2NoZWNr
ZXIgY2hlY2tTdHJpbmc6Y29udGV4dCByYW5nZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0
aCgpKSB0eXBlczpOU1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeSBvcHRpb25zOm9wdGlvbnMg
aW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG9ydGhvZ3Jh
cGh5OiZvcnRob2dyYXBoeSB3b3JkQ291bnQ6MF07CkBAIC0xMjg4LDcgKzEyNzksNyBAQCB2b2lk
IFdlYkVkaXRvckNsaWVudDo6ZGlkQ2hlY2tTdWNjZWVkKGluCiB9CiAjZW5kaWYKIAotdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8V2ViQ29y
ZTo6VGV4dENoZWNraW5nUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
Y3VycmVudFNlbGVjdGlvbikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdP
ZlN0cmluZyhQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+IHJlcXVlc3Qs
IGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KQogewogI2lmICFQTEFURk9STShJT1MpCiAgICAg
QVNTRVJUKCFtX3RleHRDaGVja2luZ1JlcXVlc3QpOwpAQCAtMTI5OSw3ICsxMjkwLDcgQEAgdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mUwogICAgIE5TUnVuTG9vcCogY3Vy
cmVudExvb3AgPSBbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXTsKICAgICBOU0RpY3Rpb25hcnkg
Km9wdGlvbnMgPSBuaWw7CiAjaWYgSEFWRShBRFZBTkNFRF9TUEVMTF9DSEVDS0lORykKLSAgICBv
cHRpb25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleSA6ICBbTlNOdW1iZXIg
bnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0
aW9uKGN1cnJlbnRTZWxlY3Rpb24pXSB9OworICAgIG9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2lu
Z0luc2VydGlvblBvaW50S2V5IDogIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2Vy
Omxlbmd0aFRvSW5zZXJ0aW9uUG9pbnRdIH07CiAjZW5kaWYKICAgICBbW05TU3BlbGxDaGVja2Vy
IHNoYXJlZFNwZWxsQ2hlY2tlcl0gcmVxdWVzdENoZWNraW5nT2ZTdHJpbmc6bV90ZXh0Q2hlY2tp
bmdSZXF1ZXN0LT5kYXRhKCkudGV4dCgpIHJhbmdlOnJhbmdlIHR5cGVzOk5TVGV4dENoZWNraW5n
QWxsU3lzdGVtVHlwZXMgb3B0aW9uczpvcHRpb25zIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6MCBj
b21wbGV0aW9uSGFuZGxlcjpeKE5TSW50ZWdlciwgTlNBcnJheSogcmVzdWx0cywgTlNPcnRob2dy
YXBoeSosIE5TSW50ZWdlcikgewogICAgICAgICAgICAgW2N1cnJlbnRMb29wIHBlcmZvcm1TZWxl
Y3RvcjpAc2VsZWN0b3IocGVyZm9ybSkgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275033</attachid>
            <date>2016-03-28 11:51:13 -0700</date>
            <delta_ts>2016-03-29 12:31:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>32544</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODc1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTAzLTI4ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTcGVsbCBjaGVja2luZyBzaG91bGQg
bm90IHVzZSBET00gdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NTkwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgsIHJlcXVlc3RD
aGVja2luZ09mU3RyaW5nLCBhbmQgCisgICAgICAgIGdldEd1ZXNzZXNGb3JXb3JkIHRha2UgYW4g
aW50IGZvciB0aGUgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCBpbnN0ZWFkIG9mIGEgCisgICAgICAg
IFZpc2libGVTZWxlY3Rpb24uIFRoZSBWaXNpYmxlU2VsZWN0aW9uIHdhcyBvbmx5IG5lZWRlZCB0
byBleHRyYWN0IHRoZSBpbnQgCisgICAgICAgIGFueXdheS4gCisKKyAgICAgICAgVGhpcyBwYXRj
aCBhbHNvIGFkZHMgYSBuZXcgY29udmVuaWVuY2UgZnVuY3Rpb24gCisgICAgICAgIFRleHRJdGVy
YXRvcjo6bGVuZ3RoVG9JbnNlcnRpb25Qb2ludEZyb21QYXJhZ3JhcGhTdGFydCgpIHRoYXQgYWxs
IG9mIHRoZSAKKyAgICAgICAgY2FsbGVycyBvZiB0aGVzZSBzcGVsbCBjaGVja2luZyBmdW5jdGlv
bnMgY2FuIHVzZSBpbiBvcmRlciB0byBjb21wdXRlIHRoZSAKKyAgICAgICAgaW5zZXJ0aW9uIHBv
aW50LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc01pc3NwZWxsaW5nKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3BlbGxpbmcpOgorICAgICAg
ICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgICogZWRp
dGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yTWlz
c3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tl
ci5jcHA6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFk
R3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5oOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6c3VicmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEl0ZXJhdG9yOjpsZW5ndGhUb0luc2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0KToK
KyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5oOgorICAgICAgICAqIGxvYWRlci9FbXB0
eUNsaWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlUZXh0Q2hlY2tlckNsaWVudDo6
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50Lmg6CisKIDIwMTYt
MDMtMjggIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTZXR1cCBj
bG9uZWQgY29udGludWF0aW9uIHJlbmRlcmVyIHByb3Blcmx5LgpJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZp
c2lvbiAxOTg3NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNyArNDI0LDcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpoYXNNaXNzcGVsbGluZwogCiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hl
Y2tlckVuYWJsZWQoZnJhbWUpKSB7CiAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IHJlc3VsdHM7Ci0gICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlciwgc3Ry
aW5nVmFsdWUoKSwgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nLCByZXN1bHRzLCBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4
dENoZWNrZXIsIHN0cmluZ1ZhbHVlKCksIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0
cywgVGV4dEl0ZXJhdG9yOjpsZW5ndGhUb0luc2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0
KGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkpOwogICAgICAgICBpZiAoIXJlc3VsdHMu
aXNFbXB0eSgpKQogICAgICAgICAgICAgaXNNaXNzcGVsbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0
dXJuIGlzTWlzc3BlbGxlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
TWFjLm1tCShyZXZpc2lvbiAxOTg3NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTE1OCw3ICsxMTU4LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVs
bGluZwogICAgICAgICAKICAgICAgICAgLy8gY2hlY2tUZXh0T2ZQYXJhZ3JhcGggaXMgdGhlIG9u
bHkgc3BlbGxpbmcvZ3JhbW1hciBjaGVja2VyIGltcGxlbWVudGVkIGluIFdLMSBhbmQgV0syCiAg
ICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgICAgIGNoZWNr
VGV4dE9mUGFyYWdyYXBoKCpjaGVja2VyLCB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcs
IHJlc3VsdHMsIG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpOworICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqY2hlY2tlciwgdGV4dCwgVGV4dENo
ZWNraW5nVHlwZVNwZWxsaW5nLCByZXN1bHRzLCBUZXh0SXRlcmF0b3I6Omxlbmd0aFRvSW5zZXJ0
aW9uUG9pbnRGcm9tUGFyYWdyYXBoU3RhcnQobm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSkpOwogICAgICAgICAKICAgICAgICAgc2l6ZV90IHNpemUgPSBy
ZXN1bHRzLnNpemUoKTsKICAgICAgICAgTlNOdW1iZXIqIHRydWVWYWx1ZSA9IFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpZRVNdOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxOTg3NTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjp0aW1lckZpcgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIFN0cmluZyBwYXJhZ3Jh
cGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaChtX2FsdGVybmF0aXZlVGV4
dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJhbmdlKCkuZ2V0KCkpOwogICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+
Z2V0R3Vlc3Nlc0ZvcldvcmQobV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCwgcGFy
YWdyYXBoVGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMp
OworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2FsdGVybmF0aXZl
VGV4dEluZm8ub3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBUZXh0SXRlcmF0b3I6Omxlbmd0
aFRvSW5zZXJ0aW9uUG9pbnRGcm9tUGFyYWdyYXBoU3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSksIHN1Z2dlc3Rpb25zKTsKICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVy
bmF0aXZlID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMTk4NzUxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTI4LDcgKzIxMjgsNyBAQCBWZWN0b3I8
U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsCiAKICAgICBWZWN0b3I8U3RyaW5nPiBn
dWVzc2VzOwogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vl
c3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCksIGd1ZXNzZXMpOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZCh3
b3JkLCBTdHJpbmcoKSwgVGV4dEl0ZXJhdG9yOjpsZW5ndGhUb0luc2VydGlvblBvaW50RnJvbVBh
cmFncmFwaFN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLCBndWVzc2VzKTsK
ICAgICByZXR1cm4gZ3Vlc3NlczsKIH0KIApAQCAtMjQwMiw3ICsyNDAyLDcgQEAgdm9pZCBFZGl0
b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAgIH0KIAogICAgIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRD
aGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dCgpLCByZXNvbHZlVGV4dENoZWNraW5nVHlw
ZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyksIHJlc3VsdHMsIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkpOworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0Q2hlY2tlcigpLCBw
YXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKHRleHRD
aGVja2luZ09wdGlvbnMpLCByZXN1bHRzLCBUZXh0SXRlcmF0b3I6Omxlbmd0aFRvSW5zZXJ0aW9u
UG9pbnRGcm9tUGFyYWdyYXBoU3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkp
OwogICAgIG1hcmtBbmRSZXBsYWNlRm9yKHJlcXVlc3QucmVsZWFzZSgpLCByZXN1bHRzKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAkocmV2aXNpb24g
MTk4NzUxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZ0hlbHBlci5o
IgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE4MSw3ICsxODIsNyBAQCB2b2lkIFNwZWxsQ2hlY2tl
cjo6aW52b2tlUmVxdWVzdChQYXNzUmVmCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIG1fcHJvY2Vzc2luZ1JlcXVlc3QgPSByZXF1ZXN0OwotICAgIGNsaWVudCgpLT5y
ZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LCBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJp
bmcobV9wcm9jZXNzaW5nUmVxdWVzdCwgVGV4dEl0ZXJhdG9yOjpsZW5ndGhUb0luc2VydGlvblBv
aW50RnJvbVBhcmFncmFwaFN0YXJ0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpKTsK
IH0KIAogdm9pZCBTcGVsbENoZWNrZXI6OmVucXVldWVSZXF1ZXN0KFBhc3NSZWZQdHI8U3BlbGxD
aGVja1JlcXVlc3Q+IHJlcXVlc3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRD
aGVja2luZ0hlbHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCShyZXZpc2lvbiAxOTg3NTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Nywx
MCArMzQ3LDEwIEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3MKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiByZXN1bHRzOwogICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5n
VHlwZXMgPSBjaGVja0dyYW1tYXIgPyAoVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENo
ZWNraW5nVHlwZUdyYW1tYXIpIDogVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOwotICAgICAgICAg
ICAgICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbjsKKyAgICAgICAgICAgICAg
ICBpbnQgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IHBhcmFncmFwaFJhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqbV9jbGll
bnQtPnRleHRDaGVja2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tpbmdUeXBlcywgcmVzdWx0
cywgY3VycmVudFNlbGVjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aFRvSW5zZXJ0
aW9uUG9pbnQgPSBUZXh0SXRlcmF0b3I6Omxlbmd0aFRvSW5zZXJ0aW9uUG9pbnRGcm9tUGFyYWdy
YXBoU3RhcnQoZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgICAg
ICBjaGVja1RleHRPZlBhcmFncmFwaCgqbV9jbGllbnQtPnRleHRDaGVja2VyKCksIHBhcmFncmFw
aFN0cmluZywgY2hlY2tpbmdUeXBlcywgcmVzdWx0cywgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCk7
CiAKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJlc3VsdHMpIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGlu
ZyAmJiByZXN1bHQubG9jYXRpb24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC5sb2Nh
dGlvbiArIHJlc3VsdC5sZW5ndGggPD0gY3VycmVudEVuZE9mZnNldCkgewpAQCAtNTgyLDE2ICs1
ODIsMTYgQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzcwogCiAgICAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICBUZXh0Q2hlY2tpbmdUeXBl
TWFzayBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVs
bGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGlu
ZzsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CisgICAgaW50IGxlbmd0
aFRvSW5zZXJ0aW9uUG9pbnQgPSAwOwogICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX3JhbmdlLT5v
d25lckRvY3VtZW50KCkuZnJhbWUoKSkKLSAgICAgICAgY3VycmVudFNlbGVjdGlvbiA9IGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqbV9j
bGllbnQtPnRleHRDaGVja2VyKCksIHBhcmFncmFwaC50ZXh0KCksIGNoZWNraW5nVHlwZXMsIHJl
c3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24pOworICAgICAgICBsZW5ndGhUb0luc2VydGlvblBvaW50
ID0gVGV4dEl0ZXJhdG9yOjpsZW5ndGhUb0luc2VydGlvblBvaW50RnJvbVBhcmFncmFwaFN0YXJ0
KGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGgudGV4dCgpLCBjaGVja2luZ1R5
cGVzLCByZXN1bHRzLCBsZW5ndGhUb0luc2VydGlvblBvaW50KTsKIAogICAgIGZvciAoYXV0byYg
cmVzdWx0IDogcmVzdWx0cykgewogICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gVGV4dENoZWNr
aW5nVHlwZVNwZWxsaW5nICYmIHBhcmFncmFwaC5jaGVja2luZ1JhbmdlTWF0Y2hlcyhyZXN1bHQu
bG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpKSB7CiAgICAgICAgICAgICBTdHJpbmcgbWlzc3BlbGxl
ZFdvcmQgPSBwYXJhZ3JhcGguY2hlY2tpbmdTdWJzdHJpbmcoKTsKICAgICAgICAgICAgIEFTU0VS
VChtaXNzcGVsbGVkV29yZC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBtX2NsaWVudC0+dGV4dENo
ZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3BlbGxlZFdvcmQsIFN0cmluZygpLCBjdXJy
ZW50U2VsZWN0aW9uLCBndWVzc2VzKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT50ZXh0Q2hlY2tl
cigpLT5nZXRHdWVzc2VzRm9yV29yZChtaXNzcGVsbGVkV29yZCwgU3RyaW5nKCksIGxlbmd0aFRv
SW5zZXJ0aW9uUG9pbnQsIGd1ZXNzZXMpOwogICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOwogICAgICAgICAgICAg
bWlzc3BlbGxlZCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZ3Vlc3NlczsKQEAgLTY0NSwx
MCArNjQ1LDEwIEBAIGJvb2wgVGV4dENoZWNraW5nSGVscGVyOjp1bmlmaWVkVGV4dENoZWMKICAg
ICByZXR1cm4gbV9yYW5nZSAmJiBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1f
cmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKTsKIH0KIAotdm9pZCBjaGVja1RleHRPZlBh
cmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJpbmdWaWV3IHRleHQsIFRleHRD
aGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
JiByZXN1bHRzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQordm9p
ZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJpbmdW
aWV3IHRleHQsIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzLCBpbnQgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCkKIHsK
ICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHJlc3VsdHMgPSBjbGllbnQuY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgodGV4dCwgY2hlY2tpbmdUeXBlcywgY3VycmVudFNlbGVjdGlvbik7
CisgICAgcmVzdWx0cyA9IGNsaWVudC5jaGVja1RleHRPZlBhcmFncmFwaCh0ZXh0LCBjaGVja2lu
Z1R5cGVzLCBsZW5ndGhUb0luc2VydGlvblBvaW50KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KGN1cnJlbnRTZWxlY3Rpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRD
aGVja2luZ0hlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dENoZWNraW5nSGVscGVyLmgJKHJldmlzaW9uIDE5ODc1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMs
NyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi12b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRl
eHRDaGVja2VyQ2xpZW50JiwgU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ssIFZlY3Rv
cjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNl
bGVjdGlvbik7Cit2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xpZW50Jiwg
U3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2ssIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1
bHQ+JiwgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQpOwogCiBib29sIHVuaWZpZWRUZXh0Q2hl
Y2tlckVuYWJsZWQoY29uc3QgRnJhbWUqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTk4NzUxKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDU3LDYgKzI0NTcsMTMg
QEAgUmVmPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKFJhbmdlKgogICAgIHJldHVybiBj
aGFyYWN0ZXJTdWJyYW5nZShlbnRpcmVSYW5nZS0+b3duZXJEb2N1bWVudCgpLCBlbnRpcmVSYW5n
ZUl0ZXJhdG9yLCBjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3RlckNvdW50KTsKIH0KIAoraW50IFRl
eHRJdGVyYXRvcjo6bGVuZ3RoVG9JbnNlcnRpb25Qb2ludEZyb21QYXJhZ3JhcGhTdGFydChjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHNl
bGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVQb3Np
dGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwor
ICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhT
dGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGlz
SW5zaWRlUmVwbGFjZWRFbGVtZW50KFRleHRJdGVyYXRvciYgaXRlcmF0b3IpCiB7CiAgICAgQVNT
RVJUKCFpdGVyYXRvci5hdEVuZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRl
cmF0b3IuaAkocmV2aXNpb24gMTk4NzUxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkZp
bmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3JC
ZWhhdmlvci5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCkBAIC0xMTQsNiAr
MTE1LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdldExvY2F0
aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKE5vZGUqIHNjb3BlLCBjb25zdCBSYW5nZSosIHNpemVfdCYg
bG9jYXRpb24sIHNpemVfdCYgbGVuZ3RoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVm
PFJhbmdlPiBzdWJyYW5nZShSYW5nZSogZW50aXJlUmFuZ2UsIGludCBjaGFyYWN0ZXJPZmZzZXQs
IGludCBjaGFyYWN0ZXJDb3VudCk7CiAKKyAgICBzdGF0aWMgaW50IGxlbmd0aFRvSW5zZXJ0aW9u
UG9pbnRGcm9tUGFyYWdyYXBoU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworCiBwcml2
YXRlOgogICAgIHZvaWQgZXhpdE5vZGUoKTsKICAgICBib29sIHNob3VsZFJlcHJlc2VudE5vZGVP
ZmZzZXRaZXJvKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAko
cmV2aXNpb24gMTk4NzUxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOCw3ICsyMzgsNyBAQCBQYXNzUmVmUHRyPEZyYW1lTmV0
d29ya2luZ0NvbnRleHQ+IEVtcHR5CiAgICAgcmV0dXJuIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3Jr
aW5nQ29udGV4dD4oKTsKIH0KIAotdm9pZCBFbXB0eVRleHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJikKK3ZvaWQgRW1wdHlUZXh0Q2hlY2tlckNsaWVudDo6cmVxdWVzdENo
ZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiwgaW50KQogewog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAxOTg3
NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyNSwxMSArNDI1LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGNoZWNrR3JhbW1hck9m
U3RyaW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCosIGludCopIG92
ZXJyaWRlIHsgfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBUZXh0
Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIG92ZXJyaWRlIHsgcmV0
dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0KKyAgICBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBUZXh0Q2hlY2tpbmdU
eXBlTWFzaywgaW50KSBvdmVycmlkZSB7IHJldHVybiBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PigpOyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFZlY3RvcjxTdHJpbmc+
Jikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVm
UHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBpbnQsIFZlY3RvcjxTdHJpbmc+Jikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCByZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+LCBpbnQpIG92
ZXJyaWRlOwogfTsKIAogY2xhc3MgRW1wdHlFZGl0b3JDbGllbnQgOiBwdWJsaWMgRWRpdG9yQ2xp
ZW50IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVj
a2VyQ2xpZW50LmgJKHJldmlzaW9uIDE5ODc1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENoZWNrZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFZpc2libGVTZWxlY3Rpb247Ci0KIGNs
YXNzIFRleHRDaGVja2VyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0Q2hlY2tl
ckNsaWVudCgpIHt9CkBAIC01MSwxNCArNDksMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFpbD4m
LCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSA9IDA7CiAK
ICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZpcnR1YWwgVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENoZWNr
aW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbikgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4g
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hl
Y2tpbmdUeXBlcywgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQpID0gMDsKICNlbmRpZgogCiAg
ICAgLy8gRm9yIHNwZWxsY2hlY2tlcnMgdGhhdCBzdXBwb3J0IG11bHRpcGxlIGxhbmd1YWdlcywg
aXQncyBvZnRlbiBpbXBvcnRhbnQgdG8gYmUgYWJsZSB0byBpZGVudGlmeSB0aGUgbGFuZ3VhZ2Ug
aW4gb3JkZXIgdG8KICAgICAvLyBwcm92aWRlIG1vcmUgYWNjdXJhdGUgY29ycmVjdGlvbiBzdWdn
ZXN0aW9ucy4gQ2FsbGVyIGNhbiBwYXNzIGluIG1vcmUgdGV4dCBpbiAiY29udGV4dCIgdG8gYWlk
IHN1Y2ggc3BlbGxjaGVja2VycyBvbiBsYW5ndWFnZQogICAgIC8vIGlkZW50aWZpY2F0aW9uLiBO
b3JhbWxseSBpdCdzIHRoZSB0ZXh0IHN1cnJvdW5kaW5nIHRoZSAid29yZCIgZm9yIHdoaWNoIHdl
IGFyZSBnZXR0aW5nIGNvcnJlY3Rpb24gc3VnZ2VzdGlvbnMuCi0gICAgdmlydHVhbCB2b2lkIGdl
dEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uLCBWZWN0b3I8U3RyaW5n
PiYgZ3Vlc3NlcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBjdXJyZW50U2VsZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBpbnQgbGVuZ3Ro
VG9JbnNlcnRpb25Qb2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdS
ZXF1ZXN0PiwgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQpID0gMDsKIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE5ODc1MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE2LTAzLTI4ICBCZXRoIERha2luICA8
YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTcGVsbCBjaGVja2luZyBzaG91bGQgbm90IHVz
ZSBET00gdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NTkwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggbWFrZXMgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgsIHJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nLCBhbmQgCisgICAgICAgIGdldEd1ZXNzZXNGb3JXb3JkIHRha2UgYW4gaW50IGZv
ciB0aGUgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCBpbnN0ZWFkIG9mIGEgCisgICAgICAgIFZpc2li
bGVTZWxlY3Rpb24uIFRoZSBWaXNpYmxlU2VsZWN0aW9uIHdhcyBvbmx5IG5lZWRlZCB0byBleHRy
YWN0IHRoZSBpbnQgCisgICAgICAgIGFueXdheS4gCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVk
aXRvckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJF
ZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVk
aXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0Ojpp
bnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorCiAyMDE2LTAzLTI4
ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZp
eCB0aGUgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAxOTg3
NTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NiwxOSArNDc2LDEyIEBAIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmkKICAgICAqYmFkR3JhbW1hckxlbmd0aCA9
IHJlc3VsdExlbmd0aDsKIH0KIAotc3RhdGljIGludDMyX3QgaW5zZXJ0aW9uUG9pbnRGcm9tQ3Vy
cmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQot
ewotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3Rh
cnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0
KCkpOwotfQotCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLVZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5n
VmlldyBzdHJpbmdWaWV3LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5
cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQorVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChT
dHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNr
aW5nVHlwZXMsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50KQogewogICAgIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAKLSAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoKHN0cmluZ1ZpZXcudG9TdHJpbmdX
aXRob3V0Q29weWluZygpLCBjaGVja2luZ1R5cGVzLCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50
U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hl
Y2tUZXh0T2ZQYXJhZ3JhcGg6OlJlcGx5KHJlc3VsdHMpKTsKKyAgICBtX3BhZ2UtPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoKHN0cmluZ1ZpZXcu
dG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBjaGVja2luZ1R5cGVzLCBsZW5ndGhUb0luc2VydGlv
blBvaW50KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGg6OlJl
cGx5KHJlc3VsdHMpKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAtNTE2LDE5ICs1MDks
MTkgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNwZWxsaW5nVUlJc1Nob3dpbgogICAgIHJldHVy
biBpc1Nob3dpbmc7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29y
ZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2
b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3Jk
LCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50LCBWZWN0
b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIGNvbnRleHQsIGluc2VydGlvblBv
aW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikpLCBNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpHZXRHdWVzc2VzRm9yV29yZDo6UmVwbHkoZ3Vlc3NlcykpOworICAgIG1fcGFn
ZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0ZvcldvcmQod29y
ZCwgY29udGV4dCwgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkdldEd1ZXNzZXNGb3JXb3JkOjpSZXBseShndWVzc2VzKSk7CiB9CiAKLXZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQdHI8VGV4dENo
ZWNraW5nUmVxdWVzdD4gcHJwUmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlv
biYgY3VycmVudFNlbGVjdGlvbikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4gcHJwUmVxdWVz
dCwgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQpCiB7CiAgICAgUmVmUHRyPFRleHRDaGVja2lu
Z1JlcXVlc3Q+IHJlcXVlc3QgPSBwcnBSZXF1ZXN0OwogCiAgICAgdWludDY0X3QgcmVxdWVzdElE
ID0gZ2VuZXJhdGVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQoKTsKICAgICBtX3BhZ2UtPmFkZFRleHRD
aGVja2luZ1JlcXVlc3QocmVxdWVzdElELCByZXF1ZXN0KTsKIAotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhyZXF1ZXN0SUQs
IHJlcXVlc3QtPmRhdGEoKSwgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJy
ZW50U2VsZWN0aW9uKSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhyZXF1ZXN0SUQsIHJlcXVlc3QtPmRhdGEoKSwgbGVu
Z3RoVG9JbnNlcnRpb25Qb2ludCkpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFNl
dElucHV0TWV0aG9kU3RhdGUoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiAx
OTg3NTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMTYgKzEzOSwxNiBAQCBwcml2YXRl
OgogICAgIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKSBvdmVycmlkZTsKICAgICB2b2lkIGNoZWNrR3Jh
bW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYs
IGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIG92ZXJyaWRl
OwogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgVmVjdG9yPFdlYkNvcmU6OlRl
eHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgV2ViQ29y
ZTo6VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgV2ViQ29yZTo6Vmlz
aWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgb3ZlcnJpZGU7CisgICAgVmVjdG9yPFdl
YkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmll
dywgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgaW50IGxlbmd0
aFRvSW5zZXJ0aW9uUG9pbnQpIG92ZXJyaWRlOwogI2VuZGlmCiAgICAgdm9pZCB1cGRhdGVTcGVs
bGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6R3Jh
bW1hckRldGFpbCYpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNz
cGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHNob3dTcGVsbGlu
Z1VJKGJvb2wgc2hvdykgb3ZlcnJpZGU7CiAgICAgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQs
IGNvbnN0IFN0cmluZyYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYg
Y3VycmVudFNlbGVjdGlvbiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIG92ZXJyaWRlOworICAg
IHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcm
IGNvbnRleHQsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50LCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3Nlcykgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpIG92ZXJy
aWRlOwogICAgIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+LCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9u
JiBjdXJyZW50U2VsZWN0aW9uKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcXVlc3RDaGVja2luZ09m
U3RyaW5nKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PiwgaW50
IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQpIG92ZXJyaWRlOwogCiAjaWYgUExBVEZPUk0oR1RLKQog
ICAgIGJvb2wgc2hvdWxkU2hvd1VuaWNvZGVNZW51KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTg3NTEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxNi0wMy0yNSAgQmV0aCBEYWtpbiAg
PGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3BlbGwgY2hlY2tpbmcgc2hvdWxkIG5vdCB1
c2UgRE9NIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTU5MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHBhdGNoIG1ha2VzIGNoZWNrVGV4dE9mUGFyYWdyYXBoLCByZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZywgYW5kIAorICAgICAgICBnZXRHdWVzc2VzRm9yV29yZCB0YWtlIGFuIGludCBm
b3IgdGhlIGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQgaW5zdGVhZCBvZiBhIAorICAgICAgICBWaXNp
YmxlU2VsZWN0aW9uLiBUaGUgVmlzaWJsZVNlbGVjdGlvbiB3YXMgb25seSBuZWVkZWQgdG8gZXh0
cmFjdCB0aGUgaW50IAorICAgICAgICBhbnl3YXkuIAorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpwYXN0ZWJvYXJkQ2hhbmdlQ291
bnQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCk6Cisg
ICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKFdl
YkVkaXRvckNsaWVudDo6ZGlkQ2hlY2tTdWNjZWVkKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVu
dDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorICAgICAgICAoaW5zZXJ0aW9uUG9pbnRGcm9t
Q3VycmVudFNlbGVjdGlvbik6IERlbGV0ZWQuCisKIDIwMTYtMDMtMjQgIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLGNvbT4KIAogICAgICAgICBDaGFuZ2UgTmF0aXZlSW1h
Z2VQdHIgZm9yIENHIHRvIGJlIFJldGFpblB0cjxDR0ltYWdlUmVmPgpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJldmlz
aW9uIDE5ODc1MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMTYgKzE1OCwxNiBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCogbWlzc3BlbGxp
bmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkgb3ZlcnJpZGU7CiAgICAgU3RyaW5n
IGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVj
dG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGlu
dCogYmFkR3JhbW1hckxlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OlRleHRD
aGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgV2ViQ29yZTo6
VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgb3ZlcnJpZGU7CisgICAgVmVjdG9yPFdlYkNv
cmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywg
V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgaW50IGxlbmd0aFRv
SW5zZXJ0aW9uUG9pbnQpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwm
KSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQo
Y29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNo
b3cpIG92ZXJyaWRlOwogICAgIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJp
bmcmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxl
Y3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEd1
ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBp
bnQgbGVuZ3RoVG9JbnNlcnRpb25Qb2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpIG92ZXJyaWRlOwogICAg
IHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdSZXF1ZXN0PiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVj
dGlvbikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVm
UHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+LCBpbnQgbGVuZ3RoVG9JbnNlcnRpb25Q
b2ludCkgb3ZlcnJpZGU7CiAKICNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCiAgICAgdm9pZCByZXF1ZXN0Q2FuZGlkYXRlc0ZvclNl
bGVjdGlvbihjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJik7CkBAIC0yODAsNyArMjgw
LDcgQEAgaW5saW5lIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzcGVsbGluZ1VJSQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotaW5saW5lIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9y
V29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpWaXNpYmxl
U2VsZWN0aW9uJiwgVmVjdG9yPFN0cmluZz4mKQoraW5saW5lIHZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBpbnQsIFZl
Y3RvcjxTdHJpbmc+JikKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkocmV2aXNpb24gMTk4NzUxKQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC04ODEsNyArODgxLDcgQEAgaW50IFdlYkVkaXRvckNsaWVudDo6cGFzdGVi
b2FyZENoYW5nZUNvdQogICAgIHJldHVybiAwOwogfQogCi1WZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3Ry
aW5nLCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJikKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRDaGVja2luZ1R5cGVNYXNr
IGNoZWNraW5nVHlwZXMsIGludCkKIHsKICAgICBBU1NFUlQoY2hlY2tpbmdUeXBlcyAmIE5TVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nKTsKIApAQCAtMTA1MCwyMCArMTA1MCwxMSBAQCBzdGF0aWMg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShOCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9
CiAKLSNpZiBIQVZFKEFEVkFOQ0VEX1NQRUxMX0NIRUNLSU5HKQotc3RhdGljIGludCBpbnNlcnRp
b25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pCi17Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gY3Vy
cmVudFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdy
YXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICByZXR1cm4g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVj
dGlvblN0YXJ0KS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmlu
ZywgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgY3VycmVudFNlbGVjdGlvbikKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVk
aXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRD
aGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGludCBsZW5ndGhUb0luc2VydGlvblBvaW50
KQogewogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKICNpZiBIQVZFKEFEVkFOQ0VE
X1NQRUxMX0NIRUNLSU5HKQotICAgIG9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2luZ0luc2VydGlv
blBvaW50S2V5IDogIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlv
blBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbildIH07CisgICAgb3B0
aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVyIG51
bWJlcldpdGhVbnNpZ25lZEludGVnZXI6bGVuZ3RoVG9JbnNlcnRpb25Qb2ludF0gfTsKICNlbmRp
ZgogICAgIHJldHVybiBjb3JlKFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBj
aGVja1N0cmluZzpzdHJpbmcuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpLmdldCgpIHJh
bmdlOk5TTWFrZVJhbmdlKDAsIHN0cmluZy5sZW5ndGgoKSkgdHlwZXM6KGNoZWNraW5nVHlwZXMg
fCBOU1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeSkgb3B0aW9uczpvcHRpb25zIGluU3BlbGxE
b2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBvcnRob2dyYXBoeTpOVUxM
IHdvcmRDb3VudDpOVUxMXSwgY2hlY2tpbmdUeXBlcyk7CiB9CkBAIC0xMTAxLDcgKzEwOTIsNyBA
QCBib29sIFdlYkVkaXRvckNsaWVudDo6c3BlbGxpbmdVSUlzU2hvd2luCiAgICAgcmV0dXJuIFtb
W05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gc3BlbGxpbmdQYW5lbF0gaXNWaXNp
YmxlXTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0
IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpWaXNp
YmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykK
K3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdv
cmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQsIFZl
Y3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewogICAgIGd1ZXNzZXMuY2xlYXIoKTsKICAgICBOU1N0
cmluZyogbGFuZ3VhZ2UgPSBuaWw7CkBAIC0xMTA5LDcgKzExMDAsNyBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoCiAgICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIg
PSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKICAgICBOU0RpY3Rpb25hcnkg
Km9wdGlvbnMgPSBuaWw7CiAjaWYgSEFWRShBRFZBTkNFRF9TUEVMTF9DSEVDS0lORykKLSAgICBv
cHRpb25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleSA6ICBbTlNOdW1iZXIg
bnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0
aW9uKGN1cnJlbnRTZWxlY3Rpb24pXSB9OworICAgIG9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2lu
Z0luc2VydGlvblBvaW50S2V5IDogIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2Vy
Omxlbmd0aFRvSW5zZXJ0aW9uUG9pbnRdIH07CiAjZW5kaWYKICAgICBpZiAoY29udGV4dC5sZW5n
dGgoKSkgewogICAgICAgICBbY2hlY2tlciBjaGVja1N0cmluZzpjb250ZXh0IHJhbmdlOk5TTWFr
ZVJhbmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIHR5cGVzOk5TVGV4dENoZWNraW5nVHlwZU9ydGhv
Z3JhcGh5IG9wdGlvbnM6b3B0aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tl
ckRvY3VtZW50VGFnKCkgb3J0aG9ncmFwaHk6Jm9ydGhvZ3JhcGh5IHdvcmRDb3VudDowXTsKQEAg
LTEyODgsNyArMTI3OSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRDaGVja1N1Y2NlZWQo
aW4KIH0KICNlbmRpZgogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZT
dHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0LCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQordm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENo
ZWNraW5nUmVxdWVzdD4gcmVxdWVzdCwgaW50IGxlbmd0aFRvSW5zZXJ0aW9uUG9pbnQpCiB7CiAj
aWYgIVBMQVRGT1JNKElPUykKICAgICBBU1NFUlQoIW1fdGV4dENoZWNraW5nUmVxdWVzdCk7CkBA
IC0xMjk5LDcgKzEyOTAsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5n
T2ZTCiAgICAgTlNSdW5Mb29wKiBjdXJyZW50TG9vcCA9IFtOU1J1bkxvb3AgY3VycmVudFJ1bkxv
b3BdOwogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKICNpZiBIQVZFKEFEVkFOQ0VE
X1NQRUxMX0NIRUNLSU5HKQotICAgIG9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2luZ0luc2VydGlv
blBvaW50S2V5IDogIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlv
blBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbildIH07CisgICAgb3B0
aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVyIG51
bWJlcldpdGhVbnNpZ25lZEludGVnZXI6bGVuZ3RoVG9JbnNlcnRpb25Qb2ludF0gfTsKICNlbmRp
ZgogICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSByZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZzptX3RleHRDaGVja2luZ1JlcXVlc3QtPmRhdGEoKS50ZXh0KCkgcmFuZ2U6cmFu
Z2UgdHlwZXM6TlNUZXh0Q2hlY2tpbmdBbGxTeXN0ZW1UeXBlcyBvcHRpb25zOm9wdGlvbnMgaW5T
cGVsbERvY3VtZW50V2l0aFRhZzowIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNJbnRlZ2VyLCBOU0Fy
cmF5KiByZXN1bHRzLCBOU09ydGhvZ3JhcGh5KiwgTlNJbnRlZ2VyKSB7CiAgICAgICAgICAgICBb
Y3VycmVudExvb3AgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihwZXJmb3JtKSAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmNwcAkocmV2aXNpb24gMTk4NzUxKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ2LDcgKzg0Niw3IEBA
IGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzcGVsbGluZ1VJSXNTaG93aW4KICAgICByZXR1cm4gISFz
aG93aW5nOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29u
c3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpn
ZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4
dCwgaW50LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKICAgICBndWVzc2VzLmNsZWFyKCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5oCShyZXZpc2lvbiAxOTg3NTEpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDExICsx
MTAsMTEgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZChjb25zdCBXVEY6OlN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2hvd1NwZWxsaW5n
VUkoYm9vbCBzaG93KSBvdmVycmlkZTsKICAgICBib29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoKSBv
dmVycmlkZTsKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFdURjo6U3RyaW5nJiB3
b3JkLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNl
bGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbiwgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVz
c2VzKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFdURjo6U3Ry
aW5nJiB3b3JkLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGV4dCwgaW50IGxlbmd0aFRvSW5zZXJ0
aW9uUG9pbnQsIFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vlc3Nlcykgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBz
ZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdENoZWNr
aW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+
LCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJikgb3ZlcnJpZGUgeyB9CisgICAgdm9p
ZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENo
ZWNraW5nUmVxdWVzdD4sIGludCkgb3ZlcnJpZGUgeyB9CiAKICAgICBXZWJDb3JlOjpUZXh0Q2hl
Y2tlckNsaWVudCogdGV4dENoZWNrZXIoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275118</attachid>
            <date>2016-03-29 12:31:50 -0700</date>
            <delta_ts>2016-03-30 08:35:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-4.txt</filename>
            <type>text/plain</type>
            <size>32366</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODc1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTAzLTI4ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBTcGVsbCBjaGVja2luZyBzaG91bGQg
bm90IHVzZSBET00gdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NTkwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgsIHJlcXVlc3RD
aGVja2luZ09mU3RyaW5nLCBhbmQgCisgICAgICAgIGdldEd1ZXNzZXNGb3JXb3JkIHRha2UgYW4g
aW50IGZvciB0aGUgaW5zZXJ0aW9uUG9pbnRPZmZzZXQgaW5zdGVhZCBvZiBhIAorICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uLiBUaGUgVmlzaWJsZVNlbGVjdGlvbiB3YXMgb25seSBuZWVkZWQgdG8g
ZXh0cmFjdCB0aGUgaW50IAorICAgICAgICBhbnl3YXkuIAorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBhZGRzIGEgbmV3IGNvbnZlbmllbmNlIGZ1bmN0aW9uIAorICAgICAgICBUZXh0SXRlcmF0
b3I6Omluc2VydGlvblBvaW50T2Zmc2V0SW5QYXJhZ3JhcGgoKSB0aGF0IGFsbCBvZiB0aGUgCisg
ICAgICAgIGNhbGxlcnMgb2YgdGhlc2Ugc3BlbGwgY2hlY2tpbmcgZnVuY3Rpb25zIGNhbiB1c2Ug
aW4gb3JkZXIgdG8gY29tcHV0ZSB0aGUgCisgICAgICAgIGluc2VydGlvbiBwb2ludC4KKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNNaXNzcGVsbGluZyk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06Cisg
ICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldFNwZWxsaW5nKToKKyAgICAgICAgKiBlZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXJJblJhbmdlcyk6CisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwOgorICAg
ICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxl
ZE9yVW5ncmFtbWF0aWNhbFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hl
bHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpjaGVj
a1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
aDoKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRv
cjo6aW5zZXJ0aW9uUG9pbnRPZmZzZXRJblBhcmFncmFwaCk6CisgICAgICAgICogZWRpdGluZy9U
ZXh0SXRlcmF0b3IuaDoKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVtcHR5VGV4dENoZWNrZXJDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3Ry
aW5nKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oOgorCiAyMDE2LTAzLTI4ICBaYWxhbiBCdWp0YXMg
IDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2V0dXAgY2xvbmVkIGNvbnRpbnVhdGlvbiBy
ZW5kZXJlciBwcm9wZXJseS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMTk4NzUxKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDI0LDcgKzQyNCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFz
TWlzc3BlbGxpbmcKIAogICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKGZyYW1lKSkg
ewogICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgICAgICBj
aGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNrZXIsIHN0cmluZ1ZhbHVlKCksIFRleHRDaGVj
a2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cywgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
KTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1
ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMsIFRleHRJdGVyYXRvcjo6aW5z
ZXJ0aW9uUG9pbnRPZmZzZXRJblBhcmFncmFwaChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkpKTsKICAgICAgICAgaWYgKCFyZXN1bHRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGlzTWlz
c3BlbGxlZCA9IHRydWU7CiAgICAgICAgIHJldHVybiBpc01pc3NwZWxsZWQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTk4NzUxKQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNTgsNyArMTE1OCw3IEBAIHN0YXRpYyB2
b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3BlbGxpbmcKICAgICAgICAgCiAgICAgICAgIC8vIGNo
ZWNrVGV4dE9mUGFyYWdyYXBoIGlzIHRoZSBvbmx5IHNwZWxsaW5nL2dyYW1tYXIgY2hlY2tlciBp
bXBsZW1lbnRlZCBpbiBXSzEgYW5kIFdLMgogICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiByZXN1bHRzOwotICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqY2hlY2tlciwgdGV4
dCwgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nLCByZXN1bHRzLCBub2RlLT5kb2N1bWVudCgpLmZy
YW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoKmNoZWNrZXIsIHRleHQsIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cywg
VGV4dEl0ZXJhdG9yOjppbnNlcnRpb25Qb2ludE9mZnNldEluUGFyYWdyYXBoKG5vZGUtPmRvY3Vt
ZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpKTsKICAgICAgICAgCiAgICAg
ICAgIHNpemVfdCBzaXplID0gcmVzdWx0cy5zaXplKCk7CiAgICAgICAgIE5TTnVtYmVyKiB0cnVl
VmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMTk4NzUxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXIKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGgobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3JhcGhS
YW5nZSgpLmdldCgpKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAg
ICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fYWx0ZXJuYXRpdmVUZXh0SW5m
by5vcmlnaW5hbFRleHQsIHBhcmFncmFwaFRleHQsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCksIHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0Zv
cldvcmQobV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwg
VGV4dEl0ZXJhdG9yOjppbnNlcnRpb25Qb2ludE9mZnNldEluUGFyYWdyYXBoKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpLCBzdWdnZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0
aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5n
ZVdpdGhBbHRlcm5hdGl2ZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDE5ODc1MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyOCw3ICsyMTI4LDcg
QEAgVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbAogCiAgICAgVmVjdG9y
PFN0cmluZz4gZ3Vlc3NlczsKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVja2Vy
KCktPmdldEd1ZXNzZXNGb3JXb3JkKHdvcmQsIFN0cmluZygpLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLCBndWVzc2VzKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nl
c0ZvcldvcmQod29yZCwgU3RyaW5nKCksIFRleHRJdGVyYXRvcjo6aW5zZXJ0aW9uUG9pbnRPZmZz
ZXRJblBhcmFncmFwaChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSwgZ3Vlc3Nlcyk7
CiAgICAgcmV0dXJuIGd1ZXNzZXM7CiB9CiAKQEAgLTI0MDIsNyArMjQwMiw3IEBAIHZvaWQgRWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICB9CiAKICAgICBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCp0ZXh0
Q2hlY2tlcigpLCBwYXJhZ3JhcGhUb0NoZWNrLnRleHQoKSwgcmVzb2x2ZVRleHRDaGVja2luZ1R5
cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMpLCByZXN1bHRzLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpKTsKKyAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNrZXIoKSwg
cGFyYWdyYXBoVG9DaGVjay50ZXh0KCksIHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayh0ZXh0
Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cywgVGV4dEl0ZXJhdG9yOjppbnNlcnRpb25Qb2ludE9m
ZnNldEluUGFyYWdyYXBoKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpKTsKICAgICBt
YXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LnJlbGVhc2UoKSwgcmVzdWx0cyk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAJKHJldmlzaW9uIDE5ODc1MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4
dENoZWNrZXJDbGllbnQuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKKyNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0xODEsNyArMTgyLDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6Omludm9r
ZVJlcXVlc3QoUGFzc1JlZgogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICBjbGllbnQoKS0+cmVxdWVzdENo
ZWNraW5nT2ZTdHJpbmcobV9wcm9jZXNzaW5nUmVxdWVzdCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CisgICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKG1fcHJv
Y2Vzc2luZ1JlcXVlc3QsIFRleHRJdGVyYXRvcjo6aW5zZXJ0aW9uUG9pbnRPZmZzZXRJblBhcmFn
cmFwaChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSk7CiB9CiAKIHZvaWQgU3BlbGxD
aGVja2VyOjplbnF1ZXVlUmVxdWVzdChQYXNzUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1
ZXN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmNwcAkocmV2aXNpb24gMTk4NzUxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hl
Y2tpbmdIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsMTAgKzM0NywxMCBAQCBTdHJp
bmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzCiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICAg
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFt
bWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFy
KSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247CisgICAgICAgICAgICAgICAgaW50IGluc2VydGlvblBv
aW50T2Zmc2V0ID0gMDsKICAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gcGFyYWdy
YXBoUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICAgICAgICAgICAgICBj
dXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgICAg
ICAgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCptX2NsaWVudC0+dGV4dENoZWNrZXIoKSwg
cGFyYWdyYXBoU3RyaW5nLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzLCBjdXJyZW50U2VsZWN0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uUG9pbnRPZmZzZXQgPSBUZXh0SXRlcmF0
b3I6Omluc2VydGlvblBvaW50T2Zmc2V0SW5QYXJhZ3JhcGgoZnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpKTsKKyAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqbV9jbGll
bnQtPnRleHRDaGVja2VyKCksIHBhcmFncmFwaFN0cmluZywgY2hlY2tpbmdUeXBlcywgcmVzdWx0
cywgaW5zZXJ0aW9uUG9pbnRPZmZzZXQpOwogCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBy
ZXN1bHQgOiByZXN1bHRzKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9
PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0LmxvY2F0aW9uID49IGN1cnJlbnRT
dGFydE9mZnNldCAmJiByZXN1bHQubG9jYXRpb24gKyByZXN1bHQubGVuZ3RoIDw9IGN1cnJlbnRF
bmRPZmZzZXQpIHsKQEAgLTU4MiwxNiArNTgyLDE2IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVj
a2luZ0hlbHBlcjo6Z3Vlc3MKIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3Vs
dHM7CiAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1h
ciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikg
OiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50
U2VsZWN0aW9uOworICAgIGludCBpbnNlcnRpb25Qb2ludE9mZnNldCA9IDA7CiAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IG1fcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICBj
dXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGNo
ZWNrVGV4dE9mUGFyYWdyYXBoKCptX2NsaWVudC0+dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRl
eHQoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CisgICAgICAg
IGluc2VydGlvblBvaW50T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjppbnNlcnRpb25Qb2ludE9mZnNl
dEluUGFyYWdyYXBoKGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGgudGV4dCgp
LCBjaGVja2luZ1R5cGVzLCByZXN1bHRzLCBpbnNlcnRpb25Qb2ludE9mZnNldCk7CiAKICAgICBm
b3IgKGF1dG8mIHJlc3VsdCA6IHJlc3VsdHMpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09
IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNo
ZXMocmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKSkgewogICAgICAgICAgICAgU3RyaW5n
IG1pc3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoLmNoZWNraW5nU3Vic3RyaW5nKCk7CiAgICAgICAg
ICAgICBBU1NFUlQobWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9jbGll
bnQtPnRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBTdHJp
bmcoKSwgY3VycmVudFNlbGVjdGlvbiwgZ3Vlc3Nlcyk7CisgICAgICAgICAgICBtX2NsaWVudC0+
dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3BlbGxlZFdvcmQsIFN0cmluZygp
LCBpbnNlcnRpb25Qb2ludE9mZnNldCwgZ3Vlc3Nlcyk7CiAgICAgICAgICAgICBtX2NsaWVudC0+
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7CiAgICAg
ICAgICAgICBtaXNzcGVsbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBndWVzc2VzOwpA
QCAtNjQ1LDEwICs2NDUsMTAgQEAgYm9vbCBUZXh0Q2hlY2tpbmdIZWxwZXI6OnVuaWZpZWRUZXh0
Q2hlYwogICAgIHJldHVybiBtX3JhbmdlICYmIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVu
YWJsZWQobV9yYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkpOwogfQogCi12b2lkIGNoZWNr
VGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQsIFN0cmluZ1ZpZXcgdGV4
dCwgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4mIHJlc3VsdHMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rp
b24pCit2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQs
IFN0cmluZ1ZpZXcgdGV4dCwgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMsIGludCBpbnNlcnRpb25Qb2ludE9mZnNl
dCkKIHsKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHJlc3VsdHMgPSBjbGll
bnQuY2hlY2tUZXh0T2ZQYXJhZ3JhcGgodGV4dCwgY2hlY2tpbmdUeXBlcywgY3VycmVudFNlbGVj
dGlvbik7CisgICAgcmVzdWx0cyA9IGNsaWVudC5jaGVja1RleHRPZlBhcmFncmFwaCh0ZXh0LCBj
aGVja2luZ1R5cGVzLCBpbnNlcnRpb25Qb2ludE9mZnNldCk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShjdXJyZW50U2VsZWN0aW9uKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5oCShyZXZpc2lvbiAxOTg3NTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyAr
MTAzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotdm9pZCBjaGVja1RleHRPZlBhcmFncmFw
aChUZXh0Q2hlY2tlckNsaWVudCYsIFN0cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5cGVNYXNrLCBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pOwordm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVu
dCYsIFN0cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5cGVNYXNrLCBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiYsIGludCBpbnNlcnRpb25Qb2ludE9mZnNldCk7CiAKIGJvb2wgdW5pZmllZFRleHRD
aGVja2VyRW5hYmxlZChjb25zdCBGcmFtZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxOTg3NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NTcsNiArMjQ1Nywx
MyBAQCBSZWY8UmFuZ2U+IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoUmFuZ2UqCiAgICAgcmV0dXJu
IGNoYXJhY3RlclN1YnJhbmdlKGVudGlyZVJhbmdlLT5vd25lckRvY3VtZW50KCksIGVudGlyZVJh
bmdlSXRlcmF0b3IsIGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogfQogCitpbnQg
VGV4dEl0ZXJhdG9yOjppbnNlcnRpb25Qb2ludE9mZnNldEluUGFyYWdyYXBoKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9u
U3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBh
cmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgcmV0
dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBz
ZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNJbnNpZGVS
ZXBsYWNlZEVsZW1lbnQoVGV4dEl0ZXJhdG9yJiBpdGVyYXRvcikKIHsKICAgICBBU1NFUlQoIWl0
ZXJhdG9yLmF0RW5kKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5o
CShyZXZpc2lvbiAxOTg3NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRmluZE9wdGlv
bnMuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvckJlaGF2aW9y
LmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKQEAgLTExNCw2ICsxMTUsOCBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ2V0TG9jYXRpb25BbmRM
ZW5ndGhGcm9tUmFuZ2UoTm9kZSogc2NvcGUsIGNvbnN0IFJhbmdlKiwgc2l6ZV90JiBsb2NhdGlv
biwgc2l6ZV90JiBsZW5ndGgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8UmFuZ2U+
IHN1YnJhbmdlKFJhbmdlKiBlbnRpcmVSYW5nZSwgaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNo
YXJhY3RlckNvdW50KTsKIAorICAgIHN0YXRpYyBpbnQgaW5zZXJ0aW9uUG9pbnRPZmZzZXRJblBh
cmFncmFwaChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CisKIHByaXZhdGU6CiAgICAgdm9pZCBl
eGl0Tm9kZSgpOwogICAgIGJvb2wgc2hvdWxkUmVwcmVzZW50Tm9kZU9mZnNldFplcm8oKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCShyZXZpc2lvbiAxOTg3NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjM4LDcgKzIzOCw3IEBAIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29udGV4dD4g
RW1wdHkKICAgICByZXR1cm4gUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0PigpOwog
fQogCi12b2lkIEVtcHR5VGV4dENoZWNrZXJDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5n
KFBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
KQordm9pZCBFbXB0eVRleHRDaGVja2VyQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQ
YXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+LCBpbnQpCiB7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDE5ODc1MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDI1LDExICs0
MjUsMTEgQEAgcHVibGljOgogICAgIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmll
dywgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiwgaW50Kikgb3ZlcnJpZGUgeyB9CiAKICNp
ZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1
bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5cGVNYXNr
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgb3ZlcnJpZGUgeyByZXR1cm4gVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4oKTsgfQorICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNr
VGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5cGVNYXNrLCBpbnQpIG92
ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0KICNlbmRpZgog
Ci0gICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgVmVjdG9yPFN0cmluZz4mKSBvdmVycmlkZSB7IH0K
LSAgICB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNraW5n
UmVxdWVzdD4sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIGdl
dEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGludCwgVmVjdG9y
PFN0cmluZz4mKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5n
KFBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4sIGludCkgb3ZlcnJpZGU7CiB9OwogCiBj
bGFzcyBFbXB0eUVkaXRvckNsaWVudCA6IHB1YmxpYyBFZGl0b3JDbGllbnQgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaAkocmV2
aXNpb24gMTk4NzUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tl
ckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKLQogY2xhc3MgVGV4dENoZWNrZXJD
bGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgflRleHRDaGVja2VyQ2xpZW50KCkge30KQEAg
LTUxLDE0ICs0OSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9m
U3RyaW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1h
ckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpID0gMDsKIAogI2lmIFVTRShVTklGSUVE
X1RFWFRfQ0hFQ0tJTkcpCi0gICAgdmlydHVhbCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBj
aGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVj
a2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKSA9IDA7
CisgICAgdmlydHVhbCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFn
cmFwaChTdHJpbmdWaWV3LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBpbnQg
aW5zZXJ0aW9uUG9pbnRPZmZzZXQpID0gMDsKICNlbmRpZgogCiAgICAgLy8gRm9yIHNwZWxsY2hl
Y2tlcnMgdGhhdCBzdXBwb3J0IG11bHRpcGxlIGxhbmd1YWdlcywgaXQncyBvZnRlbiBpbXBvcnRh
bnQgdG8gYmUgYWJsZSB0byBpZGVudGlmeSB0aGUgbGFuZ3VhZ2UgaW4gb3JkZXIgdG8KICAgICAv
LyBwcm92aWRlIG1vcmUgYWNjdXJhdGUgY29ycmVjdGlvbiBzdWdnZXN0aW9ucy4gQ2FsbGVyIGNh
biBwYXNzIGluIG1vcmUgdGV4dCBpbiAiY29udGV4dCIgdG8gYWlkIHN1Y2ggc3BlbGxjaGVja2Vy
cyBvbiBsYW5ndWFnZQogICAgIC8vIGlkZW50aWZpY2F0aW9uLiBOb3JhbWxseSBpdCdzIHRoZSB0
ZXh0IHN1cnJvdW5kaW5nIHRoZSAid29yZCIgZm9yIHdoaWNoIHdlIGFyZSBnZXR0aW5nIGNvcnJl
Y3Rpb24gc3VnZ2VzdGlvbnMuCi0gICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNv
bnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRD
aGVja2luZ1JlcXVlc3Q+LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9u
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYg
d29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBpbnQgaW5zZXJ0aW9uUG9pbnRPZmZzZXQsIFZl
Y3RvcjxTdHJpbmc+JiBndWVzc2VzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4sIGludCBpbnNlcnRp
b25Qb2ludE9mZnNldCkgPSAwOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4
NzUzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjMgQEAKKzIwMTYtMDMtMjggIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFNwZWxsIGNoZWNraW5nIHNob3VsZCBub3QgdXNlIERPTSB0eXBlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1OTA4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBj
aGVja1RleHRPZlBhcmFncmFwaCwgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcsIGFuZCAKKyAgICAg
ICAgZ2V0R3Vlc3Nlc0ZvcldvcmQgdGFrZSBhbiBpbnQgZm9yIHRoZSBpbnNlcnRpb25Qb2ludE9m
ZnNldCBpbnN0ZWFkIG9mIGEgCisgICAgICAgIFZpc2libGVTZWxlY3Rpb24uIFRoZSBWaXNpYmxl
U2VsZWN0aW9uIHdhcyBvbmx5IG5lZWRlZCB0byBleHRyYWN0IHRoZSBpbnQgCisgICAgICAgIGFu
eXdheS4gCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFtbWFy
T2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9m
UGFyYWdyYXBoKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2Vz
Rm9yV29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNr
aW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50
U2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oOgorCiAyMDE2LTAzLTI4ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBw
bGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCB0aGUgYnVpbGQuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAxOTg3NTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3NiwxOSArNDc2LDEyIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1t
YXJPZlN0cmkKICAgICAqYmFkR3JhbW1hckxlbmd0aCA9IHJlc3VsdExlbmd0aDsKIH0KIAotc3Rh
dGljIGludDMyX3QgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQotewotICAgIFZpc2libGVQb3NpdGlvbiBz
ZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25T
dGFydCk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBh
cmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotfQotCiAjaWYgVVNFKFVOSUZJ
RURfVEVYVF9DSEVDS0lORykKLVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNs
aWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBjdXJyZW50U2VsZWN0aW9uKQorVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRp
dG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFdl
YkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGludCBpbnNlcnRpb25Q
b2ludE9mZnNldCkKIHsKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwog
Ci0gICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVja1RleHRP
ZlBhcmFncmFwaChzdHJpbmdWaWV3LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgY2hlY2tpbmdU
eXBlcywgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9u
KSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoOjpSZXBseShy
ZXN1bHRzKSk7CisgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpD
aGVja1RleHRPZlBhcmFncmFwaChzdHJpbmdWaWV3LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwg
Y2hlY2tpbmdUeXBlcywgaW5zZXJ0aW9uUG9pbnRPZmZzZXQpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpDaGVja1RleHRPZlBhcmFncmFwaDo6UmVwbHkocmVzdWx0cykpOwogCiAgICAgcmV0dXJu
IHJlc3VsdHM7CiB9CkBAIC01MTYsMTkgKzUwOSwxOSBAQCBib29sIFdlYkVkaXRvckNsaWVudDo6
c3BlbGxpbmdVSUlzU2hvd2luCiAgICAgcmV0dXJuIGlzU2hvd2luZzsKIH0KIAotdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3Qg
U3RyaW5nJiBjb250ZXh0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9u
LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVz
c2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50
IGluc2VydGlvblBvaW50T2Zmc2V0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAgICBt
X3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldEd1ZXNzZXNGb3JXb3Jk
KHdvcmQsIGNvbnRleHQsIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVu
dFNlbGVjdGlvbikpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2VzRm9yV29yZDo6
UmVwbHkoZ3Vlc3NlcykpOworICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6R2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgY29udGV4dCwgaW5zZXJ0aW9uUG9pbnRPZmZz
ZXQpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRHdWVzc2VzRm9yV29yZDo6UmVwbHkoZ3Vl
c3NlcykpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJp
bmcoV1RGOjpQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+IHBycFJlcXVlc3QsIGNvbnN0
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCit2b2lkIFdlYkVk
aXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFRleHRD
aGVja2luZ1JlcXVlc3Q+IHBycFJlcXVlc3QsIGludCBpbnNlcnRpb25Qb2ludE9mZnNldCkKIHsK
ICAgICBSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4gcmVxdWVzdCA9IHBycFJlcXVlc3Q7CiAK
ICAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSBnZW5lcmF0ZVRleHRDaGVja2luZ1JlcXVlc3RJRCgp
OwogICAgIG1fcGFnZS0+YWRkVGV4dENoZWNraW5nUmVxdWVzdChyZXF1ZXN0SUQsIHJlcXVlc3Qp
OwogCi0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKHJlcXVlc3RJRCwgcmVxdWVzdC0+ZGF0YSgpLCBpbnNlcnRpb25Qb2ludEZy
b21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSk7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHJlcXVlc3RJ
RCwgcmVxdWVzdC0+ZGF0YSgpLCBpbnNlcnRpb25Qb2ludE9mZnNldCkpOwogfQogCiB2b2lkIFdl
YkVkaXRvckNsaWVudDo6d2lsbFNldElucHV0TWV0aG9kU3RhdGUoKQpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5oCShyZXZpc2lvbiAxOTg3NTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzks
MTYgKzEzOSwxNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rp
b25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKSBvdmVycmlk
ZTsKICAgICB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxXZWJD
b3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdy
YW1tYXJMZW5ndGgpIG92ZXJyaWRlOwogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0g
ICAgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoU3RyaW5nVmlldywgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBl
cywgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikgb3Zl
cnJpZGU7CisgICAgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU1hc2sgY2hl
Y2tpbmdUeXBlcywgaW50IGluc2VydGlvblBvaW50T2Zmc2V0KSBvdmVycmlkZTsKICNlbmRpZgog
ICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0
ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpIG92ZXJyaWRlOwogICAgIGJvb2wgc3Bl
bGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQo
Y29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6
OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24sIFZlY3RvcjxTdHJpbmc+JiBndWVz
c2VzKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYg
d29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBpbnQgaW5zZXJ0aW9uUG9pbnRPZmZzZXQsIFZl
Y3RvcjxTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsKICAgICB2b2lkIHdpbGxTZXRJbnB1dE1l
dGhvZFN0YXRlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wg
ZW5hYmxlZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0IFdlYkNvcmU6
OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92ZXJyaWRlOworICAgIHZvaWQg
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVj
a2luZ1JlcXVlc3Q+LCBpbnQgaW5zZXJ0aW9uUG9pbnRPZmZzZXQpIG92ZXJyaWRlOwogCiAjaWYg
UExBVEZPUk0oR1RLKQogICAgIGJvb2wgc2hvdWxkU2hvd1VuaWNvZGVNZW51KCkgb3ZlcnJpZGU7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTg3NTEpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxNi0wMy0y
NSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3BlbGwgY2hlY2tp
bmcgc2hvdWxkIG5vdCB1c2UgRE9NIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU5MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGNoZWNrVGV4dE9mUGFyYWdyYXBo
LCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZywgYW5kIAorICAgICAgICBnZXRHdWVzc2VzRm9yV29y
ZCB0YWtlIGFuIGludCBmb3IgdGhlIGluc2VydGlvblBvaW50T2Zmc2V0IGluc3RlYWQgb2YgYSAK
KyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbi4gVGhlIFZpc2libGVTZWxlY3Rpb24gd2FzIG9ubHkg
bmVlZGVkIHRvIGV4dHJhY3QgdGhlIGludCAKKyAgICAgICAgYW55d2F5LiAKKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6cGFzdGVi
b2FyZENoYW5nZUNvdW50KToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZCk6
CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRpZENoZWNrU3VjY2VlZCk6CisgICAgICAgIChX
ZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKyAgICAgICAgKGluc2Vy
dGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24pOiBEZWxldGVkLgorCiAyMDE2LTAzLTI0ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CiAKICAgICAgICAgQ2hh
bmdlIE5hdGl2ZUltYWdlUHRyIGZvciBDRyB0byBiZSBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oCShyZXZpc2lvbiAxOTg3NTEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDE2ICsxNTgsMTYg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJpbmdWaWV3LCBp
bnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpIG92ZXJyaWRl
OwogICAgIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKFN0
cmluZ1ZpZXcsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1h
ckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIG92ZXJyaWRlOwotICAgIFZlY3RvcjxX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1Zp
ZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGNvbnN0IFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pIG92ZXJyaWRlOworICAg
IFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBo
KFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMs
IGludCBpbnNlcnRpb25Qb2ludE9mZnNldCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB1cGRhdGVTcGVs
bGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6R3Jh
bW1hckRldGFpbCYpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNz
cGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHNob3dTcGVsbGlu
Z1VJKGJvb2wgc2hvdykgb3ZlcnJpZGU7CiAgICAgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQs
IGNvbnN0IFN0cmluZyYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYg
Y3VycmVudFNlbGVjdGlvbiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpIG92ZXJyaWRlOworICAg
IHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcm
IGNvbnRleHQsIGludCBpbnNlcnRpb25Qb2ludE9mZnNldCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNz
ZXMpIG92ZXJyaWRlOwogCiAgICAgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpIG92ZXJy
aWRlOwogICAgIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdSZXF1ZXN0PiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYgY3Vy
cmVudFNlbGVjdGlvbikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+LCBpbnQgaW5zZXJ0aW9u
UG9pbnRPZmZzZXQpIG92ZXJyaWRlOwogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAogICAgIHZvaWQgcmVxdWVzdENhbmRpZGF0
ZXNGb3JTZWxlY3Rpb24oY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYpOwpAQCAtMjgw
LDcgKzI4MCw3IEBAIGlubGluZSBib29sIFdlYkVkaXRvckNsaWVudDo6c3BlbGxpbmdVSUkKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSB2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbiYsIFZlY3RvcjxTdHJpbmc+JikKK2lubGluZSB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
aW50LCBWZWN0b3I8U3RyaW5nPiYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHJldmlzaW9uIDE5ODc1
MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtODgxLDcgKzg4MSw3IEBAIGludCBXZWJFZGl0b3JDbGllbnQ6
OnBhc3RlYm9hcmRDaGFuZ2VDb3UKICAgICByZXR1cm4gMDsKIH0KIAotVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdW
aWV3IHN0cmluZywgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYpCitWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGll
bnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0Q2hlY2tpbmdU
eXBlTWFzayBjaGVja2luZ1R5cGVzLCBpbnQpCiB7CiAgICAgQVNTRVJUKGNoZWNraW5nVHlwZXMg
JiBOU1RleHRDaGVja2luZ1R5cGVTcGVsbGluZyk7CiAKQEAgLTEwNTAsMjAgKzEwNTAsMTEgQEAg
c3RhdGljIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNvcmUoTgogICAgIHJldHVybiByZXN1
bHRzOwogfQogCi0jaWYgSEFWRShBRFZBTkNFRF9TUEVMTF9DSEVDS0lORykKLXN0YXRpYyBpbnQg
aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBjdXJyZW50U2VsZWN0aW9uKQotewotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFy
dCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAg
cmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0
LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotfQotI2VuZGlmCi0KLVZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmll
dyBzdHJpbmcsIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCitWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5n
LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBpbnQgaW5zZXJ0aW9uUG9pbnRP
ZmZzZXQpCiB7CiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOwogI2lmIEhBVkUoQURW
QU5DRURfU1BFTExfQ0hFQ0tJTkcpCi0gICAgb3B0aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5z
ZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6aW5z
ZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKV0gfTsKKyAg
ICBvcHRpb25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleSA6ICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludE9mZnNldF0gfTsKICNl
bmRpZgogICAgIHJldHVybiBjb3JlKFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2Vy
XSBjaGVja1N0cmluZzpzdHJpbmcuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpLmdldCgp
IHJhbmdlOk5TTWFrZVJhbmdlKDAsIHN0cmluZy5sZW5ndGgoKSkgdHlwZXM6KGNoZWNraW5nVHlw
ZXMgfCBOU1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeSkgb3B0aW9uczpvcHRpb25zIGluU3Bl
bGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBvcnRob2dyYXBoeTpO
VUxMIHdvcmRDb3VudDpOVUxMXSwgY2hlY2tpbmdUeXBlcyk7CiB9CkBAIC0xMTAxLDcgKzEwOTIs
NyBAQCBib29sIFdlYkVkaXRvckNsaWVudDo6c3BlbGxpbmdVSUlzU2hvd2luCiAgICAgcmV0dXJu
IFtbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gc3BlbGxpbmdQYW5lbF0gaXNW
aXNpYmxlXTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNv
bnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpW
aXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nl
cykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcm
IHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50IGluc2VydGlvblBvaW50T2Zmc2V0LCBW
ZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKICAgICBndWVzc2VzLmNsZWFyKCk7CiAgICAgTlNT
dHJpbmcqIGxhbmd1YWdlID0gbmlsOwpAQCAtMTEwOSw3ICsxMTAwLDcgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKAogICAgIE5TU3BlbGxDaGVja2VyICpjaGVja2Vy
ID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07CiAgICAgTlNEaWN0aW9uYXJ5
ICpvcHRpb25zID0gbmlsOwogI2lmIEhBVkUoQURWQU5DRURfU1BFTExfQ0hFQ0tJTkcpCi0gICAg
b3B0aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVy
IG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVj
dGlvbihjdXJyZW50U2VsZWN0aW9uKV0gfTsKKyAgICBvcHRpb25zID0gQHsgTlNUZXh0Q2hlY2tp
bmdJbnNlcnRpb25Qb2ludEtleSA6ICBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdl
cjppbnNlcnRpb25Qb2ludE9mZnNldF0gfTsKICNlbmRpZgogICAgIGlmIChjb250ZXh0Lmxlbmd0
aCgpKSB7CiAgICAgICAgIFtjaGVja2VyIGNoZWNrU3RyaW5nOmNvbnRleHQgcmFuZ2U6TlNNYWtl
UmFuZ2UoMCwgY29udGV4dC5sZW5ndGgoKSkgdHlwZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9n
cmFwaHkgb3B0aW9uczpvcHRpb25zIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2Vy
RG9jdW1lbnRUYWcoKSBvcnRob2dyYXBoeTomb3J0aG9ncmFwaHkgd29yZENvdW50OjBdOwpAQCAt
MTI4OCw3ICsxMjc5LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZENoZWNrU3VjY2VlZChp
bgogfQogI2VuZGlmCiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyhQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+IHJlcXVlc3QsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCit2b2lkIFdlYkVkaXRvckNs
aWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdSZXF1ZXN0PiByZXF1ZXN0LCBpbnQgaW5zZXJ0aW9uUG9pbnRPZmZzZXQpCiB7CiAjaWYg
IVBMQVRGT1JNKElPUykKICAgICBBU1NFUlQoIW1fdGV4dENoZWNraW5nUmVxdWVzdCk7CkBAIC0x
Mjk5LDcgKzEyOTAsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZT
CiAgICAgTlNSdW5Mb29wKiBjdXJyZW50TG9vcCA9IFtOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3Bd
OwogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKICNpZiBIQVZFKEFEVkFOQ0VEX1NQ
RUxMX0NIRUNLSU5HKQotICAgIG9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2luZ0luc2VydGlvblBv
aW50S2V5IDogIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBv
aW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbildIH07CisgICAgb3B0aW9u
cyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVyIG51bWJl
cldpdGhVbnNpZ25lZEludGVnZXI6aW5zZXJ0aW9uUG9pbnRPZmZzZXRdIH07CiAjZW5kaWYKICAg
ICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gcmVxdWVzdENoZWNraW5nT2ZT
dHJpbmc6bV90ZXh0Q2hlY2tpbmdSZXF1ZXN0LT5kYXRhKCkudGV4dCgpIHJhbmdlOnJhbmdlIHR5
cGVzOk5TVGV4dENoZWNraW5nQWxsU3lzdGVtVHlwZXMgb3B0aW9uczpvcHRpb25zIGluU3BlbGxE
b2N1bWVudFdpdGhUYWc6MCBjb21wbGV0aW9uSGFuZGxlcjpeKE5TSW50ZWdlciwgTlNBcnJheSog
cmVzdWx0cywgTlNPcnRob2dyYXBoeSosIE5TSW50ZWdlcikgewogICAgICAgICAgICAgW2N1cnJl
bnRMb29wIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocGVyZm9ybSkgCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJ
KHJldmlzaW9uIDE5ODc1MSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0Niw3ICs4NDYsNyBAQCBib29s
IFdlYkVkaXRvckNsaWVudDo6c3BlbGxpbmdVSUlzU2hvd2luCiAgICAgcmV0dXJuICEhc2hvd2lu
ZzsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0
cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGlu
dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7CiAgICAgZ3Vlc3Nlcy5jbGVhcigpOwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaAkocmV2aXNpb24gMTk4NzUxKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCwxMSArMTEwLDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQo
Y29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHNob3dTcGVsbGluZ1VJKGJv
b2wgc2hvdykgb3ZlcnJpZGU7CiAgICAgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBXVEY6OlN0cmluZyYgd29yZCwg
Y29uc3QgV1RGOjpTdHJpbmcmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rp
b24mIGN1cnJlbnRTZWxlY3Rpb24sIFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vlc3Nlcykg
b3ZlcnJpZGU7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBXVEY6OlN0cmluZyYg
d29yZCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRleHQsIGludCBpbnNlcnRpb25Qb2ludE9mZnNl
dCwgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldElucHV0
TWV0aG9kU3RhdGUoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4sIGNvbnN0
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHJlcXVl
c3RDaGVja2luZ09mU3RyaW5nKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdS
ZXF1ZXN0PiwgaW50KSBvdmVycmlkZSB7IH0KIAogICAgIFdlYkNvcmU6OlRleHRDaGVja2VyQ2xp
ZW50KiB0ZXh0Q2hlY2tlcigpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KIAo=
</data>
<flag name="review"
          id="299489"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>