<?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>126856</bug_id>
          
          <creation_ts>2014-01-12 15:24:30 -0800</creation_ts>
          <short_desc>TextBreakIterator&apos;s should support Latin-1 for all iterator types</short_desc>
          <delta_ts>2014-01-21 23:38:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>buildbot</cc>
    
    <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ltilve+ews</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>967055</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-12 15:24:30 -0800</bug_when>
    <thetext>TextBreakIterator&apos;s should support Latin-1 for all iterator types so we don&apos;t need to convert to UTF-16 unnecessarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967061</commentid>
    <comment_count>1</comment_count>
      <attachid>220987</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-12 15:36:35 -0800</bug_when>
    <thetext>Created attachment 220987
Part 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967066</commentid>
    <comment_count>2</comment_count>
      <attachid>220987</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-01-12 15:45:32 -0800</bug_when>
    <thetext>Comment on attachment 220987
Part 1

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

&gt; Source/WebCore/platform/text/TextBreakIteratorICU.cpp:61
&gt; +static TextBreakIterator* setTextForIterator(TextBreakIterator* iterator, StringView string)

Should this take a reference instead of a pointer?

&gt; Source/WebCore/platform/text/TextBreakIteratorICU.cpp:77
&gt; +        ubrk_setUText(reinterpret_cast&lt;UBreakIterator*&gt;(iterator), text, &amp;setTextStatus);

I’d like to see a helper function so we have only one reinterpret_cast instead of many. Or maybe just transition to use UBreakIterator directly since we don’t need a non-ICU abstraction for this.

&gt; Source/WebCore/platform/text/TextBreakIteratorICU.cpp:143
&gt; +TextBreakIterator* wordBreakIterator(const UChar* buffer, int length)

Why not make this take a StringView too?

&gt; Source/WebCore/platform/text/TextBreakIteratorICU.cpp:152
&gt; +TextBreakIterator* sentenceBreakIterator(const UChar* buffer, int length)

And this.

&gt; Source/WebCore/platform/text/TextBreakIteratorICU.cpp:161
&gt; +TextBreakIterator* cursorMovementIterator(const UChar* buffer, int length)

And this.

&gt; Source/WebCore/platform/text/TextBreakIteratorICU.cpp:267
&gt; +void releaseLineBreakIterator(TextBreakIterator* iterator)

Reference?

&gt; Source/WebCore/platform/text/TextBreakIteratorICU.cpp:356
&gt; +// Iterator implemenation.
&gt; +
&gt; +int textBreakFirst(TextBreakIterator* iterator)
&gt; +{
&gt; +    return ubrk_first(reinterpret_cast&lt;UBreakIterator*&gt;(iterator));
&gt; +}
&gt; +
&gt; +int textBreakLast(TextBreakIterator* iterator)
&gt; +{
&gt; +    return ubrk_last(reinterpret_cast&lt;UBreakIterator*&gt;(iterator));
&gt; +}
&gt; +
&gt; +int textBreakNext(TextBreakIterator* iterator)
&gt; +{
&gt; +    return ubrk_next(reinterpret_cast&lt;UBreakIterator*&gt;(iterator));
&gt; +}
&gt; +
&gt; +int textBreakPrevious(TextBreakIterator* iterator)
&gt; +{
&gt; +    return ubrk_previous(reinterpret_cast&lt;UBreakIterator*&gt;(iterator));
&gt; +}
&gt; +
&gt; +int textBreakPreceding(TextBreakIterator* iterator, int pos)
&gt; +{
&gt; +    return ubrk_preceding(reinterpret_cast&lt;UBreakIterator*&gt;(iterator), pos);
&gt; +}
&gt; +
&gt; +int textBreakFollowing(TextBreakIterator* iterator, int pos)
&gt; +{
&gt; +    return ubrk_following(reinterpret_cast&lt;UBreakIterator*&gt;(iterator), pos);
&gt; +}
&gt; +
&gt; +int textBreakCurrent(TextBreakIterator* iterator)
&gt; +{
&gt; +    return ubrk_current(reinterpret_cast&lt;UBreakIterator*&gt;(iterator));
&gt; +}
&gt; +
&gt; +bool isTextBreak(TextBreakIterator* iterator, int position)
&gt; +{
&gt; +    return ubrk_isBoundary(reinterpret_cast&lt;UBreakIterator*&gt;(iterator), position);
&gt; +}
&gt; +
&gt; +bool isWordTextBreak(TextBreakIterator* iterator)
&gt; +{
&gt; +    int ruleStatus = ubrk_getRuleStatus(reinterpret_cast&lt;UBreakIterator*&gt;(iterator));
&gt; +    return ruleStatus != UBRK_WORD_NONE;
&gt;  }

This should all just go. It’s a wrapper that we don’t need.

&gt; Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:46
&gt; +    0, 0, 0,

Some nullptr maybe?

&gt; Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:52
&gt; +    0,
&gt; +    0,

Some nullptr maybe?

&gt; Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:56
&gt; +    0, 0, 0

Some nullptr maybe?

&gt; Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:64
&gt; +        return 0;

nullptr

&gt; Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:72
&gt; +    /* Point at the same position, but with an empty buffer */

Maybe // instead of /* comment? In this whole file perhaps.

&gt; Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:98
&gt; +            uText-&gt;chunkOffset = (int32_t)(index - uText-&gt;chunkNativeStart);

static_cast?

&gt; Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:109
&gt; +            uText-&gt;chunkOffset = (int32_t)(index - uText-&gt;chunkNativeStart);

static_cast?

&gt; Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:206
&gt; +    uText-&gt;context = 0;

nullptr?

&gt; Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:224
&gt; +    text-&gt;a = (int64_t)length;

static_cast? no cast at all?

&gt; Source/WebCore/platform/text/icu/UTextProviderLatin1.h:42
&gt; +UText* openLatin1UTextProvider(UTextWithBuffer* utWithBuffer, const LChar* string, unsigned length, UErrorCode* status);
&gt; +UText* openLatin1ContextAwareUTextProvider(UTextWithBuffer* utWithBuffer, const LChar* string, unsigned length, const UChar* priorContext, int priorContextLength, UErrorCode* status);

utWithBuffer and status argument names should be omitted.

&gt; Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp:43
&gt; +    0, 0, 0,

nullptr?

&gt; Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp:48
&gt; +    0, 0, 0, 0,

nullptr?

&gt; Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp:50
&gt; +    0, 0, 0,

nullptr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967087</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-12 16:42:11 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/text/TextBreakIteratorICU.cpp:77
&gt; &gt; +        ubrk_setUText(reinterpret_cast&lt;UBreakIterator*&gt;(iterator), text, &amp;setTextStatus);
&gt; 
&gt; I’d like to see a helper function so we have only one reinterpret_cast instead of many. Or maybe just transition to use UBreakIterator directly since we don’t need a non-ICU abstraction for this.

I&apos;ll do that in a follow up.

&gt; &gt; Source/WebCore/platform/text/TextBreakIteratorICU.cpp:143
&gt; &gt; +TextBreakIterator* wordBreakIterator(const UChar* buffer, int length)
&gt; 
&gt; Why not make this take a StringView too?
&gt; 
&gt; &gt; Source/WebCore/platform/text/TextBreakIteratorICU.cpp:152
&gt; &gt; +TextBreakIterator* sentenceBreakIterator(const UChar* buffer, int length)
&gt; 
&gt; And this.
&gt; 
&gt; &gt; Source/WebCore/platform/text/TextBreakIteratorICU.cpp:161
&gt; &gt; +TextBreakIterator* cursorMovementIterator(const UChar* buffer, int length)
&gt; 
&gt; And this.

That is step 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967094</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-12 17:24:44 -0800</bug_when>
    <thetext>Committed r161844: &lt;http://trac.webkit.org/changeset/161844&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967409</commentid>
    <comment_count>5</comment_count>
      <attachid>221063</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-13 10:53:54 -0800</bug_when>
    <thetext>Created attachment 221063
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967412</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-13 10:56:23 -0800</bug_when>
    <thetext>Attachment 221063 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/PlatformGTK.cmake&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/dom/CharacterData.cpp&apos;, u&apos;Source/WebCore/editing/TextCheckingHelper.cpp&apos;, u&apos;Source/WebCore/editing/VisibleUnits.cpp&apos;, u&apos;Source/WebCore/platform/graphics/StringTruncator.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/ComplexTextController.cpp&apos;, u&apos;Source/WebCore/platform/text/TextAllInOne.cpp&apos;, u&apos;Source/WebCore/platform/text/TextBoundaries.cpp&apos;, u&apos;Source/WebCore/platform/text/TextBreakIterator.cpp&apos;, u&apos;Source/WebCore/platform/text/TextBreakIterator.h&apos;, u&apos;Source/WebCore/platform/text/TextBreakIteratorICU.cpp&apos;, u&apos;Source/WebCore/rendering/RenderText.cpp&apos;, u&apos;Source/WebCore/rendering/break_lines.h&apos;, u&apos;Source/WebKit/ios/ChangeLog&apos;, u&apos;Source/WebKit/ios/Misc/WebNSStringDrawing.mm&apos;, u&apos;Source/WebKit/ios/Misc/WebUIKitSupport.mm&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:215:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:223:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:224:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:225:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:226:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:227:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:228:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:229:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:230:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:231:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:232:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:233:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:234:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:235:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:236:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:237:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:238:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:239:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:240:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:241:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:242:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:243:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:244:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:245:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:246:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:258:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:259:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:260:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:261:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:262:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:263:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:264:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:265:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:275:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:276:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:277:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:278:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:279:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:280:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:281:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:282:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 41 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967414</commentid>
    <comment_count>7</comment_count>
      <attachid>221063</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-13 10:58:16 -0800</bug_when>
    <thetext>Comment on attachment 221063
Patch

Attachment 221063 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/5738164891156480</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967415</commentid>
    <comment_count>8</comment_count>
      <attachid>221063</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-13 11:00:41 -0800</bug_when>
    <thetext>Comment on attachment 221063
Patch

Attachment 221063 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/6641037883736064</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967475</commentid>
    <comment_count>9</comment_count>
      <attachid>221063</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2014-01-13 13:22:06 -0800</bug_when>
    <thetext>Comment on attachment 221063
Patch

Attachment 221063 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/5595110804815872</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968162</commentid>
    <comment_count>10</comment_count>
      <attachid>221228</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-14 21:00:46 -0800</bug_when>
    <thetext>Created attachment 221228
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968163</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-14 21:02:43 -0800</bug_when>
    <thetext>Attachment 221228 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/PlatformGTK.cmake&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/dom/CharacterData.cpp&apos;, u&apos;Source/WebCore/editing/TextCheckingHelper.cpp&apos;, u&apos;Source/WebCore/editing/VisibleUnits.cpp&apos;, u&apos;Source/WebCore/page/TouchAdjustment.cpp&apos;, u&apos;Source/WebCore/platform/graphics/StringTruncator.cpp&apos;, u&apos;Source/WebCore/platform/graphics/mac/ComplexTextController.cpp&apos;, u&apos;Source/WebCore/platform/text/TextAllInOne.cpp&apos;, u&apos;Source/WebCore/platform/text/TextBoundaries.cpp&apos;, u&apos;Source/WebCore/platform/text/TextBreakIterator.cpp&apos;, u&apos;Source/WebCore/platform/text/TextBreakIterator.h&apos;, u&apos;Source/WebCore/platform/text/TextBreakIteratorICU.cpp&apos;, u&apos;Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp&apos;, u&apos;Source/WebCore/rendering/RenderText.cpp&apos;, u&apos;Source/WebCore/rendering/break_lines.h&apos;, u&apos;Source/WebKit/ios/ChangeLog&apos;, u&apos;Source/WebKit/ios/Misc/WebNSStringDrawing.mm&apos;, u&apos;Source/WebKit/ios/Misc/WebUIKitSupport.mm&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:215:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:223:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:224:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:225:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:226:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:227:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:228:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:229:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:230:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:231:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:232:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:233:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:234:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:235:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:236:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:237:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:238:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:239:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:240:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:241:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:242:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:243:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:244:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:245:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:246:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:258:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:259:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:260:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:261:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:262:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:263:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:264:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:265:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:275:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:276:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:277:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:278:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:279:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:280:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:281:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:282:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 41 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968566</commentid>
    <comment_count>12</comment_count>
      <attachid>221228</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-15 19:42:54 -0800</bug_when>
    <thetext>Comment on attachment 221228
Patch

I&apos;m going to break this up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968567</commentid>
    <comment_count>13</comment_count>
      <attachid>221324</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-15 19:45:03 -0800</bug_when>
    <thetext>Created attachment 221324
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968568</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-15 19:47:53 -0800</bug_when>
    <thetext>Attachment 221324 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/PlatformGTK.cmake&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/text/TextBreakIterator.cpp&apos;, u&apos;Source/WebCore/platform/text/TextBreakIteratorICU.cpp&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:174:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:182:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:183:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:184:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:185:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:186:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:187:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:188:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:189:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:190:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:191:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:192:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:193:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:194:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:195:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:196:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:197:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:198:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:199:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:200:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:201:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:202:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:203:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:204:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:205:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:217:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:218:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:219:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:220:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:221:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:222:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:223:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:224:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:234:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:235:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:236:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:237:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:238:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:239:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:240:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/text/TextBreakIterator.cpp:241:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 41 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968569</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-15 19:55:27 -0800</bug_when>
    <thetext>Committed r162109: &lt;http://trac.webkit.org/changeset/162109&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968591</commentid>
    <comment_count>16</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-15 21:17:48 -0800</bug_when>
    <thetext>One more patch to go before we can close this guy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968594</commentid>
    <comment_count>17</comment_count>
      <attachid>221329</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-15 21:21:03 -0800</bug_when>
    <thetext>Created attachment 221329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968596</commentid>
    <comment_count>18</comment_count>
      <attachid>221329</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-15 21:25:02 -0800</bug_when>
    <thetext>Comment on attachment 221329
Patch

Attachment 221329 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/5492986548846592</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968598</commentid>
    <comment_count>19</comment_count>
      <attachid>221329</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-15 21:30:01 -0800</bug_when>
    <thetext>Comment on attachment 221329
Patch

Attachment 221329 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/5889102792622080</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968600</commentid>
    <comment_count>20</comment_count>
      <attachid>221329</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2014-01-15 21:47:08 -0800</bug_when>
    <thetext>Comment on attachment 221329
Patch

Attachment 221329 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/6672203105959936</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968601</commentid>
    <comment_count>21</comment_count>
      <attachid>221329</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2014-01-15 21:52:33 -0800</bug_when>
    <thetext>Comment on attachment 221329
Patch

Attachment 221329 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/5205691354578944</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968602</commentid>
    <comment_count>22</comment_count>
      <attachid>221331</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-15 21:58:12 -0800</bug_when>
    <thetext>Created attachment 221331
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968603</commentid>
    <comment_count>23</comment_count>
      <attachid>221331</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-15 22:01:58 -0800</bug_when>
    <thetext>Comment on attachment 221331
Patch

Attachment 221331 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/6480987403845632</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968604</commentid>
    <comment_count>24</comment_count>
      <attachid>221331</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-15 22:08:16 -0800</bug_when>
    <thetext>Comment on attachment 221331
Patch

Attachment 221331 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/6291626053861376</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968609</commentid>
    <comment_count>25</comment_count>
      <attachid>221331</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2014-01-15 22:22:40 -0800</bug_when>
    <thetext>Comment on attachment 221331
Patch

Attachment 221331 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/4615102749736960</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969032</commentid>
    <comment_count>26</comment_count>
      <attachid>221438</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-16 21:30:02 -0800</bug_when>
    <thetext>Created attachment 221438
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969044</commentid>
    <comment_count>27</comment_count>
      <attachid>221438</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-01-16 22:15:06 -0800</bug_when>
    <thetext>Comment on attachment 221438
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        now unnecessary up-conversion to UTF-16 in the process.

up-conversions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969045</commentid>
    <comment_count>28</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-16 22:18:34 -0800</bug_when>
    <thetext>Committed r162184: &lt;http://trac.webkit.org/changeset/162184&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970596</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-01-21 23:38:58 -0800</bug_when>
    <thetext>This change made multiple tests crash on Windows, filed bug 127408.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220987</attachid>
            <date>2014-01-12 15:36:35 -0800</date>
            <delta_ts>2014-01-13 10:53:52 -0800</delta_ts>
            <desc>Part 1</desc>
            <filename>bug-126856-20140112153634.patch</filename>
            <type>text/plain</type>
            <size>47077</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE0LTAxLTEyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IncyBzaG91
bGQgc3VwcG9ydCBMYXRpbi0xIGZvciBhbGwgaXRlcmF0b3IgdHlwZXMgKFBhcnQgMSkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjg1NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRG8gc29tZSBpbml0
aWFsIGNsZWFudXAgYmVmb3JlIGFkZGluZyBjb21wbGV0ZSBMYXRpbi0xIHN1cHBvcnQuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcDoKKyAgICAgICAgUmVt
b3ZlIG5vbi1JQ1UgYWNxdWlyZUxpbmVCcmVha0l0ZXJhdG9yKCkgaW1wbGVtZW50YXRpb24uCisK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg6CisgICAgICAgIC0g
Q2hhbmdlcyBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoKSB0byB0YWtlIGEgU3RyaW5nVmlldy4K
KworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwOgorICAg
ICAgICAtIFJlZmFjdG9yIGl0ZXJhdG9yIGluaXRpYWxpemF0aW9uIGFuZCBzZXR0aW5nIG9mIHRl
eHQgb24gdGhlIGl0ZXJhdG9yLgorICAgICAgICAtIEFkZCBzdXBwb3J0IGZvciB1c2luZyBhIExh
dGluLTEgcHJvdmlkZXIgKHRoaXMgaXMgbm90IGN1cnJlbnRseSB1c2VkKS4KKworICAgICAgICAq
IHBsYXRmb3JtL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEuaDoKKyAgICAgICAgLSBBZGQgYmFj
ayBub24tY29udGV4dCBhd2FyZSBMYXRpbi0xIHByb3ZpZGVyIChmcm9tIHIxMjk2NjIpLgorICAg
ICAgICAtIFJlbmFtZSBjb250ZXh0IGF3YXJlIHByb3ZpZGVyLgorCisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9pY3UvVVRleHRQcm92aWRlclVURjE2LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L2ljdS9VVGV4dFByb3ZpZGVyVVRGMTYuaDoKKyAgICAgICAgLSBSZW5hbWUgY29udGV4dCBh
d2FyZSBwcm92aWRlci4KKwogMjAxNC0wMS0xMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVkdWNlIHVzZSBvZiBTdHJpbmc6OmNoYXJhY3RlcnMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiAxNjE4MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRC
cmVha0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTQgKzY3LDQgQEAgdW5zaWdu
ZWQgbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycwogICAgIHJldHVybiB0ZXh0QnJlYWtD
dXJyZW50KGl0KTsKIH0KIAotI2lmICFVU0UoSUNVX1VOSUNPREUpCi1UZXh0QnJlYWtJdGVyYXRv
ciogYWNxdWlyZUxpbmVCcmVha0l0ZXJhdG9yKGNvbnN0IExDaGFyKiBzdHJpbmcsIGludCBsZW5n
dGgsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlLCBjb25zdCBVQ2hhciogcHJpb3JDb250ZXh0
LCB1bnNpZ25lZCBwcmlvckNvbnRleHRMZW5ndGgpCi17Ci0gICAgVmVjdG9yPFVDaGFyPiB1dGYx
NnN0cmluZyhsZW5ndGgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0g
ICAgICAgIHV0ZjE2c3RyaW5nW2ldID0gc3RyaW5nW2ldOwotICAgIHJldHVybiBhY3F1aXJlTGlu
ZUJyZWFrSXRlcmF0b3IodXRmMTZzdHJpbmcuZGF0YSgpLCBsZW5ndGgsIGxvY2FsZSwgcHJpb3JD
b250ZXh0LCBwcmlvckNvbnRleHRMZW5ndGgpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRC
cmVha0l0ZXJhdG9yLmgJKHJldmlzaW9uIDE2MTgxNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMs
NyBAQAogI2RlZmluZSBUZXh0QnJlYWtJdGVyYXRvcl9oCiAKICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAjaW5jbHVk
ZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwx
MSArMzksMTEgQEAgY2xhc3MgVGV4dEJyZWFrSXRlcmF0b3I7CiBUZXh0QnJlYWtJdGVyYXRvciog
Y3Vyc29yTW92ZW1lbnRJdGVyYXRvcihjb25zdCBVQ2hhciosIGludCBsZW5ndGgpOwogCiBUZXh0
QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3Ro
KTsKLVRleHRCcmVha0l0ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoY29uc3QgTENo
YXIqLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSwgY29uc3QgVUNoYXIq
IHByaW9yQ29udGV4dCwgdW5zaWduZWQgcHJpb3JDb250ZXh0TGVuZ3RoKTsKLVRleHRCcmVha0l0
ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3Ro
LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSwgY29uc3QgVUNoYXIqIHByaW9yQ29udGV4dCwg
dW5zaWduZWQgcHJpb3JDb250ZXh0TGVuZ3RoKTsKLXZvaWQgcmVsZWFzZUxpbmVCcmVha0l0ZXJh
dG9yKFRleHRCcmVha0l0ZXJhdG9yKik7CiBUZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVh
a0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CiAKK1RleHRCcmVha0l0ZXJhdG9y
KiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldywgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBwcmlvckNvbnRleHQsIHVuc2lnbmVkIHByaW9yQ29udGV4
dExlbmd0aCk7Cit2b2lkIHJlbGVhc2VMaW5lQnJlYWtJdGVyYXRvcihUZXh0QnJlYWtJdGVyYXRv
ciopOworCiBpbnQgdGV4dEJyZWFrRmlyc3QoVGV4dEJyZWFrSXRlcmF0b3IqKTsKIGludCB0ZXh0
QnJlYWtMYXN0KFRleHRCcmVha0l0ZXJhdG9yKik7CiBpbnQgdGV4dEJyZWFrTmV4dChUZXh0QnJl
YWtJdGVyYXRvciopOwpAQCAtMTMwLDEwICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VChwcmlvckNvbnRleHRMZW5ndGggPD0gcHJpb3JDb250ZXh0Q2FwYWNpdHkpOwogICAgICAgICBj
b25zdCBVQ2hhciogcHJpb3JDb250ZXh0ID0gcHJpb3JDb250ZXh0TGVuZ3RoID8gJm1fcHJpb3JD
b250ZXh0W3ByaW9yQ29udGV4dENhcGFjaXR5IC0gcHJpb3JDb250ZXh0TGVuZ3RoXSA6IDA7CiAg
ICAgICAgIGlmICghbV9pdGVyYXRvcikgewotICAgICAgICAgICAgaWYgKG1fc3RyaW5nLmlzOEJp
dCgpKQotICAgICAgICAgICAgICAgIG1faXRlcmF0b3IgPSBhY3F1aXJlTGluZUJyZWFrSXRlcmF0
b3IobV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgbV9zdHJpbmcubGVuZ3RoKCksIG1fbG9jYWxlLCBw
cmlvckNvbnRleHQsIHByaW9yQ29udGV4dExlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbV9pdGVyYXRvciA9IGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvcihtX3N0cmlu
Zy5jaGFyYWN0ZXJzMTYoKSwgbV9zdHJpbmcubGVuZ3RoKCksIG1fbG9jYWxlLCBwcmlvckNvbnRl
eHQsIHByaW9yQ29udGV4dExlbmd0aCk7CisgICAgICAgICAgICBtX2l0ZXJhdG9yID0gYWNxdWly
ZUxpbmVCcmVha0l0ZXJhdG9yKG1fc3RyaW5nLCBtX2xvY2FsZSwgcHJpb3JDb250ZXh0LCBwcmlv
ckNvbnRleHRMZW5ndGgpOwogICAgICAgICAgICAgbV9jYWNoZWRQcmlvckNvbnRleHQgPSBwcmlv
ckNvbnRleHQ7CiAgICAgICAgICAgICBtX2NhY2hlZFByaW9yQ29udGV4dExlbmd0aCA9IHByaW9y
Q29udGV4dExlbmd0aDsKICAgICAgICAgfSBlbHNlIGlmIChwcmlvckNvbnRleHQgIT0gbV9jYWNo
ZWRQcmlvckNvbnRleHQgfHwgcHJpb3JDb250ZXh0TGVuZ3RoICE9IG1fY2FjaGVkUHJpb3JDb250
ZXh0TGVuZ3RoKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVh
a0l0ZXJhdG9ySUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAkocmV2aXNpb24gMTYxODE3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDIxNiArMjYsMTM5IEBACiAjaW5jbHVkZSAiVVRleHRQcm92aWRlckxhdGlu
MS5oIgogI2luY2x1ZGUgIlVUZXh0UHJvdmlkZXJVVEYxNi5oIgogI2luY2x1ZGUgPHd0Zi9BdG9t
aWNzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc2V0VXBJdGVyYXRvcihib29sJiBj
cmVhdGVkSXRlcmF0b3IsIFRleHRCcmVha0l0ZXJhdG9yKiYgaXRlcmF0b3IsIFVCcmVha0l0ZXJh
dG9yVHlwZSB0eXBlLCBjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQotewotICAgIGlm
ICghc3RyaW5nKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghY3JlYXRlZEl0ZXJhdG9y
KSB7Ci0gICAgICAgIFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICAg
ICAgaXRlcmF0b3IgPSByZWludGVycHJldF9jYXN0PFRleHRCcmVha0l0ZXJhdG9yKj4odWJya19v
cGVuKHR5cGUsIGN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCgpLCAwLCAwLCAmb3BlblN0YXR1cykp
OwotICAgICAgICBjcmVhdGVkSXRlcmF0b3IgPSB0cnVlOwotICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKFVfU1VDQ0VTUyhvcGVuU3RhdHVzKSwgIklDVSBjb3VsZCBub3Qgb3BlbiBhIGJyZWFr
IGl0ZXJhdG9yOiAlcyAoJWQpIiwgdV9lcnJvck5hbWUob3BlblN0YXR1cyksIG9wZW5TdGF0dXMp
OwotICAgIH0KLSAgICBpZiAoIWl0ZXJhdG9yKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFVF
cnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICB1YnJrX3NldFRleHQo
cmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSwgc3RyaW5nLCBsZW5n
dGgsICZzZXRUZXh0U3RhdHVzKTsKLSAgICBpZiAoVV9GQUlMVVJFKHNldFRleHRTdGF0dXMpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBpdGVyYXRvcjsKLX0KLQotVGV4dEJyZWFr
SXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5n
dGgpCi17Ci0gICAgc3RhdGljIGJvb2wgY3JlYXRlZFdvcmRCcmVha0l0ZXJhdG9yID0gZmFsc2U7
Ci0gICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNXb3JkQnJlYWtJdGVyYXRvcjsK
LSAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihjcmVhdGVkV29yZEJyZWFrSXRlcmF0b3IsIHN0YXRp
Y1dvcmRCcmVha0l0ZXJhdG9yLCBVQlJLX1dPUkQsIHN0cmluZywgbGVuZ3RoKTsKLX0KLQotc3Rh
dGljIFVUZXh0IGVtcHR5VGV4dCA9IFVURVhUX0lOSVRJQUxJWkVSOworLy8gSXRlcmF0b3IgaW5p
dGlhbGl6YXRpb24KIAotVGV4dEJyZWFrSXRlcmF0b3IqIGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRv
cihjb25zdCBMQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsZSwgY29uc3QgVUNoYXIqIHByaW9yQ29udGV4dCwgdW5zaWduZWQgcHJpb3JDb250ZXh0TGVu
Z3RoKQorc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBpbml0aWFsaXplSXRlcmF0b3IoVUJyZWFr
SXRlcmF0b3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIGxvY2FsZSA9IGN1cnJlbnRUZXh0QnJlYWtM
b2NhbGVJRCgpKQogewotICAgIFVCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IExpbmVCcmVha0l0
ZXJhdG9yUG9vbDo6c2hhcmVkUG9vbCgpLnRha2UobG9jYWxlKTsKLSAgICBpZiAoIWl0ZXJhdG9y
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFVUZXh0V2l0aEJ1ZmZlciB0ZXh0TG9jYWw7Ci0g
ICAgdGV4dExvY2FsLnRleHQgPSBlbXB0eVRleHQ7Ci0gICAgdGV4dExvY2FsLnRleHQuZXh0cmFT
aXplID0gc2l6ZW9mKHRleHRMb2NhbC5idWZmZXIpOwotICAgIHRleHRMb2NhbC50ZXh0LnBFeHRy
YSA9IHRleHRMb2NhbC5idWZmZXI7Ci0KICAgICBVRXJyb3JDb2RlIG9wZW5TdGF0dXMgPSBVX1pF
Uk9fRVJST1I7Ci0gICAgVVRleHQqIHRleHQgPSB1VGV4dE9wZW5MYXRpbjEoJnRleHRMb2NhbCwg
c3RyaW5nLCBsZW5ndGgsIHByaW9yQ29udGV4dCwgcHJpb3JDb250ZXh0TGVuZ3RoLCAmb3BlblN0
YXR1cyk7Ci0gICAgaWYgKFVfRkFJTFVSRShvcGVuU3RhdHVzKSkgewotICAgICAgICBMT0dfRVJS
T1IoInRleHRPcGVuVVRGMTYgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgb3BlblN0YXR1cyk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFVFcnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9
IFVfWkVST19FUlJPUjsKLSAgICB1YnJrX3NldFVUZXh0KGl0ZXJhdG9yLCB0ZXh0LCAmc2V0VGV4
dFN0YXR1cyk7Ci0gICAgaWYgKFVfRkFJTFVSRShzZXRUZXh0U3RhdHVzKSkgewotICAgICAgICBM
T0dfRVJST1IoInVicmtfc2V0VVRleHQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgc2V0VGV4dFN0
YXR1cyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHV0ZXh0X2Nsb3NlKHRleHQp
OwotCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VGV4dEJyZWFrSXRlcmF0b3IqPihpdGVy
YXRvcik7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gcmVpbnRlcnByZXRfY2Fz
dDxUZXh0QnJlYWtJdGVyYXRvcio+KHVicmtfb3Blbih0eXBlLCBsb2NhbGUsIDAsIDAsICZvcGVu
U3RhdHVzKSk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShVX1NVQ0NFU1Mob3BlblN0YXR1cyks
ICJJQ1UgY291bGQgbm90IG9wZW4gYSBicmVhayBpdGVyYXRvcjogJXMgKCVkKSIsIHVfZXJyb3JO
YW1lKG9wZW5TdGF0dXMpLCBvcGVuU3RhdHVzKTsKKyAgICByZXR1cm4gaXRlcmF0b3I7CiB9CiAK
LVRleHRCcmVha0l0ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIq
IHN0cmluZywgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIGNvbnN0IFVD
aGFyKiBwcmlvckNvbnRleHQsIHVuc2lnbmVkIHByaW9yQ29udGV4dExlbmd0aCkKKyNpZiAhUExB
VEZPUk0oSU9TKQorc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBpbml0aWFsaXplSXRlcmF0b3JX
aXRoUnVsZXMoY29uc3QgY2hhciogYnJlYWtSdWxlcykKIHsKLSAgICBVQnJlYWtJdGVyYXRvciog
aXRlcmF0b3IgPSBMaW5lQnJlYWtJdGVyYXRvclBvb2w6OnNoYXJlZFBvb2woKS50YWtlKGxvY2Fs
ZSk7Ci0gICAgaWYgKCFpdGVyYXRvcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBVVGV4dCB0
ZXh0TG9jYWwgPSBVVEVYVF9JTklUSUFMSVpFUjsKLQorICAgIFVQYXJzZUVycm9yIHBhcnNlU3Rh
dHVzOwogICAgIFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICBVVGV4
dCogdGV4dCA9IHVUZXh0T3BlblVURjE2KCZ0ZXh0TG9jYWwsIHN0cmluZywgbGVuZ3RoLCBwcmlv
ckNvbnRleHQsIHByaW9yQ29udGV4dExlbmd0aCwgJm9wZW5TdGF0dXMpOwotICAgIGlmIChVX0ZB
SUxVUkUob3BlblN0YXR1cykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJ0ZXh0T3BlblVURjE2IGZh
aWxlZCB3aXRoIHN0YXR1cyAlZCIsIG9wZW5TdGF0dXMpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBVRXJyb3JDb2RlIHNldFRleHRTdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAg
dWJya19zZXRVVGV4dChpdGVyYXRvciwgdGV4dCwgJnNldFRleHRTdGF0dXMpOwotICAgIGlmIChV
X0ZBSUxVUkUoc2V0VGV4dFN0YXR1cykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJ1YnJrX3NldFVU
ZXh0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIHNldFRleHRTdGF0dXMpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICB1dGV4dF9jbG9zZSh0ZXh0KTsKLQotICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFRleHRCcmVha0l0ZXJhdG9yKj4oaXRlcmF0b3IpOworICAgIFN0cmluZyBy
dWxlcyhicmVha1J1bGVzKTsKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSByZWlu
dGVycHJldF9jYXN0PFRleHRCcmVha0l0ZXJhdG9yKj4odWJya19vcGVuUnVsZXMocnVsZXMuY2hh
cmFjdGVycygpLCBydWxlcy5sZW5ndGgoKSwgMCwgMCwgJnBhcnNlU3RhdHVzLCAmb3BlblN0YXR1
cykpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoVV9TVUNDRVNTKG9wZW5TdGF0dXMpLCAiSUNV
IGNvdWxkIG5vdCBvcGVuIGEgYnJlYWsgaXRlcmF0b3I6ICVzICglZCkiLCB1X2Vycm9yTmFtZShv
cGVuU3RhdHVzKSwgb3BlblN0YXR1cyk7CisgICAgcmV0dXJuIGl0ZXJhdG9yOwogfQorI2VuZGlm
IC8vICFQTEFURk9STShJT1MpCiAKLXZvaWQgcmVsZWFzZUxpbmVCcmVha0l0ZXJhdG9yKFRleHRC
cmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKLXsKLSAgICBBU1NFUlRfQVJHKGl0ZXJhdG9yLCBpdGVy
YXRvcik7Ci0KLSAgICBMaW5lQnJlYWtJdGVyYXRvclBvb2w6OnNoYXJlZFBvb2woKS5wdXQocmVp
bnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSk7Ci19CiAKLXN0YXRpYyBU
ZXh0QnJlYWtJdGVyYXRvciogbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKKy8vIEl0
ZXJhdG9yIHRleHQgc2V0dGluZwogCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUFuZFN3YXBO
b25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKFRleHRCcmVha0l0ZXJhdG9yKiBleHBlY3Rl
ZCwgVGV4dEJyZWFrSXRlcmF0b3IqIG5ld1ZhbHVlKQorc3RhdGljIFRleHRCcmVha0l0ZXJhdG9y
KiBzZXRUZXh0Rm9ySXRlcmF0b3IoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yLCBTdHJpbmdW
aWV3IHN0cmluZykKIHsKLSNpZiBFTkFCTEUoQ09NUEFSRV9BTkRfU1dBUCkKLSAgICByZXR1cm4g
d2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbm9uU2hhcmVkQ2hh
cmFjdGVyQnJlYWtJdGVyYXRvciksIGV4cGVjdGVkLCBuZXdWYWx1ZSk7Ci0jZWxzZQotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3JN
dXRleCwgKCkpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihub25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yTXV0ZXgpOwotICAgIGlmIChub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
ICE9IGV4cGVjdGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbm9uU2hhcmVkQ2hhcmFj
dGVyQnJlYWtJdGVyYXRvciA9IG5ld1ZhbHVlOwotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi19
CisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkgeworICAgICAgICBVVGV4dFdpdGhCdWZmZXIgdGV4
dExvY2FsOworICAgICAgICB0ZXh0TG9jYWwudGV4dCA9IFVURVhUX0lOSVRJQUxJWkVSOworICAg
ICAgICB0ZXh0TG9jYWwudGV4dC5leHRyYVNpemUgPSBzaXplb2YodGV4dExvY2FsLmJ1ZmZlcik7
CisgICAgICAgIHRleHRMb2NhbC50ZXh0LnBFeHRyYSA9IHRleHRMb2NhbC5idWZmZXI7CiAKLU5v
blNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6Ok5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3IoY29uc3QgVUNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKLXsKLSAgICBtX2l0ZXJhdG9y
ID0gbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKLSAgICBib29sIGNyZWF0ZWRJdGVy
YXRvciA9IG1faXRlcmF0b3IgJiYgY29tcGFyZUFuZFN3YXBOb25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yKG1faXRlcmF0b3IsIDApOwotICAgIG1faXRlcmF0b3IgPSBzZXRVcEl0ZXJhdG9y
KGNyZWF0ZWRJdGVyYXRvciwgbV9pdGVyYXRvciwgVUJSS19DSEFSQUNURVIsIGJ1ZmZlciwgbGVu
Z3RoKTsKLX0KKyAgICAgICAgVUVycm9yQ29kZSBvcGVuU3RhdHVzID0gVV9aRVJPX0VSUk9SOwor
ICAgICAgICBVVGV4dCogdGV4dCA9IG9wZW5MYXRpbjFVVGV4dFByb3ZpZGVyKCZ0ZXh0TG9jYWws
IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksICZvcGVuU3RhdHVzKTsKKyAg
ICAgICAgaWYgKFVfRkFJTFVSRShvcGVuU3RhdHVzKSkgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJ1VGV4dE9wZW5MYXRpbjEgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgb3BlblN0YXR1cyk7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIFVFcnJvckNv
ZGUgc2V0VGV4dFN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWJya19zZXRVVGV4dChy
ZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0b3IpLCB0ZXh0LCAmc2V0VGV4
dFN0YXR1cyk7CisgICAgICAgIGlmIChVX0ZBSUxVUkUoc2V0VGV4dFN0YXR1cykpIHsKKyAgICAg
ICAgICAgIExPR19FUlJPUigidWJya19zZXRVVGV4dCBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBz
ZXRUZXh0U3RhdHVzKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisK
KyAgICAgICAgdXRleHRfY2xvc2UodGV4dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVUVycm9y
Q29kZSBzZXRUZXh0U3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1YnJrX3NldFRleHQo
cmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSwgc3RyaW5nLmNoYXJh
Y3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCksICZzZXRUZXh0U3RhdHVzKTsKKyAgICAgICAgaWYg
KFVfRkFJTFVSRShzZXRUZXh0U3RhdHVzKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KIAotTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6fk5vblNoYXJlZENoYXJh
Y3RlckJyZWFrSXRlcmF0b3IoKQotewotICAgIGlmICghY29tcGFyZUFuZFN3YXBOb25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yKDAsIG1faXRlcmF0b3IpKQotICAgICAgICB1YnJrX2Nsb3Nl
KHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihtX2l0ZXJhdG9yKSk7CisgICAgcmV0
dXJuIGl0ZXJhdG9yOwogfQogCi1UZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJh
dG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCitzdGF0aWMgVGV4dEJyZWFrSXRl
cmF0b3IqIHNldENvbnRleHRBd2FyZVRleHRGb3JJdGVyYXRvcihUZXh0QnJlYWtJdGVyYXRvciog
aXRlcmF0b3IsIFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBVQ2hhciogcHJpb3JDb250ZXh0LCB1
bnNpZ25lZCBwcmlvckNvbnRleHRMZW5ndGgpCiB7Ci0gICAgc3RhdGljIGJvb2wgY3JlYXRlZFNl
bnRlbmNlQnJlYWtJdGVyYXRvciA9IGZhbHNlOwotICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRv
ciogc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yOwotICAgIHJldHVybiBzZXRVcEl0ZXJhdG9y
KGNyZWF0ZWRTZW50ZW5jZUJyZWFrSXRlcmF0b3IsIHN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRv
ciwgVUJSS19TRU5URU5DRSwgc3RyaW5nLCBsZW5ndGgpOwotfQorICAgIGlmIChzdHJpbmcuaXM4
Qml0KCkpIHsKKyAgICAgICAgVVRleHRXaXRoQnVmZmVyIHRleHRMb2NhbDsKKyAgICAgICAgdGV4
dExvY2FsLnRleHQgPSBVVEVYVF9JTklUSUFMSVpFUjsKKyAgICAgICAgdGV4dExvY2FsLnRleHQu
ZXh0cmFTaXplID0gc2l6ZW9mKHRleHRMb2NhbC5idWZmZXIpOworICAgICAgICB0ZXh0TG9jYWwu
dGV4dC5wRXh0cmEgPSB0ZXh0TG9jYWwuYnVmZmVyOwogCi1pbnQgdGV4dEJyZWFrRmlyc3QoVGV4
dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yKQotewotICAgIHJldHVybiB1YnJrX2ZpcnN0KHJlaW50
ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvcikpOwotfQorICAgICAgICBVRXJy
b3JDb2RlIG9wZW5TdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIFVUZXh0KiB0ZXh0ID0g
b3BlbkxhdGluMUNvbnRleHRBd2FyZVVUZXh0UHJvdmlkZXIoJnRleHRMb2NhbCwgc3RyaW5nLmNo
YXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSwgcHJpb3JDb250ZXh0LCBwcmlvckNvbnRleHRM
ZW5ndGgsICZvcGVuU3RhdHVzKTsKKyAgICAgICAgaWYgKFVfRkFJTFVSRShvcGVuU3RhdHVzKSkg
eworICAgICAgICAgICAgTE9HX0VSUk9SKCJvcGVuTGF0aW4xQ29udGV4dEF3YXJlVVRleHRQcm92
aWRlciBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBvcGVuU3RhdHVzKTsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgVUVycm9yQ29kZSBzZXRUZXh0U3Rh
dHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1YnJrX3NldFVUZXh0KHJlaW50ZXJwcmV0X2Nh
c3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvciksIHRleHQsICZzZXRUZXh0U3RhdHVzKTsKKyAg
ICAgICAgaWYgKFVfRkFJTFVSRShzZXRUZXh0U3RhdHVzKSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJ1YnJrX3NldFVUZXh0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIHNldFRleHRTdGF0dXMp
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICB1dGV4
dF9jbG9zZSh0ZXh0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBVVGV4dCB0ZXh0TG9jYWwgPSBV
VEVYVF9JTklUSUFMSVpFUjsKIAotaW50IHRleHRCcmVha0xhc3QoVGV4dEJyZWFrSXRlcmF0b3Iq
IGl0ZXJhdG9yKQotewotICAgIHJldHVybiB1YnJrX2xhc3QocmVpbnRlcnByZXRfY2FzdDxVQnJl
YWtJdGVyYXRvcio+KGl0ZXJhdG9yKSk7Ci19CisgICAgICAgIFVFcnJvckNvZGUgb3BlblN0YXR1
cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgVVRleHQqIHRleHQgPSBvcGVuVVRGMTZDb250ZXh0
QXdhcmVVVGV4dFByb3ZpZGVyKCZ0ZXh0TG9jYWwsIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3Ry
aW5nLmxlbmd0aCgpLCBwcmlvckNvbnRleHQsIHByaW9yQ29udGV4dExlbmd0aCwgJm9wZW5TdGF0
dXMpOworICAgICAgICBpZiAoVV9GQUlMVVJFKG9wZW5TdGF0dXMpKSB7CisgICAgICAgICAgICBM
T0dfRVJST1IoIm9wZW5VVEYxNkNvbnRleHRBd2FyZVVUZXh0UHJvdmlkZXIgZmFpbGVkIHdpdGgg
c3RhdHVzICVkIiwgb3BlblN0YXR1cyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorCisgICAgICAgIFVFcnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAg
ICAgICAgdWJya19zZXRVVGV4dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRl
cmF0b3IpLCB0ZXh0LCAmc2V0VGV4dFN0YXR1cyk7CisgICAgICAgIGlmIChVX0ZBSUxVUkUoc2V0
VGV4dFN0YXR1cykpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigidWJya19zZXRVVGV4dCBmYWls
ZWQgd2l0aCBzdGF0dXMgJWQiLCBzZXRUZXh0U3RhdHVzKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CiAKLWludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJhdG9y
KiBpdGVyYXRvcikKLXsKLSAgICByZXR1cm4gdWJya19uZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8VUJy
ZWFrSXRlcmF0b3IqPihpdGVyYXRvcikpOwotfQorICAgICAgICB1dGV4dF9jbG9zZSh0ZXh0KTsK
KyAgICB9CiAKLWludCB0ZXh0QnJlYWtQcmV2aW91cyhUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0
b3IpCi17Ci0gICAgcmV0dXJuIHVicmtfcHJldmlvdXMocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJ
dGVyYXRvcio+KGl0ZXJhdG9yKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yOwogfQogCi1pbnQgdGV4
dEJyZWFrUHJlY2VkaW5nKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciwgaW50IHBvcykKLXsK
LSAgICByZXR1cm4gdWJya19wcmVjZWRpbmcocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRv
cio+KGl0ZXJhdG9yKSwgcG9zKTsKLX0KIAotaW50IHRleHRCcmVha0ZvbGxvd2luZyhUZXh0QnJl
YWtJdGVyYXRvciogaXRlcmF0b3IsIGludCBwb3MpCi17Ci0gICAgcmV0dXJuIHVicmtfZm9sbG93
aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvciksIHBvcyk7Ci19
CisvLyBTdGF0aWMgaXRlcmF0b3JzCiAKLWludCB0ZXh0QnJlYWtDdXJyZW50KFRleHRCcmVha0l0
ZXJhdG9yKiBpdGVyYXRvcikKK1RleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvcihj
b25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQogewotICAgIHJldHVybiB1YnJrX2N1cnJl
bnQocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSk7Ci19CisgICAg
c3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNXb3JkQnJlYWtJdGVyYXRvciA9IGluaXRp
YWxpemVJdGVyYXRvcihVQlJLX1dPUkQpOworICAgIGlmICghc3RhdGljV29yZEJyZWFrSXRlcmF0
b3IpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi1ib29sIGlzVGV4dEJyZWFrKFRleHRCcmVh
a0l0ZXJhdG9yKiBpdGVyYXRvciwgaW50IHBvc2l0aW9uKQotewotICAgIHJldHVybiB1YnJrX2lz
Qm91bmRhcnkocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSwgcG9z
aXRpb24pOworICAgIHJldHVybiBzZXRUZXh0Rm9ySXRlcmF0b3Ioc3RhdGljV29yZEJyZWFrSXRl
cmF0b3IsIFN0cmluZ1ZpZXcoYnVmZmVyLCBsZW5ndGgpKTsKIH0KIAotYm9vbCBpc1dvcmRUZXh0
QnJlYWsoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yKQorVGV4dEJyZWFrSXRlcmF0b3IqIHNl
bnRlbmNlQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQogewot
ICAgIGludCBydWxlU3RhdHVzID0gdWJya19nZXRSdWxlU3RhdHVzKHJlaW50ZXJwcmV0X2Nhc3Q8
VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvcikpOwotICAgIHJldHVybiBydWxlU3RhdHVzICE9IFVC
UktfV09SRF9OT05FOwotfQotCi0jaWYgIVBMQVRGT1JNKElPUykKLXN0YXRpYyBUZXh0QnJlYWtJ
dGVyYXRvciogc2V0VXBJdGVyYXRvcldpdGhSdWxlcyhib29sJiBjcmVhdGVkSXRlcmF0b3IsIFRl
eHRCcmVha0l0ZXJhdG9yKiYgaXRlcmF0b3IsIGNvbnN0IGNoYXIqIGJyZWFrUnVsZXMsIGNvbnN0
IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgaWYgKCFjcmVhdGVkSXRlcmF0b3IpIHsKLSAgICAgICAgVVBhcnNl
RXJyb3IgcGFyc2VTdGF0dXM7Ci0gICAgICAgIFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVfWkVS
T19FUlJPUjsKLSAgICAgICAgU3RyaW5nIHJ1bGVzKGJyZWFrUnVsZXMpOwotICAgICAgICBpdGVy
YXRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGV4dEJyZWFrSXRlcmF0b3IqPih1YnJrX29wZW5SdWxl
cyhydWxlcy5jaGFyYWN0ZXJzKCksIHJ1bGVzLmxlbmd0aCgpLCAwLCAwLCAmcGFyc2VTdGF0dXMs
ICZvcGVuU3RhdHVzKSk7Ci0gICAgICAgIGNyZWF0ZWRJdGVyYXRvciA9IHRydWU7Ci0gICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoVV9TVUNDRVNTKG9wZW5TdGF0dXMpLCAiSUNVIGNvdWxkIG5v
dCBvcGVuIGEgYnJlYWsgaXRlcmF0b3I6ICVzICglZCkiLCB1X2Vycm9yTmFtZShvcGVuU3RhdHVz
KSwgb3BlblN0YXR1cyk7Ci0gICAgfQotICAgIGlmICghaXRlcmF0b3IpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgVUVycm9yQ29kZSBzZXRUZXh0U3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAg
IHVicmtfc2V0VGV4dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0b3Ip
LCBzdHJpbmcsIGxlbmd0aCwgJnNldFRleHRTdGF0dXMpOwotICAgIGlmIChVX0ZBSUxVUkUoc2V0
VGV4dFN0YXR1cykpCi0gICAgICAgIHJldHVybiAwOworICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVy
YXRvciogc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yID0gaW5pdGlhbGl6ZUl0ZXJhdG9yKFVC
UktfU0VOVEVOQ0UpOworICAgIGlmICghc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBpdGVyYXRvcjsKKyAgICByZXR1cm4g
c2V0VGV4dEZvckl0ZXJhdG9yKHN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvciwgU3RyaW5nVmll
dyhidWZmZXIsIGxlbmd0aCkpOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKLVRleHRC
cmVha0l0ZXJhdG9yKiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcs
IGludCBsZW5ndGgpCitUZXh0QnJlYWtJdGVyYXRvciogY3Vyc29yTW92ZW1lbnRJdGVyYXRvcihj
b25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQogewogI2lmICFQTEFURk9STShJT1MpCiAg
ICAgLy8gVGhpcyBydWxlIHNldCBpcyBiYXNlZCBvbiBjaGFyYWN0ZXItYnJlYWsgaXRlcmF0b3Ig
cnVsZXMgb2YgSUNVIDQuMApAQCAtMzIwLDMzICsyNDMsMTE2IEBAIFRleHRCcmVha0l0ZXJhdG9y
KiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG8KICAgICAgICAgIiRNYWwxICRNYWxWICRNYWwwOyIgICAg
ICAgICAgICAgICAvLyBNYWxheWFsYW0gVmlyYW1hIChiYWNrd2FyZCkKICAgICAgICAgIiEhc2Fm
ZV9yZXZlcnNlOyIKICAgICAgICAgIiEhc2FmZV9mb3J3YXJkOyI7Ci0gICAgc3RhdGljIGJvb2wg
Y3JlYXRlZEN1cnNvck1vdmVtZW50SXRlcmF0b3IgPSBmYWxzZTsKLSAgICBzdGF0aWMgVGV4dEJy
ZWFrSXRlcmF0b3IqIHN0YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0b3I7Ci0gICAgcmV0dXJuIHNl
dFVwSXRlcmF0b3JXaXRoUnVsZXMoY3JlYXRlZEN1cnNvck1vdmVtZW50SXRlcmF0b3IsIHN0YXRp
Y0N1cnNvck1vdmVtZW50SXRlcmF0b3IsIGtSdWxlcywgc3RyaW5nLCBsZW5ndGgpOworICAgIHN0
YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvciA9IGlu
aXRpYWxpemVJdGVyYXRvcldpdGhSdWxlcyhrUnVsZXMpOwogI2Vsc2UgLy8gUExBVEZPUk0oSU9T
KQogICAgIC8vIFVzZSB0aGUgc3BlY2lhbCBUaGFpIGNoYXJhY3RlciBicmVhayBpdGVyYXRvciBm
b3IgYWxsIGxvY2FsZXMKLSAgICBzdGF0aWMgYm9vbCBjcmVhdGVkQ3Vyc29yQnJlYWtJdGVyYXRv
cjsKLSAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0N1cnNvckJyZWFrSXRlcmF0
b3I7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNDdXJzb3JNb3ZlbWVudEl0
ZXJhdG9yID0gY3JlYXRlU2hhcmVkSXRlcmF0b3IoVUJSS19DSEFSQUNURVIsICJ0aCIpOworI2Vu
ZGlmIC8vICFQTEFURk9STShJT1MpCiAKLSAgICBpZiAoIXN0cmluZykKKyAgICBpZiAoIXN0YXRp
Y0N1cnNvck1vdmVtZW50SXRlcmF0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
aWYgKCFjcmVhdGVkQ3Vyc29yQnJlYWtJdGVyYXRvcikgewotICAgICAgICBVRXJyb3JDb2RlIG9w
ZW5TdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHN0YXRpY0N1cnNvckJyZWFrSXRlcmF0
b3IgPSByZWludGVycHJldF9jYXN0PFRleHRCcmVha0l0ZXJhdG9yKj4odWJya19vcGVuKFVCUktf
Q0hBUkFDVEVSLCAidGgiLCAwLCAwLCAmb3BlblN0YXR1cykpOwotICAgICAgICBjcmVhdGVkQ3Vy
c29yQnJlYWtJdGVyYXRvciA9IHRydWU7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoVV9T
VUNDRVNTKG9wZW5TdGF0dXMpLCAiSUNVIGNvdWxkIG5vdCBvcGVuIGEgYnJlYWsgaXRlcmF0b3I6
ICVzICglZCkiLCB1X2Vycm9yTmFtZShvcGVuU3RhdHVzKSwgb3BlblN0YXR1cyk7Ci0gICAgfQot
ICAgIGlmICghc3RhdGljQ3Vyc29yQnJlYWtJdGVyYXRvcikKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIHNldFRleHRGb3JJdGVyYXRvcihzdGF0aWNDdXJzb3JNb3ZlbWVudEl0
ZXJhdG9yLCBTdHJpbmdWaWV3KGJ1ZmZlciwgbGVuZ3RoKSk7Cit9CiAKLSAgICBVRXJyb3JDb2Rl
IHNldFRleHRTdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgdWJya19zZXRUZXh0KHJlaW50ZXJw
cmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihzdGF0aWNDdXJzb3JCcmVha0l0ZXJhdG9yKSwgc3Ry
aW5nLCBsZW5ndGgsICZzZXRUZXh0U3RhdHVzKTsKLSAgICBpZiAoVV9GQUlMVVJFKHNldFRleHRT
dGF0dXMpKQorVGV4dEJyZWFrSXRlcmF0b3IqIGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvcihTdHJp
bmdWaWV3IHN0cmluZywgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBw
cmlvckNvbnRleHQsIHVuc2lnbmVkIHByaW9yQ29udGV4dExlbmd0aCkKK3sKKyAgICBUZXh0QnJl
YWtJdGVyYXRvciogaXRlcmF0b3IgPSByZWludGVycHJldF9jYXN0PFRleHRCcmVha0l0ZXJhdG9y
Kj4oTGluZUJyZWFrSXRlcmF0b3JQb29sOjpzaGFyZWRQb29sKCkudGFrZShsb2NhbGUpKTsKKyAg
ICBpZiAoIWl0ZXJhdG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBz
dGF0aWNDdXJzb3JCcmVha0l0ZXJhdG9yOwotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisgICAg
cmV0dXJuIHNldENvbnRleHRBd2FyZVRleHRGb3JJdGVyYXRvcihpdGVyYXRvciwgc3RyaW5nLCBw
cmlvckNvbnRleHQsIHByaW9yQ29udGV4dExlbmd0aCk7Cit9CisKK3ZvaWQgcmVsZWFzZUxpbmVC
cmVha0l0ZXJhdG9yKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAgICBBU1NFUlRf
QVJHKGl0ZXJhdG9yLCBpdGVyYXRvcik7CisKKyAgICBMaW5lQnJlYWtJdGVyYXRvclBvb2w6OnNo
YXJlZFBvb2woKS5wdXQocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9y
KSk7Cit9CisKK3N0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogbm9uU2hhcmVkQ2hhcmFjdGVyQnJl
YWtJdGVyYXRvcjsKKworc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVBbmRTd2FwTm9uU2hhcmVk
Q2hhcmFjdGVyQnJlYWtJdGVyYXRvcihUZXh0QnJlYWtJdGVyYXRvciogZXhwZWN0ZWQsIFRleHRC
cmVha0l0ZXJhdG9yKiBuZXdWYWx1ZSkKK3sKKyNpZiBFTkFCTEUoQ09NUEFSRV9BTkRfU1dBUCkK
KyAgICByZXR1cm4gd2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
bm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciksIGV4cGVjdGVkLCBuZXdWYWx1ZSk7Cisj
ZWxzZQorICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG5vblNoYXJlZENoYXJhY3RlckJy
ZWFrSXRlcmF0b3JNdXRleCwgKCkpOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihub25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yTXV0ZXgpOworICAgIGlmIChub25TaGFyZWRDaGFyYWN0ZXJC
cmVha0l0ZXJhdG9yICE9IGV4cGVjdGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbm9u
U2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciA9IG5ld1ZhbHVlOworICAgIHJldHVybiB0cnVl
OworI2VuZGlmCit9CisKK05vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6Ok5vblNoYXJl
ZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkK
K3sKKyAgICBtX2l0ZXJhdG9yID0gbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKKwor
ICAgIGJvb2wgY3JlYXRlZEl0ZXJhdG9yID0gbV9pdGVyYXRvciAmJiBjb21wYXJlQW5kU3dhcE5v
blNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IobV9pdGVyYXRvciwgMCk7CisgICAgaWYgKCFj
cmVhdGVkSXRlcmF0b3IpCisgICAgICAgIG1faXRlcmF0b3IgPSBpbml0aWFsaXplSXRlcmF0b3Io
VUJSS19DSEFSQUNURVIpOworICAgIGlmICghbV9pdGVyYXRvcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9pdGVyYXRvciA9IHNldFRleHRGb3JJdGVyYXRvcihtX2l0ZXJhdG9yLCBTdHJpbmdW
aWV3KGJ1ZmZlciwgbGVuZ3RoKSk7Cit9CisKK05vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0
b3I6On5Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKCkKK3sKKyAgICBpZiAoIWNvbXBh
cmVBbmRTd2FwTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcigwLCBtX2l0ZXJhdG9yKSkK
KyAgICAgICAgdWJya19jbG9zZShyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4obV9p
dGVyYXRvcikpOworfQorCisKKy8vIEl0ZXJhdG9yIGltcGxlbWVuYXRpb24uCisKK2ludCB0ZXh0
QnJlYWtGaXJzdChUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IpCit7CisgICAgcmV0dXJuIHVi
cmtfZmlyc3QocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSk7Cit9
CisKK2ludCB0ZXh0QnJlYWtMYXN0KFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAg
ICByZXR1cm4gdWJya19sYXN0KHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVy
YXRvcikpOworfQorCitpbnQgdGV4dEJyZWFrTmV4dChUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0
b3IpCit7CisgICAgcmV0dXJuIHVicmtfbmV4dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJh
dG9yKj4oaXRlcmF0b3IpKTsKK30KKworaW50IHRleHRCcmVha1ByZXZpb3VzKFRleHRCcmVha0l0
ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAgICByZXR1cm4gdWJya19wcmV2aW91cyhyZWludGVycHJl
dF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0b3IpKTsKK30KKworaW50IHRleHRCcmVha1By
ZWNlZGluZyhUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IsIGludCBwb3MpCit7CisgICAgcmV0
dXJuIHVicmtfcHJlY2VkaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVy
YXRvciksIHBvcyk7Cit9CisKK2ludCB0ZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0
b3IqIGl0ZXJhdG9yLCBpbnQgcG9zKQoreworICAgIHJldHVybiB1YnJrX2ZvbGxvd2luZyhyZWlu
dGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0b3IpLCBwb3MpOworfQorCitpbnQg
dGV4dEJyZWFrQ3VycmVudChUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IpCit7CisgICAgcmV0
dXJuIHVicmtfY3VycmVudChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0
b3IpKTsKK30KKworYm9vbCBpc1RleHRCcmVhayhUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3Is
IGludCBwb3NpdGlvbikKK3sKKyAgICByZXR1cm4gdWJya19pc0JvdW5kYXJ5KHJlaW50ZXJwcmV0
X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvciksIHBvc2l0aW9uKTsKK30KKworYm9vbCBp
c1dvcmRUZXh0QnJlYWsoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yKQoreworICAgIGludCBy
dWxlU3RhdHVzID0gdWJya19nZXRSdWxlU3RhdHVzKHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRl
cmF0b3IqPihpdGVyYXRvcikpOworICAgIHJldHVybiBydWxlU3RhdHVzICE9IFVCUktfV09SRF9O
T05FOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2ljdS9VVGV4
dFByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9p
Y3UvVVRleHRQcm92aWRlci5oCShyZXZpc2lvbiAxNjE4MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgaW5saW5lIFVUZXh0UHJvdmlkZXJDb250ZXh0IHVUZXh0UHJvdmlkZQogICAgIHJl
dHVybiBVVGV4dFByb3ZpZGVyQ29udGV4dDo6UHJpb3JDb250ZXh0OwogfQogCi1pbmxpbmUgdm9p
ZCB1VGV4dEluaXRpYWxpemUoVVRleHQqIHRleHQsIGNvbnN0IFVUZXh0RnVuY3MqIGZ1bmNzLCBj
b25zdCB2b2lkKiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgVUNoYXIqIHByaW9yQ29u
dGV4dCwgaW50IHByaW9yQ29udGV4dExlbmd0aCkKK2lubGluZSB2b2lkIGluaXRpYWxpemVDb250
ZXh0QXdhcmVVVGV4dFByb3ZpZGVyKFVUZXh0KiB0ZXh0LCBjb25zdCBVVGV4dEZ1bmNzKiBmdW5j
cywgY29uc3Qgdm9pZCogc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFVDaGFyKiBwcmlv
ckNvbnRleHQsIGludCBwcmlvckNvbnRleHRMZW5ndGgpCiB7CiAgICAgdGV4dC0+cEZ1bmNzID0g
ZnVuY3M7CiAgICAgdGV4dC0+cHJvdmlkZXJQcm9wZXJ0aWVzID0gMSA8PCBVVEVYVF9QUk9WSURF
Ul9TVEFCTEVfQ0hVTktTOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pY3Uv
VVRleHRQcm92aWRlckxhdGluMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9pY3UvVVRleHRQcm92aWRlckxhdGluMS5jcHAJKHJldmlzaW9uIDE2MTgxNykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsMjMzIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIGlubGluZSBVVGV4dFByb3ZpZGVyQ29udGV4dCB0ZXh0TGF0aW4xR2V0
Q3VycmVudENvbnRleHQoY29uc3QgVVRleHQqIHRleHQpCisvLyBMYXRpbjEgcHJvdmlkZXIKKwor
c3RhdGljIFVUZXh0KiB1VGV4dExhdGluMUNsb25lKFVUZXh0KiwgY29uc3QgVVRleHQqLCBVQm9v
bCwgVUVycm9yQ29kZSopOworc3RhdGljIGludDY0X3QgdVRleHRMYXRpbjFOYXRpdmVMZW5ndGgo
VVRleHQqKTsKK3N0YXRpYyBVQm9vbCB1VGV4dExhdGluMUFjY2VzcyhVVGV4dCosIGludDY0X3Qs
IFVCb29sKTsKK3N0YXRpYyBpbnQzMl90IHVUZXh0TGF0aW4xRXh0cmFjdChVVGV4dCosIGludDY0
X3QsIGludDY0X3QsIFVDaGFyKiwgaW50MzJfdCwgVUVycm9yQ29kZSopOworc3RhdGljIGludDY0
X3QgdVRleHRMYXRpbjFNYXBPZmZzZXRUb05hdGl2ZShjb25zdCBVVGV4dCopOworc3RhdGljIGlu
dDMyX3QgdVRleHRMYXRpbjFNYXBOYXRpdmVJbmRleFRvVVRGMTYoY29uc3QgVVRleHQqLCBpbnQ2
NF90KTsKK3N0YXRpYyB2b2lkIHVUZXh0TGF0aW4xQ2xvc2UoVVRleHQqKTsKKworc3RhdGljIHN0
cnVjdCBVVGV4dEZ1bmNzIHVUZXh0TGF0aW4xRnVuY3MgPSB7CisgICAgc2l6ZW9mKFVUZXh0RnVu
Y3MpLAorICAgIDAsIDAsIDAsCisgICAgdVRleHRMYXRpbjFDbG9uZSwKKyAgICB1VGV4dExhdGlu
MU5hdGl2ZUxlbmd0aCwKKyAgICB1VGV4dExhdGluMUFjY2VzcywKKyAgICB1VGV4dExhdGluMUV4
dHJhY3QsCisgICAgMCwKKyAgICAwLAorICAgIHVUZXh0TGF0aW4xTWFwT2Zmc2V0VG9OYXRpdmUs
CisgICAgdVRleHRMYXRpbjFNYXBOYXRpdmVJbmRleFRvVVRGMTYsCisgICAgdVRleHRMYXRpbjFD
bG9zZSwKKyAgICAwLCAwLCAwCit9OworCitzdGF0aWMgVVRleHQqIHVUZXh0TGF0aW4xQ2xvbmUo
VVRleHQqIGRlc3RpbmF0aW9uLCBjb25zdCBVVGV4dCogc291cmNlLCBVQm9vbCBkZWVwLCBVRXJy
b3JDb2RlKiBzdGF0dXMpCit7CisgICAgQVNTRVJUX1VOVVNFRChkZWVwLCAhZGVlcCk7CisKKyAg
ICBpZiAoVV9GQUlMVVJFKCpzdGF0dXMpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFVUZXh0
KiByZXN1bHQgPSB1dGV4dF9zZXR1cChkZXN0aW5hdGlvbiwgc2l6ZW9mKFVDaGFyKSAqIChVVGV4
dFdpdGhCdWZmZXJJbmxpbmVDYXBhY2l0eSArIDEpLCBzdGF0dXMpOworICAgIGlmIChVX0ZBSUxV
UkUoKnN0YXR1cykpCisgICAgICAgIHJldHVybiBkZXN0aW5hdGlvbjsKKyAgICAKKyAgICByZXN1
bHQtPnByb3ZpZGVyUHJvcGVydGllcyA9IHNvdXJjZS0+cHJvdmlkZXJQcm9wZXJ0aWVzOworICAg
IAorICAgIC8qIFBvaW50IGF0IHRoZSBzYW1lIHBvc2l0aW9uLCBidXQgd2l0aCBhbiBlbXB0eSBi
dWZmZXIgKi8KKyAgICByZXN1bHQtPmNodW5rTmF0aXZlU3RhcnQgPSBzb3VyY2UtPmNodW5rTmF0
aXZlU3RhcnQ7CisgICAgcmVzdWx0LT5jaHVua05hdGl2ZUxpbWl0ID0gc291cmNlLT5jaHVua05h
dGl2ZVN0YXJ0OworICAgIHJlc3VsdC0+bmF0aXZlSW5kZXhpbmdMaW1pdCA9IHNvdXJjZS0+Y2h1
bmtOYXRpdmVTdGFydDsKKyAgICByZXN1bHQtPmNodW5rT2Zmc2V0ID0gMDsKKyAgICByZXN1bHQt
PmNvbnRleHQgPSBzb3VyY2UtPmNvbnRleHQ7CisgICAgcmVzdWx0LT5hID0gc291cmNlLT5hOwor
ICAgIHJlc3VsdC0+cEZ1bmNzID0gJnVUZXh0TGF0aW4xRnVuY3M7CisgICAgcmVzdWx0LT5jaHVu
a0NvbnRlbnRzID0gKFVDaGFyKilyZXN1bHQtPnBFeHRyYTsKKyAgICBtZW1zZXQoY29uc3RfY2Fz
dDxVQ2hhcio+KHJlc3VsdC0+Y2h1bmtDb250ZW50cyksIDAsIHNpemVvZihVQ2hhcikgKiAoVVRl
eHRXaXRoQnVmZmVySW5saW5lQ2FwYWNpdHkgKyAxKSk7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgaW50NjRfdCB1VGV4dExhdGluMU5hdGl2ZUxlbmd0aChVVGV4dCogdVRleHQp
Cit7CisgICAgcmV0dXJuIHVUZXh0LT5hOworfQorCitzdGF0aWMgVUJvb2wgdVRleHRMYXRpbjFB
Y2Nlc3MoVVRleHQqIHVUZXh0LCBpbnQ2NF90IGluZGV4LCBVQm9vbCBmb3J3YXJkKQoreworICAg
IGludDY0X3QgbGVuZ3RoID0gdVRleHQtPmE7CisKKyAgICBpZiAoZm9yd2FyZCkgeworICAgICAg
ICBpZiAoaW5kZXggPCB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCAmJiBpbmRleCA+PSB1VGV4dC0+
Y2h1bmtOYXRpdmVTdGFydCkgeworICAgICAgICAgICAgLyogQWxyZWFkeSBpbnNpZGUgdGhlIGJ1
ZmZlci4gU2V0IHRoZSBuZXcgb2Zmc2V0LiAqLworICAgICAgICAgICAgdVRleHQtPmNodW5rT2Zm
c2V0ID0gKGludDMyX3QpKGluZGV4IC0gdVRleHQtPmNodW5rTmF0aXZlU3RhcnQpOworICAgICAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0
aCAmJiB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCA9PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIC8q
IE9mZiB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIGJ1dCB3ZSBjYW4ndCBnZXQgaXQuICovCisgICAg
ICAgICAgICB1VGV4dC0+Y2h1bmtPZmZzZXQgPSB1VGV4dC0+Y2h1bmtMZW5ndGg7CisgICAgICAg
ICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
aW5kZXggPD0gdVRleHQtPmNodW5rTmF0aXZlTGltaXQgJiYgaW5kZXggPiB1VGV4dC0+Y2h1bmtO
YXRpdmVTdGFydCkgeworICAgICAgICAgICAgLyogQWxyZWFkeSBpbnNpZGUgdGhlIGJ1ZmZlci4g
U2V0IHRoZSBuZXcgb2Zmc2V0LiAqLworICAgICAgICAgICAgdVRleHQtPmNodW5rT2Zmc2V0ID0g
KGludDMyX3QpKGluZGV4IC0gdVRleHQtPmNodW5rTmF0aXZlU3RhcnQpOworICAgICAgICAgICAg
cmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpbmRleCAmJiAhdVRleHQtPmNo
dW5rTmF0aXZlU3RhcnQpIHsKKyAgICAgICAgICAgIC8qIEFscmVhZHkgYXQgdGhlIGJlZ2lubmlu
ZzsgY2FuJ3QgZ28gYW55IGZhcnRoZXIgKi8KKyAgICAgICAgICAgIHVUZXh0LT5jaHVua09mZnNl
dCA9IDA7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgaWYgKGZvcndhcmQpIHsKKyAgICAgICAgdVRleHQtPmNodW5rTmF0aXZlU3RhcnQgPSBp
bmRleDsKKyAgICAgICAgdVRleHQtPmNodW5rTmF0aXZlTGltaXQgPSB1VGV4dC0+Y2h1bmtOYXRp
dmVTdGFydCArIFVUZXh0V2l0aEJ1ZmZlcklubGluZUNhcGFjaXR5OworICAgICAgICBpZiAodVRl
eHQtPmNodW5rTmF0aXZlTGltaXQgPiBsZW5ndGgpCisgICAgICAgICAgICB1VGV4dC0+Y2h1bmtO
YXRpdmVMaW1pdCA9IGxlbmd0aDsKKworICAgICAgICB1VGV4dC0+Y2h1bmtPZmZzZXQgPSAwOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ID0gaW5kZXg7Cisg
ICAgICAgIGlmICh1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCA+IGxlbmd0aCkKKyAgICAgICAgICAg
IHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ID0gbGVuZ3RoOworCisgICAgICAgIHVUZXh0LT5jaHVu
a05hdGl2ZVN0YXJ0ID0gdVRleHQtPmNodW5rTmF0aXZlTGltaXQgLSAgVVRleHRXaXRoQnVmZmVy
SW5saW5lQ2FwYWNpdHk7CisgICAgICAgIGlmICh1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCA8IDAp
CisgICAgICAgICAgICB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCA9IDA7CisKKyAgICAgICAgdVRl
eHQtPmNodW5rT2Zmc2V0ID0gdVRleHQtPmNodW5rTGVuZ3RoOworICAgIH0KKyAgICB1VGV4dC0+
Y2h1bmtMZW5ndGggPSAoaW50MzJfdCkgKHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0IC0gdVRleHQt
PmNodW5rTmF0aXZlU3RhcnQpOworCisgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGNvbnN0X2Nh
c3Q8VUNoYXIqPih1VGV4dC0+Y2h1bmtDb250ZW50cyksIHN0YXRpY19jYXN0PGNvbnN0IExDaGFy
Kj4odVRleHQtPmNvbnRleHQpICsgdVRleHQtPmNodW5rTmF0aXZlU3RhcnQsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPih1VGV4dC0+Y2h1bmtMZW5ndGgpKTsKKworICAgIHVUZXh0LT5uYXRpdmVJbmRl
eGluZ0xpbWl0ID0gdVRleHQtPmNodW5rTGVuZ3RoOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K3N0YXRpYyBpbnQzMl90IHVUZXh0TGF0aW4xRXh0cmFjdChVVGV4dCogdVRleHQsIGludDY0X3Qg
c3RhcnQsIGludDY0X3QgbGltaXQsIFVDaGFyKiBkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwg
VUVycm9yQ29kZSogc3RhdHVzKQoreworICAgIGludDY0X3QgbGVuZ3RoID0gdVRleHQtPmE7Cisg
ICAgaWYgKFVfRkFJTFVSRSgqc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
ZGVzdENhcGFjaXR5IDwgMCB8fCAoIWRlc3QgJiYgZGVzdENhcGFjaXR5ID4gMCkpIHsKKyAgICAg
ICAgKnN0YXR1cyA9IFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+IGxpbWl0IHx8IChsaW1pdCAt
IHN0YXJ0KSA+IElOVDMyX01BWCkgeworICAgICAgICAqc3RhdHVzID0gVV9JTkRFWF9PVVRPRkJP
VU5EU19FUlJPUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHN0YXJ0ID4g
bGVuZ3RoKQorICAgICAgICBzdGFydCA9IGxlbmd0aDsKKyAgICBpZiAobGltaXQgPiBsZW5ndGgp
CisgICAgICAgIGxpbWl0ID0gbGVuZ3RoOworCisgICAgbGVuZ3RoID0gbGltaXQgLSBzdGFydDsK
KyAgICAKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZGVz
dENhcGFjaXR5ID4gMCAmJiAhZGVzdCkgeworICAgICAgICBpbnQzMl90IHRyaW1tZWRMZW5ndGgg
PSBsZW5ndGg7CisgICAgICAgIGlmICh0cmltbWVkTGVuZ3RoID4gZGVzdENhcGFjaXR5KQorICAg
ICAgICAgICAgdHJpbW1lZExlbmd0aCA9IGRlc3RDYXBhY2l0eTsKKworICAgICAgICBTdHJpbmdJ
bXBsOjpjb3B5Q2hhcnMoZGVzdCwgc3RhdGljX2Nhc3Q8Y29uc3QgTENoYXIqPih1VGV4dC0+Y29u
dGV4dCkgKyBzdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRyaW1tZWRMZW5ndGgpKTsKKyAg
ICB9CisKKyAgICBpZiAobGVuZ3RoIDwgZGVzdENhcGFjaXR5KSB7CisgICAgICAgIGRlc3RbbGVu
Z3RoXSA9IDA7CisgICAgICAgIGlmICgqc3RhdHVzID09IFVfU1RSSU5HX05PVF9URVJNSU5BVEVE
X1dBUk5JTkcpCisgICAgICAgICAgICAqc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIH0gZWxz
ZSBpZiAobGVuZ3RoID09IGRlc3RDYXBhY2l0eSkKKyAgICAgICAgKnN0YXR1cyA9IFVfU1RSSU5H
X05PVF9URVJNSU5BVEVEX1dBUk5JTkc7CisgICAgZWxzZQorICAgICAgICAqc3RhdHVzID0gVV9C
VUZGRVJfT1ZFUkZMT1dfRVJST1I7CisKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCitzdGF0aWMg
aW50NjRfdCB1VGV4dExhdGluMU1hcE9mZnNldFRvTmF0aXZlKGNvbnN0IFVUZXh0KiB1VGV4dCkK
K3sKKyAgICByZXR1cm4gdVRleHQtPmNodW5rTmF0aXZlU3RhcnQgKyB1VGV4dC0+Y2h1bmtPZmZz
ZXQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IHVUZXh0TGF0aW4xTWFwTmF0aXZlSW5kZXhUb1VURjE2
KGNvbnN0IFVUZXh0KiB1VGV4dCwgaW50NjRfdCBuYXRpdmVJbmRleCkKK3sKKyAgICBBU1NFUlRf
VU5VU0VEKHVUZXh0LCB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCA+PSBuYXRpdmVJbmRleCk7Cisg
ICAgQVNTRVJUX1VOVVNFRCh1VGV4dCwgbmF0aXZlSW5kZXggPCB1VGV4dC0+Y2h1bmtOYXRpdmVM
aW1pdCk7CisgICAgcmV0dXJuIG5hdGl2ZUluZGV4OworfQorCitzdGF0aWMgdm9pZCB1VGV4dExh
dGluMUNsb3NlKFVUZXh0KiB1VGV4dCkKK3sKKyAgICB1VGV4dC0+Y29udGV4dCA9IDA7Cit9CisK
K1VUZXh0KiBvcGVuTGF0aW4xVVRleHRQcm92aWRlcihVVGV4dFdpdGhCdWZmZXIqIHV0V2l0aEJ1
ZmZlciwgY29uc3QgTENoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVRXJyb3JDb2RlKiBz
dGF0dXMpCit7CisgICAgaWYgKFVfRkFJTFVSRSgqc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgaWYgKCFzdHJpbmcgfHwgbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgeworICAgICAgICAqc3RhdHVz
ID0gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisgICAgVVRleHQqIHRleHQgPSB1dGV4dF9zZXR1cCgmdXRXaXRoQnVmZmVyLT50ZXh0LCBz
aXplb2YodXRXaXRoQnVmZmVyLT5idWZmZXIpLCBzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUo
KnN0YXR1cykpIHsKKyAgICAgICAgQVNTRVJUKCF0ZXh0KTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgdGV4dC0+Y29udGV4dCA9IHN0cmluZzsKKyAgICB0ZXh0LT5hID0g
KGludDY0X3QpbGVuZ3RoOworICAgIHRleHQtPnBGdW5jcyA9ICZ1VGV4dExhdGluMUZ1bmNzOwor
ICAgIHRleHQtPmNodW5rQ29udGVudHMgPSAoVUNoYXIqKXRleHQtPnBFeHRyYTsKKyAgICBtZW1z
ZXQoY29uc3RfY2FzdDxVQ2hhcio+KHRleHQtPmNodW5rQ29udGVudHMpLCAwLCBzaXplb2YoVUNo
YXIpICogKFVUZXh0V2l0aEJ1ZmZlcklubGluZUNhcGFjaXR5ICsgMSkpOworCisgICAgcmV0dXJu
IHRleHQ7Cit9CisKKworLy8gTGF0aW4xQ29udGV4dEF3YXJlIHByb3ZpZGVyCisKK3N0YXRpYyBV
VGV4dCogdVRleHRMYXRpbjFDb250ZXh0QXdhcmVDbG9uZShVVGV4dCosIGNvbnN0IFVUZXh0Kiwg
VUJvb2wsIFVFcnJvckNvZGUqKTsKK3N0YXRpYyBpbnQ2NF90IHVUZXh0TGF0aW4xQ29udGV4dEF3
YXJlTmF0aXZlTGVuZ3RoKFVUZXh0Kik7CitzdGF0aWMgVUJvb2wgdVRleHRMYXRpbjFDb250ZXh0
QXdhcmVBY2Nlc3MoVVRleHQqLCBpbnQ2NF90LCBVQm9vbCk7CitzdGF0aWMgaW50MzJfdCB1VGV4
dExhdGluMUNvbnRleHRBd2FyZUV4dHJhY3QoVVRleHQqLCBpbnQ2NF90LCBpbnQ2NF90LCBVQ2hh
ciosIGludDMyX3QsIFVFcnJvckNvZGUqKTsKK3N0YXRpYyB2b2lkIHVUZXh0TGF0aW4xQ29udGV4
dEF3YXJlQ2xvc2UoVVRleHQqKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBVVGV4dEZ1bmNzIHRl
eHRMYXRpbjFDb250ZXh0QXdhcmVGdW5jcyA9IHsKKyAgICBzaXplb2YoVVRleHRGdW5jcyksCisg
ICAgMCwgMCwgMCwKKyAgICB1VGV4dExhdGluMUNvbnRleHRBd2FyZUNsb25lLAorICAgIHVUZXh0
TGF0aW4xQ29udGV4dEF3YXJlTmF0aXZlTGVuZ3RoLAorICAgIHVUZXh0TGF0aW4xQ29udGV4dEF3
YXJlQWNjZXNzLAorICAgIHVUZXh0TGF0aW4xQ29udGV4dEF3YXJlRXh0cmFjdCwKKyAgICAwLCAw
LCAwLCAwLAorICAgIHVUZXh0TGF0aW4xQ29udGV4dEF3YXJlQ2xvc2UsCisgICAgMCwgMCwgMCwK
K307CisKK3N0YXRpYyBpbmxpbmUgVVRleHRQcm92aWRlckNvbnRleHQgdGV4dExhdGluMUNvbnRl
eHRBd2FyZUdldEN1cnJlbnRDb250ZXh0KGNvbnN0IFVUZXh0KiB0ZXh0KQogewogICAgIGlmICgh
dGV4dC0+Y2h1bmtDb250ZW50cykKICAgICAgICAgcmV0dXJuIFVUZXh0UHJvdmlkZXJDb250ZXh0
OjpOb0NvbnRleHQ7CiAgICAgcmV0dXJuIHRleHQtPmNodW5rQ29udGVudHMgPT0gdGV4dC0+cEV4
dHJhID8gVVRleHRQcm92aWRlckNvbnRleHQ6OlByaW1hcnlDb250ZXh0IDogVVRleHRQcm92aWRl
ckNvbnRleHQ6OlByaW9yQ29udGV4dDsKIH0KIAotc3RhdGljIHZvaWQgdGV4dExhdGluMU1vdmVJ
blByaW1hcnlDb250ZXh0KFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4LCBpbnQ2NF90
IG5hdGl2ZUxlbmd0aCwgVUJvb2wgZm9yd2FyZCkKK3N0YXRpYyB2b2lkIHRleHRMYXRpbjFDb250
ZXh0QXdhcmVNb3ZlSW5QcmltYXJ5Q29udGV4dChVVGV4dCogdGV4dCwgaW50NjRfdCBuYXRpdmVJ
bmRleCwgaW50NjRfdCBuYXRpdmVMZW5ndGgsIFVCb29sIGZvcndhcmQpCiB7CiAgICAgQVNTRVJU
KHRleHQtPmNodW5rQ29udGVudHMgPT0gdGV4dC0+cEV4dHJhKTsKICAgICBpZiAoZm9yd2FyZCkg
ewpAQCAtNjMsMTQgKzI4MiwxNCBAQCBzdGF0aWMgdm9pZCB0ZXh0TGF0aW4xTW92ZUluUHJpbWFy
eUNvbnRlCiAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGNvbnN0X2Nhc3Q8VUNoYXIqPih0ZXh0
LT5jaHVua0NvbnRlbnRzKSwgc3RhdGljX2Nhc3Q8Y29uc3QgTENoYXIqPih0ZXh0LT5wKSArICh0
ZXh0LT5jaHVua05hdGl2ZVN0YXJ0IC0gdGV4dC0+YiksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0
ZXh0LT5jaHVua0xlbmd0aCkpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXh0TGF0aW4xU3dpdGNoVG9Q
cmltYXJ5Q29udGV4dChVVGV4dCogdGV4dCwgaW50NjRfdCBuYXRpdmVJbmRleCwgaW50NjRfdCBu
YXRpdmVMZW5ndGgsIFVCb29sIGZvcndhcmQpCitzdGF0aWMgdm9pZCB0ZXh0TGF0aW4xQ29udGV4
dEF3YXJlU3dpdGNoVG9QcmltYXJ5Q29udGV4dChVVGV4dCogdGV4dCwgaW50NjRfdCBuYXRpdmVJ
bmRleCwgaW50NjRfdCBuYXRpdmVMZW5ndGgsIFVCb29sIGZvcndhcmQpCiB7CiAgICAgQVNTRVJU
KCF0ZXh0LT5jaHVua0NvbnRlbnRzIHx8IHRleHQtPmNodW5rQ29udGVudHMgPT0gdGV4dC0+cSk7
CiAgICAgdGV4dC0+Y2h1bmtDb250ZW50cyA9IHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4odGV4
dC0+cEV4dHJhKTsKLSAgICB0ZXh0TGF0aW4xTW92ZUluUHJpbWFyeUNvbnRleHQodGV4dCwgbmF0
aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7CisgICAgdGV4dExhdGluMUNvbnRleHRB
d2FyZU1vdmVJblByaW1hcnlDb250ZXh0KHRleHQsIG5hdGl2ZUluZGV4LCBuYXRpdmVMZW5ndGgs
IGZvcndhcmQpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXh0TGF0aW4xTW92ZUluUHJpb3JDb250ZXh0
KFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4LCBpbnQ2NF90IG5hdGl2ZUxlbmd0aCwg
VUJvb2wgZm9yd2FyZCkKK3N0YXRpYyB2b2lkIHRleHRMYXRpbjFDb250ZXh0QXdhcmVNb3ZlSW5Q
cmlvckNvbnRleHQoVVRleHQqIHRleHQsIGludDY0X3QgbmF0aXZlSW5kZXgsIGludDY0X3QgbmF0
aXZlTGVuZ3RoLCBVQm9vbCBmb3J3YXJkKQogewogICAgIEFTU0VSVCh0ZXh0LT5jaHVua0NvbnRl
bnRzID09IHRleHQtPnEpOwogICAgIEFTU0VSVChmb3J3YXJkID8gbmF0aXZlSW5kZXggPCB0ZXh0
LT5iIDogbmF0aXZlSW5kZXggPD0gdGV4dC0+Yik7CkBAIC04Niw1OCArMzA1LDUwIEBAIHN0YXRp
YyB2b2lkIHRleHRMYXRpbjFNb3ZlSW5QcmlvckNvbnRleHQKICAgICB0ZXh0LT5jaHVua09mZnNl
dCA9IHN0ZDo6bWluKG9mZnNldCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgp
ID8gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0KSA6IDAsIHRleHQtPmNodW5rTGVuZ3RoKTsK
IH0KIAotc3RhdGljIHZvaWQgdGV4dExhdGluMVN3aXRjaFRvUHJpb3JDb250ZXh0KFVUZXh0KiB0
ZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4LCBpbnQ2NF90IG5hdGl2ZUxlbmd0aCwgVUJvb2wgZm9y
d2FyZCkKK3N0YXRpYyB2b2lkIHRleHRMYXRpbjFDb250ZXh0QXdhcmVTd2l0Y2hUb1ByaW9yQ29u
dGV4dChVVGV4dCogdGV4dCwgaW50NjRfdCBuYXRpdmVJbmRleCwgaW50NjRfdCBuYXRpdmVMZW5n
dGgsIFVCb29sIGZvcndhcmQpCiB7CiAgICAgQVNTRVJUKCF0ZXh0LT5jaHVua0NvbnRlbnRzIHx8
IHRleHQtPmNodW5rQ29udGVudHMgPT0gdGV4dC0+cEV4dHJhKTsKICAgICB0ZXh0LT5jaHVua0Nv
bnRlbnRzID0gc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPih0ZXh0LT5xKTsKLSAgICB0ZXh0TGF0
aW4xTW92ZUluUHJpb3JDb250ZXh0KHRleHQsIG5hdGl2ZUluZGV4LCBuYXRpdmVMZW5ndGgsIGZv
cndhcmQpOworICAgIHRleHRMYXRpbjFDb250ZXh0QXdhcmVNb3ZlSW5QcmlvckNvbnRleHQodGV4
dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7CiB9CiAKLS8vIC0tIEJlZ2lu
IExhdGluLTEgcHJvdmlkZXIgZnVuY3Rpb25zIC0tCi0KLXN0YXRpYyBVVGV4dCogdVRleHRMYXRp
bjFDbG9uZShVVGV4dCosIGNvbnN0IFVUZXh0KiwgVUJvb2wsIFVFcnJvckNvZGUqKTsKLXN0YXRp
YyBpbnQ2NF90IHVUZXh0TGF0aW4xTmF0aXZlTGVuZ3RoKFVUZXh0Kik7IAotc3RhdGljIFVCb29s
IHVUZXh0TGF0aW4xQWNjZXNzKFVUZXh0KiwgaW50NjRfdCwgVUJvb2wpOyAKLXN0YXRpYyBpbnQz
Ml90IHVUZXh0TGF0aW4xRXh0cmFjdChVVGV4dCosIGludDY0X3QsIGludDY0X3QsIFVDaGFyKiwg
aW50MzJfdCwgVUVycm9yQ29kZSopOyAKLXN0YXRpYyB2b2lkIHVUZXh0TGF0aW4xQ2xvc2UoVVRl
eHQqKTsKLQotc3RhdGljIFVUZXh0KiB1VGV4dExhdGluMUNsb25lKFVUZXh0KiBkZXN0aW5hdGlv
biwgY29uc3QgVVRleHQqIHNvdXJjZSwgVUJvb2wgZGVlcCwgVUVycm9yQ29kZSogc3RhdHVzKQor
c3RhdGljIFVUZXh0KiB1VGV4dExhdGluMUNvbnRleHRBd2FyZUNsb25lKFVUZXh0KiBkZXN0aW5h
dGlvbiwgY29uc3QgVVRleHQqIHNvdXJjZSwgVUJvb2wgZGVlcCwgVUVycm9yQ29kZSogc3RhdHVz
KQogewogICAgIHJldHVybiB1VGV4dENsb25lSW1wbChkZXN0aW5hdGlvbiwgc291cmNlLCBkZWVw
LCBzdGF0dXMpOwogfQogCi1zdGF0aWMgaW50NjRfdCB1VGV4dExhdGluMU5hdGl2ZUxlbmd0aChV
VGV4dCogdGV4dCkKK3N0YXRpYyBpbnQ2NF90IHVUZXh0TGF0aW4xQ29udGV4dEF3YXJlTmF0aXZl
TGVuZ3RoKFVUZXh0KiB0ZXh0KQogewogICAgIHJldHVybiB0ZXh0LT5hICsgdGV4dC0+YjsKIH0K
IAotc3RhdGljIFVCb29sIHVUZXh0TGF0aW4xQWNjZXNzKFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5h
dGl2ZUluZGV4LCBVQm9vbCBmb3J3YXJkKQorc3RhdGljIFVCb29sIHVUZXh0TGF0aW4xQ29udGV4
dEF3YXJlQWNjZXNzKFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4LCBVQm9vbCBmb3J3
YXJkKQogewogICAgIGlmICghdGV4dC0+Y29udGV4dCkKICAgICAgICAgcmV0dXJuIEZBTFNFOwot
ICAgIGludDY0X3QgbmF0aXZlTGVuZ3RoID0gdVRleHRMYXRpbjFOYXRpdmVMZW5ndGgodGV4dCk7
CisgICAgaW50NjRfdCBuYXRpdmVMZW5ndGggPSB1VGV4dExhdGluMUNvbnRleHRBd2FyZU5hdGl2
ZUxlbmd0aCh0ZXh0KTsKICAgICBVQm9vbCBpc0FjY2Vzc2libGU7CiAgICAgaWYgKHVUZXh0QWNj
ZXNzSW5DaHVua09yT3V0T2ZSYW5nZSh0ZXh0LCBuYXRpdmVJbmRleCwgbmF0aXZlTGVuZ3RoLCBm
b3J3YXJkLCBpc0FjY2Vzc2libGUpKQogICAgICAgICByZXR1cm4gaXNBY2Nlc3NpYmxlOwogICAg
IG5hdGl2ZUluZGV4ID0gdVRleHRBY2Nlc3NQaW5JbmRleChuYXRpdmVJbmRleCwgbmF0aXZlTGVu
Z3RoKTsKLSAgICBVVGV4dFByb3ZpZGVyQ29udGV4dCBjdXJyZW50Q29udGV4dCA9IHRleHRMYXRp
bjFHZXRDdXJyZW50Q29udGV4dCh0ZXh0KTsKKyAgICBVVGV4dFByb3ZpZGVyQ29udGV4dCBjdXJy
ZW50Q29udGV4dCA9IHRleHRMYXRpbjFDb250ZXh0QXdhcmVHZXRDdXJyZW50Q29udGV4dCh0ZXh0
KTsKICAgICBVVGV4dFByb3ZpZGVyQ29udGV4dCBuZXdDb250ZXh0ID0gdVRleHRQcm92aWRlckNv
bnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIGZvcndhcmQpOwogICAgIEFTU0VSVChuZXdDb250ZXh0
ICE9IFVUZXh0UHJvdmlkZXJDb250ZXh0OjpOb0NvbnRleHQpOwogICAgIGlmIChuZXdDb250ZXh0
ID09IGN1cnJlbnRDb250ZXh0KSB7CiAgICAgICAgIGlmIChjdXJyZW50Q29udGV4dCA9PSBVVGV4
dFByb3ZpZGVyQ29udGV4dDo6UHJpbWFyeUNvbnRleHQpCi0gICAgICAgICAgICB0ZXh0TGF0aW4x
TW92ZUluUHJpbWFyeUNvbnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9y
d2FyZCk7CisgICAgICAgICAgICB0ZXh0TGF0aW4xQ29udGV4dEF3YXJlTW92ZUluUHJpbWFyeUNv
bnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHRleHRMYXRpbjFNb3ZlSW5QcmlvckNvbnRleHQodGV4dCwgbmF0
aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7CisgICAgICAgICAgICB0ZXh0TGF0aW4x
Q29udGV4dEF3YXJlTW92ZUluUHJpb3JDb250ZXh0KHRleHQsIG5hdGl2ZUluZGV4LCBuYXRpdmVM
ZW5ndGgsIGZvcndhcmQpOwogICAgIH0gZWxzZSBpZiAobmV3Q29udGV4dCA9PSBVVGV4dFByb3Zp
ZGVyQ29udGV4dDo6UHJpbWFyeUNvbnRleHQpCi0gICAgICAgIHRleHRMYXRpbjFTd2l0Y2hUb1By
aW1hcnlDb250ZXh0KHRleHQsIG5hdGl2ZUluZGV4LCBuYXRpdmVMZW5ndGgsIGZvcndhcmQpOwor
ICAgICAgICB0ZXh0TGF0aW4xQ29udGV4dEF3YXJlU3dpdGNoVG9QcmltYXJ5Q29udGV4dCh0ZXh0
LCBuYXRpdmVJbmRleCwgbmF0aXZlTGVuZ3RoLCBmb3J3YXJkKTsKICAgICBlbHNlIHsKICAgICAg
ICAgQVNTRVJUKG5ld0NvbnRleHQgPT0gVVRleHRQcm92aWRlckNvbnRleHQ6OlByaW9yQ29udGV4
dCk7Ci0gICAgICAgIHRleHRMYXRpbjFTd2l0Y2hUb1ByaW9yQ29udGV4dCh0ZXh0LCBuYXRpdmVJ
bmRleCwgbmF0aXZlTGVuZ3RoLCBmb3J3YXJkKTsKKyAgICAgICAgdGV4dExhdGluMUNvbnRleHRB
d2FyZVN3aXRjaFRvUHJpb3JDb250ZXh0KHRleHQsIG5hdGl2ZUluZGV4LCBuYXRpdmVMZW5ndGgs
IGZvcndhcmQpOwogICAgIH0KICAgICByZXR1cm4gVFJVRTsKIH0KIAotc3RhdGljIGludDMyX3Qg
dVRleHRMYXRpbjFFeHRyYWN0KFVUZXh0KiwgaW50NjRfdCwgaW50NjRfdCwgVUNoYXIqLCBpbnQz
Ml90LCBVRXJyb3JDb2RlKiBlcnJvckNvZGUpCitzdGF0aWMgaW50MzJfdCB1VGV4dExhdGluMUNv
bnRleHRBd2FyZUV4dHJhY3QoVVRleHQqLCBpbnQ2NF90LCBpbnQ2NF90LCBVQ2hhciosIGludDMy
X3QsIFVFcnJvckNvZGUqIGVycm9yQ29kZSkKIHsKICAgICAvLyBJbiB0aGUgcHJlc2VudCBjb250
ZXh0LCB0aGlzIHRleHQgcHJvdmlkZXIgaXMgdXNlZCBvbmx5IHdpdGggSUNVIGZ1bmN0aW9ucwog
ICAgIC8vIHRoYXQgZG8gbm90IHBlcmZvcm0gYW4gZXh0cmFjdCBvcGVyYXRpb24uCkBAIC0xNDYs
MjYgKzM1NywxMiBAQCBzdGF0aWMgaW50MzJfdCB1VGV4dExhdGluMUV4dHJhY3QoVVRleHQqCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHVUZXh0TGF0aW4xQ2xvc2UoVVRleHQqIHRl
eHQpCitzdGF0aWMgdm9pZCB1VGV4dExhdGluMUNvbnRleHRBd2FyZUNsb3NlKFVUZXh0KiB0ZXh0
KQogewogICAgIHRleHQtPmNvbnRleHQgPSAwOwogfQogCi0vLyAtLSBFbmQgTGF0aW4tMSBwcm92
aWRlciBmdW5jdGlvbnMgLS0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBVVGV4dEZ1bmNzIHRleHRM
YXRpbjFGdW5jcyA9IHsKLSAgICBzaXplb2YoVVRleHRGdW5jcyksCi0gICAgMCwgMCwgMCwKLSAg
ICB1VGV4dExhdGluMUNsb25lLAotICAgIHVUZXh0TGF0aW4xTmF0aXZlTGVuZ3RoLAotICAgIHVU
ZXh0TGF0aW4xQWNjZXNzLAotICAgIHVUZXh0TGF0aW4xRXh0cmFjdCwKLSAgICAwLCAwLCAwLCAw
LAotICAgIHVUZXh0TGF0aW4xQ2xvc2UsCi0gICAgMCwgMCwgMCwKLX07Ci0KLVVUZXh0KiB1VGV4
dE9wZW5MYXRpbjEoVVRleHRXaXRoQnVmZmVyKiB1dFdpdGhCdWZmZXIsIGNvbnN0IExDaGFyKiBz
dHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgVUNoYXIqIHByaW9yQ29udGV4dCwgaW50IHBy
aW9yQ29udGV4dExlbmd0aCwgVUVycm9yQ29kZSogc3RhdHVzKQorVVRleHQqIG9wZW5MYXRpbjFD
b250ZXh0QXdhcmVVVGV4dFByb3ZpZGVyKFVUZXh0V2l0aEJ1ZmZlciogdXRXaXRoQnVmZmVyLCBj
b25zdCBMQ2hhciogc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFVDaGFyKiBwcmlvckNv
bnRleHQsIGludCBwcmlvckNvbnRleHRMZW5ndGgsIFVFcnJvckNvZGUqIHN0YXR1cykKIHsKICAg
ICBpZiAoVV9GQUlMVVJFKCpzdGF0dXMpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE3OCw3ICsz
NzUsOCBAQCBVVGV4dCogdVRleHRPcGVuTGF0aW4xKFVUZXh0V2l0aEJ1ZmZlciogCiAgICAgICAg
IEFTU0VSVCghdGV4dCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICB1VGV4dEluaXRp
YWxpemUodGV4dCwgJnRleHRMYXRpbjFGdW5jcywgc3RyaW5nLCBsZW5ndGgsIHByaW9yQ29udGV4
dCwgcHJpb3JDb250ZXh0TGVuZ3RoKTsKKworICAgIGluaXRpYWxpemVDb250ZXh0QXdhcmVVVGV4
dFByb3ZpZGVyKHRleHQsICZ0ZXh0TGF0aW4xQ29udGV4dEF3YXJlRnVuY3MsIHN0cmluZywgbGVu
Z3RoLCBwcmlvckNvbnRleHQsIHByaW9yQ29udGV4dExlbmd0aCk7CiAgICAgcmV0dXJuIHRleHQ7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaWN1L1VUZXh0UHJvdmlk
ZXJMYXRpbjEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2lj
dS9VVGV4dFByb3ZpZGVyTGF0aW4xLmgJKHJldmlzaW9uIDE2MTgxNykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsOCBAQCBzdHJ1Y3QgVVRleHRXaXRoQnVmZmVyIHsKICAgICBVQ2hhciBi
dWZmZXJbVVRleHRXaXRoQnVmZmVySW5saW5lQ2FwYWNpdHldOwogfTsKIAotVVRleHQqIHVUZXh0
T3BlbkxhdGluMShVVGV4dFdpdGhCdWZmZXIqIHV0V2l0aEJ1ZmZlciwgY29uc3QgTENoYXIqIHN0
cmluZywgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBVQ2hhciogcHJpb3JDb250ZXh0LCBpbnQgcHJp
b3JDb250ZXh0TGVuZ3RoLCBVRXJyb3JDb2RlKiBzdGF0dXMpOworVVRleHQqIG9wZW5MYXRpbjFV
VGV4dFByb3ZpZGVyKFVUZXh0V2l0aEJ1ZmZlciogdXRXaXRoQnVmZmVyLCBjb25zdCBMQ2hhciog
c3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIFVFcnJvckNvZGUqIHN0YXR1cyk7CitVVGV4dCogb3Bl
bkxhdGluMUNvbnRleHRBd2FyZVVUZXh0UHJvdmlkZXIoVVRleHRXaXRoQnVmZmVyKiB1dFdpdGhC
dWZmZXIsIGNvbnN0IExDaGFyKiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgVUNoYXIq
IHByaW9yQ29udGV4dCwgaW50IHByaW9yQ29udGV4dExlbmd0aCwgVUVycm9yQ29kZSogc3RhdHVz
KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyVVRGMTYuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJVVEYxNi5jcHAJKHJldmlz
aW9uIDE2MTgxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaWN1L1VUZXh0UHJv
dmlkZXJVVEYxNi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE0ICszMCwzNCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgVVRleHRQcm92aWRlckNvbnRleHQgdGV4
dFVURjE2R2V0Q3VycmVudENvbnRleHQoY29uc3QgVVRleHQqIHRleHQpCisvLyBVVEYxNkNvbnRl
eHRBd2FyZSBwcm92aWRlcgorCitzdGF0aWMgVVRleHQqIHVUZXh0VVRGMTZDb250ZXh0QXdhcmVD
bG9uZShVVGV4dCosIGNvbnN0IFVUZXh0KiwgVUJvb2wsIFVFcnJvckNvZGUqKTsKK3N0YXRpYyBp
bnQ2NF90IHVUZXh0VVRGMTZDb250ZXh0QXdhcmVOYXRpdmVMZW5ndGgoVVRleHQqKTsKK3N0YXRp
YyBVQm9vbCB1VGV4dFVURjE2Q29udGV4dEF3YXJlQWNjZXNzKFVUZXh0KiwgaW50NjRfdCwgVUJv
b2wpOworc3RhdGljIGludDMyX3QgdVRleHRVVEYxNkNvbnRleHRBd2FyZUV4dHJhY3QoVVRleHQq
LCBpbnQ2NF90LCBpbnQ2NF90LCBVQ2hhciosIGludDMyX3QsIFVFcnJvckNvZGUqKTsKK3N0YXRp
YyB2b2lkIHVUZXh0VVRGMTZDb250ZXh0QXdhcmVDbG9zZShVVGV4dCopOworCitzdGF0aWMgY29u
c3Qgc3RydWN0IFVUZXh0RnVuY3MgdGV4dFVURjE2Q29udGV4dEF3YXJlRnVuY3MgPSB7CisgICAg
c2l6ZW9mKFVUZXh0RnVuY3MpLAorICAgIDAsIDAsIDAsCisgICAgdVRleHRVVEYxNkNvbnRleHRB
d2FyZUNsb25lLAorICAgIHVUZXh0VVRGMTZDb250ZXh0QXdhcmVOYXRpdmVMZW5ndGgsCisgICAg
dVRleHRVVEYxNkNvbnRleHRBd2FyZUFjY2VzcywKKyAgICB1VGV4dFVURjE2Q29udGV4dEF3YXJl
RXh0cmFjdCwKKyAgICAwLCAwLCAwLCAwLAorICAgIHVUZXh0VVRGMTZDb250ZXh0QXdhcmVDbG9z
ZSwKKyAgICAwLCAwLCAwLAorfTsKKworc3RhdGljIGlubGluZSBVVGV4dFByb3ZpZGVyQ29udGV4
dCB0ZXh0VVRGMTZDb250ZXh0QXdhcmVHZXRDdXJyZW50Q29udGV4dChjb25zdCBVVGV4dCogdGV4
dCkKIHsKICAgICBpZiAoIXRleHQtPmNodW5rQ29udGVudHMpCiAgICAgICAgIHJldHVybiBVVGV4
dFByb3ZpZGVyQ29udGV4dDo6Tm9Db250ZXh0OwogICAgIHJldHVybiB0ZXh0LT5jaHVua0NvbnRl
bnRzID09IHRleHQtPnAgPyBVVGV4dFByb3ZpZGVyQ29udGV4dDo6UHJpbWFyeUNvbnRleHQgOiBV
VGV4dFByb3ZpZGVyQ29udGV4dDo6UHJpb3JDb250ZXh0OwogfQogCi1zdGF0aWMgdm9pZCB0ZXh0
VVRGMTZNb3ZlSW5QcmltYXJ5Q29udGV4dChVVGV4dCogdGV4dCwgaW50NjRfdCBuYXRpdmVJbmRl
eCwgaW50NjRfdCBuYXRpdmVMZW5ndGgsIFVCb29sIGZvcndhcmQpCitzdGF0aWMgdm9pZCB0ZXh0
VVRGMTZDb250ZXh0QXdhcmVNb3ZlSW5QcmltYXJ5Q29udGV4dChVVGV4dCogdGV4dCwgaW50NjRf
dCBuYXRpdmVJbmRleCwgaW50NjRfdCBuYXRpdmVMZW5ndGgsIFVCb29sIGZvcndhcmQpCiB7CiAg
ICAgQVNTRVJUKHRleHQtPmNodW5rQ29udGVudHMgPT0gdGV4dC0+cCk7CiAgICAgQVNTRVJUX1VO
VVNFRChmb3J3YXJkLCBmb3J3YXJkID8gbmF0aXZlSW5kZXggPj0gdGV4dC0+YiA6IG5hdGl2ZUlu
ZGV4ID4gdGV4dC0+Yik7CkBAIC01NSwxNCArNzUsMTQgQEAgc3RhdGljIHZvaWQgdGV4dFVURjE2
TW92ZUluUHJpbWFyeUNvbnRleAogICAgIHRleHQtPmNodW5rT2Zmc2V0ID0gc3RkOjptaW4ob2Zm
c2V0IDwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkgPyBzdGF0aWNfY2FzdDxp
bnQzMl90PihvZmZzZXQpIDogMCwgdGV4dC0+Y2h1bmtMZW5ndGgpOwogfQogCi1zdGF0aWMgdm9p
ZCB0ZXh0VVRGMTZTd2l0Y2hUb1ByaW1hcnlDb250ZXh0KFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5h
dGl2ZUluZGV4LCBpbnQ2NF90IG5hdGl2ZUxlbmd0aCwgVUJvb2wgZm9yd2FyZCkKK3N0YXRpYyB2
b2lkIHRleHRVVEYxNkNvbnRleHRBd2FyZVN3aXRjaFRvUHJpbWFyeUNvbnRleHQoVVRleHQqIHRl
eHQsIGludDY0X3QgbmF0aXZlSW5kZXgsIGludDY0X3QgbmF0aXZlTGVuZ3RoLCBVQm9vbCBmb3J3
YXJkKQogewogICAgIEFTU0VSVCghdGV4dC0+Y2h1bmtDb250ZW50cyB8fCB0ZXh0LT5jaHVua0Nv
bnRlbnRzID09IHRleHQtPnEpOwogICAgIHRleHQtPmNodW5rQ29udGVudHMgPSBzdGF0aWNfY2Fz
dDxjb25zdCBVQ2hhcio+KHRleHQtPnApOwotICAgIHRleHRVVEYxNk1vdmVJblByaW1hcnlDb250
ZXh0KHRleHQsIG5hdGl2ZUluZGV4LCBuYXRpdmVMZW5ndGgsIGZvcndhcmQpOworICAgIHRleHRV
VEYxNkNvbnRleHRBd2FyZU1vdmVJblByaW1hcnlDb250ZXh0KHRleHQsIG5hdGl2ZUluZGV4LCBu
YXRpdmVMZW5ndGgsIGZvcndhcmQpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXh0VVRGMTZNb3ZlSW5Q
cmlvckNvbnRleHQoVVRleHQqIHRleHQsIGludDY0X3QgbmF0aXZlSW5kZXgsIGludDY0X3QgbmF0
aXZlTGVuZ3RoLCBVQm9vbCBmb3J3YXJkKQorc3RhdGljIHZvaWQgdGV4dFVURjE2Q29udGV4dEF3
YXJlTW92ZUluUHJpb3JDb250ZXh0KFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4LCBp
bnQ2NF90IG5hdGl2ZUxlbmd0aCwgVUJvb2wgZm9yd2FyZCkKIHsKICAgICBBU1NFUlQodGV4dC0+
Y2h1bmtDb250ZW50cyA9PSB0ZXh0LT5xKTsKICAgICBBU1NFUlQoZm9yd2FyZCA/IG5hdGl2ZUlu
ZGV4IDwgdGV4dC0+YiA6IG5hdGl2ZUluZGV4IDw9IHRleHQtPmIpOwpAQCAtNzgsNTggKzk4LDUw
IEBAIHN0YXRpYyB2b2lkIHRleHRVVEYxNk1vdmVJblByaW9yQ29udGV4dCgKICAgICB0ZXh0LT5j
aHVua09mZnNldCA9IHN0ZDo6bWluKG9mZnNldCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1heCgpID8gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0KSA6IDAsIHRleHQtPmNodW5r
TGVuZ3RoKTsKIH0KIAotc3RhdGljIHZvaWQgdGV4dFVURjE2U3dpdGNoVG9QcmlvckNvbnRleHQo
VVRleHQqIHRleHQsIGludDY0X3QgbmF0aXZlSW5kZXgsIGludDY0X3QgbmF0aXZlTGVuZ3RoLCBV
Qm9vbCBmb3J3YXJkKQorc3RhdGljIHZvaWQgdGV4dFVURjE2Q29udGV4dEF3YXJlU3dpdGNoVG9Q
cmlvckNvbnRleHQoVVRleHQqIHRleHQsIGludDY0X3QgbmF0aXZlSW5kZXgsIGludDY0X3QgbmF0
aXZlTGVuZ3RoLCBVQm9vbCBmb3J3YXJkKQogewogICAgIEFTU0VSVCghdGV4dC0+Y2h1bmtDb250
ZW50cyB8fCB0ZXh0LT5jaHVua0NvbnRlbnRzID09IHRleHQtPnApOwogICAgIHRleHQtPmNodW5r
Q29udGVudHMgPSBzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KHRleHQtPnEpOwotICAgIHRleHRV
VEYxNk1vdmVJblByaW9yQ29udGV4dCh0ZXh0LCBuYXRpdmVJbmRleCwgbmF0aXZlTGVuZ3RoLCBm
b3J3YXJkKTsKKyAgICB0ZXh0VVRGMTZDb250ZXh0QXdhcmVNb3ZlSW5QcmlvckNvbnRleHQodGV4
dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7CiB9CiAKLS8vIC0tIEJlZ2lu
IFVURi0xNiBwcm92aWRlciBmdW5jdGlvbnMgLS0KLQotc3RhdGljIFVUZXh0KiB1VGV4dFVURjE2
Q2xvbmUoVVRleHQqLCBjb25zdCBVVGV4dCosIFVCb29sLCBVRXJyb3JDb2RlKik7Ci1zdGF0aWMg
aW50NjRfdCB1VGV4dFVURjE2TmF0aXZlTGVuZ3RoKFVUZXh0Kik7Ci1zdGF0aWMgVUJvb2wgdVRl
eHRVVEYxNkFjY2VzcyhVVGV4dCosIGludDY0X3QsIFVCb29sKTsKLXN0YXRpYyBpbnQzMl90IHVU
ZXh0VVRGMTZFeHRyYWN0KFVUZXh0KiwgaW50NjRfdCwgaW50NjRfdCwgVUNoYXIqLCBpbnQzMl90
LCBVRXJyb3JDb2RlKik7Ci1zdGF0aWMgdm9pZCB1VGV4dFVURjE2Q2xvc2UoVVRleHQqKTsKLQot
c3RhdGljIFVUZXh0KiB1VGV4dFVURjE2Q2xvbmUoVVRleHQqIGRlc3RpbmF0aW9uLCBjb25zdCBV
VGV4dCogc291cmNlLCBVQm9vbCBkZWVwLCBVRXJyb3JDb2RlKiBzdGF0dXMpCitzdGF0aWMgVVRl
eHQqIHVUZXh0VVRGMTZDb250ZXh0QXdhcmVDbG9uZShVVGV4dCogZGVzdGluYXRpb24sIGNvbnN0
IFVUZXh0KiBzb3VyY2UsIFVCb29sIGRlZXAsIFVFcnJvckNvZGUqIHN0YXR1cykKIHsKICAgICBy
ZXR1cm4gdVRleHRDbG9uZUltcGwoZGVzdGluYXRpb24sIHNvdXJjZSwgZGVlcCwgc3RhdHVzKTsK
IH0KIAotc3RhdGljIGlubGluZSBpbnQ2NF90IHVUZXh0VVRGMTZOYXRpdmVMZW5ndGgoVVRleHQq
IHRleHQpCitzdGF0aWMgaW5saW5lIGludDY0X3QgdVRleHRVVEYxNkNvbnRleHRBd2FyZU5hdGl2
ZUxlbmd0aChVVGV4dCogdGV4dCkKIHsKICAgICByZXR1cm4gdGV4dC0+YSArIHRleHQtPmI7CiB9
CiAKLXN0YXRpYyBVQm9vbCB1VGV4dFVURjE2QWNjZXNzKFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5h
dGl2ZUluZGV4LCBVQm9vbCBmb3J3YXJkKQorc3RhdGljIFVCb29sIHVUZXh0VVRGMTZDb250ZXh0
QXdhcmVBY2Nlc3MoVVRleHQqIHRleHQsIGludDY0X3QgbmF0aXZlSW5kZXgsIFVCb29sIGZvcndh
cmQpCiB7CiAgICAgaWYgKCF0ZXh0LT5jb250ZXh0KQogICAgICAgICByZXR1cm4gRkFMU0U7Ci0g
ICAgaW50NjRfdCBuYXRpdmVMZW5ndGggPSB1VGV4dFVURjE2TmF0aXZlTGVuZ3RoKHRleHQpOwor
ICAgIGludDY0X3QgbmF0aXZlTGVuZ3RoID0gdVRleHRVVEYxNkNvbnRleHRBd2FyZU5hdGl2ZUxl
bmd0aCh0ZXh0KTsKICAgICBVQm9vbCBpc0FjY2Vzc2libGU7CiAgICAgaWYgKHVUZXh0QWNjZXNz
SW5DaHVua09yT3V0T2ZSYW5nZSh0ZXh0LCBuYXRpdmVJbmRleCwgbmF0aXZlTGVuZ3RoLCBmb3J3
YXJkLCBpc0FjY2Vzc2libGUpKQogICAgICAgICByZXR1cm4gaXNBY2Nlc3NpYmxlOwogICAgIG5h
dGl2ZUluZGV4ID0gdVRleHRBY2Nlc3NQaW5JbmRleChuYXRpdmVJbmRleCwgbmF0aXZlTGVuZ3Ro
KTsKLSAgICBVVGV4dFByb3ZpZGVyQ29udGV4dCBjdXJyZW50Q29udGV4dCA9IHRleHRVVEYxNkdl
dEN1cnJlbnRDb250ZXh0KHRleHQpOworICAgIFVUZXh0UHJvdmlkZXJDb250ZXh0IGN1cnJlbnRD
b250ZXh0ID0gdGV4dFVURjE2Q29udGV4dEF3YXJlR2V0Q3VycmVudENvbnRleHQodGV4dCk7CiAg
ICAgVVRleHRQcm92aWRlckNvbnRleHQgbmV3Q29udGV4dCA9IHVUZXh0UHJvdmlkZXJDb250ZXh0
KHRleHQsIG5hdGl2ZUluZGV4LCBmb3J3YXJkKTsKICAgICBBU1NFUlQobmV3Q29udGV4dCAhPSBV
VGV4dFByb3ZpZGVyQ29udGV4dDo6Tm9Db250ZXh0KTsKICAgICBpZiAobmV3Q29udGV4dCA9PSBj
dXJyZW50Q29udGV4dCkgewogICAgICAgICBpZiAoY3VycmVudENvbnRleHQgPT0gVVRleHRQcm92
aWRlckNvbnRleHQ6OlByaW1hcnlDb250ZXh0KQotICAgICAgICAgICAgdGV4dFVURjE2TW92ZUlu
UHJpbWFyeUNvbnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7
CisgICAgICAgICAgICB0ZXh0VVRGMTZDb250ZXh0QXdhcmVNb3ZlSW5QcmltYXJ5Q29udGV4dCh0
ZXh0LCBuYXRpdmVJbmRleCwgbmF0aXZlTGVuZ3RoLCBmb3J3YXJkKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdGV4dFVURjE2TW92ZUluUHJpb3JDb250ZXh0KHRleHQsIG5hdGl2ZUluZGV4
LCBuYXRpdmVMZW5ndGgsIGZvcndhcmQpOworICAgICAgICAgICAgdGV4dFVURjE2Q29udGV4dEF3
YXJlTW92ZUluUHJpb3JDb250ZXh0KHRleHQsIG5hdGl2ZUluZGV4LCBuYXRpdmVMZW5ndGgsIGZv
cndhcmQpOwogICAgIH0gZWxzZSBpZiAobmV3Q29udGV4dCA9PSBVVGV4dFByb3ZpZGVyQ29udGV4
dDo6UHJpbWFyeUNvbnRleHQpCi0gICAgICAgIHRleHRVVEYxNlN3aXRjaFRvUHJpbWFyeUNvbnRl
eHQodGV4dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7CisgICAgICAgIHRl
eHRVVEYxNkNvbnRleHRBd2FyZVN3aXRjaFRvUHJpbWFyeUNvbnRleHQodGV4dCwgbmF0aXZlSW5k
ZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChu
ZXdDb250ZXh0ID09IFVUZXh0UHJvdmlkZXJDb250ZXh0OjpQcmlvckNvbnRleHQpOwotICAgICAg
ICB0ZXh0VVRGMTZTd2l0Y2hUb1ByaW9yQ29udGV4dCh0ZXh0LCBuYXRpdmVJbmRleCwgbmF0aXZl
TGVuZ3RoLCBmb3J3YXJkKTsKKyAgICAgICAgdGV4dFVURjE2Q29udGV4dEF3YXJlU3dpdGNoVG9Q
cmlvckNvbnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7CiAg
ICAgfQogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgaW50MzJfdCB1VGV4dFVURjE2RXh0
cmFjdChVVGV4dCosIGludDY0X3QsIGludDY0X3QsIFVDaGFyKiwgaW50MzJfdCwgVUVycm9yQ29k
ZSogZXJyb3JDb2RlKQorc3RhdGljIGludDMyX3QgdVRleHRVVEYxNkNvbnRleHRBd2FyZUV4dHJh
Y3QoVVRleHQqLCBpbnQ2NF90LCBpbnQ2NF90LCBVQ2hhciosIGludDMyX3QsIFVFcnJvckNvZGUq
IGVycm9yQ29kZSkKIHsKICAgICAvLyBJbiB0aGUgcHJlc2VudCBjb250ZXh0LCB0aGlzIHRleHQg
cHJvdmlkZXIgaXMgdXNlZCBvbmx5IHdpdGggSUNVIGZ1bmN0aW9ucwogICAgIC8vIHRoYXQgZG8g
bm90IHBlcmZvcm0gYW4gZXh0cmFjdCBvcGVyYXRpb24uCkBAIC0xMzgsMjYgKzE1MCwxMiBAQCBz
dGF0aWMgaW50MzJfdCB1VGV4dFVURjE2RXh0cmFjdChVVGV4dCosCiAgICAgcmV0dXJuIDA7CiB9
CiAKLXN0YXRpYyB2b2lkIHVUZXh0VVRGMTZDbG9zZShVVGV4dCogdGV4dCkKK3N0YXRpYyB2b2lk
IHVUZXh0VVRGMTZDb250ZXh0QXdhcmVDbG9zZShVVGV4dCogdGV4dCkKIHsKICAgICB0ZXh0LT5j
b250ZXh0ID0gMDsKIH0KIAotLy8gLS0gRW5kIFVURi0xNiBwcm92aWRlciBmdW5jdGlvbnMgLS0K
LQotc3RhdGljIGNvbnN0IHN0cnVjdCBVVGV4dEZ1bmNzIHRleHRVVEYxNkZ1bmNzID0gewotICAg
IHNpemVvZihVVGV4dEZ1bmNzKSwKLSAgICAwLCAwLCAwLAotICAgIHVUZXh0VVRGMTZDbG9uZSwK
LSAgICB1VGV4dFVURjE2TmF0aXZlTGVuZ3RoLAotICAgIHVUZXh0VVRGMTZBY2Nlc3MsCi0gICAg
dVRleHRVVEYxNkV4dHJhY3QsCi0gICAgMCwgMCwgMCwgMCwKLSAgICB1VGV4dFVURjE2Q2xvc2Us
Ci0gICAgMCwgMCwgMCwKLX07Ci0KLVVUZXh0KiB1VGV4dE9wZW5VVEYxNihVVGV4dCogdGV4dCwg
Y29uc3QgVUNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBVQ2hhciogcHJpb3JD
b250ZXh0LCBpbnQgcHJpb3JDb250ZXh0TGVuZ3RoLCBVRXJyb3JDb2RlKiBzdGF0dXMpCitVVGV4
dCogb3BlblVURjE2Q29udGV4dEF3YXJlVVRleHRQcm92aWRlcihVVGV4dCogdGV4dCwgY29uc3Qg
VUNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBVQ2hhciogcHJpb3JDb250ZXh0
LCBpbnQgcHJpb3JDb250ZXh0TGVuZ3RoLCBVRXJyb3JDb2RlKiBzdGF0dXMpCiB7CiAgICAgaWYg
KFVfRkFJTFVSRSgqc3RhdHVzKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzAsNyArMTY4LDgg
QEAgVVRleHQqIHVUZXh0T3BlblVURjE2KFVUZXh0KiB0ZXh0LCBjb25zdAogICAgICAgICBBU1NF
UlQoIXRleHQpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgdVRleHRJbml0aWFsaXpl
KHRleHQsICZ0ZXh0VVRGMTZGdW5jcywgc3RyaW5nLCBsZW5ndGgsIHByaW9yQ29udGV4dCwgcHJp
b3JDb250ZXh0TGVuZ3RoKTsKKworICAgIGluaXRpYWxpemVDb250ZXh0QXdhcmVVVGV4dFByb3Zp
ZGVyKHRleHQsICZ0ZXh0VVRGMTZDb250ZXh0QXdhcmVGdW5jcywgc3RyaW5nLCBsZW5ndGgsIHBy
aW9yQ29udGV4dCwgcHJpb3JDb250ZXh0TGVuZ3RoKTsKICAgICByZXR1cm4gdGV4dDsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pY3UvVVRleHRQcm92aWRlclVURjE2
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9pY3UvVVRleHRQ
cm92aWRlclVURjE2LmgJKHJldmlzaW9uIDE2MTgxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJVVEYxNi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVVRleHQqIHVUZXh0T3BlblVURjE2
KFVUZXh0KiwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFVDaGFyKiBwcmlv
ckNvbnRleHQsIGludCBwcmlvckNvbnRleHRMZW5ndGgsIFVFcnJvckNvZGUqKTsKK1VUZXh0KiBv
cGVuVVRGMTZDb250ZXh0QXdhcmVVVGV4dFByb3ZpZGVyKFVUZXh0KiwgY29uc3QgVUNoYXIqLCB1
bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFVDaGFyKiBwcmlvckNvbnRleHQsIGludCBwcmlvckNvbnRl
eHRMZW5ndGgsIFVFcnJvckNvZGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221063</attachid>
            <date>2014-01-13 10:53:54 -0800</date>
            <delta_ts>2014-01-14 21:00:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126856-20140113105354.patch</filename>
            <type>text/plain</type>
            <size>72296</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTg5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE0LTAxLTEyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IncyBzaG91
bGQgc3VwcG9ydCBMYXRpbi0xIGZvciBhbGwgaXRlcmF0b3IgdHlwZXMgKFBhcnQgMikKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjg1NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBQbGF0Zm9ybUdU
Sy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBUZXh0
QnJlYWtJdGVyYXRvcklDVS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVh
a0l0ZXJhdG9ySUNVLmNwcDogUmVtb3ZlZC4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4
dEJyZWFrSXRlcmF0b3IuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuaDoKKyAgICAgICAgLSBSZW1vdmUgVGV4dEJyZWFrSXRlcmF0b3IgdHlwZSBpbiBmYXZv
ciBvZiB1c2luZyBVQnJlYWtJdGVyYXRvciBkaXJlY3RseS4KKyAgICAgICAgLSBSZW1vdmUgYWxs
IHRoZSB3cmFwcGVycyBmb3IgVUJyZWFrSXRlcmF0b3IgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAg
LSBNYWtlIGN1c3RvbSBVQnJlYWtJdGVyYXRvciBhY2Nlc3NvcnMgdGFrZSBTdHJpbmdWaWV3cy4K
KworICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHA6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QWxsSW5PbmUuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvYnJlYWtfbGluZXMuaDoKKyAgICAgICAgVXBk
YXRlIHRvIHVzZSBVQnJlYWtJdGVyYXRvciBkaXJlY3RseSwgYW5kIHBhc3MgU3RyaW5nVmlld3Mg
dG8gY29uc3RydWN0aW9uLgorCiAyMDE0LTAxLTEzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFz
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBjb3B5IG9mIFN5c3RlbU1lbW9yeS5oIGluIGlP
UyBXZWJLaXQgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTYxODky
KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI4
MDUsNyArMjgwNSw2IEBAIGlmIChXVEZfVVNFX0lDVV9VTklDT0RFKQogICAgICAgICBwbGF0Zm9y
bS90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyLmNwcAogICAgICAgICBwbGF0Zm9ybS90ZXh0L2ljdS9V
VGV4dFByb3ZpZGVyTGF0aW4xLmNwcAogICAgICAgICBwbGF0Zm9ybS90ZXh0L2ljdS9VVGV4dFBy
b3ZpZGVyVVRGMTYuY3BwCi0gICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJ
Q1UuY3BwCiAgICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAogICAgICAgICBw
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcAogICAgICkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTYxODkyKQorKysgU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNjAxNyw3ICs2MDE3
LDYgQEAgcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Qm91bmRhcmllcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRC
cmVha0l0ZXJhdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJl
YWtJdGVyYXRvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0
ZXJhdG9ySUNVLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJ
dGVyYXRvckludGVybmFsSUNVLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENoZWNrZXJDbGllbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hl
Y2tpbmcuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24gMTYxODky
KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTEzNCw3ICsxMzQsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyTGF0aW4xLmNwcAogICAgIHBsYXRmb3JtL3RleHQvaWN1
L1VUZXh0UHJvdmlkZXJVVEYxNi5jcHAKICAgICBwbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAK
LSAgICBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAogICAgIHBsYXRmb3Jt
L3RleHQvVGV4dENvZGVjSUNVLmNwcAogICAgIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0
ZWN0b3JJQ1UuY3BwCiAKQEAgLTI2NCw3ICsyNjMsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlUGxh
dGZvcm1HVEtfU09VUkNFUwogICAgIHBsYXRmb3JtL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRp
bjEuY3BwCiAgICAgcGxhdGZvcm0vdGV4dC9pY3UvVVRleHRQcm92aWRlclVURjE2LmNwcAogICAg
IHBsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcAotICAgIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3JJQ1UuY3BwCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCiAgICAg
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAKIApJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZpc2lvbiAx
NjE4OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC04NTQzLDE1ICs4NTQzLDYgQEAKICAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1
Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1
Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+Ci0K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dEJyZWFrSXRlcmF0
b3JJQ1UuY3BwIj4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXHRleHRcVGV4dENvZGVjLmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMy
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTYxODky
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0
ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEzLDkgKzIwMTMsNiBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0QnJlYWtJdGVyYXRvci5jcHAiPgogICAgICAg
PEZpbHRlcj5wbGF0Zm9ybVx0ZXh0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVx0ZXh0XFRleHRCcmVha0l0ZXJhdG9ySUNVLmNw
cCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXHRleHQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dENvZGVjLmNw
cCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXHRleHQ8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE2MTg5MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDU0OSw3ICs0NTQ5LDYg
QEAKIAkJQjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0Q5RkYwRDAwNkMx
RDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTM0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0
Qm91bmRhcmllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjJDM0RBMDQwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCb3VuZGFyaWVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBMzYwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREEwNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJy
ZWFrSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlCMkMzREEzNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0b3JJQ1Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RB
MDcwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCAqLzsgfTsKIAkJ
QjJDM0RBMzgwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTA4
MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBMzkwRDAw
NkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREEwOTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVj
LmNwcCAqLzsgfTsKIAkJQjJDM0RBM0EwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBMEEwRDAw
NkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xMTc3Nyw3ICsxMTc3Niw2IEBACiAJCUIyQzNEOUZGMEQw
MDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNlZ21lbnRlZFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMkMzREEwNDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJvdW5kYXJpZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTA2MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0QnJlYWtJ
dGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEJyZWFrSXRl
cmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBMDcwRDAwNkMxRDAw
RUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZXh0QnJlYWtJdGVyYXRvcklDVS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQzNEQTA4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0QnJlYWtJdGVy
YXRvckludGVybmFsSUNVLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0
QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyQzNEQTA5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb2RlYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQzNEQTBBMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDb2RlYy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjAxMjEsNyArMjAxMTksNiBAQAogCQkJCUIyQzNEQTA0MEQwMDZD
MUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oICovLAogCQkJCUJDRDhBNUVGMTVGNTZGMkMw
MDk4RDA3MSAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgKi8sCiAJCQkJQjJDM0RBMDYwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9yLmggKi8sCi0JCQkJQjJDM0RBMDcwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCAqLywKIAkJCQlCMkMzREEwODBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oICovLAogCQkJ
CUE3MTUxQkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovLAogCQkJ
CUE3N0QwMDExMTMzQjBBRUIwMEQ2NjU4QyAvKiBUZXh0Q2hlY2tpbmcuaCAqLywKQEAgLTI5MDc4
LDcgKzI5MDc1LDYgQEAKIAkJCQkzNzJDMDBDNDEyOTYxMUYxMDA1Qzk1NzUgLyogVGV4dEJvdW5k
YXJpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBRkZDOTcwRDAwQTVERjAwMzAwNzREIC8q
IFRleHRCb3VuZGFyaWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNEOEE1RjAxNUY1NkYyQzAw
OThEMDcxIC8qIFRleHRCcmVha0l0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyQzNE
QTM3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMkFGRkM5ODBEMDBBNURGMDAzMDA3NEQgLyogVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE3REJGOEREMTI3NjkxOUMwMDZC
NjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc4RTA5
MzExN0QxNjg0MjAwNDIwQUExIC8qIE1lZGlhU3RyZWFtQ2VudGVyTWFjLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkocmV2aXNpb24gMTYx
ODkyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NCw5ICs3NCw5IEBAIHVuc2lnbmVkIENoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVu
ZERhdGEKICAgICAvLyBzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTA5Mj4uCiAgICAgLy8gV2UgbmVlZCBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBsb29rLWFo
ZWFkIHRvIGFjY291bnQgZm9yIFVURi0xNiBzdXJyb2dhdGVzLgogICAgIGlmIChjaGFyYWN0ZXJM
ZW5ndGhMaW1pdCA8IGNoYXJhY3Rlckxlbmd0aCkgewotICAgICAgICBOb25TaGFyZWRDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpICsgb2Zmc2V0
LCAoY2hhcmFjdGVyTGVuZ3RoTGltaXQgKyAyID4gY2hhcmFjdGVyTGVuZ3RoKSA/IGNoYXJhY3Rl
ckxlbmd0aCA6IGNoYXJhY3Rlckxlbmd0aExpbWl0ICsgMik7Ci0gICAgICAgIGlmICghaXNUZXh0
QnJlYWsoaXQsIGNoYXJhY3Rlckxlbmd0aExpbWl0KSkKLSAgICAgICAgICAgIGNoYXJhY3Rlckxl
bmd0aExpbWl0ID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBjaGFyYWN0ZXJMZW5ndGhMaW1pdCk7
CisgICAgICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoU3RyaW5nVmlldyhz
dHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSArIG9mZnNldCwgKGNoYXJhY3Rlckxlbmd0aExp
bWl0ICsgMiA+IGNoYXJhY3Rlckxlbmd0aCkgPyBjaGFyYWN0ZXJMZW5ndGggOiBjaGFyYWN0ZXJM
ZW5ndGhMaW1pdCArIDIpKTsKKyAgICAgICAgaWYgKCF1YnJrX2lzQm91bmRhcnkoaXQsIGNoYXJh
Y3Rlckxlbmd0aExpbWl0KSkKKyAgICAgICAgICAgIGNoYXJhY3Rlckxlbmd0aExpbWl0ID0gdWJy
a19wcmVjZWRpbmcoaXQsIGNoYXJhY3Rlckxlbmd0aExpbWl0KTsKICAgICB9CiAKICAgICBpZiAo
IWNoYXJhY3Rlckxlbmd0aExpbWl0KQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
Q2hlY2tpbmdIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcAkocmV2aXNpb24gMTYxODkyKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwy
NiArNzAsMjYgQEAgc3RhdGljIHZvaWQgZmluZEJhZEdyYW1tYXJzKFRleHRDaGVja2VyQwogfQog
I2VuZGlmCiAKLXN0YXRpYyB2b2lkIGZpbmRNaXNzcGVsbGluZ3MoVGV4dENoZWNrZXJDbGllbnQq
IGNsaWVudCwgY29uc3QgVUNoYXIqIHRleHQsIGludCBzdGFydCwgaW50IGxlbmd0aCwgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCitzdGF0aWMgdm9pZCBmaW5kTWlzc3BlbGxp
bmdzKFRleHRDaGVja2VyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVu
Z3RoLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKLSAgICBUZXh0QnJl
YWtJdGVyYXRvciogaXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0ICsgc3RhcnQsIGxl
bmd0aCk7CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gd29yZEJyZWFrSXRlcmF0b3Io
U3RyaW5nVmlldyh0ZXh0LCBsZW5ndGgpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQogICAgICAgICBy
ZXR1cm47Ci0gICAgaW50IHdvcmRTdGFydCA9IHRleHRCcmVha0N1cnJlbnQoaXRlcmF0b3IpOwor
ICAgIGludCB3b3JkU3RhcnQgPSB1YnJrX2N1cnJlbnQoaXRlcmF0b3IpOwogICAgIHdoaWxlICgw
IDw9IHdvcmRTdGFydCkgewotICAgICAgICBpbnQgd29yZEVuZCA9IHRleHRCcmVha05leHQoaXRl
cmF0b3IpOworICAgICAgICBpbnQgd29yZEVuZCA9IHVicmtfbmV4dChpdGVyYXRvcik7CiAgICAg
ICAgIGlmICh3b3JkRW5kIDwgMCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpbnQgd29y
ZExlbmd0aCA9IHdvcmRFbmQgLSB3b3JkU3RhcnQ7CiAgICAgICAgIGludCBtaXNzcGVsbGluZ0xv
Y2F0aW9uID0gLTE7CiAgICAgICAgIGludCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7Ci0gICAgICAg
IGNsaWVudC0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRleHQgKyBzdGFydCArIHdvcmRTdGFydCwg
d29yZExlbmd0aCwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7Cisg
ICAgICAgIGNsaWVudC0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHRleHQgKyB3b3JkU3RhcnQsIHdv
cmRMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOwogICAg
ICAgICBpZiAoMCA8IG1pc3NwZWxsaW5nTGVuZ3RoKSB7CiAgICAgICAgICAgICBBU1NFUlQoMCA8
PSBtaXNzcGVsbGluZ0xvY2F0aW9uICYmIG1pc3NwZWxsaW5nTG9jYXRpb24gPD0gd29yZExlbmd0
aCk7CiAgICAgICAgICAgICBBU1NFUlQoMCA8IG1pc3NwZWxsaW5nTGVuZ3RoICYmIG1pc3NwZWxs
aW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCA8PSB3b3JkTGVuZ3RoKTsKICAgICAgICAg
ICAgIFRleHRDaGVja2luZ1Jlc3VsdCBtaXNzcGVsbGluZzsKICAgICAgICAgICAgIG1pc3NwZWxs
aW5nLnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgICAgICAgICBtaXNzcGVs
bGluZy5sb2NhdGlvbiA9IHN0YXJ0ICsgd29yZFN0YXJ0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsK
KyAgICAgICAgICAgIG1pc3NwZWxsaW5nLmxvY2F0aW9uID0gd29yZFN0YXJ0ICsgbWlzc3BlbGxp
bmdMb2NhdGlvbjsKICAgICAgICAgICAgIG1pc3NwZWxsaW5nLmxlbmd0aCA9IG1pc3NwZWxsaW5n
TGVuZ3RoOwogICAgICAgICAgICAgbWlzc3BlbGxpbmcucmVwbGFjZW1lbnQgPSBjbGllbnQtPmdl
dEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKFN0cmluZyh0ZXh0ICsgbWlz
c3BlbGxpbmcubG9jYXRpb24sIG1pc3NwZWxsaW5nLmxlbmd0aCkpOwogICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQobWlzc3BlbGxpbmcpOwpAQCAtNjQwLDE1ICs2NDAsMTQgQEAgYm9vbCBUZXh0
Q2hlY2tpbmdIZWxwZXI6OnVuaWZpZWRUZXh0Q2hlYwogICAgIHJldHVybiBtX3JhbmdlICYmIFdl
YkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQobV9yYW5nZS0+b3duZXJEb2N1bWVudCgp
LmZyYW1lKCkpOwogfQogCi12b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xp
ZW50KiBjbGllbnQsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
VGV4dENoZWNrZXJDbGllbnQqIGNsaWVudCwgY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgs
IFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+JiByZXN1bHRzKQogewogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAgICAg
cmVzdWx0cyA9IGNsaWVudC0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyh0ZXh0LCBs
ZW5ndGgpLCBjaGVja2luZ1R5cGVzKTsKICNlbHNlCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdD4gc3BlbGxpbmdSZXN1bHQ7CiAgICAgaWYgKGNoZWNraW5nVHlwZXMgJiBUZXh0Q2hlY2tp
bmdUeXBlU3BlbGxpbmcpCi0gICAgICAgIGZpbmRNaXNzcGVsbGluZ3MoY2xpZW50LCB0ZXh0LCAw
LCBsZW5ndGgsIHNwZWxsaW5nUmVzdWx0KTsKKyAgICAgICAgZmluZE1pc3NwZWxsaW5ncyhjbGll
bnQsIHRleHQsIGxlbmd0aCwgc3BlbGxpbmdSZXN1bHQpOwogCiAjaWYgVVNFKEdSQU1NQVJfQ0hF
Q0tJTkcpCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gZ3JhbW1hclJlc3VsdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAJKHJldmlzaW9uIDE2MTg5
MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgyLDggKzI4Miw3IEBAIHN0YXRpYyBjb25zdCBJbmxpbmVCb3gqIGxvZ2ljYWxs
eU5leHRCb3gKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiB3
b3JkQnJlYWtJdGVyYXRvckZvck1pbk9mZnNldEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdmlzaWJsZVBvc2l0aW9uLCBjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LAotICAgIGlu
dCYgcHJldmlvdXNCb3hMZW5ndGgsIGJvb2wmIHByZXZpb3VzQm94SW5EaWZmZXJlbnRCbG9jaywg
VmVjdG9yPFVDaGFyLCAxMDI0PiYgc3RyaW5nLCBDYWNoZWRMb2dpY2FsbHlPcmRlcmVkTGVhZkJv
eGVzJiBsZWFmQm94ZXMpCitzdGF0aWMgVUJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9y
Rm9yTWluT2Zmc2V0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRp
b24sIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gsIGludCYgcHJldmlvdXNCb3hMZW5ndGgs
IGJvb2wmIHByZXZpb3VzQm94SW5EaWZmZXJlbnRCbG9jaywgVmVjdG9yPFVDaGFyLCAxMDI0PiYg
c3RyaW5nLCBDYWNoZWRMb2dpY2FsbHlPcmRlcmVkTGVhZkJveGVzJiBsZWFmQm94ZXMpCiB7CiAg
ICAgcHJldmlvdXNCb3hJbkRpZmZlcmVudEJsb2NrID0gZmFsc2U7CiAKQEAgLTMwMSwxMSArMzAw
LDEwIEBAIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmEKICAgICBzdHJp
bmcuYXBwZW5kKHRleHRCb3gtPnJlbmRlcmVyKCkudGV4dCgpLT5kZXByZWNhdGVkQ2hhcmFjdGVy
cygpICsgdGV4dEJveC0+c3RhcnQoKSwgdGV4dEJveC0+bGVuKCkpOwogICAgIGxlbiArPSB0ZXh0
Qm94LT5sZW4oKTsKIAotICAgIHJldHVybiB3b3JkQnJlYWtJdGVyYXRvcihzdHJpbmcuZGF0YSgp
LCBsZW4pOwotfSAKKyAgICByZXR1cm4gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyhzdHJp
bmcuZGF0YSgpLCBsZW4pKTsKK30KIAotc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJl
YWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlz
aWJsZVBvc2l0aW9uLCBjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LAotICAgIGJvb2wmIG5l
eHRCb3hJbkRpZmZlcmVudEJsb2NrLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiBzdHJpbmcsIENhY2hl
ZExvZ2ljYWxseU9yZGVyZWRMZWFmQm94ZXMmIGxlYWZCb3hlcykKK3N0YXRpYyBVQnJlYWtJdGVy
YXRvciogd29yZEJyZWFrSXRlcmF0b3JGb3JNYXhPZmZzZXRCb3VuZGFyeShjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgY29uc3QgSW5saW5lVGV4dEJveCogdGV4dEJveCwg
Ym9vbCYgbmV4dEJveEluRGlmZmVyZW50QmxvY2ssIFZlY3RvcjxVQ2hhciwgMTAyND4mIHN0cmlu
ZywgQ2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlcyYgbGVhZkJveGVzKQogewogICAgIG5l
eHRCb3hJbkRpZmZlcmVudEJsb2NrID0gZmFsc2U7CiAKQEAgLTMyMiwzOCArMzIwLDM3IEBAIHN0
YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmEKICAgICAgICAgbGVuICs9IG5l
eHRUZXh0Qm94LT5sZW4oKTsKICAgICB9CiAKLSAgICByZXR1cm4gd29yZEJyZWFrSXRlcmF0b3Io
c3RyaW5nLmRhdGEoKSwgbGVuKTsKLX0gCisgICAgcmV0dXJuIHdvcmRCcmVha0l0ZXJhdG9yKFN0
cmluZ1ZpZXcoc3RyaW5nLmRhdGEoKSwgbGVuKSk7Cit9CiAKLXN0YXRpYyBib29sIGlzTG9naWNh
bFN0YXJ0T2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wg
aGFyZExpbmVCcmVhaykKK3N0YXRpYyBib29sIGlzTG9naWNhbFN0YXJ0T2ZXb3JkKFVCcmVha0l0
ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKIHsKLSAgICBi
b29sIGJvdW5kYXJ5ID0gaGFyZExpbmVCcmVhayA/IHRydWUgOiBpc1RleHRCcmVhayhpdGVyLCBw
b3NpdGlvbik7CisgICAgYm9vbCBib3VuZGFyeSA9IGhhcmRMaW5lQnJlYWsgPyB0cnVlIDogdWJy
a19pc0JvdW5kYXJ5KGl0ZXIsIHBvc2l0aW9uKTsKICAgICBpZiAoIWJvdW5kYXJ5KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICB0ZXh0QnJlYWtGb2xsb3dpbmcoaXRlciwgcG9zaXRpb24p
OworICAgIHVicmtfZm9sbG93aW5nKGl0ZXIsIHBvc2l0aW9uKTsKICAgICAvLyBpc1dvcmRUZXh0
QnJlYWsgcmV0dXJucyB0cnVlIGFmdGVyIG1vdmluZyBhY3Jvc3MgYSB3b3JkIGFuZCBmYWxzZSBh
ZnRlciBtb3ZpbmcgYWNyb3NzIGEgcHVuY3R1YXRpb24vc3BhY2UuCi0gICAgcmV0dXJuIGlzV29y
ZFRleHRCcmVhayhpdGVyKTsKKyAgICByZXR1cm4gdWJya19nZXRSdWxlU3RhdHVzKGl0ZXIpICE9
IFVCUktfV09SRF9OT05FOwogfQogCi1zdGF0aWMgYm9vbCBpc2xvZ2ljYWxFbmRPZldvcmQoVGV4
dEJyZWFrSXRlcmF0b3IqIGl0ZXIsIGludCBwb3NpdGlvbiwgYm9vbCBoYXJkTGluZUJyZWFrKQor
c3RhdGljIGJvb2wgaXNsb2dpY2FsRW5kT2ZXb3JkKFVCcmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQg
cG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKIHsKLSAgICBib29sIGJvdW5kYXJ5ID0gaXNU
ZXh0QnJlYWsoaXRlciwgcG9zaXRpb24pOwotICAgIHJldHVybiAoaGFyZExpbmVCcmVhayB8fCBi
b3VuZGFyeSkgJiYgaXNXb3JkVGV4dEJyZWFrKGl0ZXIpOworICAgIGJvb2wgYm91bmRhcnkgPSB1
YnJrX2lzQm91bmRhcnkoaXRlciwgcG9zaXRpb24pOworICAgIHJldHVybiAoaGFyZExpbmVCcmVh
ayB8fCBib3VuZGFyeSkgJiYgdWJya19nZXRSdWxlU3RhdHVzKGl0ZXIpICE9IFVCUktfV09SRF9O
T05FOwogfQogCiBlbnVtIEN1cnNvck1vdmVtZW50RGlyZWN0aW9uIHsgTW92ZUxlZnQsIE1vdmVS
aWdodCB9OwogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3VhbFdvcmRQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgQ3Vyc29yTW92ZW1lbnREaXJlY3Rp
b24gZGlyZWN0aW9uLCAKLSAgICBib29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQpCitzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3VhbFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVQb3NpdGlvbiwgQ3Vyc29yTW92ZW1lbnREaXJlY3Rpb24gZGlyZWN0aW9uLCBi
b29sIHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQpCiB7CiAgICAgaWYgKHZpc2libGVQb3NpdGlv
bi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCiAgICAgVGV4
dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlz
aWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOwotICAgIElubGluZUJveCogcHJldmlvdXNs
eVZpc2l0ZWRCb3ggPSAwOworICAgIElubGluZUJveCogcHJldmlvdXNseVZpc2l0ZWRCb3ggPSBu
dWxscHRyOwogICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50ID0gdmlzaWJsZVBvc2l0aW9uOwot
ICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyID0gMDsKKyAgICBVQnJlYWtJdGVyYXRvciogaXRl
ciA9IG51bGxwdHI7CiAKICAgICBDYWNoZWRMb2dpY2FsbHlPcmRlcmVkTGVhZkJveGVzIGxlYWZC
b3hlczsKICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKQEAgLTM4NSwxNCArMzgyLDE0
IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzdWFsV29yZFBvc2l0aW8KICAgICAgICAgZWxz
ZSBpZiAob2Zmc2V0SW5Cb3ggPT0gYm94LT5jYXJldE1heE9mZnNldCgpKQogICAgICAgICAgICAg
aXRlciA9IHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkodmlzaWJsZVBvc2l0
aW9uLCB0ZXh0Qm94LCBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jaywgc3RyaW5nLCBsZWFmQm94ZXMp
OwogICAgICAgICBlbHNlIGlmIChtb3ZpbmdJbnRvTmV3Qm94KSB7Ci0gICAgICAgICAgICBpdGVy
ID0gd29yZEJyZWFrSXRlcmF0b3IodGV4dEJveC0+cmVuZGVyZXIoKS50ZXh0KCktPmRlcHJlY2F0
ZWRDaGFyYWN0ZXJzKCkgKyB0ZXh0Qm94LT5zdGFydCgpLCB0ZXh0Qm94LT5sZW4oKSk7CisgICAg
ICAgICAgICBpdGVyID0gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyh0ZXh0Qm94LT5yZW5k
ZXJlcigpLnRleHQoKSkuc3Vic3RyaW5nKHRleHRCb3gtPnN0YXJ0KCksIHRleHRCb3gtPnN0YXJ0
KCkgKyB0ZXh0Qm94LT5sZW4oKSkpOwogICAgICAgICAgICAgcHJldmlvdXNseVZpc2l0ZWRCb3gg
PSBib3g7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWl0ZXIpCiAgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICB0ZXh0QnJlYWtGaXJzdChpdGVyKTsKKyAgICAgICAgdWJya19maXJzdChp
dGVyKTsKICAgICAgICAgaW50IG9mZnNldEluSXRlcmF0b3IgPSBvZmZzZXRJbkJveCAtIHRleHRC
b3gtPnN0YXJ0KCkgKyBwcmV2aW91c0JveExlbmd0aDsKIAogICAgICAgICBib29sIGlzV29yZEJy
ZWFrOwpAQCAtMTA0Niw5ICsxMDQzLDkgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRp
b24oY29uc3QgVgogCiBzdGF0aWMgdW5zaWduZWQgc3RhcnRTZW50ZW5jZUJvdW5kYXJ5KGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkLCBCb3VuZGFyeVNl
YXJjaENvbnRleHRBdmFpbGFiaWxpdHksIGJvb2wmKQogewotICAgIFRleHRCcmVha0l0ZXJhdG9y
KiBpdGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOwor
ICAgIFVCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJp
bmdWaWV3KGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5n
IGZ1bmN0aW9uIGNhbiByZXR1cm4gLTE7IHdlIGRvbid0IGhhbmRsZSB0aGF0LgotICAgIHJldHVy
biB0ZXh0QnJlYWtQcmVjZWRpbmcoaXRlcmF0b3IsIGxlbmd0aCk7CisgICAgcmV0dXJuIHVicmtf
cHJlY2VkaW5nKGl0ZXJhdG9yLCBsZW5ndGgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRP
ZlNlbnRlbmNlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYykKQEAgLTEwNTgsOCArMTA1NSw4IEBA
IFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VudGVuY2UoY29uc3QgVmkKIAogc3RhdGljIHVuc2ln
bmVkIGVuZFNlbnRlbmNlQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCwgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSwgYm9v
bCYpCiB7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gc2VudGVuY2VCcmVha0l0
ZXJhdG9yKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgcmV0dXJuIHRleHRCcmVha05leHQoaXRl
cmF0b3IpOworICAgIFVCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJdGVy
YXRvcihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGxlbmd0aCkpOworICAgIHJldHVybiB1YnJrX25l
eHQoaXRlcmF0b3IpOwogfQogCiAvLyBGSVhNRTogVGhpcyBpbmNsdWRlcyB0aGUgc3BhY2UgYWZ0
ZXIgdGhlIHB1bmN0dWF0aW9uIHRoYXQgbWFya3MgdGhlIGVuZCBvZiB0aGUgc2VudGVuY2UuCkBA
IC0xMDcxLDkgKzEwNjgsOSBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTZW50ZW5jZShjb25zdCBW
aXNpCiBzdGF0aWMgdW5zaWduZWQgcHJldmlvdXNTZW50ZW5jZVBvc2l0aW9uQm91bmRhcnkoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQsIEJvdW5kYXJ5
U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSwgYm9vbCYpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
aXMgaWRlbnRpY2FsIHRvIHN0YXJ0U2VudGVuY2VCb3VuZGFyeS4gSSdtIHByZXR0eSBzdXJlIHRo
YXQncyBub3QgcmlnaHQuCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gc2VudGVu
Y2VCcmVha0l0ZXJhdG9yKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgVUJyZWFrSXRlcmF0b3Iq
IGl0ZXJhdG9yID0gc2VudGVuY2VCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoY2hhcmFjdGVycywg
bGVuZ3RoKSk7CiAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FuIHJldHVy
biAtMTsgd2UgZG9uJ3QgaGFuZGxlIHRoYXQuCi0gICAgcmV0dXJuIHRleHRCcmVha1ByZWNlZGlu
ZyhpdGVyYXRvciwgbGVuZ3RoKTsKKyAgICByZXR1cm4gdWJya19wcmVjZWRpbmcoaXRlcmF0b3Is
IGxlbmd0aCk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1NlbnRlbmNlUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQpAQCAtMTA4Niw4ICsxMDgzLDggQEAgc3RhdGljIHVu
c2lnbmVkIG5leHRTZW50ZW5jZVBvc2l0aW9uQm91bgogewogICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGlkZW50aWNhbCB0byBlbmRTZW50ZW5jZUJvdW5kYXJ5LiBUaGlzIGlzbid0IHJpZ2h0LCBpdCBu
ZWVkcyB0byAKICAgICAvLyBtb3ZlIHRvIHRoZSBlcXVpdmxhbnQgcG9zaXRpb24gaW4gdGhlIGZv
bGxvd2luZyBzZW50ZW5jZS4KLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSBzZW50
ZW5jZUJyZWFrSXRlcmF0b3IoY2hhcmFjdGVycywgbGVuZ3RoKTsKLSAgICByZXR1cm4gdGV4dEJy
ZWFrRm9sbG93aW5nKGl0ZXJhdG9yLCAwKTsKKyAgICBVQnJlYWtJdGVyYXRvciogaXRlcmF0b3Ig
PSBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsK
KyAgICByZXR1cm4gdWJya19mb2xsb3dpbmcoaXRlcmF0b3IsIDApOwogfQogCiBWaXNpYmxlUG9z
aXRpb24gbmV4dFNlbnRlbmNlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVu
Y2F0b3IuY3BwCShyZXZpc2lvbiAxNjE4OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxOSArNDIs
MTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIHVuc2lnbmVkIFRydW5jYXRpb25G
dW5jdGlvbihjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGtlZXBDb3Vu
dCwgVUNoYXIqIGJ1ZmZlciwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNpcyk7CiAKLXN0YXRpYyBp
bmxpbmUgaW50IHRleHRCcmVha0F0T3JQcmVjZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGl0LCBp
bnQgb2Zmc2V0KQorc3RhdGljIGlubGluZSBpbnQgdGV4dEJyZWFrQXRPclByZWNlZGluZyhVQnJl
YWtJdGVyYXRvciogaXQsIGludCBvZmZzZXQpCiB7Ci0gICAgaWYgKGlzVGV4dEJyZWFrKGl0LCBv
ZmZzZXQpKQorICAgIGlmICh1YnJrX2lzQm91bmRhcnkoaXQsIG9mZnNldCkpCiAgICAgICAgIHJl
dHVybiBvZmZzZXQ7CiAKLSAgICBpbnQgcmVzdWx0ID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBv
ZmZzZXQpOwotICAgIHJldHVybiByZXN1bHQgPT0gVGV4dEJyZWFrRG9uZSA/IDAgOiByZXN1bHQ7
CisgICAgaW50IHJlc3VsdCA9IHVicmtfcHJlY2VkaW5nKGl0LCBvZmZzZXQpOworICAgIHJldHVy
biByZXN1bHQgPT0gVUJSS19ET05FID8gMCA6IHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBp
bnQgYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhUZXh0QnJlYWtJdGVyYXRvciogaXQsIGludCBv
ZmZzZXQsIGludCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIGludCBib3VuZGVkVGV4dEJyZWFrRm9s
bG93aW5nKFVCcmVha0l0ZXJhdG9yKiBpdCwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkKIHsKLSAg
ICBpbnQgcmVzdWx0ID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0LCBvZmZzZXQpOwotICAgIHJldHVy
biByZXN1bHQgPT0gVGV4dEJyZWFrRG9uZSA/IGxlbmd0aCA6IHJlc3VsdDsKKyAgICBpbnQgcmVz
dWx0ID0gdWJya19mb2xsb3dpbmcoaXQsIG9mZnNldCk7CisgICAgcmV0dXJuIHJlc3VsdCA9PSBV
QlJLX0RPTkUgPyBsZW5ndGggOiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBjZW50ZXJU
cnVuY2F0ZVRvQnVmZmVyKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIHVu
c2lnbmVkIGtlZXBDb3VudCwgVUNoYXIqIGJ1ZmZlciwgYm9vbCBzaG91bGRJbnNlcnRFbGxpcHNp
cykKQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGNlbnRlclRydW5jYXRlVG9CdWZm
ZXIoYwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGtlZXBDb3VudCA8IFNU
UklOR19CVUZGRVJfU0laRSk7CiAgICAgCiAgICAgdW5zaWduZWQgb21pdFN0YXJ0ID0gKGtlZXBD
b3VudCArIDEpIC8gMjsKLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0
cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBsZW5ndGgpOworICAgIE5vblNoYXJlZENoYXJh
Y3RlckJyZWFrSXRlcmF0b3IgaXQoU3RyaW5nVmlldyhzdHJpbmcpLnN1YnN0cmluZygwLCBsZW5n
dGgpKTsKICAgICB1bnNpZ25lZCBvbWl0RW5kID0gYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhp
dCwgb21pdFN0YXJ0ICsgKGxlbmd0aCAtIGtlZXBDb3VudCkgLSAxLCBsZW5ndGgpOwogICAgIG9t
aXRTdGFydCA9IHRleHRCcmVha0F0T3JQcmVjZWRpbmcoaXQsIG9taXRTdGFydCk7CiAKQEAgLTEx
NSw3ICsxMTUsNyBAQCBzdGF0aWMgdW5zaWduZWQgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyKGNvCiAg
ICAgICAgIC0ta2VlcENvdW50OwogI2VuZGlmCiAKLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yIGl0KHN0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBsZW5ndGgpOworICAg
IE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoU3RyaW5nVmlldyhzdHJpbmcpLnN1
YnN0cmluZygwLCBsZW5ndGgpKTsKICAgICB1bnNpZ25lZCBrZWVwTGVuZ3RoID0gdGV4dEJyZWFr
QXRPclByZWNlZGluZyhpdCwga2VlcENvdW50KTsKICAgICB1bnNpZ25lZCB0cnVuY2F0ZWRMZW5n
dGggPSBzaG91bGRJbnNlcnRFbGxpcHNpcyA/IGtlZXBMZW5ndGggKyAxIDoga2VlcExlbmd0aDsK
IApAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRpYyB1bnNpZ25lZCByaWdodENsaXBUb0NoYXJhY3Rl
ckJ1ZmYKICAgICBBU1NFUlQoa2VlcENvdW50IDwgbGVuZ3RoKTsKICAgICBBU1NFUlQoa2VlcENv
dW50IDwgU1RSSU5HX0JVRkZFUl9TSVpFKTsKIAotICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFr
SXRlcmF0b3IgaXQoc3RyaW5nLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIGxlbmd0aCk7CisgICAg
Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChTdHJpbmdWaWV3KHN0cmluZykuc3Vi
c3RyaW5nKDAsIGxlbmd0aCkpOwogICAgIHVuc2lnbmVkIGtlZXBMZW5ndGggPSB0ZXh0QnJlYWtB
dE9yUHJlY2VkaW5nKGl0LCBrZWVwQ291bnQpOwogICAgIG1lbWNweShidWZmZXIsIHN0cmluZy5k
ZXByZWNhdGVkQ2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0aCk7CiAKQEAg
LTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgdW5zaWduZWQgcmlnaHRDbGlwVG9Xb3JkQnVmZmVyKGNv
CiAgICAgQVNTRVJUKGtlZXBDb3VudCA8IGxlbmd0aCk7CiAgICAgQVNTRVJUKGtlZXBDb3VudCA8
IFNUUklOR19CVUZGRVJfU0laRSk7CiAKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3Jk
QnJlYWtJdGVyYXRvcihzdHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAg
ICBVQnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KHN0cmlu
Zykuc3Vic3RyaW5nKDAsIGxlbmd0aCkpOwogICAgIHVuc2lnbmVkIGtlZXBMZW5ndGggPSB0ZXh0
QnJlYWtBdE9yUHJlY2VkaW5nKGl0LCBrZWVwQ291bnQpOwogICAgIG1lbWNweShidWZmZXIsIHN0
cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0aCk7
CiAKQEAgLTE2Myw3ICsxNjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgbGVmdFRydW5jYXRlVG9CdWZm
ZXIoY29uCiAKICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gbGVuZ3RoIC0ga2VlcENvdW50Owog
Ci0gICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChzdHJpbmcuZGVwcmVjYXRl
ZENoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yIGl0KFN0cmluZ1ZpZXcoc3RyaW5nKS5zdWJzdHJpbmcoMCwgbGVuZ3RoKSk7CiAgICAgdW5z
aWduZWQgYWRqdXN0ZWRTdGFydEluZGV4ID0gc3RhcnRJbmRleDsKICAgICBzdGFydEluZGV4ID0g
Ym91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhpdCwgc3RhcnRJbmRleCwgbGVuZ3RoIC0gc3RhcnRJ
bmRleCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21w
bGV4VGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNjE4
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDIxICsyMDksMjEgQEAgaW50IENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6b2Zmc2V0Rm9yUG9zaQogICAgICAgICAgICAgICAgIC8vIGxp
Z2F0dXJlIGNhcmV0cy4KICAgICAgICAgICAgICAgICBDRkluZGV4IGhpdEluZGV4ID0gaGl0R2x5
cGhTdGFydCArIChoaXRHbHlwaEVuZCAtIGhpdEdseXBoU3RhcnQpICogKG1fcnVuLmx0cigpID8g
eCAvIGFkanVzdGVkQWR2YW5jZSA6IDEgLSB4IC8gYWRqdXN0ZWRBZHZhbmNlKTsKICAgICAgICAg
ICAgICAgICBpbnQgc3RyaW5nTGVuZ3RoID0gY29tcGxleFRleHRSdW4uc3RyaW5nTGVuZ3RoKCk7
Ci0gICAgICAgICAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvclBvc2l0aW9uSXRlcmF0
b3IgPSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbXBsZXhUZXh0UnVuLmNoYXJhY3RlcnMoKSwg
c3RyaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBVQnJlYWtJdGVyYXRvciogY3Vyc29yUG9z
aXRpb25JdGVyYXRvciA9IGN1cnNvck1vdmVtZW50SXRlcmF0b3IoU3RyaW5nVmlldyhjb21wbGV4
VGV4dFJ1bi5jaGFyYWN0ZXJzKCksIHN0cmluZ0xlbmd0aCkpOwogICAgICAgICAgICAgICAgIGlu
dCBjbHVzdGVyU3RhcnQ7Ci0gICAgICAgICAgICAgICAgaWYgKGlzVGV4dEJyZWFrKGN1cnNvclBv
c2l0aW9uSXRlcmF0b3IsIGhpdEluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAodWJya19pc0Jv
dW5kYXJ5KGN1cnNvclBvc2l0aW9uSXRlcmF0b3IsIGhpdEluZGV4KSkKICAgICAgICAgICAgICAg
ICAgICAgY2x1c3RlclN0YXJ0ID0gaGl0SW5kZXg7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJTdGFydCA9IHRleHRCcmVha1ByZWNlZGluZyhjdXJz
b3JQb3NpdGlvbkl0ZXJhdG9yLCBoaXRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
bHVzdGVyU3RhcnQgPT0gVGV4dEJyZWFrRG9uZSkKKyAgICAgICAgICAgICAgICAgICAgY2x1c3Rl
clN0YXJ0ID0gdWJya19wcmVjZWRpbmcoY3Vyc29yUG9zaXRpb25JdGVyYXRvciwgaGl0SW5kZXgp
OworICAgICAgICAgICAgICAgICAgICBpZiAoY2x1c3RlclN0YXJ0ID09IFVCUktfRE9ORSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJTdGFydCA9IDA7CiAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgaWYgKCFpbmNsdWRlUGFydGlhbEdseXBocykKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXhUZXh0UnVuLnN0cmluZ0xvY2F0aW9uKCkgKyBjbHVz
dGVyU3RhcnQ7CiAKLSAgICAgICAgICAgICAgICBpbnQgY2x1c3RlckVuZCA9IHRleHRCcmVha0Zv
bGxvd2luZyhjdXJzb3JQb3NpdGlvbkl0ZXJhdG9yLCBoaXRJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNsdXN0ZXJFbmQgPT0gVGV4dEJyZWFrRG9uZSkKKyAgICAgICAgICAgICAgICBpbnQg
Y2x1c3RlckVuZCA9IHVicmtfZm9sbG93aW5nKGN1cnNvclBvc2l0aW9uSXRlcmF0b3IsIGhpdElu
ZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoY2x1c3RlckVuZCA9PSBVQlJLX0RPTkUpCiAgICAg
ICAgICAgICAgICAgICAgIGNsdXN0ZXJFbmQgPSBzdHJpbmdMZW5ndGg7CiAKICAgICAgICAgICAg
ICAgICBDR0Zsb2F0IGNsdXN0ZXJXaWR0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEFsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDE2MTg5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEFsbEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuY3BwIgogI2luY2x1ZGUg
IlRleHRCcmVha0l0ZXJhdG9yLmNwcCIKLSNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvcklDVS5j
cHAiCiAjaW5jbHVkZSAiVGV4dENvZGVjLmNwcCIKICNpbmNsdWRlICJUZXh0Q29kZWNJQ1UuY3Bw
IgogI2luY2x1ZGUgIlRleHRDb2RlY0xhdGluMS5jcHAiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcAkocmV2aXNpb24gMTYxODkyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDI3ICs2MSwyNyBAQCBpbnQgc3RhcnRPZkxhc3RXb3JkQm91bmRhcnlD
b250ZXh0KGNvbnN0CiAKIGludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgoY29uc3QgVUNoYXIqIGNo
YXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkKIHsKLSAgICBUZXh0QnJl
YWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywgbGVuKTsKKyAgICBVQnJl
YWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KGNoYXJzLCBsZW4p
KTsKIAogICAgIGlmIChmb3J3YXJkKSB7Ci0gICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrRm9s
bG93aW5nKGl0LCBwb3NpdGlvbik7Ci0gICAgICAgIHdoaWxlIChwb3NpdGlvbiAhPSBUZXh0QnJl
YWtEb25lKSB7CisgICAgICAgIHBvc2l0aW9uID0gdWJya19mb2xsb3dpbmcoaXQsIHBvc2l0aW9u
KTsKKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uICE9IFVCUktfRE9ORSkgewogICAgICAgICAgICAg
Ly8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIHByZWNlZWRpbmcgdGhlIGJy
ZWFrIGlzIGFscGhhbnVtZXJpYy4KICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGxlbiAmJiB1
X2lzYWxudW0oY2hhcnNbcG9zaXRpb24gLSAxXSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBv
c2l0aW9uOwogCi0gICAgICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwg
cG9zaXRpb24pOworICAgICAgICAgICAgcG9zaXRpb24gPSB1YnJrX2ZvbGxvd2luZyhpdCwgcG9z
aXRpb24pOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGxlbjsKICAgICB9IGVsc2Ugewot
ICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVha1ByZWNlZGluZyhpdCwgcG9zaXRpb24pOwotICAg
ICAgICB3aGlsZSAocG9zaXRpb24gIT0gVGV4dEJyZWFrRG9uZSkgeworICAgICAgICBwb3NpdGlv
biA9IHVicmtfcHJlY2VkaW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIHdoaWxlIChwb3NpdGlv
biAhPSBVQlJLX0RPTkUpIHsKICAgICAgICAgICAgIC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4g
dGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGJyZWFrIGlzIGFscGhhbnVtZXJpYy4KICAgICAg
ICAgICAgIGlmIChwb3NpdGlvbiA+IDAgJiYgdV9pc2FsbnVtKGNoYXJzW3Bvc2l0aW9uXSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogCi0gICAgICAgICAgICBwb3NpdGlvbiA9
IHRleHRCcmVha1ByZWNlZGluZyhpdCwgcG9zaXRpb24pOworICAgICAgICAgICAgcG9zaXRpb24g
PSB1YnJrX3ByZWNlZGluZyhpdCwgcG9zaXRpb24pOwogICAgICAgICB9CiAKICAgICAgICAgcmV0
dXJuIDA7CkBAIC05MCwxOSArOTAsMTkgQEAgaW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25z
dCBVQ2hhciogYwogCiB2b2lkIGZpbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJzLCBp
bnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKQogewotICAgIFRleHRC
cmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4pOwotICAgICpl
bmQgPSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICBVQnJlYWtJdGVyYXRv
ciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KGNoYXJzLCBsZW4pKTsKKyAgICAq
ZW5kID0gdWJya19mb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKICAgICBpZiAoKmVuZCA8IDApCi0g
ICAgICAgICplbmQgPSB0ZXh0QnJlYWtMYXN0KGl0KTsKLSAgICAqc3RhcnQgPSB0ZXh0QnJlYWtQ
cmV2aW91cyhpdCk7CisgICAgICAgICplbmQgPSB1YnJrX2xhc3QoaXQpOworICAgICpzdGFydCA9
IHVicmtfcHJldmlvdXMoaXQpOwogfQogCiB2b2lkIGZpbmRFbmRXb3JkQm91bmRhcnkoY29uc3Qg
VUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogZW5kKQogewotICAgIFRl
eHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4pOwotICAg
ICplbmQgPSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICBVQnJlYWtJdGVy
YXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KGNoYXJzLCBsZW4pKTsKKyAg
ICAqZW5kID0gdWJya19mb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKICAgICBpZiAoKmVuZCA8IDAp
Ci0gICAgICAgICplbmQgPSB0ZXh0QnJlYWtMYXN0KGl0KTsKKyAgICAgICAgKmVuZCA9IHVicmtf
bGFzdChpdCk7CiB9CiAKICNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHAJKHJldmlz
aW9uIDE2MTg5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiwxMSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCiAKKyNpbmNsdWRlICJMaW5l
QnJlYWtJdGVyYXRvclBvb2xJQ1UuaCIKKyNpbmNsdWRlICJVVGV4dFByb3ZpZGVyTGF0aW4xLmgi
CisjaW5jbHVkZSAiVVRleHRQcm92aWRlclVURjE2LmgiCisjaW5jbHVkZSA8d3RmL0F0b21pY3Mu
aD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1bnNpZ25lZCBudW1HcmFwaGVtZUNsdXN0ZXJz
KGNvbnN0IFN0cmluZyYgcykKQEAgLTM1LDEyICs0MCwxMiBAQCB1bnNpZ25lZCBudW1HcmFwaGVt
ZUNsdXN0ZXJzKGNvbnN0IFN0cmluCiAgICAgaWYgKHMuaXM4Qml0KCkgJiYgIXMuY29udGFpbnMo
J1xyJykpCiAgICAgICAgIHJldHVybiBzdHJpbmdMZW5ndGg7CiAKLSAgICBOb25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHMuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgc3RyaW5nTGVu
Z3RoKTsKKyAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHMpOwogICAgIGlm
ICghaXQpCiAgICAgICAgIHJldHVybiBzdHJpbmdMZW5ndGg7CiAKICAgICB1bnNpZ25lZCBudW0g
PSAwOwotICAgIHdoaWxlICh0ZXh0QnJlYWtOZXh0KGl0KSAhPSBUZXh0QnJlYWtEb25lKQorICAg
IHdoaWxlICh1YnJrX25leHQoaXQpICE9IFVCUktfRE9ORSkKICAgICAgICAgKytudW07CiAgICAg
cmV0dXJuIG51bTsKIH0KQEAgLTU2LDE1ICs2MSwyODggQEAgdW5zaWduZWQgbnVtQ2hhcmFjdGVy
c0luR3JhcGhlbWVDbHVzdGVycwogICAgIGlmIChzLmlzOEJpdCgpICYmICFzLmNvbnRhaW5zKCdc
cicpKQogICAgICAgICByZXR1cm4gc3RkOjptaW4oc3RyaW5nTGVuZ3RoLCBudW1HcmFwaGVtZUNs
dXN0ZXJzKTsKIAotICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQocy5kZXBy
ZWNhdGVkQ2hhcmFjdGVycygpLCBzdHJpbmdMZW5ndGgpOworICAgIE5vblNoYXJlZENoYXJhY3Rl
ckJyZWFrSXRlcmF0b3IgaXQocyk7CiAgICAgaWYgKCFpdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bWluKHN0cmluZ0xlbmd0aCwgbnVtR3JhcGhlbWVDbHVzdGVycyk7CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtR3JhcGhlbWVDbHVzdGVyczsgKytpKSB7Ci0gICAgICAgIGlmICh0
ZXh0QnJlYWtOZXh0KGl0KSA9PSBUZXh0QnJlYWtEb25lKQorICAgICAgICBpZiAodWJya19uZXh0
KGl0KSA9PSBVQlJLX0RPTkUpCiAgICAgICAgICAgICByZXR1cm4gc3RyaW5nTGVuZ3RoOwogICAg
IH0KLSAgICByZXR1cm4gdGV4dEJyZWFrQ3VycmVudChpdCk7CisgICAgcmV0dXJuIHVicmtfY3Vy
cmVudChpdCk7Cit9CisKKy8vIEl0ZXJhdG9yIGluaXRpYWxpemF0aW9uCisKK3N0YXRpYyBVQnJl
YWtJdGVyYXRvciogaW5pdGlhbGl6ZUl0ZXJhdG9yKFVCcmVha0l0ZXJhdG9yVHlwZSB0eXBlLCBj
b25zdCBjaGFyKiBsb2NhbGUgPSBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQoKSkKK3sKKyAgICBV
RXJyb3JDb2RlIG9wZW5TdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgVUJyZWFrSXRlcmF0b3Iq
IGl0ZXJhdG9yID0gdWJya19vcGVuKHR5cGUsIGxvY2FsZSwgMCwgMCwgJm9wZW5TdGF0dXMpOwor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoVV9TVUNDRVNTKG9wZW5TdGF0dXMpLCAiSUNVIGNvdWxk
IG5vdCBvcGVuIGEgYnJlYWsgaXRlcmF0b3I6ICVzICglZCkiLCB1X2Vycm9yTmFtZShvcGVuU3Rh
dHVzKSwgb3BlblN0YXR1cyk7CisgICAgcmV0dXJuIGl0ZXJhdG9yOworfQorCisjaWYgIVBMQVRG
T1JNKElPUykKK3N0YXRpYyBVQnJlYWtJdGVyYXRvciogaW5pdGlhbGl6ZUl0ZXJhdG9yV2l0aFJ1
bGVzKGNvbnN0IGNoYXIqIGJyZWFrUnVsZXMpCit7CisgICAgVVBhcnNlRXJyb3IgcGFyc2VTdGF0
dXM7CisgICAgVUVycm9yQ29kZSBvcGVuU3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIFN0cmlu
ZyBydWxlcyhicmVha1J1bGVzKTsKKyAgICBVQnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSB1YnJr
X29wZW5SdWxlcyhydWxlcy5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBydWxlcy5sZW5ndGgoKSwg
MCwgMCwgJnBhcnNlU3RhdHVzLCAmb3BlblN0YXR1cyk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShVX1NVQ0NFU1Mob3BlblN0YXR1cyksICJJQ1UgY291bGQgbm90IG9wZW4gYSBicmVhayBpdGVy
YXRvcjogJXMgKCVkKSIsIHVfZXJyb3JOYW1lKG9wZW5TdGF0dXMpLCBvcGVuU3RhdHVzKTsKKyAg
ICByZXR1cm4gaXRlcmF0b3I7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworCisvLyBJ
dGVyYXRvciB0ZXh0IHNldHRpbmcKKworc3RhdGljIFVCcmVha0l0ZXJhdG9yKiBzZXRUZXh0Rm9y
SXRlcmF0b3IoVUJyZWFrSXRlcmF0b3ImIGl0ZXJhdG9yLCBTdHJpbmdWaWV3IHN0cmluZykKK3sK
KyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7CisgICAgICAgIFVUZXh0V2l0aEJ1ZmZlciB0ZXh0
TG9jYWw7CisgICAgICAgIHRleHRMb2NhbC50ZXh0ID0gVVRFWFRfSU5JVElBTElaRVI7CisgICAg
ICAgIHRleHRMb2NhbC50ZXh0LmV4dHJhU2l6ZSA9IHNpemVvZih0ZXh0TG9jYWwuYnVmZmVyKTsK
KyAgICAgICAgdGV4dExvY2FsLnRleHQucEV4dHJhID0gdGV4dExvY2FsLmJ1ZmZlcjsKKworICAg
ICAgICBVRXJyb3JDb2RlIG9wZW5TdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIFVUZXh0
KiB0ZXh0ID0gb3BlbkxhdGluMVVUZXh0UHJvdmlkZXIoJnRleHRMb2NhbCwgc3RyaW5nLmNoYXJh
Y3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSwgJm9wZW5TdGF0dXMpOworICAgICAgICBpZiAoVV9G
QUlMVVJFKG9wZW5TdGF0dXMpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoInVUZXh0T3Blbkxh
dGluMSBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBvcGVuU3RhdHVzKTsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgVUVycm9yQ29kZSBzZXRUZXh0U3Rh
dHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1YnJrX3NldFVUZXh0KHJlaW50ZXJwcmV0X2Nh
c3Q8VUJyZWFrSXRlcmF0b3IqPigmaXRlcmF0b3IpLCB0ZXh0LCAmc2V0VGV4dFN0YXR1cyk7Cisg
ICAgICAgIGlmIChVX0ZBSUxVUkUoc2V0VGV4dFN0YXR1cykpIHsKKyAgICAgICAgICAgIExPR19F
UlJPUigidWJya19zZXRVVGV4dCBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBzZXRUZXh0U3RhdHVz
KTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgdXRl
eHRfY2xvc2UodGV4dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVUVycm9yQ29kZSBzZXRUZXh0
U3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICB1YnJrX3NldFRleHQocmVpbnRlcnByZXRf
Y2FzdDxVQnJlYWtJdGVyYXRvcio+KCZpdGVyYXRvciksIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwg
c3RyaW5nLmxlbmd0aCgpLCAmc2V0VGV4dFN0YXR1cyk7CisgICAgICAgIGlmIChVX0ZBSUxVUkUo
c2V0VGV4dFN0YXR1cykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICByZXR1cm4gJml0ZXJhdG9yOworfQorCitzdGF0aWMgVUJyZWFrSXRlcmF0b3IqIHNldENvbnRl
eHRBd2FyZVRleHRGb3JJdGVyYXRvcihVQnJlYWtJdGVyYXRvciYgaXRlcmF0b3IsIFN0cmluZ1Zp
ZXcgc3RyaW5nLCBjb25zdCBVQ2hhciogcHJpb3JDb250ZXh0LCB1bnNpZ25lZCBwcmlvckNvbnRl
eHRMZW5ndGgpCit7CisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkgeworICAgICAgICBVVGV4dFdp
dGhCdWZmZXIgdGV4dExvY2FsOworICAgICAgICB0ZXh0TG9jYWwudGV4dCA9IFVURVhUX0lOSVRJ
QUxJWkVSOworICAgICAgICB0ZXh0TG9jYWwudGV4dC5leHRyYVNpemUgPSBzaXplb2YodGV4dExv
Y2FsLmJ1ZmZlcik7CisgICAgICAgIHRleHRMb2NhbC50ZXh0LnBFeHRyYSA9IHRleHRMb2NhbC5i
dWZmZXI7CisKKyAgICAgICAgVUVycm9yQ29kZSBvcGVuU3RhdHVzID0gVV9aRVJPX0VSUk9SOwor
ICAgICAgICBVVGV4dCogdGV4dCA9IG9wZW5MYXRpbjFDb250ZXh0QXdhcmVVVGV4dFByb3ZpZGVy
KCZ0ZXh0TG9jYWwsIHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksIHByaW9y
Q29udGV4dCwgcHJpb3JDb250ZXh0TGVuZ3RoLCAmb3BlblN0YXR1cyk7CisgICAgICAgIGlmIChV
X0ZBSUxVUkUob3BlblN0YXR1cykpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigib3BlbkxhdGlu
MUNvbnRleHRBd2FyZVVUZXh0UHJvdmlkZXIgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgb3BlblN0
YXR1cyk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAg
IFVFcnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWJya19z
ZXRVVGV4dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oJml0ZXJhdG9yKSwgdGV4
dCwgJnNldFRleHRTdGF0dXMpOworICAgICAgICBpZiAoVV9GQUlMVVJFKHNldFRleHRTdGF0dXMp
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoInVicmtfc2V0VVRleHQgZmFpbGVkIHdpdGggc3Rh
dHVzICVkIiwgc2V0VGV4dFN0YXR1cyk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorCisgICAgICAgIHV0ZXh0X2Nsb3NlKHRleHQpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFVUZXh0IHRleHRMb2NhbCA9IFVURVhUX0lOSVRJQUxJWkVSOworCisgICAgICAgIFVFcnJv
ckNvZGUgb3BlblN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgVVRleHQqIHRleHQgPSBv
cGVuVVRGMTZDb250ZXh0QXdhcmVVVGV4dFByb3ZpZGVyKCZ0ZXh0TG9jYWwsIHN0cmluZy5jaGFy
YWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpLCBwcmlvckNvbnRleHQsIHByaW9yQ29udGV4dExl
bmd0aCwgJm9wZW5TdGF0dXMpOworICAgICAgICBpZiAoVV9GQUlMVVJFKG9wZW5TdGF0dXMpKSB7
CisgICAgICAgICAgICBMT0dfRVJST1IoIm9wZW5VVEYxNkNvbnRleHRBd2FyZVVUZXh0UHJvdmlk
ZXIgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgb3BlblN0YXR1cyk7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIFVFcnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9IFVf
WkVST19FUlJPUjsKKyAgICAgICAgdWJya19zZXRVVGV4dChyZWludGVycHJldF9jYXN0PFVCcmVh
a0l0ZXJhdG9yKj4oJml0ZXJhdG9yKSwgdGV4dCwgJnNldFRleHRTdGF0dXMpOworICAgICAgICBp
ZiAoVV9GQUlMVVJFKHNldFRleHRTdGF0dXMpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoInVi
cmtfc2V0VVRleHQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgc2V0VGV4dFN0YXR1cyk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHV0ZXh0X2Nsb3Nl
KHRleHQpOworICAgIH0KKworICAgIHJldHVybiAmaXRlcmF0b3I7Cit9CisKKworLy8gU3RhdGlj
IGl0ZXJhdG9ycworCitVQnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmll
dyBzdHJpbmcpCit7CisgICAgc3RhdGljIFVCcmVha0l0ZXJhdG9yKiBzdGF0aWNXb3JkQnJlYWtJ
dGVyYXRvciA9IGluaXRpYWxpemVJdGVyYXRvcihVQlJLX1dPUkQpOworICAgIGlmICghc3RhdGlj
V29yZEJyZWFrSXRlcmF0b3IpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJu
IHNldFRleHRGb3JJdGVyYXRvcigqc3RhdGljV29yZEJyZWFrSXRlcmF0b3IsIHN0cmluZyk7Cit9
CisKK1VCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyBzdHJp
bmcpCit7CisgICAgc3RhdGljIFVCcmVha0l0ZXJhdG9yKiBzdGF0aWNTZW50ZW5jZUJyZWFrSXRl
cmF0b3IgPSBpbml0aWFsaXplSXRlcmF0b3IoVUJSS19TRU5URU5DRSk7CisgICAgaWYgKCFzdGF0
aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3IpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIHNldFRleHRGb3JJdGVyYXRvcigqc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yLCBz
dHJpbmcpOworfQorCitVQnJlYWtJdGVyYXRvciogY3Vyc29yTW92ZW1lbnRJdGVyYXRvcihTdHJp
bmdWaWV3IHN0cmluZykKK3sKKyNpZiAhUExBVEZPUk0oSU9TKQorICAgIC8vIFRoaXMgcnVsZSBz
ZXQgaXMgYmFzZWQgb24gY2hhcmFjdGVyLWJyZWFrIGl0ZXJhdG9yIHJ1bGVzIG9mIElDVSA0LjAK
KyAgICAvLyA8aHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1L2ljdS90YWdz
L3JlbGVhc2UtNC0wL3NvdXJjZS9kYXRhL2Jya2l0ci9jaGFyLnR4dD4uCisgICAgLy8gVGhlIG1h
am9yIGRpZmZlcmVuY2VzIGZyb20gdGhlIG9yaWdpbmFsIG9uZXMgYXJlIGxpc3RlZCBiZWxvdzoK
KyAgICAvLyAqIFJlcGxhY2VkICdbXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IFNwYWNpbmdN
YXJrfV0nIHdpdGggJ1tccHtHZW5lcmFsX0NhdGVnb3J5ID0gU3BhY2luZyBNYXJrfSAtICRFeHRl
bmRdJyBmb3IgSUNVIDMuOCBvciBlYXJsaWVyOworICAgIC8vICogUmVtb3ZlZCBydWxlcyB0aGF0
IHByZXZlbnQgYSBjdXJzb3IgZnJvbSBtb3ZpbmcgYWZ0ZXIgcHJlcGVuZCBjaGFyYWN0ZXJzIChC
dWcgMjQzNDIpOworICAgIC8vICogQWRkZWQgcnVsZXMgdGhhdCBwcmV2ZW50IGEgY3Vyc29yIGZy
b20gbW92aW5nIGFmdGVyIHZpcmFtYSBzaWducyBvZiBJbmRpYyBsYW5ndWFnZXMgZXhjZXB0IFRh
bWlsIChCdWcgMTU3OTApLCBhbmQ7CisgICAgLy8gKiBBZGRlZCBydWxlcyB0aGF0IHByZXZlbnQg
YSBjdXJzb3IgZnJvbSBtb3ZpbmcgYmVmb3JlIEphcGFuZXNlIGhhbGYtd2lkdGgga2F0YWthcmEg
dm9pY2VkIG1hcmtzLgorICAgIC8vICogQWRkZWQgcnVsZXMgZm9yIHJlZ2lvbmFsIGluZGljYXRv
ciBzeW1ib2xzLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBrUnVsZXMgPQorICAgICAgICAiJENS
ICAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBDUn1dOyIKKyAgICAgICAgIiRM
RiAgICAgID0gW1xccHtHcmFwaGVtZV9DbHVzdGVyX0JyZWFrID0gTEZ9XTsiCisgICAgICAgICIk
Q29udHJvbCA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IENvbnRyb2x9XTsiCisgICAg
ICAgICIkVm9pY2VNYXJrcyA9IFtcXHVGRjlFXFx1RkY5Rl07IiAgLy8gSmFwYW5lc2UgaGFsZi13
aWR0aCBrYXRha2FuYSB2b2ljZWQgbWFya3MKKyAgICAgICAgIiRFeHRlbmQgID0gW1xccHtHcmFw
aGVtZV9DbHVzdGVyX0JyZWFrID0gRXh0ZW5kfSAkVm9pY2VNYXJrcyAtIFtcXHUwRTMwIFxcdTBF
MzIgXFx1MEU0NSBcXHUwRUIwIFxcdTBFQjJdXTsiCisgICAgICAgICIkU3BhY2luZ01hcmsgPSBb
W1xccHtHZW5lcmFsX0NhdGVnb3J5ID0gU3BhY2luZyBNYXJrfV0gLSAkRXh0ZW5kXTsiCisgICAg
ICAgICIkTCAgICAgICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IEx9XTsiCisgICAg
ICAgICIkViAgICAgICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IFZ9XTsiCisgICAg
ICAgICIkVCAgICAgICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IFR9XTsiCisgICAg
ICAgICIkTFYgICAgICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IExWfV07IgorICAg
ICAgICAiJExWVCAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBMVlR9XTsiCisg
ICAgICAgICIkSGluMCAgICA9IFtcXHUwOTA1LVxcdTA5MzldOyIgICAgLy8gRGV2YW5hZ2FyaSBM
ZXR0ZXIgQSwuLi4sSGEKKyAgICAgICAgIiRIaW5WICAgID0gXFx1MDk0RDsiICAgICAgICAgICAg
ICAvLyBEZXZhbmFnYXJpIFNpZ24gVmlyYW1hCisgICAgICAgICIkSGluMSAgICA9IFtcXHUwOTE1
LVxcdTA5MzldOyIgICAgLy8gRGV2YW5hZ2FyaSBMZXR0ZXIgS2EsLi4uLEhhCisgICAgICAgICIk
QmVuMCAgICA9IFtcXHUwOTg1LVxcdTA5QjldOyIgICAgLy8gQmVuZ2FsaSBMZXR0ZXIgQSwuLi4s
SGEKKyAgICAgICAgIiRCZW5WICAgID0gXFx1MDlDRDsiICAgICAgICAgICAgICAvLyBCZW5nYWxp
IFNpZ24gVmlyYW1hCisgICAgICAgICIkQmVuMSAgICA9IFtcXHUwOTk1LVxcdTA5QjldOyIgICAg
Ly8gQmVuZ2FsaSBMZXR0ZXIgS2EsLi4uLEhhCisgICAgICAgICIkUGFuMCAgICA9IFtcXHUwQTA1
LVxcdTBBMzldOyIgICAgLy8gR3VybXVraGkgTGV0dGVyIEEsLi4uLEhhCisgICAgICAgICIkUGFu
ViAgICA9IFxcdTBBNEQ7IiAgICAgICAgICAgICAgLy8gR3VybXVraGkgU2lnbiBWaXJhbWEKKyAg
ICAgICAgIiRQYW4xICAgID0gW1xcdTBBMTUtXFx1MEEzOV07IiAgICAvLyBHdXJtdWtoaSBMZXR0
ZXIgS2EsLi4uLEhhCisgICAgICAgICIkR3VqMCAgICA9IFtcXHUwQTg1LVxcdTBBQjldOyIgICAg
Ly8gR3VqYXJhdGkgTGV0dGVyIEEsLi4uLEhhCisgICAgICAgICIkR3VqViAgICA9IFxcdTBBQ0Q7
IiAgICAgICAgICAgICAgLy8gR3VqYXJhdGkgU2lnbiBWaXJhbWEKKyAgICAgICAgIiRHdWoxICAg
ID0gW1xcdTBBOTUtXFx1MEFCOV07IiAgICAvLyBHdWphcmF0aSBMZXR0ZXIgS2EsLi4uLEhhCisg
ICAgICAgICIkT3JpMCAgICA9IFtcXHUwQjA1LVxcdTBCMzldOyIgICAgLy8gT3JpeWEgTGV0dGVy
IEEsLi4uLEhhCisgICAgICAgICIkT3JpViAgICA9IFxcdTBCNEQ7IiAgICAgICAgICAgICAgLy8g
T3JpeWEgU2lnbiBWaXJhbWEKKyAgICAgICAgIiRPcmkxICAgID0gW1xcdTBCMTUtXFx1MEIzOV07
IiAgICAvLyBPcml5YSBMZXR0ZXIgS2EsLi4uLEhhCisgICAgICAgICIkVGVsMCAgICA9IFtcXHUw
QzA1LVxcdTBDMzldOyIgICAgLy8gVGVsdWd1IExldHRlciBBLC4uLixIYQorICAgICAgICAiJFRl
bFYgICAgPSBcXHUwQzREOyIgICAgICAgICAgICAgIC8vIFRlbHVndSBTaWduIFZpcmFtYQorICAg
ICAgICAiJFRlbDEgICAgPSBbXFx1MEMxNC1cXHUwQzM5XTsiICAgIC8vIFRlbHVndSBMZXR0ZXIg
S2EsLi4uLEhhCisgICAgICAgICIkS2FuMCAgICA9IFtcXHUwQzg1LVxcdTBDQjldOyIgICAgLy8g
S2FubmFkYSBMZXR0ZXIgQSwuLi4sSGEKKyAgICAgICAgIiRLYW5WICAgID0gXFx1MENDRDsiICAg
ICAgICAgICAgICAvLyBLYW5uYWRhIFNpZ24gVmlyYW1hCisgICAgICAgICIkS2FuMSAgICA9IFtc
XHUwQzk1LVxcdTBDQjldOyIgICAgLy8gS2FubmFkYSBMZXR0ZXIgQSwuLi4sSGEKKyAgICAgICAg
IiRNYWwwICAgID0gW1xcdTBEMDUtXFx1MEQzOV07IiAgICAvLyBNYWxheWFsYW0gTGV0dGVyIEEs
Li4uLEhhCisgICAgICAgICIkTWFsViAgICA9IFxcdTBENEQ7IiAgICAgICAgICAgICAgLy8gTWFs
YXlhbGFtIFNpZ24gVmlyYW1hCisgICAgICAgICIkTWFsMSAgICA9IFtcXHUwRDE1LVxcdTBEMzld
OyIgICAgLy8gTWFsYXlhbGFtIExldHRlciBBLC4uLixIYQorICAgICAgICAiJFJJICAgICAgPSBb
XFxVMDAwMUYxRTYtXFxVMDAwMUYxRkZdOyIgLy8gRW1vamkgcmVnaW9uYWwgaW5kaWNhdG9ycwor
ICAgICAgICAiISFjaGFpbjsiCisgICAgICAgICIhIWZvcndhcmQ7IgorICAgICAgICAiJENSICRM
RjsiCisgICAgICAgICIkTCAoJEwgfCAkViB8ICRMViB8ICRMVlQpOyIKKyAgICAgICAgIigkTFYg
fCAkVikgKCRWIHwgJFQpOyIKKyAgICAgICAgIigkTFZUIHwgJFQpICRUOyIKKyAgICAgICAgIlte
JENvbnRyb2wgJENSICRMRl0gJEV4dGVuZDsiCisgICAgICAgICJbXiRDb250cm9sICRDUiAkTEZd
ICRTcGFjaW5nTWFyazsiCisgICAgICAgICIkUkkgJFJJIC8gJFJJOyIKKyAgICAgICAgIiRSSSAk
Ukk7IgorICAgICAgICAiJEhpbjAgJEhpblYgJEhpbjE7IiAgICAgICAgICAgICAgIC8vIERldmFu
YWdhcmkgVmlyYW1hIChmb3J3YXJkKQorICAgICAgICAiJEJlbjAgJEJlblYgJEJlbjE7IiAgICAg
ICAgICAgICAgIC8vIEJlbmdhbGkgVmlyYW1hIChmb3J3YXJkKQorICAgICAgICAiJFBhbjAgJFBh
blYgJFBhbjE7IiAgICAgICAgICAgICAgIC8vIEd1cm11a2hpIFZpcmFtYSAoZm9yd2FyZCkKKyAg
ICAgICAgIiRHdWowICRHdWpWICRHdWoxOyIgICAgICAgICAgICAgICAvLyBHdWphcmF0aSBWaXJh
bWEgKGZvcndhcmQpCisgICAgICAgICIkT3JpMCAkT3JpViAkT3JpMTsiICAgICAgICAgICAgICAg
Ly8gT3JpeWEgVmlyYW1hIChmb3J3YXJkKQorICAgICAgICAiJFRlbDAgJFRlbFYgJFRlbDE7IiAg
ICAgICAgICAgICAgIC8vIFRlbHVndSBWaXJhbWEgKGZvcndhcmQpCisgICAgICAgICIkS2FuMCAk
S2FuViAkS2FuMTsiICAgICAgICAgICAgICAgLy8gS2FubmFkYSBWaXJhbWEgKGZvcndhcmQpCisg
ICAgICAgICIkTWFsMCAkTWFsViAkTWFsMTsiICAgICAgICAgICAgICAgLy8gTWFsYXlhbGFtIFZp
cmFtYSAoZm9yd2FyZCkKKyAgICAgICAgIiEhcmV2ZXJzZTsiCisgICAgICAgICIkTEYgJENSOyIK
KyAgICAgICAgIigkTCB8ICRWIHwgJExWIHwgJExWVCkgJEw7IgorICAgICAgICAiKCRWIHwgJFQp
ICgkTFYgfCAkVik7IgorICAgICAgICAiJFQgKCRMVlQgfCAkVCk7IgorICAgICAgICAiJEV4dGVu
ZCAgICAgIFteJENvbnRyb2wgJENSICRMRl07IgorICAgICAgICAiJFNwYWNpbmdNYXJrIFteJENv
bnRyb2wgJENSICRMRl07IgorICAgICAgICAiJFJJICRSSSAvICRSSSAkUkk7IgorICAgICAgICAi
JFJJICRSSTsiCisgICAgICAgICIkSGluMSAkSGluViAkSGluMDsiICAgICAgICAgICAgICAgLy8g
RGV2YW5hZ2FyaSBWaXJhbWEgKGJhY2t3YXJkKQorICAgICAgICAiJEJlbjEgJEJlblYgJEJlbjA7
IiAgICAgICAgICAgICAgIC8vIEJlbmdhbGkgVmlyYW1hIChiYWNrd2FyZCkKKyAgICAgICAgIiRQ
YW4xICRQYW5WICRQYW4wOyIgICAgICAgICAgICAgICAvLyBHdXJtdWtoaSBWaXJhbWEgKGJhY2t3
YXJkKQorICAgICAgICAiJEd1ajEgJEd1alYgJEd1ajA7IiAgICAgICAgICAgICAgIC8vIEd1amFy
YXRpIFZpcmFtYSAoYmFja3dhcmQpCisgICAgICAgICIkT3JpMSAkT3JpViAkT3JpMDsiICAgICAg
ICAgICAgICAgLy8gR3VqYXJhdGkgVmlyYW1hIChiYWNrd2FyZCkKKyAgICAgICAgIiRUZWwxICRU
ZWxWICRUZWwwOyIgICAgICAgICAgICAgICAvLyBUZWx1Z3UgVmlyYW1hIChiYWNrd2FyZCkKKyAg
ICAgICAgIiRLYW4xICRLYW5WICRLYW4wOyIgICAgICAgICAgICAgICAvLyBLYW5uYWRhIFZpcmFt
YSAoYmFja3dhcmQpCisgICAgICAgICIkTWFsMSAkTWFsViAkTWFsMDsiICAgICAgICAgICAgICAg
Ly8gTWFsYXlhbGFtIFZpcmFtYSAoYmFja3dhcmQpCisgICAgICAgICIhIXNhZmVfcmV2ZXJzZTsi
CisgICAgICAgICIhIXNhZmVfZm9yd2FyZDsiOworICAgIHN0YXRpYyBVQnJlYWtJdGVyYXRvciog
c3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvciA9IGluaXRpYWxpemVJdGVyYXRvcldpdGhSdWxl
cyhrUnVsZXMpOworI2Vsc2UgLy8gUExBVEZPUk0oSU9TKQorICAgIC8vIFVzZSB0aGUgc3BlY2lh
bCBUaGFpIGNoYXJhY3RlciBicmVhayBpdGVyYXRvciBmb3IgYWxsIGxvY2FsZXMKKyAgICBzdGF0
aWMgVUJyZWFrSXRlcmF0b3IqIHN0YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0b3IgPSBjcmVhdGVT
aGFyZWRJdGVyYXRvcihVQlJLX0NIQVJBQ1RFUiwgInRoIik7CisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKKworICAgIGlmICghc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gc2V0VGV4dEZvckl0ZXJhdG9yKCpzdGF0aWND
dXJzb3JNb3ZlbWVudEl0ZXJhdG9yLCBzdHJpbmcpOworfQorCitVQnJlYWtJdGVyYXRvciogYWNx
dWlyZUxpbmVCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBBdG9taWNTdHJp
bmcmIGxvY2FsZSwgY29uc3QgVUNoYXIqIHByaW9yQ29udGV4dCwgdW5zaWduZWQgcHJpb3JDb250
ZXh0TGVuZ3RoKQoreworICAgIFVCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IExpbmVCcmVha0l0
ZXJhdG9yUG9vbDo6c2hhcmVkUG9vbCgpLnRha2UobG9jYWxlKTsKKyAgICBpZiAoIWl0ZXJhdG9y
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzZXRDb250ZXh0QXdhcmVU
ZXh0Rm9ySXRlcmF0b3IoKml0ZXJhdG9yLCBzdHJpbmcsIHByaW9yQ29udGV4dCwgcHJpb3JDb250
ZXh0TGVuZ3RoKTsKK30KKwordm9pZCByZWxlYXNlTGluZUJyZWFrSXRlcmF0b3IoVUJyZWFrSXRl
cmF0b3IqIGl0ZXJhdG9yKQoreworICAgIEFTU0VSVF9BUkcoaXRlcmF0b3IsIGl0ZXJhdG9yKTsK
KworICAgIExpbmVCcmVha0l0ZXJhdG9yUG9vbDo6c2hhcmVkUG9vbCgpLnB1dChyZWludGVycHJl
dF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0b3IpKTsKK30KKworc3RhdGljIFVCcmVha0l0
ZXJhdG9yKiBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOworCitzdGF0aWMgaW5saW5l
IGJvb2wgY29tcGFyZUFuZFN3YXBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKFVCcmVh
a0l0ZXJhdG9yKiBleHBlY3RlZCwgVUJyZWFrSXRlcmF0b3IqIG5ld1ZhbHVlKQoreworI2lmIEVO
QUJMRShDT01QQVJFX0FORF9TV0FQKQorICAgIHJldHVybiBXVEY6OndlYWtDb21wYXJlQW5kU3dh
cChyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0
b3IpLCBleHBlY3RlZCwgbmV3VmFsdWUpOworI2Vsc2UKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KE11dGV4LCBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yTXV0ZXgsICgpKTsKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvck11dGV4KTsK
KyAgICBpZiAobm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciAhPSBleHBlY3RlZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3Ig
PSBuZXdWYWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCitOb25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yOjpOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKFN0cmlu
Z1ZpZXcgc3RyaW5nKQoreworICAgIG1faXRlcmF0b3IgPSBub25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yOworCisgICAgYm9vbCBjcmVhdGVkSXRlcmF0b3IgPSBtX2l0ZXJhdG9yICYmIGNv
bXBhcmVBbmRTd2FwTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihtX2l0ZXJhdG9yLCAw
KTsKKyAgICBpZiAoIWNyZWF0ZWRJdGVyYXRvcikKKyAgICAgICAgbV9pdGVyYXRvciA9IGluaXRp
YWxpemVJdGVyYXRvcihVQlJLX0NIQVJBQ1RFUik7CisgICAgaWYgKCFtX2l0ZXJhdG9yKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2l0ZXJhdG9yID0gc2V0VGV4dEZvckl0ZXJhdG9yKCptX2l0
ZXJhdG9yLCBzdHJpbmcpOworfQorCitOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjp+
Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpCit7CisgICAgaWYgKCFjb21wYXJlQW5k
U3dhcE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoMCwgbV9pdGVyYXRvcikpCisgICAg
ICAgIHVicmtfY2xvc2UocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KG1faXRlcmF0
b3IpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAkocmV2aXNpb24gMTYxODky
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaWZuZGVmIFRleHRCcmVha0l0ZXJhdG9y
X2gKICNkZWZpbmUgVGV4dEJyZWFrSXRlcmF0b3JfaAogCisjaW5jbHVkZSA8dW5pY29kZS91YnJr
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nVmlldy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KQEAgLTM2
LDI1ICszNywxMyBAQCBjbGFzcyBUZXh0QnJlYWtJdGVyYXRvcjsKIC8vIHBsYXRmb3JtIFVJIGNv
bnZlbnRpb25zLiBPbmUgbm90YWJsZSBleGFtcGxlIHdoZXJlIHRoaXMgY2FuIGJlIGRpZmZlcmVu
dAogLy8gZnJvbSBjaGFyYWN0ZXIgYnJlYWsgaXRlcmF0b3IgaXMgVGhhaSBwcmVwZW5kIGNoYXJh
Y3RlcnMsIHNlZSBidWcgMjQzNDIuCiAvLyBVc2UgdGhpcyBmb3IgaW5zZXJ0aW9uIHBvaW50IGFu
ZCBzZWxlY3Rpb24gbWFuaXB1bGF0aW9ucy4KLVRleHRCcmVha0l0ZXJhdG9yKiBjdXJzb3JNb3Zl
bWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CitVQnJlYWtJdGVyYXRvciog
Y3Vyc29yTW92ZW1lbnRJdGVyYXRvcihTdHJpbmdWaWV3KTsKIAotVGV4dEJyZWFrSXRlcmF0b3Iq
IHdvcmRCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7Ci1UZXh0QnJlYWtJ
dGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7
CitVQnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyk7CitVQnJlYWtJ
dGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcpOwogCi1UZXh0QnJlYWtJ
dGVyYXRvciogYWNxdWlyZUxpbmVCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxlLCBjb25zdCBVQ2hhciogcHJpb3JDb250ZXh0LCB1bnNpZ25lZCBwcmlv
ckNvbnRleHRMZW5ndGgpOwotdm9pZCByZWxlYXNlTGluZUJyZWFrSXRlcmF0b3IoVGV4dEJyZWFr
SXRlcmF0b3IqKTsKLQotaW50IHRleHRCcmVha0ZpcnN0KFRleHRCcmVha0l0ZXJhdG9yKik7Ci1p
bnQgdGV4dEJyZWFrTGFzdChUZXh0QnJlYWtJdGVyYXRvciopOwotaW50IHRleHRCcmVha05leHQo
VGV4dEJyZWFrSXRlcmF0b3IqKTsKLWludCB0ZXh0QnJlYWtQcmV2aW91cyhUZXh0QnJlYWtJdGVy
YXRvciopOwotaW50IHRleHRCcmVha0N1cnJlbnQoVGV4dEJyZWFrSXRlcmF0b3IqKTsKLWludCB0
ZXh0QnJlYWtQcmVjZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqLCBpbnQpOwotaW50IHRleHRCcmVh
a0ZvbGxvd2luZyhUZXh0QnJlYWtJdGVyYXRvciosIGludCk7Ci1ib29sIGlzVGV4dEJyZWFrKFRl
eHRCcmVha0l0ZXJhdG9yKiwgaW50KTsKLWJvb2wgaXNXb3JkVGV4dEJyZWFrKFRleHRCcmVha0l0
ZXJhdG9yKik7Ci0KLWNvbnN0IGludCBUZXh0QnJlYWtEb25lID0gLTE7CitVQnJlYWtJdGVyYXRv
ciogYWNxdWlyZUxpbmVCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxlLCBjb25zdCBVQ2hhciogcHJpb3JDb250ZXh0LCB1bnNpZ25lZCBwcmlvckNvbnRl
eHRMZW5ndGgpOwordm9pZCByZWxlYXNlTGluZUJyZWFrSXRlcmF0b3IoVUJyZWFrSXRlcmF0b3Iq
KTsKIAogY2xhc3MgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIHsKIHB1YmxpYzoKQEAgLTEyNiw3ICsx
MTUsNyBAQCBwdWJsaWM6CiAgICAgLy8gT2J0YWluIHRleHQgYnJlYWsgaXRlcmF0b3IsIHBvc3Np
Ymx5IHByZXZpb3VzbHkgY2FjaGVkLCB3aGVyZSB0aGlzIGl0ZXJhdG9yIGlzIChvciBoYXMgYmVl
bikKICAgICAvLyBpbml0aWFsaXplZCB0byB1c2UgdGhlIHByZXZpb3VzbHkgc3RvcmVkIHN0cmlu
ZyBhcyB0aGUgcHJpbWFyeSBicmVha2luZyBjb250ZXh0IGFuZCB1c2luZwogICAgIC8vIHByZXZp
b3VzbHkgc3RvcmVkIHByaW9yIGNvbnRleHQgaWYgbm9uLWVtcHR5LgotICAgIFRleHRCcmVha0l0
ZXJhdG9yKiBnZXQodW5zaWduZWQgcHJpb3JDb250ZXh0TGVuZ3RoKQorICAgIFVCcmVha0l0ZXJh
dG9yKiBnZXQodW5zaWduZWQgcHJpb3JDb250ZXh0TGVuZ3RoKQogICAgIHsKICAgICAgICAgQVNT
RVJUKHByaW9yQ29udGV4dExlbmd0aCA8PSBwcmlvckNvbnRleHRDYXBhY2l0eSk7CiAgICAgICAg
IGNvbnN0IFVDaGFyKiBwcmlvckNvbnRleHQgPSBwcmlvckNvbnRleHRMZW5ndGggPyAmbV9wcmlv
ckNvbnRleHRbcHJpb3JDb250ZXh0Q2FwYWNpdHkgLSBwcmlvckNvbnRleHRMZW5ndGhdIDogMDsK
QEAgLTE1NSw3ICsxNDQsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBw
cmlvckNvbnRleHRDYXBhY2l0eSA9IDI7CiAgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIEF0b21p
Y1N0cmluZyBtX2xvY2FsZTsKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogbV9pdGVyYXRvcjsKKyAg
ICBVQnJlYWtJdGVyYXRvciogbV9pdGVyYXRvcjsKICAgICBVQ2hhciBtX3ByaW9yQ29udGV4dFtw
cmlvckNvbnRleHRDYXBhY2l0eV07CiAgICAgY29uc3QgVUNoYXIqIG1fY2FjaGVkUHJpb3JDb250
ZXh0OwogICAgIHVuc2lnbmVkIG1fY2FjaGVkUHJpb3JDb250ZXh0TGVuZ3RoOwpAQCAtMTY5LDEz
ICsxNTgsMTMgQEAgcHJpdmF0ZToKIGNsYXNzIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0
b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3IpOwogcHVibGljOgotICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoY29u
c3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKKyAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yKFN0cmluZ1ZpZXcpOwogICAgIH5Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKCk7
CiAKLSAgICBvcGVyYXRvciBUZXh0QnJlYWtJdGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX2l0
ZXJhdG9yOyB9CisgICAgb3BlcmF0b3IgVUJyZWFrSXRlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g
bV9pdGVyYXRvcjsgfQogCiBwcml2YXRlOgotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBtX2l0ZXJh
dG9yOworICAgIFVCcmVha0l0ZXJhdG9yKiBtX2l0ZXJhdG9yOwogfTsKIAogLy8gQ291bnRzIHRo
ZSBudW1iZXIgb2YgZ3JhcGhlbWUgY2x1c3RlcnMuIEEgc3Vycm9nYXRlIHBhaXIgb3IgYSBzZXF1
ZW5jZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRv
cklDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
QnJlYWtJdGVyYXRvcklDVS5jcHAJKHJldmlzaW9uIDE2MTg5MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDM1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IExhcnMgS25vbGwgPGxh
cnNAdHJvbGx0ZWNoLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMSwgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKLQotI2luY2x1ZGUgIkxpbmVCcmVha0l0ZXJhdG9y
UG9vbElDVS5oIgotI2luY2x1ZGUgIlVUZXh0UHJvdmlkZXJMYXRpbjEuaCIKLSNpbmNsdWRlICJV
VGV4dFByb3ZpZGVyVVRGMTYuaCIKLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBJdGVy
YXRvciBpbml0aWFsaXphdGlvbgotCi1zdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIGluaXRpYWxp
emVJdGVyYXRvcihVQnJlYWtJdGVyYXRvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbG9jYWxlID0g
Y3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkpCi17Ci0gICAgVUVycm9yQ29kZSBvcGVuU3RhdHVz
ID0gVV9aRVJPX0VSUk9SOwotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8VGV4dEJyZWFrSXRlcmF0b3IqPih1YnJrX29wZW4odHlwZSwgbG9jYWxlLCAw
LCAwLCAmb3BlblN0YXR1cykpOwotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoVV9TVUNDRVNTKG9w
ZW5TdGF0dXMpLCAiSUNVIGNvdWxkIG5vdCBvcGVuIGEgYnJlYWsgaXRlcmF0b3I6ICVzICglZCki
LCB1X2Vycm9yTmFtZShvcGVuU3RhdHVzKSwgb3BlblN0YXR1cyk7Ci0gICAgcmV0dXJuIGl0ZXJh
dG9yOwotfQotCi0jaWYgIVBMQVRGT1JNKElPUykKLXN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciog
aW5pdGlhbGl6ZUl0ZXJhdG9yV2l0aFJ1bGVzKGNvbnN0IGNoYXIqIGJyZWFrUnVsZXMpCi17Ci0g
ICAgVVBhcnNlRXJyb3IgcGFyc2VTdGF0dXM7Ci0gICAgVUVycm9yQ29kZSBvcGVuU3RhdHVzID0g
VV9aRVJPX0VSUk9SOwotICAgIFN0cmluZyBydWxlcyhicmVha1J1bGVzKTsKLSAgICBUZXh0QnJl
YWtJdGVyYXRvciogaXRlcmF0b3IgPSByZWludGVycHJldF9jYXN0PFRleHRCcmVha0l0ZXJhdG9y
Kj4odWJya19vcGVuUnVsZXMocnVsZXMuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgcnVsZXMubGVu
Z3RoKCksIDAsIDAsICZwYXJzZVN0YXR1cywgJm9wZW5TdGF0dXMpKTsKLSAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKFVfU1VDQ0VTUyhvcGVuU3RhdHVzKSwgIklDVSBjb3VsZCBub3Qgb3BlbiBhIGJy
ZWFrIGl0ZXJhdG9yOiAlcyAoJWQpIiwgdV9lcnJvck5hbWUob3BlblN0YXR1cyksIG9wZW5TdGF0
dXMpOwotICAgIHJldHVybiBpdGVyYXRvcjsKLX0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQot
Ci0KLS8vIEl0ZXJhdG9yIHRleHQgc2V0dGluZwotCi1zdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3Iq
IHNldFRleHRGb3JJdGVyYXRvcihUZXh0QnJlYWtJdGVyYXRvciYgaXRlcmF0b3IsIFN0cmluZ1Zp
ZXcgc3RyaW5nKQotewotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpIHsKLSAgICAgICAgVVRleHRX
aXRoQnVmZmVyIHRleHRMb2NhbDsKLSAgICAgICAgdGV4dExvY2FsLnRleHQgPSBVVEVYVF9JTklU
SUFMSVpFUjsKLSAgICAgICAgdGV4dExvY2FsLnRleHQuZXh0cmFTaXplID0gc2l6ZW9mKHRleHRM
b2NhbC5idWZmZXIpOwotICAgICAgICB0ZXh0TG9jYWwudGV4dC5wRXh0cmEgPSB0ZXh0TG9jYWwu
YnVmZmVyOwotCi0gICAgICAgIFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVfWkVST19FUlJPUjsK
LSAgICAgICAgVVRleHQqIHRleHQgPSBvcGVuTGF0aW4xVVRleHRQcm92aWRlcigmdGV4dExvY2Fs
LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpLCAmb3BlblN0YXR1cyk7Ci0g
ICAgICAgIGlmIChVX0ZBSUxVUkUob3BlblN0YXR1cykpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigidVRleHRPcGVuTGF0aW4xIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIG9wZW5TdGF0dXMpOwot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBVRXJyb3JD
b2RlIHNldFRleHRTdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVicmtfc2V0VVRleHQo
cmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KCZpdGVyYXRvciksIHRleHQsICZzZXRU
ZXh0U3RhdHVzKTsKLSAgICAgICAgaWYgKFVfRkFJTFVSRShzZXRUZXh0U3RhdHVzKSkgewotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJ1YnJrX3NldFVUZXh0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIs
IHNldFRleHRTdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0K
LQotICAgICAgICB1dGV4dF9jbG9zZSh0ZXh0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBVRXJy
b3JDb2RlIHNldFRleHRTdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVicmtfc2V0VGV4
dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oJml0ZXJhdG9yKSwgc3RyaW5nLmNo
YXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCksICZzZXRUZXh0U3RhdHVzKTsKLSAgICAgICAg
aWYgKFVfRkFJTFVSRShzZXRUZXh0U3RhdHVzKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIHJldHVybiAmaXRlcmF0b3I7Ci19Ci0KLXN0YXRpYyBUZXh0QnJlYWtJ
dGVyYXRvciogc2V0Q29udGV4dEF3YXJlVGV4dEZvckl0ZXJhdG9yKFRleHRCcmVha0l0ZXJhdG9y
JiBpdGVyYXRvciwgU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFVDaGFyKiBwcmlvckNvbnRleHQs
IHVuc2lnbmVkIHByaW9yQ29udGV4dExlbmd0aCkKLXsKLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgp
KSB7Ci0gICAgICAgIFVUZXh0V2l0aEJ1ZmZlciB0ZXh0TG9jYWw7Ci0gICAgICAgIHRleHRMb2Nh
bC50ZXh0ID0gVVRFWFRfSU5JVElBTElaRVI7Ci0gICAgICAgIHRleHRMb2NhbC50ZXh0LmV4dHJh
U2l6ZSA9IHNpemVvZih0ZXh0TG9jYWwuYnVmZmVyKTsKLSAgICAgICAgdGV4dExvY2FsLnRleHQu
cEV4dHJhID0gdGV4dExvY2FsLmJ1ZmZlcjsKLQotICAgICAgICBVRXJyb3JDb2RlIG9wZW5TdGF0
dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIFVUZXh0KiB0ZXh0ID0gb3BlbkxhdGluMUNvbnRl
eHRBd2FyZVVUZXh0UHJvdmlkZXIoJnRleHRMb2NhbCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0
cmluZy5sZW5ndGgoKSwgcHJpb3JDb250ZXh0LCBwcmlvckNvbnRleHRMZW5ndGgsICZvcGVuU3Rh
dHVzKTsKLSAgICAgICAgaWYgKFVfRkFJTFVSRShvcGVuU3RhdHVzKSkgewotICAgICAgICAgICAg
TE9HX0VSUk9SKCJvcGVuTGF0aW4xQ29udGV4dEF3YXJlVVRleHRQcm92aWRlciBmYWlsZWQgd2l0
aCBzdGF0dXMgJWQiLCBvcGVuU3RhdHVzKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICB9Ci0KLSAgICAgICAgVUVycm9yQ29kZSBzZXRUZXh0U3RhdHVzID0gVV9aRVJPX0VS
Uk9SOwotICAgICAgICB1YnJrX3NldFVUZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0
b3IqPigmaXRlcmF0b3IpLCB0ZXh0LCAmc2V0VGV4dFN0YXR1cyk7Ci0gICAgICAgIGlmIChVX0ZB
SUxVUkUoc2V0VGV4dFN0YXR1cykpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigidWJya19zZXRV
VGV4dCBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBzZXRUZXh0U3RhdHVzKTsKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgdXRleHRfY2xvc2UodGV4dCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVVRleHQgdGV4dExvY2FsID0gVVRFWFRfSU5JVElBTEla
RVI7Ci0KLSAgICAgICAgVUVycm9yQ29kZSBvcGVuU3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAg
ICAgICBVVGV4dCogdGV4dCA9IG9wZW5VVEYxNkNvbnRleHRBd2FyZVVUZXh0UHJvdmlkZXIoJnRl
eHRMb2NhbCwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCksIHByaW9yQ29u
dGV4dCwgcHJpb3JDb250ZXh0TGVuZ3RoLCAmb3BlblN0YXR1cyk7Ci0gICAgICAgIGlmIChVX0ZB
SUxVUkUob3BlblN0YXR1cykpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigib3BlblVURjE2Q29u
dGV4dEF3YXJlVVRleHRQcm92aWRlciBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBvcGVuU3RhdHVz
KTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgVUVycm9yQ29k
ZSBzZXRUZXh0U3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgICAgICB1YnJrX3NldFVUZXh0KHJl
aW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPigmaXRlcmF0b3IpLCB0ZXh0LCAmc2V0VGV4
dFN0YXR1cyk7Ci0gICAgICAgIGlmIChVX0ZBSUxVUkUoc2V0VGV4dFN0YXR1cykpIHsKLSAgICAg
ICAgICAgIExPR19FUlJPUigidWJya19zZXRVVGV4dCBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBz
ZXRUZXh0U3RhdHVzKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0K
LSAgICAgICAgdXRleHRfY2xvc2UodGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICZpdGVyYXRv
cjsKLX0KLQotCi0vLyBTdGF0aWMgaXRlcmF0b3JzCi0KLVRleHRCcmVha0l0ZXJhdG9yKiB3b3Jk
QnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQotewotICAgIHN0
YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljV29yZEJyZWFrSXRlcmF0b3IgPSBpbml0aWFs
aXplSXRlcmF0b3IoVUJSS19XT1JEKTsKLSAgICBpZiAoIXN0YXRpY1dvcmRCcmVha0l0ZXJhdG9y
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzZXRUZXh0Rm9ySXRlcmF0
b3IoKnN0YXRpY1dvcmRCcmVha0l0ZXJhdG9yLCBTdHJpbmdWaWV3KGJ1ZmZlciwgbGVuZ3RoKSk7
Ci19Ci0KLVRleHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNo
YXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKLXsKLSAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3Iq
IHN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvciA9IGluaXRpYWxpemVJdGVyYXRvcihVQlJLX1NF
TlRFTkNFKTsKLSAgICBpZiAoIXN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gc2V0VGV4dEZvckl0ZXJhdG9yKCpzdGF0aWNT
ZW50ZW5jZUJyZWFrSXRlcmF0b3IsIFN0cmluZ1ZpZXcoYnVmZmVyLCBsZW5ndGgpKTsKLX0KLQot
VGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0b3IoY29uc3QgVUNoYXIqIGJ1
ZmZlciwgaW50IGxlbmd0aCkKLXsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIC8vIFRoaXMgcnVs
ZSBzZXQgaXMgYmFzZWQgb24gY2hhcmFjdGVyLWJyZWFrIGl0ZXJhdG9yIHJ1bGVzIG9mIElDVSA0
LjAKLSAgICAvLyA8aHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1L2ljdS90
YWdzL3JlbGVhc2UtNC0wL3NvdXJjZS9kYXRhL2Jya2l0ci9jaGFyLnR4dD4uCi0gICAgLy8gVGhl
IG1ham9yIGRpZmZlcmVuY2VzIGZyb20gdGhlIG9yaWdpbmFsIG9uZXMgYXJlIGxpc3RlZCBiZWxv
dzoKLSAgICAvLyAqIFJlcGxhY2VkICdbXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IFNwYWNp
bmdNYXJrfV0nIHdpdGggJ1tccHtHZW5lcmFsX0NhdGVnb3J5ID0gU3BhY2luZyBNYXJrfSAtICRF
eHRlbmRdJyBmb3IgSUNVIDMuOCBvciBlYXJsaWVyOwotICAgIC8vICogUmVtb3ZlZCBydWxlcyB0
aGF0IHByZXZlbnQgYSBjdXJzb3IgZnJvbSBtb3ZpbmcgYWZ0ZXIgcHJlcGVuZCBjaGFyYWN0ZXJz
IChCdWcgMjQzNDIpOwotICAgIC8vICogQWRkZWQgcnVsZXMgdGhhdCBwcmV2ZW50IGEgY3Vyc29y
IGZyb20gbW92aW5nIGFmdGVyIHZpcmFtYSBzaWducyBvZiBJbmRpYyBsYW5ndWFnZXMgZXhjZXB0
IFRhbWlsIChCdWcgMTU3OTApLCBhbmQ7Ci0gICAgLy8gKiBBZGRlZCBydWxlcyB0aGF0IHByZXZl
bnQgYSBjdXJzb3IgZnJvbSBtb3ZpbmcgYmVmb3JlIEphcGFuZXNlIGhhbGYtd2lkdGgga2F0YWth
cmEgdm9pY2VkIG1hcmtzLgotICAgIC8vICogQWRkZWQgcnVsZXMgZm9yIHJlZ2lvbmFsIGluZGlj
YXRvciBzeW1ib2xzLgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBrUnVsZXMgPQotICAgICAgICAi
JENSICAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBDUn1dOyIKLSAgICAgICAg
IiRMRiAgICAgID0gW1xccHtHcmFwaGVtZV9DbHVzdGVyX0JyZWFrID0gTEZ9XTsiCi0gICAgICAg
ICIkQ29udHJvbCA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IENvbnRyb2x9XTsiCi0g
ICAgICAgICIkVm9pY2VNYXJrcyA9IFtcXHVGRjlFXFx1RkY5Rl07IiAgLy8gSmFwYW5lc2UgaGFs
Zi13aWR0aCBrYXRha2FuYSB2b2ljZWQgbWFya3MKLSAgICAgICAgIiRFeHRlbmQgID0gW1xccHtH
cmFwaGVtZV9DbHVzdGVyX0JyZWFrID0gRXh0ZW5kfSAkVm9pY2VNYXJrcyAtIFtcXHUwRTMwIFxc
dTBFMzIgXFx1MEU0NSBcXHUwRUIwIFxcdTBFQjJdXTsiCi0gICAgICAgICIkU3BhY2luZ01hcmsg
PSBbW1xccHtHZW5lcmFsX0NhdGVnb3J5ID0gU3BhY2luZyBNYXJrfV0gLSAkRXh0ZW5kXTsiCi0g
ICAgICAgICIkTCAgICAgICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IEx9XTsiCi0g
ICAgICAgICIkViAgICAgICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IFZ9XTsiCi0g
ICAgICAgICIkVCAgICAgICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IFR9XTsiCi0g
ICAgICAgICIkTFYgICAgICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IExWfV07Igot
ICAgICAgICAiJExWVCAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBMVlR9XTsi
Ci0gICAgICAgICIkSGluMCAgICA9IFtcXHUwOTA1LVxcdTA5MzldOyIgICAgLy8gRGV2YW5hZ2Fy
aSBMZXR0ZXIgQSwuLi4sSGEKLSAgICAgICAgIiRIaW5WICAgID0gXFx1MDk0RDsiICAgICAgICAg
ICAgICAvLyBEZXZhbmFnYXJpIFNpZ24gVmlyYW1hCi0gICAgICAgICIkSGluMSAgICA9IFtcXHUw
OTE1LVxcdTA5MzldOyIgICAgLy8gRGV2YW5hZ2FyaSBMZXR0ZXIgS2EsLi4uLEhhCi0gICAgICAg
ICIkQmVuMCAgICA9IFtcXHUwOTg1LVxcdTA5QjldOyIgICAgLy8gQmVuZ2FsaSBMZXR0ZXIgQSwu
Li4sSGEKLSAgICAgICAgIiRCZW5WICAgID0gXFx1MDlDRDsiICAgICAgICAgICAgICAvLyBCZW5n
YWxpIFNpZ24gVmlyYW1hCi0gICAgICAgICIkQmVuMSAgICA9IFtcXHUwOTk1LVxcdTA5QjldOyIg
ICAgLy8gQmVuZ2FsaSBMZXR0ZXIgS2EsLi4uLEhhCi0gICAgICAgICIkUGFuMCAgICA9IFtcXHUw
QTA1LVxcdTBBMzldOyIgICAgLy8gR3VybXVraGkgTGV0dGVyIEEsLi4uLEhhCi0gICAgICAgICIk
UGFuViAgICA9IFxcdTBBNEQ7IiAgICAgICAgICAgICAgLy8gR3VybXVraGkgU2lnbiBWaXJhbWEK
LSAgICAgICAgIiRQYW4xICAgID0gW1xcdTBBMTUtXFx1MEEzOV07IiAgICAvLyBHdXJtdWtoaSBM
ZXR0ZXIgS2EsLi4uLEhhCi0gICAgICAgICIkR3VqMCAgICA9IFtcXHUwQTg1LVxcdTBBQjldOyIg
ICAgLy8gR3VqYXJhdGkgTGV0dGVyIEEsLi4uLEhhCi0gICAgICAgICIkR3VqViAgICA9IFxcdTBB
Q0Q7IiAgICAgICAgICAgICAgLy8gR3VqYXJhdGkgU2lnbiBWaXJhbWEKLSAgICAgICAgIiRHdWox
ICAgID0gW1xcdTBBOTUtXFx1MEFCOV07IiAgICAvLyBHdWphcmF0aSBMZXR0ZXIgS2EsLi4uLEhh
Ci0gICAgICAgICIkT3JpMCAgICA9IFtcXHUwQjA1LVxcdTBCMzldOyIgICAgLy8gT3JpeWEgTGV0
dGVyIEEsLi4uLEhhCi0gICAgICAgICIkT3JpViAgICA9IFxcdTBCNEQ7IiAgICAgICAgICAgICAg
Ly8gT3JpeWEgU2lnbiBWaXJhbWEKLSAgICAgICAgIiRPcmkxICAgID0gW1xcdTBCMTUtXFx1MEIz
OV07IiAgICAvLyBPcml5YSBMZXR0ZXIgS2EsLi4uLEhhCi0gICAgICAgICIkVGVsMCAgICA9IFtc
XHUwQzA1LVxcdTBDMzldOyIgICAgLy8gVGVsdWd1IExldHRlciBBLC4uLixIYQotICAgICAgICAi
JFRlbFYgICAgPSBcXHUwQzREOyIgICAgICAgICAgICAgIC8vIFRlbHVndSBTaWduIFZpcmFtYQot
ICAgICAgICAiJFRlbDEgICAgPSBbXFx1MEMxNC1cXHUwQzM5XTsiICAgIC8vIFRlbHVndSBMZXR0
ZXIgS2EsLi4uLEhhCi0gICAgICAgICIkS2FuMCAgICA9IFtcXHUwQzg1LVxcdTBDQjldOyIgICAg
Ly8gS2FubmFkYSBMZXR0ZXIgQSwuLi4sSGEKLSAgICAgICAgIiRLYW5WICAgID0gXFx1MENDRDsi
ICAgICAgICAgICAgICAvLyBLYW5uYWRhIFNpZ24gVmlyYW1hCi0gICAgICAgICIkS2FuMSAgICA9
IFtcXHUwQzk1LVxcdTBDQjldOyIgICAgLy8gS2FubmFkYSBMZXR0ZXIgQSwuLi4sSGEKLSAgICAg
ICAgIiRNYWwwICAgID0gW1xcdTBEMDUtXFx1MEQzOV07IiAgICAvLyBNYWxheWFsYW0gTGV0dGVy
IEEsLi4uLEhhCi0gICAgICAgICIkTWFsViAgICA9IFxcdTBENEQ7IiAgICAgICAgICAgICAgLy8g
TWFsYXlhbGFtIFNpZ24gVmlyYW1hCi0gICAgICAgICIkTWFsMSAgICA9IFtcXHUwRDE1LVxcdTBE
MzldOyIgICAgLy8gTWFsYXlhbGFtIExldHRlciBBLC4uLixIYQotICAgICAgICAiJFJJICAgICAg
PSBbXFxVMDAwMUYxRTYtXFxVMDAwMUYxRkZdOyIgLy8gRW1vamkgcmVnaW9uYWwgaW5kaWNhdG9y
cwotICAgICAgICAiISFjaGFpbjsiCi0gICAgICAgICIhIWZvcndhcmQ7IgotICAgICAgICAiJENS
ICRMRjsiCi0gICAgICAgICIkTCAoJEwgfCAkViB8ICRMViB8ICRMVlQpOyIKLSAgICAgICAgIigk
TFYgfCAkVikgKCRWIHwgJFQpOyIKLSAgICAgICAgIigkTFZUIHwgJFQpICRUOyIKLSAgICAgICAg
IlteJENvbnRyb2wgJENSICRMRl0gJEV4dGVuZDsiCi0gICAgICAgICJbXiRDb250cm9sICRDUiAk
TEZdICRTcGFjaW5nTWFyazsiCi0gICAgICAgICIkUkkgJFJJIC8gJFJJOyIKLSAgICAgICAgIiRS
SSAkUkk7IgotICAgICAgICAiJEhpbjAgJEhpblYgJEhpbjE7IiAgICAgICAgICAgICAgIC8vIERl
dmFuYWdhcmkgVmlyYW1hIChmb3J3YXJkKQotICAgICAgICAiJEJlbjAgJEJlblYgJEJlbjE7IiAg
ICAgICAgICAgICAgIC8vIEJlbmdhbGkgVmlyYW1hIChmb3J3YXJkKQotICAgICAgICAiJFBhbjAg
JFBhblYgJFBhbjE7IiAgICAgICAgICAgICAgIC8vIEd1cm11a2hpIFZpcmFtYSAoZm9yd2FyZCkK
LSAgICAgICAgIiRHdWowICRHdWpWICRHdWoxOyIgICAgICAgICAgICAgICAvLyBHdWphcmF0aSBW
aXJhbWEgKGZvcndhcmQpCi0gICAgICAgICIkT3JpMCAkT3JpViAkT3JpMTsiICAgICAgICAgICAg
ICAgLy8gT3JpeWEgVmlyYW1hIChmb3J3YXJkKQotICAgICAgICAiJFRlbDAgJFRlbFYgJFRlbDE7
IiAgICAgICAgICAgICAgIC8vIFRlbHVndSBWaXJhbWEgKGZvcndhcmQpCi0gICAgICAgICIkS2Fu
MCAkS2FuViAkS2FuMTsiICAgICAgICAgICAgICAgLy8gS2FubmFkYSBWaXJhbWEgKGZvcndhcmQp
Ci0gICAgICAgICIkTWFsMCAkTWFsViAkTWFsMTsiICAgICAgICAgICAgICAgLy8gTWFsYXlhbGFt
IFZpcmFtYSAoZm9yd2FyZCkKLSAgICAgICAgIiEhcmV2ZXJzZTsiCi0gICAgICAgICIkTEYgJENS
OyIKLSAgICAgICAgIigkTCB8ICRWIHwgJExWIHwgJExWVCkgJEw7IgotICAgICAgICAiKCRWIHwg
JFQpICgkTFYgfCAkVik7IgotICAgICAgICAiJFQgKCRMVlQgfCAkVCk7IgotICAgICAgICAiJEV4
dGVuZCAgICAgIFteJENvbnRyb2wgJENSICRMRl07IgotICAgICAgICAiJFNwYWNpbmdNYXJrIFte
JENvbnRyb2wgJENSICRMRl07IgotICAgICAgICAiJFJJICRSSSAvICRSSSAkUkk7IgotICAgICAg
ICAiJFJJICRSSTsiCi0gICAgICAgICIkSGluMSAkSGluViAkSGluMDsiICAgICAgICAgICAgICAg
Ly8gRGV2YW5hZ2FyaSBWaXJhbWEgKGJhY2t3YXJkKQotICAgICAgICAiJEJlbjEgJEJlblYgJEJl
bjA7IiAgICAgICAgICAgICAgIC8vIEJlbmdhbGkgVmlyYW1hIChiYWNrd2FyZCkKLSAgICAgICAg
IiRQYW4xICRQYW5WICRQYW4wOyIgICAgICAgICAgICAgICAvLyBHdXJtdWtoaSBWaXJhbWEgKGJh
Y2t3YXJkKQotICAgICAgICAiJEd1ajEgJEd1alYgJEd1ajA7IiAgICAgICAgICAgICAgIC8vIEd1
amFyYXRpIFZpcmFtYSAoYmFja3dhcmQpCi0gICAgICAgICIkT3JpMSAkT3JpViAkT3JpMDsiICAg
ICAgICAgICAgICAgLy8gR3VqYXJhdGkgVmlyYW1hIChiYWNrd2FyZCkKLSAgICAgICAgIiRUZWwx
ICRUZWxWICRUZWwwOyIgICAgICAgICAgICAgICAvLyBUZWx1Z3UgVmlyYW1hIChiYWNrd2FyZCkK
LSAgICAgICAgIiRLYW4xICRLYW5WICRLYW4wOyIgICAgICAgICAgICAgICAvLyBLYW5uYWRhIFZp
cmFtYSAoYmFja3dhcmQpCi0gICAgICAgICIkTWFsMSAkTWFsViAkTWFsMDsiICAgICAgICAgICAg
ICAgLy8gTWFsYXlhbGFtIFZpcmFtYSAoYmFja3dhcmQpCi0gICAgICAgICIhIXNhZmVfcmV2ZXJz
ZTsiCi0gICAgICAgICIhIXNhZmVfZm9yd2FyZDsiOwotICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVy
YXRvciogc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvciA9IGluaXRpYWxpemVJdGVyYXRvcldp
dGhSdWxlcyhrUnVsZXMpOwotI2Vsc2UgLy8gUExBVEZPUk0oSU9TKQotICAgIC8vIFVzZSB0aGUg
c3BlY2lhbCBUaGFpIGNoYXJhY3RlciBicmVhayBpdGVyYXRvciBmb3IgYWxsIGxvY2FsZXMKLSAg
ICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0b3Ig
PSBpbml0aWFsaXplSXRlcmF0b3IoVUJSS19DSEFSQUNURVIsICJ0aCIpOwotI2VuZGlmIC8vICFQ
TEFURk9STShJT1MpCi0KLSAgICBpZiAoIXN0YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0b3IpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHNldFRleHRGb3JJdGVyYXRvcigq
c3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvciwgU3RyaW5nVmlldyhidWZmZXIsIGxlbmd0aCkp
OwotfQotCi1UZXh0QnJlYWtJdGVyYXRvciogYWNxdWlyZUxpbmVCcmVha0l0ZXJhdG9yKFN0cmlu
Z1ZpZXcgc3RyaW5nLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSwgY29uc3QgVUNoYXIqIHBy
aW9yQ29udGV4dCwgdW5zaWduZWQgcHJpb3JDb250ZXh0TGVuZ3RoKQotewotICAgIFRleHRCcmVh
a0l0ZXJhdG9yKiBpdGVyYXRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGV4dEJyZWFrSXRlcmF0b3Iq
PihMaW5lQnJlYWtJdGVyYXRvclBvb2w6OnNoYXJlZFBvb2woKS50YWtlKGxvY2FsZSkpOwotICAg
IGlmICghaXRlcmF0b3IpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHNl
dENvbnRleHRBd2FyZVRleHRGb3JJdGVyYXRvcigqaXRlcmF0b3IsIHN0cmluZywgcHJpb3JDb250
ZXh0LCBwcmlvckNvbnRleHRMZW5ndGgpOwotfQotCi12b2lkIHJlbGVhc2VMaW5lQnJlYWtJdGVy
YXRvcihUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IpCi17Ci0gICAgQVNTRVJUX0FSRyhpdGVy
YXRvciwgaXRlcmF0b3IpOwotCi0gICAgTGluZUJyZWFrSXRlcmF0b3JQb29sOjpzaGFyZWRQb29s
KCkucHV0KHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvcikpOwotfQot
Ci1zdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0
b3I7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlQW5kU3dhcE5vblNoYXJlZENoYXJhY3Rl
ckJyZWFrSXRlcmF0b3IoVGV4dEJyZWFrSXRlcmF0b3IqIGV4cGVjdGVkLCBUZXh0QnJlYWtJdGVy
YXRvciogbmV3VmFsdWUpCi17Ci0jaWYgRU5BQkxFKENPTVBBUkVfQU5EX1NXQVApCi0gICAgcmV0
dXJuIHdlYWtDb21wYXJlQW5kU3dhcChyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm5vblNoYXJl
ZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpLCBleHBlY3RlZCwgbmV3VmFsdWUpOwotI2Vsc2UKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yTXV0ZXgsICgpKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobm9uU2hhcmVkQ2hhcmFjdGVy
QnJlYWtJdGVyYXRvck11dGV4KTsKLSAgICBpZiAobm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVy
YXRvciAhPSBleHBlY3RlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG5vblNoYXJlZENo
YXJhY3RlckJyZWFrSXRlcmF0b3IgPSBuZXdWYWx1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRp
ZgotfQotCi1Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjpOb25TaGFyZWRDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBidWZmZXIsIGludCBsZW5ndGgpCi17Ci0gICAg
bV9pdGVyYXRvciA9IG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I7Ci0KLSAgICBib29s
IGNyZWF0ZWRJdGVyYXRvciA9IG1faXRlcmF0b3IgJiYgY29tcGFyZUFuZFN3YXBOb25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yKG1faXRlcmF0b3IsIDApOwotICAgIGlmICghY3JlYXRlZEl0
ZXJhdG9yKQotICAgICAgICBtX2l0ZXJhdG9yID0gaW5pdGlhbGl6ZUl0ZXJhdG9yKFVCUktfQ0hB
UkFDVEVSKTsKLSAgICBpZiAoIW1faXRlcmF0b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
aXRlcmF0b3IgPSBzZXRUZXh0Rm9ySXRlcmF0b3IoKm1faXRlcmF0b3IsIFN0cmluZ1ZpZXcoYnVm
ZmVyLCBsZW5ndGgpKTsKLX0KLQotTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6fk5v
blNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoKQotewotICAgIGlmICghY29tcGFyZUFuZFN3
YXBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKDAsIG1faXRlcmF0b3IpKQotICAgICAg
ICB1YnJrX2Nsb3NlKHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihtX2l0ZXJhdG9y
KSk7Ci19Ci0KLQotLy8gSXRlcmF0b3IgaW1wbGVtZW5hdGlvbi4KLQotaW50IHRleHRCcmVha0Zp
cnN0KFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKLXsKLSAgICByZXR1cm4gdWJya19maXJz
dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0b3IpKTsKLX0KLQotaW50
IHRleHRCcmVha0xhc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yKQotewotICAgIHJldHVy
biB1YnJrX2xhc3QocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSk7
Ci19Ci0KLWludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKLXsK
LSAgICByZXR1cm4gdWJya19uZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihp
dGVyYXRvcikpOwotfQotCi1pbnQgdGV4dEJyZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3Iq
IGl0ZXJhdG9yKQotewotICAgIHJldHVybiB1YnJrX3ByZXZpb3VzKHJlaW50ZXJwcmV0X2Nhc3Q8
VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvcikpOwotfQotCi1pbnQgdGV4dEJyZWFrUHJlY2VkaW5n
KFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciwgaW50IHBvcykKLXsKLSAgICByZXR1cm4gdWJy
a19wcmVjZWRpbmcocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSwg
cG9zKTsKLX0KLQotaW50IHRleHRCcmVha0ZvbGxvd2luZyhUZXh0QnJlYWtJdGVyYXRvciogaXRl
cmF0b3IsIGludCBwb3MpCi17Ci0gICAgcmV0dXJuIHVicmtfZm9sbG93aW5nKHJlaW50ZXJwcmV0
X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvciksIHBvcyk7Ci19Ci0KLWludCB0ZXh0QnJl
YWtDdXJyZW50KFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKLXsKLSAgICByZXR1cm4gdWJy
a19jdXJyZW50KHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvcikpOwot
fQotCi1ib29sIGlzVGV4dEJyZWFrKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciwgaW50IHBv
c2l0aW9uKQotewotICAgIHJldHVybiB1YnJrX2lzQm91bmRhcnkocmVpbnRlcnByZXRfY2FzdDxV
QnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSwgcG9zaXRpb24pOwotfQotCi1ib29sIGlzV29yZFRl
eHRCcmVhayhUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IpCi17Ci0gICAgaW50IHJ1bGVTdGF0
dXMgPSB1YnJrX2dldFJ1bGVTdGF0dXMocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+
KGl0ZXJhdG9yKSk7Ci0gICAgcmV0dXJuIHJ1bGVTdGF0dXMgIT0gVUJSS19XT1JEX05PTkU7Ci19
Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlz
aW9uIDE2MTg5MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHN0YXRpYyB2b2lkIG1ha2VDYXBpdGFs
aXplZChTdHJpbmcqIHN0cmkKICAgICAgICAgICAgIHN0cmluZ1dpdGhQcmV2aW91c1tpXSA9IHN0
cmluZ0ltcGxbaSAtIDFdOwogICAgIH0KIAotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBib3VuZGFy
eSA9IHdvcmRCcmVha0l0ZXJhdG9yKHN0cmluZ1dpdGhQcmV2aW91cy5jaGFyYWN0ZXJzKCksIGxl
bmd0aCArIDEpOworICAgIFVCcmVha0l0ZXJhdG9yKiBib3VuZGFyeSA9IHdvcmRCcmVha0l0ZXJh
dG9yKFN0cmluZ1ZpZXcoc3RyaW5nV2l0aFByZXZpb3VzLmNoYXJhY3RlcnMoKSwgbGVuZ3RoICsg
MSkpOwogICAgIGlmICghYm91bmRhcnkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTQyLDggKzE0
Miw4IEBAIHN0YXRpYyB2b2lkIG1ha2VDYXBpdGFsaXplZChTdHJpbmcqIHN0cmkKICAgICByZXN1
bHQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAKICAgICBpbnQzMl90IGVuZE9mV29yZDsKLSAg
ICBpbnQzMl90IHN0YXJ0T2ZXb3JkID0gdGV4dEJyZWFrRmlyc3QoYm91bmRhcnkpOwotICAgIGZv
ciAoZW5kT2ZXb3JkID0gdGV4dEJyZWFrTmV4dChib3VuZGFyeSk7IGVuZE9mV29yZCAhPSBUZXh0
QnJlYWtEb25lOyBzdGFydE9mV29yZCA9IGVuZE9mV29yZCwgZW5kT2ZXb3JkID0gdGV4dEJyZWFr
TmV4dChib3VuZGFyeSkpIHsKKyAgICBpbnQzMl90IHN0YXJ0T2ZXb3JkID0gdWJya19maXJzdChi
b3VuZGFyeSk7CisgICAgZm9yIChlbmRPZldvcmQgPSB1YnJrX25leHQoYm91bmRhcnkpOyBlbmRP
ZldvcmQgIT0gVUJSS19ET05FOyBzdGFydE9mV29yZCA9IGVuZE9mV29yZCwgZW5kT2ZXb3JkID0g
dWJya19uZXh0KGJvdW5kYXJ5KSkgewogICAgICAgICBpZiAoc3RhcnRPZldvcmQpIC8vIElnbm9y
ZSBmaXJzdCBjaGFyIG9mIHByZXZpb3VzIHN0cmluZwogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChzdHJpbmdJbXBsW3N0YXJ0T2ZXb3JkIC0gMV0gPT0gbm9CcmVha1NwYWNlID8gbm9CcmVha1Nw
YWNlIDogdV90b3RpdGxlKHN0cmluZ1dpdGhQcmV2aW91c1tzdGFydE9mV29yZF0pKTsKICAgICAg
ICAgZm9yIChpbnQgaSA9IHN0YXJ0T2ZXb3JkICsgMTsgaSA8IGVuZE9mV29yZDsgaSsrKQpAQCAt
MTM0MCwxMiArMTM0MCwxMiBAQCBpbnQgUmVuZGVyVGV4dDo6cHJldmlvdXNPZmZzZXQoaW50IGN1
cnJlCiAgICAgICAgIHJldHVybiBjdXJyZW50IC0gMTsKIAogICAgIFN0cmluZ0ltcGwqIHRleHRJ
bXBsID0gbV90ZXh0LmltcGwoKTsKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSBj
dXJzb3JNb3ZlbWVudEl0ZXJhdG9yKHRleHRJbXBsLT5jaGFyYWN0ZXJzMTYoKSwgdGV4dEltcGwt
Pmxlbmd0aCgpKTsKKyAgICBVQnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSBjdXJzb3JNb3ZlbWVu
dEl0ZXJhdG9yKFN0cmluZ1ZpZXcodGV4dEltcGwtPmNoYXJhY3RlcnMxNigpLCB0ZXh0SW1wbC0+
bGVuZ3RoKCkpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQogICAgICAgICByZXR1cm4gY3VycmVudCAt
IDE7CiAKLSAgICBsb25nIHJlc3VsdCA9IHRleHRCcmVha1ByZWNlZGluZyhpdGVyYXRvciwgY3Vy
cmVudCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBUZXh0QnJlYWtEb25lKQorICAgIGxvbmcgcmVzdWx0
ID0gdWJya19wcmVjZWRpbmcoaXRlcmF0b3IsIGN1cnJlbnQpOworICAgIGlmIChyZXN1bHQgPT0g
VUJSS19ET05FKQogICAgICAgICByZXN1bHQgPSBjdXJyZW50IC0gMTsKIAogCkBAIC0xNDkzLDEy
ICsxNDkzLDEyIEBAIGludCBSZW5kZXJUZXh0OjpuZXh0T2Zmc2V0KGludCBjdXJyZW50KSAKICAg
ICAgICAgcmV0dXJuIGN1cnJlbnQgKyAxOwogCiAgICAgU3RyaW5nSW1wbCogdGV4dEltcGwgPSBt
X3RleHQuaW1wbCgpOwotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IGN1cnNvck1v
dmVtZW50SXRlcmF0b3IodGV4dEltcGwtPmNoYXJhY3RlcnMxNigpLCB0ZXh0SW1wbC0+bGVuZ3Ro
KCkpOworICAgIFVCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IGN1cnNvck1vdmVtZW50SXRlcmF0
b3IoU3RyaW5nVmlldyh0ZXh0SW1wbC0+Y2hhcmFjdGVyczE2KCksIHRleHRJbXBsLT5sZW5ndGgo
KSkpOwogICAgIGlmICghaXRlcmF0b3IpCiAgICAgICAgIHJldHVybiBjdXJyZW50ICsgMTsKIAot
ICAgIGxvbmcgcmVzdWx0ID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0ZXJhdG9yLCBjdXJyZW50KTsK
LSAgICBpZiAocmVzdWx0ID09IFRleHRCcmVha0RvbmUpCisgICAgbG9uZyByZXN1bHQgPSB1YnJr
X2ZvbGxvd2luZyhpdGVyYXRvciwgY3VycmVudCk7CisgICAgaWYgKHJlc3VsdCA9PSBVQlJLX0RP
TkUpCiAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQgKyAxOwogCiAgICAgcmV0dXJuIHJlc3VsdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5oCShyZXZpc2lvbiAxNjE4
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtOTksOSArOTksOSBAQCBpbmxpbmUgaW50IG5leHRCcmVha2FibGVQb3NpdGlvbihM
YXp5TGluCiAgICAgICAgICAgICBpZiAobmV4dEJyZWFrIDwgaSkgewogICAgICAgICAgICAgICAg
IC8vIERvbid0IGJyZWFrIGlmIHBvc2l0aW9uZWQgYXQgc3RhcnQgb2YgcHJpbWFyeSBjb250ZXh0
IGFuZCB0aGVyZSBpcyBubyBwcmlvciBjb250ZXh0LgogICAgICAgICAgICAgICAgIGlmIChpIHx8
IHByaW9yQ29udGV4dExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBUZXh0QnJlYWtJdGVy
YXRvciogYnJlYWtJdGVyYXRvciA9IGxhenlCcmVha0l0ZXJhdG9yLmdldChwcmlvckNvbnRleHRM
ZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBVQnJlYWtJdGVyYXRvciogYnJlYWtJdGVyYXRv
ciA9IGxhenlCcmVha0l0ZXJhdG9yLmdldChwcmlvckNvbnRleHRMZW5ndGgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoYnJlYWtJdGVyYXRvcikgewotICAgICAgICAgICAgICAgICAgICAgICAg
bmV4dEJyZWFrID0gdGV4dEJyZWFrRm9sbG93aW5nKGJyZWFrSXRlcmF0b3IsIGkgLSAxICsgcHJp
b3JDb250ZXh0TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRCcmVhayA9IHVi
cmtfZm9sbG93aW5nKGJyZWFrSXRlcmF0b3IsIGkgLSAxICsgcHJpb3JDb250ZXh0TGVuZ3RoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0QnJlYWsgPj0gMCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXh0QnJlYWsgLT0gcHJpb3JDb250ZXh0TGVuZ3RoOwogICAgICAg
ICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjE4OTIpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAx
NC0wMS0xMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFRleHRCcmVh
a0l0ZXJhdG9yJ3Mgc2hvdWxkIHN1cHBvcnQgTGF0aW4tMSBmb3IgYWxsIGl0ZXJhdG9yIHR5cGVz
IChQYXJ0IDIpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjY4NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwOgorICAgICAgICBVcGRhdGUgdG8g
dXNlIFVCcmVha0l0ZXJhdG9yIGRpcmVjdGx5LCBhbmQgcGFzcyBTdHJpbmdWaWV3cyB0byBjb25z
dHJ1Y3Rpb24uCisKIDIwMTQtMDEtMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtTT1VQXSBBZGQgU291cE5ldHdvcmtTZXNzaW9uIGNsYXNz
IHRvIHdyYXAgYSBTb3VwU2Vzc2lvbgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9UZXh0Q2hlY2tlckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAJKHJldmlzaW9uIDE2MTg5MikKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjcsMTIgKzEyNywxMiBAQCBzdGF0aWMgaW50IG5leHRXb3JkT2Zmc2V0KGNvbnN0IFVDaGFy
KiB0CiAgICAgLy8gICAgICAgIG9yIGFmdGVyICJvZmZzZXQiICh1YnJrX2lzQm91bmRhcnkgc2lk
ZSBlZmZlY3QpLgogICAgIC8vICAgICAgICBGb3IgbWFueSB3b3JkIHNlcGFyYXRvcnMsIHRoZSBt
ZXRob2QgZG9lc24ndCBwcm9wZXJseSBkZXRlcm1pbmUgdGhlIGJvdW5kYXJpZXMKICAgICAvLyAg
ICAgICAgd2l0aG91dCByZXNldHRpbmcgdGhlIGl0ZXJhdG9yLgotICAgIFRleHRCcmVha0l0ZXJh
dG9yKiB0ZXh0SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0LCBsZW5ndGgpOworICAg
IFVCcmVha0l0ZXJhdG9yKiB0ZXh0SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdW
aWV3KHRleHQsIGxlbmd0aCkpOwogICAgIGlmICghdGV4dEl0ZXJhdG9yKQogICAgICAgICByZXR1
cm4gY3VycmVudE9mZnNldDsKIAogICAgIGludCB3b3JkT2Zmc2V0ID0gY3VycmVudE9mZnNldDsK
LSAgICB3aGlsZSAod29yZE9mZnNldCA8IGxlbmd0aCAmJiBpc1RleHRCcmVhayh0ZXh0SXRlcmF0
b3IsIHdvcmRPZmZzZXQpKQorICAgIHdoaWxlICh3b3JkT2Zmc2V0IDwgbGVuZ3RoICYmIHVicmtf
aXNCb3VuZGFyeSh0ZXh0SXRlcmF0b3IsIHdvcmRPZmZzZXQpKQogICAgICAgICArK3dvcmRPZmZz
ZXQ7CiAKICAgICAvLyBEbyBub3QgdHJlYXQgdGhlIHdvcmQncyBib3VuZGFyeSBhcyBhIHNlcGFy
YXRvci4KQEAgLTE1Myw3ICsxNTMsNyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0
Q2hlY2tlcjo6CiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcGFyYWdyYXBoQ2hlY2tp
bmdSZXN1bHQ7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAgICAgaWYgKGNoZWNraW5nVHlwZXMg
JiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcpIHsKLSAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3Iq
IHRleHRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0aCk7CisgICAgICAg
IFVCcmVha0l0ZXJhdG9yKiB0ZXh0SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdW
aWV3KHRleHQsIGxlbmd0aCkpOwogICAgICAgICBpZiAoIXRleHRJdGVyYXRvcikKICAgICAgICAg
ICAgIHJldHVybiBwYXJhZ3JhcGhDaGVja2luZ1Jlc3VsdDsKIApAQCAtMTYxLDcgKzE2MSw3IEBA
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjoKICAgICAgICAgLy8gaW52
b2x2ZSB0aGUgY2xpZW50IHRvIGNoZWNrIHNwZWxsaW5nIGZvciB0aGVtLgogICAgICAgICBpbnQg
b2Zmc2V0ID0gbmV4dFdvcmRPZmZzZXQodGV4dCwgbGVuZ3RoLCAwKTsKICAgICAgICAgaW50IGxl
bmd0aFN0cmlwID0gbGVuZ3RoOwotICAgICAgICB3aGlsZSAobGVuZ3RoU3RyaXAgPiAwICYmIGlz
VGV4dEJyZWFrKHRleHRJdGVyYXRvciwgbGVuZ3RoU3RyaXAgLSAxKSkKKyAgICAgICAgd2hpbGUg
KGxlbmd0aFN0cmlwID4gMCAmJiB1YnJrX2lzQm91bmRhcnkodGV4dEl0ZXJhdG9yLCBsZW5ndGhT
dHJpcCAtIDEpKQogICAgICAgICAgICAgLS1sZW5ndGhTdHJpcDsKIAogICAgICAgICB3aGlsZSAo
b2Zmc2V0ID49IDAgJiYgb2Zmc2V0IDwgbGVuZ3RoU3RyaXApIHsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvaW9zL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE2MTg5MikKKysrIFNvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE0LTAxLTEyICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IncyBzaG91bGQgc3VwcG9y
dCBMYXRpbi0xIGZvciBhbGwgaXRlcmF0b3IgdHlwZXMgKFBhcnQgMikKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjg1NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWlzYy9XZWJOU1N0cmluZ0RyYXdp
bmcubW06CisgICAgICAgICogTWlzYy9XZWJVSUtpdFN1cHBvcnQubW06CisgICAgICAgIFVwZGF0
ZSB0byB1c2UgVUJyZWFrSXRlcmF0b3IgZGlyZWN0bHksIGFuZCBwYXNzIFN0cmluZ1ZpZXdzIHRv
IGNvbnN0cnVjdGlvbi4KKwogMjAxNC0wMS0xMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIHR5cGUgY2hlY2tpbmcgdG8gaXNFcXVhbCBtZXRob2RzCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYk5TU3RyaW5nRHJhd2luZy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYk5TU3RyaW5nRHJhd2luZy5tbQkocmV2aXNp
b24gMTYxODkyKQorKysgU291cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJOU1N0cmluZ0RyYXdpbmcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTc4LDEwICs3OCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2hvdWxkRGlzYWJsZVdvcmRSb3VuCiAgICAgcmV0dXJuICF3b3JkUm91bmRpbmdFbmFibGVkOwog
fQogCi1zdGF0aWMgaW5saW5lIGludCBib3VuZGVkVGV4dEJyZWFrRm9sbG93aW5nKFRleHRCcmVh
a0l0ZXJhdG9yKiBpdCwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgaW50
IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoVUJyZWFrSXRlcmF0b3IqIGl0LCBpbnQgb2Zmc2V0
LCBpbnQgbGVuZ3RoKQogewotICAgIGludCByZXN1bHQgPSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQs
IG9mZnNldCk7Ci0gICAgcmV0dXJuIHJlc3VsdCA9PSBUZXh0QnJlYWtEb25lID8gbGVuZ3RoIDog
cmVzdWx0OworICAgIGludCByZXN1bHQgPSB1YnJrX2ZvbGxvd2luZyhpdCwgb2Zmc2V0KTsKKyAg
ICByZXR1cm4gcmVzdWx0ID09IFVCUktfRE9ORSA/IGxlbmd0aCA6IHJlc3VsdDsKIH0KIAogc3Rh
dGljIGlubGluZSBGb250IHJlbmRlcmVyRm9yRm9udCggR1NGb250UmVmIGZvbnQgKQpAQCAtNDU2
LDcgKzQ1Niw3IEBAIC0gKENHU2l6ZSlfX3dlYl9kcmF3SW5SZWN0OihDR1JlY3QpcmVjdAogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGVsbGlwc2lzU3R5bGUgPT0gV2ViRWxsaXBzaXNTdHls
ZUNoYXJhY3RlcldyYXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4g
YnJlYWsgb24gY2hhcmFjdGVycy4gV2Ugc2hvdWxkIGRvIHNvbWV0aGluZyBzbWFydGVyLCBsaWtl
IHNwbGl0IHRoZSBsZW5ndGggb2YgdGhlIGVudGlyZSBsaW5lIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERvbid0LCBob3dldmVyLCBicmVhayBpbiB0aGUgbWlkZGxlIG9mIGEgY2hh
cmFjdGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vblNoYXJlZENoYXJhY3RlckJy
ZWFrSXRlcmF0b3IgaXQocG9zLCBsZW5ndGhSZW1haW5pbmcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoU3RyaW5nVmlldyhw
b3MsIGxlbmd0aFJlbWFpbmluZykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
UG9zID0gYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhpdCwgMCwgbGVuZ3RoUmVtYWluaW5nKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTM3LDcgKzUzNyw3IEBAIC0gKENHU2l6ZSlf
X3dlYl9kcmF3SW5SZWN0OihDR1JlY3QpcmVjdAogICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IG11c3QgYmUgYSBsb25nIHdvcmQgdGhhdCBkb2Vzbid0IGZpdCBpbnNpZGUgdGhlIGVudGlyZSB3
aWR0aAogICAgICAgICAgICAgICAgICAgICAvLyBGaXQgaXQgb24gYSBsaW5lIG9uZSBjaGFyYWN0
ZXIgYXQgYSB0aW1lIGFuZCBicmVhayB3aGVuIG5vIG1vcmUgY2hhcmFjdGVycyBmaXQKICAgICAg
ICAgICAgICAgICAgICAgLy8gRm9yY2UgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciB0byBhdm9pZCB0
aGUgZWRnZSBjYXNlIHdoZXJlIGEgc2luZ2xlIGdseXBoIGRvZXNuJ3QgZml0IHdpdGhpbiB3aWR0
aAotICAgICAgICAgICAgICAgICAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0
KHBvcywgbGVuZ3RoUmVtYWluaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgTm9uU2hhcmVkQ2hh
cmFjdGVyQnJlYWtJdGVyYXRvciBpdChTdHJpbmdWaWV3KHBvcywgbGVuZ3RoUmVtYWluaW5nKSk7
CiAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgICAg
ICBpbnQgbmV4dENoYXJCcmVhayA9IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoaXQsIG9mZnNl
dCwgbGVuZ3RoUmVtYWluaW5nKTsKICAgICAgICAgICAgICAgICAgICAgVGV4dFJ1biB0ZXh0UnVu
KHBvcywgbmV4dENoYXJCcmVhayk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYlVJ
S2l0U3VwcG9ydC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYlVJ
S2l0U3VwcG9ydC5tbQkocmV2aXNpb24gMTYxODkyKQorKysgU291cmNlL1dlYktpdC9pb3MvTWlz
Yy9XZWJVSUtpdFN1cHBvcnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgZmxv
YXQgV2ViS2l0R2V0TWluaW11bVpvb21Gb250U2l6ZSh2b2lkKQogICAgIHJldHVybiBXS0dldE1p
bmltdW1ab29tRm9udFNpemUoKTsKIH0KIAotaW50IFdlYktpdEdldExhc3RMaW5lQnJlYWtJbkJ1
ZmZlcihVQ2hhciAqY2hhcmFjdGVycywgaW50IHBvc2l0aW9uLCBpbnQgbGVuZ3RoKQoraW50IFdl
YktpdEdldExhc3RMaW5lQnJlYWtJbkJ1ZmZlcihVQ2hhciogY2hhcmFjdGVycywgaW50IHBvc2l0
aW9uLCBpbnQgbGVuZ3RoKQogewogICAgIGludCBsYXN0QnJlYWtQb3MgPSBwb3NpdGlvbjsKICAg
ICBpbnQgYnJlYWtQb3MgPSAwOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221228</attachid>
            <date>2014-01-14 21:00:46 -0800</date>
            <delta_ts>2014-01-15 19:42:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126856-20140114210046.patch</filename>
            <type>text/plain</type>
            <size>74856</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjA0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE0LTAxLTEyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IncyBzaG91
bGQgc3VwcG9ydCBMYXRpbi0xIGZvciBhbGwgaXRlcmF0b3IgdHlwZXMgKFBhcnQgMikKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjg1NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBQbGF0Zm9ybUdU
Sy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBUZXh0
QnJlYWtJdGVyYXRvcklDVS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVh
a0l0ZXJhdG9ySUNVLmNwcDogUmVtb3ZlZC4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4
dEJyZWFrSXRlcmF0b3IuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuaDoKKyAgICAgICAgLSBSZW1vdmUgVGV4dEJyZWFrSXRlcmF0b3IgdHlwZSBpbiBmYXZv
ciBvZiB1c2luZyBVQnJlYWtJdGVyYXRvciBkaXJlY3RseS4KKyAgICAgICAgLSBSZW1vdmUgYWxs
IHRoZSB3cmFwcGVycyBmb3IgVUJyZWFrSXRlcmF0b3IgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAg
LSBNYWtlIGN1c3RvbSBVQnJlYWtJdGVyYXRvciBhY2Nlc3NvcnMgdGFrZSBTdHJpbmdWaWV3cy4K
KworICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHA6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QWxsSW5PbmUuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvYnJlYWtfbGluZXMuaDoKKyAgICAgICAgVXBk
YXRlIHRvIHVzZSBVQnJlYWtJdGVyYXRvciBkaXJlY3RseSwgYW5kIHBhc3MgU3RyaW5nVmlld3Mg
dG8gY29uc3RydWN0aW9uLgorCiAyMDE0LTAxLTE0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gQ3Jhc2ggaW4gTmF2aWdhdG9yQmFzZTo6dmVu
ZG9yIGxvYWRpbmcgYXBwbGUuY29tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MTYyMDQzKQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTI4MDYsNyArMjgwNiw2IEBAIGlmIChXVEZfVVNFX0lDVV9VTklDT0RFKQogICAgICAgICBw
bGF0Zm9ybS90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyLmNwcAogICAgICAgICBwbGF0Zm9ybS90ZXh0
L2ljdS9VVGV4dFByb3ZpZGVyTGF0aW4xLmNwcAogICAgICAgICBwbGF0Zm9ybS90ZXh0L2ljdS9V
VGV4dFByb3ZpZGVyVVRGMTYuY3BwCi0gICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3JJQ1UuY3BwCiAgICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAogICAg
ICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcAogICAgICkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTYyMDQzKQorKysgU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNjAxOSw3
ICs2MDE5LDYgQEAgcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Qm91bmRhcmllcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRCcmVha0l0ZXJhdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0QnJlYWtJdGVyYXRvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRC
cmVha0l0ZXJhdG9ySUNVLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENoZWNrZXJDbGllbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q2hlY2tpbmcuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24g
MTYyMDQzKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNCw3ICsxMzQsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyTGF0aW4xLmNwcAogICAgIHBsYXRmb3JtL3Rl
eHQvaWN1L1VUZXh0UHJvdmlkZXJVVEYxNi5jcHAKICAgICBwbGF0Zm9ybS90ZXh0L0xvY2FsZUlD
VS5jcHAKLSAgICBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAogICAgIHBs
YXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAogICAgIHBsYXRmb3JtL3RleHQvVGV4dEVuY29k
aW5nRGV0ZWN0b3JJQ1UuY3BwCiAKQEAgLTI2NCw3ICsyNjMsNiBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlUGxhdGZvcm1HVEtfU09VUkNFUwogICAgIHBsYXRmb3JtL3RleHQvaWN1L1VUZXh0UHJvdmlk
ZXJMYXRpbjEuY3BwCiAgICAgcGxhdGZvcm0vdGV4dC9pY3UvVVRleHRQcm92aWRlclVURjE2LmNw
cAogICAgIHBsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcAotICAgIHBsYXRmb3JtL3RleHQvVGV4
dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3Bw
CiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAKIApJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZp
c2lvbiAxNjIwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NTQzLDE1ICs4NTQzLDYgQEAKICAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBp
bGU+Ci0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dEJyZWFr
SXRlcmF0b3JJQ1UuY3BwIj4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhj
bHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dENvZGVjLmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNl
fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2
NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24g
MTYyMDQzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEzLDkgKzIwMTMsNiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0QnJlYWtJdGVyYXRvci5jcHAiPgog
ICAgICAgPEZpbHRlcj5wbGF0Zm9ybVx0ZXh0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVx0ZXh0XFRleHRCcmVha0l0ZXJhdG9y
SUNVLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3JtXHRleHQ8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dENv
ZGVjLmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXHRleHQ8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MjA0MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDU1Niw3ICs0
NTU2LDYgQEAKIAkJQjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0Q5RkYw
RDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTM0MEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0Qm91bmRhcmllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJDM0RBMDQwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCb3VuZGFyaWVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBMzYw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREEwNjBEMDA2QzFEMDBFRjZGMjYgLyog
VGV4dEJyZWFrSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlCMkMzREEzNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0
b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjJDM0RBMDcwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCAqLzsg
fTsKIAkJQjJDM0RBMzgwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJu
YWxJQ1UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
QzNEQTA4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RB
MzkwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzREEwOTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dENvZGVjLmNwcCAqLzsgfTsKIAkJQjJDM0RBM0EwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2Rl
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RB
MEEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTc4OCw3ICsxMTc4Nyw2IEBACiAJCUIyQzNE
OUZGMEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlZ21lbnRlZFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkMzREEwNDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJvdW5kYXJpZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTA2MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0
QnJlYWtJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEJy
ZWFrSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0RBMDcwRDAw
NkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0QnJlYWtJdGVyYXRvcklDVS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTA4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0QnJl
YWtJdGVyYXRvckludGVybmFsSUNVLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyQzNEQTA5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb2RlYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTBBMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDb2RlYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAxMzQsNyArMjAxMzIsNiBAQAogCQkJCUIyQzNEQTA0
MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oICovLAogCQkJCUJDRDhBNUVGMTVG
NTZGMkMwMDk4RDA3MSAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgKi8sCiAJCQkJQjJDM0RBMDYw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9yLmggKi8sCi0JCQkJQjJDM0RBMDcw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCAqLywKIAkJCQlCMkMz
REEwODBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oICov
LAogCQkJCUE3MTUxQkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICov
LAogCQkJCUE3N0QwMDExMTMzQjBBRUIwMEQ2NjU4QyAvKiBUZXh0Q2hlY2tpbmcuaCAqLywKQEAg
LTI5MDk5LDcgKzI5MDk2LDYgQEAKIAkJCQkzNzJDMDBDNDEyOTYxMUYxMDA1Qzk1NzUgLyogVGV4
dEJvdW5kYXJpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBRkZDOTcwRDAwQTVERjAwMzAw
NzREIC8qIFRleHRCb3VuZGFyaWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNEOEE1RjAxNUY1
NkYyQzAwOThEMDcxIC8qIFRleHRCcmVha0l0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUIyQzNEQTM3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMkFGRkM5ODBEMDBBNURGMDAzMDA3NEQgLyogVGV4dEJyZWFrSXRl
cmF0b3JJbnRlcm5hbElDVU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE3REJGOEREMTI3Njkx
OUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDc4RTA5MzExN0QxNjg0MjAwNDIwQUExIC8qIE1lZGlhU3RyZWFtQ2VudGVyTWFjLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkocmV2aXNp
b24gMTYyMDQzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCw5ICs3NCw5IEBAIHVuc2lnbmVkIENoYXJhY3RlckRhdGE6OnBhcnNl
ckFwcGVuZERhdGEKICAgICAvLyBzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yOTA5Mj4uCiAgICAgLy8gV2UgbmVlZCBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBs
b29rLWFoZWFkIHRvIGFjY291bnQgZm9yIFVURi0xNiBzdXJyb2dhdGVzLgogICAgIGlmIChjaGFy
YWN0ZXJMZW5ndGhMaW1pdCA8IGNoYXJhY3Rlckxlbmd0aCkgewotICAgICAgICBOb25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpICsg
b2Zmc2V0LCAoY2hhcmFjdGVyTGVuZ3RoTGltaXQgKyAyID4gY2hhcmFjdGVyTGVuZ3RoKSA/IGNo
YXJhY3Rlckxlbmd0aCA6IGNoYXJhY3Rlckxlbmd0aExpbWl0ICsgMik7Ci0gICAgICAgIGlmICgh
aXNUZXh0QnJlYWsoaXQsIGNoYXJhY3Rlckxlbmd0aExpbWl0KSkKLSAgICAgICAgICAgIGNoYXJh
Y3Rlckxlbmd0aExpbWl0ID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBjaGFyYWN0ZXJMZW5ndGhM
aW1pdCk7CisgICAgICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoU3RyaW5n
VmlldyhzdHJpbmcpLnN1YnN0cmluZyhvZmZzZXQsIChjaGFyYWN0ZXJMZW5ndGhMaW1pdCArIDIg
PiBjaGFyYWN0ZXJMZW5ndGgpID8gY2hhcmFjdGVyTGVuZ3RoIDogY2hhcmFjdGVyTGVuZ3RoTGlt
aXQgKyAyKSk7CisgICAgICAgIGlmICghdWJya19pc0JvdW5kYXJ5KGl0LCBjaGFyYWN0ZXJMZW5n
dGhMaW1pdCkpCisgICAgICAgICAgICBjaGFyYWN0ZXJMZW5ndGhMaW1pdCA9IHVicmtfcHJlY2Vk
aW5nKGl0LCBjaGFyYWN0ZXJMZW5ndGhMaW1pdCk7CiAgICAgfQogCiAgICAgaWYgKCFjaGFyYWN0
ZXJMZW5ndGhMaW1pdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5jcHAJKHJldmlzaW9uIDE2MjA0MykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMjYgKzcwLDI2
IEBAIHN0YXRpYyB2b2lkIGZpbmRCYWRHcmFtbWFycyhUZXh0Q2hlY2tlckMKIH0KICNlbmRpZgog
Ci1zdGF0aWMgdm9pZCBmaW5kTWlzc3BlbGxpbmdzKFRleHRDaGVja2VyQ2xpZW50KiBjbGllbnQs
IGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgc3RhcnQsIGludCBsZW5ndGgsIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+JiByZXN1bHRzKQorc3RhdGljIHZvaWQgZmluZE1pc3NwZWxsaW5ncyhUZXh0
Q2hlY2tlckNsaWVudCogY2xpZW50LCBjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCiB7Ci0gICAgVGV4dEJyZWFrSXRlcmF0
b3IqIGl0ZXJhdG9yID0gd29yZEJyZWFrSXRlcmF0b3IodGV4dCArIHN0YXJ0LCBsZW5ndGgpOwor
ICAgIFVCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1Zp
ZXcodGV4dCwgbGVuZ3RoKSk7CiAgICAgaWYgKCFpdGVyYXRvcikKICAgICAgICAgcmV0dXJuOwot
ICAgIGludCB3b3JkU3RhcnQgPSB0ZXh0QnJlYWtDdXJyZW50KGl0ZXJhdG9yKTsKKyAgICBpbnQg
d29yZFN0YXJ0ID0gdWJya19jdXJyZW50KGl0ZXJhdG9yKTsKICAgICB3aGlsZSAoMCA8PSB3b3Jk
U3RhcnQpIHsKLSAgICAgICAgaW50IHdvcmRFbmQgPSB0ZXh0QnJlYWtOZXh0KGl0ZXJhdG9yKTsK
KyAgICAgICAgaW50IHdvcmRFbmQgPSB1YnJrX25leHQoaXRlcmF0b3IpOwogICAgICAgICBpZiAo
d29yZEVuZCA8IDApCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaW50IHdvcmRMZW5ndGgg
PSB3b3JkRW5kIC0gd29yZFN0YXJ0OwogICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9
IC0xOwogICAgICAgICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOwotICAgICAgICBjbGllbnQt
PmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0ZXh0ICsgc3RhcnQgKyB3b3JkU3RhcnQsIHdvcmRMZW5n
dGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICBj
bGllbnQtPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0ZXh0ICsgd29yZFN0YXJ0LCB3b3JkTGVuZ3Ro
LCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKICAgICAgICAgaWYg
KDAgPCBtaXNzcGVsbGluZ0xlbmd0aCkgewogICAgICAgICAgICAgQVNTRVJUKDAgPD0gbWlzc3Bl
bGxpbmdMb2NhdGlvbiAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uIDw9IHdvcmRMZW5ndGgpOwogICAg
ICAgICAgICAgQVNTRVJUKDAgPCBtaXNzcGVsbGluZ0xlbmd0aCAmJiBtaXNzcGVsbGluZ0xvY2F0
aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gd29yZExlbmd0aCk7CiAgICAgICAgICAgICBUZXh0
Q2hlY2tpbmdSZXN1bHQgbWlzc3BlbGxpbmc7CiAgICAgICAgICAgICBtaXNzcGVsbGluZy50eXBl
ID0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOwotICAgICAgICAgICAgbWlzc3BlbGxpbmcubG9j
YXRpb24gPSBzdGFydCArIHdvcmRTdGFydCArIG1pc3NwZWxsaW5nTG9jYXRpb247CisgICAgICAg
ICAgICBtaXNzcGVsbGluZy5sb2NhdGlvbiA9IHdvcmRTdGFydCArIG1pc3NwZWxsaW5nTG9jYXRp
b247CiAgICAgICAgICAgICBtaXNzcGVsbGluZy5sZW5ndGggPSBtaXNzcGVsbGluZ0xlbmd0aDsK
ICAgICAgICAgICAgIG1pc3NwZWxsaW5nLnJlcGxhY2VtZW50ID0gY2xpZW50LT5nZXRBdXRvQ29y
cmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChTdHJpbmcodGV4dCArIG1pc3NwZWxsaW5n
LmxvY2F0aW9uLCBtaXNzcGVsbGluZy5sZW5ndGgpKTsKICAgICAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKG1pc3NwZWxsaW5nKTsKQEAgLTY0MCwxNSArNjQwLDE0IEBAIGJvb2wgVGV4dENoZWNraW5n
SGVscGVyOjp1bmlmaWVkVGV4dENoZWMKICAgICByZXR1cm4gbV9yYW5nZSAmJiBXZWJDb3JlOjp1
bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgp
KTsKIH0KIAotdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCogY2xp
ZW50LCBjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4mIHJlc3VsdHMpCit2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRleHRDaGVj
a2VyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBUZXh0Q2hl
Y2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYg
cmVzdWx0cykKIHsKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogICAgIHJlc3VsdHMg
PSBjbGllbnQtPmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcodGV4dCwgbGVuZ3RoKSwg
Y2hlY2tpbmdUeXBlcyk7CiAjZWxzZQogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHNw
ZWxsaW5nUmVzdWx0OwogICAgIGlmIChjaGVja2luZ1R5cGVzICYgVGV4dENoZWNraW5nVHlwZVNw
ZWxsaW5nKQotICAgICAgICBmaW5kTWlzc3BlbGxpbmdzKGNsaWVudCwgdGV4dCwgMCwgbGVuZ3Ro
LCBzcGVsbGluZ1Jlc3VsdCk7CisgICAgICAgIGZpbmRNaXNzcGVsbGluZ3MoY2xpZW50LCB0ZXh0
LCBsZW5ndGgsIHNwZWxsaW5nUmVzdWx0KTsKIAogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQog
ICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGdyYW1tYXJSZXN1bHQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCShyZXZpc2lvbiAxNjIwNDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4Miw4ICsyODIsNyBAQCBzdGF0aWMgY29uc3QgSW5saW5lQm94KiBsb2dpY2FsbHlOZXh0Qm94
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFr
SXRlcmF0b3JGb3JNaW5PZmZzZXRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2li
bGVQb3NpdGlvbiwgY29uc3QgSW5saW5lVGV4dEJveCogdGV4dEJveCwKLSAgICBpbnQmIHByZXZp
b3VzQm94TGVuZ3RoLCBib29sJiBwcmV2aW91c0JveEluRGlmZmVyZW50QmxvY2ssIFZlY3RvcjxV
Q2hhciwgMTAyND4mIHN0cmluZywgQ2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlcyYgbGVh
ZkJveGVzKQorc3RhdGljIFVCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvckZvck1pbk9m
ZnNldEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBjb25z
dCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQmIHByZXZpb3VzQm94TGVuZ3RoLCBib29sJiBw
cmV2aW91c0JveEluRGlmZmVyZW50QmxvY2ssIFZlY3RvcjxVQ2hhciwgMTAyND4mIHN0cmluZywg
Q2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlcyYgbGVhZkJveGVzKQogewogICAgIHByZXZp
b3VzQm94SW5EaWZmZXJlbnRCbG9jayA9IGZhbHNlOwogCkBAIC0zMDEsMTEgKzMwMCwxMCBAQCBz
dGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhCiAgICAgc3RyaW5nLmFwcGVu
ZCh0ZXh0Qm94LT5yZW5kZXJlcigpLnRleHQoKS0+ZGVwcmVjYXRlZENoYXJhY3RlcnMoKSArIHRl
eHRCb3gtPnN0YXJ0KCksIHRleHRCb3gtPmxlbigpKTsKICAgICBsZW4gKz0gdGV4dEJveC0+bGVu
KCk7CiAKLSAgICByZXR1cm4gd29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nLmRhdGEoKSwgbGVuKTsK
LX0gCisgICAgcmV0dXJuIHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoc3RyaW5nLmRhdGEo
KSwgbGVuKSk7Cit9CiAKLXN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0
b3JGb3JNYXhPZmZzZXRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Np
dGlvbiwgY29uc3QgSW5saW5lVGV4dEJveCogdGV4dEJveCwKLSAgICBib29sJiBuZXh0Qm94SW5E
aWZmZXJlbnRCbG9jaywgVmVjdG9yPFVDaGFyLCAxMDI0PiYgc3RyaW5nLCBDYWNoZWRMb2dpY2Fs
bHlPcmRlcmVkTGVhZkJveGVzJiBsZWFmQm94ZXMpCitzdGF0aWMgVUJyZWFrSXRlcmF0b3IqIHdv
cmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiB2aXNpYmxlUG9zaXRpb24sIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gsIGJvb2wmIG5l
eHRCb3hJbkRpZmZlcmVudEJsb2NrLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiBzdHJpbmcsIENhY2hl
ZExvZ2ljYWxseU9yZGVyZWRMZWFmQm94ZXMmIGxlYWZCb3hlcykKIHsKICAgICBuZXh0Qm94SW5E
aWZmZXJlbnRCbG9jayA9IGZhbHNlOwogCkBAIC0zMjIsMzggKzMyMCwzNyBAQCBzdGF0aWMgVGV4
dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhCiAgICAgICAgIGxlbiArPSBuZXh0VGV4dEJv
eC0+bGVuKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHdvcmRCcmVha0l0ZXJhdG9yKHN0cmluZy5k
YXRhKCksIGxlbik7Ci19IAorICAgIHJldHVybiB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3
KHN0cmluZy5kYXRhKCksIGxlbikpOworfQogCi1zdGF0aWMgYm9vbCBpc0xvZ2ljYWxTdGFydE9m
V29yZChUZXh0QnJlYWtJdGVyYXRvciogaXRlciwgaW50IHBvc2l0aW9uLCBib29sIGhhcmRMaW5l
QnJlYWspCitzdGF0aWMgYm9vbCBpc0xvZ2ljYWxTdGFydE9mV29yZChVQnJlYWtJdGVyYXRvciog
aXRlciwgaW50IHBvc2l0aW9uLCBib29sIGhhcmRMaW5lQnJlYWspCiB7Ci0gICAgYm9vbCBib3Vu
ZGFyeSA9IGhhcmRMaW5lQnJlYWsgPyB0cnVlIDogaXNUZXh0QnJlYWsoaXRlciwgcG9zaXRpb24p
OworICAgIGJvb2wgYm91bmRhcnkgPSBoYXJkTGluZUJyZWFrID8gdHJ1ZSA6IHVicmtfaXNCb3Vu
ZGFyeShpdGVyLCBwb3NpdGlvbik7CiAgICAgaWYgKCFib3VuZGFyeSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgdGV4dEJyZWFrRm9sbG93aW5nKGl0ZXIsIHBvc2l0aW9uKTsKKyAgICB1
YnJrX2ZvbGxvd2luZyhpdGVyLCBwb3NpdGlvbik7CiAgICAgLy8gaXNXb3JkVGV4dEJyZWFrIHJl
dHVybnMgdHJ1ZSBhZnRlciBtb3ZpbmcgYWNyb3NzIGEgd29yZCBhbmQgZmFsc2UgYWZ0ZXIgbW92
aW5nIGFjcm9zcyBhIHB1bmN0dWF0aW9uL3NwYWNlLgotICAgIHJldHVybiBpc1dvcmRUZXh0QnJl
YWsoaXRlcik7CisgICAgcmV0dXJuIHVicmtfZ2V0UnVsZVN0YXR1cyhpdGVyKSAhPSBVQlJLX1dP
UkRfTk9ORTsKIH0KIAotc3RhdGljIGJvb2wgaXNsb2dpY2FsRW5kT2ZXb3JkKFRleHRCcmVha0l0
ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKK3N0YXRpYyBi
b29sIGlzbG9naWNhbEVuZE9mV29yZChVQnJlYWtJdGVyYXRvciogaXRlciwgaW50IHBvc2l0aW9u
LCBib29sIGhhcmRMaW5lQnJlYWspCiB7Ci0gICAgYm9vbCBib3VuZGFyeSA9IGlzVGV4dEJyZWFr
KGl0ZXIsIHBvc2l0aW9uKTsKLSAgICByZXR1cm4gKGhhcmRMaW5lQnJlYWsgfHwgYm91bmRhcnkp
ICYmIGlzV29yZFRleHRCcmVhayhpdGVyKTsKKyAgICBib29sIGJvdW5kYXJ5ID0gdWJya19pc0Jv
dW5kYXJ5KGl0ZXIsIHBvc2l0aW9uKTsKKyAgICByZXR1cm4gKGhhcmRMaW5lQnJlYWsgfHwgYm91
bmRhcnkpICYmIHVicmtfZ2V0UnVsZVN0YXR1cyhpdGVyKSAhPSBVQlJLX1dPUkRfTk9ORTsKIH0K
IAogZW51bSBDdXJzb3JNb3ZlbWVudERpcmVjdGlvbiB7IE1vdmVMZWZ0LCBNb3ZlUmlnaHQgfTsK
IAotc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXN1YWxXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIEN1cnNvck1vdmVtZW50RGlyZWN0aW9uIGRpcmVj
dGlvbiwgCi0gICAgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0KQorc3RhdGljIFZpc2li
bGVQb3NpdGlvbiB2aXN1YWxXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNp
YmxlUG9zaXRpb24sIEN1cnNvck1vdmVtZW50RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBza2lw
c1NwYWNlV2hlbk1vdmluZ1JpZ2h0KQogewogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIFRleHREaXJlY3Rp
b24gYmxvY2tEaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKHZpc2libGVQb3Np
dGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICBJbmxpbmVCb3gqIHByZXZpb3VzbHlWaXNpdGVk
Qm94ID0gMDsKKyAgICBJbmxpbmVCb3gqIHByZXZpb3VzbHlWaXNpdGVkQm94ID0gbnVsbHB0cjsK
ICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudCA9IHZpc2libGVQb3NpdGlvbjsKLSAgICBUZXh0
QnJlYWtJdGVyYXRvciogaXRlciA9IDA7CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0ZXIgPSBudWxs
cHRyOwogCiAgICAgQ2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlcyBsZWFmQm94ZXM7CiAg
ICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7CkBAIC0zODUsMTQgKzM4MiwxNCBAQCBzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3VhbFdvcmRQb3NpdGlvCiAgICAgICAgIGVsc2UgaWYgKG9m
ZnNldEluQm94ID09IGJveC0+Y2FyZXRNYXhPZmZzZXQoKSkKICAgICAgICAgICAgIGl0ZXIgPSB3
b3JkQnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5KHZpc2libGVQb3NpdGlvbiwgdGV4
dEJveCwgbmV4dEJveEluRGlmZmVyZW50QmxvY2ssIHN0cmluZywgbGVhZkJveGVzKTsKICAgICAg
ICAgZWxzZSBpZiAobW92aW5nSW50b05ld0JveCkgewotICAgICAgICAgICAgaXRlciA9IHdvcmRC
cmVha0l0ZXJhdG9yKHRleHRCb3gtPnJlbmRlcmVyKCkudGV4dCgpLT5kZXByZWNhdGVkQ2hhcmFj
dGVycygpICsgdGV4dEJveC0+c3RhcnQoKSwgdGV4dEJveC0+bGVuKCkpOworICAgICAgICAgICAg
aXRlciA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcodGV4dEJveC0+cmVuZGVyZXIoKS50
ZXh0KCkpLnN1YnN0cmluZyh0ZXh0Qm94LT5zdGFydCgpLCB0ZXh0Qm94LT5sZW4oKSkpOwogICAg
ICAgICAgICAgcHJldmlvdXNseVZpc2l0ZWRCb3ggPSBib3g7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoIWl0ZXIpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICB0ZXh0QnJlYWtGaXJz
dChpdGVyKTsKKyAgICAgICAgdWJya19maXJzdChpdGVyKTsKICAgICAgICAgaW50IG9mZnNldElu
SXRlcmF0b3IgPSBvZmZzZXRJbkJveCAtIHRleHRCb3gtPnN0YXJ0KCkgKyBwcmV2aW91c0JveExl
bmd0aDsKIAogICAgICAgICBib29sIGlzV29yZEJyZWFrOwpAQCAtMTA0Niw5ICsxMDQzLDkgQEAg
VmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVgogCiBzdGF0aWMgdW5zaWdu
ZWQgc3RhcnRTZW50ZW5jZUJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkLCBCb3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFiaWxpdHksIGJv
b2wmKQogewotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJ
dGVyYXRvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFVCcmVha0l0ZXJhdG9yKiBpdGVyYXRv
ciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGxlbmd0aCkp
OwogICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNhbiByZXR1cm4gLTE7IHdl
IGRvbid0IGhhbmRsZSB0aGF0LgotICAgIHJldHVybiB0ZXh0QnJlYWtQcmVjZWRpbmcoaXRlcmF0
b3IsIGxlbmd0aCk7CisgICAgcmV0dXJuIHVicmtfcHJlY2VkaW5nKGl0ZXJhdG9yLCBsZW5ndGgp
OwogfQogCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbnRlbmNlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmYykKQEAgLTEwNTgsOCArMTA1NSw4IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2Vu
dGVuY2UoY29uc3QgVmkKIAogc3RhdGljIHVuc2lnbmVkIGVuZFNlbnRlbmNlQm91bmRhcnkoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQsIEJvdW5kYXJ5
U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSwgYm9vbCYpCiB7Ci0gICAgVGV4dEJyZWFrSXRlcmF0
b3IqIGl0ZXJhdG9yID0gc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNoYXJhY3RlcnMsIGxlbmd0aCk7
Ci0gICAgcmV0dXJuIHRleHRCcmVha05leHQoaXRlcmF0b3IpOworICAgIFVCcmVha0l0ZXJhdG9y
KiBpdGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KGNoYXJhY3RlcnMs
IGxlbmd0aCkpOworICAgIHJldHVybiB1YnJrX25leHQoaXRlcmF0b3IpOwogfQogCiAvLyBGSVhN
RTogVGhpcyBpbmNsdWRlcyB0aGUgc3BhY2UgYWZ0ZXIgdGhlIHB1bmN0dWF0aW9uIHRoYXQgbWFy
a3MgdGhlIGVuZCBvZiB0aGUgc2VudGVuY2UuCkBAIC0xMDcxLDkgKzEwNjgsOSBAQCBWaXNpYmxl
UG9zaXRpb24gZW5kT2ZTZW50ZW5jZShjb25zdCBWaXNpCiBzdGF0aWMgdW5zaWduZWQgcHJldmlv
dXNTZW50ZW5jZVBvc2l0aW9uQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSwg
Ym9vbCYpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaWRlbnRpY2FsIHRvIHN0YXJ0U2VudGVu
Y2VCb3VuZGFyeS4gSSdtIHByZXR0eSBzdXJlIHRoYXQncyBub3QgcmlnaHQuCi0gICAgVGV4dEJy
ZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNoYXJhY3RlcnMs
IGxlbmd0aCk7CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gc2VudGVuY2VCcmVha0l0
ZXJhdG9yKFN0cmluZ1ZpZXcoY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAgLy8gRklYTUU6IFRo
ZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FuIHJldHVybiAtMTsgd2UgZG9uJ3QgaGFuZGxlIHRoYXQu
Ci0gICAgcmV0dXJuIHRleHRCcmVha1ByZWNlZGluZyhpdGVyYXRvciwgbGVuZ3RoKTsKKyAgICBy
ZXR1cm4gdWJya19wcmVjZWRpbmcoaXRlcmF0b3IsIGxlbmd0aCk7CiB9CiAKIFZpc2libGVQb3Np
dGlvbiBwcmV2aW91c1NlbnRlbmNlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQpA
QCAtMTA4Niw4ICsxMDgzLDggQEAgc3RhdGljIHVuc2lnbmVkIG5leHRTZW50ZW5jZVBvc2l0aW9u
Qm91bgogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGlkZW50aWNhbCB0byBlbmRTZW50ZW5jZUJv
dW5kYXJ5LiBUaGlzIGlzbid0IHJpZ2h0LCBpdCBuZWVkcyB0byAKICAgICAvLyBtb3ZlIHRvIHRo
ZSBlcXVpdmxhbnQgcG9zaXRpb24gaW4gdGhlIGZvbGxvd2luZyBzZW50ZW5jZS4KLSAgICBUZXh0
QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY2hhcmFjdGVy
cywgbGVuZ3RoKTsKLSAgICByZXR1cm4gdGV4dEJyZWFrRm9sbG93aW5nKGl0ZXJhdG9yLCAwKTsK
KyAgICBVQnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoU3Ry
aW5nVmlldyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAgICByZXR1cm4gdWJya19mb2xsb3dpbmco
aXRlcmF0b3IsIDApOwogfQogCiBWaXNpYmxlUG9zaXRpb24gbmV4dFNlbnRlbmNlUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Ub3Vj
aEFkanVzdG1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hB
ZGp1c3RtZW50LmNwcAkocmV2aXNpb24gMTYyMDQzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9U
b3VjaEFkanVzdG1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsMTMgKzE2MiwxMyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kQ29udGV4dFN1YnRhcmdlCiAgICAgaWYgKHRleHRSZW5k
ZXJlci0+ZnJhbWUoKS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFNlbGVjdE9uQ29udGV4dHVh
bE1lbnVDbGljaygpKSB7CiAgICAgICAgIC8vIE1ha2Ugc3VidGFyZ2V0cyBvdXQgb2YgZXZlcnkg
d29yZC4KICAgICAgICAgU3RyaW5nIHRleHRWYWx1ZSA9IHRleHROb2RlLT5kYXRhKCk7Ci0gICAg
ICAgIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkSXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcih0
ZXh0VmFsdWUuY2hhcmFjdGVycygpLCB0ZXh0VmFsdWUubGVuZ3RoKCkpOwotICAgICAgICBpbnQg
bGFzdE9mZnNldCA9IHRleHRCcmVha0ZpcnN0KHdvcmRJdGVyYXRvcik7Ci0gICAgICAgIGlmIChs
YXN0T2Zmc2V0ID09IC0xKQorICAgICAgICBVQnJlYWtJdGVyYXRvciogd29yZEl0ZXJhdG9yID0g
d29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyh0ZXh0VmFsdWUpKTsKKyAgICAgICAgaW50IGxh
c3RPZmZzZXQgPSB1YnJrX2ZpcnN0KHdvcmRJdGVyYXRvcik7CisgICAgICAgIGlmIChsYXN0T2Zm
c2V0ID09IFVCUktfRE9ORSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaW50IG9mZnNl
dDsKLSAgICAgICAgd2hpbGUgKChvZmZzZXQgPSB0ZXh0QnJlYWtOZXh0KHdvcmRJdGVyYXRvcikp
ICE9IC0xKSB7Ci0gICAgICAgICAgICBpZiAoaXNXb3JkVGV4dEJyZWFrKHdvcmRJdGVyYXRvcikp
IHsKKyAgICAgICAgd2hpbGUgKChvZmZzZXQgPSB1YnJrX25leHQod29yZEl0ZXJhdG9yKSkgIT0g
VUJSS19ET05FKSB7CisgICAgICAgICAgICBpZiAodWJya19nZXRSdWxlU3RhdHVzKHdvcmRJdGVy
YXRvcikgIT0gVUJSS19XT1JEX05PTkUpIHsKICAgICAgICAgICAgICAgICBWZWN0b3I8RmxvYXRR
dWFkPiBxdWFkcyA9IHRleHRSZW5kZXJlci0+YWJzb2x1dGVRdWFkc0ZvclJhbmdlKGxhc3RPZmZz
ZXQsIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgYXBwZW5kUXVhZHNUb1N1YnRhcmdldExpc3Qo
cXVhZHMsIHRleHROb2RlLCBzdWJ0YXJnZXRzKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cAkocmV2aXNpb24gMTYyMDQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U3RyaW5nVHJ1bmNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTkgKzQyLDE5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdHlwZWRlZiB1bnNpZ25lZCBUcnVuY2F0aW9uRnVuY3Rpb24o
Y29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBrZWVwQ291bnQsIFVDaGFy
KiBidWZmZXIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMpOwogCi1zdGF0aWMgaW5saW5lIGlu
dCB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKFRleHRCcmVha0l0ZXJhdG9yKiBpdCwgaW50IG9mZnNl
dCkKK3N0YXRpYyBpbmxpbmUgaW50IHRleHRCcmVha0F0T3JQcmVjZWRpbmcoVUJyZWFrSXRlcmF0
b3IqIGl0LCBpbnQgb2Zmc2V0KQogewotICAgIGlmIChpc1RleHRCcmVhayhpdCwgb2Zmc2V0KSkK
KyAgICBpZiAodWJya19pc0JvdW5kYXJ5KGl0LCBvZmZzZXQpKQogICAgICAgICByZXR1cm4gb2Zm
c2V0OwogCi0gICAgaW50IHJlc3VsdCA9IHRleHRCcmVha1ByZWNlZGluZyhpdCwgb2Zmc2V0KTsK
LSAgICByZXR1cm4gcmVzdWx0ID09IFRleHRCcmVha0RvbmUgPyAwIDogcmVzdWx0OworICAgIGlu
dCByZXN1bHQgPSB1YnJrX3ByZWNlZGluZyhpdCwgb2Zmc2V0KTsKKyAgICByZXR1cm4gcmVzdWx0
ID09IFVCUktfRE9ORSA/IDAgOiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGJvdW5k
ZWRUZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGl0LCBpbnQgb2Zmc2V0LCBp
bnQgbGVuZ3RoKQorc3RhdGljIGlubGluZSBpbnQgYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhV
QnJlYWtJdGVyYXRvciogaXQsIGludCBvZmZzZXQsIGludCBsZW5ndGgpCiB7Ci0gICAgaW50IHJl
c3VsdCA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwgb2Zmc2V0KTsKLSAgICByZXR1cm4gcmVzdWx0
ID09IFRleHRCcmVha0RvbmUgPyBsZW5ndGggOiByZXN1bHQ7CisgICAgaW50IHJlc3VsdCA9IHVi
cmtfZm9sbG93aW5nKGl0LCBvZmZzZXQpOworICAgIHJldHVybiByZXN1bHQgPT0gVUJSS19ET05F
ID8gbGVuZ3RoIDogcmVzdWx0OwogfQogCiBzdGF0aWMgdW5zaWduZWQgY2VudGVyVHJ1bmNhdGVU
b0J1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBr
ZWVwQ291bnQsIFVDaGFyKiBidWZmZXIsIGJvb2wgc2hvdWxkSW5zZXJ0RWxsaXBzaXMpCkBAIC02
Myw3ICs2Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjZW50ZXJUcnVuY2F0ZVRvQnVmZmVyKGMKICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihrZWVwQ291bnQgPCBTVFJJTkdfQlVG
RkVSX1NJWkUpOwogICAgIAogICAgIHVuc2lnbmVkIG9taXRTdGFydCA9IChrZWVwQ291bnQgKyAx
KSAvIDI7Ci0gICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChzdHJpbmcuZGVw
cmVjYXRlZENoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yIGl0KFN0cmluZ1ZpZXcoc3RyaW5nKS5zdWJzdHJpbmcoMCwgbGVuZ3RoKSk7CiAg
ICAgdW5zaWduZWQgb21pdEVuZCA9IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoaXQsIG9taXRT
dGFydCArIChsZW5ndGggLSBrZWVwQ291bnQpIC0gMSwgbGVuZ3RoKTsKICAgICBvbWl0U3RhcnQg
PSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LCBvbWl0U3RhcnQpOwogCkBAIC0xMTUsNyArMTE1
LDcgQEAgc3RhdGljIHVuc2lnbmVkIHJpZ2h0VHJ1bmNhdGVUb0J1ZmZlcihjbwogICAgICAgICAt
LWtlZXBDb3VudDsKICNlbmRpZgogCi0gICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRv
ciBpdChzdHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICBOb25TaGFy
ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KFN0cmluZ1ZpZXcoc3RyaW5nKS5zdWJzdHJpbmco
MCwgbGVuZ3RoKSk7CiAgICAgdW5zaWduZWQga2VlcExlbmd0aCA9IHRleHRCcmVha0F0T3JQcmVj
ZWRpbmcoaXQsIGtlZXBDb3VudCk7CiAgICAgdW5zaWduZWQgdHJ1bmNhdGVkTGVuZ3RoID0gc2hv
dWxkSW5zZXJ0RWxsaXBzaXMgPyBrZWVwTGVuZ3RoICsgMSA6IGtlZXBMZW5ndGg7CiAKQEAgLTEz
MSw3ICsxMzEsNyBAQCBzdGF0aWMgdW5zaWduZWQgcmlnaHRDbGlwVG9DaGFyYWN0ZXJCdWZmCiAg
ICAgQVNTRVJUKGtlZXBDb3VudCA8IGxlbmd0aCk7CiAgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNU
UklOR19CVUZGRVJfU0laRSk7CiAKLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
IGl0KHN0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBsZW5ndGgpOworICAgIE5vblNoYXJl
ZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoU3RyaW5nVmlldyhzdHJpbmcpLnN1YnN0cmluZygw
LCBsZW5ndGgpKTsKICAgICB1bnNpZ25lZCBrZWVwTGVuZ3RoID0gdGV4dEJyZWFrQXRPclByZWNl
ZGluZyhpdCwga2VlcENvdW50KTsKICAgICBtZW1jcHkoYnVmZmVyLCBzdHJpbmcuZGVwcmVjYXRl
ZENoYXJhY3RlcnMoKSwgc2l6ZW9mKFVDaGFyKSAqIGtlZXBMZW5ndGgpOwogCkBAIC0xNDMsNyAr
MTQzLDcgQEAgc3RhdGljIHVuc2lnbmVkIHJpZ2h0Q2xpcFRvV29yZEJ1ZmZlcihjbwogICAgIEFT
U0VSVChrZWVwQ291bnQgPCBsZW5ndGgpOwogICAgIEFTU0VSVChrZWVwQ291bnQgPCBTVFJJTkdf
QlVGRkVSX1NJWkUpOwogCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRl
cmF0b3Ioc3RyaW5nLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIGxlbmd0aCk7CisgICAgVUJyZWFr
SXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyhzdHJpbmcpLnN1YnN0
cmluZygwLCBsZW5ndGgpKTsKICAgICB1bnNpZ25lZCBrZWVwTGVuZ3RoID0gdGV4dEJyZWFrQXRP
clByZWNlZGluZyhpdCwga2VlcENvdW50KTsKICAgICBtZW1jcHkoYnVmZmVyLCBzdHJpbmcuZGVw
cmVjYXRlZENoYXJhY3RlcnMoKSwgc2l6ZW9mKFVDaGFyKSAqIGtlZXBMZW5ndGgpOwogCkBAIC0x
NjMsNyArMTYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxlZnRUcnVuY2F0ZVRvQnVmZmVyKGNvbgog
CiAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IGxlbmd0aCAtIGtlZXBDb3VudDsKIAotICAgIE5v
blNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoc3RyaW5nLmRlcHJlY2F0ZWRDaGFyYWN0
ZXJzKCksIGxlbmd0aCk7CisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChT
dHJpbmdWaWV3KHN0cmluZykuc3Vic3RyaW5nKDAsIGxlbmd0aCkpOwogICAgIHVuc2lnbmVkIGFk
anVzdGVkU3RhcnRJbmRleCA9IHN0YXJ0SW5kZXg7CiAgICAgc3RhcnRJbmRleCA9IGJvdW5kZWRU
ZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHN0YXJ0SW5kZXgsIGxlbmd0aCAtIHN0YXJ0SW5kZXgpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTYyMDQzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSwyMSArMjA5LDIxIEBAIGludCBDb21wbGV4VGV4
dENvbnRyb2xsZXI6Om9mZnNldEZvclBvc2kKICAgICAgICAgICAgICAgICAvLyBsaWdhdHVyZSBj
YXJldHMuCiAgICAgICAgICAgICAgICAgQ0ZJbmRleCBoaXRJbmRleCA9IGhpdEdseXBoU3RhcnQg
KyAoaGl0R2x5cGhFbmQgLSBoaXRHbHlwaFN0YXJ0KSAqIChtX3J1bi5sdHIoKSA/IHggLyBhZGp1
c3RlZEFkdmFuY2UgOiAxIC0geCAvIGFkanVzdGVkQWR2YW5jZSk7CiAgICAgICAgICAgICAgICAg
aW50IHN0cmluZ0xlbmd0aCA9IGNvbXBsZXhUZXh0UnVuLnN0cmluZ0xlbmd0aCgpOwotICAgICAg
ICAgICAgICAgIFRleHRCcmVha0l0ZXJhdG9yKiBjdXJzb3JQb3NpdGlvbkl0ZXJhdG9yID0gY3Vy
c29yTW92ZW1lbnRJdGVyYXRvcihjb21wbGV4VGV4dFJ1bi5jaGFyYWN0ZXJzKCksIHN0cmluZ0xl
bmd0aCk7CisgICAgICAgICAgICAgICAgVUJyZWFrSXRlcmF0b3IqIGN1cnNvclBvc2l0aW9uSXRl
cmF0b3IgPSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKFN0cmluZ1ZpZXcoY29tcGxleFRleHRSdW4u
Y2hhcmFjdGVycygpLCBzdHJpbmdMZW5ndGgpKTsKICAgICAgICAgICAgICAgICBpbnQgY2x1c3Rl
clN0YXJ0OwotICAgICAgICAgICAgICAgIGlmIChpc1RleHRCcmVhayhjdXJzb3JQb3NpdGlvbkl0
ZXJhdG9yLCBoaXRJbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKHVicmtfaXNCb3VuZGFyeShj
dXJzb3JQb3NpdGlvbkl0ZXJhdG9yLCBoaXRJbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIGNs
dXN0ZXJTdGFydCA9IGhpdEluZGV4OwogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBjbHVzdGVyU3RhcnQgPSB0ZXh0QnJlYWtQcmVjZWRpbmcoY3Vyc29yUG9zaXRp
b25JdGVyYXRvciwgaGl0SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2x1c3RlclN0
YXJ0ID09IFRleHRCcmVha0RvbmUpCisgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJTdGFydCA9
IHVicmtfcHJlY2VkaW5nKGN1cnNvclBvc2l0aW9uSXRlcmF0b3IsIGhpdEluZGV4KTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNsdXN0ZXJTdGFydCA9PSBVQlJLX0RPTkUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjbHVzdGVyU3RhcnQgPSAwOwogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgIGlmICghaW5jbHVkZVBhcnRpYWxHbHlwaHMpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjb21wbGV4VGV4dFJ1bi5zdHJpbmdMb2NhdGlvbigpICsgY2x1c3RlclN0YXJ0
OwogCi0gICAgICAgICAgICAgICAgaW50IGNsdXN0ZXJFbmQgPSB0ZXh0QnJlYWtGb2xsb3dpbmco
Y3Vyc29yUG9zaXRpb25JdGVyYXRvciwgaGl0SW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChj
bHVzdGVyRW5kID09IFRleHRCcmVha0RvbmUpCisgICAgICAgICAgICAgICAgaW50IGNsdXN0ZXJF
bmQgPSB1YnJrX2ZvbGxvd2luZyhjdXJzb3JQb3NpdGlvbkl0ZXJhdG9yLCBoaXRJbmRleCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGNsdXN0ZXJFbmQgPT0gVUJSS19ET05FKQogICAgICAgICAgICAg
ICAgICAgICBjbHVzdGVyRW5kID0gc3RyaW5nTGVuZ3RoOwogCiAgICAgICAgICAgICAgICAgQ0dG
bG9hdCBjbHVzdGVyV2lkdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0QWxsSW5PbmUuY3BwCShyZXZpc2lvbiAxNjIwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDYgQEAKIAogI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmNwcCIKICNpbmNsdWRlICJUZXh0QnJl
YWtJdGVyYXRvci5jcHAiCi0jaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwIgogI2lu
Y2x1ZGUgIlRleHRDb2RlYy5jcHAiCiAjaW5jbHVkZSAiVGV4dENvZGVjSUNVLmNwcCIKICNpbmNs
dWRlICJUZXh0Q29kZWNMYXRpbjEuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0Qm91bmRhcmllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAJKHJldmlzaW9uIDE2MjA0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MSwyNyArNjEsMjcgQEAgaW50IHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4dChj
b25zdAogCiBpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KGNvbnN0IFVDaGFyKiBjaGFycywgaW50
IGxlbiwgaW50IHBvc2l0aW9uLCBib29sIGZvcndhcmQpCiB7Ci0gICAgVGV4dEJyZWFrSXRlcmF0
b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7CisgICAgVUJyZWFrSXRlcmF0
b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyhjaGFycywgbGVuKSk7CiAKICAg
ICBpZiAoZm9yd2FyZCkgewotICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVha0ZvbGxvd2luZyhp
dCwgcG9zaXRpb24pOwotICAgICAgICB3aGlsZSAocG9zaXRpb24gIT0gVGV4dEJyZWFrRG9uZSkg
eworICAgICAgICBwb3NpdGlvbiA9IHVicmtfZm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAg
ICAgIHdoaWxlIChwb3NpdGlvbiAhPSBVQlJLX0RPTkUpIHsKICAgICAgICAgICAgIC8vIFdlIHN0
b3Agc2VhcmNoaW5nIHdoZW4gdGhlIGNoYXJhY3RlciBwcmVjZWVkaW5nIHRoZSBicmVhayBpcyBh
bHBoYW51bWVyaWMuCiAgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBsZW4gJiYgdV9pc2FsbnVt
KGNoYXJzW3Bvc2l0aW9uIC0gMV0pKQogICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsK
IAotICAgICAgICAgICAgcG9zaXRpb24gPSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHBvc2l0aW9u
KTsKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdWJya19mb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBsZW47CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
cG9zaXRpb24gPSB0ZXh0QnJlYWtQcmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKLSAgICAgICAgd2hp
bGUgKHBvc2l0aW9uICE9IFRleHRCcmVha0RvbmUpIHsKKyAgICAgICAgcG9zaXRpb24gPSB1YnJr
X3ByZWNlZGluZyhpdCwgcG9zaXRpb24pOworICAgICAgICB3aGlsZSAocG9zaXRpb24gIT0gVUJS
S19ET05FKSB7CiAgICAgICAgICAgICAvLyBXZSBzdG9wIHNlYXJjaGluZyB3aGVuIHRoZSBjaGFy
YWN0ZXIgZm9sbG93aW5nIHRoZSBicmVhayBpcyBhbHBoYW51bWVyaWMuCiAgICAgICAgICAgICBp
ZiAocG9zaXRpb24gPiAwICYmIHVfaXNhbG51bShjaGFyc1twb3NpdGlvbl0pKQogICAgICAgICAg
ICAgICAgIHJldHVybiBwb3NpdGlvbjsKIAotICAgICAgICAgICAgcG9zaXRpb24gPSB0ZXh0QnJl
YWtQcmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdWJya19w
cmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiAwOwpA
QCAtOTAsMTkgKzkwLDE5IEBAIGludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgoY29uc3QgVUNoYXIq
IGMKIAogdm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwg
aW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKIHsKLSAgICBUZXh0QnJlYWtJdGVy
YXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywgbGVuKTsKLSAgICAqZW5kID0gdGV4
dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0ID0g
d29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyhjaGFycywgbGVuKSk7CisgICAgKmVuZCA9IHVi
cmtfZm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CiAgICAgaWYgKCplbmQgPCAwKQotICAgICAgICAq
ZW5kID0gdGV4dEJyZWFrTGFzdChpdCk7Ci0gICAgKnN0YXJ0ID0gdGV4dEJyZWFrUHJldmlvdXMo
aXQpOworICAgICAgICAqZW5kID0gdWJya19sYXN0KGl0KTsKKyAgICAqc3RhcnQgPSB1YnJrX3By
ZXZpb3VzKGl0KTsKIH0KIAogdm9pZCBmaW5kRW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBj
aGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIGVuZCkKIHsKLSAgICBUZXh0QnJlYWtJ
dGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywgbGVuKTsKLSAgICAqZW5kID0g
dGV4dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0
ID0gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyhjaGFycywgbGVuKSk7CisgICAgKmVuZCA9
IHVicmtfZm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CiAgICAgaWYgKCplbmQgPCAwKQotICAgICAg
ICAqZW5kID0gdGV4dEJyZWFrTGFzdChpdCk7CisgICAgICAgICplbmQgPSB1YnJrX2xhc3QoaXQp
OwogfQogCiAjZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxNjIw
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogCisjaW5jbHVkZSAiTGluZUJyZWFrSXRl
cmF0b3JQb29sSUNVLmgiCisjaW5jbHVkZSAiVVRleHRQcm92aWRlckxhdGluMS5oIgorI2luY2x1
ZGUgIlVUZXh0UHJvdmlkZXJVVEYxNi5oIgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdW5zaWduZWQgbnVtR3JhcGhlbWVDbHVzdGVycyhjb25zdCBT
dHJpbmcmIHMpCkBAIC0zNSwxMiArNDAsMTIgQEAgdW5zaWduZWQgbnVtR3JhcGhlbWVDbHVzdGVy
cyhjb25zdCBTdHJpbgogICAgIGlmIChzLmlzOEJpdCgpICYmICFzLmNvbnRhaW5zKCdccicpKQog
ICAgICAgICByZXR1cm4gc3RyaW5nTGVuZ3RoOwogCi0gICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJl
YWtJdGVyYXRvciBpdChzLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIHN0cmluZ0xlbmd0aCk7Cisg
ICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChzKTsKICAgICBpZiAoIWl0KQog
ICAgICAgICByZXR1cm4gc3RyaW5nTGVuZ3RoOwogCiAgICAgdW5zaWduZWQgbnVtID0gMDsKLSAg
ICB3aGlsZSAodGV4dEJyZWFrTmV4dChpdCkgIT0gVGV4dEJyZWFrRG9uZSkKKyAgICB3aGlsZSAo
dWJya19uZXh0KGl0KSAhPSBVQlJLX0RPTkUpCiAgICAgICAgICsrbnVtOwogICAgIHJldHVybiBu
dW07CiB9CkBAIC01NiwxNSArNjEsMjg4IEBAIHVuc2lnbmVkIG51bUNoYXJhY3RlcnNJbkdyYXBo
ZW1lQ2x1c3RlcnMKICAgICBpZiAocy5pczhCaXQoKSAmJiAhcy5jb250YWlucygnXHInKSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWluKHN0cmluZ0xlbmd0aCwgbnVtR3JhcGhlbWVDbHVzdGVycyk7
CiAKLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHMuZGVwcmVjYXRlZENo
YXJhY3RlcnMoKSwgc3RyaW5nTGVuZ3RoKTsKKyAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0
ZXJhdG9yIGl0KHMpOwogICAgIGlmICghaXQpCiAgICAgICAgIHJldHVybiBzdGQ6Om1pbihzdHJp
bmdMZW5ndGgsIG51bUdyYXBoZW1lQ2x1c3RlcnMpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bUdyYXBoZW1lQ2x1c3RlcnM7ICsraSkgewotICAgICAgICBpZiAodGV4dEJyZWFr
TmV4dChpdCkgPT0gVGV4dEJyZWFrRG9uZSkKKyAgICAgICAgaWYgKHVicmtfbmV4dChpdCkgPT0g
VUJSS19ET05FKQogICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0xlbmd0aDsKICAgICB9Ci0gICAg
cmV0dXJuIHRleHRCcmVha0N1cnJlbnQoaXQpOworICAgIHJldHVybiB1YnJrX2N1cnJlbnQoaXQp
OworfQorCisvLyBJdGVyYXRvciBpbml0aWFsaXphdGlvbgorCitzdGF0aWMgVUJyZWFrSXRlcmF0
b3IqIGluaXRpYWxpemVJdGVyYXRvcihVQnJlYWtJdGVyYXRvclR5cGUgdHlwZSwgY29uc3QgY2hh
ciogbG9jYWxlID0gY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkpCit7CisgICAgVUVycm9yQ29k
ZSBvcGVuU3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIFVCcmVha0l0ZXJhdG9yKiBpdGVyYXRv
ciA9IHVicmtfb3Blbih0eXBlLCBsb2NhbGUsIDAsIDAsICZvcGVuU3RhdHVzKTsKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKFVfU1VDQ0VTUyhvcGVuU3RhdHVzKSwgIklDVSBjb3VsZCBub3Qgb3Bl
biBhIGJyZWFrIGl0ZXJhdG9yOiAlcyAoJWQpIiwgdV9lcnJvck5hbWUob3BlblN0YXR1cyksIG9w
ZW5TdGF0dXMpOworICAgIHJldHVybiBpdGVyYXRvcjsKK30KKworI2lmICFQTEFURk9STShJT1Mp
CitzdGF0aWMgVUJyZWFrSXRlcmF0b3IqIGluaXRpYWxpemVJdGVyYXRvcldpdGhSdWxlcyhjb25z
dCBjaGFyKiBicmVha1J1bGVzKQoreworICAgIFVQYXJzZUVycm9yIHBhcnNlU3RhdHVzOworICAg
IFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBTdHJpbmcgcnVsZXMo
YnJlYWtSdWxlcyk7CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gdWJya19vcGVuUnVs
ZXMocnVsZXMuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgcnVsZXMubGVuZ3RoKCksIDAsIDAsICZw
YXJzZVN0YXR1cywgJm9wZW5TdGF0dXMpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoVV9TVUND
RVNTKG9wZW5TdGF0dXMpLCAiSUNVIGNvdWxkIG5vdCBvcGVuIGEgYnJlYWsgaXRlcmF0b3I6ICVz
ICglZCkiLCB1X2Vycm9yTmFtZShvcGVuU3RhdHVzKSwgb3BlblN0YXR1cyk7CisgICAgcmV0dXJu
IGl0ZXJhdG9yOworfQorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisKKworLy8gSXRlcmF0b3Ig
dGV4dCBzZXR0aW5nCisKK3N0YXRpYyBVQnJlYWtJdGVyYXRvciogc2V0VGV4dEZvckl0ZXJhdG9y
KFVCcmVha0l0ZXJhdG9yJiBpdGVyYXRvciwgU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgaWYg
KHN0cmluZy5pczhCaXQoKSkgeworICAgICAgICBVVGV4dFdpdGhCdWZmZXIgdGV4dExvY2FsOwor
ICAgICAgICB0ZXh0TG9jYWwudGV4dCA9IFVURVhUX0lOSVRJQUxJWkVSOworICAgICAgICB0ZXh0
TG9jYWwudGV4dC5leHRyYVNpemUgPSBzaXplb2YodGV4dExvY2FsLmJ1ZmZlcik7CisgICAgICAg
IHRleHRMb2NhbC50ZXh0LnBFeHRyYSA9IHRleHRMb2NhbC5idWZmZXI7CisKKyAgICAgICAgVUVy
cm9yQ29kZSBvcGVuU3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICBVVGV4dCogdGV4dCA9
IG9wZW5MYXRpbjFVVGV4dFByb3ZpZGVyKCZ0ZXh0TG9jYWwsIHN0cmluZy5jaGFyYWN0ZXJzOCgp
LCBzdHJpbmcubGVuZ3RoKCksICZvcGVuU3RhdHVzKTsKKyAgICAgICAgaWYgKFVfRkFJTFVSRShv
cGVuU3RhdHVzKSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJ1VGV4dE9wZW5MYXRpbjEgZmFp
bGVkIHdpdGggc3RhdHVzICVkIiwgb3BlblN0YXR1cyk7CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIFVFcnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9IFVf
WkVST19FUlJPUjsKKyAgICAgICAgdWJya19zZXRVVGV4dChyZWludGVycHJldF9jYXN0PFVCcmVh
a0l0ZXJhdG9yKj4oJml0ZXJhdG9yKSwgdGV4dCwgJnNldFRleHRTdGF0dXMpOworICAgICAgICBp
ZiAoVV9GQUlMVVJFKHNldFRleHRTdGF0dXMpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoInVi
cmtfc2V0VVRleHQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgc2V0VGV4dFN0YXR1cyk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHV0ZXh0X2Nsb3Nl
KHRleHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIFVFcnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9
IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWJya19zZXRUZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8VUJy
ZWFrSXRlcmF0b3IqPigmaXRlcmF0b3IpLCBzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5s
ZW5ndGgoKSwgJnNldFRleHRTdGF0dXMpOworICAgICAgICBpZiAoVV9GQUlMVVJFKHNldFRleHRT
dGF0dXMpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJu
ICZpdGVyYXRvcjsKK30KKworc3RhdGljIFVCcmVha0l0ZXJhdG9yKiBzZXRDb250ZXh0QXdhcmVU
ZXh0Rm9ySXRlcmF0b3IoVUJyZWFrSXRlcmF0b3ImIGl0ZXJhdG9yLCBTdHJpbmdWaWV3IHN0cmlu
ZywgY29uc3QgVUNoYXIqIHByaW9yQ29udGV4dCwgdW5zaWduZWQgcHJpb3JDb250ZXh0TGVuZ3Ro
KQoreworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpIHsKKyAgICAgICAgVVRleHRXaXRoQnVmZmVy
IHRleHRMb2NhbDsKKyAgICAgICAgdGV4dExvY2FsLnRleHQgPSBVVEVYVF9JTklUSUFMSVpFUjsK
KyAgICAgICAgdGV4dExvY2FsLnRleHQuZXh0cmFTaXplID0gc2l6ZW9mKHRleHRMb2NhbC5idWZm
ZXIpOworICAgICAgICB0ZXh0TG9jYWwudGV4dC5wRXh0cmEgPSB0ZXh0TG9jYWwuYnVmZmVyOwor
CisgICAgICAgIFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAg
VVRleHQqIHRleHQgPSBvcGVuTGF0aW4xQ29udGV4dEF3YXJlVVRleHRQcm92aWRlcigmdGV4dExv
Y2FsLCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpLCBwcmlvckNvbnRleHQs
IHByaW9yQ29udGV4dExlbmd0aCwgJm9wZW5TdGF0dXMpOworICAgICAgICBpZiAoVV9GQUlMVVJF
KG9wZW5TdGF0dXMpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIm9wZW5MYXRpbjFDb250ZXh0
QXdhcmVVVGV4dFByb3ZpZGVyIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIG9wZW5TdGF0dXMpOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBVRXJyb3JD
b2RlIHNldFRleHRTdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVicmtfc2V0VVRleHQo
cmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KCZpdGVyYXRvciksIHRleHQsICZzZXRU
ZXh0U3RhdHVzKTsKKyAgICAgICAgaWYgKFVfRkFJTFVSRShzZXRUZXh0U3RhdHVzKSkgeworICAg
ICAgICAgICAgTE9HX0VSUk9SKCJ1YnJrX3NldFVUZXh0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIs
IHNldFRleHRTdGF0dXMpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KworICAgICAgICB1dGV4dF9jbG9zZSh0ZXh0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBVVGV4
dCB0ZXh0TG9jYWwgPSBVVEVYVF9JTklUSUFMSVpFUjsKKworICAgICAgICBVRXJyb3JDb2RlIG9w
ZW5TdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIFVUZXh0KiB0ZXh0ID0gb3BlblVURjE2
Q29udGV4dEF3YXJlVVRleHRQcm92aWRlcigmdGV4dExvY2FsLCBzdHJpbmcuY2hhcmFjdGVyczE2
KCksIHN0cmluZy5sZW5ndGgoKSwgcHJpb3JDb250ZXh0LCBwcmlvckNvbnRleHRMZW5ndGgsICZv
cGVuU3RhdHVzKTsKKyAgICAgICAgaWYgKFVfRkFJTFVSRShvcGVuU3RhdHVzKSkgeworICAgICAg
ICAgICAgTE9HX0VSUk9SKCJvcGVuVVRGMTZDb250ZXh0QXdhcmVVVGV4dFByb3ZpZGVyIGZhaWxl
ZCB3aXRoIHN0YXR1cyAlZCIsIG9wZW5TdGF0dXMpOworICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0KKworICAgICAgICBVRXJyb3JDb2RlIHNldFRleHRTdGF0dXMgPSBVX1pFUk9fRVJS
T1I7CisgICAgICAgIHVicmtfc2V0VVRleHQocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRv
cio+KCZpdGVyYXRvciksIHRleHQsICZzZXRUZXh0U3RhdHVzKTsKKyAgICAgICAgaWYgKFVfRkFJ
TFVSRShzZXRUZXh0U3RhdHVzKSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJ1YnJrX3NldFVU
ZXh0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIHNldFRleHRTdGF0dXMpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICB1dGV4dF9jbG9zZSh0ZXh0KTsK
KyAgICB9CisKKyAgICByZXR1cm4gJml0ZXJhdG9yOworfQorCisKKy8vIFN0YXRpYyBpdGVyYXRv
cnMKKworVUJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcgc3RyaW5n
KQoreworICAgIHN0YXRpYyBVQnJlYWtJdGVyYXRvciogc3RhdGljV29yZEJyZWFrSXRlcmF0b3Ig
PSBpbml0aWFsaXplSXRlcmF0b3IoVUJSS19XT1JEKTsKKyAgICBpZiAoIXN0YXRpY1dvcmRCcmVh
a0l0ZXJhdG9yKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzZXRUZXh0
Rm9ySXRlcmF0b3IoKnN0YXRpY1dvcmRCcmVha0l0ZXJhdG9yLCBzdHJpbmcpOworfQorCitVQnJl
YWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQorewor
ICAgIHN0YXRpYyBVQnJlYWtJdGVyYXRvciogc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yID0g
aW5pdGlhbGl6ZUl0ZXJhdG9yKFVCUktfU0VOVEVOQ0UpOworICAgIGlmICghc3RhdGljU2VudGVu
Y2VCcmVha0l0ZXJhdG9yKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBz
ZXRUZXh0Rm9ySXRlcmF0b3IoKnN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvciwgc3RyaW5nKTsK
K30KKworVUJyZWFrSXRlcmF0b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0b3IoU3RyaW5nVmlldyBz
dHJpbmcpCit7CisjaWYgIVBMQVRGT1JNKElPUykKKyAgICAvLyBUaGlzIHJ1bGUgc2V0IGlzIGJh
c2VkIG9uIGNoYXJhY3Rlci1icmVhayBpdGVyYXRvciBydWxlcyBvZiBJQ1UgNC4wCisgICAgLy8g
PGh0dHA6Ly9zb3VyY2UuaWN1LXByb2plY3Qub3JnL3JlcG9zL2ljdS9pY3UvdGFncy9yZWxlYXNl
LTQtMC9zb3VyY2UvZGF0YS9icmtpdHIvY2hhci50eHQ+LgorICAgIC8vIFRoZSBtYWpvciBkaWZm
ZXJlbmNlcyBmcm9tIHRoZSBvcmlnaW5hbCBvbmVzIGFyZSBsaXN0ZWQgYmVsb3c6CisgICAgLy8g
KiBSZXBsYWNlZCAnW1xwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBTcGFjaW5nTWFya31dJyB3
aXRoICdbXHB7R2VuZXJhbF9DYXRlZ29yeSA9IFNwYWNpbmcgTWFya30gLSAkRXh0ZW5kXScgZm9y
IElDVSAzLjggb3IgZWFybGllcjsKKyAgICAvLyAqIFJlbW92ZWQgcnVsZXMgdGhhdCBwcmV2ZW50
IGEgY3Vyc29yIGZyb20gbW92aW5nIGFmdGVyIHByZXBlbmQgY2hhcmFjdGVycyAoQnVnIDI0MzQy
KTsKKyAgICAvLyAqIEFkZGVkIHJ1bGVzIHRoYXQgcHJldmVudCBhIGN1cnNvciBmcm9tIG1vdmlu
ZyBhZnRlciB2aXJhbWEgc2lnbnMgb2YgSW5kaWMgbGFuZ3VhZ2VzIGV4Y2VwdCBUYW1pbCAoQnVn
IDE1NzkwKSwgYW5kOworICAgIC8vICogQWRkZWQgcnVsZXMgdGhhdCBwcmV2ZW50IGEgY3Vyc29y
IGZyb20gbW92aW5nIGJlZm9yZSBKYXBhbmVzZSBoYWxmLXdpZHRoIGthdGFrYXJhIHZvaWNlZCBt
YXJrcy4KKyAgICAvLyAqIEFkZGVkIHJ1bGVzIGZvciByZWdpb25hbCBpbmRpY2F0b3Igc3ltYm9s
cy4KKyAgICBzdGF0aWMgY29uc3QgY2hhcioga1J1bGVzID0KKyAgICAgICAgIiRDUiAgICAgID0g
W1xccHtHcmFwaGVtZV9DbHVzdGVyX0JyZWFrID0gQ1J9XTsiCisgICAgICAgICIkTEYgICAgICA9
IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IExGfV07IgorICAgICAgICAiJENvbnRyb2wg
PSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBDb250cm9sfV07IgorICAgICAgICAiJFZv
aWNlTWFya3MgPSBbXFx1RkY5RVxcdUZGOUZdOyIgIC8vIEphcGFuZXNlIGhhbGYtd2lkdGgga2F0
YWthbmEgdm9pY2VkIG1hcmtzCisgICAgICAgICIkRXh0ZW5kICA9IFtcXHB7R3JhcGhlbWVfQ2x1
c3Rlcl9CcmVhayA9IEV4dGVuZH0gJFZvaWNlTWFya3MgLSBbXFx1MEUzMCBcXHUwRTMyIFxcdTBF
NDUgXFx1MEVCMCBcXHUwRUIyXV07IgorICAgICAgICAiJFNwYWNpbmdNYXJrID0gW1tcXHB7R2Vu
ZXJhbF9DYXRlZ29yeSA9IFNwYWNpbmcgTWFya31dIC0gJEV4dGVuZF07IgorICAgICAgICAiJEwg
ICAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBMfV07IgorICAgICAgICAiJFYg
ICAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBWfV07IgorICAgICAgICAiJFQg
ICAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBUfV07IgorICAgICAgICAiJExW
ICAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBMVn1dOyIKKyAgICAgICAgIiRM
VlQgICAgID0gW1xccHtHcmFwaGVtZV9DbHVzdGVyX0JyZWFrID0gTFZUfV07IgorICAgICAgICAi
JEhpbjAgICAgPSBbXFx1MDkwNS1cXHUwOTM5XTsiICAgIC8vIERldmFuYWdhcmkgTGV0dGVyIEEs
Li4uLEhhCisgICAgICAgICIkSGluViAgICA9IFxcdTA5NEQ7IiAgICAgICAgICAgICAgLy8gRGV2
YW5hZ2FyaSBTaWduIFZpcmFtYQorICAgICAgICAiJEhpbjEgICAgPSBbXFx1MDkxNS1cXHUwOTM5
XTsiICAgIC8vIERldmFuYWdhcmkgTGV0dGVyIEthLC4uLixIYQorICAgICAgICAiJEJlbjAgICAg
PSBbXFx1MDk4NS1cXHUwOUI5XTsiICAgIC8vIEJlbmdhbGkgTGV0dGVyIEEsLi4uLEhhCisgICAg
ICAgICIkQmVuViAgICA9IFxcdTA5Q0Q7IiAgICAgICAgICAgICAgLy8gQmVuZ2FsaSBTaWduIFZp
cmFtYQorICAgICAgICAiJEJlbjEgICAgPSBbXFx1MDk5NS1cXHUwOUI5XTsiICAgIC8vIEJlbmdh
bGkgTGV0dGVyIEthLC4uLixIYQorICAgICAgICAiJFBhbjAgICAgPSBbXFx1MEEwNS1cXHUwQTM5
XTsiICAgIC8vIEd1cm11a2hpIExldHRlciBBLC4uLixIYQorICAgICAgICAiJFBhblYgICAgPSBc
XHUwQTREOyIgICAgICAgICAgICAgIC8vIEd1cm11a2hpIFNpZ24gVmlyYW1hCisgICAgICAgICIk
UGFuMSAgICA9IFtcXHUwQTE1LVxcdTBBMzldOyIgICAgLy8gR3VybXVraGkgTGV0dGVyIEthLC4u
LixIYQorICAgICAgICAiJEd1ajAgICAgPSBbXFx1MEE4NS1cXHUwQUI5XTsiICAgIC8vIEd1amFy
YXRpIExldHRlciBBLC4uLixIYQorICAgICAgICAiJEd1alYgICAgPSBcXHUwQUNEOyIgICAgICAg
ICAgICAgIC8vIEd1amFyYXRpIFNpZ24gVmlyYW1hCisgICAgICAgICIkR3VqMSAgICA9IFtcXHUw
QTk1LVxcdTBBQjldOyIgICAgLy8gR3VqYXJhdGkgTGV0dGVyIEthLC4uLixIYQorICAgICAgICAi
JE9yaTAgICAgPSBbXFx1MEIwNS1cXHUwQjM5XTsiICAgIC8vIE9yaXlhIExldHRlciBBLC4uLixI
YQorICAgICAgICAiJE9yaVYgICAgPSBcXHUwQjREOyIgICAgICAgICAgICAgIC8vIE9yaXlhIFNp
Z24gVmlyYW1hCisgICAgICAgICIkT3JpMSAgICA9IFtcXHUwQjE1LVxcdTBCMzldOyIgICAgLy8g
T3JpeWEgTGV0dGVyIEthLC4uLixIYQorICAgICAgICAiJFRlbDAgICAgPSBbXFx1MEMwNS1cXHUw
QzM5XTsiICAgIC8vIFRlbHVndSBMZXR0ZXIgQSwuLi4sSGEKKyAgICAgICAgIiRUZWxWICAgID0g
XFx1MEM0RDsiICAgICAgICAgICAgICAvLyBUZWx1Z3UgU2lnbiBWaXJhbWEKKyAgICAgICAgIiRU
ZWwxICAgID0gW1xcdTBDMTQtXFx1MEMzOV07IiAgICAvLyBUZWx1Z3UgTGV0dGVyIEthLC4uLixI
YQorICAgICAgICAiJEthbjAgICAgPSBbXFx1MEM4NS1cXHUwQ0I5XTsiICAgIC8vIEthbm5hZGEg
TGV0dGVyIEEsLi4uLEhhCisgICAgICAgICIkS2FuViAgICA9IFxcdTBDQ0Q7IiAgICAgICAgICAg
ICAgLy8gS2FubmFkYSBTaWduIFZpcmFtYQorICAgICAgICAiJEthbjEgICAgPSBbXFx1MEM5NS1c
XHUwQ0I5XTsiICAgIC8vIEthbm5hZGEgTGV0dGVyIEEsLi4uLEhhCisgICAgICAgICIkTWFsMCAg
ICA9IFtcXHUwRDA1LVxcdTBEMzldOyIgICAgLy8gTWFsYXlhbGFtIExldHRlciBBLC4uLixIYQor
ICAgICAgICAiJE1hbFYgICAgPSBcXHUwRDREOyIgICAgICAgICAgICAgIC8vIE1hbGF5YWxhbSBT
aWduIFZpcmFtYQorICAgICAgICAiJE1hbDEgICAgPSBbXFx1MEQxNS1cXHUwRDM5XTsiICAgIC8v
IE1hbGF5YWxhbSBMZXR0ZXIgQSwuLi4sSGEKKyAgICAgICAgIiRSSSAgICAgID0gW1xcVTAwMDFG
MUU2LVxcVTAwMDFGMUZGXTsiIC8vIEVtb2ppIHJlZ2lvbmFsIGluZGljYXRvcnMKKyAgICAgICAg
IiEhY2hhaW47IgorICAgICAgICAiISFmb3J3YXJkOyIKKyAgICAgICAgIiRDUiAkTEY7IgorICAg
ICAgICAiJEwgKCRMIHwgJFYgfCAkTFYgfCAkTFZUKTsiCisgICAgICAgICIoJExWIHwgJFYpICgk
ViB8ICRUKTsiCisgICAgICAgICIoJExWVCB8ICRUKSAkVDsiCisgICAgICAgICJbXiRDb250cm9s
ICRDUiAkTEZdICRFeHRlbmQ7IgorICAgICAgICAiW14kQ29udHJvbCAkQ1IgJExGXSAkU3BhY2lu
Z01hcms7IgorICAgICAgICAiJFJJICRSSSAvICRSSTsiCisgICAgICAgICIkUkkgJFJJOyIKKyAg
ICAgICAgIiRIaW4wICRIaW5WICRIaW4xOyIgICAgICAgICAgICAgICAvLyBEZXZhbmFnYXJpIFZp
cmFtYSAoZm9yd2FyZCkKKyAgICAgICAgIiRCZW4wICRCZW5WICRCZW4xOyIgICAgICAgICAgICAg
ICAvLyBCZW5nYWxpIFZpcmFtYSAoZm9yd2FyZCkKKyAgICAgICAgIiRQYW4wICRQYW5WICRQYW4x
OyIgICAgICAgICAgICAgICAvLyBHdXJtdWtoaSBWaXJhbWEgKGZvcndhcmQpCisgICAgICAgICIk
R3VqMCAkR3VqViAkR3VqMTsiICAgICAgICAgICAgICAgLy8gR3VqYXJhdGkgVmlyYW1hIChmb3J3
YXJkKQorICAgICAgICAiJE9yaTAgJE9yaVYgJE9yaTE7IiAgICAgICAgICAgICAgIC8vIE9yaXlh
IFZpcmFtYSAoZm9yd2FyZCkKKyAgICAgICAgIiRUZWwwICRUZWxWICRUZWwxOyIgICAgICAgICAg
ICAgICAvLyBUZWx1Z3UgVmlyYW1hIChmb3J3YXJkKQorICAgICAgICAiJEthbjAgJEthblYgJEth
bjE7IiAgICAgICAgICAgICAgIC8vIEthbm5hZGEgVmlyYW1hIChmb3J3YXJkKQorICAgICAgICAi
JE1hbDAgJE1hbFYgJE1hbDE7IiAgICAgICAgICAgICAgIC8vIE1hbGF5YWxhbSBWaXJhbWEgKGZv
cndhcmQpCisgICAgICAgICIhIXJldmVyc2U7IgorICAgICAgICAiJExGICRDUjsiCisgICAgICAg
ICIoJEwgfCAkViB8ICRMViB8ICRMVlQpICRMOyIKKyAgICAgICAgIigkViB8ICRUKSAoJExWIHwg
JFYpOyIKKyAgICAgICAgIiRUICgkTFZUIHwgJFQpOyIKKyAgICAgICAgIiRFeHRlbmQgICAgICBb
XiRDb250cm9sICRDUiAkTEZdOyIKKyAgICAgICAgIiRTcGFjaW5nTWFyayBbXiRDb250cm9sICRD
UiAkTEZdOyIKKyAgICAgICAgIiRSSSAkUkkgLyAkUkkgJFJJOyIKKyAgICAgICAgIiRSSSAkUkk7
IgorICAgICAgICAiJEhpbjEgJEhpblYgJEhpbjA7IiAgICAgICAgICAgICAgIC8vIERldmFuYWdh
cmkgVmlyYW1hIChiYWNrd2FyZCkKKyAgICAgICAgIiRCZW4xICRCZW5WICRCZW4wOyIgICAgICAg
ICAgICAgICAvLyBCZW5nYWxpIFZpcmFtYSAoYmFja3dhcmQpCisgICAgICAgICIkUGFuMSAkUGFu
ViAkUGFuMDsiICAgICAgICAgICAgICAgLy8gR3VybXVraGkgVmlyYW1hIChiYWNrd2FyZCkKKyAg
ICAgICAgIiRHdWoxICRHdWpWICRHdWowOyIgICAgICAgICAgICAgICAvLyBHdWphcmF0aSBWaXJh
bWEgKGJhY2t3YXJkKQorICAgICAgICAiJE9yaTEgJE9yaVYgJE9yaTA7IiAgICAgICAgICAgICAg
IC8vIEd1amFyYXRpIFZpcmFtYSAoYmFja3dhcmQpCisgICAgICAgICIkVGVsMSAkVGVsViAkVGVs
MDsiICAgICAgICAgICAgICAgLy8gVGVsdWd1IFZpcmFtYSAoYmFja3dhcmQpCisgICAgICAgICIk
S2FuMSAkS2FuViAkS2FuMDsiICAgICAgICAgICAgICAgLy8gS2FubmFkYSBWaXJhbWEgKGJhY2t3
YXJkKQorICAgICAgICAiJE1hbDEgJE1hbFYgJE1hbDA7IiAgICAgICAgICAgICAgIC8vIE1hbGF5
YWxhbSBWaXJhbWEgKGJhY2t3YXJkKQorICAgICAgICAiISFzYWZlX3JldmVyc2U7IgorICAgICAg
ICAiISFzYWZlX2ZvcndhcmQ7IjsKKyAgICBzdGF0aWMgVUJyZWFrSXRlcmF0b3IqIHN0YXRpY0N1
cnNvck1vdmVtZW50SXRlcmF0b3IgPSBpbml0aWFsaXplSXRlcmF0b3JXaXRoUnVsZXMoa1J1bGVz
KTsKKyNlbHNlIC8vIFBMQVRGT1JNKElPUykKKyAgICAvLyBVc2UgdGhlIHNwZWNpYWwgVGhhaSBj
aGFyYWN0ZXIgYnJlYWsgaXRlcmF0b3IgZm9yIGFsbCBsb2NhbGVzCisgICAgc3RhdGljIFVCcmVh
a0l0ZXJhdG9yKiBzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yID0gY3JlYXRlU2hhcmVkSXRl
cmF0b3IoVUJSS19DSEFSQUNURVIsICJ0aCIpOworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCisK
KyAgICBpZiAoIXN0YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0b3IpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgcmV0dXJuIHNldFRleHRGb3JJdGVyYXRvcigqc3RhdGljQ3Vyc29yTW92
ZW1lbnRJdGVyYXRvciwgc3RyaW5nKTsKK30KKworVUJyZWFrSXRlcmF0b3IqIGFjcXVpcmVMaW5l
QnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bGUsIGNvbnN0IFVDaGFyKiBwcmlvckNvbnRleHQsIHVuc2lnbmVkIHByaW9yQ29udGV4dExlbmd0
aCkKK3sKKyAgICBVQnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSBMaW5lQnJlYWtJdGVyYXRvclBv
b2w6OnNoYXJlZFBvb2woKS50YWtlKGxvY2FsZSk7CisgICAgaWYgKCFpdGVyYXRvcikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gc2V0Q29udGV4dEF3YXJlVGV4dEZvckl0
ZXJhdG9yKCppdGVyYXRvciwgc3RyaW5nLCBwcmlvckNvbnRleHQsIHByaW9yQ29udGV4dExlbmd0
aCk7Cit9CisKK3ZvaWQgcmVsZWFzZUxpbmVCcmVha0l0ZXJhdG9yKFVCcmVha0l0ZXJhdG9yKiBp
dGVyYXRvcikKK3sKKyAgICBBU1NFUlRfQVJHKGl0ZXJhdG9yLCBpdGVyYXRvcik7CisKKyAgICBM
aW5lQnJlYWtJdGVyYXRvclBvb2w6OnNoYXJlZFBvb2woKS5wdXQocmVpbnRlcnByZXRfY2FzdDxV
QnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSk7Cit9CisKK3N0YXRpYyBVQnJlYWtJdGVyYXRvciog
bm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKKworc3RhdGljIGlubGluZSBib29sIGNv
bXBhcmVBbmRTd2FwTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihVQnJlYWtJdGVyYXRv
ciogZXhwZWN0ZWQsIFVCcmVha0l0ZXJhdG9yKiBuZXdWYWx1ZSkKK3sKKyNpZiBFTkFCTEUoQ09N
UEFSRV9BTkRfU1dBUCkKKyAgICByZXR1cm4gV1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXAocmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKSwgZXhw
ZWN0ZWQsIG5ld1ZhbHVlKTsKKyNlbHNlCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwg
bm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvck11dGV4LCAoKSk7CisgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3JNdXRleCk7CisgICAgaWYg
KG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgIT0gZXhwZWN0ZWQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yID0gbmV3VmFs
dWU7CisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKworTm9uU2hhcmVkQ2hhcmFjdGVyQnJl
YWtJdGVyYXRvcjo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3IHN0
cmluZykKK3sKKyAgICBtX2l0ZXJhdG9yID0gbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRv
cjsKKworICAgIGJvb2wgY3JlYXRlZEl0ZXJhdG9yID0gbV9pdGVyYXRvciAmJiBjb21wYXJlQW5k
U3dhcE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IobV9pdGVyYXRvciwgMCk7CisgICAg
aWYgKCFjcmVhdGVkSXRlcmF0b3IpCisgICAgICAgIG1faXRlcmF0b3IgPSBpbml0aWFsaXplSXRl
cmF0b3IoVUJSS19DSEFSQUNURVIpOworICAgIGlmICghbV9pdGVyYXRvcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9pdGVyYXRvciA9IHNldFRleHRGb3JJdGVyYXRvcigqbV9pdGVyYXRvciwg
c3RyaW5nKTsKK30KKworTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6fk5vblNoYXJl
ZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoKQoreworICAgIGlmICghY29tcGFyZUFuZFN3YXBOb25T
aGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKDAsIG1faXRlcmF0b3IpKQorICAgICAgICB1YnJr
X2Nsb3NlKHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihtX2l0ZXJhdG9yKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHJldmlzaW9uIDE2MjA0MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2lmbmRlZiBUZXh0QnJlYWtJdGVyYXRvcl9oCiAjZGVm
aW5lIFRleHRCcmVha0l0ZXJhdG9yX2gKIAorI2luY2x1ZGUgPHVuaWNvZGUvdWJyay5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z1ZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CkBAIC0zNiwyNSArMzcs
MTMgQEAgY2xhc3MgVGV4dEJyZWFrSXRlcmF0b3I7CiAvLyBwbGF0Zm9ybSBVSSBjb252ZW50aW9u
cy4gT25lIG5vdGFibGUgZXhhbXBsZSB3aGVyZSB0aGlzIGNhbiBiZSBkaWZmZXJlbnQKIC8vIGZy
b20gY2hhcmFjdGVyIGJyZWFrIGl0ZXJhdG9yIGlzIFRoYWkgcHJlcGVuZCBjaGFyYWN0ZXJzLCBz
ZWUgYnVnIDI0MzQyLgogLy8gVXNlIHRoaXMgZm9yIGluc2VydGlvbiBwb2ludCBhbmQgc2VsZWN0
aW9uIG1hbmlwdWxhdGlvbnMuCi1UZXh0QnJlYWtJdGVyYXRvciogY3Vyc29yTW92ZW1lbnRJdGVy
YXRvcihjb25zdCBVQ2hhciosIGludCBsZW5ndGgpOworVUJyZWFrSXRlcmF0b3IqIGN1cnNvck1v
dmVtZW50SXRlcmF0b3IoU3RyaW5nVmlldyk7CiAKLVRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJl
YWtJdGVyYXRvcihjb25zdCBVQ2hhciosIGludCBsZW5ndGgpOwotVGV4dEJyZWFrSXRlcmF0b3Iq
IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciosIGludCBsZW5ndGgpOworVUJyZWFr
SXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcpOworVUJyZWFrSXRlcmF0b3Iq
IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KTsKIAotVGV4dEJyZWFrSXRlcmF0b3Iq
IGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3LCBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsZSwgY29uc3QgVUNoYXIqIHByaW9yQ29udGV4dCwgdW5zaWduZWQgcHJpb3JDb250ZXh0
TGVuZ3RoKTsKLXZvaWQgcmVsZWFzZUxpbmVCcmVha0l0ZXJhdG9yKFRleHRCcmVha0l0ZXJhdG9y
Kik7Ci0KLWludCB0ZXh0QnJlYWtGaXJzdChUZXh0QnJlYWtJdGVyYXRvciopOwotaW50IHRleHRC
cmVha0xhc3QoVGV4dEJyZWFrSXRlcmF0b3IqKTsKLWludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVh
a0l0ZXJhdG9yKik7Ci1pbnQgdGV4dEJyZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqKTsK
LWludCB0ZXh0QnJlYWtDdXJyZW50KFRleHRCcmVha0l0ZXJhdG9yKik7Ci1pbnQgdGV4dEJyZWFr
UHJlY2VkaW5nKFRleHRCcmVha0l0ZXJhdG9yKiwgaW50KTsKLWludCB0ZXh0QnJlYWtGb2xsb3dp
bmcoVGV4dEJyZWFrSXRlcmF0b3IqLCBpbnQpOwotYm9vbCBpc1RleHRCcmVhayhUZXh0QnJlYWtJ
dGVyYXRvciosIGludCk7Ci1ib29sIGlzV29yZFRleHRCcmVhayhUZXh0QnJlYWtJdGVyYXRvciop
OwotCi1jb25zdCBpbnQgVGV4dEJyZWFrRG9uZSA9IC0xOworVUJyZWFrSXRlcmF0b3IqIGFjcXVp
cmVMaW5lQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2Fs
ZSwgY29uc3QgVUNoYXIqIHByaW9yQ29udGV4dCwgdW5zaWduZWQgcHJpb3JDb250ZXh0TGVuZ3Ro
KTsKK3ZvaWQgcmVsZWFzZUxpbmVCcmVha0l0ZXJhdG9yKFVCcmVha0l0ZXJhdG9yKik7CiAKIGNs
YXNzIExhenlMaW5lQnJlYWtJdGVyYXRvciB7CiBwdWJsaWM6CkBAIC0xMjYsNyArMTE1LDcgQEAg
cHVibGljOgogICAgIC8vIE9idGFpbiB0ZXh0IGJyZWFrIGl0ZXJhdG9yLCBwb3NzaWJseSBwcmV2
aW91c2x5IGNhY2hlZCwgd2hlcmUgdGhpcyBpdGVyYXRvciBpcyAob3IgaGFzIGJlZW4pCiAgICAg
Ly8gaW5pdGlhbGl6ZWQgdG8gdXNlIHRoZSBwcmV2aW91c2x5IHN0b3JlZCBzdHJpbmcgYXMgdGhl
IHByaW1hcnkgYnJlYWtpbmcgY29udGV4dCBhbmQgdXNpbmcKICAgICAvLyBwcmV2aW91c2x5IHN0
b3JlZCBwcmlvciBjb250ZXh0IGlmIG5vbi1lbXB0eS4KLSAgICBUZXh0QnJlYWtJdGVyYXRvciog
Z2V0KHVuc2lnbmVkIHByaW9yQ29udGV4dExlbmd0aCkKKyAgICBVQnJlYWtJdGVyYXRvciogZ2V0
KHVuc2lnbmVkIHByaW9yQ29udGV4dExlbmd0aCkKICAgICB7CiAgICAgICAgIEFTU0VSVChwcmlv
ckNvbnRleHRMZW5ndGggPD0gcHJpb3JDb250ZXh0Q2FwYWNpdHkpOwogICAgICAgICBjb25zdCBV
Q2hhciogcHJpb3JDb250ZXh0ID0gcHJpb3JDb250ZXh0TGVuZ3RoID8gJm1fcHJpb3JDb250ZXh0
W3ByaW9yQ29udGV4dENhcGFjaXR5IC0gcHJpb3JDb250ZXh0TGVuZ3RoXSA6IDA7CkBAIC0xNTUs
NyArMTQ0LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcHJpb3JDb250
ZXh0Q2FwYWNpdHkgPSAyOwogICAgIFN0cmluZyBtX3N0cmluZzsKICAgICBBdG9taWNTdHJpbmcg
bV9sb2NhbGU7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIG1faXRlcmF0b3I7CisgICAgVUJyZWFr
SXRlcmF0b3IqIG1faXRlcmF0b3I7CiAgICAgVUNoYXIgbV9wcmlvckNvbnRleHRbcHJpb3JDb250
ZXh0Q2FwYWNpdHldOwogICAgIGNvbnN0IFVDaGFyKiBtX2NhY2hlZFByaW9yQ29udGV4dDsKICAg
ICB1bnNpZ25lZCBtX2NhY2hlZFByaW9yQ29udGV4dExlbmd0aDsKQEAgLTE2OSwxMyArMTU4LDEz
IEBAIHByaXZhdGU6CiBjbGFzcyBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKTsK
IHB1YmxpYzoKLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFy
KiwgaW50IGxlbmd0aCk7CisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihTdHJp
bmdWaWV3KTsKICAgICB+Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpOwogCi0gICAg
b3BlcmF0b3IgVGV4dEJyZWFrSXRlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvcjsg
fQorICAgIG9wZXJhdG9yIFVCcmVha0l0ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0
b3I7IH0KIAogcHJpdmF0ZToKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogbV9pdGVyYXRvcjsKKyAg
ICBVQnJlYWtJdGVyYXRvciogbV9pdGVyYXRvcjsKIH07CiAKIC8vIENvdW50cyB0aGUgbnVtYmVy
IG9mIGdyYXBoZW1lIGNsdXN0ZXJzLiBBIHN1cnJvZ2F0ZSBwYWlyIG9yIGEgc2VxdWVuY2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3JJQ1UuY3BwCShyZXZpc2lvbiAxNjIwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNTgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBMYXJzIEtub2xsIDxsYXJzQHRyb2xs
dGVjaC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
eHRCcmVha0l0ZXJhdG9yLmgiCi0KLSNpbmNsdWRlICJMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1Uu
aCIKLSNpbmNsdWRlICJVVGV4dFByb3ZpZGVyTGF0aW4xLmgiCi0jaW5jbHVkZSAiVVRleHRQcm92
aWRlclVURjE2LmgiCi0jaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdWaWV3Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gSXRlcmF0b3IgaW5p
dGlhbGl6YXRpb24KLQotc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBpbml0aWFsaXplSXRlcmF0
b3IoVUJyZWFrSXRlcmF0b3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIGxvY2FsZSA9IGN1cnJlbnRU
ZXh0QnJlYWtMb2NhbGVJRCgpKQotewotICAgIFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVfWkVS
T19FUlJPUjsKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSByZWludGVycHJldF9j
YXN0PFRleHRCcmVha0l0ZXJhdG9yKj4odWJya19vcGVuKHR5cGUsIGxvY2FsZSwgMCwgMCwgJm9w
ZW5TdGF0dXMpKTsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKFVfU1VDQ0VTUyhvcGVuU3RhdHVz
KSwgIklDVSBjb3VsZCBub3Qgb3BlbiBhIGJyZWFrIGl0ZXJhdG9yOiAlcyAoJWQpIiwgdV9lcnJv
ck5hbWUob3BlblN0YXR1cyksIG9wZW5TdGF0dXMpOwotICAgIHJldHVybiBpdGVyYXRvcjsKLX0K
LQotI2lmICFQTEFURk9STShJT1MpCi1zdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIGluaXRpYWxp
emVJdGVyYXRvcldpdGhSdWxlcyhjb25zdCBjaGFyKiBicmVha1J1bGVzKQotewotICAgIFVQYXJz
ZUVycm9yIHBhcnNlU3RhdHVzOwotICAgIFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVfWkVST19F
UlJPUjsKLSAgICBTdHJpbmcgcnVsZXMoYnJlYWtSdWxlcyk7Ci0gICAgVGV4dEJyZWFrSXRlcmF0
b3IqIGl0ZXJhdG9yID0gcmVpbnRlcnByZXRfY2FzdDxUZXh0QnJlYWtJdGVyYXRvcio+KHVicmtf
b3BlblJ1bGVzKHJ1bGVzLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIHJ1bGVzLmxlbmd0aCgpLCAw
LCAwLCAmcGFyc2VTdGF0dXMsICZvcGVuU3RhdHVzKSk7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShVX1NVQ0NFU1Mob3BlblN0YXR1cyksICJJQ1UgY291bGQgbm90IG9wZW4gYSBicmVhayBpdGVy
YXRvcjogJXMgKCVkKSIsIHVfZXJyb3JOYW1lKG9wZW5TdGF0dXMpLCBvcGVuU3RhdHVzKTsKLSAg
ICByZXR1cm4gaXRlcmF0b3I7Ci19Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKLQotCi0vLyBJ
dGVyYXRvciB0ZXh0IHNldHRpbmcKLQotc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzZXRUZXh0
Rm9ySXRlcmF0b3IoVGV4dEJyZWFrSXRlcmF0b3ImIGl0ZXJhdG9yLCBTdHJpbmdWaWV3IHN0cmlu
ZykKLXsKLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7Ci0gICAgICAgIFVUZXh0V2l0aEJ1ZmZl
ciB0ZXh0TG9jYWw7Ci0gICAgICAgIHRleHRMb2NhbC50ZXh0ID0gVVRFWFRfSU5JVElBTElaRVI7
Ci0gICAgICAgIHRleHRMb2NhbC50ZXh0LmV4dHJhU2l6ZSA9IHNpemVvZih0ZXh0TG9jYWwuYnVm
ZmVyKTsKLSAgICAgICAgdGV4dExvY2FsLnRleHQucEV4dHJhID0gdGV4dExvY2FsLmJ1ZmZlcjsK
LQotICAgICAgICBVRXJyb3JDb2RlIG9wZW5TdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAg
IFVUZXh0KiB0ZXh0ID0gb3BlbkxhdGluMVVUZXh0UHJvdmlkZXIoJnRleHRMb2NhbCwgc3RyaW5n
LmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSwgJm9wZW5TdGF0dXMpOwotICAgICAgICBp
ZiAoVV9GQUlMVVJFKG9wZW5TdGF0dXMpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoInVUZXh0
T3BlbkxhdGluMSBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBvcGVuU3RhdHVzKTsKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgVUVycm9yQ29kZSBzZXRU
ZXh0U3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgICAgICB1YnJrX3NldFVUZXh0KHJlaW50ZXJw
cmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPigmaXRlcmF0b3IpLCB0ZXh0LCAmc2V0VGV4dFN0YXR1
cyk7Ci0gICAgICAgIGlmIChVX0ZBSUxVUkUoc2V0VGV4dFN0YXR1cykpIHsKLSAgICAgICAgICAg
IExPR19FUlJPUigidWJya19zZXRVVGV4dCBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBzZXRUZXh0
U3RhdHVzKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdXRleHRfY2xvc2UodGV4dCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVUVycm9yQ29kZSBz
ZXRUZXh0U3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgICAgICB1YnJrX3NldFRleHQocmVpbnRl
cnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KCZpdGVyYXRvciksIHN0cmluZy5jaGFyYWN0ZXJz
MTYoKSwgc3RyaW5nLmxlbmd0aCgpLCAmc2V0VGV4dFN0YXR1cyk7Ci0gICAgICAgIGlmIChVX0ZB
SUxVUkUoc2V0VGV4dFN0YXR1cykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0KLSAgICByZXR1cm4gJml0ZXJhdG9yOwotfQotCi1zdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3Iq
IHNldENvbnRleHRBd2FyZVRleHRGb3JJdGVyYXRvcihUZXh0QnJlYWtJdGVyYXRvciYgaXRlcmF0
b3IsIFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBVQ2hhciogcHJpb3JDb250ZXh0LCB1bnNpZ25l
ZCBwcmlvckNvbnRleHRMZW5ndGgpCi17Ci0gICAgaWYgKHN0cmluZy5pczhCaXQoKSkgewotICAg
ICAgICBVVGV4dFdpdGhCdWZmZXIgdGV4dExvY2FsOwotICAgICAgICB0ZXh0TG9jYWwudGV4dCA9
IFVURVhUX0lOSVRJQUxJWkVSOwotICAgICAgICB0ZXh0TG9jYWwudGV4dC5leHRyYVNpemUgPSBz
aXplb2YodGV4dExvY2FsLmJ1ZmZlcik7Ci0gICAgICAgIHRleHRMb2NhbC50ZXh0LnBFeHRyYSA9
IHRleHRMb2NhbC5idWZmZXI7Ci0KLSAgICAgICAgVUVycm9yQ29kZSBvcGVuU3RhdHVzID0gVV9a
RVJPX0VSUk9SOwotICAgICAgICBVVGV4dCogdGV4dCA9IG9wZW5MYXRpbjFDb250ZXh0QXdhcmVV
VGV4dFByb3ZpZGVyKCZ0ZXh0TG9jYWwsIHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVu
Z3RoKCksIHByaW9yQ29udGV4dCwgcHJpb3JDb250ZXh0TGVuZ3RoLCAmb3BlblN0YXR1cyk7Ci0g
ICAgICAgIGlmIChVX0ZBSUxVUkUob3BlblN0YXR1cykpIHsKLSAgICAgICAgICAgIExPR19FUlJP
Uigib3BlbkxhdGluMUNvbnRleHRBd2FyZVVUZXh0UHJvdmlkZXIgZmFpbGVkIHdpdGggc3RhdHVz
ICVkIiwgb3BlblN0YXR1cyk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
fQotCi0gICAgICAgIFVFcnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAg
ICAgICAgdWJya19zZXRVVGV4dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oJml0
ZXJhdG9yKSwgdGV4dCwgJnNldFRleHRTdGF0dXMpOwotICAgICAgICBpZiAoVV9GQUlMVVJFKHNl
dFRleHRTdGF0dXMpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoInVicmtfc2V0VVRleHQgZmFp
bGVkIHdpdGggc3RhdHVzICVkIiwgc2V0VGV4dFN0YXR1cyk7Ci0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHV0ZXh0X2Nsb3NlKHRleHQpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFVUZXh0IHRleHRMb2NhbCA9IFVURVhUX0lOSVRJQUxJWkVSOwotCi0g
ICAgICAgIFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgVVRl
eHQqIHRleHQgPSBvcGVuVVRGMTZDb250ZXh0QXdhcmVVVGV4dFByb3ZpZGVyKCZ0ZXh0TG9jYWws
IHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpLCBwcmlvckNvbnRleHQsIHBy
aW9yQ29udGV4dExlbmd0aCwgJm9wZW5TdGF0dXMpOwotICAgICAgICBpZiAoVV9GQUlMVVJFKG9w
ZW5TdGF0dXMpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIm9wZW5VVEYxNkNvbnRleHRBd2Fy
ZVVUZXh0UHJvdmlkZXIgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgb3BlblN0YXR1cyk7Ci0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIFVFcnJvckNvZGUgc2V0VGV4
dFN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgdWJya19zZXRVVGV4dChyZWludGVycHJl
dF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oJml0ZXJhdG9yKSwgdGV4dCwgJnNldFRleHRTdGF0dXMp
OwotICAgICAgICBpZiAoVV9GQUlMVVJFKHNldFRleHRTdGF0dXMpKSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoInVicmtfc2V0VVRleHQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgc2V0VGV4dFN0
YXR1cyk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAg
IHV0ZXh0X2Nsb3NlKHRleHQpOwotICAgIH0KLQotICAgIHJldHVybiAmaXRlcmF0b3I7Ci19Ci0K
LQotLy8gU3RhdGljIGl0ZXJhdG9ycwotCi1UZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRl
cmF0b3IoY29uc3QgVUNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKLXsKLSAgICBzdGF0aWMgVGV4
dEJyZWFrSXRlcmF0b3IqIHN0YXRpY1dvcmRCcmVha0l0ZXJhdG9yID0gaW5pdGlhbGl6ZUl0ZXJh
dG9yKFVCUktfV09SRCk7Ci0gICAgaWYgKCFzdGF0aWNXb3JkQnJlYWtJdGVyYXRvcikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gc2V0VGV4dEZvckl0ZXJhdG9yKCpzdGF0
aWNXb3JkQnJlYWtJdGVyYXRvciwgU3RyaW5nVmlldyhidWZmZXIsIGxlbmd0aCkpOwotfQotCi1U
ZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBidWZm
ZXIsIGludCBsZW5ndGgpCi17Ci0gICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNT
ZW50ZW5jZUJyZWFrSXRlcmF0b3IgPSBpbml0aWFsaXplSXRlcmF0b3IoVUJSS19TRU5URU5DRSk7
Ci0gICAgaWYgKCFzdGF0aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3IpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgcmV0dXJuIHNldFRleHRGb3JJdGVyYXRvcigqc3RhdGljU2VudGVuY2VC
cmVha0l0ZXJhdG9yLCBTdHJpbmdWaWV3KGJ1ZmZlciwgbGVuZ3RoKSk7Ci19Ci0KLVRleHRCcmVh
a0l0ZXJhdG9yKiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBidWZmZXIsIGlu
dCBsZW5ndGgpCi17Ci0jaWYgIVBMQVRGT1JNKElPUykKLSAgICAvLyBUaGlzIHJ1bGUgc2V0IGlz
IGJhc2VkIG9uIGNoYXJhY3Rlci1icmVhayBpdGVyYXRvciBydWxlcyBvZiBJQ1UgNC4wCi0gICAg
Ly8gPGh0dHA6Ly9zb3VyY2UuaWN1LXByb2plY3Qub3JnL3JlcG9zL2ljdS9pY3UvdGFncy9yZWxl
YXNlLTQtMC9zb3VyY2UvZGF0YS9icmtpdHIvY2hhci50eHQ+LgotICAgIC8vIFRoZSBtYWpvciBk
aWZmZXJlbmNlcyBmcm9tIHRoZSBvcmlnaW5hbCBvbmVzIGFyZSBsaXN0ZWQgYmVsb3c6Ci0gICAg
Ly8gKiBSZXBsYWNlZCAnW1xwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBTcGFjaW5nTWFya31d
JyB3aXRoICdbXHB7R2VuZXJhbF9DYXRlZ29yeSA9IFNwYWNpbmcgTWFya30gLSAkRXh0ZW5kXScg
Zm9yIElDVSAzLjggb3IgZWFybGllcjsKLSAgICAvLyAqIFJlbW92ZWQgcnVsZXMgdGhhdCBwcmV2
ZW50IGEgY3Vyc29yIGZyb20gbW92aW5nIGFmdGVyIHByZXBlbmQgY2hhcmFjdGVycyAoQnVnIDI0
MzQyKTsKLSAgICAvLyAqIEFkZGVkIHJ1bGVzIHRoYXQgcHJldmVudCBhIGN1cnNvciBmcm9tIG1v
dmluZyBhZnRlciB2aXJhbWEgc2lnbnMgb2YgSW5kaWMgbGFuZ3VhZ2VzIGV4Y2VwdCBUYW1pbCAo
QnVnIDE1NzkwKSwgYW5kOwotICAgIC8vICogQWRkZWQgcnVsZXMgdGhhdCBwcmV2ZW50IGEgY3Vy
c29yIGZyb20gbW92aW5nIGJlZm9yZSBKYXBhbmVzZSBoYWxmLXdpZHRoIGthdGFrYXJhIHZvaWNl
ZCBtYXJrcy4KLSAgICAvLyAqIEFkZGVkIHJ1bGVzIGZvciByZWdpb25hbCBpbmRpY2F0b3Igc3lt
Ym9scy4KLSAgICBzdGF0aWMgY29uc3QgY2hhcioga1J1bGVzID0KLSAgICAgICAgIiRDUiAgICAg
ID0gW1xccHtHcmFwaGVtZV9DbHVzdGVyX0JyZWFrID0gQ1J9XTsiCi0gICAgICAgICIkTEYgICAg
ICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IExGfV07IgotICAgICAgICAiJENvbnRy
b2wgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBDb250cm9sfV07IgotICAgICAgICAi
JFZvaWNlTWFya3MgPSBbXFx1RkY5RVxcdUZGOUZdOyIgIC8vIEphcGFuZXNlIGhhbGYtd2lkdGgg
a2F0YWthbmEgdm9pY2VkIG1hcmtzCi0gICAgICAgICIkRXh0ZW5kICA9IFtcXHB7R3JhcGhlbWVf
Q2x1c3Rlcl9CcmVhayA9IEV4dGVuZH0gJFZvaWNlTWFya3MgLSBbXFx1MEUzMCBcXHUwRTMyIFxc
dTBFNDUgXFx1MEVCMCBcXHUwRUIyXV07IgotICAgICAgICAiJFNwYWNpbmdNYXJrID0gW1tcXHB7
R2VuZXJhbF9DYXRlZ29yeSA9IFNwYWNpbmcgTWFya31dIC0gJEV4dGVuZF07IgotICAgICAgICAi
JEwgICAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBMfV07IgotICAgICAgICAi
JFYgICAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBWfV07IgotICAgICAgICAi
JFQgICAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBUfV07IgotICAgICAgICAi
JExWICAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBMVn1dOyIKLSAgICAgICAg
IiRMVlQgICAgID0gW1xccHtHcmFwaGVtZV9DbHVzdGVyX0JyZWFrID0gTFZUfV07IgotICAgICAg
ICAiJEhpbjAgICAgPSBbXFx1MDkwNS1cXHUwOTM5XTsiICAgIC8vIERldmFuYWdhcmkgTGV0dGVy
IEEsLi4uLEhhCi0gICAgICAgICIkSGluViAgICA9IFxcdTA5NEQ7IiAgICAgICAgICAgICAgLy8g
RGV2YW5hZ2FyaSBTaWduIFZpcmFtYQotICAgICAgICAiJEhpbjEgICAgPSBbXFx1MDkxNS1cXHUw
OTM5XTsiICAgIC8vIERldmFuYWdhcmkgTGV0dGVyIEthLC4uLixIYQotICAgICAgICAiJEJlbjAg
ICAgPSBbXFx1MDk4NS1cXHUwOUI5XTsiICAgIC8vIEJlbmdhbGkgTGV0dGVyIEEsLi4uLEhhCi0g
ICAgICAgICIkQmVuViAgICA9IFxcdTA5Q0Q7IiAgICAgICAgICAgICAgLy8gQmVuZ2FsaSBTaWdu
IFZpcmFtYQotICAgICAgICAiJEJlbjEgICAgPSBbXFx1MDk5NS1cXHUwOUI5XTsiICAgIC8vIEJl
bmdhbGkgTGV0dGVyIEthLC4uLixIYQotICAgICAgICAiJFBhbjAgICAgPSBbXFx1MEEwNS1cXHUw
QTM5XTsiICAgIC8vIEd1cm11a2hpIExldHRlciBBLC4uLixIYQotICAgICAgICAiJFBhblYgICAg
PSBcXHUwQTREOyIgICAgICAgICAgICAgIC8vIEd1cm11a2hpIFNpZ24gVmlyYW1hCi0gICAgICAg
ICIkUGFuMSAgICA9IFtcXHUwQTE1LVxcdTBBMzldOyIgICAgLy8gR3VybXVraGkgTGV0dGVyIEth
LC4uLixIYQotICAgICAgICAiJEd1ajAgICAgPSBbXFx1MEE4NS1cXHUwQUI5XTsiICAgIC8vIEd1
amFyYXRpIExldHRlciBBLC4uLixIYQotICAgICAgICAiJEd1alYgICAgPSBcXHUwQUNEOyIgICAg
ICAgICAgICAgIC8vIEd1amFyYXRpIFNpZ24gVmlyYW1hCi0gICAgICAgICIkR3VqMSAgICA9IFtc
XHUwQTk1LVxcdTBBQjldOyIgICAgLy8gR3VqYXJhdGkgTGV0dGVyIEthLC4uLixIYQotICAgICAg
ICAiJE9yaTAgICAgPSBbXFx1MEIwNS1cXHUwQjM5XTsiICAgIC8vIE9yaXlhIExldHRlciBBLC4u
LixIYQotICAgICAgICAiJE9yaVYgICAgPSBcXHUwQjREOyIgICAgICAgICAgICAgIC8vIE9yaXlh
IFNpZ24gVmlyYW1hCi0gICAgICAgICIkT3JpMSAgICA9IFtcXHUwQjE1LVxcdTBCMzldOyIgICAg
Ly8gT3JpeWEgTGV0dGVyIEthLC4uLixIYQotICAgICAgICAiJFRlbDAgICAgPSBbXFx1MEMwNS1c
XHUwQzM5XTsiICAgIC8vIFRlbHVndSBMZXR0ZXIgQSwuLi4sSGEKLSAgICAgICAgIiRUZWxWICAg
ID0gXFx1MEM0RDsiICAgICAgICAgICAgICAvLyBUZWx1Z3UgU2lnbiBWaXJhbWEKLSAgICAgICAg
IiRUZWwxICAgID0gW1xcdTBDMTQtXFx1MEMzOV07IiAgICAvLyBUZWx1Z3UgTGV0dGVyIEthLC4u
LixIYQotICAgICAgICAiJEthbjAgICAgPSBbXFx1MEM4NS1cXHUwQ0I5XTsiICAgIC8vIEthbm5h
ZGEgTGV0dGVyIEEsLi4uLEhhCi0gICAgICAgICIkS2FuViAgICA9IFxcdTBDQ0Q7IiAgICAgICAg
ICAgICAgLy8gS2FubmFkYSBTaWduIFZpcmFtYQotICAgICAgICAiJEthbjEgICAgPSBbXFx1MEM5
NS1cXHUwQ0I5XTsiICAgIC8vIEthbm5hZGEgTGV0dGVyIEEsLi4uLEhhCi0gICAgICAgICIkTWFs
MCAgICA9IFtcXHUwRDA1LVxcdTBEMzldOyIgICAgLy8gTWFsYXlhbGFtIExldHRlciBBLC4uLixI
YQotICAgICAgICAiJE1hbFYgICAgPSBcXHUwRDREOyIgICAgICAgICAgICAgIC8vIE1hbGF5YWxh
bSBTaWduIFZpcmFtYQotICAgICAgICAiJE1hbDEgICAgPSBbXFx1MEQxNS1cXHUwRDM5XTsiICAg
IC8vIE1hbGF5YWxhbSBMZXR0ZXIgQSwuLi4sSGEKLSAgICAgICAgIiRSSSAgICAgID0gW1xcVTAw
MDFGMUU2LVxcVTAwMDFGMUZGXTsiIC8vIEVtb2ppIHJlZ2lvbmFsIGluZGljYXRvcnMKLSAgICAg
ICAgIiEhY2hhaW47IgotICAgICAgICAiISFmb3J3YXJkOyIKLSAgICAgICAgIiRDUiAkTEY7Igot
ICAgICAgICAiJEwgKCRMIHwgJFYgfCAkTFYgfCAkTFZUKTsiCi0gICAgICAgICIoJExWIHwgJFYp
ICgkViB8ICRUKTsiCi0gICAgICAgICIoJExWVCB8ICRUKSAkVDsiCi0gICAgICAgICJbXiRDb250
cm9sICRDUiAkTEZdICRFeHRlbmQ7IgotICAgICAgICAiW14kQ29udHJvbCAkQ1IgJExGXSAkU3Bh
Y2luZ01hcms7IgotICAgICAgICAiJFJJICRSSSAvICRSSTsiCi0gICAgICAgICIkUkkgJFJJOyIK
LSAgICAgICAgIiRIaW4wICRIaW5WICRIaW4xOyIgICAgICAgICAgICAgICAvLyBEZXZhbmFnYXJp
IFZpcmFtYSAoZm9yd2FyZCkKLSAgICAgICAgIiRCZW4wICRCZW5WICRCZW4xOyIgICAgICAgICAg
ICAgICAvLyBCZW5nYWxpIFZpcmFtYSAoZm9yd2FyZCkKLSAgICAgICAgIiRQYW4wICRQYW5WICRQ
YW4xOyIgICAgICAgICAgICAgICAvLyBHdXJtdWtoaSBWaXJhbWEgKGZvcndhcmQpCi0gICAgICAg
ICIkR3VqMCAkR3VqViAkR3VqMTsiICAgICAgICAgICAgICAgLy8gR3VqYXJhdGkgVmlyYW1hIChm
b3J3YXJkKQotICAgICAgICAiJE9yaTAgJE9yaVYgJE9yaTE7IiAgICAgICAgICAgICAgIC8vIE9y
aXlhIFZpcmFtYSAoZm9yd2FyZCkKLSAgICAgICAgIiRUZWwwICRUZWxWICRUZWwxOyIgICAgICAg
ICAgICAgICAvLyBUZWx1Z3UgVmlyYW1hIChmb3J3YXJkKQotICAgICAgICAiJEthbjAgJEthblYg
JEthbjE7IiAgICAgICAgICAgICAgIC8vIEthbm5hZGEgVmlyYW1hIChmb3J3YXJkKQotICAgICAg
ICAiJE1hbDAgJE1hbFYgJE1hbDE7IiAgICAgICAgICAgICAgIC8vIE1hbGF5YWxhbSBWaXJhbWEg
KGZvcndhcmQpCi0gICAgICAgICIhIXJldmVyc2U7IgotICAgICAgICAiJExGICRDUjsiCi0gICAg
ICAgICIoJEwgfCAkViB8ICRMViB8ICRMVlQpICRMOyIKLSAgICAgICAgIigkViB8ICRUKSAoJExW
IHwgJFYpOyIKLSAgICAgICAgIiRUICgkTFZUIHwgJFQpOyIKLSAgICAgICAgIiRFeHRlbmQgICAg
ICBbXiRDb250cm9sICRDUiAkTEZdOyIKLSAgICAgICAgIiRTcGFjaW5nTWFyayBbXiRDb250cm9s
ICRDUiAkTEZdOyIKLSAgICAgICAgIiRSSSAkUkkgLyAkUkkgJFJJOyIKLSAgICAgICAgIiRSSSAk
Ukk7IgotICAgICAgICAiJEhpbjEgJEhpblYgJEhpbjA7IiAgICAgICAgICAgICAgIC8vIERldmFu
YWdhcmkgVmlyYW1hIChiYWNrd2FyZCkKLSAgICAgICAgIiRCZW4xICRCZW5WICRCZW4wOyIgICAg
ICAgICAgICAgICAvLyBCZW5nYWxpIFZpcmFtYSAoYmFja3dhcmQpCi0gICAgICAgICIkUGFuMSAk
UGFuViAkUGFuMDsiICAgICAgICAgICAgICAgLy8gR3VybXVraGkgVmlyYW1hIChiYWNrd2FyZCkK
LSAgICAgICAgIiRHdWoxICRHdWpWICRHdWowOyIgICAgICAgICAgICAgICAvLyBHdWphcmF0aSBW
aXJhbWEgKGJhY2t3YXJkKQotICAgICAgICAiJE9yaTEgJE9yaVYgJE9yaTA7IiAgICAgICAgICAg
ICAgIC8vIEd1amFyYXRpIFZpcmFtYSAoYmFja3dhcmQpCi0gICAgICAgICIkVGVsMSAkVGVsViAk
VGVsMDsiICAgICAgICAgICAgICAgLy8gVGVsdWd1IFZpcmFtYSAoYmFja3dhcmQpCi0gICAgICAg
ICIkS2FuMSAkS2FuViAkS2FuMDsiICAgICAgICAgICAgICAgLy8gS2FubmFkYSBWaXJhbWEgKGJh
Y2t3YXJkKQotICAgICAgICAiJE1hbDEgJE1hbFYgJE1hbDA7IiAgICAgICAgICAgICAgIC8vIE1h
bGF5YWxhbSBWaXJhbWEgKGJhY2t3YXJkKQotICAgICAgICAiISFzYWZlX3JldmVyc2U7IgotICAg
ICAgICAiISFzYWZlX2ZvcndhcmQ7IjsKLSAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0
YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0b3IgPSBpbml0aWFsaXplSXRlcmF0b3JXaXRoUnVsZXMo
a1J1bGVzKTsKLSNlbHNlIC8vIFBMQVRGT1JNKElPUykKLSAgICAvLyBVc2UgdGhlIHNwZWNpYWwg
VGhhaSBjaGFyYWN0ZXIgYnJlYWsgaXRlcmF0b3IgZm9yIGFsbCBsb2NhbGVzCi0gICAgc3RhdGlj
IFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yID0gaW5pdGlh
bGl6ZUl0ZXJhdG9yKFVCUktfQ0hBUkFDVEVSLCAidGgiKTsKLSNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TKQotCi0gICAgaWYgKCFzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzZXRUZXh0Rm9ySXRlcmF0b3IoKnN0YXRpY0N1
cnNvck1vdmVtZW50SXRlcmF0b3IsIFN0cmluZ1ZpZXcoYnVmZmVyLCBsZW5ndGgpKTsKLX0KLQot
VGV4dEJyZWFrSXRlcmF0b3IqIGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3IHN0
cmluZywgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBwcmlvckNvbnRl
eHQsIHVuc2lnbmVkIHByaW9yQ29udGV4dExlbmd0aCkKLXsKLSAgICBUZXh0QnJlYWtJdGVyYXRv
ciogaXRlcmF0b3IgPSByZWludGVycHJldF9jYXN0PFRleHRCcmVha0l0ZXJhdG9yKj4oTGluZUJy
ZWFrSXRlcmF0b3JQb29sOjpzaGFyZWRQb29sKCkudGFrZShsb2NhbGUpKTsKLSAgICBpZiAoIWl0
ZXJhdG9yKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzZXRDb250ZXh0
QXdhcmVUZXh0Rm9ySXRlcmF0b3IoKml0ZXJhdG9yLCBzdHJpbmcsIHByaW9yQ29udGV4dCwgcHJp
b3JDb250ZXh0TGVuZ3RoKTsKLX0KLQotdm9pZCByZWxlYXNlTGluZUJyZWFrSXRlcmF0b3IoVGV4
dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yKQotewotICAgIEFTU0VSVF9BUkcoaXRlcmF0b3IsIGl0
ZXJhdG9yKTsKLQotICAgIExpbmVCcmVha0l0ZXJhdG9yUG9vbDo6c2hhcmVkUG9vbCgpLnB1dChy
ZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0b3IpKTsKLX0KLQotc3RhdGlj
IFRleHRCcmVha0l0ZXJhdG9yKiBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOwotCi1z
dGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUFuZFN3YXBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0
ZXJhdG9yKFRleHRCcmVha0l0ZXJhdG9yKiBleHBlY3RlZCwgVGV4dEJyZWFrSXRlcmF0b3IqIG5l
d1ZhbHVlKQotewotI2lmIEVOQUJMRShDT01QQVJFX0FORF9TV0FQKQotICAgIHJldHVybiB3ZWFr
Q29tcGFyZUFuZFN3YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZub25TaGFyZWRDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yKSwgZXhwZWN0ZWQsIG5ld1ZhbHVlKTsKLSNlbHNlCi0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChNdXRleCwgbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvck11dGV4
LCAoKSk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3JNdXRleCk7Ci0gICAgaWYgKG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgIT0g
ZXhwZWN0ZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBub25TaGFyZWRDaGFyYWN0ZXJC
cmVha0l0ZXJhdG9yID0gbmV3VmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLX0KLQot
Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJ
dGVyYXRvcihjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQotewotICAgIG1faXRlcmF0
b3IgPSBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOwotCi0gICAgYm9vbCBjcmVhdGVk
SXRlcmF0b3IgPSBtX2l0ZXJhdG9yICYmIGNvbXBhcmVBbmRTd2FwTm9uU2hhcmVkQ2hhcmFjdGVy
QnJlYWtJdGVyYXRvcihtX2l0ZXJhdG9yLCAwKTsKLSAgICBpZiAoIWNyZWF0ZWRJdGVyYXRvcikK
LSAgICAgICAgbV9pdGVyYXRvciA9IGluaXRpYWxpemVJdGVyYXRvcihVQlJLX0NIQVJBQ1RFUik7
Ci0gICAgaWYgKCFtX2l0ZXJhdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2l0ZXJhdG9y
ID0gc2V0VGV4dEZvckl0ZXJhdG9yKCptX2l0ZXJhdG9yLCBTdHJpbmdWaWV3KGJ1ZmZlciwgbGVu
Z3RoKSk7Ci19Ci0KLU5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6On5Ob25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yKCkKLXsKLSAgICBpZiAoIWNvbXBhcmVBbmRTd2FwTm9uU2hh
cmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcigwLCBtX2l0ZXJhdG9yKSkKLSAgICAgICAgdWJya19j
bG9zZShyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4obV9pdGVyYXRvcikpOwotfQot
Ci0KLS8vIEl0ZXJhdG9yIGltcGxlbWVuYXRpb24uCi0KLWludCB0ZXh0QnJlYWtGaXJzdChUZXh0
QnJlYWtJdGVyYXRvciogaXRlcmF0b3IpCi17Ci0gICAgcmV0dXJuIHVicmtfZmlyc3QocmVpbnRl
cnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSk7Ci19Ci0KLWludCB0ZXh0QnJl
YWtMYXN0KFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKLXsKLSAgICByZXR1cm4gdWJya19s
YXN0KHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvcikpOwotfQotCi1p
bnQgdGV4dEJyZWFrTmV4dChUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IpCi17Ci0gICAgcmV0
dXJuIHVicmtfbmV4dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0b3Ip
KTsKLX0KLQotaW50IHRleHRCcmVha1ByZXZpb3VzKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRv
cikKLXsKLSAgICByZXR1cm4gdWJya19wcmV2aW91cyhyZWludGVycHJldF9jYXN0PFVCcmVha0l0
ZXJhdG9yKj4oaXRlcmF0b3IpKTsKLX0KLQotaW50IHRleHRCcmVha1ByZWNlZGluZyhUZXh0QnJl
YWtJdGVyYXRvciogaXRlcmF0b3IsIGludCBwb3MpCi17Ci0gICAgcmV0dXJuIHVicmtfcHJlY2Vk
aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvciksIHBvcyk7Ci19
Ci0KLWludCB0ZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yLCBp
bnQgcG9zKQotewotICAgIHJldHVybiB1YnJrX2ZvbGxvd2luZyhyZWludGVycHJldF9jYXN0PFVC
cmVha0l0ZXJhdG9yKj4oaXRlcmF0b3IpLCBwb3MpOwotfQotCi1pbnQgdGV4dEJyZWFrQ3VycmVu
dChUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IpCi17Ci0gICAgcmV0dXJuIHVicmtfY3VycmVu
dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0b3IpKTsKLX0KLQotYm9v
bCBpc1RleHRCcmVhayhUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IsIGludCBwb3NpdGlvbikK
LXsKLSAgICByZXR1cm4gdWJya19pc0JvdW5kYXJ5KHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRl
cmF0b3IqPihpdGVyYXRvciksIHBvc2l0aW9uKTsKLX0KLQotYm9vbCBpc1dvcmRUZXh0QnJlYWso
VGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yKQotewotICAgIGludCBydWxlU3RhdHVzID0gdWJy
a19nZXRSdWxlU3RhdHVzKHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRv
cikpOwotICAgIHJldHVybiBydWxlU3RhdHVzICE9IFVCUktfV09SRF9OT05FOwotfQotCi19Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNo
YW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hh
bnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcAkocmV2aXNpb24gMTYyMDQzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkxLDE0ICs5MSwxNCBAQCB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6Y2hl
Y2tTcGVsbGluZ09mCiAgICAgaWYgKCFoYXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyID0gd29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5n
LmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBVQnJlYWtJdGVyYXRvciogaXRl
ciA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoc3RyaW5nKSk7CiAgICAgaWYgKCFpdGVy
KQogICAgICAgICByZXR1cm47CiAKICAgICBDU3RyaW5nIHV0ZjhTdHJpbmcgPSBzdHJpbmcudXRm
OCgpOwotICAgIGludCBzdGFydCA9IHRleHRCcmVha0ZpcnN0KGl0ZXIpOwotICAgIGZvciAoaW50
IGVuZCA9IHRleHRCcmVha05leHQoaXRlcik7IGVuZCAhPSBUZXh0QnJlYWtEb25lOyBlbmQgPSB0
ZXh0QnJlYWtOZXh0KGl0ZXIpKSB7Ci0gICAgICAgIGlmIChpc1dvcmRUZXh0QnJlYWsoaXRlcikp
IHsKKyAgICBpbnQgc3RhcnQgPSB1YnJrX2ZpcnN0KGl0ZXIpOworICAgIGZvciAoaW50IGVuZCA9
IHVicmtfbmV4dChpdGVyKTsgZW5kICE9IFVCUktfRE9ORTsgZW5kID0gdWJya19uZXh0KGl0ZXIp
KSB7CisgICAgICAgIGlmICh1YnJrX2dldFJ1bGVTdGF0dXMoaXRlcikgIT0gVUJSS19XT1JEX05P
TkUpIHsKICAgICAgICAgICAgIGNoZWNrU3BlbGxpbmdPZldvcmQodXRmOFN0cmluZywgc3RhcnQs
IGVuZCwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwogICAgICAgICAg
ICAgLy8gU3RvcCBjaGVja2luZyB0aGUgbmV4dCB3b3JkcyBJZiB0aGUgY3VycmVudCB3b3JkIGlz
IG1pc3NwZWxsZWQsIHRvIGRvIG5vdCBvdmVyd3JpdGUgaXRzIG1pc3NwZWxsZWQgbG9jYXRpb24g
YW5kIGxlbmd0aC4KICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ0xlbmd0aCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDE2MjA0MykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM0LDcgKzEzNCw3IEBAIHN0YXRpYyB2b2lkIG1ha2VDYXBpdGFsaXplZChTdHJpbmcqIHN0
cmkKICAgICAgICAgICAgIHN0cmluZ1dpdGhQcmV2aW91c1tpXSA9IHN0cmluZ0ltcGxbaSAtIDFd
OwogICAgIH0KIAotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBib3VuZGFyeSA9IHdvcmRCcmVha0l0
ZXJhdG9yKHN0cmluZ1dpdGhQcmV2aW91cy5jaGFyYWN0ZXJzKCksIGxlbmd0aCArIDEpOworICAg
IFVCcmVha0l0ZXJhdG9yKiBib3VuZGFyeSA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXco
c3RyaW5nV2l0aFByZXZpb3VzLmNoYXJhY3RlcnMoKSwgbGVuZ3RoICsgMSkpOwogICAgIGlmICgh
Ym91bmRhcnkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTQyLDggKzE0Miw4IEBAIHN0YXRpYyB2
b2lkIG1ha2VDYXBpdGFsaXplZChTdHJpbmcqIHN0cmkKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCk7CiAKICAgICBpbnQzMl90IGVuZE9mV29yZDsKLSAgICBpbnQzMl90IHN0YXJ0
T2ZXb3JkID0gdGV4dEJyZWFrRmlyc3QoYm91bmRhcnkpOwotICAgIGZvciAoZW5kT2ZXb3JkID0g
dGV4dEJyZWFrTmV4dChib3VuZGFyeSk7IGVuZE9mV29yZCAhPSBUZXh0QnJlYWtEb25lOyBzdGFy
dE9mV29yZCA9IGVuZE9mV29yZCwgZW5kT2ZXb3JkID0gdGV4dEJyZWFrTmV4dChib3VuZGFyeSkp
IHsKKyAgICBpbnQzMl90IHN0YXJ0T2ZXb3JkID0gdWJya19maXJzdChib3VuZGFyeSk7CisgICAg
Zm9yIChlbmRPZldvcmQgPSB1YnJrX25leHQoYm91bmRhcnkpOyBlbmRPZldvcmQgIT0gVUJSS19E
T05FOyBzdGFydE9mV29yZCA9IGVuZE9mV29yZCwgZW5kT2ZXb3JkID0gdWJya19uZXh0KGJvdW5k
YXJ5KSkgewogICAgICAgICBpZiAoc3RhcnRPZldvcmQpIC8vIElnbm9yZSBmaXJzdCBjaGFyIG9m
IHByZXZpb3VzIHN0cmluZwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdHJpbmdJbXBsW3N0
YXJ0T2ZXb3JkIC0gMV0gPT0gbm9CcmVha1NwYWNlID8gbm9CcmVha1NwYWNlIDogdV90b3RpdGxl
KHN0cmluZ1dpdGhQcmV2aW91c1tzdGFydE9mV29yZF0pKTsKICAgICAgICAgZm9yIChpbnQgaSA9
IHN0YXJ0T2ZXb3JkICsgMTsgaSA8IGVuZE9mV29yZDsgaSsrKQpAQCAtMTM0MCwxMiArMTM0MCwx
MiBAQCBpbnQgUmVuZGVyVGV4dDo6cHJldmlvdXNPZmZzZXQoaW50IGN1cnJlCiAgICAgICAgIHJl
dHVybiBjdXJyZW50IC0gMTsKIAogICAgIFN0cmluZ0ltcGwqIHRleHRJbXBsID0gbV90ZXh0Lmlt
cGwoKTsKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSBjdXJzb3JNb3ZlbWVudEl0
ZXJhdG9yKHRleHRJbXBsLT5jaGFyYWN0ZXJzMTYoKSwgdGV4dEltcGwtPmxlbmd0aCgpKTsKKyAg
ICBVQnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKFN0cmlu
Z1ZpZXcodGV4dEltcGwtPmNoYXJhY3RlcnMxNigpLCB0ZXh0SW1wbC0+bGVuZ3RoKCkpKTsKICAg
ICBpZiAoIWl0ZXJhdG9yKQogICAgICAgICByZXR1cm4gY3VycmVudCAtIDE7CiAKLSAgICBsb25n
IHJlc3VsdCA9IHRleHRCcmVha1ByZWNlZGluZyhpdGVyYXRvciwgY3VycmVudCk7Ci0gICAgaWYg
KHJlc3VsdCA9PSBUZXh0QnJlYWtEb25lKQorICAgIGxvbmcgcmVzdWx0ID0gdWJya19wcmVjZWRp
bmcoaXRlcmF0b3IsIGN1cnJlbnQpOworICAgIGlmIChyZXN1bHQgPT0gVUJSS19ET05FKQogICAg
ICAgICByZXN1bHQgPSBjdXJyZW50IC0gMTsKIAogCkBAIC0xNDkzLDEyICsxNDkzLDEyIEBAIGlu
dCBSZW5kZXJUZXh0OjpuZXh0T2Zmc2V0KGludCBjdXJyZW50KSAKICAgICAgICAgcmV0dXJuIGN1
cnJlbnQgKyAxOwogCiAgICAgU3RyaW5nSW1wbCogdGV4dEltcGwgPSBtX3RleHQuaW1wbCgpOwot
ICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IGN1cnNvck1vdmVtZW50SXRlcmF0b3Io
dGV4dEltcGwtPmNoYXJhY3RlcnMxNigpLCB0ZXh0SW1wbC0+bGVuZ3RoKCkpOworICAgIFVCcmVh
a0l0ZXJhdG9yKiBpdGVyYXRvciA9IGN1cnNvck1vdmVtZW50SXRlcmF0b3IoU3RyaW5nVmlldyh0
ZXh0SW1wbC0+Y2hhcmFjdGVyczE2KCksIHRleHRJbXBsLT5sZW5ndGgoKSkpOwogICAgIGlmICgh
aXRlcmF0b3IpCiAgICAgICAgIHJldHVybiBjdXJyZW50ICsgMTsKIAotICAgIGxvbmcgcmVzdWx0
ID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0ZXJhdG9yLCBjdXJyZW50KTsKLSAgICBpZiAocmVzdWx0
ID09IFRleHRCcmVha0RvbmUpCisgICAgbG9uZyByZXN1bHQgPSB1YnJrX2ZvbGxvd2luZyhpdGVy
YXRvciwgY3VycmVudCk7CisgICAgaWYgKHJlc3VsdCA9PSBVQlJLX0RPTkUpCiAgICAgICAgIHJl
c3VsdCA9IGN1cnJlbnQgKyAxOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9icmVha19saW5lcy5oCShyZXZpc2lvbiAxNjIwNDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTksOSAr
OTksOSBAQCBpbmxpbmUgaW50IG5leHRCcmVha2FibGVQb3NpdGlvbihMYXp5TGluCiAgICAgICAg
ICAgICBpZiAobmV4dEJyZWFrIDwgaSkgewogICAgICAgICAgICAgICAgIC8vIERvbid0IGJyZWFr
IGlmIHBvc2l0aW9uZWQgYXQgc3RhcnQgb2YgcHJpbWFyeSBjb250ZXh0IGFuZCB0aGVyZSBpcyBu
byBwcmlvciBjb250ZXh0LgogICAgICAgICAgICAgICAgIGlmIChpIHx8IHByaW9yQ29udGV4dExl
bmd0aCkgewotICAgICAgICAgICAgICAgICAgICBUZXh0QnJlYWtJdGVyYXRvciogYnJlYWtJdGVy
YXRvciA9IGxhenlCcmVha0l0ZXJhdG9yLmdldChwcmlvckNvbnRleHRMZW5ndGgpOworICAgICAg
ICAgICAgICAgICAgICBVQnJlYWtJdGVyYXRvciogYnJlYWtJdGVyYXRvciA9IGxhenlCcmVha0l0
ZXJhdG9yLmdldChwcmlvckNvbnRleHRMZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
YnJlYWtJdGVyYXRvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEJyZWFrID0gdGV4
dEJyZWFrRm9sbG93aW5nKGJyZWFrSXRlcmF0b3IsIGkgLSAxICsgcHJpb3JDb250ZXh0TGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRCcmVhayA9IHVicmtfZm9sbG93aW5nKGJy
ZWFrSXRlcmF0b3IsIGkgLSAxICsgcHJpb3JDb250ZXh0TGVuZ3RoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChuZXh0QnJlYWsgPj0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXh0QnJlYWsgLT0gcHJpb3JDb250ZXh0TGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjIwNDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNC0wMS0xMiAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFRleHRCcmVha0l0ZXJhdG9yJ3Mgc2hv
dWxkIHN1cHBvcnQgTGF0aW4tMSBmb3IgYWxsIGl0ZXJhdG9yIHR5cGVzIChQYXJ0IDIpCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY4NTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9l
ZmwvVGV4dENoZWNrZXJFZmwuY3BwOgorICAgICAgICBVcGRhdGUgdG8gdXNlIFVCcmVha0l0ZXJh
dG9yIGRpcmVjdGx5LCBhbmQgcGFzcyBTdHJpbmdWaWV3cyB0byBjb25zdHJ1Y3Rpb24uCisKIDIw
MTQtMDEtMTQgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQgYnVpbGQgZml4IGZvciBDTWFrZSBiYXNlZCBwb3J0cyBhZnRlciByMTYyMDM0
LgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVm
bC5jcHAJKHJldmlzaW9uIDE2MjA0MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
VGV4dENoZWNrZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTIgKzEyNywxMiBAQCBz
dGF0aWMgaW50IG5leHRXb3JkT2Zmc2V0KGNvbnN0IFVDaGFyKiB0CiAgICAgLy8gICAgICAgIG9y
IGFmdGVyICJvZmZzZXQiICh1YnJrX2lzQm91bmRhcnkgc2lkZSBlZmZlY3QpLgogICAgIC8vICAg
ICAgICBGb3IgbWFueSB3b3JkIHNlcGFyYXRvcnMsIHRoZSBtZXRob2QgZG9lc24ndCBwcm9wZXJs
eSBkZXRlcm1pbmUgdGhlIGJvdW5kYXJpZXMKICAgICAvLyAgICAgICAgd2l0aG91dCByZXNldHRp
bmcgdGhlIGl0ZXJhdG9yLgotICAgIFRleHRCcmVha0l0ZXJhdG9yKiB0ZXh0SXRlcmF0b3IgPSB3
b3JkQnJlYWtJdGVyYXRvcih0ZXh0LCBsZW5ndGgpOworICAgIFVCcmVha0l0ZXJhdG9yKiB0ZXh0
SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KHRleHQsIGxlbmd0aCkpOwog
ICAgIGlmICghdGV4dEl0ZXJhdG9yKQogICAgICAgICByZXR1cm4gY3VycmVudE9mZnNldDsKIAog
ICAgIGludCB3b3JkT2Zmc2V0ID0gY3VycmVudE9mZnNldDsKLSAgICB3aGlsZSAod29yZE9mZnNl
dCA8IGxlbmd0aCAmJiBpc1RleHRCcmVhayh0ZXh0SXRlcmF0b3IsIHdvcmRPZmZzZXQpKQorICAg
IHdoaWxlICh3b3JkT2Zmc2V0IDwgbGVuZ3RoICYmIHVicmtfaXNCb3VuZGFyeSh0ZXh0SXRlcmF0
b3IsIHdvcmRPZmZzZXQpKQogICAgICAgICArK3dvcmRPZmZzZXQ7CiAKICAgICAvLyBEbyBub3Qg
dHJlYXQgdGhlIHdvcmQncyBib3VuZGFyeSBhcyBhIHNlcGFyYXRvci4KQEAgLTE1Myw3ICsxNTMs
NyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6CiAgICAgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gcGFyYWdyYXBoQ2hlY2tpbmdSZXN1bHQ7CiAjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCiAgICAgaWYgKGNoZWNraW5nVHlwZXMgJiBUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmcpIHsKLSAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIHRleHRJdGVyYXRvciA9IHdvcmRC
cmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0aCk7CisgICAgICAgIFVCcmVha0l0ZXJhdG9yKiB0ZXh0
SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KHRleHQsIGxlbmd0aCkpOwog
ICAgICAgICBpZiAoIXRleHRJdGVyYXRvcikKICAgICAgICAgICAgIHJldHVybiBwYXJhZ3JhcGhD
aGVja2luZ1Jlc3VsdDsKIApAQCAtMTYxLDcgKzE2MSw3IEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IFRleHRDaGVja2VyOjoKICAgICAgICAgLy8gaW52b2x2ZSB0aGUgY2xpZW50IHRvIGNo
ZWNrIHNwZWxsaW5nIGZvciB0aGVtLgogICAgICAgICBpbnQgb2Zmc2V0ID0gbmV4dFdvcmRPZmZz
ZXQodGV4dCwgbGVuZ3RoLCAwKTsKICAgICAgICAgaW50IGxlbmd0aFN0cmlwID0gbGVuZ3RoOwot
ICAgICAgICB3aGlsZSAobGVuZ3RoU3RyaXAgPiAwICYmIGlzVGV4dEJyZWFrKHRleHRJdGVyYXRv
ciwgbGVuZ3RoU3RyaXAgLSAxKSkKKyAgICAgICAgd2hpbGUgKGxlbmd0aFN0cmlwID4gMCAmJiB1
YnJrX2lzQm91bmRhcnkodGV4dEl0ZXJhdG9yLCBsZW5ndGhTdHJpcCAtIDEpKQogICAgICAgICAg
ICAgLS1sZW5ndGhTdHJpcDsKIAogICAgICAgICB3aGlsZSAob2Zmc2V0ID49IDAgJiYgb2Zmc2V0
IDwgbGVuZ3RoU3RyaXApIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjA0MykK
KysrIFNvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE0IEBACisyMDE0LTAxLTEyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgVGV4dEJyZWFrSXRlcmF0b3IncyBzaG91bGQgc3VwcG9ydCBMYXRpbi0xIGZvciBhbGwgaXRl
cmF0b3IgdHlwZXMgKFBhcnQgMikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNjg1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTWlzYy9XZWJOU1N0cmluZ0RyYXdpbmcubW06CisgICAgICAgICogTWlz
Yy9XZWJVSUtpdFN1cHBvcnQubW06CisgICAgICAgIFVwZGF0ZSB0byB1c2UgVUJyZWFrSXRlcmF0
b3IgZGlyZWN0bHksIGFuZCBwYXNzIFN0cmluZ1ZpZXdzIHRvIGNvbnN0cnVjdGlvbi4KKwogMjAx
NC0wMS0xNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBdm9pZCBQTEFURk9STSgpIG1hY3JvcyBpbiBleHBvcnRlZCBoZWFkZXJzLgpJbmRleDogU291
cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJOU1N0cmluZ0RyYXdpbmcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJOU1N0cmluZ0RyYXdpbmcubW0JKHJldmlzaW9uIDE2
MjA0MykKKysrIFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2ViTlNTdHJpbmdEcmF3aW5nLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC03OCwxMCArNzgsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHNob3Vs
ZERpc2FibGVXb3JkUm91bgogICAgIHJldHVybiAhd29yZFJvdW5kaW5nRW5hYmxlZDsKIH0KIAot
c3RhdGljIGlubGluZSBpbnQgYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhUZXh0QnJlYWtJdGVy
YXRvciogaXQsIGludCBvZmZzZXQsIGludCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIGludCBib3Vu
ZGVkVGV4dEJyZWFrRm9sbG93aW5nKFVCcmVha0l0ZXJhdG9yKiBpdCwgaW50IG9mZnNldCwgaW50
IGxlbmd0aCkKIHsKLSAgICBpbnQgcmVzdWx0ID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0LCBvZmZz
ZXQpOwotICAgIHJldHVybiByZXN1bHQgPT0gVGV4dEJyZWFrRG9uZSA/IGxlbmd0aCA6IHJlc3Vs
dDsKKyAgICBpbnQgcmVzdWx0ID0gdWJya19mb2xsb3dpbmcoaXQsIG9mZnNldCk7CisgICAgcmV0
dXJuIHJlc3VsdCA9PSBVQlJLX0RPTkUgPyBsZW5ndGggOiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgRm9udCByZW5kZXJlckZvckZvbnQoIEdTRm9udFJlZiBmb250ICkKQEAgLTQ1Niw3ICs0
NTYsNyBAQCAtIChDR1NpemUpX193ZWJfZHJhd0luUmVjdDooQ0dSZWN0KXJlY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChlbGxpcHNpc1N0eWxlID09IFdlYkVsbGlwc2lzU3R5bGVDaGFy
YWN0ZXJXcmFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGJyZWFr
IG9uIGNoYXJhY3RlcnMuIFdlIHNob3VsZCBkbyBzb21ldGhpbmcgc21hcnRlciwgbGlrZSBzcGxp
dCB0aGUgbGVuZ3RoIG9mIHRoZSBlbnRpcmUgbGluZSAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBEb24ndCwgaG93ZXZlciwgYnJlYWsgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYXJhY3Rl
ci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0
ZXJhdG9yIGl0KHBvcywgbGVuZ3RoUmVtYWluaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KFN0cmluZ1ZpZXcocG9zLCBs
ZW5ndGhSZW1haW5pbmcpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1BvcyA9
IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoaXQsIDAsIGxlbmd0aFJlbWFpbmluZyk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTUzNyw3ICs1MzcsNyBAQCAtIChDR1NpemUpX193ZWJf
ZHJhd0luUmVjdDooQ0dSZWN0KXJlY3QKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtdXN0
IGJlIGEgbG9uZyB3b3JkIHRoYXQgZG9lc24ndCBmaXQgaW5zaWRlIHRoZSBlbnRpcmUgd2lkdGgK
ICAgICAgICAgICAgICAgICAgICAgLy8gRml0IGl0IG9uIGEgbGluZSBvbmUgY2hhcmFjdGVyIGF0
IGEgdGltZSBhbmQgYnJlYWsgd2hlbiBubyBtb3JlIGNoYXJhY3RlcnMgZml0CiAgICAgICAgICAg
ICAgICAgICAgIC8vIEZvcmNlIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgdG8gYXZvaWQgdGhlIGVk
Z2UgY2FzZSB3aGVyZSBhIHNpbmdsZSBnbHlwaCBkb2Vzbid0IGZpdCB3aXRoaW4gd2lkdGgKLSAg
ICAgICAgICAgICAgICAgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChwb3Ms
IGxlbmd0aFJlbWFpbmluZyk7CisgICAgICAgICAgICAgICAgICAgIE5vblNoYXJlZENoYXJhY3Rl
ckJyZWFrSXRlcmF0b3IgaXQoU3RyaW5nVmlldyhwb3MsIGxlbmd0aFJlbWFpbmluZykpOwogICAg
ICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgaW50
IG5leHRDaGFyQnJlYWsgPSBib3VuZGVkVGV4dEJyZWFrRm9sbG93aW5nKGl0LCBvZmZzZXQsIGxl
bmd0aFJlbWFpbmluZyk7CiAgICAgICAgICAgICAgICAgICAgIFRleHRSdW4gdGV4dFJ1bihwb3Ms
IG5leHRDaGFyQnJlYWspOwpJbmRleDogU291cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJVSUtpdFN1
cHBvcnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJVSUtpdFN1
cHBvcnQubW0JKHJldmlzaW9uIDE2MjA0MykKKysrIFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2Vi
VUlLaXRTdXBwb3J0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIGZsb2F0IFdl
YktpdEdldE1pbmltdW1ab29tRm9udFNpemUodm9pZCkKICAgICByZXR1cm4gV0tHZXRNaW5pbXVt
Wm9vbUZvbnRTaXplKCk7CiB9CiAKLWludCBXZWJLaXRHZXRMYXN0TGluZUJyZWFrSW5CdWZmZXIo
VUNoYXIgKmNoYXJhY3RlcnMsIGludCBwb3NpdGlvbiwgaW50IGxlbmd0aCkKK2ludCBXZWJLaXRH
ZXRMYXN0TGluZUJyZWFrSW5CdWZmZXIoVUNoYXIqIGNoYXJhY3RlcnMsIGludCBwb3NpdGlvbiwg
aW50IGxlbmd0aCkKIHsKICAgICBpbnQgbGFzdEJyZWFrUG9zID0gcG9zaXRpb247CiAgICAgaW50
IGJyZWFrUG9zID0gMDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221324</attachid>
            <date>2014-01-15 19:45:03 -0800</date>
            <delta_ts>2014-01-15 21:21:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126856-20140115194503.patch</filename>
            <type>text/plain</type>
            <size>39056</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE0LTAxLTE1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IncyBzaG91
bGQgc3VwcG9ydCBMYXRpbi0xIGZvciBhbGwgaXRlcmF0b3IgdHlwZXMgKFBhcnQgMikKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjg1NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIGNvbnRl
bnRzIG9mIFRleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCB0byBUZXh0QnJlYWtJdGVyYXRvci5jcHAg
YW5kIHJlbW92ZSBUZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFBsYXRm
b3JtR1RLLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2o6
CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcDogUmVtb3ZlZC4KKwogMjAxNC0wMS0xNSAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVNlc3Npb25N
YW5hZ2VyIHNob3VsZG4ndCB1c2Ugc3RkOjptYXAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxNjIwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgwNiw3ICsyODA2LDYgQEAgaWYgKFdURl9VU0VfSUNVX1VOSUNPREUpCiAg
ICAgICAgIHBsYXRmb3JtL3RleHQvaWN1L1VUZXh0UHJvdmlkZXIuY3BwCiAgICAgICAgIHBsYXRm
b3JtL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEuY3BwCiAgICAgICAgIHBsYXRmb3JtL3Rl
eHQvaWN1L1VUZXh0UHJvdmlkZXJVVEYxNi5jcHAKLSAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0
QnJlYWtJdGVyYXRvcklDVS5jcHAKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1Uu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwCiAg
ICAgKQpJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNjIwNDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC02MDE5LDcgKzYwMTksNiBAQCBwbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRDaGVja2luZy5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RL
LmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCShy
ZXZpc2lvbiAxNjIwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQkod29y
a2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEuY3BwCiAgICAgcGxh
dGZvcm0vdGV4dC9pY3UvVVRleHRQcm92aWRlclVURjE2LmNwcAogICAgIHBsYXRmb3JtL3RleHQv
TG9jYWxlSUNVLmNwcAotICAgIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3Bw
CiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCiAgICAgcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAKIApAQCAtMjY0LDcgKzI2Myw2IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVQbGF0Zm9ybUdUS19TT1VSQ0VTCiAgICAgcGxhdGZvcm0vdGV4dC9pY3UvVVRl
eHRQcm92aWRlckxhdGluMS5jcHAKICAgICBwbGF0Zm9ybS90ZXh0L2ljdS9VVGV4dFByb3ZpZGVy
VVRGMTYuY3BwCiAgICAgcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwCi0gICAgcGxhdGZvcm0v
dGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y0lDVS5jcHAKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcAog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHBy
b2oJKHJldmlzaW9uIDE2MjA0MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg1NDMsMTUgKzg1NDMsNiBAQAogICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICA8
L0NsQ29tcGlsZT4KLQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cdGV4dFxU
ZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAiPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98V2luMzInIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98eDY0
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMy
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCci
PnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0Q29kZWMuY3BwIj4KICAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Jl
bGVhc2V8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCShy
ZXZpc2lvbiAxNjIwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTIwMTMsOSArMjAxMyw2IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVx0ZXh0XFRleHRCcmVha0l0ZXJhdG9y
LmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXHRleHQ8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dEJyZWFr
SXRlcmF0b3JJQ1UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cdGV4dDwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cdGV4
dFxUZXh0Q29kZWMuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cdGV4dDwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTYyMDQzKQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00
NTU2LDcgKzQ1NTYsNiBAQAogCQlCMkMzREEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVk
U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzRDlGRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBMzQwRDAwNkMxRDAw
RUY2RjI2IC8qIFRleHRCb3VuZGFyaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMkMzREEwNDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJvdW5kYXJp
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
MkMzREEzNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTA2MEQwMDZDMUQwMEVG
NkYyNiAvKiBUZXh0QnJlYWtJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCUIyQzNEQTM3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0QnJl
YWtJdGVyYXRvcklDVS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMkMzREEwNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0b3JJQ1Uu
Y3BwICovOyB9OwogCQlCMkMzREEzODBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0
b3JJbnRlcm5hbElDVS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJDM0RBMDgwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJu
YWxJQ1UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCMkMzREEzOTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEQTA5MEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0Q29kZWMuY3BwICovOyB9OwogCQlCMkMzREEzQTBEMDA2QzFEMDBFRjZGMjYgLyog
VGV4dENvZGVjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkMzREEwQTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExNzg4LDcgKzExNzg3LDYgQEAK
IAkJQjJDM0Q5RkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VnbWVudGVkU3RyaW5nLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEQTA0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRh
cmllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEJvdW5kYXJpZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMDYwRDAwNkMxRDAwRUY2RjI2
IC8qIFRleHRCcmVha0l0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZXh0QnJlYWtJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMz
REEwNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCcmVha0l0ZXJhdG9ySUNVLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMDgwRDAwNkMxRDAwRUY2RjI2IC8q
IFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMDkwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENvZGVjLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMEEwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRDb2RlYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvZGVjLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDEzNCw3ICsyMDEzMiw2IEBACiAJCQkJ
QjJDM0RBMDQwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCb3VuZGFyaWVzLmggKi8sCiAJCQkJQkNE
OEE1RUYxNUY1NkYyQzAwOThEMDcxIC8qIFRleHRCcmVha0l0ZXJhdG9yLmNwcCAqLywKIAkJCQlC
MkMzREEwNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0b3IuaCAqLywKLQkJCQlC
MkMzREEwNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwICovLAog
CQkJCUIyQzNEQTA4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0QnJlYWtJdGVyYXRvckludGVybmFs
SUNVLmggKi8sCiAJCQkJQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xp
ZW50LmggKi8sCiAJCQkJQTc3RDAwMTExMzNCMEFFQjAwRDY2NThDIC8qIFRleHRDaGVja2luZy5o
ICovLApAQCAtMjkwOTksNyArMjkwOTYsNiBAQAogCQkJCTM3MkMwMEM0MTI5NjExRjEwMDVDOTU3
NSAvKiBUZXh0Qm91bmRhcmllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkFGRkM5NzBEMDBB
NURGMDAzMDA3NEQgLyogVGV4dEJvdW5kYXJpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0Q4
QTVGMDE1RjU2RjJDMDA5OEQwNzEgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQjJDM0RBMzcwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySUNV
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzk4MEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0
QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEQkY4
REQxMjc2OTE5QzAwNkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwNzhFMDkzMTE3RDE2ODQyMDA0MjBBQTEgLyogTWVkaWFTdHJlYW1DZW50ZXJNYWMu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRCcmVha0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTYyMDQzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDggKzIyLDMzNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
eHRCcmVha0l0ZXJhdG9yLmgiCiAKKyNpbmNsdWRlICJMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1Uu
aCIKKyNpbmNsdWRlICJVVGV4dFByb3ZpZGVyTGF0aW4xLmgiCisjaW5jbHVkZSAiVVRleHRQcm92
aWRlclVURjE2LmgiCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdWaWV3Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorLy8gSXRlcmF0b3IgaW5pdGlhbGl6YXRpb24KKworc3RhdGljIFRl
eHRCcmVha0l0ZXJhdG9yKiBpbml0aWFsaXplSXRlcmF0b3IoVUJyZWFrSXRlcmF0b3JUeXBlIHR5
cGUsIGNvbnN0IGNoYXIqIGxvY2FsZSA9IGN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCgpKQorewor
ICAgIFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBUZXh0QnJlYWtJ
dGVyYXRvciogaXRlcmF0b3IgPSByZWludGVycHJldF9jYXN0PFRleHRCcmVha0l0ZXJhdG9yKj4o
dWJya19vcGVuKHR5cGUsIGxvY2FsZSwgMCwgMCwgJm9wZW5TdGF0dXMpKTsKKyAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKFVfU1VDQ0VTUyhvcGVuU3RhdHVzKSwgIklDVSBjb3VsZCBub3Qgb3BlbiBh
IGJyZWFrIGl0ZXJhdG9yOiAlcyAoJWQpIiwgdV9lcnJvck5hbWUob3BlblN0YXR1cyksIG9wZW5T
dGF0dXMpOworICAgIHJldHVybiBpdGVyYXRvcjsKK30KKworI2lmICFQTEFURk9STShJT1MpCitz
dGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIGluaXRpYWxpemVJdGVyYXRvcldpdGhSdWxlcyhjb25z
dCBjaGFyKiBicmVha1J1bGVzKQoreworICAgIFVQYXJzZUVycm9yIHBhcnNlU3RhdHVzOworICAg
IFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBTdHJpbmcgcnVsZXMo
YnJlYWtSdWxlcyk7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gcmVpbnRlcnBy
ZXRfY2FzdDxUZXh0QnJlYWtJdGVyYXRvcio+KHVicmtfb3BlblJ1bGVzKHJ1bGVzLmRlcHJlY2F0
ZWRDaGFyYWN0ZXJzKCksIHJ1bGVzLmxlbmd0aCgpLCAwLCAwLCAmcGFyc2VTdGF0dXMsICZvcGVu
U3RhdHVzKSk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShVX1NVQ0NFU1Mob3BlblN0YXR1cyks
ICJJQ1UgY291bGQgbm90IG9wZW4gYSBicmVhayBpdGVyYXRvcjogJXMgKCVkKSIsIHVfZXJyb3JO
YW1lKG9wZW5TdGF0dXMpLCBvcGVuU3RhdHVzKTsKKyAgICByZXR1cm4gaXRlcmF0b3I7Cit9Cisj
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKworCisvLyBJdGVyYXRvciB0ZXh0IHNldHRpbmcKKwor
c3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzZXRUZXh0Rm9ySXRlcmF0b3IoVGV4dEJyZWFrSXRl
cmF0b3ImIGl0ZXJhdG9yLCBTdHJpbmdWaWV3IHN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLmlz
OEJpdCgpKSB7CisgICAgICAgIFVUZXh0V2l0aEJ1ZmZlciB0ZXh0TG9jYWw7CisgICAgICAgIHRl
eHRMb2NhbC50ZXh0ID0gVVRFWFRfSU5JVElBTElaRVI7CisgICAgICAgIHRleHRMb2NhbC50ZXh0
LmV4dHJhU2l6ZSA9IHNpemVvZih0ZXh0TG9jYWwuYnVmZmVyKTsKKyAgICAgICAgdGV4dExvY2Fs
LnRleHQucEV4dHJhID0gdGV4dExvY2FsLmJ1ZmZlcjsKKworICAgICAgICBVRXJyb3JDb2RlIG9w
ZW5TdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIFVUZXh0KiB0ZXh0ID0gb3BlbkxhdGlu
MVVUZXh0UHJvdmlkZXIoJnRleHRMb2NhbCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5s
ZW5ndGgoKSwgJm9wZW5TdGF0dXMpOworICAgICAgICBpZiAoVV9GQUlMVVJFKG9wZW5TdGF0dXMp
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoInVUZXh0T3BlbkxhdGluMSBmYWlsZWQgd2l0aCBz
dGF0dXMgJWQiLCBvcGVuU3RhdHVzKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisKKyAgICAgICAgVUVycm9yQ29kZSBzZXRUZXh0U3RhdHVzID0gVV9aRVJPX0VSUk9S
OworICAgICAgICB1YnJrX3NldFVUZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3Iq
PigmaXRlcmF0b3IpLCB0ZXh0LCAmc2V0VGV4dFN0YXR1cyk7CisgICAgICAgIGlmIChVX0ZBSUxV
UkUoc2V0VGV4dFN0YXR1cykpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigidWJya19zZXRVVGV4
dCBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBzZXRUZXh0U3RhdHVzKTsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgdXRleHRfY2xvc2UodGV4dCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgVUVycm9yQ29kZSBzZXRUZXh0U3RhdHVzID0gVV9aRVJPX0VS
Uk9SOworICAgICAgICB1YnJrX3NldFRleHQocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRv
cio+KCZpdGVyYXRvciksIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpLCAm
c2V0VGV4dFN0YXR1cyk7CisgICAgICAgIGlmIChVX0ZBSUxVUkUoc2V0VGV4dFN0YXR1cykpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gJml0ZXJhdG9y
OworfQorCitzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHNldENvbnRleHRBd2FyZVRleHRGb3JJ
dGVyYXRvcihUZXh0QnJlYWtJdGVyYXRvciYgaXRlcmF0b3IsIFN0cmluZ1ZpZXcgc3RyaW5nLCBj
b25zdCBVQ2hhciogcHJpb3JDb250ZXh0LCB1bnNpZ25lZCBwcmlvckNvbnRleHRMZW5ndGgpCit7
CisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkgeworICAgICAgICBVVGV4dFdpdGhCdWZmZXIgdGV4
dExvY2FsOworICAgICAgICB0ZXh0TG9jYWwudGV4dCA9IFVURVhUX0lOSVRJQUxJWkVSOworICAg
ICAgICB0ZXh0TG9jYWwudGV4dC5leHRyYVNpemUgPSBzaXplb2YodGV4dExvY2FsLmJ1ZmZlcik7
CisgICAgICAgIHRleHRMb2NhbC50ZXh0LnBFeHRyYSA9IHRleHRMb2NhbC5idWZmZXI7CisKKyAg
ICAgICAgVUVycm9yQ29kZSBvcGVuU3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICBVVGV4
dCogdGV4dCA9IG9wZW5MYXRpbjFDb250ZXh0QXdhcmVVVGV4dFByb3ZpZGVyKCZ0ZXh0TG9jYWws
IHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksIHByaW9yQ29udGV4dCwgcHJp
b3JDb250ZXh0TGVuZ3RoLCAmb3BlblN0YXR1cyk7CisgICAgICAgIGlmIChVX0ZBSUxVUkUob3Bl
blN0YXR1cykpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigib3BlbkxhdGluMUNvbnRleHRBd2Fy
ZVVUZXh0UHJvdmlkZXIgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgb3BlblN0YXR1cyk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIFVFcnJvckNvZGUg
c2V0VGV4dFN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdWJya19zZXRVVGV4dChyZWlu
dGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oJml0ZXJhdG9yKSwgdGV4dCwgJnNldFRleHRT
dGF0dXMpOworICAgICAgICBpZiAoVV9GQUlMVVJFKHNldFRleHRTdGF0dXMpKSB7CisgICAgICAg
ICAgICBMT0dfRVJST1IoInVicmtfc2V0VVRleHQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgc2V0
VGV4dFN0YXR1cyk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisg
ICAgICAgIHV0ZXh0X2Nsb3NlKHRleHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIFVUZXh0IHRl
eHRMb2NhbCA9IFVURVhUX0lOSVRJQUxJWkVSOworCisgICAgICAgIFVFcnJvckNvZGUgb3BlblN0
YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgVVRleHQqIHRleHQgPSBvcGVuVVRGMTZDb250
ZXh0QXdhcmVVVGV4dFByb3ZpZGVyKCZ0ZXh0TG9jYWwsIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwg
c3RyaW5nLmxlbmd0aCgpLCBwcmlvckNvbnRleHQsIHByaW9yQ29udGV4dExlbmd0aCwgJm9wZW5T
dGF0dXMpOworICAgICAgICBpZiAoVV9GQUlMVVJFKG9wZW5TdGF0dXMpKSB7CisgICAgICAgICAg
ICBMT0dfRVJST1IoIm9wZW5VVEYxNkNvbnRleHRBd2FyZVVUZXh0UHJvdmlkZXIgZmFpbGVkIHdp
dGggc3RhdHVzICVkIiwgb3BlblN0YXR1cyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorCisgICAgICAgIFVFcnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9IFVfWkVST19FUlJPUjsK
KyAgICAgICAgdWJya19zZXRVVGV4dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4o
Jml0ZXJhdG9yKSwgdGV4dCwgJnNldFRleHRTdGF0dXMpOworICAgICAgICBpZiAoVV9GQUlMVVJF
KHNldFRleHRTdGF0dXMpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoInVicmtfc2V0VVRleHQg
ZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgc2V0VGV4dFN0YXR1cyk7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHV0ZXh0X2Nsb3NlKHRleHQpOworICAg
IH0KKworICAgIHJldHVybiAmaXRlcmF0b3I7Cit9CisKKworLy8gU3RhdGljIGl0ZXJhdG9ycwor
CitUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIGJ1ZmZl
ciwgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY1dv
cmRCcmVha0l0ZXJhdG9yID0gaW5pdGlhbGl6ZUl0ZXJhdG9yKFVCUktfV09SRCk7CisgICAgaWYg
KCFzdGF0aWNXb3JkQnJlYWtJdGVyYXRvcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICByZXR1cm4gc2V0VGV4dEZvckl0ZXJhdG9yKCpzdGF0aWNXb3JkQnJlYWtJdGVyYXRvciwgU3Ry
aW5nVmlldyhidWZmZXIsIGxlbmd0aCkpOworfQorCitUZXh0QnJlYWtJdGVyYXRvciogc2VudGVu
Y2VCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBidWZmZXIsIGludCBsZW5ndGgpCit7CisgICAg
c3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3IgPSBp
bml0aWFsaXplSXRlcmF0b3IoVUJSS19TRU5URU5DRSk7CisgICAgaWYgKCFzdGF0aWNTZW50ZW5j
ZUJyZWFrSXRlcmF0b3IpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHNl
dFRleHRGb3JJdGVyYXRvcigqc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yLCBTdHJpbmdWaWV3
KGJ1ZmZlciwgbGVuZ3RoKSk7Cit9CisKK1RleHRCcmVha0l0ZXJhdG9yKiBjdXJzb3JNb3ZlbWVu
dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBidWZmZXIsIGludCBsZW5ndGgpCit7CisjaWYgIVBMQVRG
T1JNKElPUykKKyAgICAvLyBUaGlzIHJ1bGUgc2V0IGlzIGJhc2VkIG9uIGNoYXJhY3Rlci1icmVh
ayBpdGVyYXRvciBydWxlcyBvZiBJQ1UgNC4wCisgICAgLy8gPGh0dHA6Ly9zb3VyY2UuaWN1LXBy
b2plY3Qub3JnL3JlcG9zL2ljdS9pY3UvdGFncy9yZWxlYXNlLTQtMC9zb3VyY2UvZGF0YS9icmtp
dHIvY2hhci50eHQ+LgorICAgIC8vIFRoZSBtYWpvciBkaWZmZXJlbmNlcyBmcm9tIHRoZSBvcmln
aW5hbCBvbmVzIGFyZSBsaXN0ZWQgYmVsb3c6CisgICAgLy8gKiBSZXBsYWNlZCAnW1xwe0dyYXBo
ZW1lX0NsdXN0ZXJfQnJlYWsgPSBTcGFjaW5nTWFya31dJyB3aXRoICdbXHB7R2VuZXJhbF9DYXRl
Z29yeSA9IFNwYWNpbmcgTWFya30gLSAkRXh0ZW5kXScgZm9yIElDVSAzLjggb3IgZWFybGllcjsK
KyAgICAvLyAqIFJlbW92ZWQgcnVsZXMgdGhhdCBwcmV2ZW50IGEgY3Vyc29yIGZyb20gbW92aW5n
IGFmdGVyIHByZXBlbmQgY2hhcmFjdGVycyAoQnVnIDI0MzQyKTsKKyAgICAvLyAqIEFkZGVkIHJ1
bGVzIHRoYXQgcHJldmVudCBhIGN1cnNvciBmcm9tIG1vdmluZyBhZnRlciB2aXJhbWEgc2lnbnMg
b2YgSW5kaWMgbGFuZ3VhZ2VzIGV4Y2VwdCBUYW1pbCAoQnVnIDE1NzkwKSwgYW5kOworICAgIC8v
ICogQWRkZWQgcnVsZXMgdGhhdCBwcmV2ZW50IGEgY3Vyc29yIGZyb20gbW92aW5nIGJlZm9yZSBK
YXBhbmVzZSBoYWxmLXdpZHRoIGthdGFrYXJhIHZvaWNlZCBtYXJrcy4KKyAgICAvLyAqIEFkZGVk
IHJ1bGVzIGZvciByZWdpb25hbCBpbmRpY2F0b3Igc3ltYm9scy4KKyAgICBzdGF0aWMgY29uc3Qg
Y2hhcioga1J1bGVzID0KKyAgICAgICAgIiRDUiAgICAgID0gW1xccHtHcmFwaGVtZV9DbHVzdGVy
X0JyZWFrID0gQ1J9XTsiCisgICAgICAgICIkTEYgICAgICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rl
cl9CcmVhayA9IExGfV07IgorICAgICAgICAiJENvbnRyb2wgPSBbXFxwe0dyYXBoZW1lX0NsdXN0
ZXJfQnJlYWsgPSBDb250cm9sfV07IgorICAgICAgICAiJFZvaWNlTWFya3MgPSBbXFx1RkY5RVxc
dUZGOUZdOyIgIC8vIEphcGFuZXNlIGhhbGYtd2lkdGgga2F0YWthbmEgdm9pY2VkIG1hcmtzCisg
ICAgICAgICIkRXh0ZW5kICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IEV4dGVuZH0g
JFZvaWNlTWFya3MgLSBbXFx1MEUzMCBcXHUwRTMyIFxcdTBFNDUgXFx1MEVCMCBcXHUwRUIyXV07
IgorICAgICAgICAiJFNwYWNpbmdNYXJrID0gW1tcXHB7R2VuZXJhbF9DYXRlZ29yeSA9IFNwYWNp
bmcgTWFya31dIC0gJEV4dGVuZF07IgorICAgICAgICAiJEwgICAgICAgPSBbXFxwe0dyYXBoZW1l
X0NsdXN0ZXJfQnJlYWsgPSBMfV07IgorICAgICAgICAiJFYgICAgICAgPSBbXFxwe0dyYXBoZW1l
X0NsdXN0ZXJfQnJlYWsgPSBWfV07IgorICAgICAgICAiJFQgICAgICAgPSBbXFxwe0dyYXBoZW1l
X0NsdXN0ZXJfQnJlYWsgPSBUfV07IgorICAgICAgICAiJExWICAgICAgPSBbXFxwe0dyYXBoZW1l
X0NsdXN0ZXJfQnJlYWsgPSBMVn1dOyIKKyAgICAgICAgIiRMVlQgICAgID0gW1xccHtHcmFwaGVt
ZV9DbHVzdGVyX0JyZWFrID0gTFZUfV07IgorICAgICAgICAiJEhpbjAgICAgPSBbXFx1MDkwNS1c
XHUwOTM5XTsiICAgIC8vIERldmFuYWdhcmkgTGV0dGVyIEEsLi4uLEhhCisgICAgICAgICIkSGlu
ViAgICA9IFxcdTA5NEQ7IiAgICAgICAgICAgICAgLy8gRGV2YW5hZ2FyaSBTaWduIFZpcmFtYQor
ICAgICAgICAiJEhpbjEgICAgPSBbXFx1MDkxNS1cXHUwOTM5XTsiICAgIC8vIERldmFuYWdhcmkg
TGV0dGVyIEthLC4uLixIYQorICAgICAgICAiJEJlbjAgICAgPSBbXFx1MDk4NS1cXHUwOUI5XTsi
ICAgIC8vIEJlbmdhbGkgTGV0dGVyIEEsLi4uLEhhCisgICAgICAgICIkQmVuViAgICA9IFxcdTA5
Q0Q7IiAgICAgICAgICAgICAgLy8gQmVuZ2FsaSBTaWduIFZpcmFtYQorICAgICAgICAiJEJlbjEg
ICAgPSBbXFx1MDk5NS1cXHUwOUI5XTsiICAgIC8vIEJlbmdhbGkgTGV0dGVyIEthLC4uLixIYQor
ICAgICAgICAiJFBhbjAgICAgPSBbXFx1MEEwNS1cXHUwQTM5XTsiICAgIC8vIEd1cm11a2hpIExl
dHRlciBBLC4uLixIYQorICAgICAgICAiJFBhblYgICAgPSBcXHUwQTREOyIgICAgICAgICAgICAg
IC8vIEd1cm11a2hpIFNpZ24gVmlyYW1hCisgICAgICAgICIkUGFuMSAgICA9IFtcXHUwQTE1LVxc
dTBBMzldOyIgICAgLy8gR3VybXVraGkgTGV0dGVyIEthLC4uLixIYQorICAgICAgICAiJEd1ajAg
ICAgPSBbXFx1MEE4NS1cXHUwQUI5XTsiICAgIC8vIEd1amFyYXRpIExldHRlciBBLC4uLixIYQor
ICAgICAgICAiJEd1alYgICAgPSBcXHUwQUNEOyIgICAgICAgICAgICAgIC8vIEd1amFyYXRpIFNp
Z24gVmlyYW1hCisgICAgICAgICIkR3VqMSAgICA9IFtcXHUwQTk1LVxcdTBBQjldOyIgICAgLy8g
R3VqYXJhdGkgTGV0dGVyIEthLC4uLixIYQorICAgICAgICAiJE9yaTAgICAgPSBbXFx1MEIwNS1c
XHUwQjM5XTsiICAgIC8vIE9yaXlhIExldHRlciBBLC4uLixIYQorICAgICAgICAiJE9yaVYgICAg
PSBcXHUwQjREOyIgICAgICAgICAgICAgIC8vIE9yaXlhIFNpZ24gVmlyYW1hCisgICAgICAgICIk
T3JpMSAgICA9IFtcXHUwQjE1LVxcdTBCMzldOyIgICAgLy8gT3JpeWEgTGV0dGVyIEthLC4uLixI
YQorICAgICAgICAiJFRlbDAgICAgPSBbXFx1MEMwNS1cXHUwQzM5XTsiICAgIC8vIFRlbHVndSBM
ZXR0ZXIgQSwuLi4sSGEKKyAgICAgICAgIiRUZWxWICAgID0gXFx1MEM0RDsiICAgICAgICAgICAg
ICAvLyBUZWx1Z3UgU2lnbiBWaXJhbWEKKyAgICAgICAgIiRUZWwxICAgID0gW1xcdTBDMTQtXFx1
MEMzOV07IiAgICAvLyBUZWx1Z3UgTGV0dGVyIEthLC4uLixIYQorICAgICAgICAiJEthbjAgICAg
PSBbXFx1MEM4NS1cXHUwQ0I5XTsiICAgIC8vIEthbm5hZGEgTGV0dGVyIEEsLi4uLEhhCisgICAg
ICAgICIkS2FuViAgICA9IFxcdTBDQ0Q7IiAgICAgICAgICAgICAgLy8gS2FubmFkYSBTaWduIFZp
cmFtYQorICAgICAgICAiJEthbjEgICAgPSBbXFx1MEM5NS1cXHUwQ0I5XTsiICAgIC8vIEthbm5h
ZGEgTGV0dGVyIEEsLi4uLEhhCisgICAgICAgICIkTWFsMCAgICA9IFtcXHUwRDA1LVxcdTBEMzld
OyIgICAgLy8gTWFsYXlhbGFtIExldHRlciBBLC4uLixIYQorICAgICAgICAiJE1hbFYgICAgPSBc
XHUwRDREOyIgICAgICAgICAgICAgIC8vIE1hbGF5YWxhbSBTaWduIFZpcmFtYQorICAgICAgICAi
JE1hbDEgICAgPSBbXFx1MEQxNS1cXHUwRDM5XTsiICAgIC8vIE1hbGF5YWxhbSBMZXR0ZXIgQSwu
Li4sSGEKKyAgICAgICAgIiRSSSAgICAgID0gW1xcVTAwMDFGMUU2LVxcVTAwMDFGMUZGXTsiIC8v
IEVtb2ppIHJlZ2lvbmFsIGluZGljYXRvcnMKKyAgICAgICAgIiEhY2hhaW47IgorICAgICAgICAi
ISFmb3J3YXJkOyIKKyAgICAgICAgIiRDUiAkTEY7IgorICAgICAgICAiJEwgKCRMIHwgJFYgfCAk
TFYgfCAkTFZUKTsiCisgICAgICAgICIoJExWIHwgJFYpICgkViB8ICRUKTsiCisgICAgICAgICIo
JExWVCB8ICRUKSAkVDsiCisgICAgICAgICJbXiRDb250cm9sICRDUiAkTEZdICRFeHRlbmQ7Igor
ICAgICAgICAiW14kQ29udHJvbCAkQ1IgJExGXSAkU3BhY2luZ01hcms7IgorICAgICAgICAiJFJJ
ICRSSSAvICRSSTsiCisgICAgICAgICIkUkkgJFJJOyIKKyAgICAgICAgIiRIaW4wICRIaW5WICRI
aW4xOyIgICAgICAgICAgICAgICAvLyBEZXZhbmFnYXJpIFZpcmFtYSAoZm9yd2FyZCkKKyAgICAg
ICAgIiRCZW4wICRCZW5WICRCZW4xOyIgICAgICAgICAgICAgICAvLyBCZW5nYWxpIFZpcmFtYSAo
Zm9yd2FyZCkKKyAgICAgICAgIiRQYW4wICRQYW5WICRQYW4xOyIgICAgICAgICAgICAgICAvLyBH
dXJtdWtoaSBWaXJhbWEgKGZvcndhcmQpCisgICAgICAgICIkR3VqMCAkR3VqViAkR3VqMTsiICAg
ICAgICAgICAgICAgLy8gR3VqYXJhdGkgVmlyYW1hIChmb3J3YXJkKQorICAgICAgICAiJE9yaTAg
JE9yaVYgJE9yaTE7IiAgICAgICAgICAgICAgIC8vIE9yaXlhIFZpcmFtYSAoZm9yd2FyZCkKKyAg
ICAgICAgIiRUZWwwICRUZWxWICRUZWwxOyIgICAgICAgICAgICAgICAvLyBUZWx1Z3UgVmlyYW1h
IChmb3J3YXJkKQorICAgICAgICAiJEthbjAgJEthblYgJEthbjE7IiAgICAgICAgICAgICAgIC8v
IEthbm5hZGEgVmlyYW1hIChmb3J3YXJkKQorICAgICAgICAiJE1hbDAgJE1hbFYgJE1hbDE7IiAg
ICAgICAgICAgICAgIC8vIE1hbGF5YWxhbSBWaXJhbWEgKGZvcndhcmQpCisgICAgICAgICIhIXJl
dmVyc2U7IgorICAgICAgICAiJExGICRDUjsiCisgICAgICAgICIoJEwgfCAkViB8ICRMViB8ICRM
VlQpICRMOyIKKyAgICAgICAgIigkViB8ICRUKSAoJExWIHwgJFYpOyIKKyAgICAgICAgIiRUICgk
TFZUIHwgJFQpOyIKKyAgICAgICAgIiRFeHRlbmQgICAgICBbXiRDb250cm9sICRDUiAkTEZdOyIK
KyAgICAgICAgIiRTcGFjaW5nTWFyayBbXiRDb250cm9sICRDUiAkTEZdOyIKKyAgICAgICAgIiRS
SSAkUkkgLyAkUkkgJFJJOyIKKyAgICAgICAgIiRSSSAkUkk7IgorICAgICAgICAiJEhpbjEgJEhp
blYgJEhpbjA7IiAgICAgICAgICAgICAgIC8vIERldmFuYWdhcmkgVmlyYW1hIChiYWNrd2FyZCkK
KyAgICAgICAgIiRCZW4xICRCZW5WICRCZW4wOyIgICAgICAgICAgICAgICAvLyBCZW5nYWxpIFZp
cmFtYSAoYmFja3dhcmQpCisgICAgICAgICIkUGFuMSAkUGFuViAkUGFuMDsiICAgICAgICAgICAg
ICAgLy8gR3VybXVraGkgVmlyYW1hIChiYWNrd2FyZCkKKyAgICAgICAgIiRHdWoxICRHdWpWICRH
dWowOyIgICAgICAgICAgICAgICAvLyBHdWphcmF0aSBWaXJhbWEgKGJhY2t3YXJkKQorICAgICAg
ICAiJE9yaTEgJE9yaVYgJE9yaTA7IiAgICAgICAgICAgICAgIC8vIEd1amFyYXRpIFZpcmFtYSAo
YmFja3dhcmQpCisgICAgICAgICIkVGVsMSAkVGVsViAkVGVsMDsiICAgICAgICAgICAgICAgLy8g
VGVsdWd1IFZpcmFtYSAoYmFja3dhcmQpCisgICAgICAgICIkS2FuMSAkS2FuViAkS2FuMDsiICAg
ICAgICAgICAgICAgLy8gS2FubmFkYSBWaXJhbWEgKGJhY2t3YXJkKQorICAgICAgICAiJE1hbDEg
JE1hbFYgJE1hbDA7IiAgICAgICAgICAgICAgIC8vIE1hbGF5YWxhbSBWaXJhbWEgKGJhY2t3YXJk
KQorICAgICAgICAiISFzYWZlX3JldmVyc2U7IgorICAgICAgICAiISFzYWZlX2ZvcndhcmQ7IjsK
KyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0
b3IgPSBpbml0aWFsaXplSXRlcmF0b3JXaXRoUnVsZXMoa1J1bGVzKTsKKyNlbHNlIC8vIFBMQVRG
T1JNKElPUykKKyAgICAvLyBVc2UgdGhlIHNwZWNpYWwgVGhhaSBjaGFyYWN0ZXIgYnJlYWsgaXRl
cmF0b3IgZm9yIGFsbCBsb2NhbGVzCisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0
aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yID0gaW5pdGlhbGl6ZUl0ZXJhdG9yKFVCUktfQ0hBUkFD
VEVSLCAidGgiKTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisgICAgaWYgKCFzdGF0aWND
dXJzb3JNb3ZlbWVudEl0ZXJhdG9yKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBzZXRUZXh0Rm9ySXRlcmF0b3IoKnN0YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0b3IsIFN0
cmluZ1ZpZXcoYnVmZmVyLCBsZW5ndGgpKTsKK30KKworVGV4dEJyZWFrSXRlcmF0b3IqIGFjcXVp
cmVMaW5lQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBwcmlvckNvbnRleHQsIHVuc2lnbmVkIHByaW9yQ29udGV4
dExlbmd0aCkKK3sKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSByZWludGVycHJl
dF9jYXN0PFRleHRCcmVha0l0ZXJhdG9yKj4oTGluZUJyZWFrSXRlcmF0b3JQb29sOjpzaGFyZWRQ
b29sKCkudGFrZShsb2NhbGUpKTsKKyAgICBpZiAoIWl0ZXJhdG9yKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBzZXRDb250ZXh0QXdhcmVUZXh0Rm9ySXRlcmF0b3IoKml0
ZXJhdG9yLCBzdHJpbmcsIHByaW9yQ29udGV4dCwgcHJpb3JDb250ZXh0TGVuZ3RoKTsKK30KKwor
dm9pZCByZWxlYXNlTGluZUJyZWFrSXRlcmF0b3IoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9y
KQoreworICAgIEFTU0VSVF9BUkcoaXRlcmF0b3IsIGl0ZXJhdG9yKTsKKworICAgIExpbmVCcmVh
a0l0ZXJhdG9yUG9vbDo6c2hhcmVkUG9vbCgpLnB1dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0
ZXJhdG9yKj4oaXRlcmF0b3IpKTsKK30KKworc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBub25T
aGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOworCitzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFy
ZUFuZFN3YXBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKFRleHRCcmVha0l0ZXJhdG9y
KiBleHBlY3RlZCwgVGV4dEJyZWFrSXRlcmF0b3IqIG5ld1ZhbHVlKQoreworI2lmIEVOQUJMRShD
T01QQVJFX0FORF9TV0FQKQorICAgIHJldHVybiBXVEY6OndlYWtDb21wYXJlQW5kU3dhcChyZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJm5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpLCBl
eHBlY3RlZCwgbmV3VmFsdWUpOworI2Vsc2UKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4
LCBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yTXV0ZXgsICgpKTsKKyAgICBNdXRleExv
Y2tlciBsb2NrZXIobm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvck11dGV4KTsKKyAgICBp
ZiAobm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciAhPSBleHBlY3RlZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgPSBuZXdW
YWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCitOb25TaGFyZWRDaGFyYWN0ZXJC
cmVha0l0ZXJhdG9yOjpOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFy
KiBidWZmZXIsIGludCBsZW5ndGgpCit7CisgICAgbV9pdGVyYXRvciA9IG5vblNoYXJlZENoYXJh
Y3RlckJyZWFrSXRlcmF0b3I7CisKKyAgICBib29sIGNyZWF0ZWRJdGVyYXRvciA9IG1faXRlcmF0
b3IgJiYgY29tcGFyZUFuZFN3YXBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKG1faXRl
cmF0b3IsIDApOworICAgIGlmICghY3JlYXRlZEl0ZXJhdG9yKQorICAgICAgICBtX2l0ZXJhdG9y
ID0gaW5pdGlhbGl6ZUl0ZXJhdG9yKFVCUktfQ0hBUkFDVEVSKTsKKyAgICBpZiAoIW1faXRlcmF0
b3IpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXRlcmF0b3IgPSBzZXRUZXh0Rm9ySXRlcmF0
b3IoKm1faXRlcmF0b3IsIFN0cmluZ1ZpZXcoYnVmZmVyLCBsZW5ndGgpKTsKK30KKworTm9uU2hh
cmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6fk5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0
b3IoKQoreworICAgIGlmICghY29tcGFyZUFuZFN3YXBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0
ZXJhdG9yKDAsIG1faXRlcmF0b3IpKQorICAgICAgICB1YnJrX2Nsb3NlKHJlaW50ZXJwcmV0X2Nh
c3Q8VUJyZWFrSXRlcmF0b3IqPihtX2l0ZXJhdG9yKSk7Cit9CisKKworLy8gSXRlcmF0b3IgaW1w
bGVtZW5hdGlvbi4KKworaW50IHRleHRCcmVha0ZpcnN0KFRleHRCcmVha0l0ZXJhdG9yKiBpdGVy
YXRvcikKK3sKKyAgICByZXR1cm4gdWJya19maXJzdChyZWludGVycHJldF9jYXN0PFVCcmVha0l0
ZXJhdG9yKj4oaXRlcmF0b3IpKTsKK30KKworaW50IHRleHRCcmVha0xhc3QoVGV4dEJyZWFrSXRl
cmF0b3IqIGl0ZXJhdG9yKQoreworICAgIHJldHVybiB1YnJrX2xhc3QocmVpbnRlcnByZXRfY2Fz
dDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSk7Cit9CisKK2ludCB0ZXh0QnJlYWtOZXh0KFRl
eHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAgICByZXR1cm4gdWJya19uZXh0KHJlaW50
ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvcikpOworfQorCitpbnQgdGV4dEJy
ZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yKQoreworICAgIHJldHVybiB1
YnJrX3ByZXZpb3VzKHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvcikp
OworfQorCitpbnQgdGV4dEJyZWFrUHJlY2VkaW5nKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRv
ciwgaW50IHBvcykKK3sKKyAgICByZXR1cm4gdWJya19wcmVjZWRpbmcocmVpbnRlcnByZXRfY2Fz
dDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSwgcG9zKTsKK30KKworaW50IHRleHRCcmVha0Zv
bGxvd2luZyhUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IsIGludCBwb3MpCit7CisgICAgcmV0
dXJuIHVicmtfZm9sbG93aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVy
YXRvciksIHBvcyk7Cit9CisKK2ludCB0ZXh0QnJlYWtDdXJyZW50KFRleHRCcmVha0l0ZXJhdG9y
KiBpdGVyYXRvcikKK3sKKyAgICByZXR1cm4gdWJya19jdXJyZW50KHJlaW50ZXJwcmV0X2Nhc3Q8
VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvcikpOworfQorCitib29sIGlzVGV4dEJyZWFrKFRleHRC
cmVha0l0ZXJhdG9yKiBpdGVyYXRvciwgaW50IHBvc2l0aW9uKQoreworICAgIHJldHVybiB1YnJr
X2lzQm91bmRhcnkocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSwg
cG9zaXRpb24pOworfQorCitib29sIGlzV29yZFRleHRCcmVhayhUZXh0QnJlYWtJdGVyYXRvciog
aXRlcmF0b3IpCit7CisgICAgaW50IHJ1bGVTdGF0dXMgPSB1YnJrX2dldFJ1bGVTdGF0dXMocmVp
bnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSk7CisgICAgcmV0dXJuIHJ1
bGVTdGF0dXMgIT0gVUJSS19XT1JEX05PTkU7Cit9CisKIHVuc2lnbmVkIG51bUdyYXBoZW1lQ2x1
c3RlcnMoY29uc3QgU3RyaW5nJiBzKQogewogICAgIHVuc2lnbmVkIHN0cmluZ0xlbmd0aCA9IHMu
bGVuZ3RoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0
ZXJhdG9ySUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAkocmV2aXNpb24gMTYyMDQzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMzU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGFycyBLbm9s
bCA8bGFyc0B0cm9sbHRlY2guY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDExLCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgotCi0jaW5jbHVkZSAiTGluZUJyZWFrSXRl
cmF0b3JQb29sSUNVLmgiCi0jaW5jbHVkZSAiVVRleHRQcm92aWRlckxhdGluMS5oIgotI2luY2x1
ZGUgIlVUZXh0UHJvdmlkZXJVVEYxNi5oIgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8v
IEl0ZXJhdG9yIGluaXRpYWxpemF0aW9uCi0KLXN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogaW5p
dGlhbGl6ZUl0ZXJhdG9yKFVCcmVha0l0ZXJhdG9yVHlwZSB0eXBlLCBjb25zdCBjaGFyKiBsb2Nh
bGUgPSBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQoKSkKLXsKLSAgICBVRXJyb3JDb2RlIG9wZW5T
dGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0g
cmVpbnRlcnByZXRfY2FzdDxUZXh0QnJlYWtJdGVyYXRvcio+KHVicmtfb3Blbih0eXBlLCBsb2Nh
bGUsIDAsIDAsICZvcGVuU3RhdHVzKSk7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShVX1NVQ0NF
U1Mob3BlblN0YXR1cyksICJJQ1UgY291bGQgbm90IG9wZW4gYSBicmVhayBpdGVyYXRvcjogJXMg
KCVkKSIsIHVfZXJyb3JOYW1lKG9wZW5TdGF0dXMpLCBvcGVuU3RhdHVzKTsKLSAgICByZXR1cm4g
aXRlcmF0b3I7Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9TKQotc3RhdGljIFRleHRCcmVha0l0ZXJh
dG9yKiBpbml0aWFsaXplSXRlcmF0b3JXaXRoUnVsZXMoY29uc3QgY2hhciogYnJlYWtSdWxlcykK
LXsKLSAgICBVUGFyc2VFcnJvciBwYXJzZVN0YXR1czsKLSAgICBVRXJyb3JDb2RlIG9wZW5TdGF0
dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgU3RyaW5nIHJ1bGVzKGJyZWFrUnVsZXMpOwotICAgIFRl
eHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGV4dEJyZWFrSXRl
cmF0b3IqPih1YnJrX29wZW5SdWxlcyhydWxlcy5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBydWxl
cy5sZW5ndGgoKSwgMCwgMCwgJnBhcnNlU3RhdHVzLCAmb3BlblN0YXR1cykpOwotICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoVV9TVUNDRVNTKG9wZW5TdGF0dXMpLCAiSUNVIGNvdWxkIG5vdCBvcGVu
IGEgYnJlYWsgaXRlcmF0b3I6ICVzICglZCkiLCB1X2Vycm9yTmFtZShvcGVuU3RhdHVzKSwgb3Bl
blN0YXR1cyk7Ci0gICAgcmV0dXJuIGl0ZXJhdG9yOwotfQotI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCi0KLQotLy8gSXRlcmF0b3IgdGV4dCBzZXR0aW5nCi0KLXN0YXRpYyBUZXh0QnJlYWtJdGVy
YXRvciogc2V0VGV4dEZvckl0ZXJhdG9yKFRleHRCcmVha0l0ZXJhdG9yJiBpdGVyYXRvciwgU3Ry
aW5nVmlldyBzdHJpbmcpCi17Ci0gICAgaWYgKHN0cmluZy5pczhCaXQoKSkgewotICAgICAgICBV
VGV4dFdpdGhCdWZmZXIgdGV4dExvY2FsOwotICAgICAgICB0ZXh0TG9jYWwudGV4dCA9IFVURVhU
X0lOSVRJQUxJWkVSOwotICAgICAgICB0ZXh0TG9jYWwudGV4dC5leHRyYVNpemUgPSBzaXplb2Yo
dGV4dExvY2FsLmJ1ZmZlcik7Ci0gICAgICAgIHRleHRMb2NhbC50ZXh0LnBFeHRyYSA9IHRleHRM
b2NhbC5idWZmZXI7Ci0KLSAgICAgICAgVUVycm9yQ29kZSBvcGVuU3RhdHVzID0gVV9aRVJPX0VS
Uk9SOwotICAgICAgICBVVGV4dCogdGV4dCA9IG9wZW5MYXRpbjFVVGV4dFByb3ZpZGVyKCZ0ZXh0
TG9jYWwsIHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksICZvcGVuU3RhdHVz
KTsKLSAgICAgICAgaWYgKFVfRkFJTFVSRShvcGVuU3RhdHVzKSkgewotICAgICAgICAgICAgTE9H
X0VSUk9SKCJ1VGV4dE9wZW5MYXRpbjEgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgb3BlblN0YXR1
cyk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIFVF
cnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgdWJya19zZXRV
VGV4dChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oJml0ZXJhdG9yKSwgdGV4dCwg
JnNldFRleHRTdGF0dXMpOwotICAgICAgICBpZiAoVV9GQUlMVVJFKHNldFRleHRTdGF0dXMpKSB7
Ci0gICAgICAgICAgICBMT0dfRVJST1IoInVicmtfc2V0VVRleHQgZmFpbGVkIHdpdGggc3RhdHVz
ICVkIiwgc2V0VGV4dFN0YXR1cyk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgfQotCi0gICAgICAgIHV0ZXh0X2Nsb3NlKHRleHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IFVFcnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgdWJya19z
ZXRUZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPigmaXRlcmF0b3IpLCBzdHJp
bmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSwgJnNldFRleHRTdGF0dXMpOwotICAg
ICAgICBpZiAoVV9GQUlMVVJFKHNldFRleHRTdGF0dXMpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuICZpdGVyYXRvcjsKLX0KLQotc3RhdGljIFRleHRC
cmVha0l0ZXJhdG9yKiBzZXRDb250ZXh0QXdhcmVUZXh0Rm9ySXRlcmF0b3IoVGV4dEJyZWFrSXRl
cmF0b3ImIGl0ZXJhdG9yLCBTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgVUNoYXIqIHByaW9yQ29u
dGV4dCwgdW5zaWduZWQgcHJpb3JDb250ZXh0TGVuZ3RoKQotewotICAgIGlmIChzdHJpbmcuaXM4
Qml0KCkpIHsKLSAgICAgICAgVVRleHRXaXRoQnVmZmVyIHRleHRMb2NhbDsKLSAgICAgICAgdGV4
dExvY2FsLnRleHQgPSBVVEVYVF9JTklUSUFMSVpFUjsKLSAgICAgICAgdGV4dExvY2FsLnRleHQu
ZXh0cmFTaXplID0gc2l6ZW9mKHRleHRMb2NhbC5idWZmZXIpOwotICAgICAgICB0ZXh0TG9jYWwu
dGV4dC5wRXh0cmEgPSB0ZXh0TG9jYWwuYnVmZmVyOwotCi0gICAgICAgIFVFcnJvckNvZGUgb3Bl
blN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgVVRleHQqIHRleHQgPSBvcGVuTGF0aW4x
Q29udGV4dEF3YXJlVVRleHRQcm92aWRlcigmdGV4dExvY2FsLCBzdHJpbmcuY2hhcmFjdGVyczgo
KSwgc3RyaW5nLmxlbmd0aCgpLCBwcmlvckNvbnRleHQsIHByaW9yQ29udGV4dExlbmd0aCwgJm9w
ZW5TdGF0dXMpOwotICAgICAgICBpZiAoVV9GQUlMVVJFKG9wZW5TdGF0dXMpKSB7Ci0gICAgICAg
ICAgICBMT0dfRVJST1IoIm9wZW5MYXRpbjFDb250ZXh0QXdhcmVVVGV4dFByb3ZpZGVyIGZhaWxl
ZCB3aXRoIHN0YXR1cyAlZCIsIG9wZW5TdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIH0KLQotICAgICAgICBVRXJyb3JDb2RlIHNldFRleHRTdGF0dXMgPSBVX1pF
Uk9fRVJST1I7Ci0gICAgICAgIHVicmtfc2V0VVRleHQocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJ
dGVyYXRvcio+KCZpdGVyYXRvciksIHRleHQsICZzZXRUZXh0U3RhdHVzKTsKLSAgICAgICAgaWYg
KFVfRkFJTFVSRShzZXRUZXh0U3RhdHVzKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJ1YnJr
X3NldFVUZXh0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIHNldFRleHRTdGF0dXMpOwotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICB1dGV4dF9jbG9zZSh0
ZXh0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBVVGV4dCB0ZXh0TG9jYWwgPSBVVEVYVF9JTklU
SUFMSVpFUjsKLQotICAgICAgICBVRXJyb3JDb2RlIG9wZW5TdGF0dXMgPSBVX1pFUk9fRVJST1I7
Ci0gICAgICAgIFVUZXh0KiB0ZXh0ID0gb3BlblVURjE2Q29udGV4dEF3YXJlVVRleHRQcm92aWRl
cigmdGV4dExvY2FsLCBzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSwgcHJp
b3JDb250ZXh0LCBwcmlvckNvbnRleHRMZW5ndGgsICZvcGVuU3RhdHVzKTsKLSAgICAgICAgaWYg
KFVfRkFJTFVSRShvcGVuU3RhdHVzKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJvcGVuVVRG
MTZDb250ZXh0QXdhcmVVVGV4dFByb3ZpZGVyIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIG9wZW5T
dGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBVRXJy
b3JDb2RlIHNldFRleHRTdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVicmtfc2V0VVRl
eHQocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KCZpdGVyYXRvciksIHRleHQsICZz
ZXRUZXh0U3RhdHVzKTsKLSAgICAgICAgaWYgKFVfRkFJTFVSRShzZXRUZXh0U3RhdHVzKSkgewot
ICAgICAgICAgICAgTE9HX0VSUk9SKCJ1YnJrX3NldFVUZXh0IGZhaWxlZCB3aXRoIHN0YXR1cyAl
ZCIsIHNldFRleHRTdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KLQotICAgICAgICB1dGV4dF9jbG9zZSh0ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gJml0
ZXJhdG9yOwotfQotCi0KLS8vIFN0YXRpYyBpdGVyYXRvcnMKLQotVGV4dEJyZWFrSXRlcmF0b3Iq
IHdvcmRCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBidWZmZXIsIGludCBsZW5ndGgpCi17Ci0g
ICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNXb3JkQnJlYWtJdGVyYXRvciA9IGlu
aXRpYWxpemVJdGVyYXRvcihVQlJLX1dPUkQpOwotICAgIGlmICghc3RhdGljV29yZEJyZWFrSXRl
cmF0b3IpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHNldFRleHRGb3JJ
dGVyYXRvcigqc3RhdGljV29yZEJyZWFrSXRlcmF0b3IsIFN0cmluZ1ZpZXcoYnVmZmVyLCBsZW5n
dGgpKTsKLX0KLQotVGV4dEJyZWFrSXRlcmF0b3IqIHNlbnRlbmNlQnJlYWtJdGVyYXRvcihjb25z
dCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQotewotICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVy
YXRvciogc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yID0gaW5pdGlhbGl6ZUl0ZXJhdG9yKFVC
UktfU0VOVEVOQ0UpOwotICAgIGlmICghc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBzZXRUZXh0Rm9ySXRlcmF0b3IoKnN0
YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvciwgU3RyaW5nVmlldyhidWZmZXIsIGxlbmd0aCkpOwot
fQotCi1UZXh0QnJlYWtJdGVyYXRvciogY3Vyc29yTW92ZW1lbnRJdGVyYXRvcihjb25zdCBVQ2hh
ciogYnVmZmVyLCBpbnQgbGVuZ3RoKQotewotI2lmICFQTEFURk9STShJT1MpCi0gICAgLy8gVGhp
cyBydWxlIHNldCBpcyBiYXNlZCBvbiBjaGFyYWN0ZXItYnJlYWsgaXRlcmF0b3IgcnVsZXMgb2Yg
SUNVIDQuMAotICAgIC8vIDxodHRwOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3Uv
aWN1L3RhZ3MvcmVsZWFzZS00LTAvc291cmNlL2RhdGEvYnJraXRyL2NoYXIudHh0Pi4KLSAgICAv
LyBUaGUgbWFqb3IgZGlmZmVyZW5jZXMgZnJvbSB0aGUgb3JpZ2luYWwgb25lcyBhcmUgbGlzdGVk
IGJlbG93OgotICAgIC8vICogUmVwbGFjZWQgJ1tccHtHcmFwaGVtZV9DbHVzdGVyX0JyZWFrID0g
U3BhY2luZ01hcmt9XScgd2l0aCAnW1xwe0dlbmVyYWxfQ2F0ZWdvcnkgPSBTcGFjaW5nIE1hcmt9
IC0gJEV4dGVuZF0nIGZvciBJQ1UgMy44IG9yIGVhcmxpZXI7Ci0gICAgLy8gKiBSZW1vdmVkIHJ1
bGVzIHRoYXQgcHJldmVudCBhIGN1cnNvciBmcm9tIG1vdmluZyBhZnRlciBwcmVwZW5kIGNoYXJh
Y3RlcnMgKEJ1ZyAyNDM0Mik7Ci0gICAgLy8gKiBBZGRlZCBydWxlcyB0aGF0IHByZXZlbnQgYSBj
dXJzb3IgZnJvbSBtb3ZpbmcgYWZ0ZXIgdmlyYW1hIHNpZ25zIG9mIEluZGljIGxhbmd1YWdlcyBl
eGNlcHQgVGFtaWwgKEJ1ZyAxNTc5MCksIGFuZDsKLSAgICAvLyAqIEFkZGVkIHJ1bGVzIHRoYXQg
cHJldmVudCBhIGN1cnNvciBmcm9tIG1vdmluZyBiZWZvcmUgSmFwYW5lc2UgaGFsZi13aWR0aCBr
YXRha2FyYSB2b2ljZWQgbWFya3MuCi0gICAgLy8gKiBBZGRlZCBydWxlcyBmb3IgcmVnaW9uYWwg
aW5kaWNhdG9yIHN5bWJvbHMuCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGtSdWxlcyA9Ci0gICAg
ICAgICIkQ1IgICAgICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IENSfV07IgotICAg
ICAgICAiJExGICAgICAgPSBbXFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBMRn1dOyIKLSAg
ICAgICAgIiRDb250cm9sID0gW1xccHtHcmFwaGVtZV9DbHVzdGVyX0JyZWFrID0gQ29udHJvbH1d
OyIKLSAgICAgICAgIiRWb2ljZU1hcmtzID0gW1xcdUZGOUVcXHVGRjlGXTsiICAvLyBKYXBhbmVz
ZSBoYWxmLXdpZHRoIGthdGFrYW5hIHZvaWNlZCBtYXJrcwotICAgICAgICAiJEV4dGVuZCAgPSBb
XFxwe0dyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgPSBFeHRlbmR9ICRWb2ljZU1hcmtzIC0gW1xcdTBF
MzAgXFx1MEUzMiBcXHUwRTQ1IFxcdTBFQjAgXFx1MEVCMl1dOyIKLSAgICAgICAgIiRTcGFjaW5n
TWFyayA9IFtbXFxwe0dlbmVyYWxfQ2F0ZWdvcnkgPSBTcGFjaW5nIE1hcmt9XSAtICRFeHRlbmRd
OyIKLSAgICAgICAgIiRMICAgICAgID0gW1xccHtHcmFwaGVtZV9DbHVzdGVyX0JyZWFrID0gTH1d
OyIKLSAgICAgICAgIiRWICAgICAgID0gW1xccHtHcmFwaGVtZV9DbHVzdGVyX0JyZWFrID0gVn1d
OyIKLSAgICAgICAgIiRUICAgICAgID0gW1xccHtHcmFwaGVtZV9DbHVzdGVyX0JyZWFrID0gVH1d
OyIKLSAgICAgICAgIiRMViAgICAgID0gW1xccHtHcmFwaGVtZV9DbHVzdGVyX0JyZWFrID0gTFZ9
XTsiCi0gICAgICAgICIkTFZUICAgICA9IFtcXHB7R3JhcGhlbWVfQ2x1c3Rlcl9CcmVhayA9IExW
VH1dOyIKLSAgICAgICAgIiRIaW4wICAgID0gW1xcdTA5MDUtXFx1MDkzOV07IiAgICAvLyBEZXZh
bmFnYXJpIExldHRlciBBLC4uLixIYQotICAgICAgICAiJEhpblYgICAgPSBcXHUwOTREOyIgICAg
ICAgICAgICAgIC8vIERldmFuYWdhcmkgU2lnbiBWaXJhbWEKLSAgICAgICAgIiRIaW4xICAgID0g
W1xcdTA5MTUtXFx1MDkzOV07IiAgICAvLyBEZXZhbmFnYXJpIExldHRlciBLYSwuLi4sSGEKLSAg
ICAgICAgIiRCZW4wICAgID0gW1xcdTA5ODUtXFx1MDlCOV07IiAgICAvLyBCZW5nYWxpIExldHRl
ciBBLC4uLixIYQotICAgICAgICAiJEJlblYgICAgPSBcXHUwOUNEOyIgICAgICAgICAgICAgIC8v
IEJlbmdhbGkgU2lnbiBWaXJhbWEKLSAgICAgICAgIiRCZW4xICAgID0gW1xcdTA5OTUtXFx1MDlC
OV07IiAgICAvLyBCZW5nYWxpIExldHRlciBLYSwuLi4sSGEKLSAgICAgICAgIiRQYW4wICAgID0g
W1xcdTBBMDUtXFx1MEEzOV07IiAgICAvLyBHdXJtdWtoaSBMZXR0ZXIgQSwuLi4sSGEKLSAgICAg
ICAgIiRQYW5WICAgID0gXFx1MEE0RDsiICAgICAgICAgICAgICAvLyBHdXJtdWtoaSBTaWduIFZp
cmFtYQotICAgICAgICAiJFBhbjEgICAgPSBbXFx1MEExNS1cXHUwQTM5XTsiICAgIC8vIEd1cm11
a2hpIExldHRlciBLYSwuLi4sSGEKLSAgICAgICAgIiRHdWowICAgID0gW1xcdTBBODUtXFx1MEFC
OV07IiAgICAvLyBHdWphcmF0aSBMZXR0ZXIgQSwuLi4sSGEKLSAgICAgICAgIiRHdWpWICAgID0g
XFx1MEFDRDsiICAgICAgICAgICAgICAvLyBHdWphcmF0aSBTaWduIFZpcmFtYQotICAgICAgICAi
JEd1ajEgICAgPSBbXFx1MEE5NS1cXHUwQUI5XTsiICAgIC8vIEd1amFyYXRpIExldHRlciBLYSwu
Li4sSGEKLSAgICAgICAgIiRPcmkwICAgID0gW1xcdTBCMDUtXFx1MEIzOV07IiAgICAvLyBPcml5
YSBMZXR0ZXIgQSwuLi4sSGEKLSAgICAgICAgIiRPcmlWICAgID0gXFx1MEI0RDsiICAgICAgICAg
ICAgICAvLyBPcml5YSBTaWduIFZpcmFtYQotICAgICAgICAiJE9yaTEgICAgPSBbXFx1MEIxNS1c
XHUwQjM5XTsiICAgIC8vIE9yaXlhIExldHRlciBLYSwuLi4sSGEKLSAgICAgICAgIiRUZWwwICAg
ID0gW1xcdTBDMDUtXFx1MEMzOV07IiAgICAvLyBUZWx1Z3UgTGV0dGVyIEEsLi4uLEhhCi0gICAg
ICAgICIkVGVsViAgICA9IFxcdTBDNEQ7IiAgICAgICAgICAgICAgLy8gVGVsdWd1IFNpZ24gVmly
YW1hCi0gICAgICAgICIkVGVsMSAgICA9IFtcXHUwQzE0LVxcdTBDMzldOyIgICAgLy8gVGVsdWd1
IExldHRlciBLYSwuLi4sSGEKLSAgICAgICAgIiRLYW4wICAgID0gW1xcdTBDODUtXFx1MENCOV07
IiAgICAvLyBLYW5uYWRhIExldHRlciBBLC4uLixIYQotICAgICAgICAiJEthblYgICAgPSBcXHUw
Q0NEOyIgICAgICAgICAgICAgIC8vIEthbm5hZGEgU2lnbiBWaXJhbWEKLSAgICAgICAgIiRLYW4x
ICAgID0gW1xcdTBDOTUtXFx1MENCOV07IiAgICAvLyBLYW5uYWRhIExldHRlciBBLC4uLixIYQot
ICAgICAgICAiJE1hbDAgICAgPSBbXFx1MEQwNS1cXHUwRDM5XTsiICAgIC8vIE1hbGF5YWxhbSBM
ZXR0ZXIgQSwuLi4sSGEKLSAgICAgICAgIiRNYWxWICAgID0gXFx1MEQ0RDsiICAgICAgICAgICAg
ICAvLyBNYWxheWFsYW0gU2lnbiBWaXJhbWEKLSAgICAgICAgIiRNYWwxICAgID0gW1xcdTBEMTUt
XFx1MEQzOV07IiAgICAvLyBNYWxheWFsYW0gTGV0dGVyIEEsLi4uLEhhCi0gICAgICAgICIkUkkg
ICAgICA9IFtcXFUwMDAxRjFFNi1cXFUwMDAxRjFGRl07IiAvLyBFbW9qaSByZWdpb25hbCBpbmRp
Y2F0b3JzCi0gICAgICAgICIhIWNoYWluOyIKLSAgICAgICAgIiEhZm9yd2FyZDsiCi0gICAgICAg
ICIkQ1IgJExGOyIKLSAgICAgICAgIiRMICgkTCB8ICRWIHwgJExWIHwgJExWVCk7IgotICAgICAg
ICAiKCRMViB8ICRWKSAoJFYgfCAkVCk7IgotICAgICAgICAiKCRMVlQgfCAkVCkgJFQ7IgotICAg
ICAgICAiW14kQ29udHJvbCAkQ1IgJExGXSAkRXh0ZW5kOyIKLSAgICAgICAgIlteJENvbnRyb2wg
JENSICRMRl0gJFNwYWNpbmdNYXJrOyIKLSAgICAgICAgIiRSSSAkUkkgLyAkUkk7IgotICAgICAg
ICAiJFJJICRSSTsiCi0gICAgICAgICIkSGluMCAkSGluViAkSGluMTsiICAgICAgICAgICAgICAg
Ly8gRGV2YW5hZ2FyaSBWaXJhbWEgKGZvcndhcmQpCi0gICAgICAgICIkQmVuMCAkQmVuViAkQmVu
MTsiICAgICAgICAgICAgICAgLy8gQmVuZ2FsaSBWaXJhbWEgKGZvcndhcmQpCi0gICAgICAgICIk
UGFuMCAkUGFuViAkUGFuMTsiICAgICAgICAgICAgICAgLy8gR3VybXVraGkgVmlyYW1hIChmb3J3
YXJkKQotICAgICAgICAiJEd1ajAgJEd1alYgJEd1ajE7IiAgICAgICAgICAgICAgIC8vIEd1amFy
YXRpIFZpcmFtYSAoZm9yd2FyZCkKLSAgICAgICAgIiRPcmkwICRPcmlWICRPcmkxOyIgICAgICAg
ICAgICAgICAvLyBPcml5YSBWaXJhbWEgKGZvcndhcmQpCi0gICAgICAgICIkVGVsMCAkVGVsViAk
VGVsMTsiICAgICAgICAgICAgICAgLy8gVGVsdWd1IFZpcmFtYSAoZm9yd2FyZCkKLSAgICAgICAg
IiRLYW4wICRLYW5WICRLYW4xOyIgICAgICAgICAgICAgICAvLyBLYW5uYWRhIFZpcmFtYSAoZm9y
d2FyZCkKLSAgICAgICAgIiRNYWwwICRNYWxWICRNYWwxOyIgICAgICAgICAgICAgICAvLyBNYWxh
eWFsYW0gVmlyYW1hIChmb3J3YXJkKQotICAgICAgICAiISFyZXZlcnNlOyIKLSAgICAgICAgIiRM
RiAkQ1I7IgotICAgICAgICAiKCRMIHwgJFYgfCAkTFYgfCAkTFZUKSAkTDsiCi0gICAgICAgICIo
JFYgfCAkVCkgKCRMViB8ICRWKTsiCi0gICAgICAgICIkVCAoJExWVCB8ICRUKTsiCi0gICAgICAg
ICIkRXh0ZW5kICAgICAgW14kQ29udHJvbCAkQ1IgJExGXTsiCi0gICAgICAgICIkU3BhY2luZ01h
cmsgW14kQ29udHJvbCAkQ1IgJExGXTsiCi0gICAgICAgICIkUkkgJFJJIC8gJFJJICRSSTsiCi0g
ICAgICAgICIkUkkgJFJJOyIKLSAgICAgICAgIiRIaW4xICRIaW5WICRIaW4wOyIgICAgICAgICAg
ICAgICAvLyBEZXZhbmFnYXJpIFZpcmFtYSAoYmFja3dhcmQpCi0gICAgICAgICIkQmVuMSAkQmVu
ViAkQmVuMDsiICAgICAgICAgICAgICAgLy8gQmVuZ2FsaSBWaXJhbWEgKGJhY2t3YXJkKQotICAg
ICAgICAiJFBhbjEgJFBhblYgJFBhbjA7IiAgICAgICAgICAgICAgIC8vIEd1cm11a2hpIFZpcmFt
YSAoYmFja3dhcmQpCi0gICAgICAgICIkR3VqMSAkR3VqViAkR3VqMDsiICAgICAgICAgICAgICAg
Ly8gR3VqYXJhdGkgVmlyYW1hIChiYWNrd2FyZCkKLSAgICAgICAgIiRPcmkxICRPcmlWICRPcmkw
OyIgICAgICAgICAgICAgICAvLyBHdWphcmF0aSBWaXJhbWEgKGJhY2t3YXJkKQotICAgICAgICAi
JFRlbDEgJFRlbFYgJFRlbDA7IiAgICAgICAgICAgICAgIC8vIFRlbHVndSBWaXJhbWEgKGJhY2t3
YXJkKQotICAgICAgICAiJEthbjEgJEthblYgJEthbjA7IiAgICAgICAgICAgICAgIC8vIEthbm5h
ZGEgVmlyYW1hIChiYWNrd2FyZCkKLSAgICAgICAgIiRNYWwxICRNYWxWICRNYWwwOyIgICAgICAg
ICAgICAgICAvLyBNYWxheWFsYW0gVmlyYW1hIChiYWNrd2FyZCkKLSAgICAgICAgIiEhc2FmZV9y
ZXZlcnNlOyIKLSAgICAgICAgIiEhc2FmZV9mb3J3YXJkOyI7Ci0gICAgc3RhdGljIFRleHRCcmVh
a0l0ZXJhdG9yKiBzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yID0gaW5pdGlhbGl6ZUl0ZXJh
dG9yV2l0aFJ1bGVzKGtSdWxlcyk7Ci0jZWxzZSAvLyBQTEFURk9STShJT1MpCi0gICAgLy8gVXNl
IHRoZSBzcGVjaWFsIFRoYWkgY2hhcmFjdGVyIGJyZWFrIGl0ZXJhdG9yIGZvciBhbGwgbG9jYWxl
cwotICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVy
YXRvciA9IGluaXRpYWxpemVJdGVyYXRvcihVQlJLX0NIQVJBQ1RFUiwgInRoIik7Ci0jZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKLQotICAgIGlmICghc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRv
cikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gc2V0VGV4dEZvckl0ZXJh
dG9yKCpzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yLCBTdHJpbmdWaWV3KGJ1ZmZlciwgbGVu
Z3RoKSk7Ci19Ci0KLVRleHRCcmVha0l0ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3Io
U3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlLCBjb25zdCBVQ2hh
ciogcHJpb3JDb250ZXh0LCB1bnNpZ25lZCBwcmlvckNvbnRleHRMZW5ndGgpCi17Ci0gICAgVGV4
dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gcmVpbnRlcnByZXRfY2FzdDxUZXh0QnJlYWtJdGVy
YXRvcio+KExpbmVCcmVha0l0ZXJhdG9yUG9vbDo6c2hhcmVkUG9vbCgpLnRha2UobG9jYWxlKSk7
Ci0gICAgaWYgKCFpdGVyYXRvcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1
cm4gc2V0Q29udGV4dEF3YXJlVGV4dEZvckl0ZXJhdG9yKCppdGVyYXRvciwgc3RyaW5nLCBwcmlv
ckNvbnRleHQsIHByaW9yQ29udGV4dExlbmd0aCk7Ci19Ci0KLXZvaWQgcmVsZWFzZUxpbmVCcmVh
a0l0ZXJhdG9yKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKLXsKLSAgICBBU1NFUlRfQVJH
KGl0ZXJhdG9yLCBpdGVyYXRvcik7Ci0KLSAgICBMaW5lQnJlYWtJdGVyYXRvclBvb2w6OnNoYXJl
ZFBvb2woKS5wdXQocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSk7
Ci19Ci0KLXN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJ
dGVyYXRvcjsKLQotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVBbmRTd2FwTm9uU2hhcmVkQ2hh
cmFjdGVyQnJlYWtJdGVyYXRvcihUZXh0QnJlYWtJdGVyYXRvciogZXhwZWN0ZWQsIFRleHRCcmVh
a0l0ZXJhdG9yKiBuZXdWYWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ09NUEFSRV9BTkRfU1dBUCkKLSAg
ICByZXR1cm4gd2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbm9u
U2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciksIGV4cGVjdGVkLCBuZXdWYWx1ZSk7Ci0jZWxz
ZQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG5vblNoYXJlZENoYXJhY3RlckJyZWFr
SXRlcmF0b3JNdXRleCwgKCkpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihub25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yTXV0ZXgpOwotICAgIGlmIChub25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yICE9IGV4cGVjdGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbm9uU2hh
cmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciA9IG5ld1ZhbHVlOwotICAgIHJldHVybiB0cnVlOwot
I2VuZGlmCi19Ci0KLU5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6Ok5vblNoYXJlZENo
YXJhY3RlckJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKLXsK
LSAgICBtX2l0ZXJhdG9yID0gbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKLQotICAg
IGJvb2wgY3JlYXRlZEl0ZXJhdG9yID0gbV9pdGVyYXRvciAmJiBjb21wYXJlQW5kU3dhcE5vblNo
YXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IobV9pdGVyYXRvciwgMCk7Ci0gICAgaWYgKCFjcmVh
dGVkSXRlcmF0b3IpCi0gICAgICAgIG1faXRlcmF0b3IgPSBpbml0aWFsaXplSXRlcmF0b3IoVUJS
S19DSEFSQUNURVIpOwotICAgIGlmICghbV9pdGVyYXRvcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9pdGVyYXRvciA9IHNldFRleHRGb3JJdGVyYXRvcigqbV9pdGVyYXRvciwgU3RyaW5nVmll
dyhidWZmZXIsIGxlbmd0aCkpOwotfQotCi1Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
Ojp+Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpCi17Ci0gICAgaWYgKCFjb21wYXJl
QW5kU3dhcE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoMCwgbV9pdGVyYXRvcikpCi0g
ICAgICAgIHVicmtfY2xvc2UocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KG1faXRl
cmF0b3IpKTsKLX0KLQotCi0vLyBJdGVyYXRvciBpbXBsZW1lbmF0aW9uLgotCi1pbnQgdGV4dEJy
ZWFrRmlyc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yKQotewotICAgIHJldHVybiB1YnJr
X2ZpcnN0KHJlaW50ZXJwcmV0X2Nhc3Q8VUJyZWFrSXRlcmF0b3IqPihpdGVyYXRvcikpOwotfQot
Ci1pbnQgdGV4dEJyZWFrTGFzdChUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IpCi17Ci0gICAg
cmV0dXJuIHVicmtfbGFzdChyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0
b3IpKTsKLX0KLQotaW50IHRleHRCcmVha05leHQoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9y
KQotewotICAgIHJldHVybiB1YnJrX25leHQocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRv
cio+KGl0ZXJhdG9yKSk7Ci19Ci0KLWludCB0ZXh0QnJlYWtQcmV2aW91cyhUZXh0QnJlYWtJdGVy
YXRvciogaXRlcmF0b3IpCi17Ci0gICAgcmV0dXJuIHVicmtfcHJldmlvdXMocmVpbnRlcnByZXRf
Y2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSk7Ci19Ci0KLWludCB0ZXh0QnJlYWtQcmVj
ZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yLCBpbnQgcG9zKQotewotICAgIHJldHVy
biB1YnJrX3ByZWNlZGluZyhyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0
b3IpLCBwb3MpOwotfQotCi1pbnQgdGV4dEJyZWFrRm9sbG93aW5nKFRleHRCcmVha0l0ZXJhdG9y
KiBpdGVyYXRvciwgaW50IHBvcykKLXsKLSAgICByZXR1cm4gdWJya19mb2xsb3dpbmcocmVpbnRl
cnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9yKSwgcG9zKTsKLX0KLQotaW50IHRl
eHRCcmVha0N1cnJlbnQoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yKQotewotICAgIHJldHVy
biB1YnJrX2N1cnJlbnQocmVpbnRlcnByZXRfY2FzdDxVQnJlYWtJdGVyYXRvcio+KGl0ZXJhdG9y
KSk7Ci19Ci0KLWJvb2wgaXNUZXh0QnJlYWsoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yLCBp
bnQgcG9zaXRpb24pCi17Ci0gICAgcmV0dXJuIHVicmtfaXNCb3VuZGFyeShyZWludGVycHJldF9j
YXN0PFVCcmVha0l0ZXJhdG9yKj4oaXRlcmF0b3IpLCBwb3NpdGlvbik7Ci19Ci0KLWJvb2wgaXNX
b3JkVGV4dEJyZWFrKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKLXsKLSAgICBpbnQgcnVs
ZVN0YXR1cyA9IHVicmtfZ2V0UnVsZVN0YXR1cyhyZWludGVycHJldF9jYXN0PFVCcmVha0l0ZXJh
dG9yKj4oaXRlcmF0b3IpKTsKLSAgICByZXR1cm4gcnVsZVN0YXR1cyAhPSBVQlJLX1dPUkRfTk9O
RTsKLX0KLQotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221329</attachid>
            <date>2014-01-15 21:21:03 -0800</date>
            <delta_ts>2014-01-15 21:58:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126856-20140115212103.patch</filename>
            <type>text/plain</type>
            <size>23554</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjExMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTAxLTE1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IncyBzaG91
bGQgc3VwcG9ydCBMYXRpbi0xIGZvciBhbGwgaXRlcmF0b3IgdHlwZXMgKFBhcnQgMykKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjg1NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZSBhbGwgdGhl
IFRleHRCcmVha0l0ZXJhdG9yIGNyZWF0aW9uIGZ1bmN0aW9ucyB0byB0YWtlIFN0cmluZ1ZpZXdz
LiBSZW1vdmUgYSBmZXcKKyAgICAgICAgbm93IHVubmVjZXNzYXJ5IHVwLWNvbnZlcnNpb24gdG8g
VVRGLTE2IGluIHRoZSBwcm9jZXNzLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3Bw
OgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFy
aWVzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorCiAyMDE0LTAxLTE1ICBKb3NlcGggUGVjb3Jhcm8g
IDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gQ2xlYW4gdXAgUkVNT1RFX0lO
U1BFQ1RPUiBjb2RlIGluIE9wZW5Tb3VyY2UgYWZ0ZXIgdGhlIGlPUyBtZXJnZQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkocmV2aXNpb24gMTYyMTA5KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3
NCw3IEBAIHVuc2lnbmVkIENoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEKICAgICAvLyBz
ZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA5Mj4uCiAgICAg
Ly8gV2UgbmVlZCBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBsb29rLWFoZWFkIHRvIGFjY291bnQg
Zm9yIFVURi0xNiBzdXJyb2dhdGVzLgogICAgIGlmIChjaGFyYWN0ZXJMZW5ndGhMaW1pdCA8IGNo
YXJhY3Rlckxlbmd0aCkgewotICAgICAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
IGl0KHN0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpICsgb2Zmc2V0LCAoY2hhcmFjdGVyTGVu
Z3RoTGltaXQgKyAyID4gY2hhcmFjdGVyTGVuZ3RoKSA/IGNoYXJhY3Rlckxlbmd0aCA6IGNoYXJh
Y3Rlckxlbmd0aExpbWl0ICsgMik7CisgICAgICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3IgaXQoU3RyaW5nVmlldyhzdHJpbmcpLnN1YnN0cmluZyhvZmZzZXQsIChjaGFyYWN0ZXJM
ZW5ndGhMaW1pdCArIDIgPiBjaGFyYWN0ZXJMZW5ndGgpID8gY2hhcmFjdGVyTGVuZ3RoIDogY2hh
cmFjdGVyTGVuZ3RoTGltaXQgKyAyKSk7CiAgICAgICAgIGlmICghaXNUZXh0QnJlYWsoaXQsIGNo
YXJhY3Rlckxlbmd0aExpbWl0KSkKICAgICAgICAgICAgIGNoYXJhY3Rlckxlbmd0aExpbWl0ID0g
dGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBjaGFyYWN0ZXJMZW5ndGhMaW1pdCk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAkocmV2
aXNpb24gMTYyMTA5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxw
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw5ICs3MCw5IEBAIHN0YXRpYyB2b2lkIGZpbmRC
YWRHcmFtbWFycyhUZXh0Q2hlY2tlckMKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBmaW5kTWlz
c3BlbGxpbmdzKFRleHRDaGVja2VyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFVDaGFyKiB0ZXh0LCBp
bnQgc3RhcnQsIGludCBsZW5ndGgsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRz
KQorc3RhdGljIHZvaWQgZmluZE1pc3NwZWxsaW5ncyhUZXh0Q2hlY2tlckNsaWVudCogY2xpZW50
LCBjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4mIHJlc3VsdHMpCiB7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gd29yZEJy
ZWFrSXRlcmF0b3IodGV4dCArIHN0YXJ0LCBsZW5ndGgpOworICAgIFRleHRCcmVha0l0ZXJhdG9y
KiBpdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcodGV4dCwgbGVuZ3RoKSk7
CiAgICAgaWYgKCFpdGVyYXRvcikKICAgICAgICAgcmV0dXJuOwogICAgIGludCB3b3JkU3RhcnQg
PSB0ZXh0QnJlYWtDdXJyZW50KGl0ZXJhdG9yKTsKQEAgLTgzLDEzICs4MywxMyBAQCBzdGF0aWMg
dm9pZCBmaW5kTWlzc3BlbGxpbmdzKFRleHRDaGVja2VyCiAgICAgICAgIGludCB3b3JkTGVuZ3Ro
ID0gd29yZEVuZCAtIHdvcmRTdGFydDsKICAgICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24g
PSAtMTsKICAgICAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICAgICAgY2xpZW50
LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodGV4dCArIHN0YXJ0ICsgd29yZFN0YXJ0LCB3b3JkTGVu
Z3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAg
Y2xpZW50LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodGV4dCArIHdvcmRTdGFydCwgd29yZExlbmd0
aCwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7CiAgICAgICAgIGlm
ICgwIDwgbWlzc3BlbGxpbmdMZW5ndGgpIHsKICAgICAgICAgICAgIEFTU0VSVCgwIDw9IG1pc3Nw
ZWxsaW5nTG9jYXRpb24gJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8PSB3b3JkTGVuZ3RoKTsKICAg
ICAgICAgICAgIEFTU0VSVCgwIDwgbWlzc3BlbGxpbmdMZW5ndGggJiYgbWlzc3BlbGxpbmdMb2Nh
dGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IHdvcmRMZW5ndGgpOwogICAgICAgICAgICAgVGV4
dENoZWNraW5nUmVzdWx0IG1pc3NwZWxsaW5nOwogICAgICAgICAgICAgbWlzc3BlbGxpbmcudHlw
ZSA9IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgIG1pc3NwZWxsaW5nLmxv
Y2F0aW9uID0gc3RhcnQgKyB3b3JkU3RhcnQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uOworICAgICAg
ICAgICAgbWlzc3BlbGxpbmcubG9jYXRpb24gPSB3b3JkU3RhcnQgKyBtaXNzcGVsbGluZ0xvY2F0
aW9uOwogICAgICAgICAgICAgbWlzc3BlbGxpbmcubGVuZ3RoID0gbWlzc3BlbGxpbmdMZW5ndGg7
CiAgICAgICAgICAgICBtaXNzcGVsbGluZy5yZXBsYWNlbWVudCA9IGNsaWVudC0+Z2V0QXV0b0Nv
cnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoU3RyaW5nKHRleHQgKyBtaXNzcGVsbGlu
Zy5sb2NhdGlvbiwgbWlzc3BlbGxpbmcubGVuZ3RoKSk7CiAgICAgICAgICAgICByZXN1bHRzLmFw
cGVuZChtaXNzcGVsbGluZyk7CkBAIC02NDgsNyArNjQ4LDcgQEAgdm9pZCBjaGVja1RleHRPZlBh
cmFncmFwaChUZXh0Q2hlY2tlckNsaQogI2Vsc2UKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiBzcGVsbGluZ1Jlc3VsdDsKICAgICBpZiAoY2hlY2tpbmdUeXBlcyAmIFRleHRDaGVja2lu
Z1R5cGVTcGVsbGluZykKLSAgICAgICAgZmluZE1pc3NwZWxsaW5ncyhjbGllbnQsIHRleHQsIDAs
IGxlbmd0aCwgc3BlbGxpbmdSZXN1bHQpOworICAgICAgICBmaW5kTWlzc3BlbGxpbmdzKGNsaWVu
dCwgdGV4dCwgbGVuZ3RoLCBzcGVsbGluZ1Jlc3VsdCk7CiAKICNpZiBVU0UoR1JBTU1BUl9DSEVD
S0lORykKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBncmFtbWFyUmVzdWx0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAkocmV2aXNpb24gMTYyMTA5
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDEsOCArMzAxLDggQEAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJl
YWtJdGVyYQogICAgIHN0cmluZy5hcHBlbmQodGV4dEJveC0+cmVuZGVyZXIoKS50ZXh0KCktPmRl
cHJlY2F0ZWRDaGFyYWN0ZXJzKCkgKyB0ZXh0Qm94LT5zdGFydCgpLCB0ZXh0Qm94LT5sZW4oKSk7
CiAgICAgbGVuICs9IHRleHRCb3gtPmxlbigpOwogCi0gICAgcmV0dXJuIHdvcmRCcmVha0l0ZXJh
dG9yKHN0cmluZy5kYXRhKCksIGxlbik7Ci19IAorICAgIHJldHVybiB3b3JkQnJlYWtJdGVyYXRv
cihTdHJpbmdWaWV3KHN0cmluZy5kYXRhKCksIGxlbikpOworfQogCiBzdGF0aWMgVGV4dEJyZWFr
SXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRC
b3gsCiAgICAgYm9vbCYgbmV4dEJveEluRGlmZmVyZW50QmxvY2ssIFZlY3RvcjxVQ2hhciwgMTAy
ND4mIHN0cmluZywgQ2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlcyYgbGVhZkJveGVzKQpA
QCAtMzIyLDggKzMyMiw4IEBAIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRl
cmEKICAgICAgICAgbGVuICs9IG5leHRUZXh0Qm94LT5sZW4oKTsKICAgICB9CiAKLSAgICByZXR1
cm4gd29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nLmRhdGEoKSwgbGVuKTsKLX0gCisgICAgcmV0dXJu
IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoc3RyaW5nLmRhdGEoKSwgbGVuKSk7Cit9CiAK
IHN0YXRpYyBib29sIGlzTG9naWNhbFN0YXJ0T2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVy
LCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKIHsKQEAgLTM4NSw3ICszODUsNyBA
QCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3VhbFdvcmRQb3NpdGlvCiAgICAgICAgIGVsc2Ug
aWYgKG9mZnNldEluQm94ID09IGJveC0+Y2FyZXRNYXhPZmZzZXQoKSkKICAgICAgICAgICAgIGl0
ZXIgPSB3b3JkQnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5KHZpc2libGVQb3NpdGlv
biwgdGV4dEJveCwgbmV4dEJveEluRGlmZmVyZW50QmxvY2ssIHN0cmluZywgbGVhZkJveGVzKTsK
ICAgICAgICAgZWxzZSBpZiAobW92aW5nSW50b05ld0JveCkgewotICAgICAgICAgICAgaXRlciA9
IHdvcmRCcmVha0l0ZXJhdG9yKHRleHRCb3gtPnJlbmRlcmVyKCkudGV4dCgpLT5kZXByZWNhdGVk
Q2hhcmFjdGVycygpICsgdGV4dEJveC0+c3RhcnQoKSwgdGV4dEJveC0+bGVuKCkpOworICAgICAg
ICAgICAgaXRlciA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcodGV4dEJveC0+cmVuZGVy
ZXIoKS50ZXh0KCkpLnN1YnN0cmluZyh0ZXh0Qm94LT5zdGFydCgpLCB0ZXh0Qm94LT5sZW4oKSkp
OwogICAgICAgICAgICAgcHJldmlvdXNseVZpc2l0ZWRCb3ggPSBib3g7CiAgICAgICAgIH0KIApA
QCAtMTA0Niw3ICsxMDQ2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29u
c3QgVgogCiBzdGF0aWMgdW5zaWduZWQgc3RhcnRTZW50ZW5jZUJvdW5kYXJ5KGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkLCBCb3VuZGFyeVNlYXJjaENv
bnRleHRBdmFpbGFiaWxpdHksIGJvb2wmKQogewotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVy
YXRvciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFRl
eHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJpbmdW
aWV3KGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGZ1
bmN0aW9uIGNhbiByZXR1cm4gLTE7IHdlIGRvbid0IGhhbmRsZSB0aGF0LgogICAgIHJldHVybiB0
ZXh0QnJlYWtQcmVjZWRpbmcoaXRlcmF0b3IsIGxlbmd0aCk7CiB9CkBAIC0xMDU4LDcgKzEwNTgs
NyBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbnRlbmNlKGNvbnN0IFZpCiAKIHN0YXRpYyB1
bnNpZ25lZCBlbmRTZW50ZW5jZUJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgsIHVuc2lnbmVkLCBCb3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFiaWxpdHks
IGJvb2wmKQogewotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHNlbnRlbmNlQnJl
YWtJdGVyYXRvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBp
dGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGxl
bmd0aCkpOwogICAgIHJldHVybiB0ZXh0QnJlYWtOZXh0KGl0ZXJhdG9yKTsKIH0KIApAQCAtMTA3
MSw3ICsxMDcxLDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mU2VudGVuY2UoY29uc3QgVmlzaQog
c3RhdGljIHVuc2lnbmVkIHByZXZpb3VzU2VudGVuY2VQb3NpdGlvbkJvdW5kYXJ5KGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkLCBCb3VuZGFyeVNlYXJj
aENvbnRleHRBdmFpbGFiaWxpdHksIGJvb2wmKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGlk
ZW50aWNhbCB0byBzdGFydFNlbnRlbmNlQm91bmRhcnkuIEknbSBwcmV0dHkgc3VyZSB0aGF0J3Mg
bm90IHJpZ2h0LgotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHNlbnRlbmNlQnJl
YWtJdGVyYXRvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBp
dGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGxl
bmd0aCkpOwogICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNhbiByZXR1cm4g
LTE7IHdlIGRvbid0IGhhbmRsZSB0aGF0LgogICAgIHJldHVybiB0ZXh0QnJlYWtQcmVjZWRpbmco
aXRlcmF0b3IsIGxlbmd0aCk7CiB9CkBAIC0xMDg2LDcgKzEwODYsNyBAQCBzdGF0aWMgdW5zaWdu
ZWQgbmV4dFNlbnRlbmNlUG9zaXRpb25Cb3VuCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaWRl
bnRpY2FsIHRvIGVuZFNlbnRlbmNlQm91bmRhcnkuIFRoaXMgaXNuJ3QgcmlnaHQsIGl0IG5lZWRz
IHRvIAogICAgIC8vIG1vdmUgdG8gdGhlIGVxdWl2bGFudCBwb3NpdGlvbiBpbiB0aGUgZm9sbG93
aW5nIHNlbnRlbmNlLgotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHNlbnRlbmNl
QnJlYWtJdGVyYXRvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFRleHRCcmVha0l0ZXJhdG9y
KiBpdGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KGNoYXJhY3RlcnMs
IGxlbmd0aCkpOwogICAgIHJldHVybiB0ZXh0QnJlYWtGb2xsb3dpbmcoaXRlcmF0b3IsIDApOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0
cmluZ1RydW5jYXRvci5jcHAJKHJldmlzaW9uIDE2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDcgKzYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGNlbnRlclRydW5jYXRlVG9CdWZmZXIoYwogICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGtlZXBDb3VudCA8IFNUUklOR19CVUZG
RVJfU0laRSk7CiAgICAgCiAgICAgdW5zaWduZWQgb21pdFN0YXJ0ID0gKGtlZXBDb3VudCArIDEp
IC8gMjsKLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5kZXBy
ZWNhdGVkQ2hhcmFjdGVycygpLCBsZW5ndGgpOworICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFr
SXRlcmF0b3IgaXQoU3RyaW5nVmlldyhzdHJpbmcpLnN1YnN0cmluZygwLCBsZW5ndGgpKTsKICAg
ICB1bnNpZ25lZCBvbWl0RW5kID0gYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhpdCwgb21pdFN0
YXJ0ICsgKGxlbmd0aCAtIGtlZXBDb3VudCkgLSAxLCBsZW5ndGgpOwogICAgIG9taXRTdGFydCA9
IHRleHRCcmVha0F0T3JQcmVjZWRpbmcoaXQsIG9taXRTdGFydCk7CiAKQEAgLTExNSw3ICsxMTUs
NyBAQCBzdGF0aWMgdW5zaWduZWQgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyKGNvCiAgICAgICAgIC0t
a2VlcENvdW50OwogI2VuZGlmCiAKLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
IGl0KHN0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBsZW5ndGgpOworICAgIE5vblNoYXJl
ZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoU3RyaW5nVmlldyhzdHJpbmcpLnN1YnN0cmluZygw
LCBsZW5ndGgpKTsKICAgICB1bnNpZ25lZCBrZWVwTGVuZ3RoID0gdGV4dEJyZWFrQXRPclByZWNl
ZGluZyhpdCwga2VlcENvdW50KTsKICAgICB1bnNpZ25lZCB0cnVuY2F0ZWRMZW5ndGggPSBzaG91
bGRJbnNlcnRFbGxpcHNpcyA/IGtlZXBMZW5ndGggKyAxIDoga2VlcExlbmd0aDsKIApAQCAtMTMx
LDcgKzEzMSw3IEBAIHN0YXRpYyB1bnNpZ25lZCByaWdodENsaXBUb0NoYXJhY3RlckJ1ZmYKICAg
ICBBU1NFUlQoa2VlcENvdW50IDwgbGVuZ3RoKTsKICAgICBBU1NFUlQoa2VlcENvdW50IDwgU1RS
SU5HX0JVRkZFUl9TSVpFKTsKIAotICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3Ig
aXQoc3RyaW5nLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIGxlbmd0aCk7CisgICAgTm9uU2hhcmVk
Q2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChTdHJpbmdWaWV3KHN0cmluZykuc3Vic3RyaW5nKDAs
IGxlbmd0aCkpOwogICAgIHVuc2lnbmVkIGtlZXBMZW5ndGggPSB0ZXh0QnJlYWtBdE9yUHJlY2Vk
aW5nKGl0LCBrZWVwQ291bnQpOwogICAgIG1lbWNweShidWZmZXIsIHN0cmluZy5kZXByZWNhdGVk
Q2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0aCk7CiAKQEAgLTE0Myw3ICsx
NDMsNyBAQCBzdGF0aWMgdW5zaWduZWQgcmlnaHRDbGlwVG9Xb3JkQnVmZmVyKGNvCiAgICAgQVNT
RVJUKGtlZXBDb3VudCA8IGxlbmd0aCk7CiAgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNUUklOR19C
VUZGRVJfU0laRSk7CiAKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVy
YXRvcihzdHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICBUZXh0QnJl
YWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihzdHJpbmcpOwogICAgIHVuc2lnbmVk
IGtlZXBMZW5ndGggPSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0LCBrZWVwQ291bnQpOwogICAg
IG1lbWNweShidWZmZXIsIHN0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBzaXplb2YoVUNo
YXIpICoga2VlcExlbmd0aCk7CiAKQEAgLTE2Myw3ICsxNjMsNyBAQCBzdGF0aWMgdW5zaWduZWQg
bGVmdFRydW5jYXRlVG9CdWZmZXIoY29uCiAKICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gbGVu
Z3RoIC0ga2VlcENvdW50OwogCi0gICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBp
dChzdHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICBOb25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZyk7CiAgICAgdW5zaWduZWQgYWRqdXN0ZWRT
dGFydEluZGV4ID0gc3RhcnRJbmRleDsKICAgICBzdGFydEluZGV4ID0gYm91bmRlZFRleHRCcmVh
a0ZvbGxvd2luZyhpdCwgc3RhcnRJbmRleCwgbGVuZ3RoIC0gc3RhcnRJbmRleCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNjIxMDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBAIGludCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6Om9mZnNldEZvclBvc2kKICAgICAgICAgICAgICAgICAvLyBsaWdhdHVyZSBjYXJldHMuCiAg
ICAgICAgICAgICAgICAgQ0ZJbmRleCBoaXRJbmRleCA9IGhpdEdseXBoU3RhcnQgKyAoaGl0R2x5
cGhFbmQgLSBoaXRHbHlwaFN0YXJ0KSAqIChtX3J1bi5sdHIoKSA/IHggLyBhZGp1c3RlZEFkdmFu
Y2UgOiAxIC0geCAvIGFkanVzdGVkQWR2YW5jZSk7CiAgICAgICAgICAgICAgICAgaW50IHN0cmlu
Z0xlbmd0aCA9IGNvbXBsZXhUZXh0UnVuLnN0cmluZ0xlbmd0aCgpOwotICAgICAgICAgICAgICAg
IFRleHRCcmVha0l0ZXJhdG9yKiBjdXJzb3JQb3NpdGlvbkl0ZXJhdG9yID0gY3Vyc29yTW92ZW1l
bnRJdGVyYXRvcihjb21wbGV4VGV4dFJ1bi5jaGFyYWN0ZXJzKCksIHN0cmluZ0xlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvclBvc2l0aW9uSXRlcmF0b3Ig
PSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKFN0cmluZ1ZpZXcoY29tcGxleFRleHRSdW4uY2hhcmFj
dGVycygpLCBzdHJpbmdMZW5ndGgpKTsKICAgICAgICAgICAgICAgICBpbnQgY2x1c3RlclN0YXJ0
OwogICAgICAgICAgICAgICAgIGlmIChpc1RleHRCcmVhayhjdXJzb3JQb3NpdGlvbkl0ZXJhdG9y
LCBoaXRJbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJTdGFydCA9IGhpdEluZGV4
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmll
cy5jcHAJKHJldmlzaW9uIDE2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEJvdW5kYXJpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIGludCBz
dGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQoY29uc3QKIAogaW50IGZpbmROZXh0V29yZEZy
b21JbmRleChjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgYm9vbCBm
b3J3YXJkKQogewotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9y
KGNoYXJzLCBsZW4pOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJh
dG9yKFN0cmluZ1ZpZXcoY2hhcnMsIGxlbikpOwogCiAgICAgaWYgKGZvcndhcmQpIHsKICAgICAg
ICAgcG9zaXRpb24gPSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKQEAgLTkwLDcg
KzkwLDcgQEAgaW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25zdCBVQ2hhciogYwogCiB2b2lk
IGZpbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRp
b24sIGludCogc3RhcnQsIGludCogZW5kKQogewotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9
IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4pOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBp
dCA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoY2hhcnMsIGxlbikpOwogICAgICplbmQg
PSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKICAgICBpZiAoKmVuZCA8IDApCiAg
ICAgICAgICplbmQgPSB0ZXh0QnJlYWtMYXN0KGl0KTsKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBm
aW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycwogCiB2b2lkIGZpbmRFbmRXb3JkQm91
bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogZW5k
KQogewotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJz
LCBsZW4pOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0
cmluZ1ZpZXcoY2hhcnMsIGxlbikpOwogICAgICplbmQgPSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQs
IHBvc2l0aW9uKTsKICAgICBpZiAoKmVuZCA8IDApCiAgICAgICAgICplbmQgPSB0ZXh0QnJlYWtM
YXN0KGl0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEJyZWFrSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxNjIxMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4
LDI1ICsxMzgsMjUgQEAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzZXRDb250ZXh0QXdhcgog
CiAvLyBTdGF0aWMgaXRlcmF0b3JzCiAKLVRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVy
YXRvcihjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQorVGV4dEJyZWFrSXRlcmF0b3Iq
IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQogewogICAgIHN0YXRpYyBUZXh0
QnJlYWtJdGVyYXRvciogc3RhdGljV29yZEJyZWFrSXRlcmF0b3IgPSBpbml0aWFsaXplSXRlcmF0
b3IoVUJSS19XT1JEKTsKICAgICBpZiAoIXN0YXRpY1dvcmRCcmVha0l0ZXJhdG9yKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBzZXRUZXh0Rm9ySXRlcmF0b3IoKnN0YXRp
Y1dvcmRCcmVha0l0ZXJhdG9yLCBTdHJpbmdWaWV3KGJ1ZmZlciwgbGVuZ3RoKSk7CisgICAgcmV0
dXJuIHNldFRleHRGb3JJdGVyYXRvcigqc3RhdGljV29yZEJyZWFrSXRlcmF0b3IsIHN0cmluZyk7
CiB9CiAKLVRleHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNo
YXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKK1RleHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFr
SXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcpCiB7CiAgICAgc3RhdGljIFRleHRCcmVha0l0ZXJh
dG9yKiBzdGF0aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3IgPSBpbml0aWFsaXplSXRlcmF0b3IoVUJS
S19TRU5URU5DRSk7CiAgICAgaWYgKCFzdGF0aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3IpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHNldFRleHRGb3JJdGVyYXRvcigqc3Rh
dGljU2VudGVuY2VCcmVha0l0ZXJhdG9yLCBTdHJpbmdWaWV3KGJ1ZmZlciwgbGVuZ3RoKSk7Cisg
ICAgcmV0dXJuIHNldFRleHRGb3JJdGVyYXRvcigqc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9y
LCBzdHJpbmcpOwogfQogCi1UZXh0QnJlYWtJdGVyYXRvciogY3Vyc29yTW92ZW1lbnRJdGVyYXRv
cihjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQorVGV4dEJyZWFrSXRlcmF0b3IqIGN1
cnNvck1vdmVtZW50SXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcpCiB7CiAjaWYgIVBMQVRGT1JN
KElPUykKICAgICAvLyBUaGlzIHJ1bGUgc2V0IGlzIGJhc2VkIG9uIGNoYXJhY3Rlci1icmVhayBp
dGVyYXRvciBydWxlcyBvZiBJQ1UgNC4wCkBAIC0yNTAsNyArMjUwLDcgQEAgVGV4dEJyZWFrSXRl
cmF0b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0bwogICAgIGlmICghc3RhdGljQ3Vyc29yTW92ZW1l
bnRJdGVyYXRvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gc2V0VGV4
dEZvckl0ZXJhdG9yKCpzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yLCBTdHJpbmdWaWV3KGJ1
ZmZlciwgbGVuZ3RoKSk7CisgICAgcmV0dXJuIHNldFRleHRGb3JJdGVyYXRvcigqc3RhdGljQ3Vy
c29yTW92ZW1lbnRJdGVyYXRvciwgc3RyaW5nKTsKIH0KIAogVGV4dEJyZWFrSXRlcmF0b3IqIGFj
cXVpcmVMaW5lQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBwcmlvckNvbnRleHQsIHVuc2lnbmVkIHByaW9yQ29u
dGV4dExlbmd0aCkKQEAgLTI4NSw3ICsyODUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFy
ZUFuZFN3YXBOb25TaGFyCiAjZW5kaWYKIH0KIAotTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVy
YXRvcjo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogYnVmZmVy
LCBpbnQgbGVuZ3RoKQorTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6Tm9uU2hhcmVk
Q2hhcmFjdGVyQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZykKIHsKICAgICBtX2l0ZXJh
dG9yID0gbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKIApAQCAtMjk1LDcgKzI5NSw3
IEBAIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6Ok5vblNoYXIKICAgICBpZiAoIW1f
aXRlcmF0b3IpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faXRlcmF0b3IgPSBzZXRUZXh0Rm9y
SXRlcmF0b3IoKm1faXRlcmF0b3IsIFN0cmluZ1ZpZXcoYnVmZmVyLCBsZW5ndGgpKTsKKyAgICBt
X2l0ZXJhdG9yID0gc2V0VGV4dEZvckl0ZXJhdG9yKCptX2l0ZXJhdG9yLCBzdHJpbmcpOwogfQog
CiBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjp+Tm9uU2hhcmVkQ2hhcmFjdGVyQnJl
YWtJdGVyYXRvcigpCkBAIC0zNjQsNyArMzY0LDcgQEAgdW5zaWduZWQgbnVtR3JhcGhlbWVDbHVz
dGVycyhjb25zdCBTdHJpbgogICAgIGlmIChzLmlzOEJpdCgpICYmICFzLmNvbnRhaW5zKCdccicp
KQogICAgICAgICByZXR1cm4gc3RyaW5nTGVuZ3RoOwogCi0gICAgTm9uU2hhcmVkQ2hhcmFjdGVy
QnJlYWtJdGVyYXRvciBpdChzLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIHN0cmluZ0xlbmd0aCk7
CisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChzKTsKICAgICBpZiAoIWl0
KQogICAgICAgICByZXR1cm4gc3RyaW5nTGVuZ3RoOwogCkBAIC0zODUsNyArMzg1LDcgQEAgdW5z
aWduZWQgbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycwogICAgIGlmIChzLmlzOEJpdCgp
ICYmICFzLmNvbnRhaW5zKCdccicpKQogICAgICAgICByZXR1cm4gc3RkOjptaW4oc3RyaW5nTGVu
Z3RoLCBudW1HcmFwaGVtZUNsdXN0ZXJzKTsKIAotICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFr
SXRlcmF0b3IgaXQocy5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBzdHJpbmdMZW5ndGgpOworICAg
IE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQocyk7CiAgICAgaWYgKCFpdCkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWluKHN0cmluZ0xlbmd0aCwgbnVtR3JhcGhlbWVDbHVzdGVycyk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0
ZXJhdG9yLmgJKHJldmlzaW9uIDE2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEJyZWFrSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDEwIEBA
IGNsYXNzIFRleHRCcmVha0l0ZXJhdG9yOwogLy8gcGxhdGZvcm0gVUkgY29udmVudGlvbnMuIE9u
ZSBub3RhYmxlIGV4YW1wbGUgd2hlcmUgdGhpcyBjYW4gYmUgZGlmZmVyZW50CiAvLyBmcm9tIGNo
YXJhY3RlciBicmVhayBpdGVyYXRvciBpcyBUaGFpIHByZXBlbmQgY2hhcmFjdGVycywgc2VlIGJ1
ZyAyNDM0Mi4KIC8vIFVzZSB0aGlzIGZvciBpbnNlcnRpb24gcG9pbnQgYW5kIHNlbGVjdGlvbiBt
YW5pcHVsYXRpb25zLgotVGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0b3Io
Y29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKK1RleHRCcmVha0l0ZXJhdG9yKiBjdXJzb3JNb3Zl
bWVudEl0ZXJhdG9yKFN0cmluZ1ZpZXcpOwogCi1UZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFr
SXRlcmF0b3IoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKLVRleHRCcmVha0l0ZXJhdG9yKiBz
ZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKK1RleHRCcmVh
a0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KTsKK1RleHRCcmVha0l0ZXJh
dG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyk7CiAKIFRleHRCcmVha0l0ZXJh
dG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldywgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBwcmlvckNvbnRleHQsIHVuc2lnbmVkIHByaW9yQ29u
dGV4dExlbmd0aCk7CiB2b2lkIHJlbGVhc2VMaW5lQnJlYWtJdGVyYXRvcihUZXh0QnJlYWtJdGVy
YXRvciopOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHByaXZhdGU6CiBjbGFzcyBOb25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOb25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yKTsKIHB1YmxpYzoKLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJC
cmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CisgICAgTm9uU2hhcmVkQ2hh
cmFjdGVyQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KTsKICAgICB+Tm9uU2hhcmVkQ2hhcmFjdGVy
QnJlYWtJdGVyYXRvcigpOwogCiAgICAgb3BlcmF0b3IgVGV4dEJyZWFrSXRlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gbV9pdGVyYXRvcjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTYyMTA5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgc3Rh
dGljIHZvaWQgbWFrZUNhcGl0YWxpemVkKFN0cmluZyogc3RyaQogICAgICAgICAgICAgc3RyaW5n
V2l0aFByZXZpb3VzW2ldID0gc3RyaW5nSW1wbFtpIC0gMV07CiAgICAgfQogCi0gICAgVGV4dEJy
ZWFrSXRlcmF0b3IqIGJvdW5kYXJ5ID0gd29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nV2l0aFByZXZp
b3VzLmNoYXJhY3RlcnMoKSwgbGVuZ3RoICsgMSk7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGJv
dW5kYXJ5ID0gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyhzdHJpbmdXaXRoUHJldmlvdXMu
Y2hhcmFjdGVycygpLCBsZW5ndGggKyAxKSk7CiAgICAgaWYgKCFib3VuZGFyeSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0xMzQwLDcgKzEzNDAsNyBAQCBpbnQgUmVuZGVyVGV4dDo6cHJldmlvdXNP
ZmZzZXQoaW50IGN1cnJlCiAgICAgICAgIHJldHVybiBjdXJyZW50IC0gMTsKIAogICAgIFN0cmlu
Z0ltcGwqIHRleHRJbXBsID0gbV90ZXh0LmltcGwoKTsKLSAgICBUZXh0QnJlYWtJdGVyYXRvciog
aXRlcmF0b3IgPSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKHRleHRJbXBsLT5jaGFyYWN0ZXJzMTYo
KSwgdGV4dEltcGwtPmxlbmd0aCgpKTsKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3Ig
PSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKFN0cmluZ1ZpZXcodGV4dEltcGwtPmNoYXJhY3RlcnMx
NigpLCB0ZXh0SW1wbC0+bGVuZ3RoKCkpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQogICAgICAgICBy
ZXR1cm4gY3VycmVudCAtIDE7CiAKQEAgLTE0OTMsNyArMTQ5Myw3IEBAIGludCBSZW5kZXJUZXh0
OjpuZXh0T2Zmc2V0KGludCBjdXJyZW50KSAKICAgICAgICAgcmV0dXJuIGN1cnJlbnQgKyAxOwog
CiAgICAgU3RyaW5nSW1wbCogdGV4dEltcGwgPSBtX3RleHQuaW1wbCgpOwotICAgIFRleHRCcmVh
a0l0ZXJhdG9yKiBpdGVyYXRvciA9IGN1cnNvck1vdmVtZW50SXRlcmF0b3IodGV4dEltcGwtPmNo
YXJhY3RlcnMxNigpLCB0ZXh0SW1wbC0+bGVuZ3RoKCkpOworICAgIFRleHRCcmVha0l0ZXJhdG9y
KiBpdGVyYXRvciA9IGN1cnNvck1vdmVtZW50SXRlcmF0b3IoU3RyaW5nVmlldyh0ZXh0SW1wbC0+
Y2hhcmFjdGVyczE2KCksIHRleHRJbXBsLT5sZW5ndGgoKSkpOwogICAgIGlmICghaXRlcmF0b3Ip
CiAgICAgICAgIHJldHVybiBjdXJyZW50ICsgMTsKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
MTYyMTEyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTQtMDEtMTUgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBUZXh0QnJlYWtJdGVyYXRvcidzIHNob3VsZCBzdXBwb3J0IExhdGluLTEgZm9yIGFs
bCBpdGVyYXRvciB0eXBlcyAoUGFydCAzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI2ODU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ2hhbmdlIGFsbCB0aGUgVGV4dEJyZWFrSXRlcmF0b3IgY3JlYXRp
b24gZnVuY3Rpb25zIHRvIHRha2UgU3RyaW5nVmlld3MuIFJlbW92ZSBhIGZldworICAgICAgICBu
b3cgdW5uZWNlc3NhcnkgdXAtY29udmVyc2lvbiB0byBVVEYtMTYgaW4gdGhlIHByb2Nlc3MuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6bmV4dFdvcmRPZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgpOgorCiAyMDE0LTAxLTE1ICBFdW5taSBMZWUgIDxldW5taTE1Lmxl
ZUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIFVzZSB0aW1lc3RhbXAgd2hlbiBl
dmVudCBvY2N1cnMgZm9yIHRvdWNoIGV2ZW50cy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCShyZXZpc2lvbiAxNjIxMDkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIHN0YXRpYyBpbnQgbmV4dFdvcmRPZmZzZXQoY29uc3Qg
VUNoYXIqIHQKICAgICAvLyAgICAgICAgb3IgYWZ0ZXIgIm9mZnNldCIgKHVicmtfaXNCb3VuZGFy
eSBzaWRlIGVmZmVjdCkuCiAgICAgLy8gICAgICAgIEZvciBtYW55IHdvcmQgc2VwYXJhdG9ycywg
dGhlIG1ldGhvZCBkb2Vzbid0IHByb3Blcmx5IGRldGVybWluZSB0aGUgYm91bmRhcmllcwogICAg
IC8vICAgICAgICB3aXRob3V0IHJlc2V0dGluZyB0aGUgaXRlcmF0b3IuCi0gICAgVGV4dEJyZWFr
SXRlcmF0b3IqIHRleHRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0aCk7
CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIHRleHRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9y
KFN0cmluZ1ZpZXcodGV4dCwgbGVuZ3RoKSk7CiAgICAgaWYgKCF0ZXh0SXRlcmF0b3IpCiAgICAg
ICAgIHJldHVybiBjdXJyZW50T2Zmc2V0OwogCkBAIC0xNTMsNyArMTUzLDcgQEAgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OgogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IHBhcmFncmFwaENoZWNraW5nUmVzdWx0OwogI2lmIEVOQUJMRShTUEVMTENIRUNLKQog
ICAgIGlmIChjaGVja2luZ1R5cGVzICYgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSB7Ci0gICAg
ICAgIFRleHRCcmVha0l0ZXJhdG9yKiB0ZXh0SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcih0
ZXh0LCBsZW5ndGgpOworICAgICAgICBUZXh0QnJlYWtJdGVyYXRvciogdGV4dEl0ZXJhdG9yID0g
d29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyh0ZXh0LCBsZW5ndGgpKTsKICAgICAgICAgaWYg
KCF0ZXh0SXRlcmF0b3IpCiAgICAgICAgICAgICByZXR1cm4gcGFyYWdyYXBoQ2hlY2tpbmdSZXN1
bHQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjExMikKKysrIFNvdXJjZS9X
ZWJLaXQvaW9zL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE0
LTAxLTE1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGV4dEJyZWFr
SXRlcmF0b3IncyBzaG91bGQgc3VwcG9ydCBMYXRpbi0xIGZvciBhbGwgaXRlcmF0b3IgdHlwZXMg
KFBhcnQgMykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNjg1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENoYW5nZSBhbGwgdGhlIFRleHRCcmVha0l0ZXJhdG9yIGNyZWF0aW9uIGZ1bmN0aW9ucyB0byB0
YWtlIFN0cmluZ1ZpZXdzLiBSZW1vdmUgYSBmZXcKKyAgICAgICAgbm93IHVubmVjZXNzYXJ5IHVw
LWNvbnZlcnNpb24gdG8gVVRGLTE2IGluIHRoZSBwcm9jZXNzLgorCisgICAgICAgICogTWlzYy9X
ZWJOU1N0cmluZ0RyYXdpbmcubW06CisKIDIwMTQtMDEtMTQgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQXZvaWQgUExBVEZPUk0oKSBtYWNyb3MgaW4g
ZXhwb3J0ZWQgaGVhZGVycy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2ViTlNTdHJp
bmdEcmF3aW5nLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2ViTlNT
dHJpbmdEcmF3aW5nLm1tCShyZXZpc2lvbiAxNjIxMDkpCisrKyBTb3VyY2UvV2ViS2l0L2lvcy9N
aXNjL1dlYk5TU3RyaW5nRHJhd2luZy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDU2LDcgKzQ1Niw3
IEBAIC0gKENHU2l6ZSlfX3dlYl9kcmF3SW5SZWN0OihDR1JlY3QpcmVjdAogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGVsbGlwc2lzU3R5bGUgPT0gV2ViRWxsaXBzaXNTdHlsZUNoYXJhY3Rl
cldyYXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gYnJlYWsgb24g
Y2hhcmFjdGVycy4gV2Ugc2hvdWxkIGRvIHNvbWV0aGluZyBzbWFydGVyLCBsaWtlIHNwbGl0IHRo
ZSBsZW5ndGggb2YgdGhlIGVudGlyZSBsaW5lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIERvbid0LCBob3dldmVyLCBicmVhayBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhcmFjdGVyLgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0
b3IgaXQocG9zLCBsZW5ndGhSZW1haW5pbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoU3RyaW5nVmlldyhwb3MsIGxlbmd0
aFJlbWFpbmluZykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrUG9zID0gYm91
bmRlZFRleHRCcmVha0ZvbGxvd2luZyhpdCwgMCwgbGVuZ3RoUmVtYWluaW5nKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNTM3LDcgKzUzNyw3IEBAIC0gKENHU2l6ZSlfX3dlYl9kcmF3
SW5SZWN0OihDR1JlY3QpcmVjdAogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG11c3QgYmUg
YSBsb25nIHdvcmQgdGhhdCBkb2Vzbid0IGZpdCBpbnNpZGUgdGhlIGVudGlyZSB3aWR0aAogICAg
ICAgICAgICAgICAgICAgICAvLyBGaXQgaXQgb24gYSBsaW5lIG9uZSBjaGFyYWN0ZXIgYXQgYSB0
aW1lIGFuZCBicmVhayB3aGVuIG5vIG1vcmUgY2hhcmFjdGVycyBmaXQKICAgICAgICAgICAgICAg
ICAgICAgLy8gRm9yY2UgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciB0byBhdm9pZCB0aGUgZWRnZSBj
YXNlIHdoZXJlIGEgc2luZ2xlIGdseXBoIGRvZXNuJ3QgZml0IHdpdGhpbiB3aWR0aAotICAgICAg
ICAgICAgICAgICAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHBvcywgbGVu
Z3RoUmVtYWluaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJl
YWtJdGVyYXRvciBpdChTdHJpbmdWaWV3KHBvcywgbGVuZ3RoUmVtYWluaW5nKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGludCBvZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgICAgICBpbnQgbmV4
dENoYXJCcmVhayA9IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoaXQsIG9mZnNldCwgbGVuZ3Ro
UmVtYWluaW5nKTsKICAgICAgICAgICAgICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuKHBvcywgbmV4
dENoYXJCcmVhayk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221331</attachid>
            <date>2014-01-15 21:58:12 -0800</date>
            <delta_ts>2014-01-16 21:29:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126856-20140115215811.patch</filename>
            <type>text/plain</type>
            <size>23526</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjExMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTAxLTE1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IncyBzaG91
bGQgc3VwcG9ydCBMYXRpbi0xIGZvciBhbGwgaXRlcmF0b3IgdHlwZXMgKFBhcnQgMykKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjg1NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZSBhbGwgdGhl
IFRleHRCcmVha0l0ZXJhdG9yIGNyZWF0aW9uIGZ1bmN0aW9ucyB0byB0YWtlIFN0cmluZ1ZpZXdz
LiBSZW1vdmUgYSBmZXcKKyAgICAgICAgbm93IHVubmVjZXNzYXJ5IHVwLWNvbnZlcnNpb24gdG8g
VVRGLTE2IGluIHRoZSBwcm9jZXNzLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3Bw
OgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFy
aWVzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorCiAyMDE0LTAxLTE1ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IHdpbmRvd3MgYnVpbGQuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCShyZXZpc2lvbiAxNjIxMDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcg
QEAgdW5zaWduZWQgQ2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0YQogICAgIC8vIHNlZSA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDkyPi4KICAgICAvLyBX
ZSBuZWVkIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGxvb2stYWhlYWQgdG8gYWNjb3VudCBmb3Ig
VVRGLTE2IHN1cnJvZ2F0ZXMuCiAgICAgaWYgKGNoYXJhY3Rlckxlbmd0aExpbWl0IDwgY2hhcmFj
dGVyTGVuZ3RoKSB7Ci0gICAgICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQo
c3RyaW5nLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCkgKyBvZmZzZXQsIChjaGFyYWN0ZXJMZW5ndGhM
aW1pdCArIDIgPiBjaGFyYWN0ZXJMZW5ndGgpID8gY2hhcmFjdGVyTGVuZ3RoIDogY2hhcmFjdGVy
TGVuZ3RoTGltaXQgKyAyKTsKKyAgICAgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRv
ciBpdChTdHJpbmdWaWV3KHN0cmluZykuc3Vic3RyaW5nKG9mZnNldCwgKGNoYXJhY3Rlckxlbmd0
aExpbWl0ICsgMiA+IGNoYXJhY3Rlckxlbmd0aCkgPyBjaGFyYWN0ZXJMZW5ndGggOiBjaGFyYWN0
ZXJMZW5ndGhMaW1pdCArIDIpKTsKICAgICAgICAgaWYgKCFpc1RleHRCcmVhayhpdCwgY2hhcmFj
dGVyTGVuZ3RoTGltaXQpKQogICAgICAgICAgICAgY2hhcmFjdGVyTGVuZ3RoTGltaXQgPSB0ZXh0
QnJlYWtQcmVjZWRpbmcoaXQsIGNoYXJhY3Rlckxlbmd0aExpbWl0KTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCShyZXZpc2lv
biAxNjIxMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDkgKzcwLDkgQEAgc3RhdGljIHZvaWQgZmluZEJhZEdy
YW1tYXJzKFRleHRDaGVja2VyQwogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGZpbmRNaXNzcGVs
bGluZ3MoVGV4dENoZWNrZXJDbGllbnQqIGNsaWVudCwgY29uc3QgVUNoYXIqIHRleHQsIGludCBz
dGFydCwgaW50IGxlbmd0aCwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCitz
dGF0aWMgdm9pZCBmaW5kTWlzc3BlbGxpbmdzKFRleHRDaGVja2VyQ2xpZW50KiBjbGllbnQsIGNv
bnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYg
cmVzdWx0cykKIHsKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSB3b3JkQnJlYWtJ
dGVyYXRvcih0ZXh0ICsgc3RhcnQsIGxlbmd0aCk7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0
ZXJhdG9yID0gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyh0ZXh0LCBsZW5ndGgpKTsKICAg
ICBpZiAoIWl0ZXJhdG9yKQogICAgICAgICByZXR1cm47CiAgICAgaW50IHdvcmRTdGFydCA9IHRl
eHRCcmVha0N1cnJlbnQoaXRlcmF0b3IpOwpAQCAtODMsMTMgKzgzLDEzIEBAIHN0YXRpYyB2b2lk
IGZpbmRNaXNzcGVsbGluZ3MoVGV4dENoZWNrZXIKICAgICAgICAgaW50IHdvcmRMZW5ndGggPSB3
b3JkRW5kIC0gd29yZFN0YXJ0OwogICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0x
OwogICAgICAgICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOwotICAgICAgICBjbGllbnQtPmNo
ZWNrU3BlbGxpbmdPZlN0cmluZyh0ZXh0ICsgc3RhcnQgKyB3b3JkU3RhcnQsIHdvcmRMZW5ndGgs
ICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICBjbGll
bnQtPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0ZXh0ICsgd29yZFN0YXJ0LCB3b3JkTGVuZ3RoLCAm
bWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKICAgICAgICAgaWYgKDAg
PCBtaXNzcGVsbGluZ0xlbmd0aCkgewogICAgICAgICAgICAgQVNTRVJUKDAgPD0gbWlzc3BlbGxp
bmdMb2NhdGlvbiAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uIDw9IHdvcmRMZW5ndGgpOwogICAgICAg
ICAgICAgQVNTRVJUKDAgPCBtaXNzcGVsbGluZ0xlbmd0aCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9u
ICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gd29yZExlbmd0aCk7CiAgICAgICAgICAgICBUZXh0Q2hl
Y2tpbmdSZXN1bHQgbWlzc3BlbGxpbmc7CiAgICAgICAgICAgICBtaXNzcGVsbGluZy50eXBlID0g
VGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOwotICAgICAgICAgICAgbWlzc3BlbGxpbmcubG9jYXRp
b24gPSBzdGFydCArIHdvcmRTdGFydCArIG1pc3NwZWxsaW5nTG9jYXRpb247CisgICAgICAgICAg
ICBtaXNzcGVsbGluZy5sb2NhdGlvbiA9IHdvcmRTdGFydCArIG1pc3NwZWxsaW5nTG9jYXRpb247
CiAgICAgICAgICAgICBtaXNzcGVsbGluZy5sZW5ndGggPSBtaXNzcGVsbGluZ0xlbmd0aDsKICAg
ICAgICAgICAgIG1pc3NwZWxsaW5nLnJlcGxhY2VtZW50ID0gY2xpZW50LT5nZXRBdXRvQ29ycmVj
dFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChTdHJpbmcodGV4dCArIG1pc3NwZWxsaW5nLmxv
Y2F0aW9uLCBtaXNzcGVsbGluZy5sZW5ndGgpKTsKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5k
KG1pc3NwZWxsaW5nKTsKQEAgLTY0OCw3ICs2NDgsNyBAQCB2b2lkIGNoZWNrVGV4dE9mUGFyYWdy
YXBoKFRleHRDaGVja2VyQ2xpCiAjZWxzZQogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IHNwZWxsaW5nUmVzdWx0OwogICAgIGlmIChjaGVja2luZ1R5cGVzICYgVGV4dENoZWNraW5nVHlw
ZVNwZWxsaW5nKQotICAgICAgICBmaW5kTWlzc3BlbGxpbmdzKGNsaWVudCwgdGV4dCwgMCwgbGVu
Z3RoLCBzcGVsbGluZ1Jlc3VsdCk7CisgICAgICAgIGZpbmRNaXNzcGVsbGluZ3MoY2xpZW50LCB0
ZXh0LCBsZW5ndGgsIHNwZWxsaW5nUmVzdWx0KTsKIAogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5H
KQogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGdyYW1tYXJSZXN1bHQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCShyZXZpc2lvbiAxNjIxMDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwMSw4ICszMDEsOCBAQCBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0
ZXJhCiAgICAgc3RyaW5nLmFwcGVuZCh0ZXh0Qm94LT5yZW5kZXJlcigpLnRleHQoKS0+ZGVwcmVj
YXRlZENoYXJhY3RlcnMoKSArIHRleHRCb3gtPnN0YXJ0KCksIHRleHRCb3gtPmxlbigpKTsKICAg
ICBsZW4gKz0gdGV4dEJveC0+bGVuKCk7CiAKLSAgICByZXR1cm4gd29yZEJyZWFrSXRlcmF0b3Io
c3RyaW5nLmRhdGEoKSwgbGVuKTsKLX0gCisgICAgcmV0dXJuIHdvcmRCcmVha0l0ZXJhdG9yKFN0
cmluZ1ZpZXcoc3RyaW5nLmRhdGEoKSwgbGVuKSk7Cit9CiAKIHN0YXRpYyBUZXh0QnJlYWtJdGVy
YXRvciogd29yZEJyZWFrSXRlcmF0b3JGb3JNYXhPZmZzZXRCb3VuZGFyeShjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgY29uc3QgSW5saW5lVGV4dEJveCogdGV4dEJveCwK
ICAgICBib29sJiBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jaywgVmVjdG9yPFVDaGFyLCAxMDI0PiYg
c3RyaW5nLCBDYWNoZWRMb2dpY2FsbHlPcmRlcmVkTGVhZkJveGVzJiBsZWFmQm94ZXMpCkBAIC0z
MjIsOCArMzIyLDggQEAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYQog
ICAgICAgICBsZW4gKz0gbmV4dFRleHRCb3gtPmxlbigpOwogICAgIH0KIAotICAgIHJldHVybiB3
b3JkQnJlYWtJdGVyYXRvcihzdHJpbmcuZGF0YSgpLCBsZW4pOwotfSAKKyAgICByZXR1cm4gd29y
ZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyhzdHJpbmcuZGF0YSgpLCBsZW4pKTsKK30KIAogc3Rh
dGljIGJvb2wgaXNMb2dpY2FsU3RhcnRPZldvcmQoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXIsIGlu
dCBwb3NpdGlvbiwgYm9vbCBoYXJkTGluZUJyZWFrKQogewpAQCAtMzg1LDcgKzM4NSw3IEBAIHN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzdWFsV29yZFBvc2l0aW8KICAgICAgICAgZWxzZSBpZiAo
b2Zmc2V0SW5Cb3ggPT0gYm94LT5jYXJldE1heE9mZnNldCgpKQogICAgICAgICAgICAgaXRlciA9
IHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkodmlzaWJsZVBvc2l0aW9uLCB0
ZXh0Qm94LCBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jaywgc3RyaW5nLCBsZWFmQm94ZXMpOwogICAg
ICAgICBlbHNlIGlmIChtb3ZpbmdJbnRvTmV3Qm94KSB7Ci0gICAgICAgICAgICBpdGVyID0gd29y
ZEJyZWFrSXRlcmF0b3IodGV4dEJveC0+cmVuZGVyZXIoKS50ZXh0KCktPmRlcHJlY2F0ZWRDaGFy
YWN0ZXJzKCkgKyB0ZXh0Qm94LT5zdGFydCgpLCB0ZXh0Qm94LT5sZW4oKSk7CisgICAgICAgICAg
ICBpdGVyID0gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyh0ZXh0Qm94LT5yZW5kZXJlcigp
LnRleHQoKSkuc3Vic3RyaW5nKHRleHRCb3gtPnN0YXJ0KCksIHRleHRCb3gtPmxlbigpKSk7CiAg
ICAgICAgICAgICBwcmV2aW91c2x5VmlzaXRlZEJveCA9IGJveDsKICAgICAgICAgfQogCkBAIC0x
MDQ2LDcgKzEwNDYsNyBAQCBWaXNpYmxlUG9zaXRpb24gbmV4dExpbmVQb3NpdGlvbihjb25zdCBW
CiAKIHN0YXRpYyB1bnNpZ25lZCBzdGFydFNlbnRlbmNlQm91bmRhcnkoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4
dEF2YWlsYWJpbGl0eSwgYm9vbCYpCiB7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9y
ID0gc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgVGV4dEJy
ZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gc2VudGVuY2VCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXco
Y2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgZnVuY3Rp
b24gY2FuIHJldHVybiAtMTsgd2UgZG9uJ3QgaGFuZGxlIHRoYXQuCiAgICAgcmV0dXJuIHRleHRC
cmVha1ByZWNlZGluZyhpdGVyYXRvciwgbGVuZ3RoKTsKIH0KQEAgLTEwNTgsNyArMTA1OCw3IEBA
IFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VudGVuY2UoY29uc3QgVmkKIAogc3RhdGljIHVuc2ln
bmVkIGVuZFNlbnRlbmNlQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCwgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSwgYm9v
bCYpCiB7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gc2VudGVuY2VCcmVha0l0
ZXJhdG9yKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJh
dG9yID0gc2VudGVuY2VCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoY2hhcmFjdGVycywgbGVuZ3Ro
KSk7CiAgICAgcmV0dXJuIHRleHRCcmVha05leHQoaXRlcmF0b3IpOwogfQogCkBAIC0xMDcxLDcg
KzEwNzEsNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTZW50ZW5jZShjb25zdCBWaXNpCiBzdGF0
aWMgdW5zaWduZWQgcHJldmlvdXNTZW50ZW5jZVBvc2l0aW9uQm91bmRhcnkoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNoQ29u
dGV4dEF2YWlsYWJpbGl0eSwgYm9vbCYpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaWRlbnRp
Y2FsIHRvIHN0YXJ0U2VudGVuY2VCb3VuZGFyeS4gSSdtIHByZXR0eSBzdXJlIHRoYXQncyBub3Qg
cmlnaHQuCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gc2VudGVuY2VCcmVha0l0
ZXJhdG9yKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJh
dG9yID0gc2VudGVuY2VCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoY2hhcmFjdGVycywgbGVuZ3Ro
KSk7CiAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FuIHJldHVybiAtMTsg
d2UgZG9uJ3QgaGFuZGxlIHRoYXQuCiAgICAgcmV0dXJuIHRleHRCcmVha1ByZWNlZGluZyhpdGVy
YXRvciwgbGVuZ3RoKTsKIH0KQEAgLTEwODYsNyArMTA4Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBu
ZXh0U2VudGVuY2VQb3NpdGlvbkJvdW4KIHsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpZGVudGlj
YWwgdG8gZW5kU2VudGVuY2VCb3VuZGFyeS4gVGhpcyBpc24ndCByaWdodCwgaXQgbmVlZHMgdG8g
CiAgICAgLy8gbW92ZSB0byB0aGUgZXF1aXZsYW50IHBvc2l0aW9uIGluIHRoZSBmb2xsb3dpbmcg
c2VudGVuY2UuCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gc2VudGVuY2VCcmVh
a0l0ZXJhdG9yKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0
ZXJhdG9yID0gc2VudGVuY2VCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoY2hhcmFjdGVycywgbGVu
Z3RoKSk7CiAgICAgcmV0dXJuIHRleHRCcmVha0ZvbGxvd2luZyhpdGVyYXRvciwgMCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5n
VHJ1bmNhdG9yLmNwcAkocmV2aXNpb24gMTYyMTA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyAr
NjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgY2VudGVyVHJ1bmNhdGVUb0J1ZmZlcihjCiAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oa2VlcENvdW50IDwgU1RSSU5HX0JVRkZFUl9T
SVpFKTsKICAgICAKICAgICB1bnNpZ25lZCBvbWl0U3RhcnQgPSAoa2VlcENvdW50ICsgMSkgLyAy
OwotICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoc3RyaW5nLmRlcHJlY2F0
ZWRDaGFyYWN0ZXJzKCksIGxlbmd0aCk7CisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVy
YXRvciBpdChTdHJpbmdWaWV3KHN0cmluZykuc3Vic3RyaW5nKDAsIGxlbmd0aCkpOwogICAgIHVu
c2lnbmVkIG9taXRFbmQgPSBib3VuZGVkVGV4dEJyZWFrRm9sbG93aW5nKGl0LCBvbWl0U3RhcnQg
KyAobGVuZ3RoIC0ga2VlcENvdW50KSAtIDEsIGxlbmd0aCk7CiAgICAgb21pdFN0YXJ0ID0gdGV4
dEJyZWFrQXRPclByZWNlZGluZyhpdCwgb21pdFN0YXJ0KTsKIApAQCAtMTE1LDcgKzExNSw3IEBA
IHN0YXRpYyB1bnNpZ25lZCByaWdodFRydW5jYXRlVG9CdWZmZXIoY28KICAgICAgICAgLS1rZWVw
Q291bnQ7CiAjZW5kaWYKIAotICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQo
c3RyaW5nLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIGxlbmd0aCk7CisgICAgTm9uU2hhcmVkQ2hh
cmFjdGVyQnJlYWtJdGVyYXRvciBpdChTdHJpbmdWaWV3KHN0cmluZykuc3Vic3RyaW5nKDAsIGxl
bmd0aCkpOwogICAgIHVuc2lnbmVkIGtlZXBMZW5ndGggPSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5n
KGl0LCBrZWVwQ291bnQpOwogICAgIHVuc2lnbmVkIHRydW5jYXRlZExlbmd0aCA9IHNob3VsZElu
c2VydEVsbGlwc2lzID8ga2VlcExlbmd0aCArIDEgOiBrZWVwTGVuZ3RoOwogCkBAIC0xMzEsNyAr
MTMxLDcgQEAgc3RhdGljIHVuc2lnbmVkIHJpZ2h0Q2xpcFRvQ2hhcmFjdGVyQnVmZgogICAgIEFT
U0VSVChrZWVwQ291bnQgPCBsZW5ndGgpOwogICAgIEFTU0VSVChrZWVwQ291bnQgPCBTVFJJTkdf
QlVGRkVSX1NJWkUpOwogCi0gICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChz
dHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICBOb25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yIGl0KFN0cmluZ1ZpZXcoc3RyaW5nKS5zdWJzdHJpbmcoMCwgbGVu
Z3RoKSk7CiAgICAgdW5zaWduZWQga2VlcExlbmd0aCA9IHRleHRCcmVha0F0T3JQcmVjZWRpbmco
aXQsIGtlZXBDb3VudCk7CiAgICAgbWVtY3B5KGJ1ZmZlciwgc3RyaW5nLmRlcHJlY2F0ZWRDaGFy
YWN0ZXJzKCksIHNpemVvZihVQ2hhcikgKiBrZWVwTGVuZ3RoKTsKIApAQCAtMTQzLDcgKzE0Myw3
IEBAIHN0YXRpYyB1bnNpZ25lZCByaWdodENsaXBUb1dvcmRCdWZmZXIoY28KICAgICBBU1NFUlQo
a2VlcENvdW50IDwgbGVuZ3RoKTsKICAgICBBU1NFUlQoa2VlcENvdW50IDwgU1RSSU5HX0JVRkZF
Ul9TSVpFKTsKIAotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9y
KHN0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBsZW5ndGgpOworICAgIFRleHRCcmVha0l0
ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoc3RyaW5nKS5zdWJzdHJp
bmcoMCwgbGVuZ3RoKSk7CiAgICAgdW5zaWduZWQga2VlcExlbmd0aCA9IHRleHRCcmVha0F0T3JQ
cmVjZWRpbmcoaXQsIGtlZXBDb3VudCk7CiAgICAgbWVtY3B5KGJ1ZmZlciwgc3RyaW5nLmRlcHJl
Y2F0ZWRDaGFyYWN0ZXJzKCksIHNpemVvZihVQ2hhcikgKiBrZWVwTGVuZ3RoKTsKIApAQCAtMTYz
LDcgKzE2Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsZWZ0VHJ1bmNhdGVUb0J1ZmZlcihjb24KIAog
ICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBsZW5ndGggLSBrZWVwQ291bnQ7CiAKLSAgICBOb25T
aGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVy
cygpLCBsZW5ndGgpOworICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoc3Ry
aW5nKTsKICAgICB1bnNpZ25lZCBhZGp1c3RlZFN0YXJ0SW5kZXggPSBzdGFydEluZGV4OwogICAg
IHN0YXJ0SW5kZXggPSBib3VuZGVkVGV4dEJyZWFrRm9sbG93aW5nKGl0LCBzdGFydEluZGV4LCBs
ZW5ndGggLSBzdGFydEluZGV4KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDE2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNyArMjA5
LDcgQEAgaW50IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6b2Zmc2V0Rm9yUG9zaQogICAgICAgICAg
ICAgICAgIC8vIGxpZ2F0dXJlIGNhcmV0cy4KICAgICAgICAgICAgICAgICBDRkluZGV4IGhpdElu
ZGV4ID0gaGl0R2x5cGhTdGFydCArIChoaXRHbHlwaEVuZCAtIGhpdEdseXBoU3RhcnQpICogKG1f
cnVuLmx0cigpID8geCAvIGFkanVzdGVkQWR2YW5jZSA6IDEgLSB4IC8gYWRqdXN0ZWRBZHZhbmNl
KTsKICAgICAgICAgICAgICAgICBpbnQgc3RyaW5nTGVuZ3RoID0gY29tcGxleFRleHRSdW4uc3Ry
aW5nTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvclBv
c2l0aW9uSXRlcmF0b3IgPSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbXBsZXhUZXh0UnVuLmNo
YXJhY3RlcnMoKSwgc3RyaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBUZXh0QnJlYWtJdGVy
YXRvciogY3Vyc29yUG9zaXRpb25JdGVyYXRvciA9IGN1cnNvck1vdmVtZW50SXRlcmF0b3IoU3Ry
aW5nVmlldyhjb21wbGV4VGV4dFJ1bi5jaGFyYWN0ZXJzKCksIHN0cmluZ0xlbmd0aCkpOwogICAg
ICAgICAgICAgICAgIGludCBjbHVzdGVyU3RhcnQ7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGV4
dEJyZWFrKGN1cnNvclBvc2l0aW9uSXRlcmF0b3IsIGhpdEluZGV4KSkKICAgICAgICAgICAgICAg
ICAgICAgY2x1c3RlclN0YXJ0ID0gaGl0SW5kZXg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcAkocmV2aXNpb24gMTYyMTA5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDcgKzYxLDcgQEAgaW50IHN0YXJ0T2ZMYXN0V29yZEJvdW5kYXJ5Q29udGV4
dChjb25zdAogCiBpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KGNvbnN0IFVDaGFyKiBjaGFycywg
aW50IGxlbiwgaW50IHBvc2l0aW9uLCBib29sIGZvcndhcmQpCiB7Ci0gICAgVGV4dEJyZWFrSXRl
cmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7CisgICAgVGV4dEJyZWFr
SXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyhjaGFycywgbGVuKSk7
CiAKICAgICBpZiAoZm9yd2FyZCkgewogICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVha0ZvbGxv
d2luZyhpdCwgcG9zaXRpb24pOwpAQCAtOTAsNyArOTAsNyBAQCBpbnQgZmluZE5leHRXb3JkRnJv
bUluZGV4KGNvbnN0IFVDaGFyKiBjCiAKIHZvaWQgZmluZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hh
ciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpCiB7
Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxl
bik7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5n
VmlldyhjaGFycywgbGVuKSk7CiAgICAgKmVuZCA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwgcG9z
aXRpb24pOwogICAgIGlmICgqZW5kIDwgMCkKICAgICAgICAgKmVuZCA9IHRleHRCcmVha0xhc3Qo
aXQpOwpAQCAtOTksNyArOTksNyBAQCB2b2lkIGZpbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIq
IGNoYXJzCiAKIHZvaWQgZmluZEVuZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGlu
dCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBlbmQpCiB7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3Iq
IGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7CisgICAgVGV4dEJyZWFrSXRlcmF0
b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyhjaGFycywgbGVuKSk7CiAgICAg
KmVuZCA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOwogICAgIGlmICgqZW5kIDwg
MCkKICAgICAgICAgKmVuZCA9IHRleHRCcmVha0xhc3QoaXQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHAJKHJldmlzaW9u
IDE2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsMjUgKzEzOCwyNSBAQCBzdGF0aWMgVGV4dEJy
ZWFrSXRlcmF0b3IqIHNldENvbnRleHRBd2FyCiAKIC8vIFN0YXRpYyBpdGVyYXRvcnMKIAotVGV4
dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBidWZmZXIsIGlu
dCBsZW5ndGgpCitUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmll
dyBzdHJpbmcpCiB7CiAgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNXb3JkQnJl
YWtJdGVyYXRvciA9IGluaXRpYWxpemVJdGVyYXRvcihVQlJLX1dPUkQpOwogICAgIGlmICghc3Rh
dGljV29yZEJyZWFrSXRlcmF0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0
dXJuIHNldFRleHRGb3JJdGVyYXRvcigqc3RhdGljV29yZEJyZWFrSXRlcmF0b3IsIFN0cmluZ1Zp
ZXcoYnVmZmVyLCBsZW5ndGgpKTsKKyAgICByZXR1cm4gc2V0VGV4dEZvckl0ZXJhdG9yKCpzdGF0
aWNXb3JkQnJlYWtJdGVyYXRvciwgc3RyaW5nKTsKIH0KIAotVGV4dEJyZWFrSXRlcmF0b3IqIHNl
bnRlbmNlQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQorVGV4
dEJyZWFrSXRlcmF0b3IqIHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZykK
IHsKICAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY1NlbnRlbmNlQnJlYWtJdGVy
YXRvciA9IGluaXRpYWxpemVJdGVyYXRvcihVQlJLX1NFTlRFTkNFKTsKICAgICBpZiAoIXN0YXRp
Y1NlbnRlbmNlQnJlYWtJdGVyYXRvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBy
ZXR1cm4gc2V0VGV4dEZvckl0ZXJhdG9yKCpzdGF0aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3IsIFN0
cmluZ1ZpZXcoYnVmZmVyLCBsZW5ndGgpKTsKKyAgICByZXR1cm4gc2V0VGV4dEZvckl0ZXJhdG9y
KCpzdGF0aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3IsIHN0cmluZyk7CiB9CiAKLVRleHRCcmVha0l0
ZXJhdG9yKiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBidWZmZXIsIGludCBs
ZW5ndGgpCitUZXh0QnJlYWtJdGVyYXRvciogY3Vyc29yTW92ZW1lbnRJdGVyYXRvcihTdHJpbmdW
aWV3IHN0cmluZykKIHsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIC8vIFRoaXMgcnVsZSBzZXQg
aXMgYmFzZWQgb24gY2hhcmFjdGVyLWJyZWFrIGl0ZXJhdG9yIHJ1bGVzIG9mIElDVSA0LjAKQEAg
LTI1MCw3ICsyNTAsNyBAQCBUZXh0QnJlYWtJdGVyYXRvciogY3Vyc29yTW92ZW1lbnRJdGVyYXRv
CiAgICAgaWYgKCFzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIHJldHVybiBzZXRUZXh0Rm9ySXRlcmF0b3IoKnN0YXRpY0N1cnNvck1v
dmVtZW50SXRlcmF0b3IsIFN0cmluZ1ZpZXcoYnVmZmVyLCBsZW5ndGgpKTsKKyAgICByZXR1cm4g
c2V0VGV4dEZvckl0ZXJhdG9yKCpzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yLCBzdHJpbmcp
OwogfQogCiBUZXh0QnJlYWtJdGVyYXRvciogYWNxdWlyZUxpbmVCcmVha0l0ZXJhdG9yKFN0cmlu
Z1ZpZXcgc3RyaW5nLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSwgY29uc3QgVUNoYXIqIHBy
aW9yQ29udGV4dCwgdW5zaWduZWQgcHJpb3JDb250ZXh0TGVuZ3RoKQpAQCAtMjg1LDcgKzI4NSw3
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlQW5kU3dhcE5vblNoYXIKICNlbmRpZgogfQog
Ci1Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjpOb25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBidWZmZXIsIGludCBsZW5ndGgpCitOb25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yOjpOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKFN0cmlu
Z1ZpZXcgc3RyaW5nKQogewogICAgIG1faXRlcmF0b3IgPSBub25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yOwogCkBAIC0yOTUsNyArMjk1LDcgQEAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJ
dGVyYXRvcjo6Tm9uU2hhcgogICAgIGlmICghbV9pdGVyYXRvcikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9pdGVyYXRvciA9IHNldFRleHRGb3JJdGVyYXRvcigqbV9pdGVyYXRvciwgU3RyaW5n
VmlldyhidWZmZXIsIGxlbmd0aCkpOworICAgIG1faXRlcmF0b3IgPSBzZXRUZXh0Rm9ySXRlcmF0
b3IoKm1faXRlcmF0b3IsIHN0cmluZyk7CiB9CiAKIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3I6On5Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKCkKQEAgLTM2NCw3ICszNjQs
NyBAQCB1bnNpZ25lZCBudW1HcmFwaGVtZUNsdXN0ZXJzKGNvbnN0IFN0cmluCiAgICAgaWYgKHMu
aXM4Qml0KCkgJiYgIXMuY29udGFpbnMoJ1xyJykpCiAgICAgICAgIHJldHVybiBzdHJpbmdMZW5n
dGg7CiAKLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHMuZGVwcmVjYXRl
ZENoYXJhY3RlcnMoKSwgc3RyaW5nTGVuZ3RoKTsKKyAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yIGl0KHMpOwogICAgIGlmICghaXQpCiAgICAgICAgIHJldHVybiBzdHJpbmdMZW5n
dGg7CiAKQEAgLTM4NSw3ICszODUsNyBAQCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzSW5HcmFwaGVt
ZUNsdXN0ZXJzCiAgICAgaWYgKHMuaXM4Qml0KCkgJiYgIXMuY29udGFpbnMoJ1xyJykpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om1pbihzdHJpbmdMZW5ndGgsIG51bUdyYXBoZW1lQ2x1c3RlcnMpOwog
Ci0gICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChzLmRlcHJlY2F0ZWRDaGFy
YWN0ZXJzKCksIHN0cmluZ0xlbmd0aCk7CisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVy
YXRvciBpdChzKTsKICAgICBpZiAoIWl0KQogICAgICAgICByZXR1cm4gc3RkOjptaW4oc3RyaW5n
TGVuZ3RoLCBudW1HcmFwaGVtZUNsdXN0ZXJzKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAkocmV2aXNpb24gMTYyMTA5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTAgQEAgY2xhc3MgVGV4dEJyZWFrSXRlcmF0b3I7CiAv
LyBwbGF0Zm9ybSBVSSBjb252ZW50aW9ucy4gT25lIG5vdGFibGUgZXhhbXBsZSB3aGVyZSB0aGlz
IGNhbiBiZSBkaWZmZXJlbnQKIC8vIGZyb20gY2hhcmFjdGVyIGJyZWFrIGl0ZXJhdG9yIGlzIFRo
YWkgcHJlcGVuZCBjaGFyYWN0ZXJzLCBzZWUgYnVnIDI0MzQyLgogLy8gVXNlIHRoaXMgZm9yIGlu
c2VydGlvbiBwb2ludCBhbmQgc2VsZWN0aW9uIG1hbmlwdWxhdGlvbnMuCi1UZXh0QnJlYWtJdGVy
YXRvciogY3Vyc29yTW92ZW1lbnRJdGVyYXRvcihjb25zdCBVQ2hhciosIGludCBsZW5ndGgpOwor
VGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0b3IoU3RyaW5nVmlldyk7CiAK
LVRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciosIGludCBs
ZW5ndGgpOwotVGV4dEJyZWFrSXRlcmF0b3IqIHNlbnRlbmNlQnJlYWtJdGVyYXRvcihjb25zdCBV
Q2hhciosIGludCBsZW5ndGgpOworVGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9y
KFN0cmluZ1ZpZXcpOworVGV4dEJyZWFrSXRlcmF0b3IqIHNlbnRlbmNlQnJlYWtJdGVyYXRvcihT
dHJpbmdWaWV3KTsKIAogVGV4dEJyZWFrSXRlcmF0b3IqIGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRv
cihTdHJpbmdWaWV3LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSwgY29uc3QgVUNoYXIqIHBy
aW9yQ29udGV4dCwgdW5zaWduZWQgcHJpb3JDb250ZXh0TGVuZ3RoKTsKIHZvaWQgcmVsZWFzZUxp
bmVCcmVha0l0ZXJhdG9yKFRleHRCcmVha0l0ZXJhdG9yKik7CkBAIC0xNjksNyArMTY5LDcgQEAg
cHJpdmF0ZToKIGNsYXNzIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpOwogcHVi
bGljOgotICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqLCBp
bnQgbGVuZ3RoKTsKKyAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKFN0cmluZ1Zp
ZXcpOwogICAgIH5Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKCk7CiAKICAgICBvcGVy
YXRvciBUZXh0QnJlYWtJdGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxNjIx
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBzdGF0aWMgdm9pZCBtYWtlQ2FwaXRhbGl6ZWQoU3Ry
aW5nKiBzdHJpCiAgICAgICAgICAgICBzdHJpbmdXaXRoUHJldmlvdXNbaV0gPSBzdHJpbmdJbXBs
W2kgLSAxXTsKICAgICB9CiAKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogYm91bmRhcnkgPSB3b3Jk
QnJlYWtJdGVyYXRvcihzdHJpbmdXaXRoUHJldmlvdXMuY2hhcmFjdGVycygpLCBsZW5ndGggKyAx
KTsKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogYm91bmRhcnkgPSB3b3JkQnJlYWtJdGVyYXRvcihT
dHJpbmdWaWV3KHN0cmluZ1dpdGhQcmV2aW91cy5jaGFyYWN0ZXJzKCksIGxlbmd0aCArIDEpKTsK
ICAgICBpZiAoIWJvdW5kYXJ5KQogICAgICAgICByZXR1cm47CiAKQEAgLTEzNDAsNyArMTM0MCw3
IEBAIGludCBSZW5kZXJUZXh0OjpwcmV2aW91c09mZnNldChpbnQgY3VycmUKICAgICAgICAgcmV0
dXJuIGN1cnJlbnQgLSAxOwogCiAgICAgU3RyaW5nSW1wbCogdGV4dEltcGwgPSBtX3RleHQuaW1w
bCgpOwotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IGN1cnNvck1vdmVtZW50SXRl
cmF0b3IodGV4dEltcGwtPmNoYXJhY3RlcnMxNigpLCB0ZXh0SW1wbC0+bGVuZ3RoKCkpOworICAg
IFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IGN1cnNvck1vdmVtZW50SXRlcmF0b3IoU3Ry
aW5nVmlldyh0ZXh0SW1wbC0+Y2hhcmFjdGVyczE2KCksIHRleHRJbXBsLT5sZW5ndGgoKSkpOwog
ICAgIGlmICghaXRlcmF0b3IpCiAgICAgICAgIHJldHVybiBjdXJyZW50IC0gMTsKIApAQCAtMTQ5
Myw3ICsxNDkzLDcgQEAgaW50IFJlbmRlclRleHQ6Om5leHRPZmZzZXQoaW50IGN1cnJlbnQpIAog
ICAgICAgICByZXR1cm4gY3VycmVudCArIDE7CiAKICAgICBTdHJpbmdJbXBsKiB0ZXh0SW1wbCA9
IG1fdGV4dC5pbXBsKCk7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gY3Vyc29y
TW92ZW1lbnRJdGVyYXRvcih0ZXh0SW1wbC0+Y2hhcmFjdGVyczE2KCksIHRleHRJbXBsLT5sZW5n
dGgoKSk7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gY3Vyc29yTW92ZW1lbnRJ
dGVyYXRvcihTdHJpbmdWaWV3KHRleHRJbXBsLT5jaGFyYWN0ZXJzMTYoKSwgdGV4dEltcGwtPmxl
bmd0aCgpKSk7CiAgICAgaWYgKCFpdGVyYXRvcikKICAgICAgICAgcmV0dXJuIGN1cnJlbnQgKyAx
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjIxMTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0wMS0xNSAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFRleHRCcmVha0l0ZXJhdG9yJ3Mg
c2hvdWxkIHN1cHBvcnQgTGF0aW4tMSBmb3IgYWxsIGl0ZXJhdG9yIHR5cGVzIChQYXJ0IDMpCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY4NTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgYWxs
IHRoZSBUZXh0QnJlYWtJdGVyYXRvciBjcmVhdGlvbiBmdW5jdGlvbnMgdG8gdGFrZSBTdHJpbmdW
aWV3cy4gUmVtb3ZlIGEgZmV3CisgICAgICAgIG5vdyB1bm5lY2Vzc2FyeSB1cC1jb252ZXJzaW9u
IHRvIFVURi0xNiBpbiB0aGUgcHJvY2Vzcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvVGV4
dENoZWNrZXJFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpuZXh0V29yZE9mZnNldCk6CisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisKIDIwMTQt
MDEtMTUgIEV1bm1pIExlZSAgPGV1bm1pMTUubGVlQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtF
RkxdW1dLMl0gVXNlIHRpbWVzdGFtcCB3aGVuIGV2ZW50IG9jY3VycyBmb3IgdG91Y2ggZXZlbnRz
LgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVm
bC5jcHAJKHJldmlzaW9uIDE2MjEwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
VGV4dENoZWNrZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgc3Rh
dGljIGludCBuZXh0V29yZE9mZnNldChjb25zdCBVQ2hhciogdAogICAgIC8vICAgICAgICBvciBh
ZnRlciAib2Zmc2V0IiAodWJya19pc0JvdW5kYXJ5IHNpZGUgZWZmZWN0KS4KICAgICAvLyAgICAg
ICAgRm9yIG1hbnkgd29yZCBzZXBhcmF0b3JzLCB0aGUgbWV0aG9kIGRvZXNuJ3QgcHJvcGVybHkg
ZGV0ZXJtaW5lIHRoZSBib3VuZGFyaWVzCiAgICAgLy8gICAgICAgIHdpdGhvdXQgcmVzZXR0aW5n
IHRoZSBpdGVyYXRvci4KLSAgICBUZXh0QnJlYWtJdGVyYXRvciogdGV4dEl0ZXJhdG9yID0gd29y
ZEJyZWFrSXRlcmF0b3IodGV4dCwgbGVuZ3RoKTsKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogdGV4
dEl0ZXJhdG9yID0gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyh0ZXh0LCBsZW5ndGgpKTsK
ICAgICBpZiAoIXRleHRJdGVyYXRvcikKICAgICAgICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQ7CiAK
QEAgLTE1Myw3ICsxNTMsNyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tl
cjo6CiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcGFyYWdyYXBoQ2hlY2tpbmdSZXN1
bHQ7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAgICAgaWYgKGNoZWNraW5nVHlwZXMgJiBUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmcpIHsKLSAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIHRleHRJ
dGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0aCk7CisgICAgICAgIFRleHRC
cmVha0l0ZXJhdG9yKiB0ZXh0SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3
KHRleHQsIGxlbmd0aCkpOwogICAgICAgICBpZiAoIXRleHRJdGVyYXRvcikKICAgICAgICAgICAg
IHJldHVybiBwYXJhZ3JhcGhDaGVja2luZ1Jlc3VsdDsKIApJbmRleDogU291cmNlL1dlYktpdC9p
b3MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwko
cmV2aXNpb24gMTYyMTEyKQorKysgU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTQtMDEtMTUgIFNhbSBXZWluaWcgIDxzYW1Ad2Vi
a2l0Lm9yZz4KKworICAgICAgICBUZXh0QnJlYWtJdGVyYXRvcidzIHNob3VsZCBzdXBwb3J0IExh
dGluLTEgZm9yIGFsbCBpdGVyYXRvciB0eXBlcyAoUGFydCAzKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2ODU2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIGFsbCB0aGUgVGV4dEJyZWFrSXRl
cmF0b3IgY3JlYXRpb24gZnVuY3Rpb25zIHRvIHRha2UgU3RyaW5nVmlld3MuIFJlbW92ZSBhIGZl
dworICAgICAgICBub3cgdW5uZWNlc3NhcnkgdXAtY29udmVyc2lvbiB0byBVVEYtMTYgaW4gdGhl
IHByb2Nlc3MuCisKKyAgICAgICAgKiBNaXNjL1dlYk5TU3RyaW5nRHJhd2luZy5tbToKKwogMjAx
NC0wMS0xNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBdm9pZCBQTEFURk9STSgpIG1hY3JvcyBpbiBleHBvcnRlZCBoZWFkZXJzLgpJbmRleDogU291
cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJOU1N0cmluZ0RyYXdpbmcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJOU1N0cmluZ0RyYXdpbmcubW0JKHJldmlzaW9uIDE2
MjEwOSkKKysrIFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2ViTlNTdHJpbmdEcmF3aW5nLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC00NTYsNyArNDU2LDcgQEAgLSAoQ0dTaXplKV9fd2ViX2RyYXdJblJl
Y3Q6KENHUmVjdClyZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxsaXBzaXNTdHls
ZSA9PSBXZWJFbGxpcHNpc1N0eWxlQ2hhcmFjdGVyV3JhcCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGNhbiBicmVhayBvbiBjaGFyYWN0ZXJzLiBXZSBzaG91bGQgZG8gc29t
ZXRoaW5nIHNtYXJ0ZXIsIGxpa2Ugc3BsaXQgdGhlIGxlbmd0aCBvZiB0aGUgZW50aXJlIGxpbmUg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QsIGhvd2V2ZXIsIGJyZWFrIGlu
IHRoZSBtaWRkbGUgb2YgYSBjaGFyYWN0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChwb3MsIGxlbmd0aFJlbWFpbmluZyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVy
YXRvciBpdChTdHJpbmdWaWV3KHBvcywgbGVuZ3RoUmVtYWluaW5nKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWtQb3MgPSBib3VuZGVkVGV4dEJyZWFrRm9sbG93aW5nKGl0LCAw
LCBsZW5ndGhSZW1haW5pbmcpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MzcsNyAr
NTM3LDcgQEAgLSAoQ0dTaXplKV9fd2ViX2RyYXdJblJlY3Q6KENHUmVjdClyZWN0CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIGxvbmcgd29yZCB0aGF0IGRvZXNuJ3QgZml0
IGluc2lkZSB0aGUgZW50aXJlIHdpZHRoCiAgICAgICAgICAgICAgICAgICAgIC8vIEZpdCBpdCBv
biBhIGxpbmUgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUgYW5kIGJyZWFrIHdoZW4gbm8gbW9yZSBj
aGFyYWN0ZXJzIGZpdAogICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSBhdCBsZWFzdCBvbmUg
Y2hhcmFjdGVyIHRvIGF2b2lkIHRoZSBlZGdlIGNhc2Ugd2hlcmUgYSBzaW5nbGUgZ2x5cGggZG9l
c24ndCBmaXQgd2l0aGluIHdpZHRoCi0gICAgICAgICAgICAgICAgICAgIE5vblNoYXJlZENoYXJh
Y3RlckJyZWFrSXRlcmF0b3IgaXQocG9zLCBsZW5ndGhSZW1haW5pbmcpOworICAgICAgICAgICAg
ICAgICAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KFN0cmluZ1ZpZXcocG9z
LCBsZW5ndGhSZW1haW5pbmcpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IDA7
CiAgICAgICAgICAgICAgICAgICAgIGludCBuZXh0Q2hhckJyZWFrID0gYm91bmRlZFRleHRCcmVh
a0ZvbGxvd2luZyhpdCwgb2Zmc2V0LCBsZW5ndGhSZW1haW5pbmcpOwogICAgICAgICAgICAgICAg
ICAgICBUZXh0UnVuIHRleHRSdW4ocG9zLCBuZXh0Q2hhckJyZWFrKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221438</attachid>
            <date>2014-01-16 21:30:02 -0800</date>
            <delta_ts>2014-01-16 22:15:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126856-20140116213002.patch</filename>
            <type>text/plain</type>
            <size>24201</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjE4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTAxLTE1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IncyBzaG91
bGQgc3VwcG9ydCBMYXRpbi0xIGZvciBhbGwgaXRlcmF0b3IgdHlwZXMgKFBhcnQgMykKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjg1NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZSBhbGwgdGhl
IFRleHRCcmVha0l0ZXJhdG9yIGNyZWF0aW9uIGZ1bmN0aW9ucyB0byB0YWtlIFN0cmluZ1ZpZXdz
LiBSZW1vdmUgYSBmZXcKKyAgICAgICAgbm93IHVubmVjZXNzYXJ5IHVwLWNvbnZlcnNpb24gdG8g
VVRGLTE2IGluIHRoZSBwcm9jZXNzLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3Bw
OgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFy
aWVzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorCiAyMDE0LTAxLTE2ICBBbmRlcnMgQ2FybHNzb24g
IDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUnVuIGNsYW5nLW1vZGVybml6ZSBhbmQg
bGV0IGl0IGFkZCBhIGJ1bmNoIG9mIG1pc3Npbmcgb3ZlcnJpZGVzLgpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkocmV2aXNpb24gMTYyMTgyKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBA
IHVuc2lnbmVkIENoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEKICAgICAvLyBzZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA5Mj4uCiAgICAgLy8gV2Ug
bmVlZCBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBsb29rLWFoZWFkIHRvIGFjY291bnQgZm9yIFVU
Ri0xNiBzdXJyb2dhdGVzLgogICAgIGlmIChjaGFyYWN0ZXJMZW5ndGhMaW1pdCA8IGNoYXJhY3Rl
ckxlbmd0aCkgewotICAgICAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0
cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpICsgb2Zmc2V0LCAoY2hhcmFjdGVyTGVuZ3RoTGlt
aXQgKyAyID4gY2hhcmFjdGVyTGVuZ3RoKSA/IGNoYXJhY3Rlckxlbmd0aCA6IGNoYXJhY3Rlckxl
bmd0aExpbWl0ICsgMik7CisgICAgICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3Ig
aXQoU3RyaW5nVmlldyhzdHJpbmcpLnN1YnN0cmluZyhvZmZzZXQsIChjaGFyYWN0ZXJMZW5ndGhM
aW1pdCArIDIgPiBjaGFyYWN0ZXJMZW5ndGgpID8gY2hhcmFjdGVyTGVuZ3RoIDogY2hhcmFjdGVy
TGVuZ3RoTGltaXQgKyAyKSk7CiAgICAgICAgIGlmICghaXNUZXh0QnJlYWsoaXQsIGNoYXJhY3Rl
ckxlbmd0aExpbWl0KSkKICAgICAgICAgICAgIGNoYXJhY3Rlckxlbmd0aExpbWl0ID0gdGV4dEJy
ZWFrUHJlY2VkaW5nKGl0LCBjaGFyYWN0ZXJMZW5ndGhMaW1pdCk7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAkocmV2aXNpb24g
MTYyMTgyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw5ICs3MCw5IEBAIHN0YXRpYyB2b2lkIGZpbmRCYWRHcmFt
bWFycyhUZXh0Q2hlY2tlckMKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBmaW5kTWlzc3BlbGxp
bmdzKFRleHRDaGVja2VyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgc3Rh
cnQsIGludCBsZW5ndGgsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQorc3Rh
dGljIHZvaWQgZmluZE1pc3NwZWxsaW5ncyhUZXh0Q2hlY2tlckNsaWVudCogY2xpZW50LCBjb25z
dCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJl
c3VsdHMpCiB7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gd29yZEJyZWFrSXRl
cmF0b3IodGV4dCArIHN0YXJ0LCBsZW5ndGgpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVy
YXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcodGV4dCwgbGVuZ3RoKSk7CiAgICAg
aWYgKCFpdGVyYXRvcikKICAgICAgICAgcmV0dXJuOwogICAgIGludCB3b3JkU3RhcnQgPSB0ZXh0
QnJlYWtDdXJyZW50KGl0ZXJhdG9yKTsKQEAgLTgzLDEzICs4MywxMyBAQCBzdGF0aWMgdm9pZCBm
aW5kTWlzc3BlbGxpbmdzKFRleHRDaGVja2VyCiAgICAgICAgIGludCB3b3JkTGVuZ3RoID0gd29y
ZEVuZCAtIHdvcmRTdGFydDsKICAgICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsK
ICAgICAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICAgICAgY2xpZW50LT5jaGVj
a1NwZWxsaW5nT2ZTdHJpbmcodGV4dCArIHN0YXJ0ICsgd29yZFN0YXJ0LCB3b3JkTGVuZ3RoLCAm
bWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgY2xpZW50
LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodGV4dCArIHdvcmRTdGFydCwgd29yZExlbmd0aCwgJm1p
c3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7CiAgICAgICAgIGlmICgwIDwg
bWlzc3BlbGxpbmdMZW5ndGgpIHsKICAgICAgICAgICAgIEFTU0VSVCgwIDw9IG1pc3NwZWxsaW5n
TG9jYXRpb24gJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8PSB3b3JkTGVuZ3RoKTsKICAgICAgICAg
ICAgIEFTU0VSVCgwIDwgbWlzc3BlbGxpbmdMZW5ndGggJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiAr
IG1pc3NwZWxsaW5nTGVuZ3RoIDw9IHdvcmRMZW5ndGgpOwogICAgICAgICAgICAgVGV4dENoZWNr
aW5nUmVzdWx0IG1pc3NwZWxsaW5nOwogICAgICAgICAgICAgbWlzc3BlbGxpbmcudHlwZSA9IFRl
eHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgIG1pc3NwZWxsaW5nLmxvY2F0aW9u
ID0gc3RhcnQgKyB3b3JkU3RhcnQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uOworICAgICAgICAgICAg
bWlzc3BlbGxpbmcubG9jYXRpb24gPSB3b3JkU3RhcnQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uOwog
ICAgICAgICAgICAgbWlzc3BlbGxpbmcubGVuZ3RoID0gbWlzc3BlbGxpbmdMZW5ndGg7CiAgICAg
ICAgICAgICBtaXNzcGVsbGluZy5yZXBsYWNlbWVudCA9IGNsaWVudC0+Z2V0QXV0b0NvcnJlY3RT
dWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoU3RyaW5nKHRleHQgKyBtaXNzcGVsbGluZy5sb2Nh
dGlvbiwgbWlzc3BlbGxpbmcubGVuZ3RoKSk7CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCht
aXNzcGVsbGluZyk7CkBAIC02NDgsNyArNjQ4LDcgQEAgdm9pZCBjaGVja1RleHRPZlBhcmFncmFw
aChUZXh0Q2hlY2tlckNsaQogI2Vsc2UKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBz
cGVsbGluZ1Jlc3VsdDsKICAgICBpZiAoY2hlY2tpbmdUeXBlcyAmIFRleHRDaGVja2luZ1R5cGVT
cGVsbGluZykKLSAgICAgICAgZmluZE1pc3NwZWxsaW5ncyhjbGllbnQsIHRleHQsIDAsIGxlbmd0
aCwgc3BlbGxpbmdSZXN1bHQpOworICAgICAgICBmaW5kTWlzc3BlbGxpbmdzKGNsaWVudCwgdGV4
dCwgbGVuZ3RoLCBzcGVsbGluZ1Jlc3VsdCk7CiAKICNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykK
ICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBncmFtbWFyUmVzdWx0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAkocmV2aXNpb24gMTYyMTgyKQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDEsOCArMzAxLDggQEAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVy
YQogICAgIHN0cmluZy5hcHBlbmQodGV4dEJveC0+cmVuZGVyZXIoKS50ZXh0KCktPmRlcHJlY2F0
ZWRDaGFyYWN0ZXJzKCkgKyB0ZXh0Qm94LT5zdGFydCgpLCB0ZXh0Qm94LT5sZW4oKSk7CiAgICAg
bGVuICs9IHRleHRCb3gtPmxlbigpOwogCi0gICAgcmV0dXJuIHdvcmRCcmVha0l0ZXJhdG9yKHN0
cmluZy5kYXRhKCksIGxlbik7Ci19IAorICAgIHJldHVybiB3b3JkQnJlYWtJdGVyYXRvcihTdHJp
bmdWaWV3KHN0cmluZy5kYXRhKCksIGxlbikpOworfQogCiBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0
b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gsCiAg
ICAgYm9vbCYgbmV4dEJveEluRGlmZmVyZW50QmxvY2ssIFZlY3RvcjxVQ2hhciwgMTAyND4mIHN0
cmluZywgQ2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlcyYgbGVhZkJveGVzKQpAQCAtMzIy
LDggKzMyMiw4IEBAIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmEKICAg
ICAgICAgbGVuICs9IG5leHRUZXh0Qm94LT5sZW4oKTsKICAgICB9CiAKLSAgICByZXR1cm4gd29y
ZEJyZWFrSXRlcmF0b3Ioc3RyaW5nLmRhdGEoKSwgbGVuKTsKLX0gCisgICAgcmV0dXJuIHdvcmRC
cmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoc3RyaW5nLmRhdGEoKSwgbGVuKSk7Cit9CiAKIHN0YXRp
YyBib29sIGlzTG9naWNhbFN0YXJ0T2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQg
cG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKIHsKQEAgLTM4NSw3ICszODUsNyBAQCBzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3VhbFdvcmRQb3NpdGlvCiAgICAgICAgIGVsc2UgaWYgKG9m
ZnNldEluQm94ID09IGJveC0+Y2FyZXRNYXhPZmZzZXQoKSkKICAgICAgICAgICAgIGl0ZXIgPSB3
b3JkQnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5KHZpc2libGVQb3NpdGlvbiwgdGV4
dEJveCwgbmV4dEJveEluRGlmZmVyZW50QmxvY2ssIHN0cmluZywgbGVhZkJveGVzKTsKICAgICAg
ICAgZWxzZSBpZiAobW92aW5nSW50b05ld0JveCkgewotICAgICAgICAgICAgaXRlciA9IHdvcmRC
cmVha0l0ZXJhdG9yKHRleHRCb3gtPnJlbmRlcmVyKCkudGV4dCgpLT5kZXByZWNhdGVkQ2hhcmFj
dGVycygpICsgdGV4dEJveC0+c3RhcnQoKSwgdGV4dEJveC0+bGVuKCkpOworICAgICAgICAgICAg
aXRlciA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcodGV4dEJveC0+cmVuZGVyZXIoKS50
ZXh0KCkpLnN1YnN0cmluZyh0ZXh0Qm94LT5zdGFydCgpLCB0ZXh0Qm94LT5sZW4oKSkpOwogICAg
ICAgICAgICAgcHJldmlvdXNseVZpc2l0ZWRCb3ggPSBib3g7CiAgICAgICAgIH0KIApAQCAtMTA0
Niw3ICsxMDQ2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVgog
CiBzdGF0aWMgdW5zaWduZWQgc3RhcnRTZW50ZW5jZUJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkLCBCb3VuZGFyeVNlYXJjaENvbnRleHRB
dmFpbGFiaWxpdHksIGJvb2wmKQogewotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9
IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFRleHRCcmVh
a0l0ZXJhdG9yKiBpdGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KGNo
YXJhY3RlcnMsIGxlbmd0aCkpOwogICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9u
IGNhbiByZXR1cm4gLTE7IHdlIGRvbid0IGhhbmRsZSB0aGF0LgogICAgIHJldHVybiB0ZXh0QnJl
YWtQcmVjZWRpbmcoaXRlcmF0b3IsIGxlbmd0aCk7CiB9CkBAIC0xMDU4LDcgKzEwNTgsNyBAQCBW
aXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbnRlbmNlKGNvbnN0IFZpCiAKIHN0YXRpYyB1bnNpZ25l
ZCBlbmRTZW50ZW5jZUJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkLCBCb3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFiaWxpdHksIGJvb2wm
KQogewotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJdGVy
YXRvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRv
ciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGxlbmd0aCkp
OwogICAgIHJldHVybiB0ZXh0QnJlYWtOZXh0KGl0ZXJhdG9yKTsKIH0KIApAQCAtMTA3MSw3ICsx
MDcxLDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mU2VudGVuY2UoY29uc3QgVmlzaQogc3RhdGlj
IHVuc2lnbmVkIHByZXZpb3VzU2VudGVuY2VQb3NpdGlvbkJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkLCBCb3VuZGFyeVNlYXJjaENvbnRl
eHRBdmFpbGFiaWxpdHksIGJvb2wmKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGlkZW50aWNh
bCB0byBzdGFydFNlbnRlbmNlQm91bmRhcnkuIEknbSBwcmV0dHkgc3VyZSB0aGF0J3Mgbm90IHJp
Z2h0LgotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJdGVy
YXRvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRv
ciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGxlbmd0aCkp
OwogICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNhbiByZXR1cm4gLTE7IHdl
IGRvbid0IGhhbmRsZSB0aGF0LgogICAgIHJldHVybiB0ZXh0QnJlYWtQcmVjZWRpbmcoaXRlcmF0
b3IsIGxlbmd0aCk7CiB9CkBAIC0xMDg2LDcgKzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbmV4
dFNlbnRlbmNlUG9zaXRpb25Cb3VuCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaWRlbnRpY2Fs
IHRvIGVuZFNlbnRlbmNlQm91bmRhcnkuIFRoaXMgaXNuJ3QgcmlnaHQsIGl0IG5lZWRzIHRvIAog
ICAgIC8vIG1vdmUgdG8gdGhlIGVxdWl2bGFudCBwb3NpdGlvbiBpbiB0aGUgZm9sbG93aW5nIHNl
bnRlbmNlLgotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHNlbnRlbmNlQnJlYWtJ
dGVyYXRvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVy
YXRvciA9IHNlbnRlbmNlQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGxlbmd0
aCkpOwogICAgIHJldHVybiB0ZXh0QnJlYWtGb2xsb3dpbmcoaXRlcmF0b3IsIDApOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1Ry
dW5jYXRvci5jcHAJKHJldmlzaW9uIDE2MjE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYz
LDcgQEAgc3RhdGljIHVuc2lnbmVkIGNlbnRlclRydW5jYXRlVG9CdWZmZXIoYwogICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGtlZXBDb3VudCA8IFNUUklOR19CVUZGRVJfU0la
RSk7CiAgICAgCiAgICAgdW5zaWduZWQgb21pdFN0YXJ0ID0gKGtlZXBDb3VudCArIDEpIC8gMjsK
LSAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmluZy5kZXByZWNhdGVk
Q2hhcmFjdGVycygpLCBsZW5ndGgpOworICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0
b3IgaXQoU3RyaW5nVmlldyhzdHJpbmcpLnN1YnN0cmluZygwLCBsZW5ndGgpKTsKICAgICB1bnNp
Z25lZCBvbWl0RW5kID0gYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhpdCwgb21pdFN0YXJ0ICsg
KGxlbmd0aCAtIGtlZXBDb3VudCkgLSAxLCBsZW5ndGgpOwogICAgIG9taXRTdGFydCA9IHRleHRC
cmVha0F0T3JQcmVjZWRpbmcoaXQsIG9taXRTdGFydCk7CiAKQEAgLTExNSw3ICsxMTUsNyBAQCBz
dGF0aWMgdW5zaWduZWQgcmlnaHRUcnVuY2F0ZVRvQnVmZmVyKGNvCiAgICAgICAgIC0ta2VlcENv
dW50OwogI2VuZGlmCiAKLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0
cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBsZW5ndGgpOworICAgIE5vblNoYXJlZENoYXJh
Y3RlckJyZWFrSXRlcmF0b3IgaXQoU3RyaW5nVmlldyhzdHJpbmcpLnN1YnN0cmluZygwLCBsZW5n
dGgpKTsKICAgICB1bnNpZ25lZCBrZWVwTGVuZ3RoID0gdGV4dEJyZWFrQXRPclByZWNlZGluZyhp
dCwga2VlcENvdW50KTsKICAgICB1bnNpZ25lZCB0cnVuY2F0ZWRMZW5ndGggPSBzaG91bGRJbnNl
cnRFbGxpcHNpcyA/IGtlZXBMZW5ndGggKyAxIDoga2VlcExlbmd0aDsKIApAQCAtMTMxLDcgKzEz
MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCByaWdodENsaXBUb0NoYXJhY3RlckJ1ZmYKICAgICBBU1NF
UlQoa2VlcENvdW50IDwgbGVuZ3RoKTsKICAgICBBU1NFUlQoa2VlcENvdW50IDwgU1RSSU5HX0JV
RkZFUl9TSVpFKTsKIAotICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQoc3Ry
aW5nLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIGxlbmd0aCk7CisgICAgTm9uU2hhcmVkQ2hhcmFj
dGVyQnJlYWtJdGVyYXRvciBpdChTdHJpbmdWaWV3KHN0cmluZykuc3Vic3RyaW5nKDAsIGxlbmd0
aCkpOwogICAgIHVuc2lnbmVkIGtlZXBMZW5ndGggPSB0ZXh0QnJlYWtBdE9yUHJlY2VkaW5nKGl0
LCBrZWVwQ291bnQpOwogICAgIG1lbWNweShidWZmZXIsIHN0cmluZy5kZXByZWNhdGVkQ2hhcmFj
dGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0aCk7CiAKQEAgLTE0Myw3ICsxNDMsNyBA
QCBzdGF0aWMgdW5zaWduZWQgcmlnaHRDbGlwVG9Xb3JkQnVmZmVyKGNvCiAgICAgQVNTRVJUKGtl
ZXBDb3VudCA8IGxlbmd0aCk7CiAgICAgQVNTRVJUKGtlZXBDb3VudCA8IFNUUklOR19CVUZGRVJf
U0laRSk7CiAKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihz
dHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICBUZXh0QnJlYWtJdGVy
YXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KHN0cmluZykuc3Vic3RyaW5n
KDAsIGxlbmd0aCkpOwogICAgIHVuc2lnbmVkIGtlZXBMZW5ndGggPSB0ZXh0QnJlYWtBdE9yUHJl
Y2VkaW5nKGl0LCBrZWVwQ291bnQpOwogICAgIG1lbWNweShidWZmZXIsIHN0cmluZy5kZXByZWNh
dGVkQ2hhcmFjdGVycygpLCBzaXplb2YoVUNoYXIpICoga2VlcExlbmd0aCk7CiAKQEAgLTE2Myw3
ICsxNjMsNyBAQCBzdGF0aWMgdW5zaWduZWQgbGVmdFRydW5jYXRlVG9CdWZmZXIoY29uCiAKICAg
ICB1bnNpZ25lZCBzdGFydEluZGV4ID0gbGVuZ3RoIC0ga2VlcENvdW50OwogCi0gICAgTm9uU2hh
cmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChzdHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnMo
KSwgbGVuZ3RoKTsKKyAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHN0cmlu
Zyk7CiAgICAgdW5zaWduZWQgYWRqdXN0ZWRTdGFydEluZGV4ID0gc3RhcnRJbmRleDsKICAgICBz
dGFydEluZGV4ID0gYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhpdCwgc3RhcnRJbmRleCwgbGVu
Z3RoIC0gc3RhcnRJbmRleCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxNjIxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3
IEBAIGludCBDb21wbGV4VGV4dENvbnRyb2xsZXI6Om9mZnNldEZvclBvc2kKICAgICAgICAgICAg
ICAgICAvLyBsaWdhdHVyZSBjYXJldHMuCiAgICAgICAgICAgICAgICAgQ0ZJbmRleCBoaXRJbmRl
eCA9IGhpdEdseXBoU3RhcnQgKyAoaGl0R2x5cGhFbmQgLSBoaXRHbHlwaFN0YXJ0KSAqIChtX3J1
bi5sdHIoKSA/IHggLyBhZGp1c3RlZEFkdmFuY2UgOiAxIC0geCAvIGFkanVzdGVkQWR2YW5jZSk7
CiAgICAgICAgICAgICAgICAgaW50IHN0cmluZ0xlbmd0aCA9IGNvbXBsZXhUZXh0UnVuLnN0cmlu
Z0xlbmd0aCgpOwotICAgICAgICAgICAgICAgIFRleHRCcmVha0l0ZXJhdG9yKiBjdXJzb3JQb3Np
dGlvbkl0ZXJhdG9yID0gY3Vyc29yTW92ZW1lbnRJdGVyYXRvcihjb21wbGV4VGV4dFJ1bi5jaGFy
YWN0ZXJzKCksIHN0cmluZ0xlbmd0aCk7CisgICAgICAgICAgICAgICAgVGV4dEJyZWFrSXRlcmF0
b3IqIGN1cnNvclBvc2l0aW9uSXRlcmF0b3IgPSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKFN0cmlu
Z1ZpZXcoY29tcGxleFRleHRSdW4uY2hhcmFjdGVycygpLCBzdHJpbmdMZW5ndGgpKTsKICAgICAg
ICAgICAgICAgICBpbnQgY2x1c3RlclN0YXJ0OwogICAgICAgICAgICAgICAgIGlmIChpc1RleHRC
cmVhayhjdXJzb3JQb3NpdGlvbkl0ZXJhdG9yLCBoaXRJbmRleCkpCiAgICAgICAgICAgICAgICAg
ICAgIGNsdXN0ZXJTdGFydCA9IGhpdEluZGV4OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAJKHJldmlzaW9uIDE2MjE4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw3ICs2MSw3IEBAIGludCBzdGFydE9mTGFzdFdvcmRCb3VuZGFyeUNvbnRleHQo
Y29uc3QKIAogaW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25zdCBVQ2hhciogY2hhcnMsIGlu
dCBsZW4sIGludCBwb3NpdGlvbiwgYm9vbCBmb3J3YXJkKQogewotICAgIFRleHRCcmVha0l0ZXJh
dG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4pOworICAgIFRleHRCcmVha0l0
ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoY2hhcnMsIGxlbikpOwog
CiAgICAgaWYgKGZvcndhcmQpIHsKICAgICAgICAgcG9zaXRpb24gPSB0ZXh0QnJlYWtGb2xsb3dp
bmcoaXQsIHBvc2l0aW9uKTsKQEAgLTkwLDcgKzkwLDcgQEAgaW50IGZpbmROZXh0V29yZEZyb21J
bmRleChjb25zdCBVQ2hhciogYwogCiB2b2lkIGZpbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIq
IGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKQogewot
ICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4p
OworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1Zp
ZXcoY2hhcnMsIGxlbikpOwogICAgICplbmQgPSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHBvc2l0
aW9uKTsKICAgICBpZiAoKmVuZCA8IDApCiAgICAgICAgICplbmQgPSB0ZXh0QnJlYWtMYXN0KGl0
KTsKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBj
aGFycwogCiB2b2lkIGZpbmRFbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQg
bGVuLCBpbnQgcG9zaXRpb24sIGludCogZW5kKQogewotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBp
dCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4pOworICAgIFRleHRCcmVha0l0ZXJhdG9y
KiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoY2hhcnMsIGxlbikpOwogICAgICpl
bmQgPSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKICAgICBpZiAoKmVuZCA8IDAp
CiAgICAgICAgICplbmQgPSB0ZXh0QnJlYWtMYXN0KGl0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAx
NjIxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDI1ICsxMzgsMjUgQEAgc3RhdGljIFRleHRCcmVh
a0l0ZXJhdG9yKiBzZXRDb250ZXh0QXdhcgogCiAvLyBTdGF0aWMgaXRlcmF0b3JzCiAKLVRleHRC
cmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQg
bGVuZ3RoKQorVGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcg
c3RyaW5nKQogewogICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljV29yZEJyZWFr
SXRlcmF0b3IgPSBpbml0aWFsaXplSXRlcmF0b3IoVUJSS19XT1JEKTsKICAgICBpZiAoIXN0YXRp
Y1dvcmRCcmVha0l0ZXJhdG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBzZXRUZXh0Rm9ySXRlcmF0b3IoKnN0YXRpY1dvcmRCcmVha0l0ZXJhdG9yLCBTdHJpbmdWaWV3
KGJ1ZmZlciwgbGVuZ3RoKSk7CisgICAgcmV0dXJuIHNldFRleHRGb3JJdGVyYXRvcigqc3RhdGlj
V29yZEJyZWFrSXRlcmF0b3IsIHN0cmluZyk7CiB9CiAKLVRleHRCcmVha0l0ZXJhdG9yKiBzZW50
ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKK1RleHRC
cmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcpCiB7
CiAgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNTZW50ZW5jZUJyZWFrSXRlcmF0
b3IgPSBpbml0aWFsaXplSXRlcmF0b3IoVUJSS19TRU5URU5DRSk7CiAgICAgaWYgKCFzdGF0aWNT
ZW50ZW5jZUJyZWFrSXRlcmF0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0
dXJuIHNldFRleHRGb3JJdGVyYXRvcigqc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yLCBTdHJp
bmdWaWV3KGJ1ZmZlciwgbGVuZ3RoKSk7CisgICAgcmV0dXJuIHNldFRleHRGb3JJdGVyYXRvcigq
c3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yLCBzdHJpbmcpOwogfQogCi1UZXh0QnJlYWtJdGVy
YXRvciogY3Vyc29yTW92ZW1lbnRJdGVyYXRvcihjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVu
Z3RoKQorVGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0b3IoU3RyaW5nVmll
dyBzdHJpbmcpCiB7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBUaGlzIHJ1bGUgc2V0IGlz
IGJhc2VkIG9uIGNoYXJhY3Rlci1icmVhayBpdGVyYXRvciBydWxlcyBvZiBJQ1UgNC4wCkBAIC0y
NTAsNyArMjUwLDcgQEAgVGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0bwog
ICAgIGlmICghc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICByZXR1cm4gc2V0VGV4dEZvckl0ZXJhdG9yKCpzdGF0aWNDdXJzb3JNb3Zl
bWVudEl0ZXJhdG9yLCBTdHJpbmdWaWV3KGJ1ZmZlciwgbGVuZ3RoKSk7CisgICAgcmV0dXJuIHNl
dFRleHRGb3JJdGVyYXRvcigqc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvciwgc3RyaW5nKTsK
IH0KIAogVGV4dEJyZWFrSXRlcmF0b3IqIGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvcihTdHJpbmdW
aWV3IHN0cmluZywgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBwcmlv
ckNvbnRleHQsIHVuc2lnbmVkIHByaW9yQ29udGV4dExlbmd0aCkKQEAgLTI4NSw3ICsyODUsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUFuZFN3YXBOb25TaGFyCiAjZW5kaWYKIH0KIAot
Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJ
dGVyYXRvcihjb25zdCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQorTm9uU2hhcmVkQ2hhcmFj
dGVyQnJlYWtJdGVyYXRvcjo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihTdHJpbmdW
aWV3IHN0cmluZykKIHsKICAgICBtX2l0ZXJhdG9yID0gbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJ
dGVyYXRvcjsKIApAQCAtMjk1LDcgKzI5NSw3IEBAIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3I6Ok5vblNoYXIKICAgICBpZiAoIW1faXRlcmF0b3IpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1faXRlcmF0b3IgPSBzZXRUZXh0Rm9ySXRlcmF0b3IoKm1faXRlcmF0b3IsIFN0cmluZ1Zp
ZXcoYnVmZmVyLCBsZW5ndGgpKTsKKyAgICBtX2l0ZXJhdG9yID0gc2V0VGV4dEZvckl0ZXJhdG9y
KCptX2l0ZXJhdG9yLCBzdHJpbmcpOwogfQogCiBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yOjp+Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpCkBAIC0zNjQsNyArMzY0LDcg
QEAgdW5zaWduZWQgbnVtR3JhcGhlbWVDbHVzdGVycyhjb25zdCBTdHJpbgogICAgIGlmIChzLmlz
OEJpdCgpICYmICFzLmNvbnRhaW5zKCdccicpKQogICAgICAgICByZXR1cm4gc3RyaW5nTGVuZ3Ro
OwogCi0gICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChzLmRlcHJlY2F0ZWRD
aGFyYWN0ZXJzKCksIHN0cmluZ0xlbmd0aCk7CisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJ
dGVyYXRvciBpdChzKTsKICAgICBpZiAoIWl0KQogICAgICAgICByZXR1cm4gc3RyaW5nTGVuZ3Ro
OwogCkBAIC0zODUsNyArMzg1LDcgQEAgdW5zaWduZWQgbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVD
bHVzdGVycwogICAgIGlmIChzLmlzOEJpdCgpICYmICFzLmNvbnRhaW5zKCdccicpKQogICAgICAg
ICByZXR1cm4gc3RkOjptaW4oc3RyaW5nTGVuZ3RoLCBudW1HcmFwaGVtZUNsdXN0ZXJzKTsKIAot
ICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgaXQocy5kZXByZWNhdGVkQ2hhcmFj
dGVycygpLCBzdHJpbmdMZW5ndGgpOworICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0
b3IgaXQocyk7CiAgICAgaWYgKCFpdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKHN0cmluZ0xl
bmd0aCwgbnVtR3JhcGhlbWVDbHVzdGVycyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHJldmlzaW9uIDE2MjE4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDEwIEBAIGNsYXNzIFRleHRCcmVha0l0ZXJhdG9yOwogLy8g
cGxhdGZvcm0gVUkgY29udmVudGlvbnMuIE9uZSBub3RhYmxlIGV4YW1wbGUgd2hlcmUgdGhpcyBj
YW4gYmUgZGlmZmVyZW50CiAvLyBmcm9tIGNoYXJhY3RlciBicmVhayBpdGVyYXRvciBpcyBUaGFp
IHByZXBlbmQgY2hhcmFjdGVycywgc2VlIGJ1ZyAyNDM0Mi4KIC8vIFVzZSB0aGlzIGZvciBpbnNl
cnRpb24gcG9pbnQgYW5kIHNlbGVjdGlvbiBtYW5pcHVsYXRpb25zLgotVGV4dEJyZWFrSXRlcmF0
b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0b3IoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKK1Rl
eHRCcmVha0l0ZXJhdG9yKiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKFN0cmluZ1ZpZXcpOwogCi1U
ZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqLCBpbnQgbGVu
Z3RoKTsKLVRleHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNo
YXIqLCBpbnQgbGVuZ3RoKTsKK1RleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvcihT
dHJpbmdWaWV3KTsKK1RleHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoU3Ry
aW5nVmlldyk7CiAKIFRleHRCcmVha0l0ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3Io
U3RyaW5nVmlldywgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBwcmlv
ckNvbnRleHQsIHVuc2lnbmVkIHByaW9yQ29udGV4dExlbmd0aCk7CiB2b2lkIHJlbGVhc2VMaW5l
QnJlYWtJdGVyYXRvcihUZXh0QnJlYWtJdGVyYXRvciopOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHBy
aXZhdGU6CiBjbGFzcyBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKTsKIHB1Ymxp
YzoKLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCk7CisgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3
KTsKICAgICB+Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpOwogCiAgICAgb3BlcmF0
b3IgVGV4dEJyZWFrSXRlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvcjsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50
L1RleHRDaGVja2VyRW5jaGFudC5jcHAJKHJldmlzaW9uIDE2MjE4MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgVGV4dENoZWNrZXJFbmNoYW50OjpjaGVja1Nw
ZWxsaW5nT2YKICAgICBpZiAoIWhhc0RpY3Rpb25hcnkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXIgPSB3b3JkQnJlYWtJdGVyYXRvcihzdHJpbmcuY2hh
cmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVy
ID0gd29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nKTsKICAgICBpZiAoIWl0ZXIpCiAgICAgICAgIHJl
dHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2
aXNpb24gMTYyMTgyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgc3RhdGljIHZvaWQgbWFrZUNhcGl0
YWxpemVkKFN0cmluZyogc3RyaQogICAgICAgICAgICAgc3RyaW5nV2l0aFByZXZpb3VzW2ldID0g
c3RyaW5nSW1wbFtpIC0gMV07CiAgICAgfQogCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGJvdW5k
YXJ5ID0gd29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nV2l0aFByZXZpb3VzLmNoYXJhY3RlcnMoKSwg
bGVuZ3RoICsgMSk7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGJvdW5kYXJ5ID0gd29yZEJyZWFr
SXRlcmF0b3IoU3RyaW5nVmlldyhzdHJpbmdXaXRoUHJldmlvdXMuY2hhcmFjdGVycygpLCBsZW5n
dGggKyAxKSk7CiAgICAgaWYgKCFib3VuZGFyeSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMzQw
LDcgKzEzNDAsNyBAQCBpbnQgUmVuZGVyVGV4dDo6cHJldmlvdXNPZmZzZXQoaW50IGN1cnJlCiAg
ICAgICAgIHJldHVybiBjdXJyZW50IC0gMTsKIAogICAgIFN0cmluZ0ltcGwqIHRleHRJbXBsID0g
bV90ZXh0LmltcGwoKTsKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSBjdXJzb3JN
b3ZlbWVudEl0ZXJhdG9yKHRleHRJbXBsLT5jaGFyYWN0ZXJzMTYoKSwgdGV4dEltcGwtPmxlbmd0
aCgpKTsKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSBjdXJzb3JNb3ZlbWVudEl0
ZXJhdG9yKFN0cmluZ1ZpZXcodGV4dEltcGwtPmNoYXJhY3RlcnMxNigpLCB0ZXh0SW1wbC0+bGVu
Z3RoKCkpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQogICAgICAgICByZXR1cm4gY3VycmVudCAtIDE7
CiAKQEAgLTE0OTMsNyArMTQ5Myw3IEBAIGludCBSZW5kZXJUZXh0OjpuZXh0T2Zmc2V0KGludCBj
dXJyZW50KSAKICAgICAgICAgcmV0dXJuIGN1cnJlbnQgKyAxOwogCiAgICAgU3RyaW5nSW1wbCog
dGV4dEltcGwgPSBtX3RleHQuaW1wbCgpOwotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRv
ciA9IGN1cnNvck1vdmVtZW50SXRlcmF0b3IodGV4dEltcGwtPmNoYXJhY3RlcnMxNigpLCB0ZXh0
SW1wbC0+bGVuZ3RoKCkpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IGN1cnNv
ck1vdmVtZW50SXRlcmF0b3IoU3RyaW5nVmlldyh0ZXh0SW1wbC0+Y2hhcmFjdGVyczE2KCksIHRl
eHRJbXBsLT5sZW5ndGgoKSkpOwogICAgIGlmICghaXRlcmF0b3IpCiAgICAgICAgIHJldHVybiBj
dXJyZW50ICsgMTsKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyMTgyKQorKysgU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQt
MDEtMTUgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBUZXh0QnJlYWtJ
dGVyYXRvcidzIHNob3VsZCBzdXBwb3J0IExhdGluLTEgZm9yIGFsbCBpdGVyYXRvciB0eXBlcyAo
UGFydCAzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI2ODU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q2hhbmdlIGFsbCB0aGUgVGV4dEJyZWFrSXRlcmF0b3IgY3JlYXRpb24gZnVuY3Rpb25zIHRvIHRh
a2UgU3RyaW5nVmlld3MuIFJlbW92ZSBhIGZldworICAgICAgICBub3cgdW5uZWNlc3NhcnkgdXAt
Y29udmVyc2lvbiB0byBVVEYtMTYgaW4gdGhlIHByb2Nlc3MuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bmV4dFdvcmRPZmZz
ZXQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgp
OgorCiAyMDE0LTAxLTE2ICBFdW5taSBMZWUgIDxldW5taTE1LmxlZUBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBbRUZMXVtXSzJdIEV3a1ZpZXcgY2FuIG5vdCBiZSBzaG93biB3aXRob3V0IHJlLXNp
emluZyBvbmNlIGl0IGlzIGhpZGRlbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvVGV4dENoZWNrZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCShyZXZpc2lvbiAxNjIxODIpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI3LDcgKzEyNyw3IEBAIHN0YXRpYyBpbnQgbmV4dFdvcmRPZmZzZXQoY29uc3QgVUNoYXIq
IHQKICAgICAvLyAgICAgICAgb3IgYWZ0ZXIgIm9mZnNldCIgKHVicmtfaXNCb3VuZGFyeSBzaWRl
IGVmZmVjdCkuCiAgICAgLy8gICAgICAgIEZvciBtYW55IHdvcmQgc2VwYXJhdG9ycywgdGhlIG1l
dGhvZCBkb2Vzbid0IHByb3Blcmx5IGRldGVybWluZSB0aGUgYm91bmRhcmllcwogICAgIC8vICAg
ICAgICB3aXRob3V0IHJlc2V0dGluZyB0aGUgaXRlcmF0b3IuCi0gICAgVGV4dEJyZWFrSXRlcmF0
b3IqIHRleHRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0aCk7CisgICAg
VGV4dEJyZWFrSXRlcmF0b3IqIHRleHRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKFN0cmlu
Z1ZpZXcodGV4dCwgbGVuZ3RoKSk7CiAgICAgaWYgKCF0ZXh0SXRlcmF0b3IpCiAgICAgICAgIHJl
dHVybiBjdXJyZW50T2Zmc2V0OwogCkBAIC0xNTMsNyArMTUzLDcgQEAgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OgogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IHBhcmFncmFwaENoZWNraW5nUmVzdWx0OwogI2lmIEVOQUJMRShTUEVMTENIRUNLKQogICAgIGlm
IChjaGVja2luZ1R5cGVzICYgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSB7Ci0gICAgICAgIFRl
eHRCcmVha0l0ZXJhdG9yKiB0ZXh0SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0LCBs
ZW5ndGgpOworICAgICAgICBUZXh0QnJlYWtJdGVyYXRvciogdGV4dEl0ZXJhdG9yID0gd29yZEJy
ZWFrSXRlcmF0b3IoU3RyaW5nVmlldyh0ZXh0LCBsZW5ndGgpKTsKICAgICAgICAgaWYgKCF0ZXh0
SXRlcmF0b3IpCiAgICAgICAgICAgICByZXR1cm4gcGFyYWdyYXBoQ2hlY2tpbmdSZXN1bHQ7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2lvcy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjE4MikKKysrIFNvdXJjZS9XZWJLaXQv
aW9zL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE0LTAxLTE1
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGV4dEJyZWFrSXRlcmF0
b3IncyBzaG91bGQgc3VwcG9ydCBMYXRpbi0xIGZvciBhbGwgaXRlcmF0b3IgdHlwZXMgKFBhcnQg
MykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjg1
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5n
ZSBhbGwgdGhlIFRleHRCcmVha0l0ZXJhdG9yIGNyZWF0aW9uIGZ1bmN0aW9ucyB0byB0YWtlIFN0
cmluZ1ZpZXdzLiBSZW1vdmUgYSBmZXcKKyAgICAgICAgbm93IHVubmVjZXNzYXJ5IHVwLWNvbnZl
cnNpb24gdG8gVVRGLTE2IGluIHRoZSBwcm9jZXNzLgorCisgICAgICAgICogTWlzYy9XZWJOU1N0
cmluZ0RyYXdpbmcubW06CisKIDIwMTQtMDEtMTYgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2Nh
QGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2UgYWxsIHVzZXMgb2YgRklOQUwgdG8gZmluYWwg
bm93IHRoYXQgYWxsIG91ciBjb21waWxlcnMgc3VwcG9ydCBpdApJbmRleDogU291cmNlL1dlYktp
dC9pb3MvTWlzYy9XZWJOU1N0cmluZ0RyYXdpbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9pb3MvTWlzYy9XZWJOU1N0cmluZ0RyYXdpbmcubW0JKHJldmlzaW9uIDE2MjE4MikKKysr
IFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2ViTlNTdHJpbmdEcmF3aW5nLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00NTYsNyArNDU2LDcgQEAgLSAoQ0dTaXplKV9fd2ViX2RyYXdJblJlY3Q6KENHUmVj
dClyZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxsaXBzaXNTdHlsZSA9PSBXZWJF
bGxpcHNpc1N0eWxlQ2hhcmFjdGVyV3JhcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIGNhbiBicmVhayBvbiBjaGFyYWN0ZXJzLiBXZSBzaG91bGQgZG8gc29tZXRoaW5nIHNt
YXJ0ZXIsIGxpa2Ugc3BsaXQgdGhlIGxlbmd0aCBvZiB0aGUgZW50aXJlIGxpbmUgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QsIGhvd2V2ZXIsIGJyZWFrIGluIHRoZSBtaWRk
bGUgb2YgYSBjaGFyYWN0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uU2hhcmVk
Q2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChwb3MsIGxlbmd0aFJlbWFpbmluZyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChT
dHJpbmdWaWV3KHBvcywgbGVuZ3RoUmVtYWluaW5nKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWtQb3MgPSBib3VuZGVkVGV4dEJyZWFrRm9sbG93aW5nKGl0LCAwLCBsZW5ndGhS
ZW1haW5pbmcpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MzcsNyArNTM3LDcgQEAg
LSAoQ0dTaXplKV9fd2ViX2RyYXdJblJlY3Q6KENHUmVjdClyZWN0CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgbXVzdCBiZSBhIGxvbmcgd29yZCB0aGF0IGRvZXNuJ3QgZml0IGluc2lkZSB0
aGUgZW50aXJlIHdpZHRoCiAgICAgICAgICAgICAgICAgICAgIC8vIEZpdCBpdCBvbiBhIGxpbmUg
b25lIGNoYXJhY3RlciBhdCBhIHRpbWUgYW5kIGJyZWFrIHdoZW4gbm8gbW9yZSBjaGFyYWN0ZXJz
IGZpdAogICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVy
IHRvIGF2b2lkIHRoZSBlZGdlIGNhc2Ugd2hlcmUgYSBzaW5nbGUgZ2x5cGggZG9lc24ndCBmaXQg
d2l0aGluIHdpZHRoCi0gICAgICAgICAgICAgICAgICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFr
SXRlcmF0b3IgaXQocG9zLCBsZW5ndGhSZW1haW5pbmcpOworICAgICAgICAgICAgICAgICAgICBO
b25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KFN0cmluZ1ZpZXcocG9zLCBsZW5ndGhS
ZW1haW5pbmcpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IDA7CiAgICAgICAg
ICAgICAgICAgICAgIGludCBuZXh0Q2hhckJyZWFrID0gYm91bmRlZFRleHRCcmVha0ZvbGxvd2lu
ZyhpdCwgb2Zmc2V0LCBsZW5ndGhSZW1haW5pbmcpOwogICAgICAgICAgICAgICAgICAgICBUZXh0
UnVuIHRleHRSdW4ocG9zLCBuZXh0Q2hhckJyZWFrKTsK
</data>
<flag name="review"
          id="245359"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>