<?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>102448</bug_id>
          
          <creation_ts>2012-11-15 17:08:30 -0800</creation_ts>
          <short_desc>PDFPlugin: The &quot;Open in Preview&quot; HUD button should work</short_desc>
          <delta_ts>2012-12-16 23:13:11 -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>PDF</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>105151</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>adele</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>mitz</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>768711</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-11-15 17:08:30 -0800</bug_when>
    <thetext>&lt;rdar://problem/12695729&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768753</commentid>
    <comment_count>1</comment_count>
      <attachid>174574</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-11-15 17:39:40 -0800</bug_when>
    <thetext>Created attachment 174574
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768759</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-15 17:42:09 -0800</bug_when>
    <thetext>Attachment 174574 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/WebPageProxy.h:728:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 8 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>785173</commentid>
    <comment_count>3</comment_count>
      <attachid>174574</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-12-06 13:07:17 -0800</bug_when>
    <thetext>Comment on attachment 174574
patch

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

Did you test that this works with PostScript files?

&gt; Source/WebKit2/UIProcess/API/mac/PDFViewController.mm:586
&gt; +    CoreIPC::DataReference dataReference(CFDataGetBytePtr(m_pdfData.get()), CFDataGetLength(m_pdfData.get()));

I find it confusing that a CoreIPC type is used in UIProcess with no intention of IPC happening.

&gt; Source/WebKit2/UIProcess/API/mac/PDFViewController.mm:591
&gt; +    if (!m_temporaryPDFID)

Can this be an early return before creating a data reference?

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:1255
&gt; +    WTF::Vector&lt;String&gt; m_temporaryPDFFiles;

s/WTF:://

&gt; Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:522
&gt; +void WebPageProxy::savePDFToFileInTemporaryFolder(const String&amp; suggestedFilename, const String&amp; originatingURLString, const CoreIPC::DataReference&amp; data, uint32_t&amp; pdfID)

originatingURLString looks unused. I think that we should put it into the right place.

&gt; Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:533
&gt; +    if (!nsPath)
&gt; +        return;

I think that that it may be appropriate to write something to system console in early return cases.

&gt; Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:535
&gt; +    String path(nsPath);

Looks like this variable is not needed - it&apos;s only used once, and implicit conversion would work there.

&gt; Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:539
&gt; +    RetainPtr&lt;NSNumber&gt; permissions(AdoptNS, [[NSNumber alloc] initWithInt:S_IRUSR]);
&gt; +    RetainPtr&lt;NSDictionary&gt; fileAttributes(AdoptNS, [[NSDictionary alloc] initWithObjectsAndKeys:permissions.get(), NSFilePosixPermissions, nil]);
&gt; +    RetainPtr&lt;NSData&gt; nsData(AdoptNS, [[NSData alloc] initWithBytesNoCopy:(void *)data.data() length:data.size() freeWhenDone:NO]);

= adoptNS() is our new style.

&gt; Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:551
&gt; +    if (pdfID &gt; m_temporaryPDFFiles.size())
&gt; +        return;

What if it&apos;s 0?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h:107
&gt; +    CoreIPC::DataReference pdfDocumentDataReference();

Do we really need to use a CoreIPC type in plug-in code? This looks like a wrong layer for it.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:727
&gt; +        webFrame()-&gt;page()-&gt;sendSync(Messages::WebPageProxy::SavePDFToFileInTemporaryFolder(suggestedFilename(), webFrame()-&gt;url(), dataReference), Messages::WebPageProxy::SavePDFToFileInTemporaryFolder::Reply(m_temporaryPDFID));

I&apos;m not thrilled that you add a sync message here. Please don&apos;t do that.

It&apos;s not too likely to happen in practice, but there is no strong guarantee that sync and async messages between UIProcess and WebProcess are handled in order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785629</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-12-06 21:50:58 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 174574 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174574&amp;action=review
&gt; 
&gt; Did you test that this works with PostScript files?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/mac/PDFViewController.mm:586
&gt; &gt; +    CoreIPC::DataReference dataReference(CFDataGetBytePtr(m_pdfData.get()), CFDataGetLength(m_pdfData.get()));
&gt; 
&gt; I find it confusing that a CoreIPC type is used in UIProcess with no intention of IPC happening.

Would it not be weirder to use NSData/CFData in WebPageProxy? Or would you prefer the argument be a raw data pointer and a size? I&apos;m not sure what to use here if not DataReference.

&gt; &gt; Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:522
&gt; &gt; +void WebPageProxy::savePDFToFileInTemporaryFolder(const String&amp; suggestedFilename, const String&amp; originatingURLString, const CoreIPC::DataReference&amp; data, uint32_t&amp; pdfID)
&gt; 
&gt; originatingURLString looks unused. I think that we should put it into the right place.

Not 100% sure how to do that, I&apos;ll look into it.

&gt; &gt; Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:533
&gt; &gt; +    if (!nsPath)
&gt; &gt; +        return;
&gt; 
&gt; I think that that it may be appropriate to write something to system console in early return cases.

Seems reasonable.

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h:107
&gt; &gt; +    CoreIPC::DataReference pdfDocumentDataReference();
&gt; 
&gt; Do we really need to use a CoreIPC type in plug-in code? This looks like a wrong layer for it.

I can get rid of the convenience function, but I&apos;ll still need it down below when I send the message, no? Maybe I&apos;m misunderstanding.

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:727
&gt; &gt; +        webFrame()-&gt;page()-&gt;sendSync(Messages::WebPageProxy::SavePDFToFileInTemporaryFolder(suggestedFilename(), webFrame()-&gt;url(), dataReference), Messages::WebPageProxy::SavePDFToFileInTemporaryFolder::Reply(m_temporaryPDFID));
&gt; 
&gt; I&apos;m not thrilled that you add a sync message here. Please don&apos;t do that.
&gt; 
&gt; It&apos;s not too likely to happen in practice, but there is no strong guarantee that sync and async messages between UIProcess and WebProcess are handled in order.

I&apos;m switching this to be savePDFToTemporaryFolderAndOpenWithNativeApplication so it does it all in one fell swoop, no need for the sync reply. Though I still need to work out how to get the ID back, but I think that&apos;s easy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785642</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-12-06 22:18:34 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 174574 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174574&amp;action=review
&gt; 
&gt; Did you test that this works with PostScript files?

It does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785643</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-12-06 22:20:15 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 174574 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174574&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:533
&gt; &gt; +    if (!nsPath)
&gt; &gt; +        return;
&gt; 
&gt; I think that that it may be appropriate to write something to system console in early return cases.

WTFLogAlways? NSLog?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791864</commentid>
    <comment_count>7</comment_count>
      <attachid>179534</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-12-14 14:22:33 -0800</bug_when>
    <thetext>Created attachment 179534
patch

I believe this addresses Alexey&apos;s concerns except the one about saving the originating URL. I tried using WKSetMetadataURL, but it was unclear that it was actually having any effect. I&apos;d like to file that as a separate bug and get Open in Preview working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791942</commentid>
    <comment_count>8</comment_count>
      <attachid>179550</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-12-14 16:12:24 -0800</bug_when>
    <thetext>Created attachment 179550
rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791961</commentid>
    <comment_count>9</comment_count>
      <attachid>179550</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-12-14 16:43:04 -0800</bug_when>
    <thetext>Comment on attachment 179550
rebase

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

&gt; Source/WebKit2/UIProcess/API/mac/PDFViewController.mm:581
&gt; +        m_temporaryPDFUUID = WebCore::createCanonicalUUIDString();

Can &quot;using namespace WebCore&quot; be added to this file?

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:730
&gt; +    void savePDFToTemporaryFolderAndOpenWithNativeApplicationRaw(const String&amp; suggestedFilename, const String&amp; originatingURLString, const uint8_t* data, unsigned long size, const String&amp; pdfUUID);
&gt; +    void savePDFToTemporaryFolderAndOpenWithNativeApplication(const String&amp; suggestedFilename, const String&amp; originatingURLString, const CoreIPC::DataReference&amp;, const String&amp; pdfUUID);

I can&apos;t tell the difference between &quot;raw&quot; and &quot;cooked&quot; looking at this file. Is there a semantic difference between these two?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:780
&gt; +        // FIXME: We should probably notify the user that they can&apos;t save before the document is finished loading.
&gt; +        // PDFViewController does an NSBeep(), but that seems insufficient.

Would be nice to grey out the icon in HUD. It&apos;s too late to explain now!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792471</commentid>
    <comment_count>10</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-12-16 22:36:39 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 179550 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=179550&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebPageProxy.h:730
&gt; &gt; +    void savePDFToTemporaryFolderAndOpenWithNativeApplicationRaw(const String&amp; suggestedFilename, const String&amp; originatingURLString, const uint8_t* data, unsigned long size, const String&amp; pdfUUID);
&gt; &gt; +    void savePDFToTemporaryFolderAndOpenWithNativeApplication(const String&amp; suggestedFilename, const String&amp; originatingURLString, const CoreIPC::DataReference&amp;, const String&amp; pdfUUID);
&gt; 
&gt; I can&apos;t tell the difference between &quot;raw&quot; and &quot;cooked&quot; looking at this file. Is there a semantic difference between these two?

No, the only difference is that raw takes the raw data and the cooked one takes a DataReference (and is the message target). It seemed like everything in the generated IPC-y code got angry at me when I tried to make the raw one an overload, but maybe there&apos;s a trick I&apos;m missing?

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:780
&gt; &gt; +        // FIXME: We should probably notify the user that they can&apos;t save before the document is finished loading.
&gt; &gt; +        // PDFViewController does an NSBeep(), but that seems insufficient.
&gt; 
&gt; Would be nice to grey out the icon in HUD. It&apos;s too late to explain now!

Yes, it would! That&apos;s not WebKit&apos;s job, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792486</commentid>
    <comment_count>11</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-12-16 23:10:29 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/137876

Will file a followup about WKSetMetadataURL, and if someone knows a trick allowing overloads of message targets, I&apos;ll fix that too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174574</attachid>
            <date>2012-11-15 17:39:40 -0800</date>
            <delta_ts>2012-12-14 14:22:33 -0800</delta_ts>
            <desc>patch</desc>
            <filename>open-in-preview.diff</filename>
            <type>text/plain</type>
            <size>17865</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0ZDgyNjQwLi5iMDg5MGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAg
QEAKKzIwMTItMTEtMTUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUERGUGx1Z2luOiBUaGUgIk9wZW4gaW4gUHJldmlldyIgSFVEIGJ1dHRvbiBzaG91
bGQgd29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAyNDQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjY5NTcyOT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgdGhlICJPcGVuIGlu
IFByZXZpZXciIGJ1dHRvbiBmb3IgUERGUGx1Z2luLCBieSBtb3ZpbmcgdGhlIGltcGxlbWVudGF0
aW9uIGZyb20gUERGVmlld0NvbnRyb2xsZXIKKyAgICAgICAgb250byBXZWJQYWdlUHJveHlNYWMs
IGFuZCByZXVzaW5nIGl0IGluIFBERlZpZXdDb250cm9sbGVyIGFuZCBQREZQbHVnaW4uCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QREZWaWV3Q29udHJvbGxlci5oOgorICAgICAgICAo
UERGVmlld0NvbnRyb2xsZXIpOiBSZW1vdmUgdW5uZWNlc3NhcnkgbWVtYmVycyBpbiBmYXZvciBv
ZiBhIFdlYlBhZ2VQcm94eSB0ZW1wb3JhcnktUERGLUlELgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvbWFjL1BERlZpZXdDb250cm9sbGVyLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZWaWV3Q29u
dHJvbGxlcjo6UERGVmlld0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpQREZWaWV3Q29u
dHJvbGxlcjo6b3BlblBERkluRmluZGVyKTogTW92ZSBQREZWaWV3Q29udHJvbGxlcidzIGltcGxl
bWVudGF0aW9uIG9mIG9wZW5QREZJbkZpbmRlcgorICAgICAgICBhbmQgcmVsYXRlZCBmdW5jdGlv
bnMgdG8gV2ViUGFnZVByb3h5TWFjLiBUaGlzIHdpbGwgYWxsb3cgaXQgdG8gYmUgc2hhcmVkIHdp
dGggUERGUGx1Z2luLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAg
ICAgKFdlYlBhZ2VQcm94eSk6IEFkZCBzYXZlUERGVG9GaWxlSW5UZW1wb3JhcnlGb2xkZXIgYW5k
IG9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uLgorICAgICAg
ICBBZGQgbV90ZW1wb3JhcnlQREZGaWxlcywgd2hpY2ggaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9m
IHRoZSBmaWxlbmFtZXMgb2YgUERGcyB0aGF0IHdlJ3ZlIHNhdmVkIHRvIGRpc2suCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgQWRkIFNhdmVQ
REZUb0ZpbGVJblRlbXBvcmFyeUZvbGRlciBhbmQgT3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJX
aXRoTmF0aXZlQXBwbGljYXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJv
eHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OnRlbXBvcmFyeVBERkRpcmVjdG9yeVBhdGgpOiBD
b3BpZWQgZnJvbSBQREZWaWV3Q29udHJvbGxlci4gQ29uc3RydWN0IHRoZSBwYXRoIHRvIGEKKyAg
ICAgICAgV2ViS2l0UERGcyB0ZW1wb3JhcnkgZGlyZWN0b3J5IGludG8gd2hpY2ggUERGcyB0byBi
ZSBvcGVuZWQgd2l0aCBhIG5hdGl2ZSBhcHBsaWNhdGlvbiBhcmUgZG93bmxvYWRlZC4KKyAgICAg
ICAgKFdlYktpdDo6cGF0aFRvUERGT25EaXNrKTogQ29waWVkIGZyb20gUERGVmlld0NvbnRyb2xs
ZXIuIENvbWJpbmUgdGVtcG9yYXJ5UERGRGlyZWN0b3J5UGF0aAorICAgICAgICB3aXRoIHRoZSBz
dWdnZXN0ZWQgZmlsZW5hbWUgZm9yIHRoZSBnaXZlbiBQREYsIGNyZWF0aW5nIGEgbmV3IGZpbGVu
YW1lIGlmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNhdmVQREZUb0ZpbGVJblRlbXBvcmFyeUZvbGRlcik6CisgICAgICAgIFNhdmUgdGhl
IGdpdmVuIFBERiBkYXRhIHRvIGEgdGVtcG9yYXJ5IGZpbGUsIGdpdmVuIHRoZSBzdWdnZXN0ZWQg
ZmlsZW5hbWUuIFRoaXMgcmV0dXJucyBhbiBJRAorICAgICAgICB3aGljaCBjYW4gYmUgbGF0ZXIg
dXNlZCB0byBpZGVudGlmeSB0aGUgUERGIHdoZW4gYXNrZWQgdG8gb3BlbiBpdCBpbiBhIG5hdGl2
ZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpvcGVuUERGRnJv
bVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbik6CisgICAgICAgIE9wZW4gdGhl
IHByZXZpb3VzbHktc2F2ZWQgUERGIHdpdGggTlNXb3Jrc3BhY2UuIFdlIGlkZW50aWZ5IHRoZSBm
aWxlIGJ5IElEIGluc3RlYWQgb2YgbmFtZQorICAgICAgICBzbyB0aGF0IG9ubHkgdGhlIFVJUHJv
Y2VzcyBuZWVkcyB0byBrZWVwIHRyYWNrIG9mIHRoZSBhY3R1YWwgZmlsZW5hbWUsIGFuZCBzbyB0
aGF0IHRoZSBXZWJQcm9jZXNzCisgICAgICAgIGNhbm5vdCBoYW5kIGFuIGFyYml0cmFyeSBmaWxl
bmFtZSBiYWNrIHRvIHRoZSBVSVByb2Nlc3MgdG8gb3Blbi4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOgorICAgICAgICAoUERGUGx1Z2luKTogQWRkIG9wZW5X
aXRoTmF0aXZlQXBwbGljYXRpb24sIHBkZkRvY3VtZW50RGF0YVJlZmVyZW5jZSwgYW5kIHN0b3Jh
Z2UgZm9yIHRoZSB0ZW1wb3JhcnkgUERGIHBvdGVudGlhbGx5CisgICAgICAgIHNhdmVkIGZyb20g
dGhpcyBQbHVnaW4ncyBkYXRhLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLm1tOgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIG9wZW5X
aXRoUHJldmlld10pOiBGb3J3YXJkIG9wZW5XaXRoUHJldmlldyB0byBQREZQbHVnaW4ncyBvcGVu
V2l0aE5hdGl2ZUFwcGxpY2F0aW9uLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OlBERlBs
dWdpbik6IEluaXRpYWxpemUgbV90ZW1wb3JhcnlQREZJRCB0byAwLCB3aGljaCBpcyB0aGUgIm5v
dC15ZXQtc2F2ZWQiIHN0YXRlLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBkZkRvY3Vt
ZW50RGF0YVJlZmVyZW5jZSk6IFJldHVybiBhIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZm9yIHRo
ZSBkYXRhIHRoaXMgUERGIHJlcHJlc2VudHM7CisgICAgICAgIHRoaXMgd2FzIGZhY3RvcmVkIG91
dCBvZiBzYXZlVG9QREYuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2F2ZVRvUERGKToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKTog
U2F2ZSB0aGUgY3VycmVudCBQREYgdG8gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LCB0aGVuIGFzayBX
ZWJQYWdlUHJveHkKKyAgICAgICAgdG8gb3BlbiBpdCB3aXRoIGEgbmF0aXZlIGFwcGxpY2F0aW9u
LiBJZiB3ZSd2ZSBhbHJlYWR5IGRvd25sb2FkZWQgdGhlIFBERiAoYW5kIGhhdmUgYSBub24temVy
byBtX3RlbXBvcmFyeVBERklEKSwKKyAgICAgICAgd2UgY2FuIGp1c3Qgb3BlbiB0aGUgZXhpc3Rp
bmcgZmlsZS4KKwogMjAxMi0xMS0xNSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIENvbnNvbGlkYXRlIGZvdXIgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcg
V0tWaWV3IG1ldGhvZHMgaW50byBhIHNpbmdsZSBtZXRob2QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BERlZpZXdDb250cm9sbGVyLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QREZWaWV3Q29udHJvbGxlci5oCmluZGV4IDQ2YWFmODQu
LmE3NzNkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BE
RlZpZXdDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
UERGVmlld0NvbnRyb2xsZXIuaApAQCAtNzksOCArNzksNiBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyBDbGFzcyBwZGZEb2N1bWVudENsYXNzKCk7CiAgICAgc3RhdGljIE5TQnVuZGxlKiBwZGZLaXRC
dW5kbGUoKTsKIAotICAgIE5TU3RyaW5nICpwYXRoVG9QREZPbkRpc2soKTsKLQogICAgIFdLVmll
dyogbV93a1ZpZXc7CiAKICAgICBSZXRhaW5QdHI8V0tQREZWaWV3PiBtX3drUERGVmlldzsKQEAg
LTg5LDggKzg3LDcgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1fc3VnZ2Vz
dGVkRmlsZW5hbWU7CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbV9wZGZEYXRhOwogCi0gICAg
UmV0YWluUHRyPE5TU3RyaW5nPiBtX3BhdGhUb1BERk9uRGlzazsKLSAgICBib29sIG1faGFzV3Jp
dHRlblBERlRvRGlzazsKKyAgICB1aW50MzJfdCBtX3RlbXBvcmFyeVBERklEOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9QREZWaWV3Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1BERlZpZXdDb250cm9sbGVyLm1tCmluZGV4IDRkZjBlZjEuLmI4YmE5NzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BERlZpZXdDb250cm9sbGVy
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BERlZpZXdDb250cm9s
bGVyLm1tCkBAIC00MDQsNyArNDA0LDcgQEAgUERGVmlld0NvbnRyb2xsZXI6OlBERlZpZXdDb250
cm9sbGVyKFdLVmlldyAqd2tWaWV3KQogICAgIDogbV93a1ZpZXcod2tWaWV3KQogICAgICwgbV93
a1BERlZpZXcoQWRvcHROUywgW1tXS1BERlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W21fd2tW
aWV3IGJvdW5kc10gUERGVmlld0NvbnRyb2xsZXI6dGhpc10pCiAgICAgLCBtX3BkZlZpZXcoW21f
d2tQREZWaWV3LmdldCgpIHBkZlZpZXddKQotICAgICwgbV9oYXNXcml0dGVuUERGVG9EaXNrKGZh
bHNlKQorICAgICwgbV90ZW1wb3JhcnlQREZJRCgwKQogewogICAgIFttX3drVmlldyBhZGRTdWJ2
aWV3Om1fd2tQREZWaWV3LmdldCgpXTsKIH0KQEAgLTU4MSwyMiArNTgxLDIwIEBAIHZvaWQgUERG
Vmlld0NvbnRyb2xsZXI6Om9wZW5QREZJbkZpbmRlcigpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBOU1N0cmluZyAqcGF0aCA9IHBhdGhUb1BERk9uRGlzaygpOwotICAgIGlmICghcGF0
aCkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX3BkZkRhdGEpOwogCi0gICAgaWYgKCFt
X2hhc1dyaXR0ZW5QREZUb0Rpc2spIHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgUERGIGZpbGUgd2l0
aCB0aGUgbWluaW1hbCBwZXJtaXNzaW9ucyAob25seSBhY2Nlc3NpYmxlIHRvIHRoZSBjdXJyZW50
IHVzZXIsIHNlZSA0MTQ1NzE0KS4KLSAgICAgICAgUmV0YWluUHRyPE5TTnVtYmVyPiBwZXJtaXNz
aW9ucyhBZG9wdE5TLCBbW05TTnVtYmVyIGFsbG9jXSBpbml0V2l0aEludDpTX0lSVVNSXSk7Ci0g
ICAgICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzKEFkb3B0TlMsIFtb
TlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOnBlcm1pc3Npb25zLmdl
dCgpLCBOU0ZpbGVQb3NpeFBlcm1pc3Npb25zLCBuaWxdKTsKKyAgICBDb3JlSVBDOjpEYXRhUmVm
ZXJlbmNlIGRhdGFSZWZlcmVuY2UoQ0ZEYXRhR2V0Qnl0ZVB0cihtX3BkZkRhdGEuZ2V0KCkpLCBD
RkRhdGFHZXRMZW5ndGgobV9wZGZEYXRhLmdldCgpKSk7CiAKLSAgICAgICAgaWYgKCFbW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZUZpbGVBdFBhdGg6cGF0aCBjb250ZW50czoo
TlNEYXRhICopbV9wZGZEYXRhLmdldCgpIGF0dHJpYnV0ZXM6ZmlsZUF0dHJpYnV0ZXMuZ2V0KCld
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmIChkYXRhUmVmZXJlbmNlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1faGFzV3JpdHRlblBERlRvRGlzayA9IHRydWU7
Ci0gICAgfQorICAgIGlmICghbV90ZW1wb3JhcnlQREZJRCkKKyAgICAgICAgcGFnZSgpLT5zYXZl
UERGVG9GaWxlSW5UZW1wb3JhcnlGb2xkZXIobV9zdWdnZXN0ZWRGaWxlbmFtZS5nZXQoKSwgcGFn
ZSgpLT5tYWluRnJhbWUoKS0+dXJsKCksIGRhdGFSZWZlcmVuY2UsIG1fdGVtcG9yYXJ5UERGSUQp
OworCisgICAgaWYgKCFtX3RlbXBvcmFyeVBERklEKQorICAgICAgICByZXR1cm47CiAKLSAgICBb
W05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gb3BlbkZpbGU6cGF0aF07CisgICAgcGFnZSgp
LT5vcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihtX3RlbXBv
cmFyeVBERklEKTsKIH0KIAogc3RhdGljIHZvaWQgcmVsZWFzZUNGRGF0YSh1bnNpZ25lZCBjaGFy
KiwgY29uc3Qgdm9pZCogZGF0YSkKQEAgLTYyNSw1MCArNjIzLDYgQEAgdm9pZCBQREZWaWV3Q29u
dHJvbGxlcjo6c2F2ZVBERlRvRG93bmxvYWRzRm9sZGVyKCkKICAgICBwYWdlKCktPnNhdmVEYXRh
VG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIobV9zdWdnZXN0ZWRGaWxlbmFtZS5nZXQoKSwgcGFnZSgp
LT5tYWluRnJhbWUoKS0+bWltZVR5cGUoKSwgcGFnZSgpLT5tYWluRnJhbWUoKS0+dXJsKCksIGRh
dGEuZ2V0KCkpOwogfQogCi1zdGF0aWMgTlNTdHJpbmcgKnRlbXBvcmFyeVBERkRpcmVjdG9yeVBh
dGgoKQotewotICAgIHN0YXRpYyBOU1N0cmluZyAqdGVtcG9yYXJ5UERGRGlyZWN0b3J5UGF0aDsK
LQotICAgIGlmICghdGVtcG9yYXJ5UERGRGlyZWN0b3J5UGF0aCkgewotICAgICAgICBOU1N0cmlu
ZyAqdGVtcG9yYXJ5RGlyZWN0b3J5VGVtcGxhdGUgPSBbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBz
dHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJXZWJLaXRQREZzLVhYWFhYWCJdOwotICAg
ICAgICBDU3RyaW5nIHRlbXBsYXRlUmVwcmVzZW50YXRpb24gPSBbdGVtcG9yYXJ5RGlyZWN0b3J5
VGVtcGxhdGUgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXTsKLQotICAgICAgICBpZiAobWtkdGVt
cCh0ZW1wbGF0ZVJlcHJlc2VudGF0aW9uLm11dGFibGVEYXRhKCkpKQotICAgICAgICAgICAgdGVt
cG9yYXJ5UERGRGlyZWN0b3J5UGF0aCA9IFtbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IHN0cmluZ1dpdGhGaWxlU3lzdGVtUmVwcmVzZW50YXRpb246dGVtcGxhdGVSZXByZXNlbnRhdGlv
bi5kYXRhKCkgbGVuZ3RoOnRlbXBsYXRlUmVwcmVzZW50YXRpb24ubGVuZ3RoKCldIGNvcHldOwot
ICAgIH0KLQotICAgIHJldHVybiB0ZW1wb3JhcnlQREZEaXJlY3RvcnlQYXRoOwotfQotCi1OU1N0
cmluZyAqUERGVmlld0NvbnRyb2xsZXI6OnBhdGhUb1BERk9uRGlzaygpCi17Ci0gICAgaWYgKG1f
cGF0aFRvUERGT25EaXNrKQotICAgICAgICByZXR1cm4gbV9wYXRoVG9QREZPbkRpc2suZ2V0KCk7
Ci0KLSAgICBOU1N0cmluZyAqcGRmRGlyZWN0b3J5UGF0aCA9IHRlbXBvcmFyeVBERkRpcmVjdG9y
eVBhdGgoKTsKLSAgICBpZiAoIXBkZkRpcmVjdG9yeVBhdGgpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICBOU1N0cmluZyAqcGF0aCA9IFtwZGZEaXJlY3RvcnlQYXRoIHN0cmluZ0J5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDptX3N1Z2dlc3RlZEZpbGVuYW1lLmdldCgpXTsKLQotICAgIE5TRmls
ZU1hbmFnZXIgKmZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwot
ICAgIGlmIChbZmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpwYXRoXSkgewotICAgICAgICBO
U1N0cmluZyAqcGF0aFRlbXBsYXRlUHJlZml4ID0gW3BkZkRpcmVjdG9yeVBhdGggc3RyaW5nQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiWFhYWFhYLSJdOwotICAgICAgICBOU1N0cmluZyAqcGF0
aFRlbXBsYXRlID0gW3BhdGhUZW1wbGF0ZVByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpt
X3N1Z2dlc3RlZEZpbGVuYW1lLmdldCgpXTsKLSAgICAgICAgQ1N0cmluZyBwYXRoVGVtcGxhdGVS
ZXByZXNlbnRhdGlvbiA9IFtwYXRoVGVtcGxhdGUgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXTsK
LQotICAgICAgICBpbnQgZmQgPSBta3N0ZW1wcyhwYXRoVGVtcGxhdGVSZXByZXNlbnRhdGlvbi5t
dXRhYmxlRGF0YSgpLCBwYXRoVGVtcGxhdGVSZXByZXNlbnRhdGlvbi5sZW5ndGgoKSAtIHN0cmxl
bihbcGF0aFRlbXBsYXRlUHJlZml4IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbl0pICsgMSk7Ci0g
ICAgICAgIGlmIChmZCA8IDApCi0gICAgICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgICAgIGNs
b3NlKGZkKTsKLSAgICAgICAgcGF0aCA9IFtmaWxlTWFuYWdlciBzdHJpbmdXaXRoRmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uOnBhdGhUZW1wbGF0ZVJlcHJlc2VudGF0aW9uLmRhdGEoKSBsZW5ndGg6
cGF0aFRlbXBsYXRlUmVwcmVzZW50YXRpb24ubGVuZ3RoKCldOwotICAgIH0KLQotICAgIG1fcGF0
aFRvUERGT25EaXNrLmFkb3B0TlMoW3BhdGggY29weV0pOwotICAgIHJldHVybiBwYXRoOwotfQot
CiB2b2lkIFBERlZpZXdDb250cm9sbGVyOjpsaW5rQ2xpY2tlZChjb25zdCBTdHJpbmcmIHVybCkK
IHsKICAgICBOU0V2ZW50KiBuc0V2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggOTFmYWQzMC4uYzY2OGE5OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNzI0LDYgKzcyNCwxMCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoY29u
c3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgU3RyaW5nJiBvcmlnaW5hdGluZ1VSTFN0cmluZywgV2ViRGF0YSopOwogICAgIHZvaWQgc2F2
ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5h
bWUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYXRpbmdVUkxTdHJpbmcsIGNvbnN0IENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UmKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBzYXZlUERGVG9GaWxl
SW5UZW1wb3JhcnlGb2xkZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3Qg
U3RyaW5nJiBvcmlnaW5hdGluZ1VSTFN0cmluZywgY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5j
ZSYgZGF0YSwgdWludDMyX3QmIHBkZklEKTsKKyAgICB2b2lkIG9wZW5QREZGcm9tVGVtcG9yYXJ5
Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKHVpbnQzMl90IHBkZklEKTsKKyNlbmRpZgogCiAg
ICAgdm9pZCBsaW5rQ2xpY2tlZChjb25zdCBTdHJpbmcmLCBjb25zdCBXZWJNb3VzZUV2ZW50Jik7
CiAKQEAgLTEyNDYsNiArMTI1MCwxMCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShQQUdFX1ZJU0lC
SUxJVFlfQVBJKQogICAgIFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUgbV92aXNpYmlsaXR5
U3RhdGU7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBXVEY6OlZlY3RvcjxTdHJp
bmc+IG1fdGVtcG9yYXJ5UERGRmlsZXM7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4KaW5kZXggNzE1OGQ4MS4uMjkxNmY2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0zMzcsNCArMzM3LDkgQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNlbmRpZgogCiAgICAgU2F2ZVBERlRvRmlsZUluRG93
bmxvYWRzRm9sZGVyKFdURjo6U3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lLCBXVEY6OlN0cmluZyBv
cmlnaW5hdGluZ1VSTFN0cmluZywgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBkYXRhKQorCisjaWYg
UExBVEZPUk0oTUFDKQorICAgIFNhdmVQREZUb0ZpbGVJblRlbXBvcmFyeUZvbGRlcihXVEY6OlN0
cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwgV1RGOjpTdHJpbmcgb3JpZ2luYXRpbmdVUkxTdHJpbmcs
IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkgLT4gKHVpbnQzMl90IHBkZklEKQorICAgIE9w
ZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKHVpbnQzMl90IHBk
ZklEKQorI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1dlYlBhZ2VQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFn
ZVByb3h5TWFjLm1tCmluZGV4IDZmMDk1NmUuLmE3OTI4OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCkBAIC00NzksNCArNDc5LDgzIEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqIHJvb3RMCiAgICAgbV9wYWdlQ2xpZW50LT5zZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nUm9vdExheWVyKHJvb3RMYXllci0+cGxhdGZvcm1MYXllcigpKTsKIH0KIAor
c3RhdGljIE5TU3RyaW5nICp0ZW1wb3JhcnlQREZEaXJlY3RvcnlQYXRoKCkKK3sKKyAgICBzdGF0
aWMgTlNTdHJpbmcgKnRlbXBvcmFyeVBERkRpcmVjdG9yeVBhdGg7CisKKyAgICBpZiAoIXRlbXBv
cmFyeVBERkRpcmVjdG9yeVBhdGgpIHsKKyAgICAgICAgTlNTdHJpbmcgKnRlbXBvcmFyeURpcmVj
dG9yeVRlbXBsYXRlID0gW05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OkAiV2ViS2l0UERGcy1YWFhYWFgiXTsKKyAgICAgICAgQ1N0cmluZyB0ZW1w
bGF0ZVJlcHJlc2VudGF0aW9uID0gW3RlbXBvcmFyeURpcmVjdG9yeVRlbXBsYXRlIGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbl07CisKKyAgICAgICAgaWYgKG1rZHRlbXAodGVtcGxhdGVSZXByZXNl
bnRhdGlvbi5tdXRhYmxlRGF0YSgpKSkKKyAgICAgICAgICAgIHRlbXBvcmFyeVBERkRpcmVjdG9y
eVBhdGggPSBbW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uOnRlbXBsYXRlUmVwcmVzZW50YXRpb24uZGF0YSgpIGxlbmd0aDp0
ZW1wbGF0ZVJlcHJlc2VudGF0aW9uLmxlbmd0aCgpXSBjb3B5XTsKKyAgICB9CisKKyAgICByZXR1
cm4gdGVtcG9yYXJ5UERGRGlyZWN0b3J5UGF0aDsKK30KKworc3RhdGljIE5TU3RyaW5nICpwYXRo
VG9QREZPbkRpc2soY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3sKKyAgICBOU1N0
cmluZyAqcGRmRGlyZWN0b3J5UGF0aCA9IHRlbXBvcmFyeVBERkRpcmVjdG9yeVBhdGgoKTsKKyAg
ICBpZiAoIXBkZkRpcmVjdG9yeVBhdGgpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU1N0
cmluZyAqcGF0aCA9IFtwZGZEaXJlY3RvcnlQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpzdWdnZXN0ZWRGaWxlbmFtZV07CisKKyAgICBOU0ZpbGVNYW5hZ2VyICpmaWxlTWFuYWdl
ciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICBpZiAoW2ZpbGVNYW5hZ2Vy
IGZpbGVFeGlzdHNBdFBhdGg6cGF0aF0pIHsKKyAgICAgICAgTlNTdHJpbmcgKnBhdGhUZW1wbGF0
ZVByZWZpeCA9IFtwZGZEaXJlY3RvcnlQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpAIlhYWFhYWC0iXTsKKyAgICAgICAgTlNTdHJpbmcgKnBhdGhUZW1wbGF0ZSA9IFtwYXRoVGVt
cGxhdGVQcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6c3VnZ2VzdGVkRmlsZW5hbWVdOwor
ICAgICAgICBDU3RyaW5nIHBhdGhUZW1wbGF0ZVJlcHJlc2VudGF0aW9uID0gW3BhdGhUZW1wbGF0
ZSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25dOworCisgICAgICAgIGludCBmZCA9IG1rc3RlbXBz
KHBhdGhUZW1wbGF0ZVJlcHJlc2VudGF0aW9uLm11dGFibGVEYXRhKCksIHBhdGhUZW1wbGF0ZVJl
cHJlc2VudGF0aW9uLmxlbmd0aCgpIC0gc3RybGVuKFtwYXRoVGVtcGxhdGVQcmVmaXggZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uXSkgKyAxKTsKKyAgICAgICAgaWYgKGZkIDwgMCkKKyAgICAgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICBwYXRoID0gW2Zp
bGVNYW5hZ2VyIHN0cmluZ1dpdGhGaWxlU3lzdGVtUmVwcmVzZW50YXRpb246cGF0aFRlbXBsYXRl
UmVwcmVzZW50YXRpb24uZGF0YSgpIGxlbmd0aDpwYXRoVGVtcGxhdGVSZXByZXNlbnRhdGlvbi5s
ZW5ndGgoKV07CisgICAgfQorCisgICAgcmV0dXJuIHBhdGg7Cit9CisKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpzYXZlUERGVG9GaWxlSW5UZW1wb3JhcnlGb2xkZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0
ZWRGaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hdGluZ1VSTFN0cmluZywgY29uc3QgQ29y
ZUlQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgdWludDMyX3QmIHBkZklEKQoreworICAgIGlmICgh
c3VnZ2VzdGVkRmlsZW5hbWUuZW5kc1dpdGgoIi5wZGYiLCBmYWxzZSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChkYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNT
dHJpbmcgKm5zUGF0aCA9IHBhdGhUb1BERk9uRGlzayhzdWdnZXN0ZWRGaWxlbmFtZSk7CisKKyAg
ICBpZiAoIW5zUGF0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIHBhdGgobnNQYXRo
KTsKKworICAgIFJldGFpblB0cjxOU051bWJlcj4gcGVybWlzc2lvbnMoQWRvcHROUywgW1tOU051
bWJlciBhbGxvY10gaW5pdFdpdGhJbnQ6U19JUlVTUl0pOworICAgIFJldGFpblB0cjxOU0RpY3Rp
b25hcnk+IGZpbGVBdHRyaWJ1dGVzKEFkb3B0TlMsIFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
V2l0aE9iamVjdHNBbmRLZXlzOnBlcm1pc3Npb25zLmdldCgpLCBOU0ZpbGVQb3NpeFBlcm1pc3Np
b25zLCBuaWxdKTsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBuc0RhdGEoQWRvcHROUywgW1tOU0Rh
dGEgYWxsb2NdIGluaXRXaXRoQnl0ZXNOb0NvcHk6KHZvaWQgKilkYXRhLmRhdGEoKSBsZW5ndGg6
ZGF0YS5zaXplKCkgZnJlZVdoZW5Eb25lOk5PXSk7CisKKyAgICBpZiAoIVtbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRmlsZUF0UGF0aDpuc1BhdGggY29udGVudHM6bnNEYXRh
LmdldCgpIGF0dHJpYnV0ZXM6ZmlsZUF0dHJpYnV0ZXMuZ2V0KCldKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3RlbXBvcmFyeVBERkZpbGVzLmFwcGVuZChwYXRoKTsKKyAgICBwZGZJRCA9IG1f
dGVtcG9yYXJ5UERGRmlsZXMuc2l6ZSgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6b3BlblBE
RkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24odWludDMyX3QgcGRmSUQp
Cit7CisgICAgaWYgKHBkZklEID4gbV90ZW1wb3JhcnlQREZGaWxlcy5zaXplKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFN0cmluZyBwZGZGaWxlbmFtZSA9IG1fdGVtcG9yYXJ5UERGRmlsZXNb
cGRmSUQgLSAxXTsKKworICAgIGlmICghcGRmRmlsZW5hbWUuZW5kc1dpdGgoIi5wZGYiLCBmYWxz
ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNl
XSBvcGVuRmlsZTpwZGZGaWxlbmFtZV07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKaW5k
ZXggYTEyMzNmYS4uOTM1MDM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCkBAIC00Myw2ICs0MywxMCBAQCBPQkpDX0NMQVNTIFBE
RkFubm90YXRpb247CiBPQkpDX0NMQVNTIFBERkxheWVyQ29udHJvbGxlcjsKIE9CSkNfQ0xBU1Mg
V0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZTsKIAorbmFtZXNwYWNlIENvcmVJUEMgeworY2xh
c3MgRGF0YVJlZmVyZW5jZTsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRWxlbWVu
dDsKIHN0cnVjdCBQbHVnaW5JbmZvOwpAQCAtNjcsNiArNzEsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNsaWNrZWRMaW5rKE5TVVJMICopOwogICAgIHZvaWQgc2F2ZVRvUERGKCk7CisgICAgdm9p
ZCBvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
UERGUGx1Z2luKFdlYkZyYW1lKik7CkBAIC05OSw2ICsxMDQsOCBAQCBwcml2YXRlOgogICAgIAog
ICAgIGJvb2wgc3VwcG9ydHNGb3JtcygpOwogCisgICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBw
ZGZEb2N1bWVudERhdGFSZWZlcmVuY2UoKTsKKwogICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2Nv
bnRhaW5lckxheWVyOwogICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2NvbnRlbnRMYXllcjsKICAg
ICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXI7CkBAIC0xMTIs
NiArMTE5LDggQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gbV9yb290
Vmlld1RvUGx1Z2luVHJhbnNmb3JtOwogICAgIFdlYkNvcmU6OkludFBvaW50IG1fbGFzdE1vdXNl
UG9pbnQ7CiAgICAgV2ViTW91c2VFdmVudCBtX2xhc3RNb3VzZUV2ZW50OworCisgICAgdWludDMy
X3QgbV90ZW1wb3JhcnlQREZJRDsKICAgICAKICAgICBSZXRhaW5QdHI8V0tQREZMYXllckNvbnRy
b2xsZXJEZWxlZ2F0ZT4gbV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbSBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmluZGV4
IDcxNmIyNGUuLjY3ZTE4ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIGNvbnN0
IGNoYXIqIGFubm90YXRpb25TdHlsZSA9CiAKIC0gKHZvaWQpb3BlbldpdGhQcmV2aWV3CiB7Ci0g
ICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICBfcGRmUGx1Z2luLT5vcGVuV2l0aE5hdGl2ZUFw
cGxpY2F0aW9uKCk7CiB9CiAKIC0gKHZvaWQpc2F2ZVRvUERGCkBAIC0yMTYsNiArMjE2LDcgQEAg
UERGUGx1Z2luOjpQREZQbHVnaW4oV2ViRnJhbWUqIGZyYW1lKQogICAgICwgbV9jb250ZW50TGF5
ZXIoQWRvcHROUywgW1tDQUxheWVyIGFsbG9jXSBpbml0XSkKICAgICAsIG1fc2Nyb2xsQ29ybmVy
TGF5ZXIoQWRvcHROUywgW1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9jXSBpbml0V2l0
aFBERlBsdWdpbjp0aGlzXSkKICAgICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyKEFkb3B0TlMsIFtb
cGRmTGF5ZXJDb250cm9sbGVyQ2xhc3MoKSBhbGxvY10gaW5pdF0pCisgICAgLCBtX3RlbXBvcmFy
eVBERklEKDApCiAgICAgLCBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlKEFkb3B0TlMsIFtb
V0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhp
c10pCiB7CiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZGVsZWdhdGUgPSBtX3BkZkxh
eWVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpOwpAQCAtNjkzLDE1ICs2OTQsNDQgQEAgdm9pZCBQ
REZQbHVnaW46Om5vdGlmeUNvbnRlbnRTY2FsZUZhY3RvckNoYW5nZWQoQ0dGbG9hdCBzY2FsZUZh
Y3RvcikKICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CiB9CiAKLXZvaWQgUERGUGx1Z2luOjpzYXZl
VG9QREYoKQorQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBQREZQbHVnaW46OnBkZkRvY3VtZW50RGF0
YVJlZmVyZW5jZSgpCiB7CiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGNmRGF0YSA9
IGRhdGEoKTsKIAotICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZShDRkRh
dGFHZXRCeXRlUHRyKGNmRGF0YS5nZXQoKSksIENGRGF0YUdldExlbmd0aChjZkRhdGEuZ2V0KCkp
KTsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IG5vdGlmeSB0aGUgdXNlciB0aGF0
IHRoZXkgY2FuJ3Qgc2F2ZSBiZWZvcmUgdGhlIGRvY3VtZW50IGlzIGZpbmlzaGVkIGxvYWRpbmcu
CisgICAgLy8gUERGVmlld0NvbnRyb2xsZXIgZG9lcyBhbiBOU0JlZXAoKSwgYnV0IHRoYXQgc2Vl
bXMgaW5zdWZmaWNpZW50LgorICAgIGlmICghcGRmRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJu
IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UoKTsKKworICAgIHJldHVybiBDb3JlSVBDOjpEYXRhUmVm
ZXJlbmNlKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNm
RGF0YS5nZXQoKSkpOworfQorCit2b2lkIFBERlBsdWdpbjo6c2F2ZVRvUERGKCkKK3sKKyAgICBD
b3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2UgPSBwZGZEb2N1bWVudERhdGFSZWZl
cmVuY2UoKTsKKworICAgIGlmIChkYXRhUmVmZXJlbmNlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOwogCiAgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihzdWdnZXN0ZWRGaWxlbmFtZSgpLCB3
ZWJGcmFtZSgpLT51cmwoKSwgZGF0YVJlZmVyZW5jZSkpOwogfQogCit2b2lkIFBERlBsdWdpbjo6
b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpCit7CisgICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5j
ZSBkYXRhUmVmZXJlbmNlID0gcGRmRG9jdW1lbnREYXRhUmVmZXJlbmNlKCk7CisKKyAgICBpZiAo
ZGF0YVJlZmVyZW5jZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV90
ZW1wb3JhcnlQREZJRCkKKyAgICAgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpTYXZlUERGVG9GaWxlSW5UZW1wb3JhcnlGb2xkZXIoc3VnZ2Vz
dGVkRmlsZW5hbWUoKSwgd2ViRnJhbWUoKS0+dXJsKCksIGRhdGFSZWZlcmVuY2UpLCBNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpTYXZlUERGVG9GaWxlSW5UZW1wb3JhcnlGb2xkZXI6OlJlcGx5KG1f
dGVtcG9yYXJ5UERGSUQpKTsKKworICAgIGlmICghbV90ZW1wb3JhcnlQREZJRCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6Ok9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKG1f
dGVtcG9yYXJ5UERGSUQpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAv
LyBFTkFCTEUoUERGS0lUX1BMVUdJTikK
</data>
<flag name="review"
          id="189679"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179534</attachid>
            <date>2012-12-14 14:22:33 -0800</date>
            <delta_ts>2012-12-14 16:12:24 -0800</delta_ts>
            <desc>patch</desc>
            <filename>open-in-preview.diff</filename>
            <type>text/plain</type>
            <size>25461</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiY2Y3ZmM2Li4yMGUxOTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTItMTItMTQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUERGUGx1Z2luOiBUaGUgIk9wZW4gaW4gUHJldmlldyIgSFVEIGJ1dHRvbiBzaG91
bGQgd29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAyNDQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjY5NTcyOT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgY3JlYXRlQ2Fub25pY2Fs
VVVJRFN0cmluZyBhbmQgVVVJRC5oLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDEyLTEyLTE0ICBZ
dXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IG9wdGlvbmFsIHBhcmFtZXRlcnMgb2YgcHJvdG9jb2wgY29tbWFuZHMgc2hvdWxkIGdv
IGFmdGVyIHJlcXVpcmVkIG9uZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggZjllYTU2Mi4uZWMw
OTUzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC02ODEsNiArNjgxLDcgQEAgX19aTjdXZWJD
b3JlMjVIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVyQzJFdgogX19aTjdXZWJDb3JlMjVJbW11dGFi
bGVTdHlsZVByb3BlcnR5U2V0RDFFdgogX19aTjdXZWJDb3JlMjVhZGRMYW5ndWFnZUNoYW5nZU9i
c2VydmVyRVB2UEZ2UzBfRQogX19aTjdXZWJDb3JlMjVjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVz
RU5TXzE3Vmlld3BvcnRBcmd1bWVudHNFaWlpZk5TXzdJbnRTaXplRQorX19aTjdXZWJDb3JlMjVj
cmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nRXYKIF9fWk43V2ViQ29yZTI1anNTdHJpbmdXaXRoQ2Fj
aGVTbG93Q2FzZUVQTjNKU0M5RXhlY1N0YXRlRVJOM1dURjdIYXNoTWFwSVBOUzNfMTBTdHJpbmdJ
bXBsRU5TMF80V2Vha0lOUzBfOEpTU3RyaW5nRUVFTlMzXzdQdHJIYXNoSVM2X0VFTlMzXzEwSGFz
aFRyYWl0c0lTNl9FRU5TQ19JUzlfRUVFRVM2XwogX19aTjdXZWJDb3JlMjZOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlcjZjcmVhdGVFUE5TXzVGcmFtZUVQTlNfMzJOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlckNsaWVudEVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RQogX19aTjdXZWJDb3JlMjZVc2Vy
VHlwaW5nR2VzdHVyZUluZGljYXRvcjI3cHJvY2Vzc2luZ1VzZXJUeXBpbmdHZXN0dXJlRXYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCAyNzBmNjE1Li43MGE1MTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04MTcsNyArODE3LDcgQEAKIAkJMkUzN0UwMDUxMkRC
QzVBNDAwQTZCMjMzIC8qIEpTRE9NVVJMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJFMzdFMDAzMTJEQkM1QTQwMEE2QjIzMyAvKiBKU0RPTVVSTC5j
cHAgKi87IH07CiAJCTJFMzdFMDA2MTJEQkM1QTQwMEE2QjIzMyAvKiBKU0RPTVVSTC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkUzN0UwMDQxMkRCQzVB
NDAwQTZCMjMzIC8qIEpTRE9NVVJMLmggKi87IH07CiAJCTJFM0JCRjA3MTE2MkRBMTEwMEI5NDA5
QSAvKiBVVUlELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJFM0JCRjA1MTE2MkRBMTEwMEI5NDA5QSAvKiBVVUlELmNwcCAqLzsgfTsKLQkJMkUzQkJG
MDgxMTYyREExMTAwQjk0MDlBIC8qIFVVSUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJFM0JCRjA2MTE2MkRBMTEwMEI5NDA5QSAvKiBVVUlELmggKi87
IH07CisJCTJFM0JCRjA4MTE2MkRBMTEwMEI5NDA5QSAvKiBVVUlELmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTNCQkYwNjExNjJEQTExMDBCOTQwOUEg
LyogVVVJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTJFM0JDMENBMTE3RDNFMDgwMEI5NDA5QSAvKiBKU0ZpbGVFcnJvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTNCQzBDODExN0QzRTA4MDBC
OTQwOUEgLyogSlNGaWxlRXJyb3IuY3BwICovOyB9OwogCQkyRTNCQzBDQjExN0QzRTA4MDBCOTQw
OUEgLyogSlNGaWxlRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFM0JDMEM5MTE3RDNFMDgwMEI5NDA5QSAvKiBKU0ZpbGVFcnJvci5oICovOyB9
OwogCQkyRTNCQzEwODExN0Q0Nzk4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTNCQzEwNjExN0Q0Nzk4MDBC
OTQwOUEgLyogRE9NRmlsZUVycm9yLmggKi87IH07CkBAIC0yMjU4NSw2ICsyMjU4NSw3IEBACiAJ
CQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkyRTNCQkYwODExNjJEQTExMDBCOTQwOUEgLyogVVVJ
RC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0NTZGMTkxNjc3RDc0RTAwNUVEREY5IC8qIERhdGFi
YXNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQzMTA1QkIxNjc1MEYxNjAwREIyRkI4
IC8qIE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUMzNzVEN0ZFMTY2Mzk1MTkw
MDYxODRBQiAvKiBUeXBlQWhlYWQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU3MTgsNyArMjU3MTks
NiBAQAogCQkJCUJDOEJGMTVBMTA1ODE0MTgwMEE0MEEwNyAvKiBVc2VyU3R5bGVTaGVldFR5cGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RGMzE3QzExRjhENjgzMDAzQzVCRjggLyogVXNlclR5
cGluZ0dlc3R1cmVJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTFGQUZCRjE5MTVBNUZB
NzQwMDA4M0EyMCAvKiBVVElVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTJFM0JCRjA4
MTE2MkRBMTEwMEI5NDA5QSAvKiBVVUlELmggaW4gSGVhZGVycyAqLywKIAkJCQlGNUExNTQyODEy
Nzk1MzREMDBEMEIwQzAgLyogVmFsaWRhdGlvbk1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUY1MTNBM0VBMTVGRjQ4NDEwMDE1MjZEQiAvKiBWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTVDNzcwOEQxMDBEM0M2QjAwNUJBMjY3IC8qIFZhbGlkaXR5U3Rh
dGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGZhZDE5YjkuLjg3OTc0YzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxMi0xMi0xNCAgVGltIEhvcnRvbiAgPHRpbW90aHlf
aG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBQREZQbHVnaW46IFRoZSAiT3BlbiBpbiBQcmV2
aWV3IiBIVUQgYnV0dG9uIHNob3VsZCB3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI0NDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNjk1
NzI5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudCB0aGUgIk9wZW4gaW4gUHJldmlldyIgYnV0dG9uIGZvciBQREZQbHVnaW4sIGJ5IG1v
dmluZyB0aGUgaW1wbGVtZW50YXRpb24gZnJvbSBQREZWaWV3Q29udHJvbGxlcgorICAgICAgICBv
bnRvIFdlYlBhZ2VQcm94eU1hYywgYW5kIHJldXNpbmcgaXQgaW4gUERGVmlld0NvbnRyb2xsZXIg
YW5kIFBERlBsdWdpbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BERlZpZXdDb250
cm9sbGVyLmg6CisgICAgICAgIChQREZWaWV3Q29udHJvbGxlcik6IFJlbW92ZSB1bm5lY2Vzc2Fy
eSBtZW1iZXJzIGluIGZhdm9yIG9mIGEgVVVJRCB0aGF0IGlkZW50aWZpZXMgb3VyIFBERiBvbiBk
aXNrLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BERlZpZXdDb250cm9sbGVyLm1tOgor
ICAgICAgICAoV2ViS2l0OjpQREZWaWV3Q29udHJvbGxlcjo6b3BlblBERkluRmluZGVyKTogTW92
ZSBQREZWaWV3Q29udHJvbGxlcidzIGltcGxlbWVudGF0aW9uIG9mIG9wZW5QREZJbkZpbmRlcgor
ICAgICAgICBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgdG8gV2ViUGFnZVByb3h5TWFjLiBUaGlzIHdp
bGwgYWxsb3cgaXQgdG8gYmUgc2hhcmVkIHdpdGggUERGUGx1Z2luLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKFdlYlBhZ2VQcm94eSk6IEFkZCBzYXZlUERG
VG9GaWxlSW5UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uLAorICAg
ICAgICBzYXZlUERGVG9GaWxlSW5UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxp
Y2F0aW9uUmF3LCBhbmQgb3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGlj
YXRpb24uCisgICAgICAgIEFkZCBtX3RlbXBvcmFyeVBERkZpbGVzLCB3aGljaCBpcyB1c2VkIHRv
IGtlZXAgdHJhY2sgb2YgdGhlIGZpbGVuYW1lcyBvZiBQREZzIHRoYXQgd2UndmUgc2F2ZWQgdG8g
ZGlzay4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAg
ICAgICBBZGQgU2F2ZVBERlRvRmlsZUluVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVB
cHBsaWNhdGlvbiBhbmQgT3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGlj
YXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OnRlbXBvcmFyeVBERkRpcmVjdG9yeVBhdGgpOiBDb3BpZWQgZnJvbSBQREZW
aWV3Q29udHJvbGxlci4gQ29uc3RydWN0IHRoZSBwYXRoIHRvIGEKKyAgICAgICAgV2ViS2l0UERG
cyB0ZW1wb3JhcnkgZGlyZWN0b3J5IGludG8gd2hpY2ggUERGcyB0byBiZSBvcGVuZWQgd2l0aCBh
IG5hdGl2ZSBhcHBsaWNhdGlvbiBhcmUgZG93bmxvYWRlZC4KKyAgICAgICAgKFdlYktpdDo6cGF0
aFRvUERGT25EaXNrKTogQ29waWVkIGZyb20gUERGVmlld0NvbnRyb2xsZXIuIENvbWJpbmUgdGVt
cG9yYXJ5UERGRGlyZWN0b3J5UGF0aAorICAgICAgICB3aXRoIHRoZSBzdWdnZXN0ZWQgZmlsZW5h
bWUgZm9yIHRoZSBnaXZlbiBQREYsIGNyZWF0aW5nIGEgbmV3IGZpbGVuYW1lIGlmIHRoZSBmaWxl
IGFscmVhZHkgZXhpc3RzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNhdmVQREZU
b1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb25SYXcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5X
aXRoTmF0aXZlQXBwbGljYXRpb24pOgorICAgICAgICBTYXZlIHRoZSBnaXZlbiBQREYgZGF0YSB0
byBhIHRlbXBvcmFyeSBmaWxlLCBnaXZlbiB0aGUgc3VnZ2VzdGVkIGZpbGVuYW1lLiBUaGlzIGlu
c2VydHMgdGhlCisgICAgICAgIGZpbGVuYW1lIHVzZWQgaW50byBtX3RlbXBvcmFyeVBERkZpbGVz
LCB3aGVyZSBpdCBjYW4gbGF0ZXIgYmUgcmV0cmlldmVkIGJ5IFVVSUQgd2hlbiBhc2tlZAorICAg
ICAgICB0byBvcGVuIHRoZSBQREYgYWdhaW4gaW4gYSBuYXRpdmUgYXBwbGljYXRpb24uIFRoZW4s
IG9wZW4gaXQgd2l0aCBOU1dvcmtzcGFjZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbik6CisgICAg
ICAgIE9wZW4gdGhlIHByZXZpb3VzbHkgc2F2ZWQgUERGIGZpbGUgd2l0aCBOU1dvcmtzcGFjZSwg
cmVmZXJlbmNlZCBieSBVVUlELgorICAgICAgICBXZSBpZGVudGlmeSB0aGUgZmlsZSBieSBVVUlE
IGluc3RlYWQgb2YgbmFtZSBzbyB0aGF0IG9ubHkgdGhlIFVJUHJvY2VzcyBuZWVkcworICAgICAg
ICB0byBrZWVwIHRyYWNrIG9mIHRoZSBhY3R1YWwgZmlsZW5hbWUsIGFuZCBzbyB0aGF0IHRoZSBX
ZWJQcm9jZXNzCisgICAgICAgIGNhbm5vdCBoYW5kIGFuIGFyYml0cmFyeSBmaWxlbmFtZSBiYWNr
IHRvIHRoZSBVSVByb2Nlc3MgdG8gb3Blbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
UERGL1BERlBsdWdpbi5oOgorICAgICAgICAoUERGUGx1Z2luKTogQWRkIG9wZW5XaXRoTmF0aXZl
QXBwbGljYXRpb24gYW5kIHN0b3JhZ2UgZm9yIHRoZSBVVUlEIHRoYXQgaWRlbnRpZmllcyBvdXIg
UERGIG9uIGRpc2suCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
bW06CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgb3BlbldpdGhQcmV2
aWV3XSk6IEZvcndhcmQgb3BlbldpdGhQcmV2aWV3IHRvIFBERlBsdWdpbidzIG9wZW5XaXRoTmF0
aXZlQXBwbGljYXRpb24uCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2F2ZVRvUERGKToK
KyAgICAgICAgSGFuZCByYXcgZGF0YSB0byBXZWJQYWdlIGFuZCBoYXZlIGl0IHNlbmQgdGhlIG1l
c3NhZ2UgdG8gV2ViUGFnZVByb3h5IGluc3RlYWQgb2YgdXNpbmcgSVBDIHR5cGVzIGluIFBERlBs
dWdpbi4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0
aW9uKToKKyAgICAgICAgQXNrIFdlYlBhZ2UgdG8gc2F2ZSB0aGUgY3VycmVudCBQREYgdG8gYSB0
ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCBvcGVuIGl0IHdpdGggYSBuYXRpdmUgYXBwbGljYXRpb24u
CisgICAgICAgIElmIHdlJ3ZlIGFscmVhZHkgZG93bmxvYWRlZCB0aGUgUERGIChhbmQgaGF2ZSBh
IG5vbi1udWxsIG1fdGVtcG9yYXJ5UERGVVVJRCksCisgICAgICAgIHdlIGNhbiBqdXN0IG9wZW4g
dGhlIGV4aXN0aW5nIGZpbGUuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNG
b2xkZXIpOiBIYW5kIHRoZSBQREYgZGF0YSB0byBXZWJQYWdlUHJveHkgdG8gc2F2ZS4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhO
YXRpdmVBcHBsaWNhdGlvbik6IEhhbmQgdGhlIFBERiBkYXRhIHRvIFdlYlBhZ2VQcm94eSB0byBz
YXZlIGFuZCBvcGVuLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6Cisg
ICAgICAgIChXZWJQYWdlKTogQWRkIHNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlciBhbmQg
c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbi4KKwog
MjAxMi0xMi0xNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTI4ODA3NTA+IFJHUkVTU0lPTjogQ3Jhc2ggd2hlbiBlbXB0eWlu
ZyBjb29raWUgamFyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9QREZWaWV3Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
UERGVmlld0NvbnRyb2xsZXIuaAppbmRleCA0NmFhZjg0Li4yNjVkN2Q2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QREZWaWV3Q29udHJvbGxlci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BERlZpZXdDb250cm9sbGVyLmgKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogQGNsYXNzIFBERlZpZXc7CiBAY2xhc3MgV0tWaWV3OwpA
QCAtNzksOCArODAsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDbGFzcyBwZGZEb2N1bWVudENs
YXNzKCk7CiAgICAgc3RhdGljIE5TQnVuZGxlKiBwZGZLaXRCdW5kbGUoKTsKIAotICAgIE5TU3Ry
aW5nICpwYXRoVG9QREZPbkRpc2soKTsKLQogICAgIFdLVmlldyogbV93a1ZpZXc7CiAKICAgICBS
ZXRhaW5QdHI8V0tQREZWaWV3PiBtX3drUERGVmlldzsKQEAgLTg5LDggKzg4LDcgQEAgcHJpdmF0
ZToKICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1fc3VnZ2VzdGVkRmlsZW5hbWU7CiAgICAgUmV0
YWluUHRyPENGRGF0YVJlZj4gbV9wZGZEYXRhOwogCi0gICAgUmV0YWluUHRyPE5TU3RyaW5nPiBt
X3BhdGhUb1BERk9uRGlzazsKLSAgICBib29sIG1faGFzV3JpdHRlblBERlRvRGlzazsKKyAgICBT
dHJpbmcgbV90ZW1wb3JhcnlQREZVVUlEOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QREZWaWV3Q29udHJv
bGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BERlZpZXdDb250cm9s
bGVyLm1tCmluZGV4IGYyNjdlOTkuLjU2MzJlYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BERlZpZXdDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BERlZpZXdDb250cm9sbGVyLm1tCkBAIC0zNiw2ICszNiw3
IEBACiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlcy5oIgogI2ltcG9ydCA8UERGS2l0L1BERktpdC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1VVSUQuaD4KICNpbXBvcnQgPHd0Zi9PYmpjUnVudGltZUV4dHJhcy5oPgogI2ltcG9ydCA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00MDMs
NyArNDA0LDYgQEAgUERGVmlld0NvbnRyb2xsZXI6OlBERlZpZXdDb250cm9sbGVyKFdLVmlldyAq
d2tWaWV3KQogICAgIDogbV93a1ZpZXcod2tWaWV3KQogICAgICwgbV93a1BERlZpZXcoQWRvcHRO
UywgW1tXS1BERlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W21fd2tWaWV3IGJvdW5kc10gUERG
Vmlld0NvbnRyb2xsZXI6dGhpc10pCiAgICAgLCBtX3BkZlZpZXcoW21fd2tQREZWaWV3LmdldCgp
IHBkZlZpZXddKQotICAgICwgbV9oYXNXcml0dGVuUERGVG9EaXNrKGZhbHNlKQogewogICAgIFtt
X3drVmlldyBhZGRTdWJ2aWV3Om1fd2tQREZWaWV3LmdldCgpXTsKIH0KQEAgLTU3NiwyMiArNTc2
LDE0IEBAIHZvaWQgUERGVmlld0NvbnRyb2xsZXI6Om9wZW5QREZJbkZpbmRlcigpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBOU1N0cmluZyAqcGF0aCA9IHBhdGhUb1BERk9uRGlzaygp
OwotICAgIGlmICghcGF0aCkKKyAgICBpZiAoIW1fdGVtcG9yYXJ5UERGVVVJRCkgeworICAgICAg
ICBBU1NFUlQobV9wZGZEYXRhKTsKKyAgICAgICAgbV90ZW1wb3JhcnlQREZVVUlEID0gV2ViQ29y
ZTo6Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgICAgICBwYWdlKCktPnNhdmVQREZU
b1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb25SYXcobV9zdWdnZXN0
ZWRGaWxlbmFtZS5nZXQoKSwgcGFnZSgpLT5tYWluRnJhbWUoKS0+dXJsKCksIENGRGF0YUdldEJ5
dGVQdHIobV9wZGZEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKG1fcGRmRGF0YS5nZXQoKSks
IG1fdGVtcG9yYXJ5UERGVVVJRCk7CiAgICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9oYXNX
cml0dGVuUERGVG9EaXNrKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIFBERiBmaWxlIHdpdGggdGhl
IG1pbmltYWwgcGVybWlzc2lvbnMgKG9ubHkgYWNjZXNzaWJsZSB0byB0aGUgY3VycmVudCB1c2Vy
LCBzZWUgNDE0NTcxNCkuCi0gICAgICAgIFJldGFpblB0cjxOU051bWJlcj4gcGVybWlzc2lvbnMo
QWRvcHROUywgW1tOU051bWJlciBhbGxvY10gaW5pdFdpdGhJbnQ6U19JUlVTUl0pOwotICAgICAg
ICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBmaWxlQXR0cmlidXRlcyhBZG9wdE5TLCBbW05TRGlj
dGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czpwZXJtaXNzaW9ucy5nZXQoKSwg
TlNGaWxlUG9zaXhQZXJtaXNzaW9ucywgbmlsXSk7Ci0KLSAgICAgICAgaWYgKCFbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZUZpbGVBdFBhdGg6cGF0aCBjb250ZW50czooTlNE
YXRhICopbV9wZGZEYXRhLmdldCgpIGF0dHJpYnV0ZXM6ZmlsZUF0dHJpYnV0ZXMuZ2V0KCldKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1faGFzV3JpdHRlblBERlRvRGlzayA9IHRy
dWU7CiAgICAgfQogCi0gICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5GaWxl
OnBhdGhdOworICAgIHBhZ2UoKS0+b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZl
QXBwbGljYXRpb24obV90ZW1wb3JhcnlQREZVVUlEKTsKIH0KIAogc3RhdGljIHZvaWQgcmVsZWFz
ZUNGRGF0YSh1bnNpZ25lZCBjaGFyKiwgY29uc3Qgdm9pZCogZGF0YSkKQEAgLTYyMCw1MCArNjEy
LDYgQEAgdm9pZCBQREZWaWV3Q29udHJvbGxlcjo6c2F2ZVBERlRvRG93bmxvYWRzRm9sZGVyKCkK
ICAgICBwYWdlKCktPnNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIobV9zdWdnZXN0ZWRG
aWxlbmFtZS5nZXQoKSwgcGFnZSgpLT5tYWluRnJhbWUoKS0+bWltZVR5cGUoKSwgcGFnZSgpLT5t
YWluRnJhbWUoKS0+dXJsKCksIGRhdGEuZ2V0KCkpOwogfQogCi1zdGF0aWMgTlNTdHJpbmcgKnRl
bXBvcmFyeVBERkRpcmVjdG9yeVBhdGgoKQotewotICAgIHN0YXRpYyBOU1N0cmluZyAqdGVtcG9y
YXJ5UERGRGlyZWN0b3J5UGF0aDsKLQotICAgIGlmICghdGVtcG9yYXJ5UERGRGlyZWN0b3J5UGF0
aCkgewotICAgICAgICBOU1N0cmluZyAqdGVtcG9yYXJ5RGlyZWN0b3J5VGVtcGxhdGUgPSBbTlNU
ZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJXZWJL
aXRQREZzLVhYWFhYWCJdOwotICAgICAgICBDU3RyaW5nIHRlbXBsYXRlUmVwcmVzZW50YXRpb24g
PSBbdGVtcG9yYXJ5RGlyZWN0b3J5VGVtcGxhdGUgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXTsK
LQotICAgICAgICBpZiAobWtkdGVtcCh0ZW1wbGF0ZVJlcHJlc2VudGF0aW9uLm11dGFibGVEYXRh
KCkpKQotICAgICAgICAgICAgdGVtcG9yYXJ5UERGRGlyZWN0b3J5UGF0aCA9IFtbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIHN0cmluZ1dpdGhGaWxlU3lzdGVtUmVwcmVzZW50YXRpb246
dGVtcGxhdGVSZXByZXNlbnRhdGlvbi5kYXRhKCkgbGVuZ3RoOnRlbXBsYXRlUmVwcmVzZW50YXRp
b24ubGVuZ3RoKCldIGNvcHldOwotICAgIH0KLQotICAgIHJldHVybiB0ZW1wb3JhcnlQREZEaXJl
Y3RvcnlQYXRoOwotfQotCi1OU1N0cmluZyAqUERGVmlld0NvbnRyb2xsZXI6OnBhdGhUb1BERk9u
RGlzaygpCi17Ci0gICAgaWYgKG1fcGF0aFRvUERGT25EaXNrKQotICAgICAgICByZXR1cm4gbV9w
YXRoVG9QREZPbkRpc2suZ2V0KCk7Ci0KLSAgICBOU1N0cmluZyAqcGRmRGlyZWN0b3J5UGF0aCA9
IHRlbXBvcmFyeVBERkRpcmVjdG9yeVBhdGgoKTsKLSAgICBpZiAoIXBkZkRpcmVjdG9yeVBhdGgp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBOU1N0cmluZyAqcGF0aCA9IFtwZGZEaXJlY3Rv
cnlQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDptX3N1Z2dlc3RlZEZpbGVuYW1l
LmdldCgpXTsKLQotICAgIE5TRmlsZU1hbmFnZXIgKmZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFn
ZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIGlmIChbZmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0
aDpwYXRoXSkgewotICAgICAgICBOU1N0cmluZyAqcGF0aFRlbXBsYXRlUHJlZml4ID0gW3BkZkRp
cmVjdG9yeVBhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiWFhYWFhYLSJdOwot
ICAgICAgICBOU1N0cmluZyAqcGF0aFRlbXBsYXRlID0gW3BhdGhUZW1wbGF0ZVByZWZpeCBzdHJp
bmdCeUFwcGVuZGluZ1N0cmluZzptX3N1Z2dlc3RlZEZpbGVuYW1lLmdldCgpXTsKLSAgICAgICAg
Q1N0cmluZyBwYXRoVGVtcGxhdGVSZXByZXNlbnRhdGlvbiA9IFtwYXRoVGVtcGxhdGUgZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uXTsKLQotICAgICAgICBpbnQgZmQgPSBta3N0ZW1wcyhwYXRoVGVt
cGxhdGVSZXByZXNlbnRhdGlvbi5tdXRhYmxlRGF0YSgpLCBwYXRoVGVtcGxhdGVSZXByZXNlbnRh
dGlvbi5sZW5ndGgoKSAtIHN0cmxlbihbcGF0aFRlbXBsYXRlUHJlZml4IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbl0pICsgMSk7Ci0gICAgICAgIGlmIChmZCA8IDApCi0gICAgICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcGF0aCA9IFtmaWxlTWFuYWdl
ciBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOnBhdGhUZW1wbGF0ZVJlcHJlc2Vu
dGF0aW9uLmRhdGEoKSBsZW5ndGg6cGF0aFRlbXBsYXRlUmVwcmVzZW50YXRpb24ubGVuZ3RoKCld
OwotICAgIH0KLQotICAgIG1fcGF0aFRvUERGT25EaXNrLmFkb3B0TlMoW3BhdGggY29weV0pOwot
ICAgIHJldHVybiBwYXRoOwotfQotCiB2b2lkIFBERlZpZXdDb250cm9sbGVyOjpsaW5rQ2xpY2tl
ZChjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBOU0V2ZW50KiBuc0V2ZW50ID0gW05TQXBwIGN1
cnJlbnRFdmVudF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXgg
M2EzMTU2OS4uZDM0ODc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aApAQCAtNzI1LDYgKzcyNSwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNhdmVEYXRhVG9GaWxl
SW5Eb3dubG9hZHNGb2xkZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hdGluZ1VSTFN0cmluZywgV2Vi
RGF0YSopOwogICAgIHZvaWQgc2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYXRpbmdVUkxTdHJp
bmcsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgdm9pZCBzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0
aW9uUmF3KGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgb3Jp
Z2luYXRpbmdVUkxTdHJpbmcsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6
ZSwgY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKKyAgICB2b2lkIHNhdmVQREZUb1RlbXBvcmFyeUZv
bGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlbmFtZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hdGluZ1VSTFN0cmluZywgY29uc3QgQ29yZUlQ
Qzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCk7CisgICAgdm9pZCBvcGVu
UERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcm
IHBkZlVVSUQpOworI2VuZGlmCiAKICAgICB2b2lkIGxpbmtDbGlja2VkKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKIApAQCAtMTI1Niw2ICsxMjYxLDEwIEBAIHByaXZhdGU6
CiAjaWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpCiAgICAgV2ViQ29yZTo6UGFnZVZpc2li
aWxpdHlTdGF0ZSBtX3Zpc2liaWxpdHlTdGF0ZTsKICNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fdGVtcG9yYXJ5UERGRmlsZXM7CisjZW5k
aWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggMDg0ODI2My4uNDc0MjFkNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCkBAIC0zMzksNCArMzM5LDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNlbmRp
ZgogCiAgICAgU2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKFdURjo6U3RyaW5nIHN1Z2dl
c3RlZEZpbGVuYW1lLCBXVEY6OlN0cmluZyBvcmlnaW5hdGluZ1VSTFN0cmluZywgQ29yZUlQQzo6
RGF0YVJlZmVyZW5jZSBkYXRhKQorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFNhdmVQREZUb1Rl
bXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oV1RGOjpTdHJpbmcgc3Vn
Z2VzdGVkRmlsZW5hbWUsIFdURjo6U3RyaW5nIG9yaWdpbmF0aW5nVVJMU3RyaW5nLCBDb3JlSVBD
OjpEYXRhUmVmZXJlbmNlIGRhdGEsIFdURjo6U3RyaW5nIHBkZlVVSUQpCisgICAgT3BlblBERkZy
b21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24oV1RGOjpTdHJpbmcgcGRmVVVJ
RCkKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9X
ZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQ
cm94eU1hYy5tbQppbmRleCA4NDliYTIwLi40NmVlOWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQpAQCAtNDg0LDQgKzQ4NCwxMDIgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoY29u
c3QgR3JhcGhpY3NMYXllciogcm9vdEwKICAgICBtX3BhZ2VDbGllbnQtPnNldEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdSb290TGF5ZXIocm9vdExheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwogfQogCitz
dGF0aWMgTlNTdHJpbmcgKnRlbXBvcmFyeVBERkRpcmVjdG9yeVBhdGgoKQoreworICAgIHN0YXRp
YyBOU1N0cmluZyAqdGVtcG9yYXJ5UERGRGlyZWN0b3J5UGF0aDsKKworICAgIGlmICghdGVtcG9y
YXJ5UERGRGlyZWN0b3J5UGF0aCkgeworICAgICAgICBOU1N0cmluZyAqdGVtcG9yYXJ5RGlyZWN0
b3J5VGVtcGxhdGUgPSBbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1Bh
dGhDb21wb25lbnQ6QCJXZWJLaXRQREZzLVhYWFhYWCJdOworICAgICAgICBDU3RyaW5nIHRlbXBs
YXRlUmVwcmVzZW50YXRpb24gPSBbdGVtcG9yYXJ5RGlyZWN0b3J5VGVtcGxhdGUgZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uXTsKKworICAgICAgICBpZiAobWtkdGVtcCh0ZW1wbGF0ZVJlcHJlc2Vu
dGF0aW9uLm11dGFibGVEYXRhKCkpKQorICAgICAgICAgICAgdGVtcG9yYXJ5UERGRGlyZWN0b3J5
UGF0aCA9IFtbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHN0cmluZ1dpdGhGaWxlU3lz
dGVtUmVwcmVzZW50YXRpb246dGVtcGxhdGVSZXByZXNlbnRhdGlvbi5kYXRhKCkgbGVuZ3RoOnRl
bXBsYXRlUmVwcmVzZW50YXRpb24ubGVuZ3RoKCldIGNvcHldOworICAgIH0KKworICAgIHJldHVy
biB0ZW1wb3JhcnlQREZEaXJlY3RvcnlQYXRoOworfQorCitzdGF0aWMgTlNTdHJpbmcgKnBhdGhU
b1BERk9uRGlzayhjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQoreworICAgIE5TU3Ry
aW5nICpwZGZEaXJlY3RvcnlQYXRoID0gdGVtcG9yYXJ5UERGRGlyZWN0b3J5UGF0aCgpOworICAg
IGlmICghcGRmRGlyZWN0b3J5UGF0aCkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBj
cmVhdGUgdGVtcG9yYXJ5IFBERiBkb3dubG9hZCBkaXJlY3RvcnkuIik7CisgICAgICAgIHJldHVy
biBuaWw7CisgICAgfQorCisgICAgTlNTdHJpbmcgKnBhdGggPSBbcGRmRGlyZWN0b3J5UGF0aCBz
dHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6c3VnZ2VzdGVkRmlsZW5hbWVdOworCisgICAg
TlNGaWxlTWFuYWdlciAqZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl07CisgICAgaWYgKFtmaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOnBhdGhdKSB7CisgICAg
ICAgIE5TU3RyaW5nICpwYXRoVGVtcGxhdGVQcmVmaXggPSBbcGRmRGlyZWN0b3J5UGF0aCBzdHJp
bmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJYWFhYWFgtIl07CisgICAgICAgIE5TU3RyaW5n
ICpwYXRoVGVtcGxhdGUgPSBbcGF0aFRlbXBsYXRlUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nU3Ry
aW5nOnN1Z2dlc3RlZEZpbGVuYW1lXTsKKyAgICAgICAgQ1N0cmluZyBwYXRoVGVtcGxhdGVSZXBy
ZXNlbnRhdGlvbiA9IFtwYXRoVGVtcGxhdGUgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXTsKKwor
ICAgICAgICBpbnQgZmQgPSBta3N0ZW1wcyhwYXRoVGVtcGxhdGVSZXByZXNlbnRhdGlvbi5tdXRh
YmxlRGF0YSgpLCBwYXRoVGVtcGxhdGVSZXByZXNlbnRhdGlvbi5sZW5ndGgoKSAtIHN0cmxlbihb
cGF0aFRlbXBsYXRlUHJlZml4IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbl0pICsgMSk7CisgICAg
ICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IGNyZWF0
ZSBQREYgZmlsZSBpbiB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSAoJXMpLiIsIHN1Z2dlc3RlZEZp
bGVuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAg
fQorCisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcGF0aCA9IFtmaWxlTWFuYWdlciBzdHJp
bmdXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOnBhdGhUZW1wbGF0ZVJlcHJlc2VudGF0aW9u
LmRhdGEoKSBsZW5ndGg6cGF0aFRlbXBsYXRlUmVwcmVzZW50YXRpb24ubGVuZ3RoKCldOworICAg
IH0KKworICAgIHJldHVybiBwYXRoOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRv
VGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvblJhdyhjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIG9yaWdpbmF0aW5nVVJMU3RyaW5n
LCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYg
cGRmVVVJRCkKK3sKKyAgICAvLyBGSVhNRTogV3JpdGUgb3JpZ2luYXRpbmdVUkxTdHJpbmcgdG8g
dGhlIGZpbGUncyBvcmlnaW5hdGluZyBVUkwgbWV0YWRhdGEgKHBlcmhhcHMgV0tTZXRNZXRhZGF0
YVVSTD8pLgorICAgIFVOVVNFRF9QQVJBTShvcmlnaW5hdGluZ1VSTFN0cmluZyk7CisKKyAgICBp
ZiAoIXN1Z2dlc3RlZEZpbGVuYW1lLmVuZHNXaXRoKCIucGRmIiwgZmFsc2UpKSB7CisgICAgICAg
IFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNhdmUgZmlsZSB3aXRob3V0IC5wZGYgZXh0ZW5zaW9uIHRv
IHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFzaXplKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiQ2Fubm90IHNhdmUgZW1wdHkg
UERGIGZpbGUgdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBOU1N0cmluZyAqbnNQYXRoID0gcGF0aFRvUERGT25EaXNrKHN1Z2dlc3Rl
ZEZpbGVuYW1lKTsKKworICAgIGlmICghbnNQYXRoKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZXRhaW5QdHI8TlNOdW1iZXI+IHBlcm1pc3Npb25zID0gYWRvcHROUyhbW05TTnVtYmVyIGFsbG9j
XSBpbml0V2l0aEludDpTX0lSVVNSXSk7CisgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZmls
ZUF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVj
dHNBbmRLZXlzOnBlcm1pc3Npb25zLmdldCgpLCBOU0ZpbGVQb3NpeFBlcm1pc3Npb25zLCBuaWxd
KTsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBuc0RhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9j
XSBpbml0V2l0aEJ5dGVzTm9Db3B5Oih2b2lkKilkYXRhIGxlbmd0aDpzaXplIGZyZWVXaGVuRG9u
ZTpOT10pOworCisgICAgaWYgKCFbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNyZWF0
ZUZpbGVBdFBhdGg6bnNQYXRoIGNvbnRlbnRzOm5zRGF0YS5nZXQoKSBhdHRyaWJ1dGVzOmZpbGVB
dHRyaWJ1dGVzLmdldCgpXSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBjcmVhdGUg
UERGIGZpbGUgaW4gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgKCVzKS4iLCBzdWdnZXN0ZWRGaWxl
bmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fdGVt
cG9yYXJ5UERGRmlsZXMuYWRkKHBkZlVVSUQsIG5zUGF0aCk7CisKKyAgICBbW05TV29ya3NwYWNl
IHNoYXJlZFdvcmtzcGFjZV0gb3BlbkZpbGU6bnNQYXRoXTsKK30KKwordm9pZCBXZWJQYWdlUHJv
eHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24o
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hdGlu
Z1VSTFN0cmluZywgY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3Ry
aW5nJiBwZGZVVUlEKQoreworICAgIGlmIChkYXRhLmlzRW1wdHkoKSkgeworICAgICAgICBXVEZM
b2dBbHdheXMoIkNhbm5vdCBzYXZlIGVtcHR5IFBERiBmaWxlIHRvIHRoZSB0ZW1wb3JhcnkgZGly
ZWN0b3J5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2F2ZVBERlRvVGVtcG9y
YXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvblJhdyhzdWdnZXN0ZWRGaWxlbmFt
ZSwgb3JpZ2luYXRpbmdVUkxTdHJpbmcsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgcGRmVVVJ
RCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldp
dGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHBkZlVVSUQpCit7CisgICAgU3RyaW5n
IHBkZkZpbGVuYW1lID0gbV90ZW1wb3JhcnlQREZGaWxlcy5nZXQocGRmVVVJRCk7CisKKyAgICBp
ZiAoIXBkZkZpbGVuYW1lLmVuZHNXaXRoKCIucGRmIiwgZmFsc2UpKQorICAgICAgICByZXR1cm47
CisKKyAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gb3BlbkZpbGU6cGRmRmlsZW5h
bWVdOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCmluZGV4IDRlN2M5MmIuLjYxZmFkMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW4uaApAQCAtNDMsNiArNDMsMTAgQEAgT0JKQ19DTEFTUyBQREZBbm5vdGF0aW9uOwogT0JKQ19D
TEFTUyBQREZMYXllckNvbnRyb2xsZXI7CiBPQkpDX0NMQVNTIFdLUERGTGF5ZXJDb250cm9sbGVy
RGVsZWdhdGU7CiAKK25hbWVzcGFjZSBDb3JlSVBDIHsKK2NsYXNzIERhdGFSZWZlcmVuY2U7Cit9
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEVsZW1lbnQ7CiBzdHJ1Y3QgUGx1Z2luSW5m
bzsKQEAgLTY3LDYgKzcxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGlja2VkTGluayhOU1VS
TCAqKTsKICAgICB2b2lkIHNhdmVUb1BERigpOworICAgIHZvaWQgb3BlbldpdGhOYXRpdmVBcHBs
aWNhdGlvbigpOwogICAgIHZvaWQgd3JpdGVJdGVtc1RvUGFzdGVib2FyZChOU0FycmF5ICppdGVt
cywgTlNBcnJheSAqdHlwZXMpOwogICAgIHZvaWQgc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVk
U3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqLCBDR1BvaW50KTsKIApAQCAtMTIyLDYgKzEyNyw4
IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIG1fcm9vdFZpZXdUb1Bs
dWdpblRyYW5zZm9ybTsKICAgICBXZWJNb3VzZUV2ZW50IG1fbGFzdE1vdXNlRXZlbnQ7CiAgICAg
V2ViQ29yZTo6SW50UG9pbnQgbV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXM7
CisKKyAgICBTdHJpbmcgbV90ZW1wb3JhcnlQREZVVUlEOwogICAgIAogICAgIFJldGFpblB0cjxX
S1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlPiBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRl
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4ubW0KaW5kZXggYTJiOWZlMC4uNzIxNjViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KQEAgLTY5LDYgKzY5LDcgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KICNpbXBvcnQgPFdlYkNv
cmUvU2Nyb2xsQW5pbWF0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvVVVJRC5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNl
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMTc0LDcgKzE3NSw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyKiBhbm5vdGF0aW9uU3R5bGUgPQogCiAtICh2b2lkKW9wZW5XaXRoUHJldmll
dwogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgX3BkZlBsdWdpbi0+b3BlbldpdGhO
YXRpdmVBcHBsaWNhdGlvbigpOwogfQogCiAtICh2b2lkKXNhdmVUb1BERgpAQCAtNzYzLDExICs3
NjQsMzMgQEAgdm9pZCBQREZQbHVnaW46Om5vdGlmeUNvbnRlbnRTY2FsZUZhY3RvckNoYW5nZWQo
Q0dGbG9hdCBzY2FsZUZhY3RvcikKIAogdm9pZCBQREZQbHVnaW46OnNhdmVUb1BERigpCiB7Cisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBub3RpZnkgdGhlIHVzZXIgdGhhdCB0aGV5
IGNhbid0IHNhdmUgYmVmb3JlIHRoZSBkb2N1bWVudCBpcyBmaW5pc2hlZCBsb2FkaW5nLgorICAg
IC8vIFBERlZpZXdDb250cm9sbGVyIGRvZXMgYW4gTlNCZWVwKCksIGJ1dCB0aGF0IHNlZW1zIGlu
c3VmZmljaWVudC4KKyAgICBpZiAoIXBkZkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBjZkRhdGEgPSBkYXRhKCk7CisgICAgd2Vi
RnJhbWUoKS0+cGFnZSgpLT5zYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoc3VnZ2VzdGVk
RmlsZW5hbWUoKSwgd2ViRnJhbWUoKS0+dXJsKCksIENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhLmdl
dCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YS5nZXQoKSkpOworfQogCi0gICAgQ29yZUlQQzo6
RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhLmdldCgp
KSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YS5nZXQoKSkpOwordm9pZCBQREZQbHVnaW46Om9wZW5X
aXRoTmF0aXZlQXBwbGljYXRpb24oKQoreworICAgIGlmICghbV90ZW1wb3JhcnlQREZVVUlEKSB7
CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgbm90aWZ5IHRoZSB1c2VyIHRo
YXQgdGhleSBjYW4ndCBzYXZlIGJlZm9yZSB0aGUgZG9jdW1lbnQgaXMgZmluaXNoZWQgbG9hZGlu
Zy4KKyAgICAgICAgLy8gUERGVmlld0NvbnRyb2xsZXIgZG9lcyBhbiBOU0JlZXAoKSwgYnV0IHRo
YXQgc2VlbXMgaW5zdWZmaWNpZW50LgorICAgICAgICBpZiAoIXBkZkRvY3VtZW50KCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGNm
RGF0YSA9IGRhdGEoKTsKKworICAgICAgICBtX3RlbXBvcmFyeVBERlVVSUQgPSBXZWJDb3JlOjpj
cmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CisgICAgICAgIEFTU0VSVChtX3RlbXBvcmFyeVBE
RlVVSUQpOworCisgICAgICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2F2ZVBERlRvVGVtcG9yYXJ5
Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihzdWdnZXN0ZWRGaWxlbmFtZSgpLCB3
ZWJGcmFtZSgpLT51cmwoKSwgQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEuZ2V0KCkpLCBDRkRhdGFH
ZXRMZW5ndGgoY2ZEYXRhLmdldCgpKSwgbV90ZW1wb3JhcnlQREZVVUlEKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAotICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoc3VnZ2VzdGVkRmlsZW5h
bWUoKSwgd2ViRnJhbWUoKS0+dXJsKCksIGRhdGFSZWZlcmVuY2UpKTsKKyAgICB3ZWJGcmFtZSgp
LT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6T3BlblBERkZyb21UZW1wb3Jh
cnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24obV90ZW1wb3JhcnlQREZVVUlEKSk7CiB9CiAK
IHZvaWQgUERGUGx1Z2luOjp3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TQXJyYXkgKml0ZW1zLCBO
U0FycmF5ICp0eXBlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAppbmRleCA3ZmNlY2FiLi5jMjUzMGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zMzY5LDYgKzMzNjksMTggQEAgdm9pZCBX
ZWJQYWdlOjpkcmF3UGFnZXNGb3JQcmludGluZyh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmlu
dEluZm8mIHByaW50SW5mbywKIH0KICNlbmRpZgogCit2b2lkIFdlYlBhZ2U6OnNhdmVQREZUb0Zp
bGVJbkRvd25sb2Fkc0ZvbGRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25z
dCBTdHJpbmcmIG9yaWdpbmF0aW5nVVJMU3RyaW5nLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNp
Z25lZCBsb25nIHNpemUpCit7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTYXZl
UERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoc3VnZ2VzdGVkRmlsZW5hbWUsIG9yaWdpbmF0aW5n
VVJMU3RyaW5nLCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlKGRhdGEsIHNpemUpKSk7Cit9CisKKyNp
ZiBQTEFURk9STShNQUMpCit2b2lkIFdlYlBhZ2U6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFu
ZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFt
ZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hdGluZ1VSTFN0cmluZywgY29uc3QgdWludDhfdCogZGF0
YSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpCit7CisgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVu
V2l0aE5hdGl2ZUFwcGxpY2F0aW9uKHN1Z2dlc3RlZEZpbGVuYW1lLCBvcmlnaW5hdGluZ1VSTFN0
cmluZywgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZShkYXRhLCBzaXplKSwgcGRmVVVJRCkpOworfQor
I2VuZGlmCisKIHZvaWQgV2ViUGFnZTo6c2V0TWVkaWFWb2x1bWUoZmxvYXQgdm9sdW1lKQogewog
ICAgIG1fcGFnZS0+c2V0TWVkaWFWb2x1bWUodm9sdW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDEzNDU2YWEuLjQ0YjI4OTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNjEyLDYgKzYxMiwx
MSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+
IHBkZkFuZFBvc3RTY3JpcHRNSU1FVHlwZXMoKTsKICNlbmRpZgogCisgICAgdm9pZCBzYXZlUERG
VG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwg
Y29uc3QgU3RyaW5nJiBvcmlnaW5hdGluZ1VSTFN0cmluZywgY29uc3QgdWludDhfdCogZGF0YSwg
dW5zaWduZWQgbG9uZyBzaXplKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBzYXZlUERG
VG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYXRpbmdVUkxTdHJpbmcs
IGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgU3RyaW5nJiBw
ZGZVVUlEKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2UodWludDY0X3QgcGFnZUlE
LCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179550</attachid>
            <date>2012-12-14 16:12:24 -0800</date>
            <delta_ts>2012-12-14 16:43:04 -0800</delta_ts>
            <desc>rebase</desc>
            <filename>open-in-preview.diff</filename>
            <type>text/plain</type>
            <size>25375</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjYTFlODg0Li42OGYxMzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTItMTItMTQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUERGUGx1Z2luOiBUaGUgIk9wZW4gaW4gUHJldmlldyIgSFVEIGJ1dHRvbiBzaG91
bGQgd29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAyNDQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjY5NTcyOT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgY3JlYXRlQ2Fub25pY2Fs
VVVJRFN0cmluZyBhbmQgVVVJRC5oLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDEyLTEyLTE0ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVn
IGZpeCBhZnRlciByMTM3NzgyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBmOWVhNTYyLi5lYzA5
NTMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTY4MSw2ICs2ODEsNyBAQCBfX1pON1dlYkNv
cmUyNUhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXJDMkV2CiBfX1pON1dlYkNvcmUyNUltbXV0YWJs
ZVN0eWxlUHJvcGVydHlTZXREMUV2CiBfX1pON1dlYkNvcmUyNWFkZExhbmd1YWdlQ2hhbmdlT2Jz
ZXJ2ZXJFUHZQRnZTMF9FCiBfX1pON1dlYkNvcmUyNWNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXNF
TlNfMTdWaWV3cG9ydEFyZ3VtZW50c0VpaWlmTlNfN0ludFNpemVFCitfX1pON1dlYkNvcmUyNWNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmdFdgogX19aTjdXZWJDb3JlMjVqc1N0cmluZ1dpdGhDYWNo
ZVNsb3dDYXNlRVBOM0pTQzlFeGVjU3RhdGVFUk4zV1RGN0hhc2hNYXBJUE5TM18xMFN0cmluZ0lt
cGxFTlMwXzRXZWFrSU5TMF84SlNTdHJpbmdFRUVOUzNfN1B0ckhhc2hJUzZfRUVOUzNfMTBIYXNo
VHJhaXRzSVM2X0VFTlNDX0lTOV9FRUVFUzZfCiBfX1pON1dlYkNvcmUyNk5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyNmNyZWF0ZUVQTlNfNUZyYW1lRVBOU18zMk5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyQ2xpZW50RVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFCiBfX1pON1dlYkNvcmUyNlVzZXJU
eXBpbmdHZXN0dXJlSW5kaWNhdG9yMjdwcm9jZXNzaW5nVXNlclR5cGluZ0dlc3R1cmVFdgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDIwOTAzMTQuLjdmZjQwZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTgxNyw3ICs4MTcsNyBAQAogCQkyRTM3RTAwNTEyREJD
NUE0MDBBNkIyMzMgLyogSlNET01VUkwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkUzN0UwMDMxMkRCQzVBNDAwQTZCMjMzIC8qIEpTRE9NVVJMLmNw
cCAqLzsgfTsKIAkJMkUzN0UwMDYxMkRCQzVBNDAwQTZCMjMzIC8qIEpTRE9NVVJMLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTM3RTAwNDEyREJDNUE0
MDBBNkIyMzMgLyogSlNET01VUkwuaCAqLzsgfTsKIAkJMkUzQkJGMDcxMTYyREExMTAwQjk0MDlB
IC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkUzQkJGMDUxMTYyREExMTAwQjk0MDlBIC8qIFVVSUQuY3BwICovOyB9OwotCQkyRTNCQkYw
ODExNjJEQTExMDBCOTQwOUEgLyogVVVJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkUzQkJGMDYxMTYyREExMTAwQjk0MDlBIC8qIFVVSUQuaCAqLzsg
fTsKKwkJMkUzQkJGMDgxMTYyREExMTAwQjk0MDlBIC8qIFVVSUQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFM0JCRjA2MTE2MkRBMTEwMEI5NDA5QSAv
KiBVVUlELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMkUzQkMwQ0ExMTdEM0UwODAwQjk0MDlBIC8qIEpTRmlsZUVycm9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFM0JDMEM4MTE3RDNFMDgwMEI5
NDA5QSAvKiBKU0ZpbGVFcnJvci5jcHAgKi87IH07CiAJCTJFM0JDMENCMTE3RDNFMDgwMEI5NDA5
QSAvKiBKU0ZpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkUzQkMwQzkxMTdEM0UwODAwQjk0MDlBIC8qIEpTRmlsZUVycm9yLmggKi87IH07
CiAJCTJFM0JDMTA4MTE3RDQ3OTgwMEI5NDA5QSAvKiBET01GaWxlRXJyb3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFM0JDMTA2MTE3RDQ3OTgwMEI5
NDA5QSAvKiBET01GaWxlRXJyb3IuaCAqLzsgfTsKQEAgLTIyNTkwLDYgKzIyNTkwLDcgQEAKIAkJ
CWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTJFM0JCRjA4MTE2MkRBMTEwMEI5NDA5QSAvKiBVVUlE
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTQ1NkYxOTE2NzdENzRFMDA1RURERjkgLyogRGF0YWJh
c2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDMxMDVCQjE2NzUwRjE2MDBEQjJGQjgg
LyogTm9kZVRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzM3NUQ3RkUxNjYzOTUxOTAw
NjE4NEFCIC8qIFR5cGVBaGVhZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTcyMyw3ICsyNTcyNCw2
IEBACiAJCQkJQkM4QkYxNUExMDU4MTQxODAwQTQwQTA3IC8qIFVzZXJTdHlsZVNoZWV0VHlwZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDREYzMTdDMTFGOEQ2ODMwMDNDNUJGOCAvKiBVc2VyVHlw
aW5nR2VzdHVyZUluZGljYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUZBRkJGMTkxNUE1RkE3
NDAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkUzQkJGMDgx
MTYyREExMTAwQjk0MDlBIC8qIFVVSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1QTE1NDI4MTI3
OTUzNEQwMEQwQjBDMCAvKiBWYWxpZGF0aW9uTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjUxM0EzRUExNUZGNDg0MTAwMTUyNkRCIC8qIFZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNUM3NzA4RDEwMEQzQzZCMDA1QkEyNjcgLyogVmFsaWRpdHlTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjQ1OTY0Zi4uZjFiMzk3NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTEyLTE0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9o
b3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFBERlBsdWdpbjogVGhlICJPcGVuIGluIFByZXZp
ZXciIEhVRCBidXR0b24gc2hvdWxkIHdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMjQ0OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI2OTU3
Mjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IHRoZSAiT3BlbiBpbiBQcmV2aWV3IiBidXR0b24gZm9yIFBERlBsdWdpbiwgYnkgbW92
aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBmcm9tIFBERlZpZXdDb250cm9sbGVyCisgICAgICAgIG9u
dG8gV2ViUGFnZVByb3h5TWFjLCBhbmQgcmV1c2luZyBpdCBpbiBQREZWaWV3Q29udHJvbGxlciBh
bmQgUERGUGx1Z2luLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUERGVmlld0NvbnRy
b2xsZXIuaDoKKyAgICAgICAgKFBERlZpZXdDb250cm9sbGVyKTogUmVtb3ZlIHVubmVjZXNzYXJ5
IG1lbWJlcnMgaW4gZmF2b3Igb2YgYSBVVUlEIHRoYXQgaWRlbnRpZmllcyBvdXIgUERGIG9uIGRp
c2suCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUERGVmlld0NvbnRyb2xsZXIubW06Cisg
ICAgICAgIChXZWJLaXQ6OlBERlZpZXdDb250cm9sbGVyOjpvcGVuUERGSW5GaW5kZXIpOiBNb3Zl
IFBERlZpZXdDb250cm9sbGVyJ3MgaW1wbGVtZW50YXRpb24gb2Ygb3BlblBERkluRmluZGVyCisg
ICAgICAgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB0byBXZWJQYWdlUHJveHlNYWMuIFRoaXMgd2ls
bCBhbGxvdyBpdCB0byBiZSBzaGFyZWQgd2l0aCBQREZQbHVnaW4uCisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAoV2ViUGFnZVByb3h5KTogQWRkIHNhdmVQREZU
b0ZpbGVJblRlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24sCisgICAg
ICAgIHNhdmVQREZUb0ZpbGVJblRlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGlj
YXRpb25SYXcsIGFuZCBvcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNh
dGlvbi4KKyAgICAgICAgQWRkIG1fdGVtcG9yYXJ5UERGRmlsZXMsIHdoaWNoIGlzIHVzZWQgdG8g
a2VlcCB0cmFjayBvZiB0aGUgZmlsZW5hbWVzIG9mIFBERnMgdGhhdCB3ZSd2ZSBzYXZlZCB0byBk
aXNrLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAg
ICAgIEFkZCBTYXZlUERGVG9GaWxlSW5UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFw
cGxpY2F0aW9uIGFuZCBPcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNh
dGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAg
ICAgKFdlYktpdDo6dGVtcG9yYXJ5UERGRGlyZWN0b3J5UGF0aCk6IENvcGllZCBmcm9tIFBERlZp
ZXdDb250cm9sbGVyLiBDb25zdHJ1Y3QgdGhlIHBhdGggdG8gYQorICAgICAgICBXZWJLaXRQREZz
IHRlbXBvcmFyeSBkaXJlY3RvcnkgaW50byB3aGljaCBQREZzIHRvIGJlIG9wZW5lZCB3aXRoIGEg
bmF0aXZlIGFwcGxpY2F0aW9uIGFyZSBkb3dubG9hZGVkLgorICAgICAgICAoV2ViS2l0OjpwYXRo
VG9QREZPbkRpc2spOiBDb3BpZWQgZnJvbSBQREZWaWV3Q29udHJvbGxlci4gQ29tYmluZSB0ZW1w
b3JhcnlQREZEaXJlY3RvcnlQYXRoCisgICAgICAgIHdpdGggdGhlIHN1Z2dlc3RlZCBmaWxlbmFt
ZSBmb3IgdGhlIGdpdmVuIFBERiwgY3JlYXRpbmcgYSBuZXcgZmlsZW5hbWUgaWYgdGhlIGZpbGUg
YWxyZWFkeSBleGlzdHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2F2ZVBERlRv
VGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvblJhdyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3Blbldp
dGhOYXRpdmVBcHBsaWNhdGlvbik6CisgICAgICAgIFNhdmUgdGhlIGdpdmVuIFBERiBkYXRhIHRv
IGEgdGVtcG9yYXJ5IGZpbGUsIGdpdmVuIHRoZSBzdWdnZXN0ZWQgZmlsZW5hbWUuIFRoaXMgaW5z
ZXJ0cyB0aGUKKyAgICAgICAgZmlsZW5hbWUgdXNlZCBpbnRvIG1fdGVtcG9yYXJ5UERGRmlsZXMs
IHdoZXJlIGl0IGNhbiBsYXRlciBiZSByZXRyaWV2ZWQgYnkgVVVJRCB3aGVuIGFza2VkCisgICAg
ICAgIHRvIG9wZW4gdGhlIFBERiBhZ2FpbiBpbiBhIG5hdGl2ZSBhcHBsaWNhdGlvbi4gVGhlbiwg
b3BlbiBpdCB3aXRoIE5TV29ya3NwYWNlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
Om9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKToKKyAgICAg
ICAgT3BlbiB0aGUgcHJldmlvdXNseSBzYXZlZCBQREYgZmlsZSB3aXRoIE5TV29ya3NwYWNlLCBy
ZWZlcmVuY2VkIGJ5IFVVSUQuCisgICAgICAgIFdlIGlkZW50aWZ5IHRoZSBmaWxlIGJ5IFVVSUQg
aW5zdGVhZCBvZiBuYW1lIHNvIHRoYXQgb25seSB0aGUgVUlQcm9jZXNzIG5lZWRzCisgICAgICAg
IHRvIGtlZXAgdHJhY2sgb2YgdGhlIGFjdHVhbCBmaWxlbmFtZSwgYW5kIHNvIHRoYXQgdGhlIFdl
YlByb2Nlc3MKKyAgICAgICAgY2Fubm90IGhhbmQgYW4gYXJiaXRyYXJ5IGZpbGVuYW1lIGJhY2sg
dG8gdGhlIFVJUHJvY2VzcyB0byBvcGVuLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvUERGUGx1Z2luLmg6CisgICAgICAgIChQREZQbHVnaW4pOiBBZGQgb3BlbldpdGhOYXRpdmVB
cHBsaWNhdGlvbiBhbmQgc3RvcmFnZSBmb3IgdGhlIFVVSUQgdGhhdCBpZGVudGlmaWVzIG91ciBQ
REYgb24gZGlzay4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5t
bToKKyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBvcGVuV2l0aFByZXZp
ZXddKTogRm9yd2FyZCBvcGVuV2l0aFByZXZpZXcgdG8gUERGUGx1Z2luJ3Mgb3BlbldpdGhOYXRp
dmVBcHBsaWNhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzYXZlVG9QREYpOgor
ICAgICAgICBIYW5kIHJhdyBkYXRhIHRvIFdlYlBhZ2UgYW5kIGhhdmUgaXQgc2VuZCB0aGUgbWVz
c2FnZSB0byBXZWJQYWdlUHJveHkgaW5zdGVhZCBvZiB1c2luZyBJUEMgdHlwZXMgaW4gUERGUGx1
Z2luLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om9wZW5XaXRoTmF0aXZlQXBwbGljYXRp
b24pOgorICAgICAgICBBc2sgV2ViUGFnZSB0byBzYXZlIHRoZSBjdXJyZW50IFBERiB0byBhIHRl
bXBvcmFyeSBkaXJlY3RvcnkgYW5kIG9wZW4gaXQgd2l0aCBhIG5hdGl2ZSBhcHBsaWNhdGlvbi4K
KyAgICAgICAgSWYgd2UndmUgYWxyZWFkeSBkb3dubG9hZGVkIHRoZSBQREYgKGFuZCBoYXZlIGEg
bm9uLW51bGwgbV90ZW1wb3JhcnlQREZVVUlEKSwKKyAgICAgICAgd2UgY2FuIGp1c3Qgb3BlbiB0
aGUgZXhpc3RpbmcgZmlsZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0Zv
bGRlcik6IEhhbmQgdGhlIFBERiBkYXRhIHRvIFdlYlBhZ2VQcm94eSB0byBzYXZlLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5h
dGl2ZUFwcGxpY2F0aW9uKTogSGFuZCB0aGUgUERGIGRhdGEgdG8gV2ViUGFnZVByb3h5IHRvIHNh
dmUgYW5kIG9wZW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAg
ICAgICAgKFdlYlBhZ2UpOiBBZGQgc2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyIGFuZCBz
YXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uLgorCiAy
MDEyLTEyLTE0ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTM3NzY3LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUERGVmlld0NvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BERlZpZXdDb250cm9sbGVyLmgKaW5kZXggNDZh
YWY4NC4uMjY1ZDdkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvUERGVmlld0NvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9QREZWaWV3Q29udHJvbGxlci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIEBjbGFz
cyBQREZWaWV3OwogQGNsYXNzIFdLVmlldzsKQEAgLTc5LDggKzgwLDYgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgQ2xhc3MgcGRmRG9jdW1lbnRDbGFzcygpOwogICAgIHN0YXRpYyBOU0J1bmRsZSog
cGRmS2l0QnVuZGxlKCk7CiAKLSAgICBOU1N0cmluZyAqcGF0aFRvUERGT25EaXNrKCk7Ci0KICAg
ICBXS1ZpZXcqIG1fd2tWaWV3OwogCiAgICAgUmV0YWluUHRyPFdLUERGVmlldz4gbV93a1BERlZp
ZXc7CkBAIC04OSw4ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBt
X3N1Z2dlc3RlZEZpbGVuYW1lOwogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG1fcGRmRGF0YTsK
IAotICAgIFJldGFpblB0cjxOU1N0cmluZz4gbV9wYXRoVG9QREZPbkRpc2s7Ci0gICAgYm9vbCBt
X2hhc1dyaXR0ZW5QREZUb0Rpc2s7CisgICAgU3RyaW5nIG1fdGVtcG9yYXJ5UERGVVVJRDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvUERGVmlld0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9QREZWaWV3Q29udHJvbGxlci5tbQppbmRleCBmMjY3ZTk5Li41NjMyZWM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QREZWaWV3Q29u
dHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QREZWaWV3
Q29udHJvbGxlci5tbQpAQCAtMzYsNiArMzYsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXMu
aCIKICNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVk
U3RyaW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9VVUlELmg+CiAjaW1wb3J0IDx3dGYvT2JqY1J1
bnRpbWVFeHRyYXMuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbXBvcnQgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNDAzLDcgKzQwNCw2IEBAIFBERlZpZXdDb250cm9sbGVy
OjpQREZWaWV3Q29udHJvbGxlcihXS1ZpZXcgKndrVmlldykKICAgICA6IG1fd2tWaWV3KHdrVmll
dykKICAgICAsIG1fd2tQREZWaWV3KEFkb3B0TlMsIFtbV0tQREZWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOlttX3drVmlldyBib3VuZHNdIFBERlZpZXdDb250cm9sbGVyOnRoaXNdKQogICAgICwg
bV9wZGZWaWV3KFttX3drUERGVmlldy5nZXQoKSBwZGZWaWV3XSkKLSAgICAsIG1faGFzV3JpdHRl
blBERlRvRGlzayhmYWxzZSkKIHsKICAgICBbbV93a1ZpZXcgYWRkU3VidmlldzptX3drUERGVmll
dy5nZXQoKV07CiB9CkBAIC01NzYsMjIgKzU3NiwxNCBAQCB2b2lkIFBERlZpZXdDb250cm9sbGVy
OjpvcGVuUERGSW5GaW5kZXIoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTlNTdHJp
bmcgKnBhdGggPSBwYXRoVG9QREZPbkRpc2soKTsKLSAgICBpZiAoIXBhdGgpCisgICAgaWYgKCFt
X3RlbXBvcmFyeVBERlVVSUQpIHsKKyAgICAgICAgQVNTRVJUKG1fcGRmRGF0YSk7CisgICAgICAg
IG1fdGVtcG9yYXJ5UERGVVVJRCA9IFdlYkNvcmU6OmNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmco
KTsKKyAgICAgICAgcGFnZSgpLT5zYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5h
dGl2ZUFwcGxpY2F0aW9uUmF3KG1fc3VnZ2VzdGVkRmlsZW5hbWUuZ2V0KCksIHBhZ2UoKS0+bWFp
bkZyYW1lKCktPnVybCgpLCBDRkRhdGFHZXRCeXRlUHRyKG1fcGRmRGF0YS5nZXQoKSksIENGRGF0
YUdldExlbmd0aChtX3BkZkRhdGEuZ2V0KCkpLCBtX3RlbXBvcmFyeVBERlVVSUQpOwogICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIW1faGFzV3JpdHRlblBERlRvRGlzaykgewotICAgICAgICAv
LyBDcmVhdGUgYSBQREYgZmlsZSB3aXRoIHRoZSBtaW5pbWFsIHBlcm1pc3Npb25zIChvbmx5IGFj
Y2Vzc2libGUgdG8gdGhlIGN1cnJlbnQgdXNlciwgc2VlIDQxNDU3MTQpLgotICAgICAgICBSZXRh
aW5QdHI8TlNOdW1iZXI+IHBlcm1pc3Npb25zKEFkb3B0TlMsIFtbTlNOdW1iZXIgYWxsb2NdIGlu
aXRXaXRoSW50OlNfSVJVU1JdKTsKLSAgICAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZmls
ZUF0dHJpYnV0ZXMoQWRvcHROUywgW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0
c0FuZEtleXM6cGVybWlzc2lvbnMuZ2V0KCksIE5TRmlsZVBvc2l4UGVybWlzc2lvbnMsIG5pbF0p
OwotCi0gICAgICAgIGlmICghW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVhdGVG
aWxlQXRQYXRoOnBhdGggY29udGVudHM6KE5TRGF0YSAqKW1fcGRmRGF0YS5nZXQoKSBhdHRyaWJ1
dGVzOmZpbGVBdHRyaWJ1dGVzLmdldCgpXSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBtX2hhc1dyaXR0ZW5QREZUb0Rpc2sgPSB0cnVlOwogICAgIH0KIAotICAgIFtbTlNXb3Jrc3Bh
Y2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuRmlsZTpwYXRoXTsKKyAgICBwYWdlKCktPm9wZW5QREZG
cm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKG1fdGVtcG9yYXJ5UERGVVVJ
RCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VDRkRhdGEodW5zaWduZWQgY2hhciosIGNvbnN0
IHZvaWQqIGRhdGEpCkBAIC02MjAsNTAgKzYxMiw2IEBAIHZvaWQgUERGVmlld0NvbnRyb2xsZXI6
OnNhdmVQREZUb0Rvd25sb2Fkc0ZvbGRlcigpCiAgICAgcGFnZSgpLT5zYXZlRGF0YVRvRmlsZUlu
RG93bmxvYWRzRm9sZGVyKG1fc3VnZ2VzdGVkRmlsZW5hbWUuZ2V0KCksIHBhZ2UoKS0+bWFpbkZy
YW1lKCktPm1pbWVUeXBlKCksIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnVybCgpLCBkYXRhLmdldCgp
KTsKIH0KIAotc3RhdGljIE5TU3RyaW5nICp0ZW1wb3JhcnlQREZEaXJlY3RvcnlQYXRoKCkKLXsK
LSAgICBzdGF0aWMgTlNTdHJpbmcgKnRlbXBvcmFyeVBERkRpcmVjdG9yeVBhdGg7Ci0KLSAgICBp
ZiAoIXRlbXBvcmFyeVBERkRpcmVjdG9yeVBhdGgpIHsKLSAgICAgICAgTlNTdHJpbmcgKnRlbXBv
cmFyeURpcmVjdG9yeVRlbXBsYXRlID0gW05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiV2ViS2l0UERGcy1YWFhYWFgiXTsKLSAgICAgICAgQ1N0
cmluZyB0ZW1wbGF0ZVJlcHJlc2VudGF0aW9uID0gW3RlbXBvcmFyeURpcmVjdG9yeVRlbXBsYXRl
IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbl07Ci0KLSAgICAgICAgaWYgKG1rZHRlbXAodGVtcGxh
dGVSZXByZXNlbnRhdGlvbi5tdXRhYmxlRGF0YSgpKSkKLSAgICAgICAgICAgIHRlbXBvcmFyeVBE
RkRpcmVjdG9yeVBhdGggPSBbW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzdHJpbmdX
aXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOnRlbXBsYXRlUmVwcmVzZW50YXRpb24uZGF0YSgp
IGxlbmd0aDp0ZW1wbGF0ZVJlcHJlc2VudGF0aW9uLmxlbmd0aCgpXSBjb3B5XTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdGVtcG9yYXJ5UERGRGlyZWN0b3J5UGF0aDsKLX0KLQotTlNTdHJpbmcgKlBE
RlZpZXdDb250cm9sbGVyOjpwYXRoVG9QREZPbkRpc2soKQotewotICAgIGlmIChtX3BhdGhUb1BE
Rk9uRGlzaykKLSAgICAgICAgcmV0dXJuIG1fcGF0aFRvUERGT25EaXNrLmdldCgpOwotCi0gICAg
TlNTdHJpbmcgKnBkZkRpcmVjdG9yeVBhdGggPSB0ZW1wb3JhcnlQREZEaXJlY3RvcnlQYXRoKCk7
Ci0gICAgaWYgKCFwZGZEaXJlY3RvcnlQYXRoKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
TlNTdHJpbmcgKnBhdGggPSBbcGRmRGlyZWN0b3J5UGF0aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhD
b21wb25lbnQ6bV9zdWdnZXN0ZWRGaWxlbmFtZS5nZXQoKV07Ci0KLSAgICBOU0ZpbGVNYW5hZ2Vy
ICpmaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgICBpZiAo
W2ZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6cGF0aF0pIHsKLSAgICAgICAgTlNTdHJpbmcg
KnBhdGhUZW1wbGF0ZVByZWZpeCA9IFtwZGZEaXJlY3RvcnlQYXRoIHN0cmluZ0J5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDpAIlhYWFhYWC0iXTsKLSAgICAgICAgTlNTdHJpbmcgKnBhdGhUZW1wbGF0
ZSA9IFtwYXRoVGVtcGxhdGVQcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6bV9zdWdnZXN0
ZWRGaWxlbmFtZS5nZXQoKV07Ci0gICAgICAgIENTdHJpbmcgcGF0aFRlbXBsYXRlUmVwcmVzZW50
YXRpb24gPSBbcGF0aFRlbXBsYXRlIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbl07Ci0KLSAgICAg
ICAgaW50IGZkID0gbWtzdGVtcHMocGF0aFRlbXBsYXRlUmVwcmVzZW50YXRpb24ubXV0YWJsZURh
dGEoKSwgcGF0aFRlbXBsYXRlUmVwcmVzZW50YXRpb24ubGVuZ3RoKCkgLSBzdHJsZW4oW3BhdGhU
ZW1wbGF0ZVByZWZpeCBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25dKSArIDEpOwotICAgICAgICBp
ZiAoZmQgPCAwKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgICAgICBjbG9zZShmZCk7
Ci0gICAgICAgIHBhdGggPSBbZmlsZU1hbmFnZXIgc3RyaW5nV2l0aEZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbjpwYXRoVGVtcGxhdGVSZXByZXNlbnRhdGlvbi5kYXRhKCkgbGVuZ3RoOnBhdGhUZW1w
bGF0ZVJlcHJlc2VudGF0aW9uLmxlbmd0aCgpXTsKLSAgICB9Ci0KLSAgICBtX3BhdGhUb1BERk9u
RGlzay5hZG9wdE5TKFtwYXRoIGNvcHldKTsKLSAgICByZXR1cm4gcGF0aDsKLX0KLQogdm9pZCBQ
REZWaWV3Q29udHJvbGxlcjo6bGlua0NsaWNrZWQoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAg
TlNFdmVudCogbnNFdmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDNhMzE1NjkuLmQzNDg3NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTcyNSw2ICs3MjUsMTEgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyKGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmlu
ZyYgb3JpZ2luYXRpbmdVUkxTdHJpbmcsIFdlYkRhdGEqKTsKICAgICB2b2lkIHNhdmVQREZUb0Zp
bGVJbkRvd25sb2Fkc0ZvbGRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25z
dCBTdHJpbmcmIG9yaWdpbmF0aW5nVVJMU3RyaW5nLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJl
bmNlJik7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgc2F2ZVBERlRvVGVtcG9yYXJ5Rm9s
ZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvblJhdyhjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIG9yaWdpbmF0aW5nVVJMU3RyaW5nLCBjb25zdCB1aW50
OF90KiBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCk7Cisg
ICAgdm9pZCBzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0
aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgb3JpZ2lu
YXRpbmdVUkxTdHJpbmcsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJp
bmcmIHBkZlVVSUQpOworICAgIHZvaWQgb3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0
aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJiBwZGZVVUlEKTsKKyNlbmRpZgogCiAgICAgdm9p
ZCBsaW5rQ2xpY2tlZChjb25zdCBTdHJpbmcmLCBjb25zdCBXZWJNb3VzZUV2ZW50Jik7CiAKQEAg
LTEyNTYsNiArMTI2MSwxMCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShQQUdFX1ZJU0lCSUxJVFlf
QVBJKQogICAgIFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUgbV92aXNpYmlsaXR5U3RhdGU7
CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBtX3RlbXBvcmFyeVBERkZpbGVzOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCmluZGV4IDA4NDgyNjMuLjQ3NDIxZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtMzM5LDQgKzMzOSw5IEBAIG1lc3Nh
Z2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAjZW5kaWYKIAogICAgIFNhdmVQREZUb0ZpbGVJbkRvd25s
b2Fkc0ZvbGRlcihXVEY6OlN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwgV1RGOjpTdHJpbmcgb3Jp
Z2luYXRpbmdVUkxTdHJpbmcsIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBTYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2
ZUFwcGxpY2F0aW9uKFdURjo6U3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lLCBXVEY6OlN0cmluZyBv
cmlnaW5hdGluZ1VSTFN0cmluZywgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBkYXRhLCBXVEY6OlN0
cmluZyBwZGZVVUlEKQorICAgIE9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFw
cGxpY2F0aW9uKFdURjo6U3RyaW5nIHBkZlVVSUQpCisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KaW5kZXggODQ5YmEyMC4uNDZl
ZTljOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJv
eHlNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlN
YWMubW0KQEAgLTQ4NCw0ICs0ODQsMTAyIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nUm9vdExheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIHJvb3RMCiAgICAg
bV9wYWdlQ2xpZW50LT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKHJvb3RMYXll
ci0+cGxhdGZvcm1MYXllcigpKTsKIH0KIAorc3RhdGljIE5TU3RyaW5nICp0ZW1wb3JhcnlQREZE
aXJlY3RvcnlQYXRoKCkKK3sKKyAgICBzdGF0aWMgTlNTdHJpbmcgKnRlbXBvcmFyeVBERkRpcmVj
dG9yeVBhdGg7CisKKyAgICBpZiAoIXRlbXBvcmFyeVBERkRpcmVjdG9yeVBhdGgpIHsKKyAgICAg
ICAgTlNTdHJpbmcgKnRlbXBvcmFyeURpcmVjdG9yeVRlbXBsYXRlID0gW05TVGVtcG9yYXJ5RGly
ZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiV2ViS2l0UERGcy1YWFhY
WFgiXTsKKyAgICAgICAgQ1N0cmluZyB0ZW1wbGF0ZVJlcHJlc2VudGF0aW9uID0gW3RlbXBvcmFy
eURpcmVjdG9yeVRlbXBsYXRlIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbl07CisKKyAgICAgICAg
aWYgKG1rZHRlbXAodGVtcGxhdGVSZXByZXNlbnRhdGlvbi5tdXRhYmxlRGF0YSgpKSkKKyAgICAg
ICAgICAgIHRlbXBvcmFyeVBERkRpcmVjdG9yeVBhdGggPSBbW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOnRlbXBsYXRlUmVw
cmVzZW50YXRpb24uZGF0YSgpIGxlbmd0aDp0ZW1wbGF0ZVJlcHJlc2VudGF0aW9uLmxlbmd0aCgp
XSBjb3B5XTsKKyAgICB9CisKKyAgICByZXR1cm4gdGVtcG9yYXJ5UERGRGlyZWN0b3J5UGF0aDsK
K30KKworc3RhdGljIE5TU3RyaW5nICpwYXRoVG9QREZPbkRpc2soY29uc3QgU3RyaW5nJiBzdWdn
ZXN0ZWRGaWxlbmFtZSkKK3sKKyAgICBOU1N0cmluZyAqcGRmRGlyZWN0b3J5UGF0aCA9IHRlbXBv
cmFyeVBERkRpcmVjdG9yeVBhdGgoKTsKKyAgICBpZiAoIXBkZkRpcmVjdG9yeVBhdGgpIHsKKyAg
ICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBQREYgZG93bmxvYWQg
ZGlyZWN0b3J5LiIpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIE5TU3RyaW5n
ICpwYXRoID0gW3BkZkRpcmVjdG9yeVBhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50
OnN1Z2dlc3RlZEZpbGVuYW1lXTsKKworICAgIE5TRmlsZU1hbmFnZXIgKmZpbGVNYW5hZ2VyID0g
W05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOworICAgIGlmIChbZmlsZU1hbmFnZXIgZmls
ZUV4aXN0c0F0UGF0aDpwYXRoXSkgeworICAgICAgICBOU1N0cmluZyAqcGF0aFRlbXBsYXRlUHJl
Zml4ID0gW3BkZkRpcmVjdG9yeVBhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAi
WFhYWFhYLSJdOworICAgICAgICBOU1N0cmluZyAqcGF0aFRlbXBsYXRlID0gW3BhdGhUZW1wbGF0
ZVByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpzdWdnZXN0ZWRGaWxlbmFtZV07CisgICAg
ICAgIENTdHJpbmcgcGF0aFRlbXBsYXRlUmVwcmVzZW50YXRpb24gPSBbcGF0aFRlbXBsYXRlIGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbl07CisKKyAgICAgICAgaW50IGZkID0gbWtzdGVtcHMocGF0
aFRlbXBsYXRlUmVwcmVzZW50YXRpb24ubXV0YWJsZURhdGEoKSwgcGF0aFRlbXBsYXRlUmVwcmVz
ZW50YXRpb24ubGVuZ3RoKCkgLSBzdHJsZW4oW3BhdGhUZW1wbGF0ZVByZWZpeCBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb25dKSArIDEpOworICAgICAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIkNhbm5vdCBjcmVhdGUgUERGIGZpbGUgaW4gdGhlIHRlbXBvcmFyeSBk
aXJlY3RvcnkgKCVzKS4iLCBzdWdnZXN0ZWRGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKworICAgICAgICBjbG9zZShmZCk7CisgICAg
ICAgIHBhdGggPSBbZmlsZU1hbmFnZXIgc3RyaW5nV2l0aEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bjpwYXRoVGVtcGxhdGVSZXByZXNlbnRhdGlvbi5kYXRhKCkgbGVuZ3RoOnBhdGhUZW1wbGF0ZVJl
cHJlc2VudGF0aW9uLmxlbmd0aCgpXTsKKyAgICB9CisKKyAgICByZXR1cm4gcGF0aDsKK30KKwor
dm9pZCBXZWJQYWdlUHJveHk6OnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0
aXZlQXBwbGljYXRpb25SYXcoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3Qg
U3RyaW5nJiBvcmlnaW5hdGluZ1VSTFN0cmluZywgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWdu
ZWQgbG9uZyBzaXplLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpCit7CisgICAgLy8gRklYTUU6IFdy
aXRlIG9yaWdpbmF0aW5nVVJMU3RyaW5nIHRvIHRoZSBmaWxlJ3Mgb3JpZ2luYXRpbmcgVVJMIG1l
dGFkYXRhIChwZXJoYXBzIFdLU2V0TWV0YWRhdGFVUkw/KS4KKyAgICBVTlVTRURfUEFSQU0ob3Jp
Z2luYXRpbmdVUkxTdHJpbmcpOworCisgICAgaWYgKCFzdWdnZXN0ZWRGaWxlbmFtZS5lbmRzV2l0
aCgiLnBkZiIsIGZhbHNlKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkNhbm5vdCBzYXZlIGZp
bGUgd2l0aG91dCAucGRmIGV4dGVuc2lvbiB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc2l6ZSkgeworICAgICAgICBXVEZM
b2dBbHdheXMoIkNhbm5vdCBzYXZlIGVtcHR5IFBERiBmaWxlIHRvIHRoZSB0ZW1wb3JhcnkgZGly
ZWN0b3J5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTlNTdHJpbmcgKm5zUGF0
aCA9IHBhdGhUb1BERk9uRGlzayhzdWdnZXN0ZWRGaWxlbmFtZSk7CisKKyAgICBpZiAoIW5zUGF0
aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmV0YWluUHRyPE5TTnVtYmVyPiBwZXJtaXNzaW9u
cyA9IGFkb3B0TlMoW1tOU051bWJlciBhbGxvY10gaW5pdFdpdGhJbnQ6U19JUlVTUl0pOworICAg
IFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGZpbGVBdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TRGlj
dGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czpwZXJtaXNzaW9ucy5nZXQoKSwg
TlNGaWxlUG9zaXhQZXJtaXNzaW9ucywgbmlsXSk7CisgICAgUmV0YWluUHRyPE5TRGF0YT4gbnNE
YXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlc05vQ29weToodm9pZCop
ZGF0YSBsZW5ndGg6c2l6ZSBmcmVlV2hlbkRvbmU6Tk9dKTsKKworICAgIGlmICghW1tOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVhdGVGaWxlQXRQYXRoOm5zUGF0aCBjb250ZW50czpu
c0RhdGEuZ2V0KCkgYXR0cmlidXRlczpmaWxlQXR0cmlidXRlcy5nZXQoKV0pIHsKKyAgICAgICAg
V1RGTG9nQWx3YXlzKCJDYW5ub3QgY3JlYXRlIFBERiBmaWxlIGluIHRoZSB0ZW1wb3JhcnkgZGly
ZWN0b3J5ICglcykuIiwgc3VnZ2VzdGVkRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX3RlbXBvcmFyeVBERkZpbGVzLmFkZChwZGZVVUlELCBu
c1BhdGgpOworCisgICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5GaWxlOm5z
UGF0aF07Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJB
bmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5h
bWUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYXRpbmdVUkxTdHJpbmcsIGNvbnN0IENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCkKK3sKKyAgICBpZiAoZGF0
YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJDYW5ub3Qgc2F2ZSBlbXB0eSBQ
REYgZmlsZSB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBw
bGljYXRpb25SYXcoc3VnZ2VzdGVkRmlsZW5hbWUsIG9yaWdpbmF0aW5nVVJMU3RyaW5nLCBkYXRh
LmRhdGEoKSwgZGF0YS5zaXplKCksIHBkZlVVSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6
b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3Ry
aW5nJiBwZGZVVUlEKQoreworICAgIFN0cmluZyBwZGZGaWxlbmFtZSA9IG1fdGVtcG9yYXJ5UERG
RmlsZXMuZ2V0KHBkZlVVSUQpOworCisgICAgaWYgKCFwZGZGaWxlbmFtZS5lbmRzV2l0aCgiLnBk
ZiIsIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRX
b3Jrc3BhY2VdIG9wZW5GaWxlOnBkZkZpbGVuYW1lXTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW4uaAppbmRleCA0ZTdjOTJiLi42MWZhZDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKQEAgLTQzLDYgKzQzLDEwIEBAIE9CSkNf
Q0xBU1MgUERGQW5ub3RhdGlvbjsKIE9CSkNfQ0xBU1MgUERGTGF5ZXJDb250cm9sbGVyOwogT0JK
Q19DTEFTUyBXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlOwogCituYW1lc3BhY2UgQ29yZUlQ
QyB7CitjbGFzcyBEYXRhUmVmZXJlbmNlOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBFbGVtZW50Owogc3RydWN0IFBsdWdpbkluZm87CkBAIC02Nyw2ICs3MSw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgY2xpY2tlZExpbmsoTlNVUkwgKik7CiAgICAgdm9pZCBzYXZlVG9QREYoKTsK
KyAgICB2b2lkIG9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKICAgICB2b2lkIHdyaXRlSXRl
bXNUb1Bhc3RlYm9hcmQoTlNBcnJheSAqaXRlbXMsIE5TQXJyYXkgKnR5cGVzKTsKICAgICB2b2lk
IHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKiwg
Q0dQb2ludCk7CiAKQEAgLTEyMiw2ICsxMjcsOCBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm07CiAgICAgV2ViTW91c2VF
dmVudCBtX2xhc3RNb3VzZUV2ZW50OwogICAgIFdlYkNvcmU6OkludFBvaW50IG1fbGFzdE1vdXNl
UG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzOworCisgICAgU3RyaW5nIG1fdGVtcG9yYXJ5UERG
VVVJRDsKICAgICAKICAgICBSZXRhaW5QdHI8V0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZT4g
bV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmluZGV4IGEyYjlmZTAuLjcyMTY1
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLm1tCkBAIC02OSw2ICs2OSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckJveE1v
ZGVsT2JqZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbEFuaW1hdG9yLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL1VVSUQuaD4KICNp
bXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKQEAgLTE3NCw3ICsxNzUsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogYW5ub3RhdGlvblN0eWxl
ID0KIAogLSAodm9pZClvcGVuV2l0aFByZXZpZXcKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
LgorICAgIF9wZGZQbHVnaW4tPm9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKIH0KIAogLSAo
dm9pZClzYXZlVG9QREYKQEAgLTc2MywxMSArNzY0LDMzIEBAIHZvaWQgUERGUGx1Z2luOjpub3Rp
ZnlDb250ZW50U2NhbGVGYWN0b3JDaGFuZ2VkKENHRmxvYXQgc2NhbGVGYWN0b3IpCiAKIHZvaWQg
UERGUGx1Z2luOjpzYXZlVG9QREYoKQogeworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFi
bHkgbm90aWZ5IHRoZSB1c2VyIHRoYXQgdGhleSBjYW4ndCBzYXZlIGJlZm9yZSB0aGUgZG9jdW1l
bnQgaXMgZmluaXNoZWQgbG9hZGluZy4KKyAgICAvLyBQREZWaWV3Q29udHJvbGxlciBkb2VzIGFu
IE5TQmVlcCgpLCBidXQgdGhhdCBzZWVtcyBpbnN1ZmZpY2llbnQuCisgICAgaWYgKCFwZGZEb2N1
bWVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJl
Zj4gY2ZEYXRhID0gZGF0YSgpOworICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2F2ZVBERlRvRmls
ZUluRG93bmxvYWRzRm9sZGVyKHN1Z2dlc3RlZEZpbGVuYW1lKCksIHdlYkZyYW1lKCktPnVybCgp
LCBDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YS5nZXQoKSksIENGRGF0YUdldExlbmd0aChjZkRhdGEu
Z2V0KCkpKTsKK30KIAotICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZShD
RkRhdGFHZXRCeXRlUHRyKGNmRGF0YS5nZXQoKSksIENGRGF0YUdldExlbmd0aChjZkRhdGEuZ2V0
KCkpKTsKK3ZvaWQgUERGUGx1Z2luOjpvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCkKK3sKKyAg
ICBpZiAoIW1fdGVtcG9yYXJ5UERGVVVJRCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHByb2JhYmx5IG5vdGlmeSB0aGUgdXNlciB0aGF0IHRoZXkgY2FuJ3Qgc2F2ZSBiZWZvcmUgdGhl
IGRvY3VtZW50IGlzIGZpbmlzaGVkIGxvYWRpbmcuCisgICAgICAgIC8vIFBERlZpZXdDb250cm9s
bGVyIGRvZXMgYW4gTlNCZWVwKCksIGJ1dCB0aGF0IHNlZW1zIGluc3VmZmljaWVudC4KKyAgICAg
ICAgaWYgKCFwZGZEb2N1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJl
dGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBjZkRhdGEgPSBkYXRhKCk7CisKKyAgICAgICAgbV90
ZW1wb3JhcnlQREZVVUlEID0gV2ViQ29yZTo6Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwor
ICAgICAgICBBU1NFUlQobV90ZW1wb3JhcnlQREZVVUlEKTsKKworICAgICAgICB3ZWJGcmFtZSgp
LT5wYWdlKCktPnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGlj
YXRpb24oc3VnZ2VzdGVkRmlsZW5hbWUoKSwgd2ViRnJhbWUoKS0+dXJsKCksIENGRGF0YUdldEJ5
dGVQdHIoY2ZEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YS5nZXQoKSksIG1fdGVt
cG9yYXJ5UERGVVVJRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICB3ZWJGcmFtZSgp
LT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2ZVBERlRvRmlsZUluRG93
bmxvYWRzRm9sZGVyKHN1Z2dlc3RlZEZpbGVuYW1lKCksIHdlYkZyYW1lKCktPnVybCgpLCBkYXRh
UmVmZXJlbmNlKSk7CisgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6Ok9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9u
KG1fdGVtcG9yYXJ5UERGVVVJRCkpOwogfQogCiB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1Rv
UGFzdGVib2FyZChOU0FycmF5ICppdGVtcywgTlNBcnJheSAqdHlwZXMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggN2ZjZWNhYi4uYzI1MzBm
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApA
QCAtMzM2OSw2ICszMzY5LDE4IEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2VzRm9yUHJpbnRpbmco
dWludDY0X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8sCiB9CiAjZW5kaWYK
IAordm9pZCBXZWJQYWdlOjpzYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hdGluZ1VSTFN0cmlu
ZywgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKHN1
Z2dlc3RlZEZpbGVuYW1lLCBvcmlnaW5hdGluZ1VSTFN0cmluZywgQ29yZUlQQzo6RGF0YVJlZmVy
ZW5jZShkYXRhLCBzaXplKSkpOworfQorCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBXZWJQYWdl
OjpzYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYXRpbmdV
UkxTdHJpbmcsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3Qg
U3RyaW5nJiBwZGZVVUlEKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2
ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihzdWdnZXN0
ZWRGaWxlbmFtZSwgb3JpZ2luYXRpbmdVUkxTdHJpbmcsIENvcmVJUEM6OkRhdGFSZWZlcmVuY2Uo
ZGF0YSwgc2l6ZSksIHBkZlVVSUQpKTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYlBhZ2U6OnNldE1l
ZGlhVm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKICAgICBtX3BhZ2UtPnNldE1lZGlhVm9sdW1lKHZv
bHVtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRl
eCAxMzQ1NmFhLi40NGIyODkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKQEAgLTYxMiw2ICs2MTIsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBIYXNo
U2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVzKCk7
CiAjZW5kaWYKIAorICAgIHZvaWQgc2F2ZVBERlRvRmlsZUluRG93bmxvYWRzRm9sZGVyKGNvbnN0
IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYXRpbmdVUkxT
dHJpbmcsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIHZvaWQgc2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhO
YXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBT
dHJpbmcmIG9yaWdpbmF0aW5nVVJMU3RyaW5nLCBjb25zdCB1aW50OF90KiBkYXRhLCB1bnNpZ25l
ZCBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYgcGRmVVVJRCk7CisjZW5kaWYKKwogcHJpdmF0ZToK
ICAgICBXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycyYpOwogCg==
</data>
<flag name="review"
          id="196460"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>