<?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>150907</bug_id>
          
          <creation_ts>2015-11-04 15:00:26 -0800</creation_ts>
          <short_desc>Add preliminary (SPI) support for NSTextFinder on WKWebView</short_desc>
          <delta_ts>2015-11-09 10:20:31 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1139454</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-04 15:00:26 -0800</bug_when>
    <thetext>Add preliminary (SPI) support for NSTextFinder on WKWebView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139455</commentid>
    <comment_count>1</comment_count>
      <attachid>264818</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-04 15:01:22 -0800</bug_when>
    <thetext>Created attachment 264818
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139456</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-04 15:02:32 -0800</bug_when>
    <thetext>Attachment 264818 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:242:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 15 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>1139457</commentid>
    <comment_count>3</comment_count>
      <attachid>264818</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-04 15:02:34 -0800</bug_when>
    <thetext>Comment on attachment 264818
Patch

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

&gt; Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:227
&gt; +    _resultCollector(matchObjects.get(), NO);
&gt; +    [_currentProgress setCompletedUnitCount:1];

Not safe to do this, could get multiple requests. Need to keep track of request/reply and which collector/progress we had.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139769</commentid>
    <comment_count>4</comment_count>
      <attachid>264885</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-05 14:38:23 -0800</bug_when>
    <thetext>Created attachment 264885
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139811</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-05 15:20:10 -0800</bug_when>
    <thetext>Attachment 264885 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:260:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:265:  Missing space before {  [whitespace/braces] [5]
Total errors found: 2 in 15 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>1139812</commentid>
    <comment_count>6</comment_count>
      <attachid>264897</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-05 15:21:16 -0800</bug_when>
    <thetext>Created attachment 264897
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139814</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-05 15:23:20 -0800</bug_when>
    <thetext>Attachment 264897 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:255:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:260:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:91:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:98:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 20 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>1139835</commentid>
    <comment_count>8</comment_count>
      <attachid>264903</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-05 17:10:30 -0800</bug_when>
    <thetext>Created attachment 264903
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139836</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-05 17:12:10 -0800</bug_when>
    <thetext>Attachment 264903 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:255:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:260:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:91:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:98:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 21 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>1139982</commentid>
    <comment_count>10</comment_count>
      <attachid>264903</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-06 09:23:20 -0800</bug_when>
    <thetext>Comment on attachment 264903
Patch

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

&gt; Source/WebKit2/Platform/spi/mac/AppKitSPI.h:26
&gt; +#if PLATFORM(MAC)

Could do this where we import/include instead, just move it down to the PLATFORM(MAC) paragraph. Could use USE(APPKIT) instead. Not sure what our design pattern is for these Apple SPI.h headers.

&gt; Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:49
&gt; +- (void)didFindStringMatches:(const String&amp;)string rects:(const Vector&lt;Vector&lt;IntRect&gt;&gt;&amp;)rects index:(int32_t)matchIndex;
&gt; +- (void)didFindString:(const String&amp;)string rects:(const Vector&lt;IntRect&gt;&amp;)rects index:(int32_t)matchIndex;
&gt; +- (void)didFailToFindString:(const String&amp;)string;

The string arguments are not used. Can we just omit that argument for now? Can always add later if needed.
The index arguments are not used.

Maybe we should put the conversion from WebCore types to Objective-C types in the C++ wrapper. The reason I suggest that is that selectors with C++ types in them actually cause a bit of binary bloat, so I generally prefer to use Objective-C types in Objective-C interfaces.

I typically like the “convert a vector into an NSArray” operation to be factored into its own separate function rather than being mixed in with other things.

&gt; Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:52
&gt; +- (void)didGetImageForMatchResult:(WebImage *)string index:(int32_t)matchIndex;

Again, index argument is not used.

&gt; Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:81
&gt; +    virtual void didFailToFindString(WebKit::WebPageProxy*, const WTF::String&amp; string) override

No need for the WebKit:: and WTF:: prefixes here.

&gt; Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:167
&gt; +    _page = nullptr;
&gt; +    _view = nil;

Should we do setFindMatchesClient(nullptr) and setFindClient(nullptr) here? If not, why is it safe not to?

&gt; Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:230
&gt; +    for (unsigned i = 0; i &lt; matchCount; i++) {
&gt; +        auto matchRects = rectsForMatches[i];

Modern for loop?

&gt; Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:232
&gt; +        for (auto rect : matchRects)

auto&amp; instead of auto to avoid copying each IntRect?

&gt; Source/WebKit2/WebProcess/WebPage/FindController.cpp:186
&gt; +            range-&gt;absoluteTextRects(matchRects);

Does this function append to a vector rather than replacing the vector? If so, it has a misleading name! Seems likely that the person who wrote this function originally intended that it “fill” a vector and used append, which is why its name sounds like something with a return value yet it’s actually an function that appends to an existing vector. Maybe it should have append in its name.

&gt; Tools/TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:67
&gt; +    FindInPageNavigationDelegate *delegate = [[FindInPageNavigationDelegate alloc] init];

This object leaks. Need to use ARC, adoptNS, release, or autorelease. Code one line above is using adoptNS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140007</commentid>
    <comment_count>11</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-06 11:18:26 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 264903 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264903&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Platform/spi/mac/AppKitSPI.h:26
&gt; &gt; +#if PLATFORM(MAC)
&gt; 
&gt; Could do this where we import/include instead, just move it down to the
&gt; PLATFORM(MAC) paragraph. Could use USE(APPKIT) instead. Not sure what our
&gt; design pattern is for these Apple SPI.h headers.

I like USE(APPKIT); not sure why it would be better to have the #if at all include sites, though. That seems backwards from what we usually do? But maybe not.

&gt; &gt; Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:49
&gt; &gt; +- (void)didFindStringMatches:(const String&amp;)string rects:(const Vector&lt;Vector&lt;IntRect&gt;&gt;&amp;)rects index:(int32_t)matchIndex;
&gt; &gt; +- (void)didFindString:(const String&amp;)string rects:(const Vector&lt;IntRect&gt;&amp;)rects index:(int32_t)matchIndex;
&gt; &gt; +- (void)didFailToFindString:(const String&amp;)string;
&gt; 
&gt; The string arguments are not used. Can we just omit that argument for now?
&gt; Can always add later if needed.
&gt; The index arguments are not used.

Makes sense.

&gt; &gt; Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:81
&gt; &gt; +    virtual void didFailToFindString(WebKit::WebPageProxy*, const WTF::String&amp; string) override
&gt; 
&gt; No need for the WebKit:: and WTF:: prefixes here.

True, here! We do need them for FindOptions, though, because we have things with the same name in WebCore and WebKit :D

&gt; &gt; Source/WebKit2/UIProcess/mac/WKTextFinderClient.mm:232
&gt; &gt; +        for (auto rect : matchRects)
&gt; 
&gt; auto&amp; instead of auto to avoid copying each IntRect?

Of course :(

&gt; &gt; Source/WebKit2/WebProcess/WebPage/FindController.cpp:186
&gt; &gt; +            range-&gt;absoluteTextRects(matchRects);
&gt; 
&gt; Does this function append to a vector rather than replacing the vector? If
&gt; so, it has a misleading name! Seems likely that the person who wrote this
&gt; function originally intended that it “fill” a vector and used append, which
&gt; is why its name sounds like something with a return value yet it’s actually
&gt; an function that appends to an existing vector. Maybe it should have append
&gt; in its name.

It probably should have append in its name! It doesn&apos;t replace/clear, it does appendVector and friends.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:67
&gt; &gt; +    FindInPageNavigationDelegate *delegate = [[FindInPageNavigationDelegate alloc] init];
&gt; 
&gt; This object leaks. Need to use ARC, adoptNS, release, or autorelease. Code
&gt; one line above is using adoptNS.

Sure! This means there are other tests that do the wrong thing; I&apos;ll fix them too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140017</commentid>
    <comment_count>12</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-06 11:44:09 -0800</bug_when>
    <thetext>&gt; &gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:67
&gt; &gt; &gt; +    FindInPageNavigationDelegate *delegate = [[FindInPageNavigationDelegate alloc] init];
&gt; &gt; 
&gt; &gt; This object leaks. Need to use ARC, adoptNS, release, or autorelease. Code
&gt; &gt; one line above is using adoptNS.
&gt; 
&gt; Sure! This means there are other tests that do the wrong thing; I&apos;ll fix
&gt; them too.

Never mind! There are way too many, I&apos;ll just fix mine in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140328</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-11-09 04:16:44 -0800</bug_when>
    <thetext>Patch landed in https://trac.webkit.org/changeset/192113.
Apple Mac CMake buildfix landed in https://trac.webkit.org/changeset/192152

Can we close this bug? Or is it open intentionally?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264818</attachid>
            <date>2015-11-04 15:01:22 -0800</date>
            <delta_ts>2015-11-05 14:38:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150907-20151104150025.patch</filename>
            <type>text/plain</type>
            <size>32424</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxOTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDRjMzM3NTFiNWQ3NjQw
MTM0NDg2ZDRhMTViNzBiZWFkMTBmZDI1NC4uZDA4M2ZhZmU4MzNhNTkwMmMwYWQ1NTRjY2QyZDdl
MjZjNGI2ZjlmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE1LTExLTA0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBwcmVsaW1p
bmFyeSAoU1BJKSBzdXBwb3J0IGZvciBOU1RleHRGaW5kZXIgb24gV0tXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA5MDcKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzE5MTcxNjI0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL21hYy9BcHBLaXRTUEkuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUZpbmRDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6RmluZENs
aWVudDo6ZGlkRmluZFN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5j
cHA6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlRmluZENsaWVudCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5zdXJl
VGV4dEZpbmRlckNsaWVudF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZmluZE1hdGNoZXNGb3JT
dHJpbmc6cmVsYXRpdmVUb01hdGNoOmZpbmRPcHRpb25zOm1heFJlc3VsdHM6cmVzdWx0Q29sbGVj
dG9yOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZG9jdW1lbnRDb250YWluZXJWaWV3XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBnZXRTZWxlY3RlZFRleHQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBzZWxlY3RGaW5kTWF0Y2g6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL0ZpbmRDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvRmluZENsaWVu
dC5tbToKKyAgICAgICAgKFdlYktpdDo6RmluZENsaWVudDo6ZGlkRmluZFN0cmluZyk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6ZGlkRmluZFN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAg
ICAgICogVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vc3BpL21hYy9BcHBLaXRTUEkuaC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlRleHRGaW5kZXJGaW5kQ2xpZW50OjpUZXh0RmluZGVyRmluZENsaWVudCk6CisgICAgICAgICgt
W1dLVGV4dEZpbmRlck1hdGNoIGluaXRXaXRoQ2xpZW50OnZpZXc6aW5kZXg6cmVjdHM6XSk6Cisg
ICAgICAgICgtW1dLVGV4dEZpbmRlck1hdGNoIGNvbnRhaW5pbmdWaWV3XSk6CisgICAgICAgICgt
W1dLVGV4dEZpbmRlck1hdGNoIHRleHRSZWN0c10pOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJN
YXRjaCBnZW5lcmF0ZVRleHRJbWFnZTpdKToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyTWF0Y2gg
aW5kZXhdKToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyQ2xpZW50IGluaXRXaXRoUGFnZTp2aWV3
Ol0pOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJDbGllbnQgd2lsbERlc3Ryb3lWaWV3Ol0pOgor
ICAgICAgICAoLVtXS1RleHRGaW5kZXJDbGllbnQgZmluZE1hdGNoZXNGb3JTdHJpbmc6cmVsYXRp
dmVUb01hdGNoOmZpbmRPcHRpb25zOm1heFJlc3VsdHM6cmVzdWx0Q29sbGVjdG9yOl0pOgorICAg
ICAgICAoLVtXS1RleHRGaW5kZXJDbGllbnQgZ2V0U2VsZWN0ZWRUZXh0Ol0pOgorICAgICAgICAo
LVtXS1RleHRGaW5kZXJDbGllbnQgc2VsZWN0RmluZE1hdGNoOmNvbXBsZXRpb25IYW5kbGVyOl0p
OgorICAgICAgICAoLVtXS1RleHRGaW5kZXJDbGllbnQgZGlkRmluZFN0cmluZ01hdGNoZXM6cmVj
dHM6aW5kZXg6XSk6CisgICAgICAgICgtW1dLVGV4dEZpbmRlckNsaWVudCBkaWRHZXRJbWFnZUZv
ck1hdGNoUmVzdWx0OmluZGV4Ol0pOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJDbGllbnQgZGlk
RmluZFN0cmluZzpyZWN0czppbmRleDpdKToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyQ2xpZW50
IGdldEltYWdlRm9yTWF0Y2hSZXN1bHQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICog
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9s
bGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpGaW5k
Q29udHJvbGxlcjo6ZmluZFN0cmluZyk6CisKIDIwMTUtMTEtMDMgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSBP
cHRpb25zR1RLLmNtYWtlIGFuZCBORVdTIGZvciAyLjExLjEgcmVsZWFzZS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3NwaS9tYWMvQXBwS2l0U1BJLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9zcGkvbWFjL0FwcEtpdFNQSS5oCmluZGV4IGEzNmY4NzgyNmJlMWFjNzFl
ZmVjMWFlY2Y2ODUyOTY1NDJmYTRjYmUuLmIzNGYxOWMwZjBiMDc5YzMxNTc4NmFiMjExYjdmNWMz
NzcwZDk5YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3NwaS9tYWMvQXBw
S2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vc3BpL21hYy9BcHBLaXRTUEku
aApAQCAtMjMsOSArMjMsMTIgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCisjaWYgUExBVEZPUk0oTUFDKQorCiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykK
IAogI2ltcG9ydCA8QXBwS2l0L05TQWNjZXNzaWJpbGl0eVJlbW90ZVVJRWxlbWVudC5oPgorI2lt
cG9ydCA8QXBwS2l0L05TVGV4dEZpbmRlcl9Qcml2YXRlLmg+CiAKICNlbHNlCiAKQEAgLTM1LDYg
KzM4LDI5IEBACiAKIEBlbmQKIAordHlwZWRlZiBlbnVtIDogTlNVSW50ZWdlciB7CisgICAgTlNU
ZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9uc0JhY2t3YXJkcyA9IDEgPDwg
MCwKKyAgICBOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25zV3JhcCA9
IDEgPDwgMSwKKyAgICBOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25z
Q2FzZUluc2Vuc2l0aXZlID0gMSA8PCAyLAorICAgIE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0Rv
Y3VtZW50RmluZE9wdGlvbnNTdGFydHNXaXRoID0gMSA8PCAzLAorfSBOU1RleHRGaW5kZXJBc3lu
Y2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25zOworCitAcHJvdG9jb2wgTlNUZXh0RmluZGVyQXN5
bmNocm9ub3VzRG9jdW1lbnRGaW5kTWF0Y2ggPE5TT2JqZWN0PgorQHJlcXVpcmVkCitAcHJvcGVy
dHkgKHJldGFpbiwgbm9uYXRvbWljLCByZWFkb25seSkgTlNWaWV3ICpjb250YWluaW5nVmlldzsK
K0Bwcm9wZXJ0eSAocmV0YWluLCBub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5ICp0ZXh0UmVj
dHM7CistICh2b2lkKWdlbmVyYXRlVGV4dEltYWdlOih2b2lkICheKShOU0ltYWdlICopKWNvbXBs
ZXRpb25IYW5kbGVyOworQGVuZAorCitAaW50ZXJmYWNlIE5TT2JqZWN0ICgpCisKKy0gKHZvaWQp
ZmluZE1hdGNoZXNGb3JTdHJpbmc6KE5TU3RyaW5nICopdGFyZ2V0U3RyaW5nIHJlbGF0aXZlVG9N
YXRjaDooaWQgPE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNoPilyZWxh
dGl2ZU1hdGNoIGZpbmRPcHRpb25zOihOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZp
bmRPcHRpb25zKWZpbmRPcHRpb25zIG1heFJlc3VsdHM6KE5TVUludGVnZXIpbWF4UmVzdWx0cyBy
ZXN1bHRDb2xsZWN0b3I6KHZvaWQgKF4pKE5TQXJyYXkgKm1hdGNoZXMsIEJPT0wgZGlkV3JhcCkp
cmVzdWx0Q29sbGVjdG9yOworLSAoTlNWaWV3ICopZG9jdW1lbnRDb250YWluZXJWaWV3OworLSAo
dm9pZClnZXRTZWxlY3RlZFRleHQ6KHZvaWQgKF4pKE5TU3RyaW5nICpzZWxlY3RlZFRleHRTdHJp
bmcpKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClzZWxlY3RGaW5kTWF0Y2g6KGlkIDxOU1Rl
eHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4pZmluZE1hdGNoIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKKworQGVuZAorCiAj
ZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIAogQGludGVyZmFjZSBOU0FwcGxpY2F0
aW9uICgpCkBAIC00MywzICs2OSw1IEBACiAtICh2b2lkKV9zZXRDdXJyZW50RXZlbnQ6KE5TRXZl
bnQgKilldmVudDsKIAogQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElGaW5kQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUZpbmRDbGllbnQuaAppbmRleCAwMGJkZWM5NjQwYzc1
MWU1YThiMjdhYmY1M2E1YjVlYWIyN2U0NTAyLi4wYWJmOGY2NzM5MjZjNzZkNjg5Y2U3NzYyZTNj
YTg3NjBiMGQ3NzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQ
SUZpbmRDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUZpbmRD
bGllbnQuaApAQCAtMjgsNiArMjgsMTAgQEAKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OworfQorCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIH0KQEAgLTM5LDcgKzQzLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkZpbmRDbGllbnQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBk
aWRDb3VudFN0cmluZ01hdGNoZXMoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0
cmluZyYsIHVpbnQzMl90KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0cmluZyhXZWJL
aXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJiwgdWludDMyX3QsIGludDMyX3Qp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYktpdDo6V2ViUGFnZVByb3h5
KiwgY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIG1h
dGNoUmVjdHMsIHVpbnQzMl90LCBpbnQzMl90KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bFRvRmluZFN0cmluZyhXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJikg
eyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCmluZGV4
IGFjNTdkM2RiNWNlZTQ5ZWZiOGJiYjA1YTM2ZWIwYTA1ZjlmODc1MDAuLmJlN2ZjNDIyNTE5MjYx
MjYwZjM5YzgwMzYwMjY0MmRiMWI5OWI5ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuY3BwCkBAIC04ODcsNyArODg3LDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlRmlu
ZENsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29uc3QgV0tQYWdlRmluZENsaWVudEJhc2UqIHdr
Q2wKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmRTdHJpbmcoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBTdHJpbmcmIHN0cmluZywgdWludDMy
X3QgbWF0Y2hDb3VudCwgaW50MzJfdCkgb3ZlcnJpZGUKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZEZpbmRTdHJpbmcoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiwgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJf
dCkgb3ZlcnJpZGUKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRGaW5k
U3RyaW5nKQogICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggMWI4ZmRlOTg0Mjc5NTlkY2RiN2Nj
ODY0OTQ1NDBlZTMxYmQ4NDMyZi4uNjNhOWZjMTE3NTRjY2EyMzc1YzIzZWI3ZThkN2Y5ZGFkOWEw
ZDFkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIkFQSUZvcm1DbGllbnQuaCIKICNpbXBv
cnQgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCiAjaW1wb3J0ICJBUElTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKKyNpbXBvcnQgIkFwcEtpdFNQSS5oIgogI2ltcG9ydCAiQ29tcGxldGlvbkhhbmRs
ZXJDYWxsQ2hlY2tlci5oIgogI2ltcG9ydCAiRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCIKICNp
bXBvcnQgIkZpbmRDbGllbnQuaCIKQEAgLTE0NCw2ICsxNDUsNyBAQCBlbnVtIGNsYXNzIER5bmFt
aWNWaWV3cG9ydFVwZGF0ZU1vZGUgewogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCisjaW1w
b3J0ICJXS1RleHRGaW5kZXJDbGllbnQuaCIKICNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCiAj
aW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CiAKQEAgLTIzNSw2ICsyMzcsNyBAQCBXS1dlYlZp
ZXcqIGZyb21XZWJQYWdlUHJveHkoV2ViS2l0OjpXZWJQYWdlUHJveHkmIHBhZ2UpCiAjZW5kaWYK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6V2ViVmlld0lt
cGw+IF9pbXBsOworICAgIFJldGFpblB0cjxXS1RleHRGaW5kZXJDbGllbnQ+IF90ZXh0RmluZGVy
Q2xpZW50OwogI2VuZGlmCiB9CiAKQEAgLTI2NDksNiArMjY1MiwzMyBAQCBXRUJDT1JFX0NPTU1B
TkQoeWFua0FuZFNlbGVjdCkKIH0KICNlbmRpZgogCistIChXS1RleHRGaW5kZXJDbGllbnQgKilf
ZW5zdXJlVGV4dEZpbmRlckNsaWVudAoreworICAgIGlmICghX3RleHRGaW5kZXJDbGllbnQpCisg
ICAgICAgIF90ZXh0RmluZGVyQ2xpZW50ID0gYWRvcHROUyhbW1dLVGV4dEZpbmRlckNsaWVudCBh
bGxvY10gaW5pdFdpdGhQYWdlOipfcGFnZSB2aWV3OnNlbGZdKTsKKyAgICByZXR1cm4gX3RleHRG
aW5kZXJDbGllbnQuZ2V0KCk7Cit9CisKKy0gKHZvaWQpZmluZE1hdGNoZXNGb3JTdHJpbmc6KE5T
U3RyaW5nICopdGFyZ2V0U3RyaW5nIHJlbGF0aXZlVG9NYXRjaDooaWQgPE5TVGV4dEZpbmRlckFz
eW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNoPilyZWxhdGl2ZU1hdGNoIGZpbmRPcHRpb25zOihO
U1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25zKWZpbmRPcHRpb25zIG1h
eFJlc3VsdHM6KE5TVUludGVnZXIpbWF4UmVzdWx0cyByZXN1bHRDb2xsZWN0b3I6KHZvaWQgKF4p
KE5TQXJyYXkgKm1hdGNoZXMsIEJPT0wgZGlkV3JhcCkpcmVzdWx0Q29sbGVjdG9yCit7CisgICAg
W1tzZWxmIF9lbnN1cmVUZXh0RmluZGVyQ2xpZW50XSBmaW5kTWF0Y2hlc0ZvclN0cmluZzp0YXJn
ZXRTdHJpbmcgcmVsYXRpdmVUb01hdGNoOnJlbGF0aXZlTWF0Y2ggZmluZE9wdGlvbnM6ZmluZE9w
dGlvbnMgbWF4UmVzdWx0czptYXhSZXN1bHRzIHJlc3VsdENvbGxlY3RvcjpyZXN1bHRDb2xsZWN0
b3JdOworfQorCistIChOU1ZpZXcgKilkb2N1bWVudENvbnRhaW5lclZpZXcKK3sKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClnZXRTZWxlY3RlZFRleHQ6KHZvaWQgKF4pKE5TU3RyaW5n
ICpzZWxlY3RlZFRleHRTdHJpbmcpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgW1tzZWxmIF9l
bnN1cmVUZXh0RmluZGVyQ2xpZW50XSBnZXRTZWxlY3RlZFRleHQ6Y29tcGxldGlvbkhhbmRsZXJd
OworfQorCistICh2b2lkKXNlbGVjdEZpbmRNYXRjaDooaWQgPE5TVGV4dEZpbmRlckFzeW5jaHJv
bm91c0RvY3VtZW50RmluZE1hdGNoPilmaW5kTWF0Y2ggY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgW1tzZWxmIF9lbnN1cmVUZXh0Rmlu
ZGVyQ2xpZW50XSBzZWxlY3RGaW5kTWF0Y2g6ZmluZE1hdGNoIGNvbXBsZXRpb25IYW5kbGVyOmNv
bXBsZXRpb25IYW5kbGVyXTsKK30KKwogLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopX3dlYl9zdXBl
cklucHV0Q29udGV4dAogewogICAgIHJldHVybiBbc3VwZXIgaW5wdXRDb250ZXh0XTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRl
LmgKaW5kZXggNjYwMTQ5N2E5YmEwMWEyMzdiNmJjYzcyOTEyZGQ5OWUxODA1OWJhYS4uNmY2NWRh
Yjk5NGJiZjQ3ZjEwMzM3OTdlYmM1OTk1YWQ5YjA3Mjg4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKQEAgLTIzMiw2
ICsyMzIsMTAgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLSW1tZWRpYXRlQWN0aW9u
VHlwZSkgewogCiBAZW5kCiAKKyNpZiAhVEFSR0VUX09TX0lQSE9ORQorQGludGVyZmFjZSBXS1dl
YlZpZXcgKFdLTlNUZXh0RmluZGVyQ2xpZW50KSA8TlNUZXh0RmluZGVyQ2xpZW50PgorQGVuZAor
I2VuZGlmCiAKIEBpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmcpCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9GaW5kQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5oCmluZGV4IDNjMWMxNDVlNGQ0YjJkMjg1
MmQ4MGIyZjQxZjJiNjhhNTc4OTVmZGQuLmFhNmY3MDkyMmI1MjQ1NzhmMDA0MzU4MTI5YWJiOTli
ZWM3ZTkzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9GaW5k
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQu
aApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIC8vIEZyb20gQVBJOjpG
aW5kQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGRpZENvdW50U3RyaW5nTWF0Y2hlcyhXZWJQYWdl
UHJveHkqLCBjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50KTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmLCB1aW50MzJf
dCBtYXRjaENvdW50LCBpbnQzMl90IG1hdGNoSW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5kU3RyaW5nKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpJbnRSZWN0PiYsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCk7
CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoV2ViUGFnZVByb3h5KiwgY29u
c3QgU3RyaW5nJik7CiAgICAgCiAgICAgV0tXZWJWaWV3ICptX3dlYlZpZXc7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9GaW5kQ2xpZW50Lm1tCmluZGV4IGRmOGZhZDBmYTQ1ZjVj
Y2Y4OTkxM2E2MDE0OWVjODk1NjViNmRjZDMuLjQ0NzI2NmM3NjFkM2U0NmIxNjBiZDViODA0NDVi
MDhlYzk4NzY5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9G
aW5kQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9GaW5kQ2xp
ZW50Lm1tCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgRmluZENsaWVudDo6ZGlkQ291bnRTdHJpbmdN
YXRjaGVzKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1aW50CiAgICAgICAg
IFttX2RlbGVnYXRlLmdldCgpIF93ZWJWaWV3Om1fd2ViVmlldyBkaWRDb3VudE1hdGNoZXM6bWF0
Y2hDb3VudCBmb3JTdHJpbmc6c3RyaW5nXTsKIH0KIAotdm9pZCBGaW5kQ2xpZW50OjpkaWRGaW5k
U3RyaW5nKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1aW50MzJfdCBtYXRj
aENvdW50LCBpbnQzMl90IG1hdGNoSW5kZXgpCit2b2lkIEZpbmRDbGllbnQ6OmRpZEZpbmRTdHJp
bmcoV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpJbnRSZWN0PiYsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkK
IHsKICAgICBpZiAobV9kZWxlZ2F0ZU1ldGhvZHMud2Vidmlld0RpZEZpbmRTdHJpbmcpCiAgICAg
ICAgIFttX2RlbGVnYXRlLmdldCgpIF93ZWJWaWV3Om1fd2ViVmlldyBkaWRGaW5kTWF0Y2hlczpt
YXRjaENvdW50IGZvclN0cmluZzpzdHJpbmcgd2l0aE1hdGNoSW5kZXg6bWF0Y2hJbmRleF07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDA5OGE3ODRhNTNk
MmE2ZjNlMmQ4MzI3ZWE1NmZkMGYzZjdiMTM3Y2QuLjhlMGI1MDAzMDA4NTExZmI5MWFmYTNkYzgz
NmY2YzY3ZGFhNjA2ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCkBAIC00MDc5LDkgKzQwNzksOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VGV4dEluZGlj
YXRvckFuaW1hdGlvblByb2dyZXNzKGZsb2F0IHByb2dyZXNzKQogI2VuZGlmCiB9CiAKLXZvaWQg
V2ViUGFnZVByb3h5OjpkaWRGaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1aW50MzJf
dCBtYXRjaENvdW50LCBpbnQzMl90IG1hdGNoSW5kZXgpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlk
RmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgVmVjdG9yPFdlYkNvcmU6Oklu
dFJlY3Q+JiBtYXRjaFJlY3RzLCB1aW50MzJfdCBtYXRjaENvdW50LCBpbnQzMl90IG1hdGNoSW5k
ZXgpCiB7Ci0gICAgbV9maW5kQ2xpZW50LT5kaWRGaW5kU3RyaW5nKHRoaXMsIHN0cmluZywgbWF0
Y2hDb3VudCwgbWF0Y2hJbmRleCk7CisgICAgbV9maW5kQ2xpZW50LT5kaWRGaW5kU3RyaW5nKHRo
aXMsIHN0cmluZywgbWF0Y2hSZWN0cywgbWF0Y2hDb3VudCwgbWF0Y2hJbmRleCk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRGaW5kU3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmlu
ZywgY29uc3QgVmVjdG9yPFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0Pj4mIG1hdGNoUmVjdHMsIGlu
dDMyX3QgZmlyc3RJbmRleEFmdGVyU2VsZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCmluZGV4IDY0ZjJkYzYyMDI0NmIxMGZjNjIxY2Q3MDZhOWM5ZGRmNWNhMmZh
OTguLmQyZWM0ZjMyYzNmMzgyNWJlYTMxYmMwOTAxNGRlNjY5YjhjMDU4MjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTc1MSw3ICs3NTEsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JE
YXRhJiwgdWludDY0X3QgLyogV2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRvd0xpZmV0aW1lICov
IGxpZmV0aW1lID0gMCAvKiBQZXJtYW5lbnQgKi8pOwogICAgIHZvaWQgc2V0VGV4dEluZGljYXRv
ckFuaW1hdGlvblByb2dyZXNzKGZsb2F0KTsKICAgICB2b2lkIGNsZWFyVGV4dEluZGljYXRvcigp
OwotICAgIHZvaWQgZGlkRmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENv
dW50LCBpbnQzMl90IG1hdGNoSW5kZXgpOworICAgIHZvaWQgZGlkRmluZFN0cmluZyhjb25zdCBT
dHJpbmcmLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mLCB1aW50MzJfdCBtYXRjaENv
dW50LCBpbnQzMl90IG1hdGNoSW5kZXgpOwogICAgIHZvaWQgZGlkRmFpbFRvRmluZFN0cmluZyhj
b25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGRpZEZpbmRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFZlY3RvcjxWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4+JiBtYXRjaFJlY3RzLCBp
bnQzMl90IGZpcnN0SW5kZXhBZnRlclNlbGVjdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGYzZGM3MjE3YTFhZWQz
NTMwZGM4MjFhYTdhMjA0ZjcwMTYxYWVjMDcuLjExNDI5MWVkY2ViOTk3MDgwYzk0MmViMzFkZjQx
OWVjNjBmOGQ3NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbgpAQCAtMjMzLDcgKzIzMyw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQ
cm94eSB7CiAgICAgRGlkQ291bnRTdHJpbmdNYXRjaGVzKFN0cmluZyBzdHJpbmcsIHVpbnQzMl90
IG1hdGNoQ291bnQpCiAgICAgU2V0VGV4dEluZGljYXRvcihzdHJ1Y3QgV2ViQ29yZTo6VGV4dElu
ZGljYXRvckRhdGEgaW5kaWNhdG9yLCB1aW50NjRfdCBsaWZldGltZSkKICAgICBDbGVhclRleHRJ
bmRpY2F0b3IoKQotICAgIERpZEZpbmRTdHJpbmcoU3RyaW5nIHN0cmluZywgdWludDMyX3QgbWF0
Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQorICAgIERpZEZpbmRTdHJpbmcoU3RyaW5nIHN0
cmluZywgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IG1hdGNoUmVjdCwgdWludDMyX3QgbWF0Y2hD
b3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQogICAgIERpZEZhaWxUb0ZpbmRTdHJpbmcoU3RyaW5n
IHN0cmluZykKICAgICBEaWRGaW5kU3RyaW5nTWF0Y2hlcyhTdHJpbmcgc3RyaW5nLCBWZWN0b3I8
VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+PiBtYXRjaGVzLCBpbnQzMl90IGZpcnN0SW5kZXhBZnRl
clNlbGVjdGlvbikKICAgICBEaWRHZXRJbWFnZUZvckZpbmRNYXRjaChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlIGNvbnRlbnRJbWFnZUhhbmRsZSwgdWludDMyX3QgbWF0Y2hJbmRleCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVhY2M5NTE5NzdkMGZlMDFlM2VjMWU5MjZmOWY1MmE5NzBhOWMzYjgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRl
ckNsaWVudC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdLVGV4dEZp
bmRlckNsaWVudF9oCisjZGVmaW5lIFdLVGV4dEZpbmRlckNsaWVudF9oCisKKyNpbXBvcnQgPFdl
YktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2lmIFBMQVRGT1JNKE1BQykgJiYgV0tfQVBJX0VOQUJM
RUQKKworT0JKQ19DTEFTUyBOU1ZpZXc7CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2Vi
UGFnZVByb3h5OworfQorCitAaW50ZXJmYWNlIFdLVGV4dEZpbmRlckNsaWVudCA6IE5TT2JqZWN0
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBhZ2U6KFdlYktpdDo6V2ViUGFnZVByb3h5Jilw
YWdlIHZpZXc6KE5TVmlldyAqKXZpZXc7CistICh2b2lkKXdpbGxEZXN0cm95VmlldzooTlNWaWV3
ICopdmlldzsKKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisjZW5kaWYgLy8g
V0tUZXh0RmluZGVyQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9XS1RleHRGaW5kZXJDbGllbnQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThlMjFhYzZkMTEwNjdiMjE0OGFk
OTI0NDVkMzQ4MjViZGQxNjI4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tCkBAIC0wLDAgKzEsMjU5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1RleHRGaW5kZXJDbGllbnQu
aCIKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiQVBJ
RmluZENsaWVudC5oIgorI2ltcG9ydCAiQVBJRmluZE1hdGNoZXNDbGllbnQuaCIKKyNpbXBvcnQg
IldlYkltYWdlLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPEFwcEtpdC9O
U1RleHRGaW5kZXJfUHJpdmF0ZS5oPgorCisvLyBGSVhNRTogSW1wbGVtZW50IHN1cHBvcnQgZm9y
IHJlcGxhY2UuCisvLyBGSVhNRTogSW1wbGVtZW50IHNjcm9sbEZpbmRNYXRjaFRvVmlzaWJsZS4K
Ky8vIEZJWE1FOiBUaGUgTlNUZXh0RmluZGVyIG92ZXJsYXkgZG9lc24ndCBtb3ZlIHdpdGggc2Ny
b2xsaW5nOyB3ZSBzaG91bGQgaGF2ZSBhIG1vZGUgd2hlcmUgd2UgbWFuYWdlIHRoZSBvdmVybGF5
LgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisK
K0BpbnRlcmZhY2UgV0tUZXh0RmluZGVyQ2xpZW50ICgpCisKKy0gKHZvaWQpZGlkRmluZFN0cmlu
Z01hdGNoZXM6KGNvbnN0IFN0cmluZyYpc3RyaW5nIHJlY3RzOihjb25zdCBWZWN0b3I8VmVjdG9y
PEludFJlY3Q+PiYpcmVjdHMgaW5kZXg6KGludDMyX3QpbWF0Y2hJbmRleDsKKy0gKHZvaWQpZGlk
RmluZFN0cmluZzooY29uc3QgU3RyaW5nJilzdHJpbmcgcmVjdHM6KGNvbnN0IFZlY3RvcjxJbnRS
ZWN0PiYpcmVjdHMgaW5kZXg6KGludDMyX3QpbWF0Y2hJbmRleDsKKworLSAodm9pZClnZXRJbWFn
ZUZvck1hdGNoUmVzdWx0OihpZCA8TlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5k
TWF0Y2g+KWZpbmRNYXRjaCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNJbWFnZSAqZ2Vu
ZXJhdGVkSW1hZ2UpKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClkaWRHZXRJbWFnZUZvck1h
dGNoUmVzdWx0OihXZWJJbWFnZSAqKXN0cmluZyBpbmRleDooaW50MzJfdCltYXRjaEluZGV4Owor
CitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBUZXh0RmluZGVyRmluZENsaWVu
dCA6IHB1YmxpYyBBUEk6OkZpbmRNYXRjaGVzQ2xpZW50LCBwdWJsaWMgQVBJOjpGaW5kQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBUZXh0RmluZGVyRmluZENsaWVudChXS1RleHRGaW5k
ZXJDbGllbnQgKnRleHRGaW5kZXJDbGllbnQpCisgICAgICAgIDogbV90ZXh0RmluZGVyQ2xpZW50
KHRleHRGaW5kZXJDbGllbnQpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkRmluZFN0cmluZ01hdGNoZXMoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgY29uc3QgVmVjdG9yPFZlY3RvcjxJbnRSZWN0Pj4mIG1hdGNoUmVjdHMsIGlu
dDMyX3QgaW5kZXgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBbbV90ZXh0RmluZGVyQ2xpZW50
IGRpZEZpbmRTdHJpbmdNYXRjaGVzOnN0cmluZyByZWN0czptYXRjaFJlY3RzIGluZGV4OmluZGV4
XTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0SW1hZ2VGb3JNYXRjaFJlc3VsdChX
ZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkltYWdlKiBpbWFnZSwgaW50MzJfdCBpbmRleCkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIFttX3RleHRGaW5kZXJDbGllbnQgZGlkR2V0SW1hZ2VGb3JNYXRj
aFJlc3VsdDppbWFnZSBpbmRleDppbmRleF07CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRp
ZEZpbmRTdHJpbmcoV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFZl
Y3RvcjxJbnRSZWN0PiYgbWF0Y2hSZWN0cywgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBt
YXRjaEluZGV4KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgW21fdGV4dEZpbmRlckNsaWVudCBk
aWRGaW5kU3RyaW5nOnN0cmluZyByZWN0czptYXRjaFJlY3RzIGluZGV4Om1hdGNoSW5kZXhdOwor
ICAgIH0KKworICAgIFJldGFpblB0cjxXS1RleHRGaW5kZXJDbGllbnQ+IG1fdGV4dEZpbmRlckNs
aWVudDsKK307CisgICAgCit9CisKK0BpbnRlcmZhY2UgV0tUZXh0RmluZGVyTWF0Y2ggOiBOU09i
amVjdCA8TlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kTWF0Y2g+CisKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgdW5zaWduZWQgaW5kZXg7CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdLVGV4dEZpbmRlck1hdGNoIHsKKyAgICBXS1RleHRGaW5kZXJDbGllbnQg
Kl9jbGllbnQ7CisgICAgTlNWaWV3ICpfdmlldzsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gX3Jl
Y3RzOworICAgIHVuc2lnbmVkIF9pbmRleDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q2xpZW50OihXS1RleHRGaW5kZXJDbGllbnQgKiljbGllbnQgdmlldzooTlNWaWV3ICopdmlldyBp
bmRleDoodW5zaWduZWQpaW5kZXggcmVjdHM6KE5TQXJyYXkgKilyZWN0cworeworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07CisKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBfY2xpZW50ID0gY2xpZW50OworICAgIF92aWV3ID0gdmlldzsKKyAgICBfcmVjdHMgPSBy
ZWN0czsKKyAgICBfaW5kZXggPSBpbmRleDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChO
U1ZpZXcgKiljb250YWluaW5nVmlldworeworICAgIHJldHVybiBfdmlldzsKK30KKworLSAoTlNB
cnJheSAqKXRleHRSZWN0cworeworICAgIHJldHVybiBfcmVjdHMuZ2V0KCk7Cit9CisKKy0gKHZv
aWQpZ2VuZXJhdGVUZXh0SW1hZ2U6KHZvaWQgKF4pKE5TSW1hZ2UgKmdlbmVyYXRlZEltYWdlKSlj
b21wbGV0aW9uSGFuZGxlcgoreworICAgIFtfY2xpZW50IGdldEltYWdlRm9yTWF0Y2hSZXN1bHQ6
c2VsZiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Cit9CisKKy0gKHVuc2ln
bmVkKWluZGV4Cit7CisgICAgcmV0dXJuIF9pbmRleDsKK30KKworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gV0tUZXh0RmluZGVyQ2xpZW50IHsKKyAgICBXZWJLaXQ6OldlYlBhZ2VQcm94eSAqX3Bh
Z2U7CisgICAgTlNWaWV3ICpfdmlldzsKKworICAgIFJldGFpblB0cjxOU1Byb2dyZXNzPiBfY3Vy
cmVudFByb2dyZXNzOworCisgICAgdm9pZCAoXl9yZXN1bHRDb2xsZWN0b3IpKE5TQXJyYXkgKm1h
dGNoZXMsIEJPT0wgZGlkV3JhcCk7CisgICAgdm9pZCAoXl9pbWFnZUNhbGxiYWNrKShOU0ltYWdl
ICopOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYWdlOihXZWJQYWdlUHJveHkmKXBh
Z2UgdmlldzooTlNWaWV3ICopdmlldworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisKKyAg
ICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfcGFnZSA9ICZwYWdlOwor
ICAgIF92aWV3ID0gdmlldzsKKyAgICAKKyAgICBfcGFnZS0+c2V0RmluZE1hdGNoZXNDbGllbnQo
c3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OlRleHRGaW5kZXJGaW5kQ2xpZW50PihzZWxmKSk7Cisg
ICAgX3BhZ2UtPnNldEZpbmRDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OlRleHRGaW5k
ZXJGaW5kQ2xpZW50PihzZWxmKSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCl3
aWxsRGVzdHJveVZpZXc6KE5TVmlldyAqKXZpZXcKK3sKKyAgICBfcGFnZSA9IG51bGxwdHI7Cisg
ICAgX3ZpZXcgPSBuaWw7Cit9CisKKyNwcmFnbWEgbWFyayAtIE5TVGV4dEZpbmRlckNsaWVudCBT
UEkKKworLSAodm9pZClmaW5kTWF0Y2hlc0ZvclN0cmluZzooTlNTdHJpbmcgKil0YXJnZXRTdHJp
bmcgcmVsYXRpdmVUb01hdGNoOihpZCA8TlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRG
aW5kTWF0Y2g+KXJlbGF0aXZlTWF0Y2ggZmluZE9wdGlvbnM6KE5TVGV4dEZpbmRlckFzeW5jaHJv
bm91c0RvY3VtZW50RmluZE9wdGlvbnMpZmluZE9wdGlvbnMgbWF4UmVzdWx0czooTlNVSW50ZWdl
ciltYXhSZXN1bHRzIHJlc3VsdENvbGxlY3Rvcjoodm9pZCAoXikoTlNBcnJheSAqbWF0Y2hlcywg
Qk9PTCBkaWRXcmFwKSlyZXN1bHRDb2xsZWN0b3IKK3sKKyAgICB1bnNpZ25lZCBraXRGaW5kT3B0
aW9ucyA9IDA7CisKKyAgICBpZiAoZmluZE9wdGlvbnMgJiBOU1RleHRGaW5kZXJBc3luY2hyb25v
dXNEb2N1bWVudEZpbmRPcHRpb25zQmFja3dhcmRzKQorICAgICAgICBraXRGaW5kT3B0aW9ucyB8
PSBXZWJLaXQ6OkZpbmRPcHRpb25zQmFja3dhcmRzOworICAgIGlmIChmaW5kT3B0aW9ucyAmIE5T
VGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE9wdGlvbnNXcmFwKQorICAgICAgICBr
aXRGaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zV3JhcEFyb3VuZDsKKyAgICBpZiAo
ZmluZE9wdGlvbnMgJiBOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25z
Q2FzZUluc2Vuc2l0aXZlKQorICAgICAgICBraXRGaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRP
cHRpb25zQ2FzZUluc2Vuc2l0aXZlOworICAgIGlmIChmaW5kT3B0aW9ucyAmIE5TVGV4dEZpbmRl
ckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE9wdGlvbnNTdGFydHNXaXRoKQorICAgICAgICBraXRG
aW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zQXRXb3JkU3RhcnRzOworCisgICAgX2N1
cnJlbnRQcm9ncmVzcyA9IFtOU1Byb2dyZXNzIHByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjFd
OworCisgICAgaWYgKG1heFJlc3VsdHMgPT0gMSkKKyAgICAgICAgX3BhZ2UtPmZpbmRTdHJpbmco
dGFyZ2V0U3RyaW5nLCBzdGF0aWNfY2FzdDxXZWJLaXQ6OkZpbmRPcHRpb25zPihraXRGaW5kT3B0
aW9ucyksIG1heFJlc3VsdHMpOworICAgIGVsc2UKKyAgICAgICAgX3BhZ2UtPmZpbmRTdHJpbmdN
YXRjaGVzKHRhcmdldFN0cmluZywgc3RhdGljX2Nhc3Q8V2ViS2l0OjpGaW5kT3B0aW9ucz4oa2l0
RmluZE9wdGlvbnMpLCBtYXhSZXN1bHRzKTsKKworICAgIF9yZXN1bHRDb2xsZWN0b3IgPSBCbG9j
a19jb3B5KHJlc3VsdENvbGxlY3Rvcik7Cit9CisKKy0gKHZvaWQpZ2V0U2VsZWN0ZWRUZXh0Oih2
b2lkICheKShOU1N0cmluZyAqc2VsZWN0ZWRUZXh0U3RyaW5nKSljb21wbGV0aW9uSGFuZGxlcgor
eworICAgIHZvaWQgKF5jb3BpZWRDb21wbGV0aW9uSGFuZGxlcikoTlNTdHJpbmcgKikgPSBCbG9j
a19jb3B5KGNvbXBsZXRpb25IYW5kbGVyKTsKKworICAgIF9wYWdlLT5nZXRTZWxlY3Rpb25PckNv
bnRlbnRzQXNTdHJpbmcoW2NvcGllZENvbXBsZXRpb25IYW5kbGVyXSAoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIENhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICAgICAgY29waWVkQ29tcGxldGlvbkhh
bmRsZXIoc3RyaW5nKTsKKyAgICAgICAgQmxvY2tfcmVsZWFzZShjb3BpZWRDb21wbGV0aW9uSGFu
ZGxlcik7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpc2VsZWN0RmluZE1hdGNoOihpZCA8TlNUZXh0
RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kTWF0Y2g+KWZpbmRNYXRjaCBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBBU1NFUlQo
W2ZpbmRNYXRjaCBpc0tpbmRPZkNsYXNzOltXS1RleHRGaW5kZXJNYXRjaCBjbGFzc11dKTsKKyAg
ICBBU1NFUlQoIWNvbXBsZXRpb25IYW5kbGVyKTsKKworICAgIFdLVGV4dEZpbmRlck1hdGNoICp0
ZXh0RmluZGVyTWF0Y2ggPSBzdGF0aWNfY2FzdDxXS1RleHRGaW5kZXJNYXRjaCAqPihmaW5kTWF0
Y2gpOworICAgIF9wYWdlLT5zZWxlY3RGaW5kTWF0Y2godGV4dEZpbmRlck1hdGNoLmluZGV4KTsK
K30KKworI3ByYWdtYSBtYXJrIC0gRmluZE1hdGNoZXNDbGllbnQKKworLSAodm9pZClkaWRGaW5k
U3RyaW5nTWF0Y2hlczooY29uc3QgU3RyaW5nJilzdHJpbmcgcmVjdHM6KGNvbnN0IFZlY3RvcjxW
ZWN0b3I8SW50UmVjdD4+JilyZWN0c0Zvck1hdGNoZXMgaW5kZXg6KGludDMyX3QpbWF0Y2hJbmRl
eAoreworICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSByZWN0c0Zvck1hdGNoZXMuc2l6ZSgpOwor
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gbWF0Y2hPYmplY3RzID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om1hdGNoQ291bnRdKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hDb3VudDsgaSsrKSB7CisgICAgICAgIGF1dG8g
bWF0Y2hSZWN0cyA9IHJlY3RzRm9yTWF0Y2hlc1tpXTsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PiBuc01hdGNoUmVjdHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6bWF0Y2hSZWN0cy5zaXplKCldKTsKKyAgICAgICAgZm9yIChhdXRv
IHJlY3QgOiBtYXRjaFJlY3RzKQorICAgICAgICAgICAgW25zTWF0Y2hSZWN0cyBhZGRPYmplY3Q6
W05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XV07CisKKyAgICAgICAgUmV0YWluUHRyPFdLVGV4
dEZpbmRlck1hdGNoPiBtYXRjaCA9IGFkb3B0TlMoW1tXS1RleHRGaW5kZXJNYXRjaCBhbGxvY10g
aW5pdFdpdGhDbGllbnQ6c2VsZiB2aWV3Ol92aWV3IGluZGV4OmkgcmVjdHM6bnNNYXRjaFJlY3Rz
LmdldCgpXSk7CisgICAgICAgIFttYXRjaE9iamVjdHMgYWRkT2JqZWN0Om1hdGNoLmdldCgpXTsK
KyAgICB9CisKKyAgICBfcmVzdWx0Q29sbGVjdG9yKG1hdGNoT2JqZWN0cy5nZXQoKSwgTk8pOwor
ICAgIFtfY3VycmVudFByb2dyZXNzIHNldENvbXBsZXRlZFVuaXRDb3VudDoxXTsKKworICAgIEJs
b2NrX3JlbGVhc2UoX3Jlc3VsdENvbGxlY3Rvcik7Cit9CisKKy0gKHZvaWQpZGlkR2V0SW1hZ2VG
b3JNYXRjaFJlc3VsdDooV2ViSW1hZ2UgKilpbWFnZSBpbmRleDooaW50MzJfdCltYXRjaEluZGV4
Cit7CisgICAgX2ltYWdlQ2FsbGJhY2soW1tbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdl
OmltYWdlLT5iaXRtYXAoKS0+bWFrZUNHSW1hZ2UoKS5nZXQoKSBzaXplOk5TWmVyb1NpemVdIGF1
dG9yZWxlYXNlXSk7CisgICAgQmxvY2tfcmVsZWFzZShfaW1hZ2VDYWxsYmFjayk7Cit9CisKKyNw
cmFnbWEgbWFyayAtIEZpbmRDbGllbnQKKworLSAodm9pZClkaWRGaW5kU3RyaW5nOihjb25zdCBT
dHJpbmcmKXN0cmluZyByZWN0czooY29uc3QgVmVjdG9yPEludFJlY3Q+JilyZWN0cyBpbmRleDoo
aW50MzJfdCltYXRjaEluZGV4Cit7CisgICAgW3NlbGYgZGlkRmluZFN0cmluZ01hdGNoZXM6c3Ry
aW5nIHJlY3RzOnsgcmVjdHMgfSBpbmRleDptYXRjaEluZGV4XTsKK30KKworI3ByYWdtYSBtYXJr
IC0gV0tUZXh0RmluZGVyTWF0Y2ggY2FsbGJhY2tzCisKKy0gKHZvaWQpZ2V0SW1hZ2VGb3JNYXRj
aFJlc3VsdDooaWQgPE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNoPilm
aW5kTWF0Y2ggY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TSW1hZ2UgKmdlbmVyYXRlZElt
YWdlKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIEFTU0VSVChbZmluZE1hdGNoIGlzS2luZE9m
Q2xhc3M6W1dLVGV4dEZpbmRlck1hdGNoIGNsYXNzXV0pOworCisgICAgV0tUZXh0RmluZGVyTWF0
Y2ggKnRleHRGaW5kZXJNYXRjaCA9IHN0YXRpY19jYXN0PFdLVGV4dEZpbmRlck1hdGNoICo+KGZp
bmRNYXRjaCk7CisKKyAgICBfaW1hZ2VDYWxsYmFjayA9IEJsb2NrX2NvcHkoY29tcGxldGlvbkhh
bmRsZXIpOworICAgIF9wYWdlLT5nZXRJbWFnZUZvckZpbmRNYXRjaCh0ZXh0RmluZGVyTWF0Y2gu
aW5kZXgpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzM1ODRh
MGYzODQ3NTdiMzlkOTdlOTJkYWVlOTg5YmM2NDFkN2NiYi4uYjVjMjE5MTA2NTViNDJhZGNkMThk
YzNkYzU2ZWQxZDJhOGU5YjUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCTJERDEyQTA4MUE4
MTc3RjMwMDJDNzRFNiAvKiBXS1BhZ2VSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkREMTJBMDcxQTgxNzdGMzAw
MkM3NEU2IC8qIFdLUGFnZVJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkREMTNCRDUxOEY3REFERDAwRTEz
MEExIC8qIEZpbmRDb250cm9sbGVySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkREMTNCRDMxOEY3REFERDAwRTEzMEExIC8qIEZpbmRDb250cm9s
bGVySU9TLm1tICovOyB9OwogCQkyREQ2N0EyRTFCRDgxOTczMDA1M0IyNTEgLyogQVBJRmluZE1h
dGNoZXNDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJERDY3QTJEMUJEODE5NzMwMDUzQjI1MSAvKiBBUElGaW5kTWF0Y2hlc0NsaWVudC5oICov
OyB9OworCQkyREQ2N0EzNTFCRDg2MTA2MDA1M0IyNTEgLyogV0tUZXh0RmluZGVyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ2N0EzMzFC
RDg2MTA2MDA1M0IyNTEgLyogV0tUZXh0RmluZGVyQ2xpZW50LmggKi87IH07CisJCTJERDY3QTM2
MUJEODYxMDYwMDUzQjI1MSAvKiBXS1RleHRGaW5kZXJDbGllbnQubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ2N0EzNDFCRDg2MTA2MDA1M0IyNTEg
LyogV0tUZXh0RmluZGVyQ2xpZW50Lm1tICovOyB9OwogCQkyREQ5RUIyRDFBNkYwMTI1MDBCQjEy
NjcgLyogQVBJTmF2aWdhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkREOUVCMkMxQTZGMDEyNTAwQkIxMjY3IC8qIEFQSU5hdmlnYXRp
b25DbGllbnQuaCAqLzsgfTsKIAkJMkRERTBBRkExODI5OENDOTAwRjk3RUFBIC8qIFJlbW90ZUxh
eWVyVHJlZVByb3BlcnR5QXBwbGllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkRERTBBRjgxODI5OENDOTAwRjk3RUFBIC8qIFJlbW90ZUxheWVyVHJl
ZVByb3BlcnR5QXBwbGllci5oICovOyB9OwogCQkyRERFMEFGQjE4Mjk4Q0M5MDBGOTdFQUEgLyog
UmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTBBRjkxODI5OENDOTAwRjk3RUFBIC8qIFJlbW90
ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbSAqLzsgfTsKQEAgLTI4NzUsNiArMjg3Nyw4IEBA
CiAJCTJERDEyQTA3MUE4MTc3RjMwMDJDNzRFNiAvKiBXS1BhZ2VSZW5kZXJpbmdQcm9ncmVzc0V2
ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1BhZ2VSZW5kZXJpbmdQ
cm9ncmVzc0V2ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREQxM0JEMzE4
RjdEQUREMDBFMTMwQTEgLyogRmluZENvbnRyb2xsZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBGaW5kQ29udHJvbGxlcklPUy5tbTsgcGF0aCA9IGlvcy9G
aW5kQ29udHJvbGxlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRENjdB
MkQxQkQ4MTk3MzAwNTNCMjUxIC8qIEFQSUZpbmRNYXRjaGVzQ2xpZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUZpbmRNYXRjaGVzQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTJERDY3QTMzMUJEODYxMDYwMDUzQjI1MSAvKiBXS1RleHRGaW5k
ZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tUZXh0RmluZGVy
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJERDY3QTM0MUJEODYxMDYw
MDUzQjI1MSAvKiBXS1RleHRGaW5kZXJDbGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS1RleHRGaW5kZXJDbGllbnQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJERDlFQjJDMUE2RjAxMjUwMEJCMTI2NyAvKiBBUElOYXZpZ2F0aW9uQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSU5hdmlnYXRpb25DbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRERTBBRjgxODI5OENDOTAwRjk3
RUFBIC8qIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRERTBBRjkxODI5OENDOTAwRjk3RUFBIC8qIFJlbW90
ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxMDcsNiArNzExMSw4IEBACiAJCQkJMEZDQjRFNUQxOEJC
RTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3Lm1tICovLAogCQkJCTUxM0U0NjJCMUFEODM3
NTYwMDE2MjM0QSAvKiBXS1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdhdGUuaCAqLywKIAkJCQk1
MTNFNDYyQzFBRDgzNzU2MDAxNjIzNEEgLyogV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRl
Lm1tICovLAorCQkJCTJERDY3QTMzMUJEODYxMDYwMDUzQjI1MSAvKiBXS1RleHRGaW5kZXJDbGll
bnQuaCAqLywKKwkJCQkyREQ2N0EzNDFCRDg2MTA2MDA1M0IyNTEgLyogV0tUZXh0RmluZGVyQ2xp
ZW50Lm1tICovLAogCQkJCTBGQ0I0RTVFMThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1RleHRJbnB1dFdp
bmRvd0NvbnRyb2xsZXIuaCAqLywKIAkJCQkwRkNCNEU1RjE4QkJFM0Q5MDAwRkNGQzkgLyogV0tU
ZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm1tICovLAogCQkJCTJEMjhBNDk1MUFGOTY1QTEwMEYx
OTBDOSAvKiBXS1ZpZXdMYXlvdXRTdHJhdGVneS5oICovLApAQCAtODE3OCw2ICs4MTg0LDcgQEAK
IAkJCQlEM0I5NDg0OTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTQ4MzJENzFBOUNERjk2MDA4QjRERkUgLyogV2Vic2l0ZURhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDgzMkQxMUE5QkRDMkYwMDhCNERGRSAvKiBXZWJzaXRl
RGF0YVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkRENjdBMzUxQkQ4NjEwNjAwNTNCMjUx
IC8qIFdLVGV4dEZpbmRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1M0MyQUExQTMy
NTczMDAwNEU4QzcwIC8qIFdlYnNpdGVEYXRhU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTgz
NjAzNEEwMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBNTJDMEY4MUEzOENEQzcwMDE2MTYwQSAvKiBXZWJTdG9yYWdlTmFt
ZXNwYWNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtOTUyOCw2ICs5NTM1LDcgQEAKIAkJ
CQlFMTc5RkQ5RjEzNEQzODI1MDAxNUI4ODMgLyogQXJndW1lbnRDb2RlcnNNYWMubW0gaW4gU291
cmNlcyAqLywKIAkJCQlCQzAzMkRBNTEwRjQzN0QxMDA1OEMxNUEgLyogQXJndW1lbnREZWNvZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDMyREE3MTBGNDM3RDEwMDU4QzE1QSAvKiBBcmd1
bWVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkRENjdBMzYxQkQ4NjEwNjAwNTNC
MjUxIC8qIFdLVGV4dEZpbmRlckNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUM1OUM0QTU4
MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTVFNzcyNzE4M0RENkY2MDAwNzIwM0YgLyogQXN5bmNSZXF1ZXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDRUU5NjZDMTEyRkFGNTcwMDZCQ0MyNCAvKiBBdHRhY2htZW50
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggMzAzZTFiNzMzNmJhMTU3YzgwYjYzNjE3
MjA4M2MzOTU3MTJkNTM2My4uMzA3MGUxNTU3OGE2ZmU3NDgwZTA2ZjZlZDAyNGUwMzc1OGNlNTQ5
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuY3BwCkBAIC0xODAsNyArMTgwLDE0IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OnVw
ZGF0ZUZpbmRVSUFmdGVyUGFnZVNjcm9sbChib29sIGZvdW5kLCBjb25zdCBTdHJpbmcmIHN0cmlu
CiAgICAgICAgICAgICAgICAgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXggLT0gbWF0Y2hDb3VudDsK
ICAgICAgICAgfQogCi0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRGaW5kU3RyaW5nKHN0cmluZywgbWF0Y2hDb3VudCwgbV9mb3VuZFN0cmluZ01hdGNo
SW5kZXgpKTsKKyAgICAgICAgbV9maW5kTWF0Y2hlcy5jbGVhcigpOworICAgICAgICBWZWN0b3I8
SW50UmVjdD4gbWF0Y2hSZWN0czsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3dlYlBhZ2Ut
PmNvcmVQYWdlKCktPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgeworICAgICAgICAgICAgcmFu
Z2UtPmFic29sdXRlVGV4dFJlY3RzKG1hdGNoUmVjdHMpOworICAgICAgICAgICAgbV9maW5kTWF0
Y2hlcy5hcHBlbmQocmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJpbmcoc3RyaW5nLCBtYXRjaFJlY3Rz
LCBtYXRjaENvdW50LCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCkpOwogCiAgICAgICAgIGlmICgh
KG9wdGlvbnMgJiBGaW5kT3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9yKSB8fCAhc2VsZWN0ZWRGcmFt
ZSB8fCAhdXBkYXRlRmluZEluZGljYXRvcigqc2VsZWN0ZWRGcmFtZSwgc2hvdWxkU2hvd092ZXJs
YXkpKQogICAgICAgICAgICAgaGlkZUZpbmRJbmRpY2F0b3IoKTsKQEAgLTIyMSwxMyArMjI4LDE1
IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnCiAgICAgICAgICAgICBpZiAoZnMuc2VsZWN0aW9u
Qm91bmRzKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgbV9maW5kTWF0Y2hlcy5jbGVh
cigpOwogICAgICAgICAgICAgICAgIGludCBpbmRleEZvclNlbGVjdGlvbjsKLSAgICAgICAgICAg
ICAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRTdHJpbmdNYXRjaGluZ1JhbmdlcyhzdHJp
bmcsIGNvcmUob3B0aW9ucyksIG1heE1hdGNoQ291bnQsIG1fZmluZE1hdGNoZXMsIGluZGV4Rm9y
U2VsZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRT
dHJpbmdNYXRjaGluZ1JhbmdlcyhzdHJpbmcsIGNvcmVPcHRpb25zLCBtYXhNYXRjaENvdW50LCBt
X2ZpbmRNYXRjaGVzLCBpbmRleEZvclNlbGVjdGlvbik7CiAgICAgICAgICAgICAgICAgbV9mb3Vu
ZFN0cmluZ01hdGNoSW5kZXggPSBpbmRleEZvclNlbGVjdGlvbjsKICAgICAgICAgICAgICAgICBm
b3VuZFN0cmluZ1N0YXJ0c0FmdGVyU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KIAorICAgIG1fZmluZE1hdGNoZXMuY2xlYXIoKTsKKwogICAgIGJvb2wg
Zm91bmQ7CiAgICAgaWYgKHBsdWdpblZpZXcpCiAgICAgICAgIGZvdW5kID0gcGx1Z2luVmlldy0+
ZmluZFN0cmluZyhzdHJpbmcsIGNvcmVPcHRpb25zLCBtYXhNYXRjaENvdW50KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264885</attachid>
            <date>2015-11-05 14:38:23 -0800</date>
            <delta_ts>2015-11-05 15:21:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150907-20151105143724.patch</filename>
            <type>text/plain</type>
            <size>33512</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTExZTNjY2U5Y2I0NGRj
ODUzODk0Y2Y0OTg2MzUzZTc3MWMzMTIwNS4uNmMzMjY4NTQzNWZhYWE5MGJhM2ZkMjI4ZjNlNTgy
ODI5NWZhYzAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU0IEBACiAyMDE1LTExLTA0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCisgICAgICAgIEFkZCBwcmVsaW1p
bmFyeSAoU1BJKSBzdXBwb3J0IGZvciBOU1RleHRGaW5kZXIgb24gV0tXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA5MDcKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzE5MTcxNjI0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL21hYy9BcHBLaXRTUEkuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSUZpbmRDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6RmluZENs
aWVudDo6ZGlkRmluZFN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5j
cHA6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlRmluZENsaWVudCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5zdXJl
VGV4dEZpbmRlckNsaWVudF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZmluZE1hdGNoZXNGb3JT
dHJpbmc6cmVsYXRpdmVUb01hdGNoOmZpbmRPcHRpb25zOm1heFJlc3VsdHM6cmVzdWx0Q29sbGVj
dG9yOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZG9jdW1lbnRDb250YWluZXJWaWV3XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBnZXRTZWxlY3RlZFRleHQ6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBzZWxlY3RGaW5kTWF0Y2g6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL0ZpbmRDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvRmluZENsaWVu
dC5tbToKKyAgICAgICAgKFdlYktpdDo6RmluZENsaWVudDo6ZGlkRmluZFN0cmluZyk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6ZGlkRmluZFN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAg
ICAgICogVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vc3BpL21hYy9BcHBLaXRTUEkuaC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlRleHRGaW5kZXJGaW5kQ2xpZW50OjpUZXh0RmluZGVyRmluZENsaWVudCk6CisgICAgICAgICgt
W1dLVGV4dEZpbmRlck1hdGNoIGluaXRXaXRoQ2xpZW50OnZpZXc6aW5kZXg6cmVjdHM6XSk6Cisg
ICAgICAgICgtW1dLVGV4dEZpbmRlck1hdGNoIGNvbnRhaW5pbmdWaWV3XSk6CisgICAgICAgICgt
W1dLVGV4dEZpbmRlck1hdGNoIHRleHRSZWN0c10pOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJN
YXRjaCBnZW5lcmF0ZVRleHRJbWFnZTpdKToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyTWF0Y2gg
aW5kZXhdKToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyQ2xpZW50IGluaXRXaXRoUGFnZTp2aWV3
Ol0pOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJDbGllbnQgd2lsbERlc3Ryb3lWaWV3Ol0pOgor
ICAgICAgICAoLVtXS1RleHRGaW5kZXJDbGllbnQgZmluZE1hdGNoZXNGb3JTdHJpbmc6cmVsYXRp
dmVUb01hdGNoOmZpbmRPcHRpb25zOm1heFJlc3VsdHM6cmVzdWx0Q29sbGVjdG9yOl0pOgorICAg
ICAgICAoLVtXS1RleHRGaW5kZXJDbGllbnQgZ2V0U2VsZWN0ZWRUZXh0Ol0pOgorICAgICAgICAo
LVtXS1RleHRGaW5kZXJDbGllbnQgc2VsZWN0RmluZE1hdGNoOmNvbXBsZXRpb25IYW5kbGVyOl0p
OgorICAgICAgICAoLVtXS1RleHRGaW5kZXJDbGllbnQgZGlkRmluZFN0cmluZ01hdGNoZXM6cmVj
dHM6aW5kZXg6XSk6CisgICAgICAgICgtW1dLVGV4dEZpbmRlckNsaWVudCBkaWRHZXRJbWFnZUZv
ck1hdGNoUmVzdWx0OmluZGV4Ol0pOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJDbGllbnQgZGlk
RmluZFN0cmluZzpyZWN0czppbmRleDpdKToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyQ2xpZW50
IGdldEltYWdlRm9yTWF0Y2hSZXN1bHQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICog
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9s
bGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpGaW5k
Q29udHJvbGxlcjo6ZmluZFN0cmluZyk6CisKKzIwMTUtMTEtMDQgIFRpbSBIb3J0b24gIDx0aW1v
dGh5X2hvcnRvbkBhcHBsZS5jb20+CisKICAgICAgICAgUkVHUkVTU0lPTiAocjE5MTQ5OSk6IDEw
MCUgcmVwcm8gY3Jhc2ggdW5kZXIgX3ByZXBhcmVGb3JNb3ZlVG9XaW5kb3c6CiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA5MTIKICAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzIzNDAyMTE2PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vc3BpL21hYy9BcHBLaXRTUEkuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3NwaS9tYWMv
QXBwS2l0U1BJLmgKaW5kZXggYTM2Zjg3ODI2YmUxYWM3MWVmZWMxYWVjZjY4NTI5NjU0MmZhNGNi
ZS4uYjM0ZjE5YzBmMGIwNzljMzE1Nzg2YWIyMTFiN2Y1YzM3NzBkOTliMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vc3BpL21hYy9BcHBLaXRTUEkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9zcGkvbWFjL0FwcEtpdFNQSS5oCkBAIC0yMyw5ICsyMywxMiBAQAog
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiBQTEFURk9STShN
QUMpCisKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiAjaW1wb3J0IDxBcHBLaXQvTlNB
Y2Nlc3NpYmlsaXR5UmVtb3RlVUlFbGVtZW50Lmg+CisjaW1wb3J0IDxBcHBLaXQvTlNUZXh0Rmlu
ZGVyX1ByaXZhdGUuaD4KIAogI2Vsc2UKIApAQCAtMzUsNiArMzgsMjkgQEAKIAogQGVuZAogCit0
eXBlZGVmIGVudW0gOiBOU1VJbnRlZ2VyIHsKKyAgICBOU1RleHRGaW5kZXJBc3luY2hyb25vdXNE
b2N1bWVudEZpbmRPcHRpb25zQmFja3dhcmRzID0gMSA8PCAwLAorICAgIE5TVGV4dEZpbmRlckFz
eW5jaHJvbm91c0RvY3VtZW50RmluZE9wdGlvbnNXcmFwID0gMSA8PCAxLAorICAgIE5TVGV4dEZp
bmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUgPSAxIDw8
IDIsCisgICAgTlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9uc1N0YXJ0
c1dpdGggPSAxIDw8IDMsCit9IE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE9w
dGlvbnM7CisKK0Bwcm90b2NvbCBOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRN
YXRjaCA8TlNPYmplY3Q+CitAcmVxdWlyZWQKK0Bwcm9wZXJ0eSAocmV0YWluLCBub25hdG9taWMs
IHJlYWRvbmx5KSBOU1ZpZXcgKmNvbnRhaW5pbmdWaWV3OworQHByb3BlcnR5IChyZXRhaW4sIG5v
bmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKnRleHRSZWN0czsKKy0gKHZvaWQpZ2VuZXJhdGVU
ZXh0SW1hZ2U6KHZvaWQgKF4pKE5TSW1hZ2UgKikpY29tcGxldGlvbkhhbmRsZXI7CitAZW5kCisK
K0BpbnRlcmZhY2UgTlNPYmplY3QgKCkKKworLSAodm9pZClmaW5kTWF0Y2hlc0ZvclN0cmluZzoo
TlNTdHJpbmcgKil0YXJnZXRTdHJpbmcgcmVsYXRpdmVUb01hdGNoOihpZCA8TlNUZXh0RmluZGVy
QXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kTWF0Y2g+KXJlbGF0aXZlTWF0Y2ggZmluZE9wdGlvbnM6
KE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE9wdGlvbnMpZmluZE9wdGlvbnMg
bWF4UmVzdWx0czooTlNVSW50ZWdlciltYXhSZXN1bHRzIHJlc3VsdENvbGxlY3Rvcjoodm9pZCAo
XikoTlNBcnJheSAqbWF0Y2hlcywgQk9PTCBkaWRXcmFwKSlyZXN1bHRDb2xsZWN0b3I7CistIChO
U1ZpZXcgKilkb2N1bWVudENvbnRhaW5lclZpZXc7CistICh2b2lkKWdldFNlbGVjdGVkVGV4dDoo
dm9pZCAoXikoTlNTdHJpbmcgKnNlbGVjdGVkVGV4dFN0cmluZykpY29tcGxldGlvbkhhbmRsZXI7
CistICh2b2lkKXNlbGVjdEZpbmRNYXRjaDooaWQgPE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0Rv
Y3VtZW50RmluZE1hdGNoPilmaW5kTWF0Y2ggY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZv
aWQpKWNvbXBsZXRpb25IYW5kbGVyOworCitAZW5kCisKICNlbmRpZiAvLyBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQogCiBAaW50ZXJmYWNlIE5TQXBwbGljYXRpb24gKCkKQEAgLTQzLDMgKzY5LDUg
QEAKIC0gKHZvaWQpX3NldEN1cnJlbnRFdmVudDooTlNFdmVudCAqKWV2ZW50OwogCiBAZW5kCisK
KyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0FQSUZpbmRDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJRmluZENsaWVudC5oCmluZGV4IDAwYmRlYzk2NDBjNzUxZTVhOGIyN2FiZjUzYTViNWVhYjI3
ZTQ1MDIuLjBhYmY4ZjY3MzkyNmM3NmQ2ODljZTc3NjJlM2NhODc2MGIwZDc3NGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJRmluZENsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJRmluZENsaWVudC5oCkBAIC0yOCw2ICsyOCwx
MCBAQAogCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIEludFJlY3Q7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2Vi
UGFnZVByb3h5OwogfQpAQCAtMzksNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+Rmlu
ZENsaWVudCgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZENvdW50U3RyaW5nTWF0Y2hlcyhX
ZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJiwgdWludDMyX3QpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29u
c3QgV1RGOjpTdHJpbmcmLCB1aW50MzJfdCwgaW50MzJfdCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGRpZEZpbmRTdHJpbmcoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0cmluZyYs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgbWF0Y2hSZWN0cywgdWludDMyX3QsIGlu
dDMyX3QpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKFdlYktpdDo6
V2ViUGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKaW5kZXggYWM1N2QzZGI1Y2VlNDllZmI4YmJi
MDVhMzZlYjBhMDVmOWY4NzUwMC4uYmU3ZmM0MjI1MTkyNjEyNjBmMzljODAzNjAyNjQyZGIxYjk5
YjllMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKQEAgLTg4
Nyw3ICs4ODcsNyBAQCB2b2lkIFdLUGFnZVNldFBhZ2VGaW5kQ2xpZW50KFdLUGFnZVJlZiBwYWdl
UmVmLCBjb25zdCBXS1BhZ2VGaW5kQ2xpZW50QmFzZSogd2tDbAogICAgICAgICB9CiAKICAgICBw
cml2YXRlOgotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkq
IHBhZ2UsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENvdW50LCBpbnQzMl90
KSBvdmVycmlkZQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0cmluZyhXZWJQYWdlUHJv
eHkqIHBhZ2UsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50
UmVjdD4mLCB1aW50MzJfdCBtYXRjaENvdW50LCBpbnQzMl90KSBvdmVycmlkZQogICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmRpZEZpbmRTdHJpbmcpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlldy5tbQppbmRleCBlMGJhYjM3M2VjZWFhODM5ZGY4YzE2ZDIwYTA5ZjYyYjRhY2Y5NWU4Li45
YTlhYjUwZWRjMWM1YzU0MjUwYWI5ZGU5YjRmODYwNTVjM2QxYjA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtMzEsNiArMzEsNyBA
QAogI2ltcG9ydCAiQVBJRm9ybUNsaWVudC5oIgogI2ltcG9ydCAiQVBJUGFnZUNvbmZpZ3VyYXRp
b24uaCIKICNpbXBvcnQgIkFQSVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2ltcG9ydCAiQXBw
S2l0U1BJLmgiCiAjaW1wb3J0ICJDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyLmgiCiAjaW1w
b3J0ICJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIgogI2ltcG9ydCAiRmluZENsaWVudC5oIgpA
QCAtMTQ0LDYgKzE0NSw3IEBAIGVudW0gY2xhc3MgRHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSB7
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgIldLVGV4dEZpbmRlckNsaWVu
dC5oIgogI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JN
YWMuaD4KIApAQCAtMjM1LDYgKzIzNyw3IEBAIFdLV2ViVmlldyogZnJvbVdlYlBhZ2VQcm94eShX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYgcGFnZSkKICNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpXZWJWaWV3SW1wbD4gX2ltcGw7CisgICAgUmV0YWlu
UHRyPFdLVGV4dEZpbmRlckNsaWVudD4gX3RleHRGaW5kZXJDbGllbnQ7CiAjZW5kaWYKIH0KIApA
QCAtMjY0NCw2ICsyNjQ3LDMzIEBAIFdFQkNPUkVfQ09NTUFORCh5YW5rQW5kU2VsZWN0KQogfQog
I2VuZGlmCiAKKy0gKFdLVGV4dEZpbmRlckNsaWVudCAqKV9lbnN1cmVUZXh0RmluZGVyQ2xpZW50
Cit7CisgICAgaWYgKCFfdGV4dEZpbmRlckNsaWVudCkKKyAgICAgICAgX3RleHRGaW5kZXJDbGll
bnQgPSBhZG9wdE5TKFtbV0tUZXh0RmluZGVyQ2xpZW50IGFsbG9jXSBpbml0V2l0aFBhZ2U6Kl9w
YWdlIHZpZXc6c2VsZl0pOworICAgIHJldHVybiBfdGV4dEZpbmRlckNsaWVudC5nZXQoKTsKK30K
KworLSAodm9pZClmaW5kTWF0Y2hlc0ZvclN0cmluZzooTlNTdHJpbmcgKil0YXJnZXRTdHJpbmcg
cmVsYXRpdmVUb01hdGNoOihpZCA8TlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5k
TWF0Y2g+KXJlbGF0aXZlTWF0Y2ggZmluZE9wdGlvbnM6KE5TVGV4dEZpbmRlckFzeW5jaHJvbm91
c0RvY3VtZW50RmluZE9wdGlvbnMpZmluZE9wdGlvbnMgbWF4UmVzdWx0czooTlNVSW50ZWdlcilt
YXhSZXN1bHRzIHJlc3VsdENvbGxlY3Rvcjoodm9pZCAoXikoTlNBcnJheSAqbWF0Y2hlcywgQk9P
TCBkaWRXcmFwKSlyZXN1bHRDb2xsZWN0b3IKK3sKKyAgICBbW3NlbGYgX2Vuc3VyZVRleHRGaW5k
ZXJDbGllbnRdIGZpbmRNYXRjaGVzRm9yU3RyaW5nOnRhcmdldFN0cmluZyByZWxhdGl2ZVRvTWF0
Y2g6cmVsYXRpdmVNYXRjaCBmaW5kT3B0aW9uczpmaW5kT3B0aW9ucyBtYXhSZXN1bHRzOm1heFJl
c3VsdHMgcmVzdWx0Q29sbGVjdG9yOnJlc3VsdENvbGxlY3Rvcl07Cit9CisKKy0gKE5TVmlldyAq
KWRvY3VtZW50Q29udGFpbmVyVmlldworeworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWdldFNlbGVjdGVkVGV4dDoodm9pZCAoXikoTlNTdHJpbmcgKnNlbGVjdGVkVGV4dFN0cmluZykp
Y29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBbW3NlbGYgX2Vuc3VyZVRleHRGaW5kZXJDbGllbnRd
IGdldFNlbGVjdGVkVGV4dDpjb21wbGV0aW9uSGFuZGxlcl07Cit9CisKKy0gKHZvaWQpc2VsZWN0
RmluZE1hdGNoOihpZCA8TlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kTWF0Y2g+
KWZpbmRNYXRjaCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhh
bmRsZXIKK3sKKyAgICBbW3NlbGYgX2Vuc3VyZVRleHRGaW5kZXJDbGllbnRdIHNlbGVjdEZpbmRN
YXRjaDpmaW5kTWF0Y2ggY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworfQor
CiAtIChOU1RleHRJbnB1dENvbnRleHQgKilfd2ViX3N1cGVySW5wdXRDb250ZXh0CiB7CiAgICAg
cmV0dXJuIFtzdXBlciBpbnB1dENvbnRleHRdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAppbmRleCA2NjAxNDk3YTliYTAx
YTIzN2I2YmNjNzI5MTJkZDk5ZTE4MDU5YmFhLi42ZjY1ZGFiOTk0YmJmNDdmMTAzMzc5N2ViYzU5
OTVhZDliMDcyODg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaApAQCAtMjMyLDYgKzIzMiwxMCBAQCB0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlKSB7CiAKIEBlbmQKIAorI2lm
ICFUQVJHRVRfT1NfSVBIT05FCitAaW50ZXJmYWNlIFdLV2ViVmlldyAoV0tOU1RleHRGaW5kZXJD
bGllbnQpIDxOU1RleHRGaW5kZXJDbGllbnQ+CitAZW5kCisjZW5kaWYKIAogQGludGVyZmFjZSBX
S1dlYlZpZXcgKFdLVGVzdGluZykKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NvY29hL0ZpbmRDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9G
aW5kQ2xpZW50LmgKaW5kZXggM2MxYzE0NWU0ZDRiMmQyODUyZDgwYjJmNDFmMmI2OGE1Nzg5NWZk
ZC4uYWE2ZjcwOTIyYjUyNDU3OGYwMDQzNTgxMjlhYmI5OWJlYzdlOTM2NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5oCkBAIC00OCw3ICs0OCw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgLy8gRnJvbSBBUEk6OkZpbmRDbGllbnQKICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVzKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYs
IHVpbnQzMl90IG1hdGNoQ291bnQpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nKFdl
YlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3Qg
bWF0Y2hJbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmRTdHJpbmcoV2ViUGFnZVByb3h5
KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiwgdWludDMy
X3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmFpbFRvRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmKTsKICAgICAKICAg
ICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db2NvYS9GaW5kQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L0ZpbmRDbGllbnQubW0KaW5kZXggZGY4ZmFkMGZhNDVmNWNjZjg5OTEzYTYwMTQ5ZWM4OTU2NWI2
ZGNkMy4uNDQ3MjY2Yzc2MWQzZTQ2YjE2MGJkNWI4MDQ0NWIwOGVjOTg3Njk1MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQubW0KQEAgLTU3LDcgKzU3LDcg
QEAgdm9pZCBGaW5kQ2xpZW50OjpkaWRDb3VudFN0cmluZ01hdGNoZXMoV2ViUGFnZVByb3h5Kiwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQKICAgICAgICAgW21fZGVsZWdhdGUuZ2V0KCkgX3dl
YlZpZXc6bV93ZWJWaWV3IGRpZENvdW50TWF0Y2hlczptYXRjaENvdW50IGZvclN0cmluZzpzdHJp
bmddOwogfQogCi12b2lkIEZpbmRDbGllbnQ6OmRpZEZpbmRTdHJpbmcoV2ViUGFnZVByb3h5Kiwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJ
bmRleCkKK3ZvaWQgRmluZENsaWVudDo6ZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25z
dCBTdHJpbmcmIHN0cmluZywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiwgdWludDMy
X3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQogewogICAgIGlmIChtX2RlbGVnYXRl
TWV0aG9kcy53ZWJ2aWV3RGlkRmluZFN0cmluZykKICAgICAgICAgW21fZGVsZWdhdGUuZ2V0KCkg
X3dlYlZpZXc6bV93ZWJWaWV3IGRpZEZpbmRNYXRjaGVzOm1hdGNoQ291bnQgZm9yU3RyaW5nOnN0
cmluZyB3aXRoTWF0Y2hJbmRleDptYXRjaEluZGV4XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggNjlhNTNiNzk3MjM5OTUzNWE0YjQ1NTc3MjU3Nzk0MmU0
ZWYwMjI5MS4uZjU4OWJhYmUyOTExNTFkMDA2ZjFmOTllNmY5NjU1MzgzMjUwYjRkNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTQwNzksOSArNDA3OSw5
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9uUHJvZ3Jlc3Mo
ZmxvYXQgcHJvZ3Jlc3MpCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmRT
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3Qg
bWF0Y2hJbmRleCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5kU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIG1hdGNoUmVjdHMsIHVp
bnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkKIHsKLSAgICBtX2ZpbmRDbGll
bnQtPmRpZEZpbmRTdHJpbmcodGhpcywgc3RyaW5nLCBtYXRjaENvdW50LCBtYXRjaEluZGV4KTsK
KyAgICBtX2ZpbmRDbGllbnQtPmRpZEZpbmRTdHJpbmcodGhpcywgc3RyaW5nLCBtYXRjaFJlY3Rz
LCBtYXRjaENvdW50LCBtYXRjaEluZGV4KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZp
bmRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBWZWN0b3I8VmVjdG9y
PFdlYkNvcmU6OkludFJlY3Q+PiYgbWF0Y2hSZWN0cywgaW50MzJfdCBmaXJzdEluZGV4QWZ0ZXJT
ZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggNjRm
MmRjNjIwMjQ2YjEwZmM2MjFjZDcwNmE5YzlkZGY1Y2EyZmE5OC4uZDJlYzRmMzJjM2YzODI1YmVh
MzFiYzA5MDE0ZGU2NjliOGMwNTgyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaApAQCAtNzUxLDcgKzc1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHRJbmRp
Y2F0b3IoY29uc3QgV2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEmLCB1aW50NjRfdCAvKiBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWUgKi8gbGlmZXRpbWUgPSAwIC8qIFBlcm1h
bmVudCAqLyk7CiAgICAgdm9pZCBzZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9uUHJvZ3Jlc3MoZmxv
YXQpOwogICAgIHZvaWQgY2xlYXJUZXh0SW5kaWNhdG9yKCk7Ci0gICAgdm9pZCBkaWRGaW5kU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRl
eCk7CisgICAgdm9pZCBkaWRGaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpJbnRSZWN0PiYsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRl
eCk7CiAgICAgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZv
aWQgZGlkRmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFZlY3Rv
cjxXZWJDb3JlOjpJbnRSZWN0Pj4mIG1hdGNoUmVjdHMsIGludDMyX3QgZmlyc3RJbmRleEFmdGVy
U2VsZWN0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4KaW5kZXggZjNkYzcyMTdhMWFlZDM1MzBkYzgyMWFhN2EyMDRmNzAxNjFh
ZWMwNy4uMTE0MjkxZWRjZWI5OTcwODBjOTQyZWIzMWRmNDE5ZWM2MGY4ZDc1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0y
MzMsNyArMjMzLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBEaWRDb3VudFN0
cmluZ01hdGNoZXMoU3RyaW5nIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCkKICAgICBTZXRU
ZXh0SW5kaWNhdG9yKHN0cnVjdCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSBpbmRpY2F0b3Is
IHVpbnQ2NF90IGxpZmV0aW1lKQogICAgIENsZWFyVGV4dEluZGljYXRvcigpCi0gICAgRGlkRmlu
ZFN0cmluZyhTdHJpbmcgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENvdW50LCBpbnQzMl90IG1hdGNo
SW5kZXgpCisgICAgRGlkRmluZFN0cmluZyhTdHJpbmcgc3RyaW5nLCBWZWN0b3I8V2ViQ29yZTo6
SW50UmVjdD4gbWF0Y2hSZWN0LCB1aW50MzJfdCBtYXRjaENvdW50LCBpbnQzMl90IG1hdGNoSW5k
ZXgpCiAgICAgRGlkRmFpbFRvRmluZFN0cmluZyhTdHJpbmcgc3RyaW5nKQogICAgIERpZEZpbmRT
dHJpbmdNYXRjaGVzKFN0cmluZyBzdHJpbmcsIFZlY3RvcjxWZWN0b3I8V2ViQ29yZTo6SW50UmVj
dD4+IG1hdGNoZXMsIGludDMyX3QgZmlyc3RJbmRleEFmdGVyU2VsZWN0aW9uKQogICAgIERpZEdl
dEltYWdlRm9yRmluZE1hdGNoKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgY29udGVu
dEltYWdlSGFuZGxlLCB1aW50MzJfdCBtYXRjaEluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWFjYzk1MTk3
N2QwZmUwMWUzZWMxZTkyNmY5ZjUyYTk3MGE5YzNiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50LmgKQEAgLTAsMCArMSw0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0tUZXh0RmluZGVyQ2xpZW50X2gKKyNkZWZpbmUg
V0tUZXh0RmluZGVyQ2xpZW50X2gKKworI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgor
CisjaWYgUExBVEZPUk0oTUFDKSAmJiBXS19BUElfRU5BQkxFRAorCitPQkpDX0NMQVNTIE5TVmll
dzsKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlUHJveHk7Cit9CisKK0BpbnRl
cmZhY2UgV0tUZXh0RmluZGVyQ2xpZW50IDogTlNPYmplY3QKKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUGFnZTooV2ViS2l0OjpXZWJQYWdlUHJveHkmKXBhZ2UgdmlldzooTlNWaWV3ICopdmll
dzsKKy0gKHZvaWQpd2lsbERlc3Ryb3lWaWV3OihOU1ZpZXcgKil2aWV3OworCitAZW5kCisKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCisKKyNlbmRpZiAvLyBXS1RleHRGaW5kZXJDbGllbnRfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGll
bnQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lNjg3NGUwOTJkNzUwZDVhZDBmOGYxZGE1NzBiOTlhMzkwMDBhZGUxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS1RleHRGaW5k
ZXJDbGllbnQubW0KQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIldLVGV4dEZpbmRlckNsaWVudC5oIgorCisjaWYgUExBVEZPUk0oTUFD
KSAmJiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElGaW5kQ2xpZW50LmgiCisjaW1wb3J0
ICJBUElGaW5kTWF0Y2hlc0NsaWVudC5oIgorI2ltcG9ydCAiQXBwS2l0U1BJLmgiCisjaW1wb3J0
ICJXZWJJbWFnZS5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0IDx3dGYvRGVx
dWUuaD4KKworLy8gRklYTUU6IEltcGxlbWVudCBzdXBwb3J0IGZvciByZXBsYWNlLgorLy8gRklY
TUU6IEltcGxlbWVudCBzY3JvbGxGaW5kTWF0Y2hUb1Zpc2libGUuCisvLyBGSVhNRTogVGhlIE5T
VGV4dEZpbmRlciBvdmVybGF5IGRvZXNuJ3QgbW92ZSB3aXRoIHNjcm9sbGluZzsgd2Ugc2hvdWxk
IGhhdmUgYSBtb2RlIHdoZXJlIHdlIG1hbmFnZSB0aGUgb3ZlcmxheS4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitAaW50ZXJmYWNlIFdLVGV4
dEZpbmRlckNsaWVudCAoKQorCistICh2b2lkKWRpZEZpbmRTdHJpbmdNYXRjaGVzOihjb25zdCBT
dHJpbmcmKXN0cmluZyByZWN0czooY29uc3QgVmVjdG9yPFZlY3RvcjxJbnRSZWN0Pj4mKXJlY3Rz
IGluZGV4OihpbnQzMl90KW1hdGNoSW5kZXg7CistICh2b2lkKWRpZEZpbmRTdHJpbmc6KGNvbnN0
IFN0cmluZyYpc3RyaW5nIHJlY3RzOihjb25zdCBWZWN0b3I8SW50UmVjdD4mKXJlY3RzIGluZGV4
OihpbnQzMl90KW1hdGNoSW5kZXg7CistICh2b2lkKWRpZEZhaWxUb0ZpbmRTdHJpbmc6KGNvbnN0
IFN0cmluZyYpc3RyaW5nOworCistICh2b2lkKWdldEltYWdlRm9yTWF0Y2hSZXN1bHQ6KGlkIDxO
U1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4pZmluZE1hdGNoIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShOU0ltYWdlICpnZW5lcmF0ZWRJbWFnZSkpY29tcGxldGlv
bkhhbmRsZXI7CistICh2b2lkKWRpZEdldEltYWdlRm9yTWF0Y2hSZXN1bHQ6KFdlYkltYWdlICop
c3RyaW5nIGluZGV4OihpbnQzMl90KW1hdGNoSW5kZXg7CisKK0BlbmQKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFRleHRGaW5kZXJGaW5kQ2xpZW50IDogcHVibGljIEFQSTo6RmluZE1h
dGNoZXNDbGllbnQsIHB1YmxpYyBBUEk6OkZpbmRDbGllbnQgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IFRleHRGaW5kZXJGaW5kQ2xpZW50KFdLVGV4dEZpbmRlckNsaWVudCAqdGV4dEZpbmRlckNs
aWVudCkKKyAgICAgICAgOiBtX3RleHRGaW5kZXJDbGllbnQodGV4dEZpbmRlckNsaWVudCkKKyAg
ICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nTWF0
Y2hlcyhXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBWZWN0
b3I8VmVjdG9yPEludFJlY3Q+PiYgbWF0Y2hSZWN0cywgaW50MzJfdCBpbmRleCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIFttX3RleHRGaW5kZXJDbGllbnQgZGlkRmluZFN0cmluZ01hdGNoZXM6
c3RyaW5nIHJlY3RzOm1hdGNoUmVjdHMgaW5kZXg6aW5kZXhdOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBkaWRHZXRJbWFnZUZvck1hdGNoUmVzdWx0KFdlYlBhZ2VQcm94eSogcGFnZSwgV2Vi
SW1hZ2UqIGltYWdlLCBpbnQzMl90IGluZGV4KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgW21f
dGV4dEZpbmRlckNsaWVudCBkaWRHZXRJbWFnZUZvck1hdGNoUmVzdWx0OmltYWdlIGluZGV4Omlu
ZGV4XTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0cmluZyhXZWJQYWdlUHJv
eHkqLCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgVmVjdG9yPEludFJlY3Q+JiBtYXRjaFJl
Y3RzLCB1aW50MzJfdCBtYXRjaENvdW50LCBpbnQzMl90IG1hdGNoSW5kZXgpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBbbV90ZXh0RmluZGVyQ2xpZW50IGRpZEZpbmRTdHJpbmc6c3RyaW5nIHJl
Y3RzOm1hdGNoUmVjdHMgaW5kZXg6bWF0Y2hJbmRleF07CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6
OlN0cmluZyYgc3RyaW5nKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgW21fdGV4dEZpbmRlckNs
aWVudCBkaWRGYWlsVG9GaW5kU3RyaW5nOnN0cmluZ107CisgICAgfQorCisgICAgUmV0YWluUHRy
PFdLVGV4dEZpbmRlckNsaWVudD4gbV90ZXh0RmluZGVyQ2xpZW50OworfTsKKyAgICAKK30KKwor
QGludGVyZmFjZSBXS1RleHRGaW5kZXJNYXRjaCA6IE5TT2JqZWN0IDxOU1RleHRGaW5kZXJBc3lu
Y2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4KKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSB1bnNpZ25lZCBpbmRleDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tUZXh0Rmlu
ZGVyTWF0Y2ggeworICAgIFdLVGV4dEZpbmRlckNsaWVudCAqX2NsaWVudDsKKyAgICBOU1ZpZXcg
Kl92aWV3OworICAgIFJldGFpblB0cjxOU0FycmF5PiBfcmVjdHM7CisgICAgdW5zaWduZWQgX2lu
ZGV4OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDbGllbnQ6KFdLVGV4dEZpbmRlckNs
aWVudCAqKWNsaWVudCB2aWV3OihOU1ZpZXcgKil2aWV3IGluZGV4Oih1bnNpZ25lZClpbmRleCBy
ZWN0czooTlNBcnJheSAqKXJlY3RzCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKworICAg
IGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9jbGllbnQgPSBjbGllbnQ7
CisgICAgX3ZpZXcgPSB2aWV3OworICAgIF9yZWN0cyA9IHJlY3RzOworICAgIF9pbmRleCA9IGlu
ZGV4OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TVmlldyAqKWNvbnRhaW5pbmdWaWV3
Cit7CisgICAgcmV0dXJuIF92aWV3OworfQorCistIChOU0FycmF5ICopdGV4dFJlY3RzCit7Cisg
ICAgcmV0dXJuIF9yZWN0cy5nZXQoKTsKK30KKworLSAodm9pZClnZW5lcmF0ZVRleHRJbWFnZToo
dm9pZCAoXikoTlNJbWFnZSAqZ2VuZXJhdGVkSW1hZ2UpKWNvbXBsZXRpb25IYW5kbGVyCit7Cisg
ICAgW19jbGllbnQgZ2V0SW1hZ2VGb3JNYXRjaFJlc3VsdDpzZWxmIGNvbXBsZXRpb25IYW5kbGVy
OmNvbXBsZXRpb25IYW5kbGVyXTsKK30KKworLSAodW5zaWduZWQpaW5kZXgKK3sKKyAgICByZXR1
cm4gX2luZGV4OworfQorCitAZW5kCisKK3N0cnVjdCBGaW5kTWF0Y2hlc1JlcGx5Q29udGV4dCB7
CisgICAgUmV0YWluUHRyPE5TUHJvZ3Jlc3M+IHByb2dyZXNzOworCisgICAgdm9pZCAoXnJlc3Vs
dENvbGxlY3RvcikoTlNBcnJheSAqbWF0Y2hlcywgQk9PTCBkaWRXcmFwKTsKK307CisKK0BpbXBs
ZW1lbnRhdGlvbiBXS1RleHRGaW5kZXJDbGllbnQgeworICAgIFdlYktpdDo6V2ViUGFnZVByb3h5
ICpfcGFnZTsKKyAgICBOU1ZpZXcgKl92aWV3OworICAgIERlcXVlPEZpbmRNYXRjaGVzUmVwbHlD
b250ZXh0PiBfZmluZFJlcGx5Q29udGV4dHM7CisgICAgRGVxdWU8c3RkOjpmdW5jdGlvbjx2b2lk
KE5TSW1hZ2UgKik+PiBfaW1hZ2VSZXBseUNhbGxiYWNrczsKK30KKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGFnZTooV2ViUGFnZVByb3h5JilwYWdlIHZpZXc6KE5TVmlldyAqKXZpZXcKK3sK
KyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworCisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgX3BhZ2UgPSAmcGFnZTsKKyAgICBfdmlldyA9IHZpZXc7CisgICAgCisg
ICAgX3BhZ2UtPnNldEZpbmRNYXRjaGVzQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8V2ViS2l0OjpU
ZXh0RmluZGVyRmluZENsaWVudD4oc2VsZikpOworICAgIF9wYWdlLT5zZXRGaW5kQ2xpZW50KHN0
ZDo6bWFrZV91bmlxdWU8V2ViS2l0OjpUZXh0RmluZGVyRmluZENsaWVudD4oc2VsZikpOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpd2lsbERlc3Ryb3lWaWV3OihOU1ZpZXcgKil2
aWV3Cit7CisgICAgX3BhZ2UgPSBudWxscHRyOworICAgIF92aWV3ID0gbmlsOworfQorCisjcHJh
Z21hIG1hcmsgLSBOU1RleHRGaW5kZXJDbGllbnQgU1BJCisKKy0gKHZvaWQpZmluZE1hdGNoZXNG
b3JTdHJpbmc6KE5TU3RyaW5nICopdGFyZ2V0U3RyaW5nIHJlbGF0aXZlVG9NYXRjaDooaWQgPE5T
VGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNoPilyZWxhdGl2ZU1hdGNoIGZp
bmRPcHRpb25zOihOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25zKWZp
bmRPcHRpb25zIG1heFJlc3VsdHM6KE5TVUludGVnZXIpbWF4UmVzdWx0cyByZXN1bHRDb2xsZWN0
b3I6KHZvaWQgKF4pKE5TQXJyYXkgKm1hdGNoZXMsIEJPT0wgZGlkV3JhcCkpcmVzdWx0Q29sbGVj
dG9yCit7CisgICAgdW5zaWduZWQga2l0RmluZE9wdGlvbnMgPSAwOworCisgICAgaWYgKGZpbmRP
cHRpb25zICYgTlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9uc0JhY2t3
YXJkcykKKyAgICAgICAga2l0RmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0JhY2t3
YXJkczsKKyAgICBpZiAoZmluZE9wdGlvbnMgJiBOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1
bWVudEZpbmRPcHRpb25zV3JhcCkKKyAgICAgICAga2l0RmluZE9wdGlvbnMgfD0gV2ViS2l0OjpG
aW5kT3B0aW9uc1dyYXBBcm91bmQ7CisgICAgaWYgKGZpbmRPcHRpb25zICYgTlNUZXh0RmluZGVy
QXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkKKyAgICAgICAg
a2l0RmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZTsKKyAg
ICBpZiAoZmluZE9wdGlvbnMgJiBOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRP
cHRpb25zU3RhcnRzV2l0aCkKKyAgICAgICAga2l0RmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5k
T3B0aW9uc0F0V29yZFN0YXJ0czsKKworICAgIEZpbmRNYXRjaGVzUmVwbHlDb250ZXh0IHJlcGx5
Q29udGV4dDsKKyAgICByZXBseUNvbnRleHQucHJvZ3Jlc3MgPSBbTlNQcm9ncmVzcyBwcm9ncmVz
c1dpdGhUb3RhbFVuaXRDb3VudDoxXTsKKyAgICByZXBseUNvbnRleHQucmVzdWx0Q29sbGVjdG9y
ID0gQmxvY2tfY29weShyZXN1bHRDb2xsZWN0b3IpOworICAgIF9maW5kUmVwbHlDb250ZXh0cy5h
cHBlbmQoV1RGOjptb3ZlKHJlcGx5Q29udGV4dCkpOworCisgICAgaWYgKG1heFJlc3VsdHMgPT0g
MSkKKyAgICAgICAgX3BhZ2UtPmZpbmRTdHJpbmcodGFyZ2V0U3RyaW5nLCBzdGF0aWNfY2FzdDxX
ZWJLaXQ6OkZpbmRPcHRpb25zPihraXRGaW5kT3B0aW9ucyksIG1heFJlc3VsdHMpOworICAgIGVs
c2UKKyAgICAgICAgX3BhZ2UtPmZpbmRTdHJpbmdNYXRjaGVzKHRhcmdldFN0cmluZywgc3RhdGlj
X2Nhc3Q8V2ViS2l0OjpGaW5kT3B0aW9ucz4oa2l0RmluZE9wdGlvbnMpLCBtYXhSZXN1bHRzKTsK
K30KKworLSAodm9pZClnZXRTZWxlY3RlZFRleHQ6KHZvaWQgKF4pKE5TU3RyaW5nICpzZWxlY3Rl
ZFRleHRTdHJpbmcpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgdm9pZCAoXmNvcGllZENvbXBs
ZXRpb25IYW5kbGVyKShOU1N0cmluZyAqKSA9IEJsb2NrX2NvcHkoY29tcGxldGlvbkhhbmRsZXIp
OworCisgICAgX3BhZ2UtPmdldFNlbGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyhbY29waWVkQ29t
cGxldGlvbkhhbmRsZXJdIChjb25zdCBTdHJpbmcmIHN0cmluZywgQ2FsbGJhY2tCYXNlOjpFcnJv
cikgeworICAgICAgICBjb3BpZWRDb21wbGV0aW9uSGFuZGxlcihzdHJpbmcpOworICAgICAgICBC
bG9ja19yZWxlYXNlKGNvcGllZENvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB9KTsKK30KKworLSAo
dm9pZClzZWxlY3RGaW5kTWF0Y2g6KGlkIDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVu
dEZpbmRNYXRjaD4pZmluZE1hdGNoIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlcgoreworICAgIEFTU0VSVChbZmluZE1hdGNoIGlzS2luZE9mQ2xhc3M6
W1dLVGV4dEZpbmRlck1hdGNoIGNsYXNzXV0pOworICAgIEFTU0VSVCghY29tcGxldGlvbkhhbmRs
ZXIpOworCisgICAgV0tUZXh0RmluZGVyTWF0Y2ggKnRleHRGaW5kZXJNYXRjaCA9IHN0YXRpY19j
YXN0PFdLVGV4dEZpbmRlck1hdGNoICo+KGZpbmRNYXRjaCk7CisgICAgX3BhZ2UtPnNlbGVjdEZp
bmRNYXRjaCh0ZXh0RmluZGVyTWF0Y2guaW5kZXgpOworfQorCisjcHJhZ21hIG1hcmsgLSBGaW5k
TWF0Y2hlc0NsaWVudAorCistICh2b2lkKWRpZEZpbmRTdHJpbmdNYXRjaGVzOihjb25zdCBTdHJp
bmcmKXN0cmluZyByZWN0czooY29uc3QgVmVjdG9yPFZlY3RvcjxJbnRSZWN0Pj4mKXJlY3RzRm9y
TWF0Y2hlcyBpbmRleDooaW50MzJfdCltYXRjaEluZGV4Cit7CisgICAgaWYgKF9maW5kUmVwbHlD
b250ZXh0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZpbmRNYXRjaGVzUmVw
bHlDb250ZXh0IHJlcGx5Q29udGV4dCA9IF9maW5kUmVwbHlDb250ZXh0cy50YWtlRmlyc3QoKTsK
KyAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gcmVjdHNGb3JNYXRjaGVzLnNpemUoKTsKKyAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1hdGNoT2JqZWN0cyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTptYXRjaENvdW50XSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoQ291bnQ7IGkrKykgeworICAgICAgICBhdXRvIG1hdGNo
UmVjdHMgPSByZWN0c0Zvck1hdGNoZXNbaV07CisgICAgICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gbnNNYXRjaFJlY3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
V2l0aENhcGFjaXR5Om1hdGNoUmVjdHMuc2l6ZSgpXSk7CisgICAgICAgIGZvciAoYXV0byByZWN0
IDogbWF0Y2hSZWN0cykKKyAgICAgICAgICAgIFtuc01hdGNoUmVjdHMgYWRkT2JqZWN0OltOU1Zh
bHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF1dOworCisgICAgICAgIFJldGFpblB0cjxXS1RleHRGaW5k
ZXJNYXRjaD4gbWF0Y2ggPSBhZG9wdE5TKFtbV0tUZXh0RmluZGVyTWF0Y2ggYWxsb2NdIGluaXRX
aXRoQ2xpZW50OnNlbGYgdmlldzpfdmlldyBpbmRleDppIHJlY3RzOm5zTWF0Y2hSZWN0cy5nZXQo
KV0pOworICAgICAgICBbbWF0Y2hPYmplY3RzIGFkZE9iamVjdDptYXRjaC5nZXQoKV07CisgICAg
fQorCisgICAgcmVwbHlDb250ZXh0LnJlc3VsdENvbGxlY3RvcihtYXRjaE9iamVjdHMuZ2V0KCks
IE5PKTsKKyAgICBbcmVwbHlDb250ZXh0LnByb2dyZXNzIHNldENvbXBsZXRlZFVuaXRDb3VudDox
XTsKKworICAgIEJsb2NrX3JlbGVhc2UocmVwbHlDb250ZXh0LnJlc3VsdENvbGxlY3Rvcik7Cit9
CisKKy0gKHZvaWQpZGlkR2V0SW1hZ2VGb3JNYXRjaFJlc3VsdDooV2ViSW1hZ2UgKilpbWFnZSBp
bmRleDooaW50MzJfdCltYXRjaEluZGV4Cit7CisgICAgaWYgKF9pbWFnZVJlcGx5Q2FsbGJhY2tz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBpbWFnZUNhbGxiYWNrID0g
X2ltYWdlUmVwbHlDYWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgaW1hZ2VDYWxsYmFjayhbW1tO
U0ltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6aW1hZ2UtPmJpdG1hcCgpLT5tYWtlQ0dJbWFn
ZSgpLmdldCgpIHNpemU6TlNaZXJvU2l6ZV0gYXV0b3JlbGVhc2VdKTsKK30KKworI3ByYWdtYSBt
YXJrIC0gRmluZENsaWVudAorCistICh2b2lkKWRpZEZpbmRTdHJpbmc6KGNvbnN0IFN0cmluZyYp
c3RyaW5nIHJlY3RzOihjb25zdCBWZWN0b3I8SW50UmVjdD4mKXJlY3RzIGluZGV4OihpbnQzMl90
KW1hdGNoSW5kZXgKK3sKKyAgICBbc2VsZiBkaWRGaW5kU3RyaW5nTWF0Y2hlczpzdHJpbmcgcmVj
dHM6eyByZWN0cyB9IGluZGV4Om1hdGNoSW5kZXhdOworfQorCistICh2b2lkKWRpZEZhaWxUb0Zp
bmRTdHJpbmc6KGNvbnN0IFN0cmluZyYpc3RyaW5nCit7CisgICAgW3NlbGYgZGlkRmluZFN0cmlu
Z01hdGNoZXM6c3RyaW5nIHJlY3RzOnsgfSBpbmRleDotMV07Cit9CisKKyNwcmFnbWEgbWFyayAt
IFdLVGV4dEZpbmRlck1hdGNoIGNhbGxiYWNrcworCistICh2b2lkKWdldEltYWdlRm9yTWF0Y2hS
ZXN1bHQ6KGlkIDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4pZmlu
ZE1hdGNoIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0ltYWdlICpnZW5lcmF0ZWRJbWFn
ZSkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBBU1NFUlQoW2ZpbmRNYXRjaCBpc0tpbmRPZkNs
YXNzOltXS1RleHRGaW5kZXJNYXRjaCBjbGFzc11dKTsKKworICAgIFdLVGV4dEZpbmRlck1hdGNo
ICp0ZXh0RmluZGVyTWF0Y2ggPSBzdGF0aWNfY2FzdDxXS1RleHRGaW5kZXJNYXRjaCAqPihmaW5k
TWF0Y2gpOworCisgICAgYXV0byBjb3BpZWRJbWFnZUNhbGxiYWNrID0gQmxvY2tfY29weShjb21w
bGV0aW9uSGFuZGxlcik7CisgICAgX2ltYWdlUmVwbHlDYWxsYmFja3MuYXBwZW5kKFtjb3BpZWRJ
bWFnZUNhbGxiYWNrXSAoTlNJbWFnZSAqaW1hZ2UpIHsKKyAgICAgICAgY29waWVkSW1hZ2VDYWxs
YmFjayhpbWFnZSk7CisgICAgICAgIEJsb2NrX3JlbGVhc2UoY29waWVkSW1hZ2VDYWxsYmFjayk7
CisgICAgfSk7CisKKyAgICBfcGFnZS0+Z2V0SW1hZ2VGb3JGaW5kTWF0Y2godGV4dEZpbmRlck1h
dGNoLmluZGV4KTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM1
ZDk3NGYxZTY2OTVkNzE2NDIzZjkxMDlhY2U4ZmRkMjdiOTZhMTAuLmViZjU2MmZkOWNmM2NjODNl
NDZkYzJiMzQwZjBhN2NlNGUzOWQxMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY5Miw2ICs2OTIsOCBAQAogCQkyREQxMkEw
ODFBODE3N0YzMDAyQzc0RTYgLyogV0tQYWdlUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERDEyQTA3MUE4MTc3
RjMwMDJDNzRFNiAvKiBXS1BhZ2VSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJERDEzQkQ1MThGN0RBREQw
MEUxMzBBMSAvKiBGaW5kQ29udHJvbGxlcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERDEzQkQzMThGN0RBREQwMEUxMzBBMSAvKiBGaW5kQ29u
dHJvbGxlcklPUy5tbSAqLzsgfTsKIAkJMkRENjdBMkUxQkQ4MTk3MzAwNTNCMjUxIC8qIEFQSUZp
bmRNYXRjaGVzQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyREQ2N0EyRDFCRDgxOTczMDA1M0IyNTEgLyogQVBJRmluZE1hdGNoZXNDbGllbnQu
aCAqLzsgfTsKKwkJMkRENjdBMzUxQkQ4NjEwNjAwNTNCMjUxIC8qIFdLVGV4dEZpbmRlckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRENjdB
MzMxQkQ4NjEwNjAwNTNCMjUxIC8qIFdLVGV4dEZpbmRlckNsaWVudC5oICovOyB9OworCQkyREQ2
N0EzNjFCRDg2MTA2MDA1M0IyNTEgLyogV0tUZXh0RmluZGVyQ2xpZW50Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRENjdBMzQxQkQ4NjEwNjAwNTNC
MjUxIC8qIFdLVGV4dEZpbmRlckNsaWVudC5tbSAqLzsgfTsKIAkJMkREOUVCMkQxQTZGMDEyNTAw
QkIxMjY3IC8qIEFQSU5hdmlnYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERDlFQjJDMUE2RjAxMjUwMEJCMTI2NyAvKiBBUElOYXZp
Z2F0aW9uQ2xpZW50LmggKi87IH07CiAJCTJEREUwQUZBMTgyOThDQzkwMEY5N0VBQSAvKiBSZW1v
dGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUwQUY4MTgyOThDQzkwMEY5N0VBQSAvKiBSZW1vdGVMYXll
clRyZWVQcm9wZXJ0eUFwcGxpZXIuaCAqLzsgfTsKIAkJMkRERTBBRkIxODI5OENDOTAwRjk3RUFB
IC8qIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUwQUY5MTgyOThDQzkwMEY5N0VBQSAvKiBS
ZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0gKi87IH07CkBAIC0yODgxLDYgKzI4ODMs
OCBAQAogCQkyREQxMkEwNzFBODE3N0YzMDAyQzc0RTYgLyogV0tQYWdlUmVuZGVyaW5nUHJvZ3Jl
c3NFdmVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQYWdlUmVuZGVy
aW5nUHJvZ3Jlc3NFdmVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkREMTNC
RDMxOEY3REFERDAwRTEzMEExIC8qIEZpbmRDb250cm9sbGVySU9TLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRmluZENvbnRyb2xsZXJJT1MubW07IHBhdGggPSBp
b3MvRmluZENvbnRyb2xsZXJJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJE
RDY3QTJEMUJEODE5NzMwMDUzQjI1MSAvKiBBUElGaW5kTWF0Y2hlc0NsaWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElGaW5kTWF0Y2hlc0NsaWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyREQ2N0EzMzFCRDg2MTA2MDA1M0IyNTEgLyogV0tUZXh0
RmluZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVGV4dEZp
bmRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREQ2N0EzNDFCRDg2
MTA2MDA1M0IyNTEgLyogV0tUZXh0RmluZGVyQ2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV0tUZXh0RmluZGVyQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyREQ5RUIyQzFBNkYwMTI1MDBCQjEyNjcgLyogQVBJTmF2aWdhdGlv
bkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElOYXZpZ2F0aW9u
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEREUwQUY4MTgyOThDQzkw
MEY5N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEREUwQUY5MTgyOThDQzkwMEY5N0VBQSAvKiBS
ZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTI1LDYgKzcxMjksOCBAQAogCQkJCTBGQ0I0RTVE
MThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1ByaW50aW5nVmlldy5tbSAqLywKIAkJCQk1MTNFNDYyQjFB
RDgzNzU2MDAxNjIzNEEgLyogV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlLmggKi8sCiAJ
CQkJNTEzRTQ2MkMxQUQ4Mzc1NjAwMTYyMzRBIC8qIFdLU2hhcmluZ1NlcnZpY2VQaWNrZXJEZWxl
Z2F0ZS5tbSAqLywKKwkJCQkyREQ2N0EzMzFCRDg2MTA2MDA1M0IyNTEgLyogV0tUZXh0RmluZGVy
Q2xpZW50LmggKi8sCisJCQkJMkRENjdBMzQxQkQ4NjEwNjAwNTNCMjUxIC8qIFdLVGV4dEZpbmRl
ckNsaWVudC5tbSAqLywKIAkJCQkwRkNCNEU1RTE4QkJFM0Q5MDAwRkNGQzkgLyogV0tUZXh0SW5w
dXRXaW5kb3dDb250cm9sbGVyLmggKi8sCiAJCQkJMEZDQjRFNUYxOEJCRTNEOTAwMEZDRkM5IC8q
IFdLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tbSAqLywKIAkJCQkyRDI4QTQ5NTFBRjk2NUEx
MDBGMTkwQzkgLyogV0tWaWV3TGF5b3V0U3RyYXRlZ3kuaCAqLywKQEAgLTgxOTksNiArODIwNSw3
IEBACiAJCQkJRDNCOTQ4NDkxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0ODMyRDcxQTlDREY5NjAwOEI0REZFIC8qIFdlYnNpdGVE
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQ4MzJEMTFBOUJEQzJGMDA4QjRERkUgLyogV2Vi
c2l0ZURhdGFSZWNvcmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTJERDY3QTM1MUJEODYxMDYwMDUz
QjI1MSAvKiBXS1RleHRGaW5kZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTNDMkFB
MUEzMjU3MzAwMDRFOEM3MCAvKiBXZWJzaXRlRGF0YVN0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4MzYwMzRBMDFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTUyQzBGODFBMzhDREM3MDAxNjE2MEEgLyogV2ViU3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTk1NDksNiArOTU1Niw3IEBA
CiAJCQkJRTE3OUZEOUYxMzREMzgyNTAwMTVCODgzIC8qIEFyZ3VtZW50Q29kZXJzTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMwMzJEQTUxMEY0MzdEMTAwNThDMTVBIC8qIEFyZ3VtZW50RGVj
b2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzAzMkRBNzEwRjQzN0QxMDA1OEMxNUEgLyog
QXJndW1lbnRFbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJERDY3QTM2MUJEODYxMDYw
MDUzQjI1MSAvKiBXS1RleHRGaW5kZXJDbGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlDNTlD
NEE1ODE4QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODM5OTAyMDIxQkU5QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxNUU3NzI3MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3luY1Jl
cXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAzMDNlMWI3MzM2YmExNTdjODBi
NjM2MTcyMDgzYzM5NTcxMmQ1MzYzLi4zMDcwZTE1NTc4YTZmZTc0ODBlMDZmNmVkMDI0ZTAzNzU4
Y2U1NDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmlu
ZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5jcHAKQEAgLTE4MCw3ICsxODAsMTQgQEAgdm9pZCBGaW5kQ29udHJvbGxl
cjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYg
c3RyaW4KICAgICAgICAgICAgICAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCAtPSBtYXRjaENv
dW50OwogICAgICAgICB9CiAKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkRpZEZpbmRTdHJpbmcoc3RyaW5nLCBtYXRjaENvdW50LCBtX2ZvdW5kU3RyaW5n
TWF0Y2hJbmRleCkpOworICAgICAgICBtX2ZpbmRNYXRjaGVzLmNsZWFyKCk7CisgICAgICAgIFZl
Y3RvcjxJbnRSZWN0PiBtYXRjaFJlY3RzOworICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fd2Vi
UGFnZS0+Y29yZVBhZ2UoKS0+c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKSB7CisgICAgICAgICAg
ICByYW5nZS0+YWJzb2x1dGVUZXh0UmVjdHMobWF0Y2hSZWN0cyk7CisgICAgICAgICAgICBtX2Zp
bmRNYXRjaGVzLmFwcGVuZChyYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZyhzdHJpbmcsIG1hdGNo
UmVjdHMsIG1hdGNoQ291bnQsIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4KSk7CiAKICAgICAgICAg
aWYgKCEob3B0aW9ucyAmIEZpbmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3IpIHx8ICFzZWxlY3Rl
ZEZyYW1lIHx8ICF1cGRhdGVGaW5kSW5kaWNhdG9yKCpzZWxlY3RlZEZyYW1lLCBzaG91bGRTaG93
T3ZlcmxheSkpCiAgICAgICAgICAgICBoaWRlRmluZEluZGljYXRvcigpOwpAQCAtMjIxLDEzICsy
MjgsMTUgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0
cmluZywgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWcKICAgICAgICAgICAgIGlmIChmcy5zZWxl
Y3Rpb25Cb3VuZHMoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBtX2ZpbmRNYXRjaGVz
LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgaW50IGluZGV4Rm9yU2VsZWN0aW9uOwotICAgICAg
ICAgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2Vz
KHN0cmluZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCwgbV9maW5kTWF0Y2hlcywgaW5k
ZXhGb3JTZWxlY3Rpb24pOworICAgICAgICAgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKHN0cmluZywgY29yZU9wdGlvbnMsIG1heE1hdGNoQ291
bnQsIG1fZmluZE1hdGNoZXMsIGluZGV4Rm9yU2VsZWN0aW9uKTsKICAgICAgICAgICAgICAgICBt
X2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCA9IGluZGV4Rm9yU2VsZWN0aW9uOwogICAgICAgICAgICAg
ICAgIGZvdW5kU3RyaW5nU3RhcnRzQWZ0ZXJTZWxlY3Rpb24gPSB0cnVlOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogCisgICAgbV9maW5kTWF0Y2hlcy5jbGVhcigpOworCiAgICAg
Ym9vbCBmb3VuZDsKICAgICBpZiAocGx1Z2luVmlldykKICAgICAgICAgZm91bmQgPSBwbHVnaW5W
aWV3LT5maW5kU3RyaW5nKHN0cmluZywgY29yZU9wdGlvbnMsIG1heE1hdGNoQ291bnQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264897</attachid>
            <date>2015-11-05 15:21:16 -0800</date>
            <delta_ts>2015-11-05 17:10:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150907-20151105152017.patch</filename>
            <type>text/plain</type>
            <size>46355</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTExZTNjY2U5Y2I0NGRj
ODUzODk0Y2Y0OTg2MzUzZTc3MWMzMTIwNS4uYWI1OWVhYTAyZjk5YTM1MWUzMDY4ZjgxZWNkMzA5
ZmQ0OTRmMzg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDE1LTExLTA1ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBwcmVsaW1p
bmFyeSAoU1BJKSBzdXBwb3J0IGZvciBOU1RleHRGaW5kZXIgb24gV0tXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA5MDcKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzE5MTcxNjI0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5ldyBBUEkgdGVzdDogV2ViS2l0Mi5GaW5kSW5QYWdlCisKKyAg
ICAgICAgKiBQbGF0Zm9ybS9zcGkvbWFjL0FwcEtpdFNQSS5oOgorICAgICAgICBBZGQgc29tZSBT
UEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUZpbmRDbGllbnQuaDoKKyAgICAgICAg
KEFQSTo6RmluZENsaWVudDo6ZGlkRmluZFN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlRmluZENsaWVudCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6ZGlkRmluZFN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29jb2EvRmluZENsaWVudC5tbToKKyAgICAgICAgKFdlYktpdDo6RmluZENsaWVudDo6ZGlkRmlu
ZFN0cmluZyk6CisgICAgICAgIE1ha2UgZGlkRmluZFN0cmluZyByZXR1cm4gdGhlIG1hdGNoIHJl
Y3RzIGxpa2UgZGlkRmluZFN0cmluZ01hdGNoZXMgZG9lcy4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250
cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpG
aW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyk6CisgICAgICAgIEtlZXAgdGhlIG1vc3QgcmVjZW50
IGZpbmQgbWF0Y2ggYXJvdW5kIGZvciBpbmNyZW1lbnRhbCBmaW5kIGp1c3QgbGlrZSB3ZSBkbwor
ICAgICAgICBmb3IgdGhlIG5vbi1pbmNyZW1lbnRhbCB2ZXJzaW9uLiBUaGlzIHdheSwgZ2V0SW1h
Z2VGb3JGaW5kTWF0Y2ggYW5kIHNlbGVjdEZpbmRNYXRjaAorICAgICAgICB3aWxsIHdvcmsgZm9y
IGluY3JlbWVudGFsIGZpbmQgdG9vIQorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5zdXJlVGV4dEZpbmRlckNsaWVu
dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZmluZE1hdGNoZXNGb3JTdHJpbmc6cmVsYXRpdmVU
b01hdGNoOmZpbmRPcHRpb25zOm1heFJlc3VsdHM6cmVzdWx0Q29sbGVjdG9yOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgZG9jdW1lbnRDb250YWluZXJWaWV3XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBnZXRTZWxlY3RlZFRleHQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzZWxlY3RGaW5k
TWF0Y2g6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgIEltcGxlbWVudCBOU1RleHRGaW5k
ZXIncyBhc3luYyBjbGllbnQgcHJvdG9jb2wgYW5kIGZvcndhcmQgdG8gdGhlIG5ldyBXS1RleHRG
aW5kZXJDbGllbnQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1By
aXZhdGUuaDoKKyAgICAgICAgUHJpdmF0ZWx5IG5vdGUgb3VyIGNvbmZvcm1hbmNlIHRvIHRoZSBh
Zm9ybWVudGlvbmVkIHByb3RvY29sLgorCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS1RleHRG
aW5kZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS1RleHRGaW5k
ZXJDbGllbnQubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpUZXh0RmluZGVyRmluZENsaWVu
dDo6VGV4dEZpbmRlckZpbmRDbGllbnQpOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJNYXRjaCBp
bml0V2l0aENsaWVudDp2aWV3OmluZGV4OnJlY3RzOl0pOgorICAgICAgICAoLVtXS1RleHRGaW5k
ZXJNYXRjaCBjb250YWluaW5nVmlld10pOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJNYXRjaCB0
ZXh0UmVjdHNdKToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyTWF0Y2ggZ2VuZXJhdGVUZXh0SW1h
Z2U6XSk6CisgICAgICAgICgtW1dLVGV4dEZpbmRlck1hdGNoIGluZGV4XSk6CisgICAgICAgICgt
W1dLVGV4dEZpbmRlckNsaWVudCBpbml0V2l0aFBhZ2U6dmlldzpdKToKKyAgICAgICAgKC1bV0tU
ZXh0RmluZGVyQ2xpZW50IHdpbGxEZXN0cm95VmlldzpdKToKKyAgICAgICAgKC1bV0tUZXh0Rmlu
ZGVyQ2xpZW50IGZpbmRNYXRjaGVzRm9yU3RyaW5nOnJlbGF0aXZlVG9NYXRjaDpmaW5kT3B0aW9u
czptYXhSZXN1bHRzOnJlc3VsdENvbGxlY3RvcjpdKToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVy
Q2xpZW50IGdldFNlbGVjdGVkVGV4dDpdKToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyQ2xpZW50
IHNlbGVjdEZpbmRNYXRjaDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tUZXh0
RmluZGVyQ2xpZW50IGRpZEZpbmRTdHJpbmdNYXRjaGVzOnJlY3RzOmluZGV4Ol0pOgorICAgICAg
ICAoLVtXS1RleHRGaW5kZXJDbGllbnQgZGlkR2V0SW1hZ2VGb3JNYXRjaFJlc3VsdDppbmRleDpd
KToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyQ2xpZW50IGRpZEZpbmRTdHJpbmc6cmVjdHM6aW5k
ZXg6XSk6CisgICAgICAgICgtW1dLVGV4dEZpbmRlckNsaWVudCBkaWRGYWlsVG9GaW5kU3RyaW5n
Ol0pOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJDbGllbnQgZ2V0SW1hZ2VGb3JNYXRjaFJlc3Vs
dDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBXS1RleHRGaW5kZXJDbGllbnQuIEl0IGluc3RhbGxz
IGl0c2VsZiBhcyB0aGUgRmluZENsaWVudCBhbmQgRmluZE1hdGNoZXNDbGllbnQsCisgICAgICAg
IHNvIHlvdSBjYW4gb25seSB1c2Ugb25lIG1lY2hhbmlzbSBvciB0aGUgb3RoZXIuCisKIDIwMTUt
MTEtMDQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UkVHUkVTU0lPTiAocjE5MTQ5OSk6IDEwMCUgcmVwcm8gY3Jhc2ggdW5kZXIgX3ByZXBhcmVGb3JN
b3ZlVG9XaW5kb3c6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9zcGkvbWFj
L0FwcEtpdFNQSS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vc3BpL21hYy9BcHBLaXRTUEku
aAppbmRleCBhMzZmODc4MjZiZTFhYzcxZWZlYzFhZWNmNjg1Mjk2NTQyZmE0Y2JlLi5iMzRmMTlj
MGYwYjA3OWMzMTU3ODZhYjIxMWI3ZjVjMzc3MGQ5OWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9zcGkvbWFjL0FwcEtpdFNQSS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL3NwaS9tYWMvQXBwS2l0U1BJLmgKQEAgLTIzLDkgKzIzLDEyIEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmIFBMQVRGT1JNKE1BQykKKwogI2lm
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAKICNpbXBvcnQgPEFwcEtpdC9OU0FjY2Vzc2liaWxp
dHlSZW1vdGVVSUVsZW1lbnQuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRGaW5kZXJfUHJpdmF0
ZS5oPgogCiAjZWxzZQogCkBAIC0zNSw2ICszOCwyOSBAQAogCiBAZW5kCiAKK3R5cGVkZWYgZW51
bSA6IE5TVUludGVnZXIgeworICAgIE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50Rmlu
ZE9wdGlvbnNCYWNrd2FyZHMgPSAxIDw8IDAsCisgICAgTlNUZXh0RmluZGVyQXN5bmNocm9ub3Vz
RG9jdW1lbnRGaW5kT3B0aW9uc1dyYXAgPSAxIDw8IDEsCisgICAgTlNUZXh0RmluZGVyQXN5bmNo
cm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSA9IDEgPDwgMiwKKyAgICBO
U1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25zU3RhcnRzV2l0aCA9IDEg
PDwgMywKK30gTlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9uczsKKwor
QHByb3RvY29sIE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNoIDxOU09i
amVjdD4KK0ByZXF1aXJlZAorQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TVmlldyAqY29udGFpbmluZ1ZpZXc7CitAcHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWljLCBy
ZWFkb25seSkgTlNBcnJheSAqdGV4dFJlY3RzOworLSAodm9pZClnZW5lcmF0ZVRleHRJbWFnZToo
dm9pZCAoXikoTlNJbWFnZSAqKSljb21wbGV0aW9uSGFuZGxlcjsKK0BlbmQKKworQGludGVyZmFj
ZSBOU09iamVjdCAoKQorCistICh2b2lkKWZpbmRNYXRjaGVzRm9yU3RyaW5nOihOU1N0cmluZyAq
KXRhcmdldFN0cmluZyByZWxhdGl2ZVRvTWF0Y2g6KGlkIDxOU1RleHRGaW5kZXJBc3luY2hyb25v
dXNEb2N1bWVudEZpbmRNYXRjaD4pcmVsYXRpdmVNYXRjaCBmaW5kT3B0aW9uczooTlNUZXh0Rmlu
ZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9ucylmaW5kT3B0aW9ucyBtYXhSZXN1bHRz
OihOU1VJbnRlZ2VyKW1heFJlc3VsdHMgcmVzdWx0Q29sbGVjdG9yOih2b2lkICheKShOU0FycmF5
ICptYXRjaGVzLCBCT09MIGRpZFdyYXApKXJlc3VsdENvbGxlY3RvcjsKKy0gKE5TVmlldyAqKWRv
Y3VtZW50Q29udGFpbmVyVmlldzsKKy0gKHZvaWQpZ2V0U2VsZWN0ZWRUZXh0Oih2b2lkICheKShO
U1N0cmluZyAqc2VsZWN0ZWRUZXh0U3RyaW5nKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
c2VsZWN0RmluZE1hdGNoOihpZCA8TlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5k
TWF0Y2g+KWZpbmRNYXRjaCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxl
dGlvbkhhbmRsZXI7CisKK0BlbmQKKwogI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
CiAKIEBpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoKQpAQCAtNDMsMyArNjksNSBAQAogLSAodm9p
ZClfc2V0Q3VycmVudEV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CiAKIEBlbmQKKworI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJRmluZENsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElGaW5kQ2xp
ZW50LmgKaW5kZXggMDBiZGVjOTY0MGM3NTFlNWE4YjI3YWJmNTNhNWI1ZWFiMjdlNDUwMi4uMGFi
ZjhmNjczOTI2Yzc2ZDY4OWNlNzc2MmUzY2E4NzYwYjBkNzc0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElGaW5kQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9BUElGaW5kQ2xpZW50LmgKQEAgLTI4LDYgKzI4LDEwIEBACiAKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgSW50UmVjdDsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQYWdlUHJveHk7
CiB9CkBAIC0zOSw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GaW5kQ2xpZW50KCkg
eyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVzKFdlYktpdDo6V2Vi
UGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmLCB1aW50MzJfdCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGRpZEZpbmRTdHJpbmcoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0
cmluZyYsIHVpbnQzMl90LCBpbnQzMl90KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0
cmluZyhXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+JiBtYXRjaFJlY3RzLCB1aW50MzJfdCwgaW50MzJfdCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoV2ViS2l0OjpXZWJQYWdlUHJv
eHkqLCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmNwcAppbmRleCBhYzU3ZDNkYjVjZWU0OWVmYjhiYmIwNWEzNmViMGEw
NWY5Zjg3NTAwLi5iZTdmYzQyMjUxOTI2MTI2MGYzOWM4MDM2MDI2NDJkYjFiOTliOWUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtODg3LDcgKzg4Nyw3
IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUZpbmRDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0
IFdLUGFnZUZpbmRDbGllbnRCYXNlKiB3a0NsCiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSogcGFnZSwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QpIG92ZXJyaWRl
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSogcGFnZSwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYsIHVp
bnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmICghbV9jbGllbnQuZGlkRmluZFN0cmluZykKICAgICAgICAgICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
dy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmlu
ZGV4IGUwYmFiMzczZWNlYWE4MzlkZjhjMTZkMjBhMDlmNjJiNGFjZjk1ZTguLjlhOWFiNTBlZGMx
YzVjNTQyNTBhYjlkZTliNGY4NjA1NWMzZDFiMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0
ICJBUElGb3JtQ2xpZW50LmgiCiAjaW1wb3J0ICJBUElQYWdlQ29uZmlndXJhdGlvbi5oIgogI2lt
cG9ydCAiQVBJU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW1wb3J0ICJBcHBLaXRTUEkuaCIK
ICNpbXBvcnQgIkNvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXIuaCIKICNpbXBvcnQgIkRpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmgiCiAjaW1wb3J0ICJGaW5kQ2xpZW50LmgiCkBAIC0xNDQsNiAr
MTQ1LDcgQEAgZW51bSBjbGFzcyBEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlIHsKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCAiV0tUZXh0RmluZGVyQ2xpZW50LmgiCiAjaW1w
b3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgogCkBA
IC0yMzUsNiArMjM3LDcgQEAgV0tXZWJWaWV3KiBmcm9tV2ViUGFnZVByb3h5KFdlYktpdDo6V2Vi
UGFnZVByb3h5JiBwYWdlKQogI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJLaXQ6OldlYlZpZXdJbXBsPiBfaW1wbDsKKyAgICBSZXRhaW5QdHI8V0tUZXh0
RmluZGVyQ2xpZW50PiBfdGV4dEZpbmRlckNsaWVudDsKICNlbmRpZgogfQogCkBAIC0yNjQ0LDYg
KzI2NDcsMzMgQEAgV0VCQ09SRV9DT01NQU5EKHlhbmtBbmRTZWxlY3QpCiB9CiAjZW5kaWYKIAor
LSAoV0tUZXh0RmluZGVyQ2xpZW50ICopX2Vuc3VyZVRleHRGaW5kZXJDbGllbnQKK3sKKyAgICBp
ZiAoIV90ZXh0RmluZGVyQ2xpZW50KQorICAgICAgICBfdGV4dEZpbmRlckNsaWVudCA9IGFkb3B0
TlMoW1tXS1RleHRGaW5kZXJDbGllbnQgYWxsb2NdIGluaXRXaXRoUGFnZToqX3BhZ2Ugdmlldzpz
ZWxmXSk7CisgICAgcmV0dXJuIF90ZXh0RmluZGVyQ2xpZW50LmdldCgpOworfQorCistICh2b2lk
KWZpbmRNYXRjaGVzRm9yU3RyaW5nOihOU1N0cmluZyAqKXRhcmdldFN0cmluZyByZWxhdGl2ZVRv
TWF0Y2g6KGlkIDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4pcmVs
YXRpdmVNYXRjaCBmaW5kT3B0aW9uczooTlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRG
aW5kT3B0aW9ucylmaW5kT3B0aW9ucyBtYXhSZXN1bHRzOihOU1VJbnRlZ2VyKW1heFJlc3VsdHMg
cmVzdWx0Q29sbGVjdG9yOih2b2lkICheKShOU0FycmF5ICptYXRjaGVzLCBCT09MIGRpZFdyYXAp
KXJlc3VsdENvbGxlY3RvcgoreworICAgIFtbc2VsZiBfZW5zdXJlVGV4dEZpbmRlckNsaWVudF0g
ZmluZE1hdGNoZXNGb3JTdHJpbmc6dGFyZ2V0U3RyaW5nIHJlbGF0aXZlVG9NYXRjaDpyZWxhdGl2
ZU1hdGNoIGZpbmRPcHRpb25zOmZpbmRPcHRpb25zIG1heFJlc3VsdHM6bWF4UmVzdWx0cyByZXN1
bHRDb2xsZWN0b3I6cmVzdWx0Q29sbGVjdG9yXTsKK30KKworLSAoTlNWaWV3ICopZG9jdW1lbnRD
b250YWluZXJWaWV3Cit7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZ2V0U2VsZWN0
ZWRUZXh0Oih2b2lkICheKShOU1N0cmluZyAqc2VsZWN0ZWRUZXh0U3RyaW5nKSljb21wbGV0aW9u
SGFuZGxlcgoreworICAgIFtbc2VsZiBfZW5zdXJlVGV4dEZpbmRlckNsaWVudF0gZ2V0U2VsZWN0
ZWRUZXh0OmNvbXBsZXRpb25IYW5kbGVyXTsKK30KKworLSAodm9pZClzZWxlY3RGaW5kTWF0Y2g6
KGlkIDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4pZmluZE1hdGNo
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgorewor
ICAgIFtbc2VsZiBfZW5zdXJlVGV4dEZpbmRlckNsaWVudF0gc2VsZWN0RmluZE1hdGNoOmZpbmRN
YXRjaCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Cit9CisKIC0gKE5TVGV4
dElucHV0Q29udGV4dCAqKV93ZWJfc3VwZXJJbnB1dENvbnRleHQKIHsKICAgICByZXR1cm4gW3N1
cGVyIGlucHV0Q29udGV4dF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCmluZGV4IDY2MDE0OTdhOWJhMDFhMjM3YjZiY2M3
MjkxMmRkOTllMTgwNTliYWEuLjZmNjVkYWI5OTRiYmY0N2YxMDMzNzk3ZWJjNTk5NWFkOWIwNzI4
ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3UHJpdmF0ZS5oCkBAIC0yMzIsNiArMjMyLDEwIEBAIHR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUpIHsKIAogQGVuZAogCisjaWYgIVRBUkdFVF9P
U19JUEhPTkUKK0BpbnRlcmZhY2UgV0tXZWJWaWV3IChXS05TVGV4dEZpbmRlckNsaWVudCkgPE5T
VGV4dEZpbmRlckNsaWVudD4KK0BlbmQKKyNlbmRpZgogCiBAaW50ZXJmYWNlIFdLV2ViVmlldyAo
V0tUZXN0aW5nKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
RmluZENsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQu
aAppbmRleCAzYzFjMTQ1ZTRkNGIyZDI4NTJkODBiMmY0MWYyYjY4YTU3ODk1ZmRkLi5hYTZmNzA5
MjJiNTI0NTc4ZjAwNDM1ODEyOWFiYjk5YmVjN2U5MzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9GaW5kQ2xpZW50LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICAvLyBGcm9tIEFQSTo6RmluZENsaWVudAogICAgIHZpcnR1YWwgdm9pZCBkaWRD
b3VudFN0cmluZ01hdGNoZXMoV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiwgdWludDMyX3Qg
bWF0Y2hDb3VudCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmRTdHJpbmcoV2ViUGFnZVByb3h5
KiwgY29uc3QgU3RyaW5nJiwgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mLCB1aW50MzJfdCBtYXRjaENv
dW50LCBpbnQzMl90IG1hdGNoSW5kZXgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsVG9GaW5k
U3RyaW5nKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYpOwogICAgIAogICAgIFdLV2ViVmll
dyAqbV93ZWJWaWV3OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L0ZpbmRDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVu
dC5tbQppbmRleCBkZjhmYWQwZmE0NWY1Y2NmODk5MTNhNjAxNDllYzg5NTY1YjZkY2QzLi40NDcy
NjZjNzYxZDNlNDZiMTYwYmQ1YjgwNDQ1YjA4ZWM5ODc2OTUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5tbQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIEZp
bmRDbGllbnQ6OmRpZENvdW50U3RyaW5nTWF0Y2hlcyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgdWludAogICAgICAgICBbbV9kZWxlZ2F0ZS5nZXQoKSBfd2ViVmlldzptX3dl
YlZpZXcgZGlkQ291bnRNYXRjaGVzOm1hdGNoQ291bnQgZm9yU3RyaW5nOnN0cmluZ107CiB9CiAK
LXZvaWQgRmluZENsaWVudDo6ZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQordm9p
ZCBGaW5kQ2xpZW50OjpkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mLCB1aW50MzJfdCBtYXRjaENv
dW50LCBpbnQzMl90IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1fZGVsZWdhdGVNZXRob2RzLndl
YnZpZXdEaWRGaW5kU3RyaW5nKQogICAgICAgICBbbV9kZWxlZ2F0ZS5nZXQoKSBfd2ViVmlldzpt
X3dlYlZpZXcgZGlkRmluZE1hdGNoZXM6bWF0Y2hDb3VudCBmb3JTdHJpbmc6c3RyaW5nIHdpdGhN
YXRjaEluZGV4Om1hdGNoSW5kZXhdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAppbmRleCA2OWE1M2I3OTcyMzk5NTM1YTRiNDU1NzcyNTc3OTQyZTRlZjAyMjkxLi5m
NTg5YmFiZTI5MTE1MWQwMDZmMWY5OWU2Zjk2NTUzODMyNTBiNGQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNDA3OSw5ICs0MDc5LDkgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcyhmbG9hdCBwcm9n
cmVzcykKICNlbmRpZgogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluZFN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4
KQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgbWF0Y2hSZWN0cywgdWludDMyX3QgbWF0
Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQogewotICAgIG1fZmluZENsaWVudC0+ZGlkRmlu
ZFN0cmluZyh0aGlzLCBzdHJpbmcsIG1hdGNoQ291bnQsIG1hdGNoSW5kZXgpOworICAgIG1fZmlu
ZENsaWVudC0+ZGlkRmluZFN0cmluZyh0aGlzLCBzdHJpbmcsIG1hdGNoUmVjdHMsIG1hdGNoQ291
bnQsIG1hdGNoSW5kZXgpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluZFN0cmluZ01h
dGNoZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFZlY3RvcjxWZWN0b3I8V2ViQ29yZTo6
SW50UmVjdD4+JiBtYXRjaFJlY3RzLCBpbnQzMl90IGZpcnN0SW5kZXhBZnRlclNlbGVjdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA2NGYyZGM2MjAyNDZi
MTBmYzYyMWNkNzA2YTljOWRkZjVjYTJmYTk4Li5kMmVjNGYzMmMzZjM4MjViZWEzMWJjMDkwMTRk
ZTY2OWI4YzA1ODIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBA
IC03NTEsNyArNzUxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGV4dEluZGljYXRvcihjb25z
dCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSYsIHVpbnQ2NF90IC8qIFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3JXaW5kb3dMaWZldGltZSAqLyBsaWZldGltZSA9IDAgLyogUGVybWFuZW50ICovKTsK
ICAgICB2b2lkIHNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcyhmbG9hdCk7CiAgICAg
dm9pZCBjbGVhclRleHRJbmRpY2F0b3IoKTsKLSAgICB2b2lkIGRpZEZpbmRTdHJpbmcoY29uc3Qg
U3RyaW5nJiwgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KTsKKyAgICB2
b2lkIGRpZEZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6Oklu
dFJlY3Q+JiwgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KTsKICAgICB2
b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBkaWRGaW5k
U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8VmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+PiYgbWF0Y2hSZWN0cywgaW50MzJfdCBmaXJzdEluZGV4QWZ0ZXJTZWxlY3Rpb24p
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgppbmRleCBmM2RjNzIxN2ExYWVkMzUzMGRjODIxYWE3YTIwNGY3MDE2MWFlYzA3Li4xMTQy
OTFlZGNlYjk5NzA4MGM5NDJlYjMxZGY0MTllYzYwZjhkNzViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTIzMyw3ICsyMzMs
NyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERpZENvdW50U3RyaW5nTWF0Y2hl
cyhTdHJpbmcgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENvdW50KQogICAgIFNldFRleHRJbmRpY2F0
b3Ioc3RydWN0IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhIGluZGljYXRvciwgdWludDY0X3Qg
bGlmZXRpbWUpCiAgICAgQ2xlYXJUZXh0SW5kaWNhdG9yKCkKLSAgICBEaWRGaW5kU3RyaW5nKFN0
cmluZyBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkKKyAg
ICBEaWRGaW5kU3RyaW5nKFN0cmluZyBzdHJpbmcsIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBt
YXRjaFJlY3QsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkKICAgICBE
aWRGYWlsVG9GaW5kU3RyaW5nKFN0cmluZyBzdHJpbmcpCiAgICAgRGlkRmluZFN0cmluZ01hdGNo
ZXMoU3RyaW5nIHN0cmluZywgVmVjdG9yPFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0Pj4gbWF0Y2hl
cywgaW50MzJfdCBmaXJzdEluZGV4QWZ0ZXJTZWxlY3Rpb24pCiAgICAgRGlkR2V0SW1hZ2VGb3JG
aW5kTWF0Y2goV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VIYW5k
bGUsIHVpbnQzMl90IG1hdGNoSW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9XS1RleHRGaW5kZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYWNjOTUxOTc3ZDBmZTAxZTNl
YzFlOTI2ZjlmNTJhOTcwYTljM2I4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQuaApAQCAtMCwwICsxLDQ4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXS1RleHRGaW5kZXJDbGllbnRfaAorI2RlZmluZSBXS1RleHRGaW5k
ZXJDbGllbnRfaAorCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpZiBQTEFU
Rk9STShNQUMpICYmIFdLX0FQSV9FTkFCTEVECisKK09CSkNfQ0xBU1MgTlNWaWV3OworCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK30KKworQGludGVyZmFjZSBXS1Rl
eHRGaW5kZXJDbGllbnQgOiBOU09iamVjdAorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYWdl
OihXZWJLaXQ6OldlYlBhZ2VQcm94eSYpcGFnZSB2aWV3OihOU1ZpZXcgKil2aWV3OworLSAodm9p
ZCl3aWxsRGVzdHJveVZpZXc6KE5TVmlldyAqKXZpZXc7CisKK0BlbmQKKworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKworI2VuZGlmIC8vIFdLVGV4dEZpbmRlckNsaWVudF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjdhYTcyYWU2M2RhMzRkNWI0MWI1MTljMDExZWE1NzFlMGJiNGYwNTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5t
bQpAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiV0tUZXh0RmluZGVyQ2xpZW50LmgiCisKKyNpZiBQTEFURk9STShNQUMpICYmIFdLX0FQ
SV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSUZpbmRDbGllbnQuaCIKKyNpbXBvcnQgIkFQSUZpbmRN
YXRjaGVzQ2xpZW50LmgiCisjaW1wb3J0ICJBcHBLaXRTUEkuaCIKKyNpbXBvcnQgIldlYkltYWdl
LmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgorCisv
LyBGSVhNRTogSW1wbGVtZW50IHN1cHBvcnQgZm9yIHJlcGxhY2UuCisvLyBGSVhNRTogSW1wbGVt
ZW50IHNjcm9sbEZpbmRNYXRjaFRvVmlzaWJsZS4KKy8vIEZJWE1FOiBUaGUgTlNUZXh0RmluZGVy
IG92ZXJsYXkgZG9lc24ndCBtb3ZlIHdpdGggc2Nyb2xsaW5nOyB3ZSBzaG91bGQgaGF2ZSBhIG1v
ZGUgd2hlcmUgd2UgbWFuYWdlIHRoZSBvdmVybGF5LgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0BpbnRlcmZhY2UgV0tUZXh0RmluZGVyQ2xp
ZW50ICgpCisKKy0gKHZvaWQpZGlkRmluZFN0cmluZ01hdGNoZXM6KGNvbnN0IFN0cmluZyYpc3Ry
aW5nIHJlY3RzOihjb25zdCBWZWN0b3I8VmVjdG9yPEludFJlY3Q+PiYpcmVjdHMgaW5kZXg6KGlu
dDMyX3QpbWF0Y2hJbmRleDsKKy0gKHZvaWQpZGlkRmluZFN0cmluZzooY29uc3QgU3RyaW5nJilz
dHJpbmcgcmVjdHM6KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpcmVjdHMgaW5kZXg6KGludDMyX3Qp
bWF0Y2hJbmRleDsKKy0gKHZvaWQpZGlkRmFpbFRvRmluZFN0cmluZzooY29uc3QgU3RyaW5nJilz
dHJpbmc7CisKKy0gKHZvaWQpZ2V0SW1hZ2VGb3JNYXRjaFJlc3VsdDooaWQgPE5TVGV4dEZpbmRl
ckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNoPilmaW5kTWF0Y2ggY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKE5TSW1hZ2UgKmdlbmVyYXRlZEltYWdlKSljb21wbGV0aW9uSGFuZGxlcjsK
Ky0gKHZvaWQpZGlkR2V0SW1hZ2VGb3JNYXRjaFJlc3VsdDooV2ViSW1hZ2UgKilzdHJpbmcgaW5k
ZXg6KGludDMyX3QpbWF0Y2hJbmRleDsKKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgVGV4dEZpbmRlckZpbmRDbGllbnQgOiBwdWJsaWMgQVBJOjpGaW5kTWF0Y2hlc0NsaWVu
dCwgcHVibGljIEFQSTo6RmluZENsaWVudCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgVGV4dEZp
bmRlckZpbmRDbGllbnQoV0tUZXh0RmluZGVyQ2xpZW50ICp0ZXh0RmluZGVyQ2xpZW50KQorICAg
ICAgICA6IG1fdGV4dEZpbmRlckNsaWVudCh0ZXh0RmluZGVyQ2xpZW50KQorICAgIHsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmRTdHJpbmdNYXRjaGVzKFdlYlBh
Z2VQcm94eSogcGFnZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFZlY3RvcjxWZWN0b3I8
SW50UmVjdD4+JiBtYXRjaFJlY3RzLCBpbnQzMl90IGluZGV4KSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgW21fdGV4dEZpbmRlckNsaWVudCBkaWRGaW5kU3RyaW5nTWF0Y2hlczpzdHJpbmcgcmVj
dHM6bWF0Y2hSZWN0cyBpbmRleDppbmRleF07CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRp
ZEdldEltYWdlRm9yTWF0Y2hSZXN1bHQoV2ViUGFnZVByb3h5KiBwYWdlLCBXZWJJbWFnZSogaW1h
Z2UsIGludDMyX3QgaW5kZXgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBbbV90ZXh0RmluZGVy
Q2xpZW50IGRpZEdldEltYWdlRm9yTWF0Y2hSZXN1bHQ6aW1hZ2UgaW5kZXg6aW5kZXhdOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSosIGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBjb25zdCBWZWN0b3I8SW50UmVjdD4mIG1hdGNoUmVjdHMsIHVpbnQz
Ml90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIFttX3RleHRGaW5kZXJDbGllbnQgZGlkRmluZFN0cmluZzpzdHJpbmcgcmVjdHM6bWF0Y2hS
ZWN0cyBpbmRleDptYXRjaEluZGV4XTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bFRvRmluZFN0cmluZyhXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJiBz
dHJpbmcpIG92ZXJyaWRlCisgICAgeworICAgICAgICBbbV90ZXh0RmluZGVyQ2xpZW50IGRpZEZh
aWxUb0ZpbmRTdHJpbmc6c3RyaW5nXTsKKyAgICB9CisKKyAgICBSZXRhaW5QdHI8V0tUZXh0Rmlu
ZGVyQ2xpZW50PiBtX3RleHRGaW5kZXJDbGllbnQ7Cit9OworICAgIAorfQorCitAaW50ZXJmYWNl
IFdLVGV4dEZpbmRlck1hdGNoIDogTlNPYmplY3QgPE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0Rv
Y3VtZW50RmluZE1hdGNoPgorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIHVuc2ln
bmVkIGluZGV4OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1RleHRGaW5kZXJNYXRjaCB7
CisgICAgV0tUZXh0RmluZGVyQ2xpZW50ICpfY2xpZW50OworICAgIE5TVmlldyAqX3ZpZXc7Cisg
ICAgUmV0YWluUHRyPE5TQXJyYXk+IF9yZWN0czsKKyAgICB1bnNpZ25lZCBfaW5kZXg7Cit9CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aENsaWVudDooV0tUZXh0RmluZGVyQ2xpZW50ICopY2xp
ZW50IHZpZXc6KE5TVmlldyAqKXZpZXcgaW5kZXg6KHVuc2lnbmVkKWluZGV4IHJlY3RzOihOU0Fy
cmF5ICopcmVjdHMKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworCisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2NsaWVudCA9IGNsaWVudDsKKyAgICBfdmll
dyA9IHZpZXc7CisgICAgX3JlY3RzID0gcmVjdHM7CisgICAgX2luZGV4ID0gaW5kZXg7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNWaWV3ICopY29udGFpbmluZ1ZpZXcKK3sKKyAgICBy
ZXR1cm4gX3ZpZXc7Cit9CisKKy0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKK3sKKyAgICByZXR1cm4g
X3JlY3RzLmdldCgpOworfQorCistICh2b2lkKWdlbmVyYXRlVGV4dEltYWdlOih2b2lkICheKShO
U0ltYWdlICpnZW5lcmF0ZWRJbWFnZSkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBbX2NsaWVu
dCBnZXRJbWFnZUZvck1hdGNoUmVzdWx0OnNlbGYgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlv
bkhhbmRsZXJdOworfQorCistICh1bnNpZ25lZClpbmRleAoreworICAgIHJldHVybiBfaW5kZXg7
Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLVGV4dEZpbmRlckNsaWVudCB7CisgICAg
V2ViS2l0OjpXZWJQYWdlUHJveHkgKl9wYWdlOworICAgIE5TVmlldyAqX3ZpZXc7CisgICAgRGVx
dWU8c3RkOjpmdW5jdGlvbjx2b2lkKE5TQXJyYXkgKiwgYm9vbCBkaWRXcmFwKT4+IF9maW5kUmVw
bHlDYWxsYmFja3M7CisgICAgRGVxdWU8c3RkOjpmdW5jdGlvbjx2b2lkKE5TSW1hZ2UgKik+PiBf
aW1hZ2VSZXBseUNhbGxiYWNrczsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGFnZToo
V2ViUGFnZVByb3h5JilwYWdlIHZpZXc6KE5TVmlldyAqKXZpZXcKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworCisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
X3BhZ2UgPSAmcGFnZTsKKyAgICBfdmlldyA9IHZpZXc7CisgICAgCisgICAgX3BhZ2UtPnNldEZp
bmRNYXRjaGVzQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8V2ViS2l0OjpUZXh0RmluZGVyRmluZENs
aWVudD4oc2VsZikpOworICAgIF9wYWdlLT5zZXRGaW5kQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8
V2ViS2l0OjpUZXh0RmluZGVyRmluZENsaWVudD4oc2VsZikpOworCisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpd2lsbERlc3Ryb3lWaWV3OihOU1ZpZXcgKil2aWV3Cit7CisgICAgX3Bh
Z2UgPSBudWxscHRyOworICAgIF92aWV3ID0gbmlsOworfQorCisjcHJhZ21hIG1hcmsgLSBOU1Rl
eHRGaW5kZXJDbGllbnQgU1BJCisKKy0gKHZvaWQpZmluZE1hdGNoZXNGb3JTdHJpbmc6KE5TU3Ry
aW5nICopdGFyZ2V0U3RyaW5nIHJlbGF0aXZlVG9NYXRjaDooaWQgPE5TVGV4dEZpbmRlckFzeW5j
aHJvbm91c0RvY3VtZW50RmluZE1hdGNoPilyZWxhdGl2ZU1hdGNoIGZpbmRPcHRpb25zOihOU1Rl
eHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25zKWZpbmRPcHRpb25zIG1heFJl
c3VsdHM6KE5TVUludGVnZXIpbWF4UmVzdWx0cyByZXN1bHRDb2xsZWN0b3I6KHZvaWQgKF4pKE5T
QXJyYXkgKm1hdGNoZXMsIEJPT0wgZGlkV3JhcCkpcmVzdWx0Q29sbGVjdG9yCit7CisgICAgdW5z
aWduZWQga2l0RmluZE9wdGlvbnMgPSAwOworCisgICAgaWYgKGZpbmRPcHRpb25zICYgTlNUZXh0
RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9uc0JhY2t3YXJkcykKKyAgICAgICAg
a2l0RmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0JhY2t3YXJkczsKKyAgICBpZiAo
ZmluZE9wdGlvbnMgJiBOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25z
V3JhcCkKKyAgICAgICAga2l0RmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1dyYXBB
cm91bmQ7CisgICAgaWYgKGZpbmRPcHRpb25zICYgTlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9j
dW1lbnRGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkKKyAgICAgICAga2l0RmluZE9wdGlvbnMg
fD0gV2ViS2l0OjpGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZTsKKyAgICBpZiAoZmluZE9wdGlv
bnMgJiBOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25zU3RhcnRzV2l0
aCkKKyAgICAgICAga2l0RmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0F0V29yZFN0
YXJ0czsKKworICAgIFJldGFpblB0cjxOU1Byb2dyZXNzPiBwcm9ncmVzcyA9IFtOU1Byb2dyZXNz
IHByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjFdOworICAgIGF1dG8gY29waWVkUmVzdWx0Q29s
bGVjdG9yID0gQmxvY2tfY29weShyZXN1bHRDb2xsZWN0b3IpOworICAgIF9maW5kUmVwbHlDYWxs
YmFja3MuYXBwZW5kKFtwcm9ncmVzcywgY29waWVkUmVzdWx0Q29sbGVjdG9yXSAoTlNBcnJheSAq
bWF0Y2hlcywgYm9vbCBkaWRXcmFwKSB7CisgICAgICAgIGNvcGllZFJlc3VsdENvbGxlY3Rvciht
YXRjaGVzLCBkaWRXcmFwKTsKKyAgICAgICAgQmxvY2tfcmVsZWFzZShjb3BpZWRSZXN1bHRDb2xs
ZWN0b3IpOworCisgICAgICAgIFtwcm9ncmVzcyBzZXRDb21wbGV0ZWRVbml0Q291bnQ6MV07Cisg
ICAgfSk7CisKKyAgICBpZiAobWF4UmVzdWx0cyA9PSAxKQorICAgICAgICBfcGFnZS0+ZmluZFN0
cmluZyh0YXJnZXRTdHJpbmcsIHN0YXRpY19jYXN0PFdlYktpdDo6RmluZE9wdGlvbnM+KGtpdEZp
bmRPcHRpb25zKSwgbWF4UmVzdWx0cyk7CisgICAgZWxzZQorICAgICAgICBfcGFnZS0+ZmluZFN0
cmluZ01hdGNoZXModGFyZ2V0U3RyaW5nLCBzdGF0aWNfY2FzdDxXZWJLaXQ6OkZpbmRPcHRpb25z
PihraXRGaW5kT3B0aW9ucyksIG1heFJlc3VsdHMpOworfQorCistICh2b2lkKWdldFNlbGVjdGVk
VGV4dDoodm9pZCAoXikoTlNTdHJpbmcgKnNlbGVjdGVkVGV4dFN0cmluZykpY29tcGxldGlvbkhh
bmRsZXIKK3sKKyAgICB2b2lkICheY29waWVkQ29tcGxldGlvbkhhbmRsZXIpKE5TU3RyaW5nICop
ID0gQmxvY2tfY29weShjb21wbGV0aW9uSGFuZGxlcik7CisKKyAgICBfcGFnZS0+Z2V0U2VsZWN0
aW9uT3JDb250ZW50c0FzU3RyaW5nKFtjb3BpZWRDb21wbGV0aW9uSGFuZGxlcl0gKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBDYWxsYmFja0Jhc2U6OkVycm9yKSB7CisgICAgICAgIGNvcGllZENvbXBs
ZXRpb25IYW5kbGVyKHN0cmluZyk7CisgICAgICAgIEJsb2NrX3JlbGVhc2UoY29waWVkQ29tcGxl
dGlvbkhhbmRsZXIpOworICAgIH0pOworfQorCistICh2b2lkKXNlbGVjdEZpbmRNYXRjaDooaWQg
PE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNoPilmaW5kTWF0Y2ggY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAg
QVNTRVJUKFtmaW5kTWF0Y2ggaXNLaW5kT2ZDbGFzczpbV0tUZXh0RmluZGVyTWF0Y2ggY2xhc3Nd
XSk7CisgICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CisKKyAgICBXS1RleHRGaW5kZXJN
YXRjaCAqdGV4dEZpbmRlck1hdGNoID0gc3RhdGljX2Nhc3Q8V0tUZXh0RmluZGVyTWF0Y2ggKj4o
ZmluZE1hdGNoKTsKKyAgICBfcGFnZS0+c2VsZWN0RmluZE1hdGNoKHRleHRGaW5kZXJNYXRjaC5p
bmRleCk7Cit9CisKKyNwcmFnbWEgbWFyayAtIEZpbmRNYXRjaGVzQ2xpZW50CisKKy0gKHZvaWQp
ZGlkRmluZFN0cmluZ01hdGNoZXM6KGNvbnN0IFN0cmluZyYpc3RyaW5nIHJlY3RzOihjb25zdCBW
ZWN0b3I8VmVjdG9yPEludFJlY3Q+PiYpcmVjdHNGb3JNYXRjaGVzIGluZGV4OihpbnQzMl90KW1h
dGNoSW5kZXgKK3sKKyAgICBpZiAoX2ZpbmRSZXBseUNhbGxiYWNrcy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gcmVwbHlDYWxsYmFjayA9IF9maW5kUmVwbHlDYWxsYmFj
a3MudGFrZUZpcnN0KCk7CisgICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IHJlY3RzRm9yTWF0Y2hl
cy5zaXplKCk7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtYXRjaE9iamVjdHMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bWF0Y2hDb3Vu
dF0pOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaENvdW50OyBpKyspIHsKKyAg
ICAgICAgYXV0byBtYXRjaFJlY3RzID0gcmVjdHNGb3JNYXRjaGVzW2ldOworICAgICAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IG5zTWF0Y2hSZWN0cyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTptYXRjaFJlY3RzLnNpemUoKV0pOworICAgICAg
ICBmb3IgKGF1dG8gcmVjdCA6IG1hdGNoUmVjdHMpCisgICAgICAgICAgICBbbnNNYXRjaFJlY3Rz
IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJlY3RdXTsKKworICAgICAgICBSZXRh
aW5QdHI8V0tUZXh0RmluZGVyTWF0Y2g+IG1hdGNoID0gYWRvcHROUyhbW1dLVGV4dEZpbmRlck1h
dGNoIGFsbG9jXSBpbml0V2l0aENsaWVudDpzZWxmIHZpZXc6X3ZpZXcgaW5kZXg6aSByZWN0czpu
c01hdGNoUmVjdHMuZ2V0KCldKTsKKyAgICAgICAgW21hdGNoT2JqZWN0cyBhZGRPYmplY3Q6bWF0
Y2guZ2V0KCldOworICAgIH0KKworICAgIHJlcGx5Q2FsbGJhY2sobWF0Y2hPYmplY3RzLmdldCgp
LCBOTyk7Cit9CisKKy0gKHZvaWQpZGlkR2V0SW1hZ2VGb3JNYXRjaFJlc3VsdDooV2ViSW1hZ2Ug
KilpbWFnZSBpbmRleDooaW50MzJfdCltYXRjaEluZGV4Cit7CisgICAgaWYgKF9pbWFnZVJlcGx5
Q2FsbGJhY2tzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBpbWFnZUNh
bGxiYWNrID0gX2ltYWdlUmVwbHlDYWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgaW1hZ2VDYWxs
YmFjayhbW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6aW1hZ2UtPmJpdG1hcCgpLT5t
YWtlQ0dJbWFnZSgpLmdldCgpIHNpemU6TlNaZXJvU2l6ZV0gYXV0b3JlbGVhc2VdKTsKK30KKwor
I3ByYWdtYSBtYXJrIC0gRmluZENsaWVudAorCistICh2b2lkKWRpZEZpbmRTdHJpbmc6KGNvbnN0
IFN0cmluZyYpc3RyaW5nIHJlY3RzOihjb25zdCBWZWN0b3I8SW50UmVjdD4mKXJlY3RzIGluZGV4
OihpbnQzMl90KW1hdGNoSW5kZXgKK3sKKyAgICBbc2VsZiBkaWRGaW5kU3RyaW5nTWF0Y2hlczpz
dHJpbmcgcmVjdHM6eyByZWN0cyB9IGluZGV4Om1hdGNoSW5kZXhdOworfQorCistICh2b2lkKWRp
ZEZhaWxUb0ZpbmRTdHJpbmc6KGNvbnN0IFN0cmluZyYpc3RyaW5nCit7CisgICAgW3NlbGYgZGlk
RmluZFN0cmluZ01hdGNoZXM6c3RyaW5nIHJlY3RzOnsgfSBpbmRleDotMV07Cit9CisKKyNwcmFn
bWEgbWFyayAtIFdLVGV4dEZpbmRlck1hdGNoIGNhbGxiYWNrcworCistICh2b2lkKWdldEltYWdl
Rm9yTWF0Y2hSZXN1bHQ6KGlkIDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRN
YXRjaD4pZmluZE1hdGNoIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0ltYWdlICpnZW5l
cmF0ZWRJbWFnZSkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBBU1NFUlQoW2ZpbmRNYXRjaCBp
c0tpbmRPZkNsYXNzOltXS1RleHRGaW5kZXJNYXRjaCBjbGFzc11dKTsKKworICAgIFdLVGV4dEZp
bmRlck1hdGNoICp0ZXh0RmluZGVyTWF0Y2ggPSBzdGF0aWNfY2FzdDxXS1RleHRGaW5kZXJNYXRj
aCAqPihmaW5kTWF0Y2gpOworCisgICAgYXV0byBjb3BpZWRJbWFnZUNhbGxiYWNrID0gQmxvY2tf
Y29weShjb21wbGV0aW9uSGFuZGxlcik7CisgICAgX2ltYWdlUmVwbHlDYWxsYmFja3MuYXBwZW5k
KFtjb3BpZWRJbWFnZUNhbGxiYWNrXSAoTlNJbWFnZSAqaW1hZ2UpIHsKKyAgICAgICAgY29waWVk
SW1hZ2VDYWxsYmFjayhpbWFnZSk7CisgICAgICAgIEJsb2NrX3JlbGVhc2UoY29waWVkSW1hZ2VD
YWxsYmFjayk7CisgICAgfSk7CisKKyAgICBfcGFnZS0+Z2V0SW1hZ2VGb3JGaW5kTWF0Y2godGV4
dEZpbmRlck1hdGNoLmluZGV4KTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDM1ZDk3NGYxZTY2OTVkNzE2NDIzZjkxMDlhY2U4ZmRkMjdiOTZhMTAuLmViZjU2MmZk
OWNmM2NjODNlNDZkYzJiMzQwZjBhN2NlNGUzOWQxMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY5Miw2ICs2OTIsOCBAQAog
CQkyREQxMkEwODFBODE3N0YzMDAyQzc0RTYgLyogV0tQYWdlUmVuZGVyaW5nUHJvZ3Jlc3NFdmVu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERDEy
QTA3MUE4MTc3RjMwMDJDNzRFNiAvKiBXS1BhZ2VSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJERDEzQkQ1
MThGN0RBREQwMEUxMzBBMSAvKiBGaW5kQ29udHJvbGxlcklPUy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERDEzQkQzMThGN0RBREQwMEUxMzBBMSAv
KiBGaW5kQ29udHJvbGxlcklPUy5tbSAqLzsgfTsKIAkJMkRENjdBMkUxQkQ4MTk3MzAwNTNCMjUx
IC8qIEFQSUZpbmRNYXRjaGVzQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyREQ2N0EyRDFCRDgxOTczMDA1M0IyNTEgLyogQVBJRmluZE1hdGNo
ZXNDbGllbnQuaCAqLzsgfTsKKwkJMkRENjdBMzUxQkQ4NjEwNjAwNTNCMjUxIC8qIFdLVGV4dEZp
bmRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkRENjdBMzMxQkQ4NjEwNjAwNTNCMjUxIC8qIFdLVGV4dEZpbmRlckNsaWVudC5oICovOyB9
OworCQkyREQ2N0EzNjFCRDg2MTA2MDA1M0IyNTEgLyogV0tUZXh0RmluZGVyQ2xpZW50Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRENjdBMzQxQkQ4
NjEwNjAwNTNCMjUxIC8qIFdLVGV4dEZpbmRlckNsaWVudC5tbSAqLzsgfTsKIAkJMkREOUVCMkQx
QTZGMDEyNTAwQkIxMjY3IC8qIEFQSU5hdmlnYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERDlFQjJDMUE2RjAxMjUwMEJCMTI2NyAv
KiBBUElOYXZpZ2F0aW9uQ2xpZW50LmggKi87IH07CiAJCTJEREUwQUZBMTgyOThDQzkwMEY5N0VB
QSAvKiBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUwQUY4MTgyOThDQzkwMEY5N0VBQSAvKiBS
ZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaCAqLzsgfTsKIAkJMkRERTBBRkIxODI5OEND
OTAwRjk3RUFBIC8qIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUwQUY5MTgyOThDQzkwMEY5
N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0gKi87IH07CkBAIC0yODgx
LDYgKzI4ODMsOCBAQAogCQkyREQxMkEwNzFBODE3N0YzMDAyQzc0RTYgLyogV0tQYWdlUmVuZGVy
aW5nUHJvZ3Jlc3NFdmVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQ
YWdlUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkREMTNCRDMxOEY3REFERDAwRTEzMEExIC8qIEZpbmRDb250cm9sbGVySU9TLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRmluZENvbnRyb2xsZXJJT1MubW07
IHBhdGggPSBpb3MvRmluZENvbnRyb2xsZXJJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJERDY3QTJEMUJEODE5NzMwMDUzQjI1MSAvKiBBUElGaW5kTWF0Y2hlc0NsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElGaW5kTWF0Y2hlc0NsaWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREQ2N0EzMzFCRDg2MTA2MDA1M0IyNTEg
LyogV0tUZXh0RmluZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdLVGV4dEZpbmRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREQ2
N0EzNDFCRDg2MTA2MDA1M0IyNTEgLyogV0tUZXh0RmluZGVyQ2xpZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tUZXh0RmluZGVyQ2xpZW50Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREQ5RUIyQzFBNkYwMTI1MDBCQjEyNjcgLyogQVBJ
TmF2aWdhdGlvbkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElO
YXZpZ2F0aW9uQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEREUwQUY4
MTgyOThDQzkwMEY5N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBs
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEREUwQUY5MTgyOThDQzkwMEY5
N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTI1LDYgKzcxMjksOCBAQAogCQkJ
CTBGQ0I0RTVEMThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1ByaW50aW5nVmlldy5tbSAqLywKIAkJCQk1
MTNFNDYyQjFBRDgzNzU2MDAxNjIzNEEgLyogV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRl
LmggKi8sCiAJCQkJNTEzRTQ2MkMxQUQ4Mzc1NjAwMTYyMzRBIC8qIFdLU2hhcmluZ1NlcnZpY2VQ
aWNrZXJEZWxlZ2F0ZS5tbSAqLywKKwkJCQkyREQ2N0EzMzFCRDg2MTA2MDA1M0IyNTEgLyogV0tU
ZXh0RmluZGVyQ2xpZW50LmggKi8sCisJCQkJMkRENjdBMzQxQkQ4NjEwNjAwNTNCMjUxIC8qIFdL
VGV4dEZpbmRlckNsaWVudC5tbSAqLywKIAkJCQkwRkNCNEU1RTE4QkJFM0Q5MDAwRkNGQzkgLyog
V0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmggKi8sCiAJCQkJMEZDQjRFNUYxOEJCRTNEOTAw
MEZDRkM5IC8qIFdLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tbSAqLywKIAkJCQkyRDI4QTQ5
NTFBRjk2NUExMDBGMTkwQzkgLyogV0tWaWV3TGF5b3V0U3RyYXRlZ3kuaCAqLywKQEAgLTgxOTks
NiArODIwNSw3IEBACiAJCQkJRDNCOTQ4NDkxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBv
cHVwTWVudS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0ODMyRDcxQTlDREY5NjAwOEI0REZFIC8q
IFdlYnNpdGVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQ4MzJEMTFBOUJEQzJGMDA4QjRE
RkUgLyogV2Vic2l0ZURhdGFSZWNvcmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTJERDY3QTM1MUJE
ODYxMDYwMDUzQjI1MSAvKiBXS1RleHRGaW5kZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBNTNDMkFBMUEzMjU3MzAwMDRFOEM3MCAvKiBXZWJzaXRlRGF0YVN0b3JlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4MzYwMzRBMDFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRlRGF0YWJhc2VU
cmFja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTUyQzBGODFBMzhDREM3MDAxNjE2MEEgLyog
V2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTk1NDksNiAr
OTU1Niw3IEBACiAJCQkJRTE3OUZEOUYxMzREMzgyNTAwMTVCODgzIC8qIEFyZ3VtZW50Q29kZXJz
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMzJEQTUxMEY0MzdEMTAwNThDMTVBIC8qIEFy
Z3VtZW50RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzAzMkRBNzEwRjQzN0QxMDA1
OEMxNUEgLyogQXJndW1lbnRFbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJERDY3QTM2
MUJEODYxMDYwMDUzQjI1MSAvKiBXS1RleHRGaW5kZXJDbGllbnQubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDNTlDNEE1ODE4QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODM5OTAyMDIxQkU5QTAyQjAwMEYzNjUzIC8qIE5ldHdv
cmtMb2FkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNUU3NzI3MTgzREQ2RjYwMDA3MjAzRiAv
KiBBc3luY1JlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAzMDNlMWI3MzM2
YmExNTdjODBiNjM2MTcyMDgzYzM5NTcxMmQ1MzYzLi4zMDcwZTE1NTc4YTZmZTc0ODBlMDZmNmVk
MDI0ZTAzNzU4Y2U1NDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTE4MCw3ICsxODAsMTQgQEAgdm9pZCBGaW5k
Q29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0
IFN0cmluZyYgc3RyaW4KICAgICAgICAgICAgICAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCAt
PSBtYXRjaENvdW50OwogICAgICAgICB9CiAKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJpbmcoc3RyaW5nLCBtYXRjaENvdW50LCBtX2Zv
dW5kU3RyaW5nTWF0Y2hJbmRleCkpOworICAgICAgICBtX2ZpbmRNYXRjaGVzLmNsZWFyKCk7Cisg
ICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtYXRjaFJlY3RzOworICAgICAgICBpZiAoYXV0byByYW5n
ZSA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKSB7Cisg
ICAgICAgICAgICByYW5nZS0+YWJzb2x1dGVUZXh0UmVjdHMobWF0Y2hSZWN0cyk7CisgICAgICAg
ICAgICBtX2ZpbmRNYXRjaGVzLmFwcGVuZChyYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZyhzdHJp
bmcsIG1hdGNoUmVjdHMsIG1hdGNoQ291bnQsIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4KSk7CiAK
ICAgICAgICAgaWYgKCEob3B0aW9ucyAmIEZpbmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3IpIHx8
ICFzZWxlY3RlZEZyYW1lIHx8ICF1cGRhdGVGaW5kSW5kaWNhdG9yKCpzZWxlY3RlZEZyYW1lLCBz
aG91bGRTaG93T3ZlcmxheSkpCiAgICAgICAgICAgICBoaWRlRmluZEluZGljYXRvcigpOwpAQCAt
MjIxLDEzICsyMjgsMTUgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cmluZywgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWcKICAgICAgICAgICAgIGlm
IChmcy5zZWxlY3Rpb25Cb3VuZHMoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBtX2Zp
bmRNYXRjaGVzLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgaW50IGluZGV4Rm9yU2VsZWN0aW9u
OwotICAgICAgICAgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFN0cmluZ01hdGNo
aW5nUmFuZ2VzKHN0cmluZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCwgbV9maW5kTWF0
Y2hlcywgaW5kZXhGb3JTZWxlY3Rpb24pOworICAgICAgICAgICAgICAgIG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKHN0cmluZywgY29yZU9wdGlvbnMsIG1h
eE1hdGNoQ291bnQsIG1fZmluZE1hdGNoZXMsIGluZGV4Rm9yU2VsZWN0aW9uKTsKICAgICAgICAg
ICAgICAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCA9IGluZGV4Rm9yU2VsZWN0aW9uOwogICAg
ICAgICAgICAgICAgIGZvdW5kU3RyaW5nU3RhcnRzQWZ0ZXJTZWxlY3Rpb24gPSB0cnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCisgICAgbV9maW5kTWF0Y2hlcy5jbGVhcigp
OworCiAgICAgYm9vbCBmb3VuZDsKICAgICBpZiAocGx1Z2luVmlldykKICAgICAgICAgZm91bmQg
PSBwbHVnaW5WaWV3LT5maW5kU3RyaW5nKHN0cmluZywgY29yZU9wdGlvbnMsIG1heE1hdGNoQ291
bnQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IGUzNDk2YTU5NmY3ZmYwMmU5MzljNTE4ODlmYTExYTA4MTA0ZDkxYjQuLjNiYjQ2ZTI2ODhkYWEx
ZmZlZTkxZTI5MjFhYzQ0ZWVjYmUzNzk0NDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxNS0xMS0wNSAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcHJlbGltaW5h
cnkgKFNQSSkgc3VwcG9ydCBmb3IgTlNUZXh0RmluZGVyIG9uIFdLV2ViVmlldworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwOTA3CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8xOTE3MTYyND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNv
Y29hL0ZpbmRJblBhZ2UubW06IEFkZGVkLgorICAgICAgICAoLVtGaW5kSW5QYWdlTmF2aWdhdGlv
bkRlbGVnYXRlIHdlYlZpZXc6ZGlkRmluaXNoTmF2aWdhdGlvbjpdKToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICBBZGQgYW4gQVBJIHRlc3QuCisKKyAgICAgICAgKiBXZWJFZGl0aW5nVGVzdGVy
L1dLMVdlYkRvY3VtZW50Q29udHJvbGxlci5tOgorICAgICAgICAqIFdlYkVkaXRpbmdUZXN0ZXIv
V0syV2ViRG9jdW1lbnRDb250cm9sbGVyLm06CisgICAgICAgICgtW1dLMldlYkRvY3VtZW50Q29u
dHJvbGxlciBhd2FrZUZyb21OaWJdKToKKyAgICAgICAgKC1bV0syV2ViRG9jdW1lbnRDb250cm9s
bGVyIGNvbnRlbnRWaWV3XSk6CisgICAgICAgIFVzZSBpbmNyZW1lbnRhbCBmaW5kLCBhbmQgc2hv
dyB0aGUgb3ZlcmxheS9pbmRpY2F0b3IuCisKIDIwMTUtMTEtMDQgIFdlbnNvbiBIc2llaCAgPHdl
bnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGNyYXNoaW5nIGFuZCBmbGFreSBV
SVNjcmlwdENvbnRyb2xsZXItYmFzZWQgdGVzdHMgaW4gZmFzdC9ldmVudHMvaW9zCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGVkODM3OGYxZWY1YzExZDQ2OGE5OWZiNmJmMDVjYWZmZmRhZDcx
ZjEuLjlkYmMxYjYxMjY2MDZmZDFkYmRmNTdhMDk4YWE5MTU1NzViYzE0OWEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0zNiw2ICszNiw3IEBACiAJCTI5MEY0Mjc1MTcyQTIyMUMwMDkzOUZG
MCAvKiBjdXN0b20tcHJvdG9jb2wtc3luYy14aHIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTBGNDI3NDE3MkExRkRFMDA5MzlGRjAg
LyogY3VzdG9tLXByb3RvY29sLXN5bmMteGhyLmh0bWwgKi87IH07CiAJCTI5NzIzNEI3MTczQUZB
QzcwMDk4MzYwMSAvKiBDdXN0b21Qcm90b2NvbHNJbnZhbGlkU2NoZW1lX0J1bmRsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTcyMzRCNTE3M0FG
QUM3MDA5ODM2MDEgLyogQ3VzdG9tUHJvdG9jb2xzSW52YWxpZFNjaGVtZV9CdW5kbGUuY3BwICov
OyB9OwogCQkyRDFGRTBCMDFBRDQ2NUMxMDA2Q0Q5RTYgLyogRml4ZWRMYXlvdXRTaXplLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxRkUwQUYxQUQ0
NjVDMTAwNkNEOUU2IC8qIEZpeGVkTGF5b3V0U2l6ZS5tbSAqLzsgfTsKKwkJMkQ4MTA0Q0MxQkVD
MTNFNzAwMjBEQTQ2IC8qIEZpbmRJblBhZ2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDgxMDRDQjFCRUMxM0U3MDAyMERBNDYgLyogRmluZEluUGFn
ZS5tbSAqLzsgfTsKIAkJMkQ5QTUzQUYxQjMxRkE4RDAwNzRENUFBIC8qIFNocmlua1RvRml0Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QTUzQUUx
QjMxRkE4RDAwNzRENUFBIC8qIFNocmlua1RvRml0Lm1tICovOyB9OwogCQkyREQzNTUzNjFCRDA4
Mzc4MDA1REY0QTcgLyogQXV0b0xheW91dEludGVncmF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkREMzU1MzUxQkQwODM3ODAwNURGNEE3IC8q
IEF1dG9MYXlvdXRJbnRlZ3JhdGlvbi5tbSAqLzsgfTsKIAkJMkREN0QzQUYxNzgyMjdCMzAwMjZF
MUUzIC8qIGxvdHMtb2YtdGV4dC12ZXJ0aWNhbC1sci5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERDdEM0FFMTc4MjI3QUMwMDI2RTFF
MyAvKiBsb3RzLW9mLXRleHQtdmVydGljYWwtbHIuaHRtbCAqLzsgfTsKQEAgLTUxOSw2ICs1MjAs
NyBAQAogCQkyOUFCOEFBMzE2NEM3QTkzMDBENDlCRUMgLyogVGVzdEJyb3dzaW5nQ29udGV4dExv
YWREZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXN0QnJvd3Np
bmdDb250ZXh0TG9hZERlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJE
MUZFMEFGMUFENDY1QzEwMDZDRDlFNiAvKiBGaXhlZExheW91dFNpemUubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaXhlZExheW91dFNpemUubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENjQwQjU0MTc4NzVERkYwMEJGQUY5OSAvKiBTY3JvbGxQ
aW5uaW5nQmVoYXZpb3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcm9sbFBpbm5pbmdCZWhhdmlvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyRDgxMDRDQjFCRUMxM0U3MDAyMERBNDYgLyogRmluZEluUGFnZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpbmRJblBhZ2UubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJEOUE1M0FFMUIzMUZBOEQwMDc0RDVBQSAvKiBTaHJpbmtUb0ZpdC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNocmlua1RvRml0Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREQzNTUzNTFCRDA4Mzc4MDA1REY0QTcg
LyogQXV0b0xheW91dEludGVncmF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQXV0b0xheW91dEludGVncmF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyREQ3RDNBOTE3ODIwNUQwMDAyNkUxRTMgLyogUmVzaXplUmV2ZXJzZVBhZ2lu
YXRlZFdlYlZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
aXplUmV2ZXJzZVBhZ2luYXRlZFdlYlZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtOTI5LDYgKzkzMSw3IEBACiAJCQkJQTE0RkM1ODYxQjg5OTFCNjAwRDEwN0VCIC8qIENv
bnRlbnRGaWx0ZXJpbmcubW0gKi8sCiAJCQkJQTE0RkM1ODkxQjg5OTI3MTAwRDEwN0VCIC8qIENv
bnRlbnRGaWx0ZXJpbmdQbHVnSW4ubW0gKi8sCiAJCQkJQTFBNEZFNUQxOEREM0RCNzAwQjVFQThB
IC8qIERvd25sb2FkLm1tICovLAorCQkJCTJEODEwNENCMUJFQzEzRTcwMDIwREE0NiAvKiBGaW5k
SW5QYWdlLm1tICovLAogCQkJCTJEMUZFMEFGMUFENDY1QzEwMDZDRDlFNiAvKiBGaXhlZExheW91
dFNpemUubW0gKi8sCiAJCQkJMzdEMzZFRDYxQUY0MkVDRDAwQkFGNUQ5IC8qIExvYWRBbHRlcm5h
dGVIVE1MU3RyaW5nLm1tICovLAogCQkJCTUxQ0QxQzZBMUIzOENFMzYwMDE0MkNBNSAvKiBNb2Rh
bEFsZXJ0cy5tbSAqLywKQEAgLTE3OTksNiArMTgwMiw3IEBACiAJCQkJMkQxRkUwQjAxQUQ0NjVD
MTAwNkNEOUU2IC8qIEZpeGVkTGF5b3V0U2l6ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDQjlC
QzM4MUE2NzQ4MjMwMEZFNTY3OCAvKiBXZWFrUHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJF
Nzc2NUNEMTZDNEQ4MEEwMEJBMkJCMSAvKiBtYWluSU9TLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
MkQ4MTA0Q0MxQkVDMTNFNzAwMjBEQTQ2IC8qIEZpbmRJblBhZ2UubW0gaW4gU291cmNlcyAqLywK
IAkJCQk0MTk3M0I1RDFBRjIyODc1MDA2QzdCMzYgLyogU2hhcmVkQnVmZmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTJERDM1NTM2MUJEMDgzNzgwMDVERjRBNyAvKiBBdXRvTGF5b3V0SW50ZWdy
YXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QUE2QTE1MjFBQUMwQjMxMDAyQjJFRDMgLyog
V29ya1F1ZXVlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvRmluZEluUGFnZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0MkNvY29hL0ZpbmRJblBhZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTU2ZjAzMWUx
YTVjOWNjYmEzOWZjOGZkN2M5NzVkZTFmNmYyNDkwYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL0ZpbmRJblBhZ2UubW0KQEAgLTAsMCAr
MSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbXBvcnQgIlBs
YXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgor
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQgJiYgIVBMQVRG
T1JNKElPUykKKwordHlwZWRlZiBlbnVtIDogTlNVSW50ZWdlciB7CisgICAgTlNUZXh0RmluZGVy
QXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9uc0JhY2t3YXJkcyA9IDEgPDwgMCwKK30gTlNU
ZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9uczsKKworQHByb3RvY29sIE5T
VGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNoIDxOU09iamVjdD4KK0Bwcm9w
ZXJ0eSAocmV0YWluLCBub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5ICp0ZXh0UmVjdHM7CitA
ZW5kCisKK0BpbnRlcmZhY2UgV0tXZWJWaWV3IChOU1RleHRGaW5kZXJTdXBwb3J0KQorCistICh2
b2lkKWZpbmRNYXRjaGVzRm9yU3RyaW5nOihOU1N0cmluZyAqKXRhcmdldFN0cmluZyByZWxhdGl2
ZVRvTWF0Y2g6KGlkIDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4p
cmVsYXRpdmVNYXRjaCBmaW5kT3B0aW9uczooTlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1l
bnRGaW5kT3B0aW9ucylmaW5kT3B0aW9ucyBtYXhSZXN1bHRzOihOU1VJbnRlZ2VyKW1heFJlc3Vs
dHMgcmVzdWx0Q29sbGVjdG9yOih2b2lkICheKShOU0FycmF5ICptYXRjaGVzLCBCT09MIGRpZFdy
YXApKXJlc3VsdENvbGxlY3RvcjsKKworQGVuZAorCitzdGF0aWMgYm9vbCBuYXZpZ2F0aW9uRG9u
ZTsKK3N0YXRpYyBib29sIGZpbmRNYXRjaGVzRG9uZTsKKworQGludGVyZmFjZSBGaW5kSW5QYWdl
TmF2aWdhdGlvbkRlbGVnYXRlIDogTlNPYmplY3QgPFdLTmF2aWdhdGlvbkRlbGVnYXRlPgorQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gRmluZEluUGFnZU5hdmlnYXRpb25EZWxlZ2F0ZQorCistICh2
b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluaXNoTmF2aWdhdGlvbjooV0tO
YXZpZ2F0aW9uICopbmF2aWdhdGlvbgoreworICAgIG5hdmlnYXRpb25Eb25lID0gdHJ1ZTsKK30K
KworQGVuZAorCitURVNUKFdlYktpdDIsIEZpbmRJblBhZ2UpCit7CisgICAgUmV0YWluUHRyPFdL
V2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCAxMDAsIDEwMCldKTsKKworICAgIEZpbmRJblBhZ2VOYXZpZ2F0
aW9uRGVsZWdhdGUgKmRlbGVnYXRlID0gW1tGaW5kSW5QYWdlTmF2aWdhdGlvbkRlbGVnYXRlIGFs
bG9jXSBpbml0XTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGVd
OworCisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAibG90cy1vZi10ZXh0
IiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CisKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJm5hdmlnYXRpb25Eb25lKTsKKworICAgIE5TVGV4dEZpbmRl
ckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE9wdGlvbnMgbm9GaW5kT3B0aW9ucyA9IChOU1RleHRG
aW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25zKTA7CisKKyAgICAvLyBGaW5kIGFs
bCBtYXRjaGVzLgorICAgIFt3ZWJWaWV3IGZpbmRNYXRjaGVzRm9yU3RyaW5nOkAiQmlydGhkYXki
IHJlbGF0aXZlVG9NYXRjaDpuaWwgZmluZE9wdGlvbnM6bm9GaW5kT3B0aW9ucyBtYXhSZXN1bHRz
Ok5TVUludGVnZXJNYXggcmVzdWx0Q29sbGVjdG9yOl4oTlNBcnJheSAqbWF0Y2hlcywgQk9PTCBk
aWRXcmFwKSB7CisgICAgICAgIEVYUEVDVF9FUSgoTlNVSW50ZWdlcikzNjAsIG1hdGNoZXMuY291
bnQpOworCisgICAgICAgIGlkIDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRN
YXRjaD4gZmlyc3RNYXRjaCA9IFttYXRjaGVzIG9iamVjdEF0SW5kZXg6MF07CisgICAgICAgIEVY
UEVDVF9FUSgoTlNVSW50ZWdlcikxLCBmaXJzdE1hdGNoLnRleHRSZWN0cy5jb3VudCk7CisKKyAg
ICAgICAgZmluZE1hdGNoZXNEb25lID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZmluZE1hdGNoZXNEb25lKTsKKyAgICBmaW5kTWF0Y2hlc0RvbmUgPSBm
YWxzZTsKKworICAgIC8vIEZpbmQgb25lIG1hdGNoLCBkb2luZyBhbiBpbmNyZW1lbnRhbCBzZWFy
Y2guCisgICAgW3dlYlZpZXcgZmluZE1hdGNoZXNGb3JTdHJpbmc6QCJCaXJ0aGRheSIgcmVsYXRp
dmVUb01hdGNoOm5pbCBmaW5kT3B0aW9uczpub0ZpbmRPcHRpb25zIG1heFJlc3VsdHM6MSByZXN1
bHRDb2xsZWN0b3I6XihOU0FycmF5ICptYXRjaGVzLCBCT09MIGRpZFdyYXApIHsKKyAgICAgICAg
RVhQRUNUX0VRKChOU1VJbnRlZ2VyKTEsIG1hdGNoZXMuY291bnQpOworCisgICAgICAgIGlkIDxO
U1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4gZmlyc3RNYXRjaCA9IFtt
YXRjaGVzIG9iamVjdEF0SW5kZXg6MF07CisgICAgICAgIEVYUEVDVF9FUSgoTlNVSW50ZWdlcikx
LCBmaXJzdE1hdGNoLnRleHRSZWN0cy5jb3VudCk7CisKKyAgICAgICAgLy8gRmluZCB0aGUgbmV4
dCBtYXRjaCBpbiBpbmNyZW1lbnRhbCBtb2RlLgorICAgICAgICBbd2ViVmlldyBmaW5kTWF0Y2hl
c0ZvclN0cmluZzpAIkJpcnRoZGF5IiByZWxhdGl2ZVRvTWF0Y2g6bmlsIGZpbmRPcHRpb25zOm5v
RmluZE9wdGlvbnMgbWF4UmVzdWx0czoxIHJlc3VsdENvbGxlY3RvcjpeKE5TQXJyYXkgKm1hdGNo
ZXMsIEJPT0wgZGlkV3JhcCkgeworICAgICAgICAgICAgRVhQRUNUX0VRKChOU1VJbnRlZ2VyKTEs
IG1hdGNoZXMuY291bnQpOworCisgICAgICAgICAgICBpZCA8TlNUZXh0RmluZGVyQXN5bmNocm9u
b3VzRG9jdW1lbnRGaW5kTWF0Y2g+IHNlY29uZE1hdGNoID0gW21hdGNoZXMgb2JqZWN0QXRJbmRl
eDowXTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgoTlNVSW50ZWdlcikxLCBzZWNvbmRNYXRjaC50
ZXh0UmVjdHMuY291bnQpOworCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoTlNFcXVhbFJlY3Rz
KFtmaXJzdE1hdGNoLnRleHRSZWN0cy5sYXN0T2JqZWN0IHJlY3RWYWx1ZV0sIFtzZWNvbmRNYXRj
aC50ZXh0UmVjdHMubGFzdE9iamVjdCByZWN0VmFsdWVdKSk7CisKKyAgICAgICAgICAgIC8vIEZp
bmQgdGhlIHByZXZpb3VzIG1hdGNoIGluIGluY3JlbWVudGFsIG1vZGUuCisgICAgICAgICAgICBb
d2ViVmlldyBmaW5kTWF0Y2hlc0ZvclN0cmluZzpAIkJpcnRoZGF5IiByZWxhdGl2ZVRvTWF0Y2g6
bmlsIGZpbmRPcHRpb25zOk5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE9wdGlv
bnNCYWNrd2FyZHMgbWF4UmVzdWx0czoxIHJlc3VsdENvbGxlY3RvcjpeKE5TQXJyYXkgKm1hdGNo
ZXMsIEJPT0wgZGlkV3JhcCkgeworICAgICAgICAgICAgICAgIEVYUEVDVF9FUSgoTlNVSW50ZWdl
cikxLCBtYXRjaGVzLmNvdW50KTsKKworICAgICAgICAgICAgICAgIGlkIDxOU1RleHRGaW5kZXJB
c3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4gZmlyc3RNYXRjaEFnYWluID0gW21hdGNoZXMg
b2JqZWN0QXRJbmRleDowXTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoKE5TVUludGVnZXIp
MSwgZmlyc3RNYXRjaEFnYWluLnRleHRSZWN0cy5jb3VudCk7CisKKyAgICAgICAgICAgICAgICBF
WFBFQ1RfVFJVRShOU0VxdWFsUmVjdHMoW2ZpcnN0TWF0Y2gudGV4dFJlY3RzLmxhc3RPYmplY3Qg
cmVjdFZhbHVlXSwgW2ZpcnN0TWF0Y2hBZ2Fpbi50ZXh0UmVjdHMubGFzdE9iamVjdCByZWN0VmFs
dWVdKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZmluZE1hdGNoZXNEb25l
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH1dOworICAgICAgICB9XTsKKworICAgIH1dOworCisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5kTWF0Y2hlc0RvbmUpOworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkVkaXRpbmdUZXN0ZXIvV0sxV2ViRG9jdW1lbnRDb250cm9s
bGVyLm0gYi9Ub29scy9XZWJFZGl0aW5nVGVzdGVyL1dLMVdlYkRvY3VtZW50Q29udHJvbGxlci5t
CmluZGV4IGRlMDU2NjI2NDI2ZGU3OWQwOTRhNzQ4ZDkxZWRhNGFmODc3NmYxZjUuLjU3Zjc5ZGFl
MThmMWVkOWMwZjU2NWJjMTFmZDEzZjA1NTVmYTEyMTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkVk
aXRpbmdUZXN0ZXIvV0sxV2ViRG9jdW1lbnRDb250cm9sbGVyLm0KKysrIGIvVG9vbHMvV2ViRWRp
dGluZ1Rlc3Rlci9XSzFXZWJEb2N1bWVudENvbnRyb2xsZXIubQpAQCAtMzEsNyArMzEsNyBAQAog
I2ltcG9ydCA8V2ViS2l0L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dlYlZpZXdQcml2YXRlLmg+CiAKLUBpbnRlcmZhY2UgV0sxV2ViRG9jdW1lbnRDb250cm9s
bGVyKCkKK0BpbnRlcmZhY2UgV0sxV2ViRG9jdW1lbnRDb250cm9sbGVyICgpIDxXZWJVSURlbGVn
YXRlPgogQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykgV2ViVmlldyAqd2ViVmlldzsKIEBl
bmQKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViRWRpdGluZ1Rlc3Rlci9XSzJXZWJEb2N1bWVudENv
bnRyb2xsZXIubSBiL1Rvb2xzL1dlYkVkaXRpbmdUZXN0ZXIvV0syV2ViRG9jdW1lbnRDb250cm9s
bGVyLm0KaW5kZXggZWZhZjYwYThhYzZjODMzZjYyNjk0MDU1NTg4YTRkOTk0NGI5YzliYi4uNDk5
MTFkODZiNWEyNDI3YjQwMmNhZTJkYzc2OWJiNjg0MTUxMmVmMyAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViRWRpdGluZ1Rlc3Rlci9XSzJXZWJEb2N1bWVudENvbnRyb2xsZXIubQorKysgYi9Ub29scy9X
ZWJFZGl0aW5nVGVzdGVyL1dLMldlYkRvY3VtZW50Q29udHJvbGxlci5tCkBAIC03Myw3ICs3Myw5
IEBAIC0gKHZvaWQpYXdha2VGcm9tTmliCiAgICAgc2VsZi53aW5kb3cudGl0bGUgPSBAIldlYkVk
aXRvciBbV0syXSI7CiAKICAgICBfdGV4dEZpbmRlciA9IFtbTlNUZXh0RmluZGVyIGFsbG9jXSBp
bml0XTsKLSAgICBfdGV4dEZpbmRlci5jbGllbnQgPSAoaWQ8TlNUZXh0RmluZGVyQ2xpZW50Pilf
d2ViVmlldzsKKyAgICBfdGV4dEZpbmRlci5pbmNyZW1lbnRhbFNlYXJjaGluZ0VuYWJsZWQgPSBZ
RVM7CisgICAgX3RleHRGaW5kZXIuaW5jcmVtZW50YWxTZWFyY2hpbmdTaG91bGREaW1Db250ZW50
VmlldyA9IFlFUzsKKyAgICBfdGV4dEZpbmRlci5jbGllbnQgPSBfd2ViVmlldzsKICAgICBfdGV4
dEZpbmRlci5maW5kQmFyQ29udGFpbmVyID0gc2VsZjsKIH0KIApAQCAtMTAyLDYgKzEwNCwxMSBA
QCAtICh2b2lkKXNldEZpbmRCYXJWaWV3OihOU1ZpZXcgKilmaW5kQmFyVmlldwogICAgIFtzZWxm
IGxheW91dF07CiB9CiAKKy0gKE5TVmlldyAqKWNvbnRlbnRWaWV3Cit7CisgICAgcmV0dXJuIF93
ZWJWaWV3OworfQorCiAtIChCT09MKWlzRmluZEJhclZpc2libGUKIHsKICAgICByZXR1cm4gX2Zp
bmRCYXJWaXNpYmxlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264903</attachid>
            <date>2015-11-05 17:10:30 -0800</date>
            <delta_ts>2015-11-06 09:23:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150907-20151105170931.patch</filename>
            <type>text/plain</type>
            <size>47377</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTExZTNjY2U5Y2I0NGRj
ODUzODk0Y2Y0OTg2MzUzZTc3MWMzMTIwNS4uYWI1OWVhYTAyZjk5YTM1MWUzMDY4ZjgxZWNkMzA5
ZmQ0OTRmMzg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDE1LTExLTA1ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBwcmVsaW1p
bmFyeSAoU1BJKSBzdXBwb3J0IGZvciBOU1RleHRGaW5kZXIgb24gV0tXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA5MDcKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzE5MTcxNjI0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5ldyBBUEkgdGVzdDogV2ViS2l0Mi5GaW5kSW5QYWdlCisKKyAg
ICAgICAgKiBQbGF0Zm9ybS9zcGkvbWFjL0FwcEtpdFNQSS5oOgorICAgICAgICBBZGQgc29tZSBT
UEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUZpbmRDbGllbnQuaDoKKyAgICAgICAg
KEFQSTo6RmluZENsaWVudDo6ZGlkRmluZFN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlRmluZENsaWVudCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6ZGlkRmluZFN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29jb2EvRmluZENsaWVudC5tbToKKyAgICAgICAgKFdlYktpdDo6RmluZENsaWVudDo6ZGlkRmlu
ZFN0cmluZyk6CisgICAgICAgIE1ha2UgZGlkRmluZFN0cmluZyByZXR1cm4gdGhlIG1hdGNoIHJl
Y3RzIGxpa2UgZGlkRmluZFN0cmluZ01hdGNoZXMgZG9lcy4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250
cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpG
aW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyk6CisgICAgICAgIEtlZXAgdGhlIG1vc3QgcmVjZW50
IGZpbmQgbWF0Y2ggYXJvdW5kIGZvciBpbmNyZW1lbnRhbCBmaW5kIGp1c3QgbGlrZSB3ZSBkbwor
ICAgICAgICBmb3IgdGhlIG5vbi1pbmNyZW1lbnRhbCB2ZXJzaW9uLiBUaGlzIHdheSwgZ2V0SW1h
Z2VGb3JGaW5kTWF0Y2ggYW5kIHNlbGVjdEZpbmRNYXRjaAorICAgICAgICB3aWxsIHdvcmsgZm9y
IGluY3JlbWVudGFsIGZpbmQgdG9vIQorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfZW5zdXJlVGV4dEZpbmRlckNsaWVu
dF0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgZmluZE1hdGNoZXNGb3JTdHJpbmc6cmVsYXRpdmVU
b01hdGNoOmZpbmRPcHRpb25zOm1heFJlc3VsdHM6cmVzdWx0Q29sbGVjdG9yOl0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgZG9jdW1lbnRDb250YWluZXJWaWV3XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBnZXRTZWxlY3RlZFRleHQ6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzZWxlY3RGaW5k
TWF0Y2g6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgIEltcGxlbWVudCBOU1RleHRGaW5k
ZXIncyBhc3luYyBjbGllbnQgcHJvdG9jb2wgYW5kIGZvcndhcmQgdG8gdGhlIG5ldyBXS1RleHRG
aW5kZXJDbGllbnQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1By
aXZhdGUuaDoKKyAgICAgICAgUHJpdmF0ZWx5IG5vdGUgb3VyIGNvbmZvcm1hbmNlIHRvIHRoZSBh
Zm9ybWVudGlvbmVkIHByb3RvY29sLgorCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS1RleHRG
aW5kZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS1RleHRGaW5k
ZXJDbGllbnQubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpUZXh0RmluZGVyRmluZENsaWVu
dDo6VGV4dEZpbmRlckZpbmRDbGllbnQpOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJNYXRjaCBp
bml0V2l0aENsaWVudDp2aWV3OmluZGV4OnJlY3RzOl0pOgorICAgICAgICAoLVtXS1RleHRGaW5k
ZXJNYXRjaCBjb250YWluaW5nVmlld10pOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJNYXRjaCB0
ZXh0UmVjdHNdKToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyTWF0Y2ggZ2VuZXJhdGVUZXh0SW1h
Z2U6XSk6CisgICAgICAgICgtW1dLVGV4dEZpbmRlck1hdGNoIGluZGV4XSk6CisgICAgICAgICgt
W1dLVGV4dEZpbmRlckNsaWVudCBpbml0V2l0aFBhZ2U6dmlldzpdKToKKyAgICAgICAgKC1bV0tU
ZXh0RmluZGVyQ2xpZW50IHdpbGxEZXN0cm95VmlldzpdKToKKyAgICAgICAgKC1bV0tUZXh0Rmlu
ZGVyQ2xpZW50IGZpbmRNYXRjaGVzRm9yU3RyaW5nOnJlbGF0aXZlVG9NYXRjaDpmaW5kT3B0aW9u
czptYXhSZXN1bHRzOnJlc3VsdENvbGxlY3RvcjpdKToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVy
Q2xpZW50IGdldFNlbGVjdGVkVGV4dDpdKToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyQ2xpZW50
IHNlbGVjdEZpbmRNYXRjaDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tUZXh0
RmluZGVyQ2xpZW50IGRpZEZpbmRTdHJpbmdNYXRjaGVzOnJlY3RzOmluZGV4Ol0pOgorICAgICAg
ICAoLVtXS1RleHRGaW5kZXJDbGllbnQgZGlkR2V0SW1hZ2VGb3JNYXRjaFJlc3VsdDppbmRleDpd
KToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyQ2xpZW50IGRpZEZpbmRTdHJpbmc6cmVjdHM6aW5k
ZXg6XSk6CisgICAgICAgICgtW1dLVGV4dEZpbmRlckNsaWVudCBkaWRGYWlsVG9GaW5kU3RyaW5n
Ol0pOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJDbGllbnQgZ2V0SW1hZ2VGb3JNYXRjaFJlc3Vs
dDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBXS1RleHRGaW5kZXJDbGllbnQuIEl0IGluc3RhbGxz
IGl0c2VsZiBhcyB0aGUgRmluZENsaWVudCBhbmQgRmluZE1hdGNoZXNDbGllbnQsCisgICAgICAg
IHNvIHlvdSBjYW4gb25seSB1c2Ugb25lIG1lY2hhbmlzbSBvciB0aGUgb3RoZXIuCisKIDIwMTUt
MTEtMDQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UkVHUkVTU0lPTiAocjE5MTQ5OSk6IDEwMCUgcmVwcm8gY3Jhc2ggdW5kZXIgX3ByZXBhcmVGb3JN
b3ZlVG9XaW5kb3c6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9zcGkvbWFj
L0FwcEtpdFNQSS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vc3BpL21hYy9BcHBLaXRTUEku
aAppbmRleCBhMzZmODc4MjZiZTFhYzcxZWZlYzFhZWNmNjg1Mjk2NTQyZmE0Y2JlLi5iMzRmMTlj
MGYwYjA3OWMzMTU3ODZhYjIxMWI3ZjVjMzc3MGQ5OWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9zcGkvbWFjL0FwcEtpdFNQSS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL3NwaS9tYWMvQXBwS2l0U1BJLmgKQEAgLTIzLDkgKzIzLDEyIEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmIFBMQVRGT1JNKE1BQykKKwogI2lm
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAKICNpbXBvcnQgPEFwcEtpdC9OU0FjY2Vzc2liaWxp
dHlSZW1vdGVVSUVsZW1lbnQuaD4KKyNpbXBvcnQgPEFwcEtpdC9OU1RleHRGaW5kZXJfUHJpdmF0
ZS5oPgogCiAjZWxzZQogCkBAIC0zNSw2ICszOCwyOSBAQAogCiBAZW5kCiAKK3R5cGVkZWYgZW51
bSA6IE5TVUludGVnZXIgeworICAgIE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50Rmlu
ZE9wdGlvbnNCYWNrd2FyZHMgPSAxIDw8IDAsCisgICAgTlNUZXh0RmluZGVyQXN5bmNocm9ub3Vz
RG9jdW1lbnRGaW5kT3B0aW9uc1dyYXAgPSAxIDw8IDEsCisgICAgTlNUZXh0RmluZGVyQXN5bmNo
cm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSA9IDEgPDwgMiwKKyAgICBO
U1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25zU3RhcnRzV2l0aCA9IDEg
PDwgMywKK30gTlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9uczsKKwor
QHByb3RvY29sIE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNoIDxOU09i
amVjdD4KK0ByZXF1aXJlZAorQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TVmlldyAqY29udGFpbmluZ1ZpZXc7CitAcHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWljLCBy
ZWFkb25seSkgTlNBcnJheSAqdGV4dFJlY3RzOworLSAodm9pZClnZW5lcmF0ZVRleHRJbWFnZToo
dm9pZCAoXikoTlNJbWFnZSAqKSljb21wbGV0aW9uSGFuZGxlcjsKK0BlbmQKKworQGludGVyZmFj
ZSBOU09iamVjdCAoKQorCistICh2b2lkKWZpbmRNYXRjaGVzRm9yU3RyaW5nOihOU1N0cmluZyAq
KXRhcmdldFN0cmluZyByZWxhdGl2ZVRvTWF0Y2g6KGlkIDxOU1RleHRGaW5kZXJBc3luY2hyb25v
dXNEb2N1bWVudEZpbmRNYXRjaD4pcmVsYXRpdmVNYXRjaCBmaW5kT3B0aW9uczooTlNUZXh0Rmlu
ZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9ucylmaW5kT3B0aW9ucyBtYXhSZXN1bHRz
OihOU1VJbnRlZ2VyKW1heFJlc3VsdHMgcmVzdWx0Q29sbGVjdG9yOih2b2lkICheKShOU0FycmF5
ICptYXRjaGVzLCBCT09MIGRpZFdyYXApKXJlc3VsdENvbGxlY3RvcjsKKy0gKE5TVmlldyAqKWRv
Y3VtZW50Q29udGFpbmVyVmlldzsKKy0gKHZvaWQpZ2V0U2VsZWN0ZWRUZXh0Oih2b2lkICheKShO
U1N0cmluZyAqc2VsZWN0ZWRUZXh0U3RyaW5nKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
c2VsZWN0RmluZE1hdGNoOihpZCA8TlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5k
TWF0Y2g+KWZpbmRNYXRjaCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxl
dGlvbkhhbmRsZXI7CisKK0BlbmQKKwogI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
CiAKIEBpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoKQpAQCAtNDMsMyArNjksNSBAQAogLSAodm9p
ZClfc2V0Q3VycmVudEV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CiAKIEBlbmQKKworI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJRmluZENsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElGaW5kQ2xp
ZW50LmgKaW5kZXggMDBiZGVjOTY0MGM3NTFlNWE4YjI3YWJmNTNhNWI1ZWFiMjdlNDUwMi4uMGFi
ZjhmNjczOTI2Yzc2ZDY4OWNlNzc2MmUzY2E4NzYwYjBkNzc0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElGaW5kQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9BUElGaW5kQ2xpZW50LmgKQEAgLTI4LDYgKzI4LDEwIEBACiAKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgSW50UmVjdDsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQYWdlUHJveHk7
CiB9CkBAIC0zOSw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GaW5kQ2xpZW50KCkg
eyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVzKFdlYktpdDo6V2Vi
UGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmLCB1aW50MzJfdCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGRpZEZpbmRTdHJpbmcoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0
cmluZyYsIHVpbnQzMl90LCBpbnQzMl90KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0
cmluZyhXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+JiBtYXRjaFJlY3RzLCB1aW50MzJfdCwgaW50MzJfdCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoV2ViS2l0OjpXZWJQYWdlUHJv
eHkqLCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmNwcAppbmRleCBhYzU3ZDNkYjVjZWU0OWVmYjhiYmIwNWEzNmViMGEw
NWY5Zjg3NTAwLi5iZTdmYzQyMjUxOTI2MTI2MGYzOWM4MDM2MDI2NDJkYjFiOTliOWUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtODg3LDcgKzg4Nyw3
IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUZpbmRDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0
IFdLUGFnZUZpbmRDbGllbnRCYXNlKiB3a0NsCiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSogcGFnZSwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QpIG92ZXJyaWRl
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSogcGFnZSwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYsIHVp
bnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmICghbV9jbGllbnQuZGlkRmluZFN0cmluZykKICAgICAgICAgICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
dy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmlu
ZGV4IGUwYmFiMzczZWNlYWE4MzlkZjhjMTZkMjBhMDlmNjJiNGFjZjk1ZTguLjlhOWFiNTBlZGMx
YzVjNTQyNTBhYjlkZTliNGY4NjA1NWMzZDFiMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0
ICJBUElGb3JtQ2xpZW50LmgiCiAjaW1wb3J0ICJBUElQYWdlQ29uZmlndXJhdGlvbi5oIgogI2lt
cG9ydCAiQVBJU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW1wb3J0ICJBcHBLaXRTUEkuaCIK
ICNpbXBvcnQgIkNvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXIuaCIKICNpbXBvcnQgIkRpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmgiCiAjaW1wb3J0ICJGaW5kQ2xpZW50LmgiCkBAIC0xNDQsNiAr
MTQ1LDcgQEAgZW51bSBjbGFzcyBEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlIHsKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCAiV0tUZXh0RmluZGVyQ2xpZW50LmgiCiAjaW1w
b3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgogCkBA
IC0yMzUsNiArMjM3LDcgQEAgV0tXZWJWaWV3KiBmcm9tV2ViUGFnZVByb3h5KFdlYktpdDo6V2Vi
UGFnZVByb3h5JiBwYWdlKQogI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJLaXQ6OldlYlZpZXdJbXBsPiBfaW1wbDsKKyAgICBSZXRhaW5QdHI8V0tUZXh0
RmluZGVyQ2xpZW50PiBfdGV4dEZpbmRlckNsaWVudDsKICNlbmRpZgogfQogCkBAIC0yNjQ0LDYg
KzI2NDcsMzMgQEAgV0VCQ09SRV9DT01NQU5EKHlhbmtBbmRTZWxlY3QpCiB9CiAjZW5kaWYKIAor
LSAoV0tUZXh0RmluZGVyQ2xpZW50ICopX2Vuc3VyZVRleHRGaW5kZXJDbGllbnQKK3sKKyAgICBp
ZiAoIV90ZXh0RmluZGVyQ2xpZW50KQorICAgICAgICBfdGV4dEZpbmRlckNsaWVudCA9IGFkb3B0
TlMoW1tXS1RleHRGaW5kZXJDbGllbnQgYWxsb2NdIGluaXRXaXRoUGFnZToqX3BhZ2Ugdmlldzpz
ZWxmXSk7CisgICAgcmV0dXJuIF90ZXh0RmluZGVyQ2xpZW50LmdldCgpOworfQorCistICh2b2lk
KWZpbmRNYXRjaGVzRm9yU3RyaW5nOihOU1N0cmluZyAqKXRhcmdldFN0cmluZyByZWxhdGl2ZVRv
TWF0Y2g6KGlkIDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4pcmVs
YXRpdmVNYXRjaCBmaW5kT3B0aW9uczooTlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRG
aW5kT3B0aW9ucylmaW5kT3B0aW9ucyBtYXhSZXN1bHRzOihOU1VJbnRlZ2VyKW1heFJlc3VsdHMg
cmVzdWx0Q29sbGVjdG9yOih2b2lkICheKShOU0FycmF5ICptYXRjaGVzLCBCT09MIGRpZFdyYXAp
KXJlc3VsdENvbGxlY3RvcgoreworICAgIFtbc2VsZiBfZW5zdXJlVGV4dEZpbmRlckNsaWVudF0g
ZmluZE1hdGNoZXNGb3JTdHJpbmc6dGFyZ2V0U3RyaW5nIHJlbGF0aXZlVG9NYXRjaDpyZWxhdGl2
ZU1hdGNoIGZpbmRPcHRpb25zOmZpbmRPcHRpb25zIG1heFJlc3VsdHM6bWF4UmVzdWx0cyByZXN1
bHRDb2xsZWN0b3I6cmVzdWx0Q29sbGVjdG9yXTsKK30KKworLSAoTlNWaWV3ICopZG9jdW1lbnRD
b250YWluZXJWaWV3Cit7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZ2V0U2VsZWN0
ZWRUZXh0Oih2b2lkICheKShOU1N0cmluZyAqc2VsZWN0ZWRUZXh0U3RyaW5nKSljb21wbGV0aW9u
SGFuZGxlcgoreworICAgIFtbc2VsZiBfZW5zdXJlVGV4dEZpbmRlckNsaWVudF0gZ2V0U2VsZWN0
ZWRUZXh0OmNvbXBsZXRpb25IYW5kbGVyXTsKK30KKworLSAodm9pZClzZWxlY3RGaW5kTWF0Y2g6
KGlkIDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRNYXRjaD4pZmluZE1hdGNo
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgorewor
ICAgIFtbc2VsZiBfZW5zdXJlVGV4dEZpbmRlckNsaWVudF0gc2VsZWN0RmluZE1hdGNoOmZpbmRN
YXRjaCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Cit9CisKIC0gKE5TVGV4
dElucHV0Q29udGV4dCAqKV93ZWJfc3VwZXJJbnB1dENvbnRleHQKIHsKICAgICByZXR1cm4gW3N1
cGVyIGlucHV0Q29udGV4dF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCmluZGV4IDY2MDE0OTdhOWJhMDFhMjM3YjZiY2M3
MjkxMmRkOTllMTgwNTliYWEuLjZmNjVkYWI5OTRiYmY0N2YxMDMzNzk3ZWJjNTk5NWFkOWIwNzI4
ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3UHJpdmF0ZS5oCkBAIC0yMzIsNiArMjMyLDEwIEBAIHR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUpIHsKIAogQGVuZAogCisjaWYgIVRBUkdFVF9P
U19JUEhPTkUKK0BpbnRlcmZhY2UgV0tXZWJWaWV3IChXS05TVGV4dEZpbmRlckNsaWVudCkgPE5T
VGV4dEZpbmRlckNsaWVudD4KK0BlbmQKKyNlbmRpZgogCiBAaW50ZXJmYWNlIFdLV2ViVmlldyAo
V0tUZXN0aW5nKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
RmluZENsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQu
aAppbmRleCAzYzFjMTQ1ZTRkNGIyZDI4NTJkODBiMmY0MWYyYjY4YTU3ODk1ZmRkLi5hYTZmNzA5
MjJiNTI0NTc4ZjAwNDM1ODEyOWFiYjk5YmVjN2U5MzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9GaW5kQ2xpZW50LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICAvLyBGcm9tIEFQSTo6RmluZENsaWVudAogICAgIHZpcnR1YWwgdm9pZCBkaWRD
b3VudFN0cmluZ01hdGNoZXMoV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiwgdWludDMyX3Qg
bWF0Y2hDb3VudCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmRTdHJpbmcoV2ViUGFnZVByb3h5
KiwgY29uc3QgU3RyaW5nJiwgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mLCB1aW50MzJfdCBtYXRjaENv
dW50LCBpbnQzMl90IG1hdGNoSW5kZXgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsVG9GaW5k
U3RyaW5nKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYpOwogICAgIAogICAgIFdLV2ViVmll
dyAqbV93ZWJWaWV3OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L0ZpbmRDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVu
dC5tbQppbmRleCBkZjhmYWQwZmE0NWY1Y2NmODk5MTNhNjAxNDllYzg5NTY1YjZkY2QzLi40NDcy
NjZjNzYxZDNlNDZiMTYwYmQ1YjgwNDQ1YjA4ZWM5ODc2OTUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5tbQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIEZp
bmRDbGllbnQ6OmRpZENvdW50U3RyaW5nTWF0Y2hlcyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgdWludAogICAgICAgICBbbV9kZWxlZ2F0ZS5nZXQoKSBfd2ViVmlldzptX3dl
YlZpZXcgZGlkQ291bnRNYXRjaGVzOm1hdGNoQ291bnQgZm9yU3RyaW5nOnN0cmluZ107CiB9CiAK
LXZvaWQgRmluZENsaWVudDo6ZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQordm9p
ZCBGaW5kQ2xpZW50OjpkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mLCB1aW50MzJfdCBtYXRjaENv
dW50LCBpbnQzMl90IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1fZGVsZWdhdGVNZXRob2RzLndl
YnZpZXdEaWRGaW5kU3RyaW5nKQogICAgICAgICBbbV9kZWxlZ2F0ZS5nZXQoKSBfd2ViVmlldzpt
X3dlYlZpZXcgZGlkRmluZE1hdGNoZXM6bWF0Y2hDb3VudCBmb3JTdHJpbmc6c3RyaW5nIHdpdGhN
YXRjaEluZGV4Om1hdGNoSW5kZXhdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAppbmRleCA2OWE1M2I3OTcyMzk5NTM1YTRiNDU1NzcyNTc3OTQyZTRlZjAyMjkxLi5m
NTg5YmFiZTI5MTE1MWQwMDZmMWY5OWU2Zjk2NTUzODMyNTBiNGQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNDA3OSw5ICs0MDc5LDkgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcyhmbG9hdCBwcm9n
cmVzcykKICNlbmRpZgogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluZFN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4
KQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgbWF0Y2hSZWN0cywgdWludDMyX3QgbWF0
Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQogewotICAgIG1fZmluZENsaWVudC0+ZGlkRmlu
ZFN0cmluZyh0aGlzLCBzdHJpbmcsIG1hdGNoQ291bnQsIG1hdGNoSW5kZXgpOworICAgIG1fZmlu
ZENsaWVudC0+ZGlkRmluZFN0cmluZyh0aGlzLCBzdHJpbmcsIG1hdGNoUmVjdHMsIG1hdGNoQ291
bnQsIG1hdGNoSW5kZXgpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluZFN0cmluZ01h
dGNoZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFZlY3RvcjxWZWN0b3I8V2ViQ29yZTo6
SW50UmVjdD4+JiBtYXRjaFJlY3RzLCBpbnQzMl90IGZpcnN0SW5kZXhBZnRlclNlbGVjdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA2NGYyZGM2MjAyNDZi
MTBmYzYyMWNkNzA2YTljOWRkZjVjYTJmYTk4Li5kMmVjNGYzMmMzZjM4MjViZWEzMWJjMDkwMTRk
ZTY2OWI4YzA1ODIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBA
IC03NTEsNyArNzUxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGV4dEluZGljYXRvcihjb25z
dCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSYsIHVpbnQ2NF90IC8qIFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3JXaW5kb3dMaWZldGltZSAqLyBsaWZldGltZSA9IDAgLyogUGVybWFuZW50ICovKTsK
ICAgICB2b2lkIHNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcyhmbG9hdCk7CiAgICAg
dm9pZCBjbGVhclRleHRJbmRpY2F0b3IoKTsKLSAgICB2b2lkIGRpZEZpbmRTdHJpbmcoY29uc3Qg
U3RyaW5nJiwgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KTsKKyAgICB2
b2lkIGRpZEZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6Oklu
dFJlY3Q+JiwgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KTsKICAgICB2
b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBkaWRGaW5k
U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8VmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+PiYgbWF0Y2hSZWN0cywgaW50MzJfdCBmaXJzdEluZGV4QWZ0ZXJTZWxlY3Rpb24p
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgppbmRleCBmM2RjNzIxN2ExYWVkMzUzMGRjODIxYWE3YTIwNGY3MDE2MWFlYzA3Li4xMTQy
OTFlZGNlYjk5NzA4MGM5NDJlYjMxZGY0MTllYzYwZjhkNzViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTIzMyw3ICsyMzMs
NyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERpZENvdW50U3RyaW5nTWF0Y2hl
cyhTdHJpbmcgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENvdW50KQogICAgIFNldFRleHRJbmRpY2F0
b3Ioc3RydWN0IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhIGluZGljYXRvciwgdWludDY0X3Qg
bGlmZXRpbWUpCiAgICAgQ2xlYXJUZXh0SW5kaWNhdG9yKCkKLSAgICBEaWRGaW5kU3RyaW5nKFN0
cmluZyBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkKKyAg
ICBEaWRGaW5kU3RyaW5nKFN0cmluZyBzdHJpbmcsIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBt
YXRjaFJlY3QsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkKICAgICBE
aWRGYWlsVG9GaW5kU3RyaW5nKFN0cmluZyBzdHJpbmcpCiAgICAgRGlkRmluZFN0cmluZ01hdGNo
ZXMoU3RyaW5nIHN0cmluZywgVmVjdG9yPFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0Pj4gbWF0Y2hl
cywgaW50MzJfdCBmaXJzdEluZGV4QWZ0ZXJTZWxlY3Rpb24pCiAgICAgRGlkR2V0SW1hZ2VGb3JG
aW5kTWF0Y2goV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VIYW5k
bGUsIHVpbnQzMl90IG1hdGNoSW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dLUERGVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tQ
REZWaWV3Lm1tCmluZGV4IGE3NmJjMTc4NGU0ZGJhY2E3Y2M5ZmYzN2RlOTljZWQ3NWZmNzUyOTIu
LjhkZjNlZjFmNzZhOTFhYTIzMzhiMzM1M2E1Y2Q3MWFlZWMwMTYyN2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tQREZWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV0tQREZWaWV3Lm1tCkBAIC02MDcsNyArNjA3LDcgQEAgc3RhdGlj
IE5TU3RyaW5nQ29tcGFyZU9wdGlvbnMgc3RyaW5nQ29tcGFyZU9wdGlvbnMoX1dLRmluZE9wdGlv
bnMgb3B0aW9ucykKICAgICAgICAgICAgICAgICBfY3VycmVudEZpbmRNYXRjaEluZGV4ID0gMDsK
ICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtub3duTWF0Y2ggOiBfY2FjaGVkRmlu
ZE1hdGNoZXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLnN0cmluZ1JhbmdlLmxv
Y2F0aW9uID09IFtrbm93bk1hdGNoIHN0cmluZ1JhbmdlXS5sb2NhdGlvbiAmJiBtYXRjaC5zdHJp
bmdSYW5nZS5sZW5ndGggPT0gW2tub3duTWF0Y2ggc3RyaW5nUmFuZ2VdLmxlbmd0aCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcGFnZS0+ZmluZENsaWVudCgpLmRpZEZpbmRTdHJpbmcocGFn
ZS5nZXQoKSwgc3RyaW5nLCBfY2FjaGVkRmluZE1hdGNoZXMuc2l6ZSgpLCBfY3VycmVudEZpbmRN
YXRjaEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UtPmZpbmRDbGllbnQoKS5k
aWRGaW5kU3RyaW5nKHBhZ2UuZ2V0KCksIHN0cmluZywgeyB9LCBfY2FjaGVkRmluZE1hdGNoZXMu
c2l6ZSgpLCBfY3VycmVudEZpbmRNYXRjaEluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIF9jdXJy
ZW50RmluZE1hdGNoSW5kZXgrKzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1dLVGV4dEZpbmRlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhY2M5NTE5NzdkMGZlMDFlM2VjMWU5
MjZmOWY1MmE5NzBhOWMzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdLVGV4dEZpbmRlckNsaWVudF9oCisjZGVmaW5lIFdLVGV4dEZpbmRlckNs
aWVudF9oCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2lmIFBMQVRGT1JN
KE1BQykgJiYgV0tfQVBJX0VOQUJMRUQKKworT0JKQ19DTEFTUyBOU1ZpZXc7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZVByb3h5OworfQorCitAaW50ZXJmYWNlIFdLVGV4dEZp
bmRlckNsaWVudCA6IE5TT2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBhZ2U6KFdl
YktpdDo6V2ViUGFnZVByb3h5JilwYWdlIHZpZXc6KE5TVmlldyAqKXZpZXc7CistICh2b2lkKXdp
bGxEZXN0cm95VmlldzooTlNWaWV3ICopdmlldzsKKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQorCisjZW5kaWYgLy8gV0tUZXh0RmluZGVyQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2FhNzJhZTYzZGEzNGQ1YjQxYjUxOWMwMTFlYTU3MWUwYmI0ZjA1MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tCkBA
IC0wLDAgKzEsMjgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJXS1RleHRGaW5kZXJDbGllbnQuaCIKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgV0tfQVBJX0VO
QUJMRUQKKworI2ltcG9ydCAiQVBJRmluZENsaWVudC5oIgorI2ltcG9ydCAiQVBJRmluZE1hdGNo
ZXNDbGllbnQuaCIKKyNpbXBvcnQgIkFwcEtpdFNQSS5oIgorI2ltcG9ydCAiV2ViSW1hZ2UuaCIK
KyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8d3RmL0RlcXVlLmg+CisKKy8vIEZJ
WE1FOiBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgcmVwbGFjZS4KKy8vIEZJWE1FOiBJbXBsZW1lbnQg
c2Nyb2xsRmluZE1hdGNoVG9WaXNpYmxlLgorLy8gRklYTUU6IFRoZSBOU1RleHRGaW5kZXIgb3Zl
cmxheSBkb2Vzbid0IG1vdmUgd2l0aCBzY3JvbGxpbmc7IHdlIHNob3VsZCBoYXZlIGEgbW9kZSB3
aGVyZSB3ZSBtYW5hZ2UgdGhlIG92ZXJsYXkuCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworQGludGVyZmFjZSBXS1RleHRGaW5kZXJDbGllbnQg
KCkKKworLSAodm9pZClkaWRGaW5kU3RyaW5nTWF0Y2hlczooY29uc3QgU3RyaW5nJilzdHJpbmcg
cmVjdHM6KGNvbnN0IFZlY3RvcjxWZWN0b3I8SW50UmVjdD4+JilyZWN0cyBpbmRleDooaW50MzJf
dCltYXRjaEluZGV4OworLSAodm9pZClkaWRGaW5kU3RyaW5nOihjb25zdCBTdHJpbmcmKXN0cmlu
ZyByZWN0czooY29uc3QgVmVjdG9yPEludFJlY3Q+JilyZWN0cyBpbmRleDooaW50MzJfdCltYXRj
aEluZGV4OworLSAodm9pZClkaWRGYWlsVG9GaW5kU3RyaW5nOihjb25zdCBTdHJpbmcmKXN0cmlu
ZzsKKworLSAodm9pZClnZXRJbWFnZUZvck1hdGNoUmVzdWx0OihpZCA8TlNUZXh0RmluZGVyQXN5
bmNocm9ub3VzRG9jdW1lbnRGaW5kTWF0Y2g+KWZpbmRNYXRjaCBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoTlNJbWFnZSAqZ2VuZXJhdGVkSW1hZ2UpKWNvbXBsZXRpb25IYW5kbGVyOworLSAo
dm9pZClkaWRHZXRJbWFnZUZvck1hdGNoUmVzdWx0OihXZWJJbWFnZSAqKXN0cmluZyBpbmRleDoo
aW50MzJfdCltYXRjaEluZGV4OworCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBUZXh0RmluZGVyRmluZENsaWVudCA6IHB1YmxpYyBBUEk6OkZpbmRNYXRjaGVzQ2xpZW50LCBw
dWJsaWMgQVBJOjpGaW5kQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBUZXh0RmluZGVy
RmluZENsaWVudChXS1RleHRGaW5kZXJDbGllbnQgKnRleHRGaW5kZXJDbGllbnQpCisgICAgICAg
IDogbV90ZXh0RmluZGVyQ2xpZW50KHRleHRGaW5kZXJDbGllbnQpCisgICAgeworICAgIH0KKwor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0cmluZ01hdGNoZXMoV2ViUGFnZVBy
b3h5KiBwYWdlLCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgVmVjdG9yPFZlY3RvcjxJbnRS
ZWN0Pj4mIG1hdGNoUmVjdHMsIGludDMyX3QgaW5kZXgpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBbbV90ZXh0RmluZGVyQ2xpZW50IGRpZEZpbmRTdHJpbmdNYXRjaGVzOnN0cmluZyByZWN0czpt
YXRjaFJlY3RzIGluZGV4OmluZGV4XTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0
SW1hZ2VGb3JNYXRjaFJlc3VsdChXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkltYWdlKiBpbWFnZSwg
aW50MzJfdCBpbmRleCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFttX3RleHRGaW5kZXJDbGll
bnQgZGlkR2V0SW1hZ2VGb3JNYXRjaFJlc3VsdDppbWFnZSBpbmRleDppbmRleF07CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmRTdHJpbmcoV2ViUGFnZVByb3h5KiwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgbWF0Y2hSZWN0cywgdWludDMyX3Qg
bWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
W21fdGV4dEZpbmRlckNsaWVudCBkaWRGaW5kU3RyaW5nOnN0cmluZyByZWN0czptYXRjaFJlY3Rz
IGluZGV4Om1hdGNoSW5kZXhdOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsVG9G
aW5kU3RyaW5nKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmIHN0cmlu
Zykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFttX3RleHRGaW5kZXJDbGllbnQgZGlkRmFpbFRv
RmluZFN0cmluZzpzdHJpbmddOworICAgIH0KKworICAgIFJldGFpblB0cjxXS1RleHRGaW5kZXJD
bGllbnQ+IG1fdGV4dEZpbmRlckNsaWVudDsKK307CisgICAgCit9CisKK0BpbnRlcmZhY2UgV0tU
ZXh0RmluZGVyTWF0Y2ggOiBOU09iamVjdCA8TlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1l
bnRGaW5kTWF0Y2g+CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgdW5zaWduZWQg
aW5kZXg7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLVGV4dEZpbmRlck1hdGNoIHsKKyAg
ICBXS1RleHRGaW5kZXJDbGllbnQgKl9jbGllbnQ7CisgICAgTlNWaWV3ICpfdmlldzsKKyAgICBS
ZXRhaW5QdHI8TlNBcnJheT4gX3JlY3RzOworICAgIHVuc2lnbmVkIF9pbmRleDsKK30KKworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ2xpZW50OihXS1RleHRGaW5kZXJDbGllbnQgKiljbGllbnQg
dmlldzooTlNWaWV3ICopdmlldyBpbmRleDoodW5zaWduZWQpaW5kZXggcmVjdHM6KE5TQXJyYXkg
KilyZWN0cworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfY2xpZW50ID0gY2xpZW50OworICAgIF92aWV3ID0g
dmlldzsKKyAgICBfcmVjdHMgPSByZWN0czsKKyAgICBfaW5kZXggPSBpbmRleDsKKworICAgIHJl
dHVybiBzZWxmOworfQorCistIChOU1ZpZXcgKiljb250YWluaW5nVmlldworeworICAgIHJldHVy
biBfdmlldzsKK30KKworLSAoTlNBcnJheSAqKXRleHRSZWN0cworeworICAgIHJldHVybiBfcmVj
dHMuZ2V0KCk7Cit9CisKKy0gKHZvaWQpZ2VuZXJhdGVUZXh0SW1hZ2U6KHZvaWQgKF4pKE5TSW1h
Z2UgKmdlbmVyYXRlZEltYWdlKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFtfY2xpZW50IGdl
dEltYWdlRm9yTWF0Y2hSZXN1bHQ6c2VsZiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFu
ZGxlcl07Cit9CisKKy0gKHVuc2lnbmVkKWluZGV4Cit7CisgICAgcmV0dXJuIF9pbmRleDsKK30K
KworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tUZXh0RmluZGVyQ2xpZW50IHsKKyAgICBXZWJL
aXQ6OldlYlBhZ2VQcm94eSAqX3BhZ2U7CisgICAgTlNWaWV3ICpfdmlldzsKKyAgICBEZXF1ZTxz
dGQ6OmZ1bmN0aW9uPHZvaWQoTlNBcnJheSAqLCBib29sIGRpZFdyYXApPj4gX2ZpbmRSZXBseUNh
bGxiYWNrczsKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoTlNJbWFnZSAqKT4+IF9pbWFn
ZVJlcGx5Q2FsbGJhY2tzOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYWdlOihXZWJQ
YWdlUHJveHkmKXBhZ2UgdmlldzooTlNWaWV3ICopdmlldworeworICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CisKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfcGFn
ZSA9ICZwYWdlOworICAgIF92aWV3ID0gdmlldzsKKyAgICAKKyAgICBfcGFnZS0+c2V0RmluZE1h
dGNoZXNDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OlRleHRGaW5kZXJGaW5kQ2xpZW50
PihzZWxmKSk7CisgICAgX3BhZ2UtPnNldEZpbmRDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxXZWJL
aXQ6OlRleHRGaW5kZXJGaW5kQ2xpZW50PihzZWxmKSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZCl3aWxsRGVzdHJveVZpZXc6KE5TVmlldyAqKXZpZXcKK3sKKyAgICBfcGFnZSA9
IG51bGxwdHI7CisgICAgX3ZpZXcgPSBuaWw7Cit9CisKKyNwcmFnbWEgbWFyayAtIE5TVGV4dEZp
bmRlckNsaWVudCBTUEkKKworLSAodm9pZClmaW5kTWF0Y2hlc0ZvclN0cmluZzooTlNTdHJpbmcg
Kil0YXJnZXRTdHJpbmcgcmVsYXRpdmVUb01hdGNoOihpZCA8TlNUZXh0RmluZGVyQXN5bmNocm9u
b3VzRG9jdW1lbnRGaW5kTWF0Y2g+KXJlbGF0aXZlTWF0Y2ggZmluZE9wdGlvbnM6KE5TVGV4dEZp
bmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE9wdGlvbnMpZmluZE9wdGlvbnMgbWF4UmVzdWx0
czooTlNVSW50ZWdlciltYXhSZXN1bHRzIHJlc3VsdENvbGxlY3Rvcjoodm9pZCAoXikoTlNBcnJh
eSAqbWF0Y2hlcywgQk9PTCBkaWRXcmFwKSlyZXN1bHRDb2xsZWN0b3IKK3sKKyAgICB1bnNpZ25l
ZCBraXRGaW5kT3B0aW9ucyA9IDA7CisKKyAgICBpZiAoZmluZE9wdGlvbnMgJiBOU1RleHRGaW5k
ZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25zQmFja3dhcmRzKQorICAgICAgICBraXRG
aW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zQmFja3dhcmRzOworICAgIGlmIChmaW5k
T3B0aW9ucyAmIE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE9wdGlvbnNXcmFw
KQorICAgICAgICBraXRGaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zV3JhcEFyb3Vu
ZDsKKyAgICBpZiAoZmluZE9wdGlvbnMgJiBOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVu
dEZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlKQorICAgICAgICBraXRGaW5kT3B0aW9ucyB8PSBX
ZWJLaXQ6OkZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlOworICAgIGlmIChmaW5kT3B0aW9ucyAm
IE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE9wdGlvbnNTdGFydHNXaXRoKQor
ICAgICAgICBraXRGaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zQXRXb3JkU3RhcnRz
OworCisgICAgUmV0YWluUHRyPE5TUHJvZ3Jlc3M+IHByb2dyZXNzID0gW05TUHJvZ3Jlc3MgcHJv
Z3Jlc3NXaXRoVG90YWxVbml0Q291bnQ6MV07CisgICAgYXV0byBjb3BpZWRSZXN1bHRDb2xsZWN0
b3IgPSBCbG9ja19jb3B5KHJlc3VsdENvbGxlY3Rvcik7CisgICAgX2ZpbmRSZXBseUNhbGxiYWNr
cy5hcHBlbmQoW3Byb2dyZXNzLCBjb3BpZWRSZXN1bHRDb2xsZWN0b3JdIChOU0FycmF5ICptYXRj
aGVzLCBib29sIGRpZFdyYXApIHsKKyAgICAgICAgY29waWVkUmVzdWx0Q29sbGVjdG9yKG1hdGNo
ZXMsIGRpZFdyYXApOworICAgICAgICBCbG9ja19yZWxlYXNlKGNvcGllZFJlc3VsdENvbGxlY3Rv
cik7CisKKyAgICAgICAgW3Byb2dyZXNzIHNldENvbXBsZXRlZFVuaXRDb3VudDoxXTsKKyAgICB9
KTsKKworICAgIGlmIChtYXhSZXN1bHRzID09IDEpCisgICAgICAgIF9wYWdlLT5maW5kU3RyaW5n
KHRhcmdldFN0cmluZywgc3RhdGljX2Nhc3Q8V2ViS2l0OjpGaW5kT3B0aW9ucz4oa2l0RmluZE9w
dGlvbnMpLCBtYXhSZXN1bHRzKTsKKyAgICBlbHNlCisgICAgICAgIF9wYWdlLT5maW5kU3RyaW5n
TWF0Y2hlcyh0YXJnZXRTdHJpbmcsIHN0YXRpY19jYXN0PFdlYktpdDo6RmluZE9wdGlvbnM+KGtp
dEZpbmRPcHRpb25zKSwgbWF4UmVzdWx0cyk7Cit9CisKKy0gKHZvaWQpZ2V0U2VsZWN0ZWRUZXh0
Oih2b2lkICheKShOU1N0cmluZyAqc2VsZWN0ZWRUZXh0U3RyaW5nKSljb21wbGV0aW9uSGFuZGxl
cgoreworICAgIHZvaWQgKF5jb3BpZWRDb21wbGV0aW9uSGFuZGxlcikoTlNTdHJpbmcgKikgPSBC
bG9ja19jb3B5KGNvbXBsZXRpb25IYW5kbGVyKTsKKworICAgIF9wYWdlLT5nZXRTZWxlY3Rpb25P
ckNvbnRlbnRzQXNTdHJpbmcoW2NvcGllZENvbXBsZXRpb25IYW5kbGVyXSAoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIENhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICAgICAgY29waWVkQ29tcGxldGlv
bkhhbmRsZXIoc3RyaW5nKTsKKyAgICAgICAgQmxvY2tfcmVsZWFzZShjb3BpZWRDb21wbGV0aW9u
SGFuZGxlcik7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpc2VsZWN0RmluZE1hdGNoOihpZCA8TlNU
ZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kTWF0Y2g+KWZpbmRNYXRjaCBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBBU1NF
UlQoW2ZpbmRNYXRjaCBpc0tpbmRPZkNsYXNzOltXS1RleHRGaW5kZXJNYXRjaCBjbGFzc11dKTsK
KyAgICBBU1NFUlQoIWNvbXBsZXRpb25IYW5kbGVyKTsKKworICAgIFdLVGV4dEZpbmRlck1hdGNo
ICp0ZXh0RmluZGVyTWF0Y2ggPSBzdGF0aWNfY2FzdDxXS1RleHRGaW5kZXJNYXRjaCAqPihmaW5k
TWF0Y2gpOworICAgIF9wYWdlLT5zZWxlY3RGaW5kTWF0Y2godGV4dEZpbmRlck1hdGNoLmluZGV4
KTsKK30KKworI3ByYWdtYSBtYXJrIC0gRmluZE1hdGNoZXNDbGllbnQKKworLSAodm9pZClkaWRG
aW5kU3RyaW5nTWF0Y2hlczooY29uc3QgU3RyaW5nJilzdHJpbmcgcmVjdHM6KGNvbnN0IFZlY3Rv
cjxWZWN0b3I8SW50UmVjdD4+JilyZWN0c0Zvck1hdGNoZXMgaW5kZXg6KGludDMyX3QpbWF0Y2hJ
bmRleAoreworICAgIGlmIChfZmluZFJlcGx5Q2FsbGJhY2tzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byByZXBseUNhbGxiYWNrID0gX2ZpbmRSZXBseUNhbGxiYWNrcy50
YWtlRmlyc3QoKTsKKyAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gcmVjdHNGb3JNYXRjaGVzLnNp
emUoKTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1hdGNoT2JqZWN0cyA9IGFkb3B0
TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTptYXRjaENvdW50XSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoQ291bnQ7IGkrKykgeworICAgICAg
ICBhdXRvIG1hdGNoUmVjdHMgPSByZWN0c0Zvck1hdGNoZXNbaV07CisgICAgICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gbnNNYXRjaFJlY3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om1hdGNoUmVjdHMuc2l6ZSgpXSk7CisgICAgICAgIGZv
ciAoYXV0byByZWN0IDogbWF0Y2hSZWN0cykKKyAgICAgICAgICAgIFtuc01hdGNoUmVjdHMgYWRk
T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF1dOworCisgICAgICAgIFJldGFpblB0
cjxXS1RleHRGaW5kZXJNYXRjaD4gbWF0Y2ggPSBhZG9wdE5TKFtbV0tUZXh0RmluZGVyTWF0Y2gg
YWxsb2NdIGluaXRXaXRoQ2xpZW50OnNlbGYgdmlldzpfdmlldyBpbmRleDppIHJlY3RzOm5zTWF0
Y2hSZWN0cy5nZXQoKV0pOworICAgICAgICBbbWF0Y2hPYmplY3RzIGFkZE9iamVjdDptYXRjaC5n
ZXQoKV07CisgICAgfQorCisgICAgcmVwbHlDYWxsYmFjayhtYXRjaE9iamVjdHMuZ2V0KCksIE5P
KTsKK30KKworLSAodm9pZClkaWRHZXRJbWFnZUZvck1hdGNoUmVzdWx0OihXZWJJbWFnZSAqKWlt
YWdlIGluZGV4OihpbnQzMl90KW1hdGNoSW5kZXgKK3sKKyAgICBpZiAoX2ltYWdlUmVwbHlDYWxs
YmFja3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGltYWdlQ2FsbGJh
Y2sgPSBfaW1hZ2VSZXBseUNhbGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICBpbWFnZUNhbGxiYWNr
KFtbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTppbWFnZS0+Yml0bWFwKCktPm1ha2VD
R0ltYWdlKCkuZ2V0KCkgc2l6ZTpOU1plcm9TaXplXSBhdXRvcmVsZWFzZV0pOworfQorCisjcHJh
Z21hIG1hcmsgLSBGaW5kQ2xpZW50CisKKy0gKHZvaWQpZGlkRmluZFN0cmluZzooY29uc3QgU3Ry
aW5nJilzdHJpbmcgcmVjdHM6KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpcmVjdHMgaW5kZXg6KGlu
dDMyX3QpbWF0Y2hJbmRleAoreworICAgIFtzZWxmIGRpZEZpbmRTdHJpbmdNYXRjaGVzOnN0cmlu
ZyByZWN0czp7IHJlY3RzIH0gaW5kZXg6bWF0Y2hJbmRleF07Cit9CisKKy0gKHZvaWQpZGlkRmFp
bFRvRmluZFN0cmluZzooY29uc3QgU3RyaW5nJilzdHJpbmcKK3sKKyAgICBbc2VsZiBkaWRGaW5k
U3RyaW5nTWF0Y2hlczpzdHJpbmcgcmVjdHM6eyB9IGluZGV4Oi0xXTsKK30KKworI3ByYWdtYSBt
YXJrIC0gV0tUZXh0RmluZGVyTWF0Y2ggY2FsbGJhY2tzCisKKy0gKHZvaWQpZ2V0SW1hZ2VGb3JN
YXRjaFJlc3VsdDooaWQgPE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNo
PilmaW5kTWF0Y2ggY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TSW1hZ2UgKmdlbmVyYXRl
ZEltYWdlKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIEFTU0VSVChbZmluZE1hdGNoIGlzS2lu
ZE9mQ2xhc3M6W1dLVGV4dEZpbmRlck1hdGNoIGNsYXNzXV0pOworCisgICAgV0tUZXh0RmluZGVy
TWF0Y2ggKnRleHRGaW5kZXJNYXRjaCA9IHN0YXRpY19jYXN0PFdLVGV4dEZpbmRlck1hdGNoICo+
KGZpbmRNYXRjaCk7CisKKyAgICBhdXRvIGNvcGllZEltYWdlQ2FsbGJhY2sgPSBCbG9ja19jb3B5
KGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBfaW1hZ2VSZXBseUNhbGxiYWNrcy5hcHBlbmQoW2Nv
cGllZEltYWdlQ2FsbGJhY2tdIChOU0ltYWdlICppbWFnZSkgeworICAgICAgICBjb3BpZWRJbWFn
ZUNhbGxiYWNrKGltYWdlKTsKKyAgICAgICAgQmxvY2tfcmVsZWFzZShjb3BpZWRJbWFnZUNhbGxi
YWNrKTsKKyAgICB9KTsKKworICAgIF9wYWdlLT5nZXRJbWFnZUZvckZpbmRNYXRjaCh0ZXh0Rmlu
ZGVyTWF0Y2guaW5kZXgpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMzVkOTc0ZjFlNjY5NWQ3MTY0MjNmOTEwOWFjZThmZGQyN2I5NmExMC4uZWJmNTYyZmQ5Y2Yz
Y2M4M2U0NmRjMmIzNDBmMGE3Y2U0ZTM5ZDEwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjkyLDYgKzY5Miw4IEBACiAJCTJE
RDEyQTA4MUE4MTc3RjMwMDJDNzRFNiAvKiBXS1BhZ2VSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkREMTJBMDcx
QTgxNzdGMzAwMkM3NEU2IC8qIFdLUGFnZVJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkREMTNCRDUxOEY3
REFERDAwRTEzMEExIC8qIEZpbmRDb250cm9sbGVySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkREMTNCRDMxOEY3REFERDAwRTEzMEExIC8qIEZp
bmRDb250cm9sbGVySU9TLm1tICovOyB9OwogCQkyREQ2N0EyRTFCRDgxOTczMDA1M0IyNTEgLyog
QVBJRmluZE1hdGNoZXNDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJERDY3QTJEMUJEODE5NzMwMDUzQjI1MSAvKiBBUElGaW5kTWF0Y2hlc0Ns
aWVudC5oICovOyB9OworCQkyREQ2N0EzNTFCRDg2MTA2MDA1M0IyNTEgLyogV0tUZXh0RmluZGVy
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
REQ2N0EzMzFCRDg2MTA2MDA1M0IyNTEgLyogV0tUZXh0RmluZGVyQ2xpZW50LmggKi87IH07CisJ
CTJERDY3QTM2MUJEODYxMDYwMDUzQjI1MSAvKiBXS1RleHRGaW5kZXJDbGllbnQubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ2N0EzNDFCRDg2MTA2
MDA1M0IyNTEgLyogV0tUZXh0RmluZGVyQ2xpZW50Lm1tICovOyB9OwogCQkyREQ5RUIyRDFBNkYw
MTI1MDBCQjEyNjcgLyogQVBJTmF2aWdhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkREOUVCMkMxQTZGMDEyNTAwQkIxMjY3IC8qIEFQ
SU5hdmlnYXRpb25DbGllbnQuaCAqLzsgfTsKIAkJMkRERTBBRkExODI5OENDOTAwRjk3RUFBIC8q
IFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTBBRjgxODI5OENDOTAwRjk3RUFBIC8qIFJlbW90
ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5oICovOyB9OwogCQkyRERFMEFGQjE4Mjk4Q0M5MDBG
OTdFQUEgLyogUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTBBRjkxODI5OENDOTAwRjk3RUFB
IC8qIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbSAqLzsgfTsKQEAgLTI4ODEsNiAr
Mjg4Myw4IEBACiAJCTJERDEyQTA3MUE4MTc3RjMwMDJDNzRFNiAvKiBXS1BhZ2VSZW5kZXJpbmdQ
cm9ncmVzc0V2ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1BhZ2VS
ZW5kZXJpbmdQcm9ncmVzc0V2ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
REQxM0JEMzE4RjdEQUREMDBFMTMwQTEgLyogRmluZENvbnRyb2xsZXJJT1MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBGaW5kQ29udHJvbGxlcklPUy5tbTsgcGF0
aCA9IGlvcy9GaW5kQ29udHJvbGxlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkRENjdBMkQxQkQ4MTk3MzAwNTNCMjUxIC8qIEFQSUZpbmRNYXRjaGVzQ2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUZpbmRNYXRjaGVzQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJERDY3QTMzMUJEODYxMDYwMDUzQjI1MSAvKiBX
S1RleHRGaW5kZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tU
ZXh0RmluZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJERDY3QTM0
MUJEODYxMDYwMDUzQjI1MSAvKiBXS1RleHRGaW5kZXJDbGllbnQubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1RleHRGaW5kZXJDbGllbnQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJERDlFQjJDMUE2RjAxMjUwMEJCMTI2NyAvKiBBUElOYXZp
Z2F0aW9uQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSU5hdmln
YXRpb25DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRERTBBRjgxODI5
OENDOTAwRjk3RUFBIC8qIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRERTBBRjkxODI5OENDOTAwRjk3RUFB
IC8qIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxMjUsNiArNzEyOSw4IEBACiAJCQkJMEZD
QjRFNUQxOEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3Lm1tICovLAogCQkJCTUxM0U0
NjJCMUFEODM3NTYwMDE2MjM0QSAvKiBXS1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdhdGUuaCAq
LywKIAkJCQk1MTNFNDYyQzFBRDgzNzU2MDAxNjIzNEEgLyogV0tTaGFyaW5nU2VydmljZVBpY2tl
ckRlbGVnYXRlLm1tICovLAorCQkJCTJERDY3QTMzMUJEODYxMDYwMDUzQjI1MSAvKiBXS1RleHRG
aW5kZXJDbGllbnQuaCAqLywKKwkJCQkyREQ2N0EzNDFCRDg2MTA2MDA1M0IyNTEgLyogV0tUZXh0
RmluZGVyQ2xpZW50Lm1tICovLAogCQkJCTBGQ0I0RTVFMThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1Rl
eHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCAqLywKIAkJCQkwRkNCNEU1RjE4QkJFM0Q5MDAwRkNG
QzkgLyogV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm1tICovLAogCQkJCTJEMjhBNDk1MUFG
OTY1QTEwMEYxOTBDOSAvKiBXS1ZpZXdMYXlvdXRTdHJhdGVneS5oICovLApAQCAtODE5OSw2ICs4
MjA1LDcgQEAKIAkJCQlEM0I5NDg0OTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBN
ZW51LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQ4MzJENzFBOUNERjk2MDA4QjRERkUgLyogV2Vi
c2l0ZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDgzMkQxMUE5QkRDMkYwMDhCNERGRSAv
KiBXZWJzaXRlRGF0YVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkRENjdBMzUxQkQ4NjEw
NjAwNTNCMjUxIC8qIFdLVGV4dEZpbmRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1
M0MyQUExQTMyNTczMDAwNEU4QzcwIC8qIFdlYnNpdGVEYXRhU3RvcmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTgzNjAzNEEwMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNr
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTJDMEY4MUEzOENEQzcwMDE2MTYwQSAvKiBXZWJT
dG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtOTU0OSw2ICs5NTU2
LDcgQEAKIAkJCQlFMTc5RkQ5RjEzNEQzODI1MDAxNUI4ODMgLyogQXJndW1lbnRDb2RlcnNNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzAzMkRBNTEwRjQzN0QxMDA1OEMxNUEgLyogQXJndW1l
bnREZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDMyREE3MTBGNDM3RDEwMDU4QzE1
QSAvKiBBcmd1bWVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkRENjdBMzYxQkQ4
NjEwNjAwNTNCMjUxIC8qIFdLVGV4dEZpbmRlckNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUM1OUM0QTU4MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4Mzk5MDIwMjFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xv
YWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1RTc3MjcxODNERDZGNjAwMDcyMDNGIC8qIEFz
eW5jUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IDMwM2UxYjczMzZiYTE1
N2M4MGI2MzYxNzIwODNjMzk1NzEyZDUzNjMuLjMwNzBlMTU1NzhhNmZlNzQ4MGUwNmY2ZWQwMjRl
MDM3NThjZTU0OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtMTgwLDcgKzE4MCwxNCBAQCB2b2lkIEZpbmRDb250
cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwoYm9vbCBmb3VuZCwgY29uc3QgU3Ry
aW5nJiBzdHJpbgogICAgICAgICAgICAgICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4IC09IG1h
dGNoQ291bnQ7CiAgICAgICAgIH0KIAotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZyhzdHJpbmcsIG1hdGNoQ291bnQsIG1fZm91bmRT
dHJpbmdNYXRjaEluZGV4KSk7CisgICAgICAgIG1fZmluZE1hdGNoZXMuY2xlYXIoKTsKKyAgICAg
ICAgVmVjdG9yPEludFJlY3Q+IG1hdGNoUmVjdHM7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0g
bV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpIHsKKyAgICAg
ICAgICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRSZWN0cyhtYXRjaFJlY3RzKTsKKyAgICAgICAgICAg
IG1fZmluZE1hdGNoZXMuYXBwZW5kKHJhbmdlKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nKHN0cmluZywg
bWF0Y2hSZWN0cywgbWF0Y2hDb3VudCwgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXgpKTsKIAogICAg
ICAgICBpZiAoIShvcHRpb25zICYgRmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvcikgfHwgIXNl
bGVjdGVkRnJhbWUgfHwgIXVwZGF0ZUZpbmRJbmRpY2F0b3IoKnNlbGVjdGVkRnJhbWUsIHNob3Vs
ZFNob3dPdmVybGF5KSkKICAgICAgICAgICAgIGhpZGVGaW5kSW5kaWNhdG9yKCk7CkBAIC0yMjEs
MTMgKzIyOCwxNSBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZwogICAgICAgICAgICAgaWYgKGZz
LnNlbGVjdGlvbkJvdW5kcygpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIG1fZmluZE1h
dGNoZXMuY2xlYXIoKTsKICAgICAgICAgICAgICAgICBpbnQgaW5kZXhGb3JTZWxlY3Rpb247Ci0g
ICAgICAgICAgICAgICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kU3RyaW5nTWF0Y2hpbmdS
YW5nZXMoc3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhNYXRjaENvdW50LCBtX2ZpbmRNYXRjaGVz
LCBpbmRleEZvclNlbGVjdGlvbik7CisgICAgICAgICAgICAgICAgbV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT5maW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoc3RyaW5nLCBjb3JlT3B0aW9ucywgbWF4TWF0
Y2hDb3VudCwgbV9maW5kTWF0Y2hlcywgaW5kZXhGb3JTZWxlY3Rpb24pOwogICAgICAgICAgICAg
ICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gaW5kZXhGb3JTZWxlY3Rpb247CiAgICAgICAg
ICAgICAgICAgZm91bmRTdHJpbmdTdGFydHNBZnRlclNlbGVjdGlvbiA9IHRydWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2ZpbmRNYXRjaGVzLmNsZWFyKCk7CisK
ICAgICBib29sIGZvdW5kOwogICAgIGlmIChwbHVnaW5WaWV3KQogICAgICAgICBmb3VuZCA9IHBs
dWdpblZpZXctPmZpbmRTdHJpbmcoc3RyaW5nLCBjb3JlT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTM0
OTZhNTk2ZjdmZjAyZTkzOWM1MTg4OWZhMTFhMDgxMDRkOTFiNC4uM2JiNDZlMjY4OGRhYTFmZmVl
OTFlMjkyMWFjNDRlZWNiZTM3OTQ0NCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE1LTExLTA1ICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBwcmVsaW1pbmFyeSAo
U1BJKSBzdXBwb3J0IGZvciBOU1RleHRGaW5kZXIgb24gV0tXZWJWaWV3CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA5MDcKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzE5MTcxNjI0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2Ev
RmluZEluUGFnZS5tbTogQWRkZWQuCisgICAgICAgICgtW0ZpbmRJblBhZ2VOYXZpZ2F0aW9uRGVs
ZWdhdGUgd2ViVmlldzpkaWRGaW5pc2hOYXZpZ2F0aW9uOl0pOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgIEFkZCBhbiBBUEkgdGVzdC4KKworICAgICAgICAqIFdlYkVkaXRpbmdUZXN0ZXIvV0sx
V2ViRG9jdW1lbnRDb250cm9sbGVyLm06CisgICAgICAgICogV2ViRWRpdGluZ1Rlc3Rlci9XSzJX
ZWJEb2N1bWVudENvbnRyb2xsZXIubToKKyAgICAgICAgKC1bV0syV2ViRG9jdW1lbnRDb250cm9s
bGVyIGF3YWtlRnJvbU5pYl0pOgorICAgICAgICAoLVtXSzJXZWJEb2N1bWVudENvbnRyb2xsZXIg
Y29udGVudFZpZXddKToKKyAgICAgICAgVXNlIGluY3JlbWVudGFsIGZpbmQsIGFuZCBzaG93IHRo
ZSBvdmVybGF5L2luZGljYXRvci4KKwogMjAxNS0xMS0wNCAgV2Vuc29uIEhzaWVoICA8d2Vuc29u
X2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggY3Jhc2hpbmcgYW5kIGZsYWt5IFVJU2Ny
aXB0Q29udHJvbGxlci1iYXNlZCB0ZXN0cyBpbiBmYXN0L2V2ZW50cy9pb3MKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggZWQ4Mzc4ZjFlZjVjMTFkNDY4YTk5ZmI2YmYwNWNhZmZmZGFkNzFmMS4u
OWRiYzFiNjEyNjYwNmZkMWRiZGY1N2EwOThhYTkxNTU3NWJjMTQ5YSAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTM2LDYgKzM2LDcgQEAKIAkJMjkwRjQyNzUxNzJBMjIxQzAwOTM5RkYwIC8q
IGN1c3RvbS1wcm90b2NvbC1zeW5jLXhoci5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5MEY0Mjc0MTcyQTFGREUwMDkzOUZGMCAvKiBj
dXN0b20tcHJvdG9jb2wtc3luYy14aHIuaHRtbCAqLzsgfTsKIAkJMjk3MjM0QjcxNzNBRkFDNzAw
OTgzNjAxIC8qIEN1c3RvbVByb3RvY29sc0ludmFsaWRTY2hlbWVfQnVuZGxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5NzIzNEI1MTczQUZBQzcw
MDk4MzYwMSAvKiBDdXN0b21Qcm90b2NvbHNJbnZhbGlkU2NoZW1lX0J1bmRsZS5jcHAgKi87IH07
CiAJCTJEMUZFMEIwMUFENDY1QzEwMDZDRDlFNiAvKiBGaXhlZExheW91dFNpemUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDFGRTBBRjFBRDQ2NUMx
MDA2Q0Q5RTYgLyogRml4ZWRMYXlvdXRTaXplLm1tICovOyB9OworCQkyRDgxMDRDQzFCRUMxM0U3
MDAyMERBNDYgLyogRmluZEluUGFnZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEODEwNENCMUJFQzEzRTcwMDIwREE0NiAvKiBGaW5kSW5QYWdlLm1t
ICovOyB9OwogCQkyRDlBNTNBRjFCMzFGQThEMDA3NEQ1QUEgLyogU2hyaW5rVG9GaXQubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlBNTNBRTFCMzFG
QThEMDA3NEQ1QUEgLyogU2hyaW5rVG9GaXQubW0gKi87IH07CiAJCTJERDM1NTM2MUJEMDgzNzgw
MDVERjRBNyAvKiBBdXRvTGF5b3V0SW50ZWdyYXRpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQzNTUzNTFCRDA4Mzc4MDA1REY0QTcgLyogQXV0
b0xheW91dEludGVncmF0aW9uLm1tICovOyB9OwogCQkyREQ3RDNBRjE3ODIyN0IzMDAyNkUxRTMg
LyogbG90cy1vZi10ZXh0LXZlcnRpY2FsLWxyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkREN0QzQUUxNzgyMjdBQzAwMjZFMUUzIC8q
IGxvdHMtb2YtdGV4dC12ZXJ0aWNhbC1sci5odG1sICovOyB9OwpAQCAtNTE5LDYgKzUyMCw3IEBA
CiAJCTI5QUI4QUEzMTY0QzdBOTMwMEQ0OUJFQyAvKiBUZXN0QnJvd3NpbmdDb250ZXh0TG9hZERl
bGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlc3RCcm93c2luZ0Nv
bnRleHRMb2FkRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxRkUw
QUYxQUQ0NjVDMTAwNkNEOUU2IC8qIEZpeGVkTGF5b3V0U2l6ZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpeGVkTGF5b3V0U2l6ZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkQ2NDBCNTQxNzg3NURGRjAwQkZBRjk5IC8qIFNjcm9sbFBpbm5p
bmdCZWhhdmlvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Ny
b2xsUGlubmluZ0JlaGF2aW9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJE
ODEwNENCMUJFQzEzRTcwMDIwREE0NiAvKiBGaW5kSW5QYWdlLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gRmluZEluUGFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkQ5QTUzQUUxQjMxRkE4RDAwNzRENUFBIC8qIFNocmlua1RvRml0Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2hyaW5rVG9GaXQubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJERDM1NTM1MUJEMDgzNzgwMDVERjRBNyAvKiBB
dXRvTGF5b3V0SW50ZWdyYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBBdXRvTGF5b3V0SW50ZWdyYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJERDdEM0E5MTc4MjA1RDAwMDI2RTFFMyAvKiBSZXNpemVSZXZlcnNlUGFnaW5hdGVk
V2ViVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNpemVS
ZXZlcnNlUGFnaW5hdGVkV2ViVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05MjksNiArOTMxLDcgQEAKIAkJCQlBMTRGQzU4NjFCODk5MUI2MDBEMTA3RUIgLyogQ29udGVu
dEZpbHRlcmluZy5tbSAqLywKIAkJCQlBMTRGQzU4OTFCODk5MjcxMDBEMTA3RUIgLyogQ29udGVu
dEZpbHRlcmluZ1BsdWdJbi5tbSAqLywKIAkJCQlBMUE0RkU1RDE4REQzREI3MDBCNUVBOEEgLyog
RG93bmxvYWQubW0gKi8sCisJCQkJMkQ4MTA0Q0IxQkVDMTNFNzAwMjBEQTQ2IC8qIEZpbmRJblBh
Z2UubW0gKi8sCiAJCQkJMkQxRkUwQUYxQUQ0NjVDMTAwNkNEOUU2IC8qIEZpeGVkTGF5b3V0U2l6
ZS5tbSAqLywKIAkJCQkzN0QzNkVENjFBRjQyRUNEMDBCQUY1RDkgLyogTG9hZEFsdGVybmF0ZUhU
TUxTdHJpbmcubW0gKi8sCiAJCQkJNTFDRDFDNkExQjM4Q0UzNjAwMTQyQ0E1IC8qIE1vZGFsQWxl
cnRzLm1tICovLApAQCAtMTc5OSw2ICsxODAyLDcgQEAKIAkJCQkyRDFGRTBCMDFBRDQ2NUMxMDA2
Q0Q5RTYgLyogRml4ZWRMYXlvdXRTaXplLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNCOUJDMzgx
QTY3NDgyMzAwRkU1Njc4IC8qIFdlYWtQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU3NzY1
Q0QxNkM0RDgwQTAwQkEyQkIxIC8qIG1haW5JT1MubW0gaW4gU291cmNlcyAqLywKKwkJCQkyRDgx
MDRDQzFCRUMxM0U3MDAyMERBNDYgLyogRmluZEluUGFnZS5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTQxOTczQjVEMUFGMjI4NzUwMDZDN0IzNiAvKiBTaGFyZWRCdWZmZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkREMzU1MzYxQkQwODM3ODAwNURGNEE3IC8qIEF1dG9MYXlvdXRJbnRlZ3JhdGlv
bi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdBQTZBMTUyMUFBQzBCMzEwMDJCMkVEMyAvKiBXb3Jr
UXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJDb2NvYS9GaW5kSW5QYWdlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyQ29jb2EvRmluZEluUGFnZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTZmMDMxZTFhNWM5
Y2NiYTM5ZmM4ZmQ3Yzk3NWRlMWY2ZjI0OTBiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvRmluZEluUGFnZS5tbQpAQCAtMCwwICsxLDEy
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2ltcG9ydCAiUGxhdGZv
cm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZiBXS19BUElfRU5BQkxFRCAmJiAhUExBVEZPUk0o
SU9TKQorCit0eXBlZGVmIGVudW0gOiBOU1VJbnRlZ2VyIHsKKyAgICBOU1RleHRGaW5kZXJBc3lu
Y2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25zQmFja3dhcmRzID0gMSA8PCAwLAorfSBOU1RleHRG
aW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZpbmRPcHRpb25zOworCitAcHJvdG9jb2wgTlNUZXh0
RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kTWF0Y2ggPE5TT2JqZWN0PgorQHByb3BlcnR5
IChyZXRhaW4sIG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXkgKnRleHRSZWN0czsKK0BlbmQK
KworQGludGVyZmFjZSBXS1dlYlZpZXcgKE5TVGV4dEZpbmRlclN1cHBvcnQpCisKKy0gKHZvaWQp
ZmluZE1hdGNoZXNGb3JTdHJpbmc6KE5TU3RyaW5nICopdGFyZ2V0U3RyaW5nIHJlbGF0aXZlVG9N
YXRjaDooaWQgPE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNoPilyZWxh
dGl2ZU1hdGNoIGZpbmRPcHRpb25zOihOU1RleHRGaW5kZXJBc3luY2hyb25vdXNEb2N1bWVudEZp
bmRPcHRpb25zKWZpbmRPcHRpb25zIG1heFJlc3VsdHM6KE5TVUludGVnZXIpbWF4UmVzdWx0cyBy
ZXN1bHRDb2xsZWN0b3I6KHZvaWQgKF4pKE5TQXJyYXkgKm1hdGNoZXMsIEJPT0wgZGlkV3JhcCkp
cmVzdWx0Q29sbGVjdG9yOworCitAZW5kCisKK3N0YXRpYyBib29sIG5hdmlnYXRpb25Eb25lOwor
c3RhdGljIGJvb2wgZmluZE1hdGNoZXNEb25lOworCitAaW50ZXJmYWNlIEZpbmRJblBhZ2VOYXZp
Z2F0aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGU+CitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBGaW5kSW5QYWdlTmF2aWdhdGlvbkRlbGVnYXRlCisKKy0gKHZvaWQp
d2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRGaW5pc2hOYXZpZ2F0aW9uOihXS05hdmln
YXRpb24gKiluYXZpZ2F0aW9uCit7CisgICAgbmF2aWdhdGlvbkRvbmUgPSB0cnVlOworfQorCitA
ZW5kCisKK1RFU1QoV2ViS2l0MiwgRmluZEluUGFnZSkKK3sKKyAgICBSZXRhaW5QdHI8V0tXZWJW
aWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDEwMCwgMTAwKV0pOworCisgICAgRmluZEluUGFnZU5hdmlnYXRpb25E
ZWxlZ2F0ZSAqZGVsZWdhdGUgPSBbW0ZpbmRJblBhZ2VOYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRdOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZV07CisK
KyAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJM
OltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJsb3RzLW9mLXRleHQiIHdp
dGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKKworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmbmF2aWdhdGlvbkRvbmUpOworCisgICAgTlNUZXh0RmluZGVyQXN5
bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9ucyBub0ZpbmRPcHRpb25zID0gKE5TVGV4dEZpbmRl
ckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE9wdGlvbnMpMDsKKworICAgIC8vIEZpbmQgYWxsIG1h
dGNoZXMuCisgICAgW3dlYlZpZXcgZmluZE1hdGNoZXNGb3JTdHJpbmc6QCJCaXJ0aGRheSIgcmVs
YXRpdmVUb01hdGNoOm5pbCBmaW5kT3B0aW9uczpub0ZpbmRPcHRpb25zIG1heFJlc3VsdHM6TlNV
SW50ZWdlck1heCByZXN1bHRDb2xsZWN0b3I6XihOU0FycmF5ICptYXRjaGVzLCBCT09MIGRpZFdy
YXApIHsKKyAgICAgICAgRVhQRUNUX0VRKChOU1VJbnRlZ2VyKTM2MCwgbWF0Y2hlcy5jb3VudCk7
CisKKyAgICAgICAgaWQgPE5TVGV4dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNo
PiBmaXJzdE1hdGNoID0gW21hdGNoZXMgb2JqZWN0QXRJbmRleDowXTsKKyAgICAgICAgRVhQRUNU
X0VRKChOU1VJbnRlZ2VyKTEsIGZpcnN0TWF0Y2gudGV4dFJlY3RzLmNvdW50KTsKKworICAgICAg
ICBmaW5kTWF0Y2hlc0RvbmUgPSB0cnVlOworICAgIH1dOworCisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZmaW5kTWF0Y2hlc0RvbmUpOworICAgIGZpbmRNYXRjaGVzRG9uZSA9IGZhbHNl
OworCisgICAgLy8gRmluZCBvbmUgbWF0Y2gsIGRvaW5nIGFuIGluY3JlbWVudGFsIHNlYXJjaC4K
KyAgICBbd2ViVmlldyBmaW5kTWF0Y2hlc0ZvclN0cmluZzpAIkJpcnRoZGF5IiByZWxhdGl2ZVRv
TWF0Y2g6bmlsIGZpbmRPcHRpb25zOm5vRmluZE9wdGlvbnMgbWF4UmVzdWx0czoxIHJlc3VsdENv
bGxlY3RvcjpeKE5TQXJyYXkgKm1hdGNoZXMsIEJPT0wgZGlkV3JhcCkgeworICAgICAgICBFWFBF
Q1RfRVEoKE5TVUludGVnZXIpMSwgbWF0Y2hlcy5jb3VudCk7CisKKyAgICAgICAgaWQgPE5TVGV4
dEZpbmRlckFzeW5jaHJvbm91c0RvY3VtZW50RmluZE1hdGNoPiBmaXJzdE1hdGNoID0gW21hdGNo
ZXMgb2JqZWN0QXRJbmRleDowXTsKKyAgICAgICAgRVhQRUNUX0VRKChOU1VJbnRlZ2VyKTEsIGZp
cnN0TWF0Y2gudGV4dFJlY3RzLmNvdW50KTsKKworICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IG1h
dGNoIGluIGluY3JlbWVudGFsIG1vZGUuCisgICAgICAgIFt3ZWJWaWV3IGZpbmRNYXRjaGVzRm9y
U3RyaW5nOkAiQmlydGhkYXkiIHJlbGF0aXZlVG9NYXRjaDpuaWwgZmluZE9wdGlvbnM6bm9GaW5k
T3B0aW9ucyBtYXhSZXN1bHRzOjEgcmVzdWx0Q29sbGVjdG9yOl4oTlNBcnJheSAqbWF0Y2hlcywg
Qk9PTCBkaWRXcmFwKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoKE5TVUludGVnZXIpMSwgbWF0
Y2hlcy5jb3VudCk7CisKKyAgICAgICAgICAgIGlkIDxOU1RleHRGaW5kZXJBc3luY2hyb25vdXNE
b2N1bWVudEZpbmRNYXRjaD4gc2Vjb25kTWF0Y2ggPSBbbWF0Y2hlcyBvYmplY3RBdEluZGV4OjBd
OworICAgICAgICAgICAgRVhQRUNUX0VRKChOU1VJbnRlZ2VyKTEsIHNlY29uZE1hdGNoLnRleHRS
ZWN0cy5jb3VudCk7CisKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShOU0VxdWFsUmVjdHMoW2Zp
cnN0TWF0Y2gudGV4dFJlY3RzLmxhc3RPYmplY3QgcmVjdFZhbHVlXSwgW3NlY29uZE1hdGNoLnRl
eHRSZWN0cy5sYXN0T2JqZWN0IHJlY3RWYWx1ZV0pKTsKKworICAgICAgICAgICAgLy8gRmluZCB0
aGUgcHJldmlvdXMgbWF0Y2ggaW4gaW5jcmVtZW50YWwgbW9kZS4KKyAgICAgICAgICAgIFt3ZWJW
aWV3IGZpbmRNYXRjaGVzRm9yU3RyaW5nOkAiQmlydGhkYXkiIHJlbGF0aXZlVG9NYXRjaDpuaWwg
ZmluZE9wdGlvbnM6TlNUZXh0RmluZGVyQXN5bmNocm9ub3VzRG9jdW1lbnRGaW5kT3B0aW9uc0Jh
Y2t3YXJkcyBtYXhSZXN1bHRzOjEgcmVzdWx0Q29sbGVjdG9yOl4oTlNBcnJheSAqbWF0Y2hlcywg
Qk9PTCBkaWRXcmFwKSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKChOU1VJbnRlZ2VyKTEs
IG1hdGNoZXMuY291bnQpOworCisgICAgICAgICAgICAgICAgaWQgPE5TVGV4dEZpbmRlckFzeW5j
aHJvbm91c0RvY3VtZW50RmluZE1hdGNoPiBmaXJzdE1hdGNoQWdhaW4gPSBbbWF0Y2hlcyBvYmpl
Y3RBdEluZGV4OjBdOworICAgICAgICAgICAgICAgIEVYUEVDVF9FUSgoTlNVSW50ZWdlcikxLCBm
aXJzdE1hdGNoQWdhaW4udGV4dFJlY3RzLmNvdW50KTsKKworICAgICAgICAgICAgICAgIEVYUEVD
VF9UUlVFKE5TRXF1YWxSZWN0cyhbZmlyc3RNYXRjaC50ZXh0UmVjdHMubGFzdE9iamVjdCByZWN0
VmFsdWVdLCBbZmlyc3RNYXRjaEFnYWluLnRleHRSZWN0cy5sYXN0T2JqZWN0IHJlY3RWYWx1ZV0p
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmaW5kTWF0Y2hlc0RvbmUgPSB0
cnVlOworICAgICAgICAgICAgfV07CisgICAgICAgIH1dOworCisgICAgfV07CisKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmRNYXRjaGVzRG9uZSk7Cit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViRWRpdGluZ1Rlc3Rlci9XSzFXZWJEb2N1bWVudENvbnRyb2xsZXIu
bSBiL1Rvb2xzL1dlYkVkaXRpbmdUZXN0ZXIvV0sxV2ViRG9jdW1lbnRDb250cm9sbGVyLm0KaW5k
ZXggZGUwNTY2MjY0MjZkZTc5ZDA5NGE3NDhkOTFlZGE0YWY4Nzc2ZjFmNS4uNTdmNzlkYWUxOGYx
ZWQ5YzBmNTY1YmMxMWZkMTNmMDU1NWZhMTIxMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViRWRpdGlu
Z1Rlc3Rlci9XSzFXZWJEb2N1bWVudENvbnRyb2xsZXIubQorKysgYi9Ub29scy9XZWJFZGl0aW5n
VGVzdGVyL1dLMVdlYkRvY3VtZW50Q29udHJvbGxlci5tCkBAIC0zMSw3ICszMSw3IEBACiAjaW1w
b3J0IDxXZWJLaXQvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViVmlld1ByaXZhdGUuaD4KIAotQGludGVyZmFjZSBXSzFXZWJEb2N1bWVudENvbnRyb2xsZXIo
KQorQGludGVyZmFjZSBXSzFXZWJEb2N1bWVudENvbnRyb2xsZXIgKCkgPFdlYlVJRGVsZWdhdGU+
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBXZWJWaWV3ICp3ZWJWaWV3OwogQGVuZAog
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJFZGl0aW5nVGVzdGVyL1dLMldlYkRvY3VtZW50Q29udHJv
bGxlci5tIGIvVG9vbHMvV2ViRWRpdGluZ1Rlc3Rlci9XSzJXZWJEb2N1bWVudENvbnRyb2xsZXIu
bQppbmRleCBlZmFmNjBhOGFjNmM4MzNmNjI2OTQwNTU1ODhhNGQ5OTQ0YjljOWJiLi40OTkxMWQ4
NmI1YTI0MjdiNDAyY2FlMmRjNzY5YmI2ODQxNTEyZWYzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJF
ZGl0aW5nVGVzdGVyL1dLMldlYkRvY3VtZW50Q29udHJvbGxlci5tCisrKyBiL1Rvb2xzL1dlYkVk
aXRpbmdUZXN0ZXIvV0syV2ViRG9jdW1lbnRDb250cm9sbGVyLm0KQEAgLTczLDcgKzczLDkgQEAg
LSAodm9pZClhd2FrZUZyb21OaWIKICAgICBzZWxmLndpbmRvdy50aXRsZSA9IEAiV2ViRWRpdG9y
IFtXSzJdIjsKIAogICAgIF90ZXh0RmluZGVyID0gW1tOU1RleHRGaW5kZXIgYWxsb2NdIGluaXRd
OwotICAgIF90ZXh0RmluZGVyLmNsaWVudCA9IChpZDxOU1RleHRGaW5kZXJDbGllbnQ+KV93ZWJW
aWV3OworICAgIF90ZXh0RmluZGVyLmluY3JlbWVudGFsU2VhcmNoaW5nRW5hYmxlZCA9IFlFUzsK
KyAgICBfdGV4dEZpbmRlci5pbmNyZW1lbnRhbFNlYXJjaGluZ1Nob3VsZERpbUNvbnRlbnRWaWV3
ID0gWUVTOworICAgIF90ZXh0RmluZGVyLmNsaWVudCA9IF93ZWJWaWV3OwogICAgIF90ZXh0Rmlu
ZGVyLmZpbmRCYXJDb250YWluZXIgPSBzZWxmOwogfQogCkBAIC0xMDIsNiArMTA0LDExIEBAIC0g
KHZvaWQpc2V0RmluZEJhclZpZXc6KE5TVmlldyAqKWZpbmRCYXJWaWV3CiAgICAgW3NlbGYgbGF5
b3V0XTsKIH0KIAorLSAoTlNWaWV3ICopY29udGVudFZpZXcKK3sKKyAgICByZXR1cm4gX3dlYlZp
ZXc7Cit9CisKIC0gKEJPT0wpaXNGaW5kQmFyVmlzaWJsZQogewogICAgIHJldHVybiBfZmluZEJh
clZpc2libGU7Cg==
</data>
<flag name="review"
          id="290020"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>