<?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>12311</bug_id>
          
          <creation_ts>2007-01-18 07:25:36 -0800</creation_ts>
          <short_desc>Implement frame loading for Qt. Clean up FrameLoader a bit</short_desc>
          <delta_ts>2007-01-23 07:25:50 -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>Page Loading</component>
          <version>420+</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Lars Knoll">lars.knoll</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>34316</commentid>
    <comment_count>0</comment_count>
    <who name="Lars Knoll">lars.knoll</who>
    <bug_when>2007-01-18 07:25:36 -0800</bug_when>
    <thetext>The patch implements support for creation and loading of subframes in the Qt build. At the same time it cleans up some of the remaining platform dependent code in FrameLoader. It moves some code that is platform independent into loadSubFrame and adds stubs for most of the platform dependent FrameLoader methods to the FrameLoaderClient (so that FrameLoader can become 100% platform independent one day). On the Mac side it only cleans up a little, but makes it possible to move quite a bit of code from FrameMac and the WebFrameBridge to WebFrameLoaderClient.

The code is untested on th Mac, so someone needs to give it a try to see if it compiles and works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34317</commentid>
    <comment_count>1</comment_count>
      <attachid>12533</attachid>
    <who name="Lars Knoll">lars.knoll</who>
    <bug_when>2007-01-18 07:26:17 -0800</bug_when>
    <thetext>Created attachment 12533
see bug description</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34226</commentid>
    <comment_count>2</comment_count>
      <attachid>12533</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-01-18 23:34:30 -0800</bug_when>
    <thetext>Comment on attachment 12533
see bug description

 #include &quot;HTMLFormElement.h&quot;
 #include &quot;HTMLNames.h&quot;
 #include &quot;HTMLObjectElement.h&quot;
+#include &quot;HTMLFrameElement.h&quot;

   #includes should be alphabetical.

+    if (ownerElement-&gt;hasTagName(frameTag) || ownerElement-&gt;hasTagName(iframeTag)) {
+        HTMLFrameElement* o = static_cast&lt;HTMLFrameElement*&gt;(ownerElement);

   I know this isn&apos;t new code, but it seems like this cast should really be to HTMLFrameElementBase, since that&apos;s what both HTMLFrameElement and HTMLIFrameElement derive from. Also, HTMLFrameElement and HTMLIFrameElement are the only things that can be HTMLFrameOwnerElements, so I&apos;m not sure what value the if has.

     class ResourceRequest;
     class ResourceResponse;
     class String;
+    class HTMLFrameOwnerElement;
+    class Widget;
+    class IntSize;

   Please alphabetize these forward declarations.

+        virtual Frame *createFrame(const KURL&amp; url, const String&amp; name, HTMLFrameOwnerElement* ownerElement,
+                                   const String&amp; referrer, bool allowsScrolling, int marginWidth, int marginHeight) = 0;

   The * should be next to Frame, and the &apos;ownerElement&apos; parameter name is unnecessary. (And ditto in WebFrameLoaderClient.h)

+    // stubbed out until the code is moved here from the FrameBridge, and FrameLoader looses the createFrame() method

    Typo: &apos;looses&apos; =&gt; &apos;loses&apos;

   I think it would be good for Darin to have a look at this before checking in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34227</commentid>
    <comment_count>3</comment_count>
      <attachid>12533</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-01-18 23:55:58 -0800</bug_when>
    <thetext>Comment on attachment 12533
see bug description

This patch also needs to update SVGEmptyFrameLoaderClient in SVGImageEmptyClients.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34228</commentid>
    <comment_count>4</comment_count>
      <attachid>12551</attachid>
    <who name="Lars Knoll">lars.knoll</who>
    <bug_when>2007-01-19 00:26:14 -0800</bug_when>
    <thetext>Created attachment 12551
new version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34229</commentid>
    <comment_count>5</comment_count>
      <attachid>12552</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-01-19 00:40:18 -0800</bug_when>
    <thetext>Created attachment 12552
Fixes Lars&apos; patch to compile on Mac

This patch fixes Lars&apos; latest patch to compile on Mac (changes to WebFrameLoaderClient.(h|mm) were made).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34230</commentid>
    <comment_count>6</comment_count>
      <attachid>12552</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-01-19 00:48:53 -0800</bug_when>
    <thetext>Comment on attachment 12552
Fixes Lars&apos; patch to compile on Mac

I&apos;ve confirmed that this patch causes no layout test regressions on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34104</commentid>
    <comment_count>7</comment_count>
      <attachid>12552</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-20 08:17:23 -0800</bug_when>
    <thetext>Comment on attachment 12552
Fixes Lars&apos; patch to compile on Mac

I don&apos;t think this is a good way to handle the Mac side. If the functions still exist on the bridge that&apos;s fine. But they should be called through the frame loader client. The client can call to the bridge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34018</commentid>
    <comment_count>8</comment_count>
    <who name="Lars Knoll">lars.knoll</who>
    <bug_when>2007-01-21 03:02:53 -0800</bug_when>
    <thetext>I agree, and that was the basic idea behind the change. But it was hard to change this without having a Mac at hand. Fortunately I got an iMac at work on Friday. 

So I can now move the Mac side over to the client as well. I&apos;ll prepare a new patch on Monday.

Lars</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33457</commentid>
    <comment_count>9</comment_count>
      <attachid>12610</attachid>
    <who name="Lars Knoll">lars.knoll</who>
    <bug_when>2007-01-22 11:11:13 -0800</bug_when>
    <thetext>Created attachment 12610
new patch refactoring also the Mac code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33435</commentid>
    <comment_count>10</comment_count>
    <who name="Lars Knoll">lars.knoll</who>
    <bug_when>2007-01-22 11:27:12 -0800</bug_when>
    <thetext>My last patch compiles on the Mac and passes the regression tests. It makes Frames work for the Qt build, although it still has some smaller issues there (failing some frame related dom tests).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33179</commentid>
    <comment_count>11</comment_count>
      <attachid>12610</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-01-23 01:44:45 -0800</bug_when>
    <thetext>Comment on attachment 12610
new patch refactoring also the Mac code

r=me but please fix the following:

1) &quot;pieced&quot; in the ChangeLog should be &quot;pieces&quot;
2) The below should use HTMLFrameElementBase.

+        HTMLFrameElement* o = static_cast&lt;HTMLFrameElement*&gt;(ownerElement);

Also please test Java since the LayoutTests don&apos;t cover it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33180</commentid>
    <comment_count>12</comment_count>
      <attachid>12552</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-01-23 01:46:31 -0800</bug_when>
    <thetext>Comment on attachment 12552
Fixes Lars&apos; patch to compile on Mac

removing review flag and obsoleting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33071</commentid>
    <comment_count>13</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-01-23 07:25:50 -0800</bug_when>
    <thetext>Please include Bugzilla bug numbers in ChangeLog entries in the future.  Thanks!

Fixed in r19042.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12533</attachid>
            <date>2007-01-18 07:26:17 -0800</date>
            <delta_ts>2007-01-19 00:40:18 -0800</delta_ts>
            <desc>see bug description</desc>
            <filename>diff</filename>
            <type>text/plain</type>
            <size>25797</size>
            <attacher name="Lars Knoll">lars.knoll</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODkzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDctMDEtMTggIExhcnMgS25vbGwgPGxhcnNAdHJvbGx0ZWNoLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZXQg
ZnJhbWVzZXRzIHRvIHNob3cgdXAgaW4gdGhlIFF0IGJ1aWxkLgorCisgICAgICAgIFBhcnRseSBt
b3ZlZCBzb21lIG1ldGhvZHMgdGhhdCBhcmUgcGxhdGZvcm0gZGVwZW5kZW50IGluIHRoZSBGcmFt
ZUxvYWRlcgorICAgICAgICBpbnRvIEZyYW1lTG9hZGVyQ2xpZW50LiBPbmNlIHRoZSBNYWMgaW1w
bGVtZW50YXRpb24gaGFzIGZvbGxvd2VkLCB3ZQorICAgICAgICBjYW4gZ2V0IHJpZCBvZiBjcmVh
dGVGcmFtZSBldC5hbC4gaW4gRnJhbWVMb2FkZXIKKworICAgICAgICAqIGxvYWRlci9GcmFtZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKToK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVM
b2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oOgorICAg
ICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBsb2FkZXIvbWFjL0ZyYW1lTG9hZGVyTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNyZWF0ZUZyYW1lKToKKyAgICAgICAg
KiBsb2FkZXIvcXQvRnJhbWVMb2FkZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6Y3JlYXRlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om9iamVj
dENvbnRlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjcmVhdGVQbHVn
aW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNyZWF0ZUphdmFBcHBsZXRXaWRn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om92ZXJyaWRlTWVkaWFUeXBlKToK
KwogMjAwNy0wMS0xOCAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFubkBrZGUub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFphY2suCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lv
biAxODkzMikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTEZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVk
ZSAiSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSWNvbkxvYWRlci5oIgpAQCAtMzk3LDcgKzM5
OCwyMyBAQCBib29sIEZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJhbWUoSFRNTEZyYW1lCiAKIEZyYW1l
KiBGcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJF
bGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiByZWZlcnJlcikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBjcmVhdGVGcmFtZSh1cmwsIG5hbWUs
IG93bmVyRWxlbWVudCwgcmVmZXJyZXIpOworICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5nID0gdHJ1
ZTsKKyAgICBpbnQgbWFyZ2luV2lkdGggPSAtMTsKKyAgICBpbnQgbWFyZ2luSGVpZ2h0ID0gLTE7
CisgICAgaWYgKG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgb3duZXJFbGVt
ZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKKyAgICAgICAgSFRNTEZyYW1lRWxlbWVudCog
byA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnQqPihvd25lckVsZW1lbnQpOworICAgICAg
ICBhbGxvd3NTY3JvbGxpbmcgPSBvLT5zY3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlz
T2ZmOworICAgICAgICBtYXJnaW5XaWR0aCA9IG8tPmdldE1hcmdpbldpZHRoKCk7CisgICAgICAg
IG1hcmdpbkhlaWdodCA9IG8tPmdldE1hcmdpbkhlaWdodCgpOworICAgIH0KKworICAgIGJvb2wg
aGlkZVJlZmVycmVyOworICAgIGlmICghY2FuTG9hZCh1cmwsIHJlZmVycmVyLCBoaWRlUmVmZXJy
ZXIpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEZyYW1lKiBmcmFtZSA9IGNyZWF0ZUZyYW1l
KHVybCwgbmFtZSwgb3duZXJFbGVtZW50LCBoaWRlUmVmZXJyZXIgPyBTdHJpbmcoKSA6IHJlZmVy
cmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93c1Njcm9sbGluZywgbWFy
Z2luV2lkdGgsIG1hcmdpbkhlaWdodCk7CisKICAgICBpZiAoIWZyYW1lKSAgewogICAgICAgICBj
aGVja0VtaXRMb2FkRXZlbnQoKTsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmgJKHJldmlzaW9uIDE4OTMyKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtODIsMTAgKzgyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFRpbWVyOwogCi0gICAgZW51bSBPYmplY3RD
b250ZW50VHlwZSB7Ci0gICAgICAgIE9iamVjdENvbnRlbnROb25lLCBPYmplY3RDb250ZW50SW1h
Z2UsIE9iamVjdENvbnRlbnRGcmFtZSwgT2JqZWN0Q29udGVudFBsdWdpbgotICAgIH07Ci0KICAg
ICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFJlc291cmNlTG9hZGVyPiA+IFJlc291cmNlTG9hZGVy
U2V0OwogCiAgICAgYm9vbCBpc0JhY2tGb3J3YXJkTG9hZFR5cGUoRnJhbWVMb2FkVHlwZSk7CkBA
IC0yODEsNyArMjc3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVybFNl
bGVjdGVkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBFdmVudCopOwogICAgICAgCiAgICAgICAg
IGJvb2wgcmVxdWVzdEZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYg
VVJMLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSk7Ci0gICAgICAgIEZyYW1lKiBjcmVh
dGVGcmFtZShjb25zdCBLVVJMJiBVUkwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiwgY29uc3QgU3RyaW5nJiByZWZlcnJlcik7CisgICAgICAgIEZyYW1lKiBjcmVh
dGVGcmFtZShjb25zdCBLVVJMJiBVUkwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5I
ZWlnaHQpOwogICAgICAgICBGcmFtZSogbG9hZFN1YmZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVu
dCosIGNvbnN0IEtVUkwmIFVSTCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHJl
ZmVycmVyKTsKIAogICAgICAgICB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgY2hhciogYWN0aW9uLCBj
b25zdCBTdHJpbmcmIFVSTCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4sIGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LCBF
dmVudCopOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAxODkz
MikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDkgQEAKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRfaAogCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDYgKzUyLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKICAgICBjbGFzcyBS
ZXNvdXJjZVJlc3BvbnNlOwogICAgIGNsYXNzIFN0cmluZzsKKyAgICBjbGFzcyBIVE1MRnJhbWVP
d25lckVsZW1lbnQ7CisgICAgY2xhc3MgV2lkZ2V0OworICAgIGNsYXNzIEludFNpemU7CiAKICAg
ICB0eXBlZGVmIHZvaWQgKEZyYW1lTG9hZGVyOjoqRnJhbWVQb2xpY3lGdW5jdGlvbikoUG9saWN5
QWN0aW9uKTsKIApAQCAtMTc5LDYgKzE4NCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzYXZlRG9jdW1lbnRWaWV3VG9QYWdlQ2FjaGUoUGFnZUNhY2hlKikg
PSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ2FjaGVQYWdlKCkgY29uc3QgPSAwOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgPSAwOworCisgICAgICAgIHZpcnR1
YWwgRnJhbWUgKmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3Jv
bGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkgPSAwOworICAgICAgICB2
aXJ0dWFsIFdpZGdldCogY3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYpID0g
MDsKKyAgICAgICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3Qg
SW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpID0gMDsK
KworICAgICAgICB2aXJ0dWFsIE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgPSAwOworICAgICAgICB2aXJ0
dWFsIFN0cmluZyBvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0ID0gMDsKKwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyVHlw
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVzLmgJKHJl
dmlzaW9uIDE4OTMyKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IE5hdmlnYXRpb25UeXBlT3RoZXIKICAgICB9OwogCisgICAgZW51bSBPYmplY3RDb250ZW50VHlw
ZSB7CisgICAgICAgIE9iamVjdENvbnRlbnROb25lLAorICAgICAgICBPYmplY3RDb250ZW50SW1h
Z2UsCisgICAgICAgIE9iamVjdENvbnRlbnRGcmFtZSwKKyAgICAgICAgT2JqZWN0Q29udGVudFBs
dWdpbgorICAgIH07CiB9CiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9sb2FkZXIvbWFjL0ZyYW1l
TG9hZGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL21hYy9GcmFtZUxvYWRl
ck1hYy5tbQkocmV2aXNpb24gMTg5MzIpCisrKyBXZWJDb3JlL2xvYWRlci9tYWMvRnJhbWVMb2Fk
ZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTkyLDE4ICs5Miw5IEBAIHZvaWQgRnJhbWVMb2Fk
ZXI6OmRpZENoYW5nZVRpdGxlKERvY3VtZW4KICAgICAgICAgfQogfQogCi1GcmFtZSogRnJhbWVM
b2FkZXI6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBI
VE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiByZWZlcnJl
cikKK0ZyYW1lKiBGcmFtZUxvYWRlcjo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9v
bCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkKIHsK
LSAgICBCT09MIGFsbG93c1Njcm9sbGluZyA9IFlFUzsKLSAgICBpbnQgbWFyZ2luV2lkdGggPSAt
MTsKLSAgICBpbnQgbWFyZ2luSGVpZ2h0ID0gLTE7Ci0gICAgaWYgKG93bmVyRWxlbWVudC0+aGFz
VGFnTmFtZShmcmFtZVRhZykgfHwgb3duZXJFbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykp
IHsKLSAgICAgICAgSFRNTEZyYW1lRWxlbWVudCogbyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVs
ZW1lbnQqPihvd25lckVsZW1lbnQpOwotICAgICAgICBhbGxvd3NTY3JvbGxpbmcgPSBvLT5zY3Jv
bGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmOwotICAgICAgICBtYXJnaW5XaWR0aCA9
IG8tPmdldE1hcmdpbldpZHRoKCk7Ci0gICAgICAgIG1hcmdpbkhlaWdodCA9IG8tPmdldE1hcmdp
bkhlaWdodCgpOwotICAgIH0KLQogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAg
ICAKICAgICByZXR1cm4gW01hYyhtX2ZyYW1lKS0+YnJpZGdlKCkgY3JlYXRlQ2hpbGRGcmFtZU5h
bWVkOm5hbWUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL3F0L0ZyYW1lTG9hZGVyUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL3F0L0ZyYW1lTG9hZGVyUXQuY3BwCShyZXZpc2lvbiAx
ODkzMikKKysrIFdlYkNvcmUvbG9hZGVyL3F0L0ZyYW1lTG9hZGVyUXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MCwzNCArODAsMzEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogCi1GcmFtZSog
RnJhbWVMb2FkZXI6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiBy
ZWZlcnJlcikKK0ZyYW1lKiBGcmFtZUxvYWRlcjo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50
LCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdp
bldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVGcmFtZSh1cmwsIG5hbWUsIG93
bmVyRWxlbWVudCwgcmVmZXJyZXIsIGFsbG93c1Njcm9sbGluZywgbWFyZ2luV2lkdGgsIG1hcmdp
bkhlaWdodCk7CiB9CiAKLU9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyOjpvYmplY3RDb250
ZW50VHlwZShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK09iamVjdENvbnRl
bnRUeXBlIEZyYW1lTG9hZGVyOjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gT2JqZWN0Q29udGVudFR5cGUoKTsKKyAgICByZXR1cm4gbV9jbGllbnQtPm9iamVjdENvbnRl
bnRUeXBlKHVybCwgbWltZVR5cGUpOwogfQogCi1XaWRnZXQqIEZyYW1lTG9hZGVyOjpjcmVhdGVQ
bHVnaW4oRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikKK1dpZGdldCogRnJhbWVMb2FkZXI6OmNy
ZWF0ZVBsdWdpbihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVQbHVnaW4o
ZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUpOwogfQogCi1X
aWRnZXQqIEZyYW1lTG9hZGVyOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUm
LCBFbGVtZW50KiwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKQorV2lkZ2V0KiBGcmFt
ZUxvYWRlcjo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiBzaXplLCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgYXJncykKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2NsaWVudC0+
Y3JlYXRlSmF2YUFwcGxldFdpZGdldChzaXplLCBlbGVtZW50LCBhcmdzKTsKIH0KIAogU3RyaW5n
IEZyYW1lTG9hZGVyOjpvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0CiB7Ci0gICAgLy8gbm8tb3AK
LSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fY2xpZW50LT5vdmVycmlkZU1lZGlh
VHlwZSgpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpwYXJ0Q2xlYXJlZEluQmVnaW4oKQpJbmRl
eDogV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxODkzNCkKKysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMSBAQAorMjAwNy0wMS0xOCAgTGFycyBLbm9sbCA8bGFyc0B0cm9sbHRlY2guY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN0dWJz
IGZvciB0aGUgbmV3IEZyYW1lTG9hZGVyQ2xpZW50IG1ldGhvZHMuCisgICAgICAgIFJlbW92ZWQg
YSBjaGVjayBpbiBjcmVhdGVDaGlsZEZyYW1lTmFtZWQgdGhhdCBoYXMgbm93IGJlZW4KKyAgICAg
ICAgbW92ZWQgdG8gRnJhbWVMb2FkZXI6OmxvYWRTdWJGcmFtZQorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW06CisgICAgICAgICgtW1dlYkZyYW1lQnJpZGdlIGNy
ZWF0ZUNoaWxkRnJhbWVOYW1lZDp3aXRoVVJMOnJlZmVycmVyOm93bmVyRWxlbWVudDphbGxvd3NT
Y3JvbGxpbmc6bWFyZ2luV2lkdGg6bWFyZ2luSGVpZ2h0Ol0pOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6
Y3JlYXRlRnJhbWUpOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6Om9iamVjdENvbnRl
bnRUeXBlKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4pOgor
ICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQpOgor
ICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6Om92ZXJyaWRlTWVkaWFUeXBlKToKKwogMjAw
Ny0wMS0xNyAgQWxpY2UgTGl1ICA8YWxpY2UubGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBIYXJyaXNvbi4KSW5kZXg6IFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJy
aWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlk
Z2UubW0JKHJldmlzaW9uIDE4OTMyKQorKysgV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
QnJpZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zODksMTAgKzM4OSw2IEBAIE5TU3RyaW5nICpX
ZWJQbHVnaW5Db250YWluZXJLZXkgPSAgIEAiV2UKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXJnaW5XaWR0aDooaW50KXdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXJnaW5IZWlnaHQ6KGludCloZWlnaHQKIHsKLSAgICBib29sIGhpZGVSZWZlcnJl
cjsKLSAgICBpZiAoIW1fZnJhbWUtPmxvYWRlcigpLT5jYW5Mb2FkKFVSTCwgcmVmZXJyZXIsIGhp
ZGVSZWZlcnJlcikpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAgQVNTRVJUKF9mcmFtZSk7CiAg
ICAgCiAgICAgV2ViRnJhbWVWaWV3ICpjaGlsZFZpZXcgPSBbW1dlYkZyYW1lVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsMCwwLDApXTsKQEAgLTQxMSw3ICs0MDcsNyBAQCBO
U1N0cmluZyAqV2ViUGx1Z2luQ29udGFpbmVyS2V5ID0gICBAIldlCiAKICAgICBSZWZQdHI8RnJh
bWU+IG5ld0ZyYW1lID0gW25ld0JyaWRnZSBfZnJhbWVdOwogICAgIAotICAgIFtfZnJhbWUgX2xv
YWRVUkw6VVJMIHJlZmVycmVyOihoaWRlUmVmZXJyZXIgPyBTdHJpbmcoKSA6IHJlZmVycmVyKSBp
bnRvQ2hpbGQ6a2l0KG5ld0ZyYW1lLmdldCgpKV07CisgICAgW19mcmFtZSBfbG9hZFVSTDpVUkwg
cmVmZXJyZXI6cmVmZXJyZXIgaW50b0NoaWxkOmtpdChuZXdGcmFtZS5nZXQoKSldOwogCiAgICAg
Ly8gVGhlIGZyYW1lJ3Mgb25sb2FkIGhhbmRsZXIgbWF5IGhhdmUgcmVtb3ZlZCBpdCBmcm9tIHRo
ZSBkb2N1bWVudC4KICAgICBpZiAoIW5ld0ZyYW1lLT50cmVlKCktPnBhcmVudCgpKQpJbmRleDog
V2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9u
IDE4OTMyKQorKysgV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3OSw2ICsxNzksMTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVy
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRU
aXRsZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHRpdGxlLCBjb25zdCBXZWJDb3JlOjpLVVJMJik7
CiAKKyAgICB2aXJ0dWFsIEZyYW1lICpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBh
bGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCk7CisgICAg
dmlydHVhbCBXaWRnZXQqIGNyZWF0ZVBsdWdpbihFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmKTsK
KyAgICB2aXJ0dWFsIFdpZGdldCogY3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXpl
JiwgRWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik7CisgICAgCisgICAg
dmlydHVhbCBPYmplY3RDb250ZW50VHlwZSBvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgIHZpcnR1YWwgU3RyaW5nIG92ZXJyaWRl
TWVkaWFUeXBlKCkgY29uc3Q7CisgICAgCisKICAgICB2b2lkIGRlbGl2ZXJBcmNoaXZlZFJlc291
cmNlc0FmdGVyRGVsYXkoKSBjb25zdDsKICAgICBib29sIGNhblVzZUFyY2hpdmVkUmVzb3VyY2Uo
TlNVUkxSZXF1ZXN0ICopIGNvbnN0OwogICAgIGJvb2wgY2FuVXNlQXJjaGl2ZWRSZXNvdXJjZShO
U1VSTFJlc3BvbnNlICopIGNvbnN0OwpJbmRleDogV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5tbQkocmV2aXNpb24gMTg5MzIpCisrKyBXZWJLaXQvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNTIs
NiArMTA1MiwzNiBAQCBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5DYWNoZVBhZ2UoCiAg
ICAgcmV0dXJuIFtbW21fd2ViRnJhbWUuZ2V0KCkgZGF0YVNvdXJjZV0gcmVwcmVzZW50YXRpb25d
IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxSZXByZXNlbnRhdGlvbiBjbGFzc11dOwogfQogCitGcmFt
ZSAqV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKKwkJ
CQkJIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFy
Z2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQpCit7CisgICAgLy8gc3R1YmJlZCBvdXQgdW50aWwg
dGhlIGNvZGUgaXMgbW92ZWQgaGVyZSBmcm9tIHRoZSBGcmFtZUJyaWRnZSwgYW5kIEZyYW1lTG9h
ZGVyIGxvb3NlcyB0aGUgY3JlYXRlRnJhbWUoKSBtZXRob2QKK30KKworT2JqZWN0Q29udGVudFR5
cGUgV2ViRnJhbWVMb2FkZXJDbGllbnQ6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICAvLyBzdHViYmVkIG91dCB1bnRpbCB0
aGUgY29kZSBpcyBtb3ZlZCBoZXJlIGZyb20gdGhlIEZyYW1lQnJpZGdlLCBhbmQgRnJhbWVMb2Fk
ZXIgbG9vc2VzIHRoZSBjcmVhdGVGcmFtZSgpIG1ldGhvZAorICAgIHJldHVybiBPYmplY3RDb250
ZW50VHlwZSgpOworfQorCitXaWRnZXQqIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVn
aW4oRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBzdHViYmVkIG91dCB1bnRp
bCB0aGUgY29kZSBpcyBtb3ZlZCBoZXJlIGZyb20gdGhlIEZyYW1lQnJpZGdlLCBhbmQgRnJhbWVM
b2FkZXIgbG9vc2VzIHRoZSBjcmVhdGVGcmFtZSgpIG1ldGhvZAorICAgIHJldHVybiAwOworfQor
CitXaWRnZXQqIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNv
bnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKQor
eworICAgIC8vIHN0dWJiZWQgb3V0IHVudGlsIHRoZSBjb2RlIGlzIG1vdmVkIGhlcmUgZnJvbSB0
aGUgRnJhbWVCcmlkZ2UsIGFuZCBGcmFtZUxvYWRlciBsb29zZXMgdGhlIGNyZWF0ZUZyYW1lKCkg
bWV0aG9kCisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBXZWJGcmFtZUxvYWRlckNsaWVudDo6
b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdAoreworICAgIC8vIHN0dWJiZWQgb3V0IHVudGlsIHRo
ZSBjb2RlIGlzIG1vdmVkIGhlcmUgZnJvbSB0aGUgRnJhbWVCcmlkZ2UsIGFuZCBGcmFtZUxvYWRl
ciBsb29zZXMgdGhlIGNyZWF0ZUZyYW1lKCkgbWV0aG9kCisgICAgcmV0dXJuIFN0cmluZygpOwor
fQorCiBAaW1wbGVtZW50YXRpb24gV2ViRnJhbWVQb2xpY3lMaXN0ZW5lcgogCiAtIChpZClpbml0
V2l0aFdlYkNvcmVGcmFtZTooRnJhbWUqKWZyYW1lCkluZGV4OiBXZWJLaXRRdC9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0UXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODkzNCkKKysrIFdl
YktpdFF0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDA3LTAx
LTE4ICBMYXJzIEtub2xsIDxsYXJzQHRyb2xsdGVjaC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZyYW1lTG9hZGVyQ2xpZW50
OjpjcmVhdGVGcmFtZSgpLCBzdHViIG91dCB0aGUKKyAgICAgICAgb3RoZXIgbWV0aG9kcy4KKwor
ICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lOjpRV2ViRnJh
bWUpOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWUuaDoKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1l
X3AuaDoKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2VQcml2
YXRlOjpjcmVhdGVNYWluRnJhbWUpOgorICAgICAgICAoUVdlYlBhZ2U6OmNyZWF0ZUZyYW1lKToK
KyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
UXQ6OmNhbmNlbFBvbGljeUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50UXQ6OmNyZWF0ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
UXQ6Om9iamVjdENvbnRlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50UXQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dFF0OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50UXQ6Om92ZXJyaWRlTWVkaWFUeXBlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0Lmg6CisKIDIwMDctMDEtMTggIFphY2sgUnVzaW4gIDx6YWNr
QGtkZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFycy4KSW5kZXg6IFdlYktpdFF0L0Fw
aS9xd2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFF0L0FwaS9xd2ViZnJhbWUuY3Bw
CShyZXZpc2lvbiAxODkzMikKKysrIFdlYktpdFF0L0FwaS9xd2ViZnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRnJhbWVRdENsaWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lUXQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZVJlcXVlc3QuaCIKIAogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgIlJlbmRlclRy
ZWVBc1RleHQuaCIKQEAgLTQxLDM3ICs0Miw1MCBAQAogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgog
I2luY2x1ZGUgIm9iamVjdC5oIgogCisjaW5jbHVkZSAid3RmL0hhc2hNYXAuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKLVFXZWJGcmFtZTo6UVdlYkZyYW1lKFFXZWJQYWdlICpwYXJl
bnQpCitRV2ViRnJhbWU6OlFXZWJGcmFtZShRV2ViUGFnZSAqcGFyZW50LCBRV2ViRnJhbWVEYXRh
ICpmcmFtZURhdGEpCiAgICAgOiBRU2Nyb2xsQXJlYShwYXJlbnQpCiAgICAgLCBkKG5ldyBRV2Vi
RnJhbWVQcml2YXRlKQogewogICAgIGQtPnBhZ2UgPSBwYXJlbnQ7CiAKICAgICBkLT5mcmFtZUxv
YWRlckNsaWVudCA9IG5ldyBGcmFtZUxvYWRlckNsaWVudFF0KCk7Ci0gICAgZC0+ZnJhbWUgPSBu
ZXcgRnJhbWVRdChwYXJlbnQtPmQtPnBhZ2UsIDAsIG5ldyBGcmFtZVF0Q2xpZW50KCksIGQtPmZy
YW1lTG9hZGVyQ2xpZW50KTsKKyAgICBkLT5mcmFtZSA9IG5ldyBGcmFtZVF0KHBhcmVudC0+ZC0+
cGFnZSwgZnJhbWVEYXRhLT5vd25lckVsZW1lbnQsIG5ldyBGcmFtZVF0Q2xpZW50KCksIGQtPmZy
YW1lTG9hZGVyQ2xpZW50KTsKICAgICBkLT5mcmFtZUxvYWRlckNsaWVudC0+c2V0RnJhbWUodGhp
cywgZC0+ZnJhbWUpOwogCiAgICAgZC0+ZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhkLT5mcmFt
ZSk7CiAgICAgZC0+ZnJhbWVWaWV3LT5zZXRTY3JvbGxBcmVhKHRoaXMpOwogICAgIGQtPmZyYW1l
LT5zZXRWaWV3KGQtPmZyYW1lVmlldyk7CisgICAgaWYgKCFmcmFtZURhdGEtPnVybC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoZnJhbWVEYXRhLT51cmwsIGZy
YW1lRGF0YS0+cmVmZXJyZXIpOworICAgICAgICBkLT5mcmFtZS0+bG9hZGVyKCktPmxvYWQocmVx
dWVzdCwgZnJhbWVEYXRhLT5uYW1lKTsKKyAgICB9CiB9CiAKIAotUVdlYkZyYW1lOjpRV2ViRnJh
bWUoUVdlYkZyYW1lICpwYXJlbnQpCitRV2ViRnJhbWU6OlFXZWJGcmFtZShRV2ViRnJhbWUgKnBh
cmVudCwgUVdlYkZyYW1lRGF0YSAqZnJhbWVEYXRhKQogICAgIDogUVNjcm9sbEFyZWEocGFyZW50
KQogICAgICwgZChuZXcgUVdlYkZyYW1lUHJpdmF0ZSkKIHsKICAgICBkLT5wYWdlID0gcGFyZW50
LT5kLT5wYWdlOwotLy8gICAgIGQtPmZyYW1lTG9hZGVyQ2xpZW50ID0gbmV3IEZyYW1lTG9hZGVy
Q2xpZW50UXQoKTsKLS8vICAgICBkLT5mcmFtZSA9IG5ldyBGcmFtZVF0KHBhZ2UsIDAsIG5ldyBG
cmFtZVF0Q2xpZW50KCksIGZyYW1lTG9hZGVyQ2xpZW50KTsKLS8vICAgICBkLT5mcmFtZUxvYWRl
ckNsaWVudC0+c2V0RnJhbWUoZC0+ZnJhbWUpOwotCi0vLyAgICAgZC0+ZnJhbWVWaWV3ID0gbmV3
IEZyYW1lVmlldyhkLT5mcmFtZSk7Ci0vLyAgICAgZC0+ZnJhbWVWaWV3LT5zZXRTY3JvbGxBcmVh
KHRoaXMpOwotLy8gICAgIGQtPmZyYW1lLT5zZXRWaWV3KGQtPmZyYW1lVmlldyk7CisKKyAgICBk
LT5mcmFtZUxvYWRlckNsaWVudCA9IG5ldyBGcmFtZUxvYWRlckNsaWVudFF0KCk7CisgICAgZC0+
ZnJhbWUgPSBuZXcgRnJhbWVRdChwYXJlbnQtPmQtPnBhZ2UtPmQtPnBhZ2UsIGZyYW1lRGF0YS0+
b3duZXJFbGVtZW50LCBuZXcgRnJhbWVRdENsaWVudCgpLCBkLT5mcmFtZUxvYWRlckNsaWVudCk7
CisgICAgZC0+ZnJhbWVMb2FkZXJDbGllbnQtPnNldEZyYW1lKHRoaXMsIGQtPmZyYW1lKTsKKwor
ICAgIGQtPmZyYW1lVmlldyA9IG5ldyBGcmFtZVZpZXcoZC0+ZnJhbWUpOworICAgIGQtPmZyYW1l
Vmlldy0+c2V0U2Nyb2xsQXJlYSh0aGlzKTsKKyAgICBkLT5mcmFtZS0+c2V0VmlldyhkLT5mcmFt
ZVZpZXcpOworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGZyYW1lRGF0YS0+dXJsLCBmcmFt
ZURhdGEtPnJlZmVycmVyKTsKKyAgICAKKyAgICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlID0gcGFy
ZW50LT5kLT5mcmFtZS0+bG9hZGVyKCktPmxvYWRUeXBlKCk7CisgICAgRnJhbWVMb2FkVHlwZSBj
aGlsZExvYWRUeXBlID0gRnJhbWVMb2FkVHlwZUludGVybmFsOworCisgICAgZC0+ZnJhbWUtPmxv
YWRlcigpLT5sb2FkKGZyYW1lRGF0YS0+dXJsLCBmcmFtZURhdGEtPnJlZmVycmVyLCBjaGlsZExv
YWRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoKSwgMCwgMCwgV1RG
OjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpKTsKIH0KIAogUVdlYkZyYW1lOjp+UVdlYkZyYW1l
KCkKSW5kZXg6IFdlYktpdFF0L0FwaS9xd2ViZnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRR
dC9BcGkvcXdlYmZyYW1lLmgJKHJldmlzaW9uIDE4OTMyKQorKysgV2ViS2l0UXQvQXBpL3F3ZWJm
cmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMTggQEAgY2xhc3MgUVdlYlBhZ2U7
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRRdDsKIH0K
K2NsYXNzIFFXZWJGcmFtZURhdGE7CiAKIGNsYXNzIFFXZWJGcmFtZSA6IHB1YmxpYyBRU2Nyb2xs
QXJlYQogewogICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgUVdlYkZyYW1lKFFXZWJQYWdlICpw
YXJlbnQpOwotICAgIFFXZWJGcmFtZShRV2ViRnJhbWUgKnBhcmVudCk7Citwcm90ZWN0ZWQ6Cisg
ICAgUVdlYkZyYW1lKFFXZWJQYWdlICpwYXJlbnQsIFFXZWJGcmFtZURhdGEgKmZyYW1lRGF0YSk7
CisgICAgUVdlYkZyYW1lKFFXZWJGcmFtZSAqcGFyZW50LCBRV2ViRnJhbWVEYXRhICpmcmFtZURh
dGEpOwogICAgIH5RV2ViRnJhbWUoKTsKIAorcHVibGljOgorICAgIAogICAgIFFXZWJQYWdlICpw
YWdlKCkgY29uc3Q7CiAKICAgICB2b2lkIGFkZFRvSlNXaW5kb3dPYmplY3QoY29uc3QgUUJ5dGVB
cnJheSAmbmFtZSwgUU9iamVjdCAqb2JqZWN0KTsKSW5kZXg6IFdlYktpdFF0L0FwaS9xd2ViZnJh
bWVfcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFF0L0FwaS9xd2ViZnJhbWVfcC5oCShyZXZpc2lv
biAxODkzMikKKysrIFdlYktpdFF0L0FwaS9xd2ViZnJhbWVfcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwxMSArMjUsMTUgQEAKICNpbmNsdWRlICJxd2ViZnJhbWUuaCIKICNpbmNsdWRlICJxd2Vi
cGFnZV9wLmgiCiAKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKwogbmFtZXNwYWNlIFdlYkNvcmUKIHsKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0
OwogICAgIGNsYXNzIEZyYW1lUXQ7CiAgICAgY2xhc3MgRnJhbWVWaWV3OworICAgIGNsYXNzIEhU
TUxGcmFtZU93bmVyRWxlbWVudDsKIH0KIGNsYXNzIFFXZWJQYWdlOwogCkBAIC00OCw1ICs1Miwx
NyBAQCBwdWJsaWM6CiAgICAgUVdlYlBhZ2UgKnBhZ2U7CiB9OwogCitjbGFzcyBRV2ViRnJhbWVE
YXRhCit7CitwdWJsaWM6CisgICAgV2ViQ29yZTo6S1VSTCB1cmw7CisgICAgV2ViQ29yZTo6U3Ry
aW5nIG5hbWU7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1l
bnQ7CisgICAgCisgICAgV2ViQ29yZTo6U3RyaW5nIHJlZmVycmVyOworICAgIGJvb2wgYWxsb3dz
U2Nyb2xsaW5nOworICAgIGludCBtYXJnaW5XaWR0aDsKKyAgICBpbnQgbWFyZ2luSGVpZ2h0OyAg
ICAKK307CiAKICNlbmRpZgpJbmRleDogV2ViS2l0UXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRRdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiAxODkzMikKKysrIFdl
YktpdFF0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDEyIEBA
IFFXZWJQYWdlUHJpdmF0ZTo6flFXZWJQYWdlUHJpdmF0ZSgpCiB2b2lkIFFXZWJQYWdlUHJpdmF0
ZTo6Y3JlYXRlTWFpbkZyYW1lKCkKIHsKICAgICBpZiAoIW1haW5GcmFtZSkgewotICAgICAgICBt
YWluRnJhbWUgPSBxLT5jcmVhdGVGcmFtZSgwKTsKKyAgICAgICAgUVdlYkZyYW1lRGF0YSBmcmFt
ZURhdGE7CisgICAgICAgIGZyYW1lRGF0YS5vd25lckVsZW1lbnQgPSAwOworICAgICAgICBmcmFt
ZURhdGEuYWxsb3dzU2Nyb2xsaW5nID0gdHJ1ZTsKKyAgICAgICAgZnJhbWVEYXRhLm1hcmdpbldp
ZHRoID0gNTsKKyAgICAgICAgZnJhbWVEYXRhLm1hcmdpbkhlaWdodCA9IDU7CisgICAgICAgIG1h
aW5GcmFtZSA9IHEtPmNyZWF0ZUZyYW1lKDAsICZmcmFtZURhdGEpOwogICAgICAgICBsYXlvdXQt
PmFkZFdpZGdldChtYWluRnJhbWUpOwogICAgIH0KIH0KQEAgLTc3LDExICs4MiwxMSBAQCBRV2Vi
UGFnZTo6flFXZWJQYWdlKCkKICAgICBkZWxldGUgZDsKIH0KIAotUVdlYkZyYW1lICpRV2ViUGFn
ZTo6Y3JlYXRlRnJhbWUoUVdlYkZyYW1lICpwYXJlbnRGcmFtZSkKK1FXZWJGcmFtZSAqUVdlYlBh
Z2U6OmNyZWF0ZUZyYW1lKFFXZWJGcmFtZSAqcGFyZW50RnJhbWUsIFFXZWJGcmFtZURhdGEgKmZy
YW1lRGF0YSkKIHsKICAgICBpZiAocGFyZW50RnJhbWUpCi0gICAgICAgIHJldHVybiBuZXcgUVdl
YkZyYW1lKHBhcmVudEZyYW1lKTsKLSAgICByZXR1cm4gbmV3IFFXZWJGcmFtZSh0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBRV2ViRnJhbWUocGFyZW50RnJhbWUsIGZyYW1lRGF0YSk7CisgICAg
cmV0dXJuIG5ldyBRV2ViRnJhbWUodGhpcywgZnJhbWVEYXRhKTsKIH0KIAogdm9pZCBRV2ViUGFn
ZTo6b3Blbihjb25zdCBRVXJsICZ1cmwpCkluZGV4OiBXZWJLaXRRdC9BcGkvcXdlYnBhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRRdC9BcGkvcXdlYnBhZ2UuaAkocmV2aXNpb24gMTg5MzIpCisr
KyBXZWJLaXRRdC9BcGkvcXdlYnBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsMTEg
QEAgY2xhc3MgUVdlYkZyYW1lOwogY2xhc3MgUVVybDsKIAogY2xhc3MgUVdlYlBhZ2VQcml2YXRl
OworY2xhc3MgUVdlYkZyYW1lRGF0YTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNz
IEZyYW1lTG9hZGVyQ2xpZW50UXQ7Cit9CiAKIGNsYXNzIFFXZWJQYWdlIDogcHVibGljIFFXaWRn
ZXQKIHsKQEAgLTM2LDggKzQxLDYgQEAgcHVibGljOgogICAgIFFXZWJQYWdlKFFXaWRnZXQgKnBh
cmVudCk7CiAgICAgflFXZWJQYWdlKCk7CiAKLSAgICB2aXJ0dWFsIFFXZWJGcmFtZSAqY3JlYXRl
RnJhbWUoUVdlYkZyYW1lICpwYXJlbnRGcmFtZSk7Ci0gICAgLy92aXJ0dWFsIFFXZWJQYWdlICpj
cmVhdGVQYWdlKC4uLik7CiAKICAgICB2b2lkIG9wZW4oY29uc3QgUVVybCAmdXJsKTsKIApAQCAt
NjUsOSArNjgsMTQgQEAgc2lnbmFsczoKICAgICAgKi8KICAgICB2b2lkIGxvYWRGaW5pc2hlZChR
V2ViRnJhbWUgKmZyYW1lKTsKIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgUVdlYkZyYW1lICpj
cmVhdGVGcmFtZShRV2ViRnJhbWUgKnBhcmVudEZyYW1lLCBRV2ViRnJhbWVEYXRhICpmcmFtZURh
dGEpOworICAgIC8vdmlydHVhbCBRV2ViUGFnZSAqY3JlYXRlUGFnZSguLi4pOwogICAgCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBRV2ViRnJhbWU7CisgICAgZnJpZW5kIGNsYXNzIFFXZWJQ
YWdlUHJpdmF0ZTsKKyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRR
dDsKICAgICBRV2ViUGFnZVByaXZhdGUgKmQ7CiB9OwogCkluZGV4OiBXZWJLaXRRdC9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRRdC9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkocmV2aXNpb24gMTg5MzIpCisr
KyBXZWJLaXRRdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBS
dXNpbiA8emFja0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xs
dGVjaCBBU0EKICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTI1LDE2ICsyNiwx
OCBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCi0gCisKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgogCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKICNpbmNsdWRlICJxd2ViZnJh
bWUuaCIKKyNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgogCiAjaW5jbHVkZSAicWRlYnVnLmgiCiAK
QEAgLTM1NSw2ICszNTgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoU2hv
dygpCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y2FuY2VsUG9saWN5Q2hlY2soKQogewor
ICAgIHFEZWJ1ZygpIDw8ICJGcmFtZUxvYWRlckNsaWVudFF0OjpjYW5jZWxQb2xpY3lDaGVjayI7
CiAgICAgbV9wb2xpY3lGdW5jdGlvbiA9IDA7CiB9CiAKQEAgLTc2NSw2ICs3NjksNDggQEAgYm9v
bCBGcmFtZUxvYWRlckNsaWVudFF0Ojp3aWxsVXNlQXJjaGl2ZQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorRnJhbWUgKkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxl
bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQg
bWFyZ2luSGVpZ2h0KQoreworICAgIHFEZWJ1ZygpIDw8ICI+Pj4+Pj4+Pj4+PiBjcmVhdGVGcmFt
ZSI7CisgICAgUVdlYkZyYW1lRGF0YSBmcmFtZURhdGE7CisgICAgZnJhbWVEYXRhLnVybCA9IHVy
bDsKKyAgICBmcmFtZURhdGEubmFtZSA9IG5hbWU7CisgICAgZnJhbWVEYXRhLm93bmVyRWxlbWVu
dCA9IG93bmVyRWxlbWVudDsKKyAgICBmcmFtZURhdGEucmVmZXJyZXIgPSByZWZlcnJlcjsKKyAg
ICBmcmFtZURhdGEuYWxsb3dzU2Nyb2xsaW5nID0gYWxsb3dzU2Nyb2xsaW5nOworICAgIGZyYW1l
RGF0YS5tYXJnaW5XaWR0aCA9IG1hcmdpbldpZHRoOworICAgIGZyYW1lRGF0YS5tYXJnaW5IZWln
aHQgPSBtYXJnaW5IZWlnaHQ7CisgICAgICAgIAorCisgICAgUVdlYkZyYW1lICp3ZWJGcmFtZSA9
IG1fd2ViRnJhbWUtPnBhZ2UoKS0+Y3JlYXRlRnJhbWUobV93ZWJGcmFtZSwgJmZyYW1lRGF0YSk7
CisgICAgcmV0dXJuIHdlYkZyYW1lLT5kLT5mcmFtZTsKK30KKworT2JqZWN0Q29udGVudFR5cGUg
RnJhbWVMb2FkZXJDbGllbnRRdDo6b2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIE9iamVjdENvbnRlbnRUeXBlKCk7Cit9CisKK1dpZGdldCogRnJhbWVMb2FkZXJDbGllbnRR
dDo6Y3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVu
dFF0OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBGcmFtZUxvYWRlckNsaWVudFF0OjpvdmVycmlkZU1l
ZGlhVHlwZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKIH0KIAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50UXQubW9jIgpJbmRl
eDogV2ViS2l0UXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFF0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAkocmV2
aXNpb24gMTg5MzIpCisrKyBXZWJLaXRRdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIE5hdmlnYXRpb25BY3Rpb247CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNs
YXNzIFJlc291cmNlTG9hZGVyOwotCisgICAgCiAgICAgc3RydWN0IExvYWRFcnJvclJlc2V0VG9r
ZW47CiAKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0IDogcHVibGljIFFPYmplY3QsIHB1
YmxpYyBGcmFtZUxvYWRlckNsaWVudCB7CkBAIC0yMDYsNiArMjA2LDE0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc1N0YXJ0ZWROb3RpZmlj
YXRpb24oKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdl
ZE5vdGlmaWNhdGlvbigpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2dyZXNzRmluaXNo
ZWROb3RpZmljYXRpb24oKTsKKworICAgICAgICB2aXJ0dWFsIEZyYW1lICpjcmVhdGVGcmFtZShj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50
KiBvd25lckVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgs
IGludCBtYXJnaW5IZWlnaHQpIDsKKyAgICAgICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0ZVBsdWdp
bihFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCBXaWRnZXQqIGNy
ZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiYpOworCisgICAgICAgIHZpcnR1YWwgT2JqZWN0Q29udGVudFR5
cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKTsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdDsK
ICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBub3QgYmUg
aGVyZSwgYnV0IGl0J3MgbmVlZGVkIGZvciB0aGUgdGVzdHMgY3VycmVudGx5CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBwYXJ0Q2xlYXJlZEluQmVnaW4oKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12551</attachid>
            <date>2007-01-19 00:26:14 -0800</date>
            <delta_ts>2007-01-19 00:40:18 -0800</delta_ts>
            <desc>new version</desc>
            <filename>webkit_framesets.diff</filename>
            <type>text/plain</type>
            <size>27461</size>
            <attacher name="Lars Knoll">lars.knoll</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODkzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDctMDEtMTkgIExhcnMgS25vbGwgPGxhcnNAdHJvbGx0ZWNoLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZXQg
ZnJhbWVzZXRzIHRvIHNob3cgdXAgaW4gdGhlIFF0IGJ1aWxkLgorCisgICAgICAgIFBhcnRseSBt
b3ZlZCBzb21lIG1ldGhvZHMgdGhhdCBhcmUgcGxhdGZvcm0gZGVwZW5kZW50IGluIHRoZSBGcmFt
ZUxvYWRlcgorICAgICAgICBpbnRvIEZyYW1lTG9hZGVyQ2xpZW50LiBPbmNlIHRoZSBNYWMgaW1w
bGVtZW50YXRpb24gaGFzIGZvbGxvd2VkLCB3ZQorICAgICAgICBjYW4gZ2V0IHJpZCBvZiBjcmVh
dGVGcmFtZSBldC5hbC4gaW4gRnJhbWVMb2FkZXIKKworICAgICAgICAqIGxvYWRlci9GcmFtZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKToK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVM
b2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oOgorICAg
ICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBsb2FkZXIvbWFjL0ZyYW1lTG9hZGVyTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNyZWF0ZUZyYW1lKToKKyAgICAgICAg
KiBsb2FkZXIvcXQvRnJhbWVMb2FkZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6Y3JlYXRlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om9iamVj
dENvbnRlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjcmVhdGVQbHVn
aW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNyZWF0ZUphdmFBcHBsZXRXaWRn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om92ZXJyaWRlTWVkaWFUeXBlKToK
KwogMjAwNy0wMS0xOCAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFubkBrZGUub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFphY2suCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lv
biAxODkzMikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhp
c3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TEZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxP
YmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKQEAgLTM5Nyw3ICszOTgs
MjMgQEAgYm9vbCBGcmFtZUxvYWRlcjo6cmVxdWVzdEZyYW1lKEhUTUxGcmFtZQogCiBGcmFtZSog
RnJhbWVMb2FkZXI6OmxvYWRTdWJmcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxl
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
cmVmZXJyZXIpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gY3JlYXRlRnJhbWUodXJsLCBuYW1lLCBv
d25lckVsZW1lbnQsIHJlZmVycmVyKTsKKyAgICBib29sIGFsbG93c1Njcm9sbGluZyA9IHRydWU7
CisgICAgaW50IG1hcmdpbldpZHRoID0gLTE7CisgICAgaW50IG1hcmdpbkhlaWdodCA9IC0xOwor
ICAgIGlmIChvd25lckVsZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IG93bmVyRWxlbWVu
dC0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7CisgICAgICAgIEhUTUxGcmFtZUVsZW1lbnQqIG8g
PSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50Kj4ob3duZXJFbGVtZW50KTsKKyAgICAgICAg
YWxsb3dzU2Nyb2xsaW5nID0gby0+c2Nyb2xsaW5nTW9kZSgpICE9IFNjcm9sbGJhckFsd2F5c09m
ZjsKKyAgICAgICAgbWFyZ2luV2lkdGggPSBvLT5nZXRNYXJnaW5XaWR0aCgpOworICAgICAgICBt
YXJnaW5IZWlnaHQgPSBvLT5nZXRNYXJnaW5IZWlnaHQoKTsKKyAgICB9CisKKyAgICBib29sIGhp
ZGVSZWZlcnJlcjsKKyAgICBpZiAoIWNhbkxvYWQodXJsLCByZWZlcnJlciwgaGlkZVJlZmVycmVy
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGcmFtZSogZnJhbWUgPSBjcmVhdGVGcmFtZSh1
cmwsIG5hbWUsIG93bmVyRWxlbWVudCwgaGlkZVJlZmVycmVyID8gU3RyaW5nKCkgOiByZWZlcnJl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd3NTY3JvbGxpbmcsIG1hcmdp
bldpZHRoLCBtYXJnaW5IZWlnaHQpOworCiAgICAgaWYgKCFmcmFtZSkgIHsKICAgICAgICAgY2hl
Y2tFbWl0TG9hZEV2ZW50KCk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtNDIyMSw1ICs0MjM4LDMz
IEBAIFN0cmluZyBGcmFtZUxvYWRlcjo6cmVmZXJyZXIoKSBjb25zdAogICAgIHJldHVybiBkb2N1
bWVudExvYWRlcigpLT5yZXF1ZXN0KCkuaHR0cFJlZmVycmVyKCk7CiB9CiAKKyNpZiAhUExBVEZP
Uk0oTUFDKQorRnJhbWUqIEZyYW1lTG9hZGVyOjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQs
IGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2lu
V2lkdGgsIGludCBtYXJnaW5IZWlnaHQpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVG
cmFtZSh1cmwsIG5hbWUsIG93bmVyRWxlbWVudCwgcmVmZXJyZXIsIGFsbG93c1Njcm9sbGluZywg
bWFyZ2luV2lkdGgsIG1hcmdpbkhlaWdodCk7Cit9CisKK09iamVjdENvbnRlbnRUeXBlIEZyYW1l
TG9hZGVyOjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5vYmplY3RDb250ZW50VHlwZSh1cmws
IG1pbWVUeXBlKTsKK30KKworV2lkZ2V0KiBGcmFtZUxvYWRlcjo6Y3JlYXRlUGx1Z2luKEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVQbHVn
aW4oZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUpOworfQor
CitXaWRnZXQqIEZyYW1lTG9hZGVyOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNp
emUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiBhcmdzKQoreworICAgIHJldHVybiBtX2NsaWVudC0+Y3JlYXRlSmF2YUFwcGxldFdpZGdldChz
aXplLCBlbGVtZW50LCBhcmdzKTsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyOjpvdmVycmlkZU1l
ZGlhVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5vdmVycmlkZU1lZGlhVHlw
ZSgpOworfQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuaAkocmV2aXNpb24gMTg5MzIpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMCArODIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVGltZXI7CiAKLSAgICBlbnVtIE9iamVj
dENvbnRlbnRUeXBlIHsKLSAgICAgICAgT2JqZWN0Q29udGVudE5vbmUsIE9iamVjdENvbnRlbnRJ
bWFnZSwgT2JqZWN0Q29udGVudEZyYW1lLCBPYmplY3RDb250ZW50UGx1Z2luCi0gICAgfTsKLQog
ICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+ID4gUmVzb3VyY2VMb2Fk
ZXJTZXQ7CiAKICAgICBib29sIGlzQmFja0ZvcndhcmRMb2FkVHlwZShGcmFtZUxvYWRUeXBlKTsK
QEAgLTI4MSw3ICsyNzcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdXJs
U2VsZWN0ZWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIEV2ZW50Kik7CiAgICAgICAKICAgICAg
ICAgYm9vbCByZXF1ZXN0RnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3QgU3RyaW5n
JiBVUkwsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lKTsKLSAgICAgICAgRnJhbWUqIGNy
ZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIFVSTCwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVP
d25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKTsKKyAgICAgICAgRnJhbWUqIGNy
ZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIFVSTCwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVP
d25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdp
bkhlaWdodCk7CiAgICAgICAgIEZyYW1lKiBsb2FkU3ViZnJhbWUoSFRNTEZyYW1lT3duZXJFbGVt
ZW50KiwgY29uc3QgS1VSTCYgVVJMLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
cmVmZXJyZXIpOwogCiAgICAgICAgIHZvaWQgc3VibWl0Rm9ybShjb25zdCBjaGFyKiBhY3Rpb24s
IGNvbnN0IFN0cmluZyYgVVJMLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiwgY29uc3QgU3RyaW5nJiB0
YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91bmRhcnks
IEV2ZW50Kik7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDE4
OTMyKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksOSBAQAogI2RlZmluZSBGcmFtZUxvYWRlckNsaWVudF9oCiAKICNpbmNs
dWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNiArNDMsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgRnJhbWVMb2Fk
ZXI7CiAgICAgY2xhc3MgSGlzdG9yeUl0ZW07CisgICAgY2xhc3MgSFRNTEZyYW1lT3duZXJFbGVt
ZW50OworICAgIGNsYXNzIEludFNpemU7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBOYXZp
Z2F0aW9uQWN0aW9uOwogICAgIGNsYXNzIFBhZ2VDYWNoZTsKQEAgLTUwLDYgKzU0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKICAgICBjbGFzcyBS
ZXNvdXJjZVJlc3BvbnNlOwogICAgIGNsYXNzIFN0cmluZzsKKyAgICBjbGFzcyBXaWRnZXQ7CiAK
ICAgICB0eXBlZGVmIHZvaWQgKEZyYW1lTG9hZGVyOjoqRnJhbWVQb2xpY3lGdW5jdGlvbikoUG9s
aWN5QWN0aW9uKTsKIApAQCAtMTc5LDYgKzE4NCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzYXZlRG9jdW1lbnRWaWV3VG9QYWdlQ2FjaGUoUGFnZUNhY2hl
KikgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ2FjaGVQYWdlKCkgY29uc3QgPSAwOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgPSAwOworCisgICAgICAgIHZp
cnR1YWwgRnJhbWUqIGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NT
Y3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkgPSAwOworICAgICAg
ICB2aXJ0dWFsIFdpZGdldCogY3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYp
ID0gMDsKKyAgICAgICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29u
c3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpID0g
MDsKKworICAgICAgICB2aXJ0dWFsIE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBl
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgPSAwOworICAgICAgICB2
aXJ0dWFsIFN0cmluZyBvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0ID0gMDsKKwogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
VHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVzLmgJ
KHJldmlzaW9uIDE4OTMyKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIE5hdmlnYXRpb25UeXBlT3RoZXIKICAgICB9OwogCisgICAgZW51bSBPYmplY3RDb250ZW50
VHlwZSB7CisgICAgICAgIE9iamVjdENvbnRlbnROb25lLAorICAgICAgICBPYmplY3RDb250ZW50
SW1hZ2UsCisgICAgICAgIE9iamVjdENvbnRlbnRGcmFtZSwKKyAgICAgICAgT2JqZWN0Q29udGVu
dFBsdWdpbgorICAgIH07CiB9CiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9sb2FkZXIvbWFjL0Zy
YW1lTG9hZGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL21hYy9GcmFtZUxv
YWRlck1hYy5tbQkocmV2aXNpb24gMTg5MzIpCisrKyBXZWJDb3JlL2xvYWRlci9tYWMvRnJhbWVM
b2FkZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTkyLDE4ICs5Miw5IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmRpZENoYW5nZVRpdGxlKERvY3VtZW4KICAgICAgICAgfQogfQogCi1GcmFtZSogRnJh
bWVMb2FkZXI6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiByZWZl
cnJlcikKK0ZyYW1lKiBGcmFtZUxvYWRlcjo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwg
Ym9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkK
IHsKLSAgICBCT09MIGFsbG93c1Njcm9sbGluZyA9IFlFUzsKLSAgICBpbnQgbWFyZ2luV2lkdGgg
PSAtMTsKLSAgICBpbnQgbWFyZ2luSGVpZ2h0ID0gLTE7Ci0gICAgaWYgKG93bmVyRWxlbWVudC0+
aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgb3duZXJFbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRh
ZykpIHsKLSAgICAgICAgSFRNTEZyYW1lRWxlbWVudCogbyA9IHN0YXRpY19jYXN0PEhUTUxGcmFt
ZUVsZW1lbnQqPihvd25lckVsZW1lbnQpOwotICAgICAgICBhbGxvd3NTY3JvbGxpbmcgPSBvLT5z
Y3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmOwotICAgICAgICBtYXJnaW5XaWR0
aCA9IG8tPmdldE1hcmdpbldpZHRoKCk7Ci0gICAgICAgIG1hcmdpbkhlaWdodCA9IG8tPmdldE1h
cmdpbkhlaWdodCgpOwotICAgIH0KLQogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
ICAgICAKICAgICByZXR1cm4gW01hYyhtX2ZyYW1lKS0+YnJpZGdlKCkgY3JlYXRlQ2hpbGRGcmFt
ZU5hbWVkOm5hbWUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL3F0L0ZyYW1lTG9hZGVyUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL3F0L0ZyYW1lTG9hZGVyUXQuY3BwCShyZXZpc2lv
biAxODkzMikKKysrIFdlYkNvcmUvbG9hZGVyL3F0L0ZyYW1lTG9hZGVyUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MCwzNiArODAsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAKLUZyYW1l
KiBGcmFtZUxvYWRlcjo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcm
IHJlZmVycmVyKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LU9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyOjpvYmplY3RDb250ZW50VHlwZShjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBPYmplY3RDb250ZW50VHlwZSgpOwotfQotCi1XaWRnZXQqIEZyYW1lTG9hZGVy
OjpjcmVhdGVQbHVnaW4oRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1XaWRnZXQqIEZyYW1lTG9hZGVyOjpjcmVh
dGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLVN0cmluZyBGcmFtZUxvYWRlcjo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdAot
ewotICAgIC8vIG5vLW9wCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCiB2b2lkIEZyYW1lTG9h
ZGVyOjpwYXJ0Q2xlYXJlZEluQmVnaW4oKQogewogICAgIGlmIChtX2ZyYW1lLT5zZXR0aW5ncygp
LT5pc0phdmFTY3JpcHRFbmFibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N2Zy9TVkdJbWFnZUVtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3ZnL1NWR0ltYWdlRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDE4OTMyKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHSW1hZ2VFbXB0eUNsaWVudHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjY1LDYgKzI2NSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHNhdmVEb2N1bWVudFZpZXdUb1BhZ2VDYWNoZShQYWdlQ2FjaGUqKSB7IH0KICAgICB2aXJ0
dWFsIGJvb2wgY2FuQ2FjaGVQYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHZp
cnR1YWwgRnJhbWUgKmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9s
bGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KSB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0ZVBsdWdpbihFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcm
KSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0ZUphdmFBcHBsZXRXaWRn
ZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYpIHsgcmV0dXJuIDA7IH0KKyAgICAKKyAgICB2aXJ0dWFsIE9iamVjdENvbnRlbnRUeXBlIG9i
amVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkg
eyByZXR1cm4gT2JqZWN0Q29udGVudFR5cGUoKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIG92ZXJy
aWRlTWVkaWFUeXBlKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KKwogfTsKIAogY2xhc3Mg
U1ZHRW1wdHlFZGl0b3JDbGllbnQgOiBwdWJsaWMgRWRpdG9yQ2xpZW50IHsKSW5kZXg6IFdlYktp
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMTg5
MzQpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMDctMDEtMTkgIExhcnMgS25vbGwgPGxhcnNAdHJvbGx0ZWNoLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBzdHVicyBmb3IgdGhl
IG5ldyBGcmFtZUxvYWRlckNsaWVudCBtZXRob2RzLgorICAgICAgICBSZW1vdmVkIGEgY2hlY2sg
aW4gY3JlYXRlQ2hpbGRGcmFtZU5hbWVkIHRoYXQgaGFzIG5vdyBiZWVuCisgICAgICAgIG1vdmVk
IHRvIEZyYW1lTG9hZGVyOjpsb2FkU3ViRnJhbWUKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lQnJpZGdlLm1tOgorICAgICAgICAoLVtXZWJGcmFtZUJyaWRnZSBjcmVhdGVDaGls
ZEZyYW1lTmFtZWQ6d2l0aFVSTDpyZWZlcnJlcjpvd25lckVsZW1lbnQ6YWxsb3dzU2Nyb2xsaW5n
Om1hcmdpbldpZHRoOm1hcmdpbkhlaWdodDpdKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUZy
YW1lKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpvYmplY3RDb250ZW50VHlwZSk6
CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAg
KFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KToKKyAgICAgICAg
KFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpvdmVycmlkZU1lZGlhVHlwZSk6CisKIDIwMDctMDEtMTcg
IEFsaWNlIExpdSAgPGFsaWNlLmxpdUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
SGFycmlzb24uCkluZGV4OiBXZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tCShy
ZXZpc2lvbiAxODkzMikKKysrIFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzg5LDEwICszODksNiBAQCBOU1N0cmluZyAqV2ViUGx1Z2lu
Q29udGFpbmVyS2V5ID0gICBAIldlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWFyZ2luV2lkdGg6KGludCl3aWR0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWFyZ2luSGVpZ2h0OihpbnQpaGVpZ2h0CiB7Ci0gICAgYm9vbCBoaWRlUmVmZXJyZXI7Ci0gICAg
aWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+Y2FuTG9hZChVUkwsIHJlZmVycmVyLCBoaWRlUmVmZXJy
ZXIpKQotICAgICAgICByZXR1cm4gMDsKLQogICAgIEFTU0VSVChfZnJhbWUpOwogICAgIAogICAg
IFdlYkZyYW1lVmlldyAqY2hpbGRWaWV3ID0gW1tXZWJGcmFtZVZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLDAsMCwwKV07CkBAIC00MTEsNyArNDA3LDcgQEAgTlNTdHJpbmcg
KldlYlBsdWdpbkNvbnRhaW5lcktleSA9ICAgQCJXZQogCiAgICAgUmVmUHRyPEZyYW1lPiBuZXdG
cmFtZSA9IFtuZXdCcmlkZ2UgX2ZyYW1lXTsKICAgICAKLSAgICBbX2ZyYW1lIF9sb2FkVVJMOlVS
TCByZWZlcnJlcjooaGlkZVJlZmVycmVyID8gU3RyaW5nKCkgOiByZWZlcnJlcikgaW50b0NoaWxk
OmtpdChuZXdGcmFtZS5nZXQoKSldOworICAgIFtfZnJhbWUgX2xvYWRVUkw6VVJMIHJlZmVycmVy
OnJlZmVycmVyIGludG9DaGlsZDpraXQobmV3RnJhbWUuZ2V0KCkpXTsKIAogICAgIC8vIFRoZSBm
cmFtZSdzIG9ubG9hZCBoYW5kbGVyIG1heSBoYXZlIHJlbW92ZWQgaXQgZnJvbSB0aGUgZG9jdW1l
bnQuCiAgICAgaWYgKCFuZXdGcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKSW5kZXg6IFdlYktpdC9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAxODkzMikK
KysrIFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzksNiArMTc5LDE1IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyPiBjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiB0aXRsZSwgY29uc3QgV2ViQ29yZTo6S1VSTCYpOwogCisgICAg
dmlydHVhbCBGcmFtZSAqY3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Ny
b2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQpOworICAgIHZpcnR1YWwg
V2lkZ2V0KiBjcmVhdGVQbHVnaW4oRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJik7CisgICAgdmly
dHVhbCBXaWRnZXQqIGNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1l
bnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpOworICAgIAorICAgIHZpcnR1YWwg
T2JqZWN0Q29udGVudFR5cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBvdmVycmlkZU1lZGlhVHlw
ZSgpIGNvbnN0OworICAgIAorCiAgICAgdm9pZCBkZWxpdmVyQXJjaGl2ZWRSZXNvdXJjZXNBZnRl
ckRlbGF5KCkgY29uc3Q7CiAgICAgYm9vbCBjYW5Vc2VBcmNoaXZlZFJlc291cmNlKE5TVVJMUmVx
dWVzdCAqKSBjb25zdDsKICAgICBib29sIGNhblVzZUFyY2hpdmVkUmVzb3VyY2UoTlNVUkxSZXNw
b25zZSAqKSBjb25zdDsKSW5kZXg6IFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQubW0JKHJldmlzaW9uIDE4OTMyKQorKysgV2ViS2l0L1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUyLDYgKzEwNTIs
MzYgQEAgYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuQ2FjaGVQYWdlKAogICAgIHJldHVy
biBbW1ttX3dlYkZyYW1lLmdldCgpIGRhdGFTb3VyY2VdIHJlcHJlc2VudGF0aW9uXSBpc0tpbmRP
ZkNsYXNzOltXZWJIVE1MUmVwcmVzZW50YXRpb24gY2xhc3NdXTsKIH0KIAorRnJhbWUgKldlYkZy
YW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCisJCQkJCSBjb25z
dCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRo
LCBpbnQgbWFyZ2luSGVpZ2h0KQoreworICAgIC8vIHN0dWJiZWQgb3V0IHVudGlsIHRoZSBjb2Rl
IGlzIG1vdmVkIGhlcmUgZnJvbSB0aGUgRnJhbWVCcmlkZ2UsIGFuZCBGcmFtZUxvYWRlciBsb3Nl
cyB0aGUgY3JlYXRlRnJhbWUoKSBtZXRob2QKK30KKworT2JqZWN0Q29udGVudFR5cGUgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICAvLyBzdHViYmVkIG91dCB1bnRpbCB0aGUgY29kZSBp
cyBtb3ZlZCBoZXJlIGZyb20gdGhlIEZyYW1lQnJpZGdlLCBhbmQgRnJhbWVMb2FkZXIgbG9zZXMg
dGhlIG9iamVjdENvbnRlbnRUeXBlKCkgbWV0aG9kCisgICAgcmV0dXJuIE9iamVjdENvbnRlbnRU
eXBlKCk7Cit9CisKK1dpZGdldCogV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihF
bGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mLCBjb25zdCBTdHJpbmcmKQoreworICAgIC8vIHN0dWJiZWQgb3V0IHVudGlsIHRo
ZSBjb2RlIGlzIG1vdmVkIGhlcmUgZnJvbSB0aGUgRnJhbWVCcmlkZ2UsIGFuZCBGcmFtZUxvYWRl
ciBsb3NlcyB0aGUgY3JlYXRlUGx1Z2luKCkgbWV0aG9kCisgICAgcmV0dXJuIDA7Cit9CisKK1dp
ZGdldCogV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3Qg
SW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpCit7Cisg
ICAgLy8gc3R1YmJlZCBvdXQgdW50aWwgdGhlIGNvZGUgaXMgbW92ZWQgaGVyZSBmcm9tIHRoZSBG
cmFtZUJyaWRnZSwgYW5kIEZyYW1lTG9hZGVyIGxvc2VzIHRoZSBjcmVhdGVKYXZhQXBwbGV0V2lk
Z2V0KCkgbWV0aG9kCisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBXZWJGcmFtZUxvYWRlckNs
aWVudDo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdAoreworICAgIC8vIHN0dWJiZWQgb3V0IHVu
dGlsIHRoZSBjb2RlIGlzIG1vdmVkIGhlcmUgZnJvbSB0aGUgRnJhbWVCcmlkZ2UsIGFuZCBGcmFt
ZUxvYWRlciBsb3NlcyB0aGUgb3ZlcnJpZGVNZWRpYVR5cGUoKSBtZXRob2QKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKIEBpbXBsZW1lbnRhdGlvbiBXZWJGcmFtZVBvbGljeUxpc3RlbmVyCiAK
IC0gKGlkKWluaXRXaXRoV2ViQ29yZUZyYW1lOihGcmFtZSopZnJhbWUKSW5kZXg6IFdlYktpdFF0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRRdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4
OTM0KQorKysgV2ViS2l0UXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMDctMDEtMTkgIExhcnMgS25vbGwgPGxhcnNAdHJvbGx0ZWNoLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgRnJhbWVM
b2FkZXJDbGllbnQ6OmNyZWF0ZUZyYW1lKCksIHN0dWIgb3V0IHRoZQorICAgICAgICBvdGhlciBt
ZXRob2RzLgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJh
bWU6OlFXZWJGcmFtZSk6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAqIEFw
aS9xd2ViZnJhbWVfcC5oOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChR
V2ViUGFnZVByaXZhdGU6OmNyZWF0ZU1haW5GcmFtZSk6CisgICAgICAgIChRV2ViUGFnZTo6Y3Jl
YXRlRnJhbWUpOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRRdDo6Y2FuY2VsUG9saWN5Q2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRRdDo6b2JqZWN0Q29udGVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6b3ZlcnJpZGVNZWRpYVR5cGUpOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaDoKKwogMjAwNy0wMS0xOCAgWmFjayBS
dXNpbiAgPHphY2tAa2RlLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBMYXJzLgpJbmRleDog
V2ViS2l0UXQvQXBpL3F3ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0UXQvQXBpL3F3
ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDE4OTMyKQorKysgV2ViS2l0UXQvQXBpL3F3ZWJmcmFtZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGcmFtZVF0Q2xp
ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVRdC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogCiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgpAQCAtNDEsMzcgKzQyLDUwIEBACiAjaW5jbHVkZSAiRXhl
Y1N0YXRlLmgiCiAjaW5jbHVkZSAib2JqZWN0LmgiCiAKKyNpbmNsdWRlICJ3dGYvSGFzaE1hcC5o
IgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUVdlYkZyYW1lOjpRV2ViRnJhbWUoUVdl
YlBhZ2UgKnBhcmVudCkKK1FXZWJGcmFtZTo6UVdlYkZyYW1lKFFXZWJQYWdlICpwYXJlbnQsIFFX
ZWJGcmFtZURhdGEgKmZyYW1lRGF0YSkKICAgICA6IFFTY3JvbGxBcmVhKHBhcmVudCkKICAgICAs
IGQobmV3IFFXZWJGcmFtZVByaXZhdGUpCiB7CiAgICAgZC0+cGFnZSA9IHBhcmVudDsKIAogICAg
IGQtPmZyYW1lTG9hZGVyQ2xpZW50ID0gbmV3IEZyYW1lTG9hZGVyQ2xpZW50UXQoKTsKLSAgICBk
LT5mcmFtZSA9IG5ldyBGcmFtZVF0KHBhcmVudC0+ZC0+cGFnZSwgMCwgbmV3IEZyYW1lUXRDbGll
bnQoKSwgZC0+ZnJhbWVMb2FkZXJDbGllbnQpOworICAgIGQtPmZyYW1lID0gbmV3IEZyYW1lUXQo
cGFyZW50LT5kLT5wYWdlLCBmcmFtZURhdGEtPm93bmVyRWxlbWVudCwgbmV3IEZyYW1lUXRDbGll
bnQoKSwgZC0+ZnJhbWVMb2FkZXJDbGllbnQpOwogICAgIGQtPmZyYW1lTG9hZGVyQ2xpZW50LT5z
ZXRGcmFtZSh0aGlzLCBkLT5mcmFtZSk7CiAKICAgICBkLT5mcmFtZVZpZXcgPSBuZXcgRnJhbWVW
aWV3KGQtPmZyYW1lKTsKICAgICBkLT5mcmFtZVZpZXctPnNldFNjcm9sbEFyZWEodGhpcyk7CiAg
ICAgZC0+ZnJhbWUtPnNldFZpZXcoZC0+ZnJhbWVWaWV3KTsKKyAgICBpZiAoIWZyYW1lRGF0YS0+
dXJsLmlzRW1wdHkoKSkgeworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChmcmFtZURh
dGEtPnVybCwgZnJhbWVEYXRhLT5yZWZlcnJlcik7CisgICAgICAgIGQtPmZyYW1lLT5sb2FkZXIo
KS0+bG9hZChyZXF1ZXN0LCBmcmFtZURhdGEtPm5hbWUpOworICAgIH0KIH0KIAogCi1RV2ViRnJh
bWU6OlFXZWJGcmFtZShRV2ViRnJhbWUgKnBhcmVudCkKK1FXZWJGcmFtZTo6UVdlYkZyYW1lKFFX
ZWJGcmFtZSAqcGFyZW50LCBRV2ViRnJhbWVEYXRhICpmcmFtZURhdGEpCiAgICAgOiBRU2Nyb2xs
QXJlYShwYXJlbnQpCiAgICAgLCBkKG5ldyBRV2ViRnJhbWVQcml2YXRlKQogewogICAgIGQtPnBh
Z2UgPSBwYXJlbnQtPmQtPnBhZ2U7Ci0vLyAgICAgZC0+ZnJhbWVMb2FkZXJDbGllbnQgPSBuZXcg
RnJhbWVMb2FkZXJDbGllbnRRdCgpOwotLy8gICAgIGQtPmZyYW1lID0gbmV3IEZyYW1lUXQocGFn
ZSwgMCwgbmV3IEZyYW1lUXRDbGllbnQoKSwgZnJhbWVMb2FkZXJDbGllbnQpOwotLy8gICAgIGQt
PmZyYW1lTG9hZGVyQ2xpZW50LT5zZXRGcmFtZShkLT5mcmFtZSk7Ci0KLS8vICAgICBkLT5mcmFt
ZVZpZXcgPSBuZXcgRnJhbWVWaWV3KGQtPmZyYW1lKTsKLS8vICAgICBkLT5mcmFtZVZpZXctPnNl
dFNjcm9sbEFyZWEodGhpcyk7Ci0vLyAgICAgZC0+ZnJhbWUtPnNldFZpZXcoZC0+ZnJhbWVWaWV3
KTsKKworICAgIGQtPmZyYW1lTG9hZGVyQ2xpZW50ID0gbmV3IEZyYW1lTG9hZGVyQ2xpZW50UXQo
KTsKKyAgICBkLT5mcmFtZSA9IG5ldyBGcmFtZVF0KHBhcmVudC0+ZC0+cGFnZS0+ZC0+cGFnZSwg
ZnJhbWVEYXRhLT5vd25lckVsZW1lbnQsIG5ldyBGcmFtZVF0Q2xpZW50KCksIGQtPmZyYW1lTG9h
ZGVyQ2xpZW50KTsKKyAgICBkLT5mcmFtZUxvYWRlckNsaWVudC0+c2V0RnJhbWUodGhpcywgZC0+
ZnJhbWUpOworCisgICAgZC0+ZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhkLT5mcmFtZSk7Cisg
ICAgZC0+ZnJhbWVWaWV3LT5zZXRTY3JvbGxBcmVhKHRoaXMpOworICAgIGQtPmZyYW1lLT5zZXRW
aWV3KGQtPmZyYW1lVmlldyk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoZnJhbWVEYXRh
LT51cmwsIGZyYW1lRGF0YS0+cmVmZXJyZXIpOworICAgIAorICAgIEZyYW1lTG9hZFR5cGUgbG9h
ZFR5cGUgPSBwYXJlbnQtPmQtPmZyYW1lLT5sb2FkZXIoKS0+bG9hZFR5cGUoKTsKKyAgICBGcmFt
ZUxvYWRUeXBlIGNoaWxkTG9hZFR5cGUgPSBGcmFtZUxvYWRUeXBlSW50ZXJuYWw7CisKKyAgICBk
LT5mcmFtZS0+bG9hZGVyKCktPmxvYWQoZnJhbWVEYXRhLT51cmwsIGZyYW1lRGF0YS0+cmVmZXJy
ZXIsIGNoaWxkTG9hZFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZygp
LCAwLCAwLCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCkpOwogfQogCiBRV2ViRnJhbWU6
On5RV2ViRnJhbWUoKQpJbmRleDogV2ViS2l0UXQvQXBpL3F3ZWJmcmFtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFF0L0FwaS9xd2ViZnJhbWUuaAkocmV2aXNpb24gMTg5MzIpCisrKyBXZWJLaXRR
dC9BcGkvcXdlYmZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwxOCBAQCBjbGFz
cyBRV2ViUGFnZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZUxvYWRlckNs
aWVudFF0OwogfQorY2xhc3MgUVdlYkZyYW1lRGF0YTsKIAogY2xhc3MgUVdlYkZyYW1lIDogcHVi
bGljIFFTY3JvbGxBcmVhCiB7CiAgICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBRV2ViRnJhbWUo
UVdlYlBhZ2UgKnBhcmVudCk7Ci0gICAgUVdlYkZyYW1lKFFXZWJGcmFtZSAqcGFyZW50KTsKK3By
b3RlY3RlZDoKKyAgICBRV2ViRnJhbWUoUVdlYlBhZ2UgKnBhcmVudCwgUVdlYkZyYW1lRGF0YSAq
ZnJhbWVEYXRhKTsKKyAgICBRV2ViRnJhbWUoUVdlYkZyYW1lICpwYXJlbnQsIFFXZWJGcmFtZURh
dGEgKmZyYW1lRGF0YSk7CiAgICAgflFXZWJGcmFtZSgpOwogCitwdWJsaWM6CisgICAgCiAgICAg
UVdlYlBhZ2UgKnBhZ2UoKSBjb25zdDsKIAogICAgIHZvaWQgYWRkVG9KU1dpbmRvd09iamVjdChj
b25zdCBRQnl0ZUFycmF5ICZuYW1lLCBRT2JqZWN0ICpvYmplY3QpOwpJbmRleDogV2ViS2l0UXQv
QXBpL3F3ZWJmcmFtZV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0UXQvQXBpL3F3ZWJmcmFtZV9w
LmgJKHJldmlzaW9uIDE4OTMyKQorKysgV2ViS2l0UXQvQXBpL3F3ZWJmcmFtZV9wLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDExICsyNSwxNSBAQAogI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgogI2lu
Y2x1ZGUgInF3ZWJwYWdlX3AuaCIKIAorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIEZyYW1lTG9h
ZGVyQ2xpZW50UXQ7CiAgICAgY2xhc3MgRnJhbWVRdDsKICAgICBjbGFzcyBGcmFtZVZpZXc7Cisg
ICAgY2xhc3MgSFRNTEZyYW1lT3duZXJFbGVtZW50OwogfQogY2xhc3MgUVdlYlBhZ2U7CiAKQEAg
LTQ4LDUgKzUyLDE3IEBAIHB1YmxpYzoKICAgICBRV2ViUGFnZSAqcGFnZTsKIH07CiAKK2NsYXNz
IFFXZWJGcmFtZURhdGEKK3sKK3B1YmxpYzoKKyAgICBXZWJDb3JlOjpLVVJMIHVybDsKKyAgICBX
ZWJDb3JlOjpTdHJpbmcgbmFtZTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQq
IG93bmVyRWxlbWVudDsKKyAgICAKKyAgICBXZWJDb3JlOjpTdHJpbmcgcmVmZXJyZXI7CisgICAg
Ym9vbCBhbGxvd3NTY3JvbGxpbmc7CisgICAgaW50IG1hcmdpbldpZHRoOworICAgIGludCBtYXJn
aW5IZWlnaHQ7ICAgIAorfTsKIAogI2VuZGlmCkluZGV4OiBXZWJLaXRRdC9BcGkvcXdlYnBhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFF0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDE4
OTMyKQorKysgV2ViS2l0UXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcs
NyArNTcsMTIgQEAgUVdlYlBhZ2VQcml2YXRlOjp+UVdlYlBhZ2VQcml2YXRlKCkKIHZvaWQgUVdl
YlBhZ2VQcml2YXRlOjpjcmVhdGVNYWluRnJhbWUoKQogewogICAgIGlmICghbWFpbkZyYW1lKSB7
Ci0gICAgICAgIG1haW5GcmFtZSA9IHEtPmNyZWF0ZUZyYW1lKDApOworICAgICAgICBRV2ViRnJh
bWVEYXRhIGZyYW1lRGF0YTsKKyAgICAgICAgZnJhbWVEYXRhLm93bmVyRWxlbWVudCA9IDA7Cisg
ICAgICAgIGZyYW1lRGF0YS5hbGxvd3NTY3JvbGxpbmcgPSB0cnVlOworICAgICAgICBmcmFtZURh
dGEubWFyZ2luV2lkdGggPSA1OworICAgICAgICBmcmFtZURhdGEubWFyZ2luSGVpZ2h0ID0gNTsK
KyAgICAgICAgbWFpbkZyYW1lID0gcS0+Y3JlYXRlRnJhbWUoMCwgJmZyYW1lRGF0YSk7CiAgICAg
ICAgIGxheW91dC0+YWRkV2lkZ2V0KG1haW5GcmFtZSk7CiAgICAgfQogfQpAQCAtNzcsMTEgKzgy
LDExIEBAIFFXZWJQYWdlOjp+UVdlYlBhZ2UoKQogICAgIGRlbGV0ZSBkOwogfQogCi1RV2ViRnJh
bWUgKlFXZWJQYWdlOjpjcmVhdGVGcmFtZShRV2ViRnJhbWUgKnBhcmVudEZyYW1lKQorUVdlYkZy
YW1lICpRV2ViUGFnZTo6Y3JlYXRlRnJhbWUoUVdlYkZyYW1lICpwYXJlbnRGcmFtZSwgUVdlYkZy
YW1lRGF0YSAqZnJhbWVEYXRhKQogewogICAgIGlmIChwYXJlbnRGcmFtZSkKLSAgICAgICAgcmV0
dXJuIG5ldyBRV2ViRnJhbWUocGFyZW50RnJhbWUpOwotICAgIHJldHVybiBuZXcgUVdlYkZyYW1l
KHRoaXMpOworICAgICAgICByZXR1cm4gbmV3IFFXZWJGcmFtZShwYXJlbnRGcmFtZSwgZnJhbWVE
YXRhKTsKKyAgICByZXR1cm4gbmV3IFFXZWJGcmFtZSh0aGlzLCBmcmFtZURhdGEpOwogfQogCiB2
b2lkIFFXZWJQYWdlOjpvcGVuKGNvbnN0IFFVcmwgJnVybCkKSW5kZXg6IFdlYktpdFF0L0FwaS9x
d2VicGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFF0L0FwaS9xd2VicGFnZS5oCShyZXZpc2lv
biAxODkzMikKKysrIFdlYktpdFF0L0FwaS9xd2VicGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCwxMSBAQCBjbGFzcyBRV2ViRnJhbWU7CiBjbGFzcyBRVXJsOwogCiBjbGFzcyBRV2Vi
UGFnZVByaXZhdGU7CitjbGFzcyBRV2ViRnJhbWVEYXRhOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisgICAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRRdDsKK30KIAogY2xhc3MgUVdlYlBhZ2UgOiBw
dWJsaWMgUVdpZGdldAogewpAQCAtMzYsOCArNDEsNiBAQCBwdWJsaWM6CiAgICAgUVdlYlBhZ2Uo
UVdpZGdldCAqcGFyZW50KTsKICAgICB+UVdlYlBhZ2UoKTsKIAotICAgIHZpcnR1YWwgUVdlYkZy
YW1lICpjcmVhdGVGcmFtZShRV2ViRnJhbWUgKnBhcmVudEZyYW1lKTsKLSAgICAvL3ZpcnR1YWwg
UVdlYlBhZ2UgKmNyZWF0ZVBhZ2UoLi4uKTsKIAogICAgIHZvaWQgb3Blbihjb25zdCBRVXJsICZ1
cmwpOwogCkBAIC02NSw5ICs2OCwxNCBAQCBzaWduYWxzOgogICAgICAqLwogICAgIHZvaWQgbG9h
ZEZpbmlzaGVkKFFXZWJGcmFtZSAqZnJhbWUpOwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBR
V2ViRnJhbWUgKmNyZWF0ZUZyYW1lKFFXZWJGcmFtZSAqcGFyZW50RnJhbWUsIFFXZWJGcmFtZURh
dGEgKmZyYW1lRGF0YSk7CisgICAgLy92aXJ0dWFsIFFXZWJQYWdlICpjcmVhdGVQYWdlKC4uLik7
CiAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFFXZWJGcmFtZTsKKyAgICBmcmllbmQg
Y2xhc3MgUVdlYlBhZ2VQcml2YXRlOworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudFF0OwogICAgIFFXZWJQYWdlUHJpdmF0ZSAqZDsKIH07CiAKSW5kZXg6IFdlYktp
dFF0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFF0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lv
biAxODkzMikKKysrIFdlYktpdFF0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgVHJvbGx0ZWNoIEFTQQogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAt
MjUsMTYgKzI2LDE4IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KLSAK
KwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50UXQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAKICNpbmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1
ZGUgInF3ZWJmcmFtZS5oIgorI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgiCiAKICNpbmNsdWRlICJx
ZGVidWcuaCIKIApAQCAtMzU1LDYgKzM1OCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6
ZGlzcGF0Y2hTaG93KCkKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpjYW5jZWxQb2xpY3lD
aGVjaygpCiB7CisgICAgcURlYnVnKCkgPDwgIkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbmNlbFBv
bGljeUNoZWNrIjsKICAgICBtX3BvbGljeUZ1bmN0aW9uID0gMDsKIH0KIApAQCAtNzY1LDYgKzc2
OSw0OCBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OndpbGxVc2VBcmNoaXZlCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitGcmFtZSAqRnJhbWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlRnJhbWUo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2lu
V2lkdGgsIGludCBtYXJnaW5IZWlnaHQpCit7CisgICAgcURlYnVnKCkgPDwgIj4+Pj4+Pj4+Pj4+
IGNyZWF0ZUZyYW1lIjsKKyAgICBRV2ViRnJhbWVEYXRhIGZyYW1lRGF0YTsKKyAgICBmcmFtZURh
dGEudXJsID0gdXJsOworICAgIGZyYW1lRGF0YS5uYW1lID0gbmFtZTsKKyAgICBmcmFtZURhdGEu
b3duZXJFbGVtZW50ID0gb3duZXJFbGVtZW50OworICAgIGZyYW1lRGF0YS5yZWZlcnJlciA9IHJl
ZmVycmVyOworICAgIGZyYW1lRGF0YS5hbGxvd3NTY3JvbGxpbmcgPSBhbGxvd3NTY3JvbGxpbmc7
CisgICAgZnJhbWVEYXRhLm1hcmdpbldpZHRoID0gbWFyZ2luV2lkdGg7CisgICAgZnJhbWVEYXRh
Lm1hcmdpbkhlaWdodCA9IG1hcmdpbkhlaWdodDsKKyAgICAgICAgCisKKyAgICBRV2ViRnJhbWUg
KndlYkZyYW1lID0gbV93ZWJGcmFtZS0+cGFnZSgpLT5jcmVhdGVGcmFtZShtX3dlYkZyYW1lLCAm
ZnJhbWVEYXRhKTsKKyAgICByZXR1cm4gd2ViRnJhbWUtPmQtPmZyYW1lOworfQorCitPYmplY3RD
b250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudFF0OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gT2JqZWN0Q29udGVudFR5cGUoKTsKK30KKworV2lkZ2V0KiBGcmFtZUxv
YWRlckNsaWVudFF0OjpjcmVhdGVQbHVnaW4oRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitXaWRnZXQqIEZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVs
ZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50UXQ6
Om92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKwogfQogCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRR
dC5tb2MiCkluZGV4OiBXZWJLaXRRdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0UXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5oCShyZXZpc2lvbiAxODkzMikKKysrIFdlYktpdFF0L1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTmF2aWdhdGlvbkFjdGlvbjsKICAgICBjbGFzcyBTdHJp
bmc7CiAgICAgY2xhc3MgUmVzb3VyY2VMb2FkZXI7Ci0KKyAgICAKICAgICBzdHJ1Y3QgTG9hZEVy
cm9yUmVzZXRUb2tlbjsKIAogICAgIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50UXQgOiBwdWJsaWMg
UU9iamVjdCwgcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50IHsKQEAgLTIwNiw2ICsyMDYsMTQgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2dyZXNzU3Rh
cnRlZE5vdGlmaWNhdGlvbigpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2dyZXNzRXN0
aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJv
Z3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpOworCisgICAgICAgIHZpcnR1YWwgRnJhbWUgKmNy
ZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBt
YXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkgOworICAgICAgICB2aXJ0dWFsIFdpZGdldCog
Y3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4m
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYpOworICAgICAgICB2aXJ0dWFs
IFdpZGdldCogY3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgRWxlbWVudCos
IGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik7CisKKyAgICAgICAgdmlydHVhbCBPYmpl
Y3RDb250ZW50VHlwZSBvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpOworICAgICAgICB2aXJ0dWFsIFN0cmluZyBvdmVycmlkZU1lZGlhVHlw
ZSgpIGNvbnN0OwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2Jh
Ymx5IG5vdCBiZSBoZXJlLCBidXQgaXQncyBuZWVkZWQgZm9yIHRoZSB0ZXN0cyBjdXJyZW50bHkK
ICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnRDbGVhcmVkSW5CZWdpbigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12552</attachid>
            <date>2007-01-19 00:40:18 -0800</date>
            <delta_ts>2007-01-23 01:46:31 -0800</delta_ts>
            <desc>Fixes Lars&apos; patch to compile on Mac</desc>
            <filename>bugzilla-12311.diff.txt</filename>
            <type>text/plain</type>
            <size>28523</size>
            <attacher name="Adam Roben (:aroben)">aroben</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODk3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDctMDEtMTkgIExhcnMgS25vbGwgPGxhcnNAdHJvbGx0ZWNoLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZXQg
ZnJhbWVzZXRzIHRvIHNob3cgdXAgaW4gdGhlIFF0IGJ1aWxkLgorCisgICAgICAgIFBhcnRseSBt
b3ZlZCBzb21lIG1ldGhvZHMgdGhhdCBhcmUgcGxhdGZvcm0gZGVwZW5kZW50IGluIHRoZSBGcmFt
ZUxvYWRlcgorICAgICAgICBpbnRvIEZyYW1lTG9hZGVyQ2xpZW50LiBPbmNlIHRoZSBNYWMgaW1w
bGVtZW50YXRpb24gaGFzIGZvbGxvd2VkLCB3ZQorICAgICAgICBjYW4gZ2V0IHJpZCBvZiBjcmVh
dGVGcmFtZSBldC5hbC4gaW4gRnJhbWVMb2FkZXIKKworICAgICAgICAqIGxvYWRlci9GcmFtZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKToK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVM
b2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oOgorICAg
ICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBsb2FkZXIvbWFjL0ZyYW1lTG9hZGVyTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNyZWF0ZUZyYW1lKToKKyAgICAgICAg
KiBsb2FkZXIvcXQvRnJhbWVMb2FkZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6Y3JlYXRlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om9iamVj
dENvbnRlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjcmVhdGVQbHVn
aW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNyZWF0ZUphdmFBcHBsZXRXaWRn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om92ZXJyaWRlTWVkaWFUeXBlKToK
KwogMjAwNy0wMS0xOCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQmV0aC4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDE4
OTczKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGlzdG9y
eUl0ZW0uaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRnJh
bWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9iamVj
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgpAQCAtMzk3LDcgKzM5OCwyMyBA
QCBib29sIEZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJhbWUoSFRNTEZyYW1lCiAKIEZyYW1lKiBGcmFt
ZUxvYWRlcjo6bG9hZFN1YmZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiByZWZl
cnJlcikKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBjcmVhdGVGcmFtZSh1cmwsIG5hbWUsIG93bmVy
RWxlbWVudCwgcmVmZXJyZXIpOworICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5nID0gdHJ1ZTsKKyAg
ICBpbnQgbWFyZ2luV2lkdGggPSAtMTsKKyAgICBpbnQgbWFyZ2luSGVpZ2h0ID0gLTE7CisgICAg
aWYgKG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgb3duZXJFbGVtZW50LT5o
YXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKKyAgICAgICAgSFRNTEZyYW1lRWxlbWVudCogbyA9IHN0
YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnQqPihvd25lckVsZW1lbnQpOworICAgICAgICBhbGxv
d3NTY3JvbGxpbmcgPSBvLT5zY3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmOwor
ICAgICAgICBtYXJnaW5XaWR0aCA9IG8tPmdldE1hcmdpbldpZHRoKCk7CisgICAgICAgIG1hcmdp
bkhlaWdodCA9IG8tPmdldE1hcmdpbkhlaWdodCgpOworICAgIH0KKworICAgIGJvb2wgaGlkZVJl
ZmVycmVyOworICAgIGlmICghY2FuTG9hZCh1cmwsIHJlZmVycmVyLCBoaWRlUmVmZXJyZXIpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIEZyYW1lKiBmcmFtZSA9IGNyZWF0ZUZyYW1lKHVybCwg
bmFtZSwgb3duZXJFbGVtZW50LCBoaWRlUmVmZXJyZXIgPyBTdHJpbmcoKSA6IHJlZmVycmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93c1Njcm9sbGluZywgbWFyZ2luV2lk
dGgsIG1hcmdpbkhlaWdodCk7CisKICAgICBpZiAoIWZyYW1lKSAgewogICAgICAgICBjaGVja0Vt
aXRMb2FkRXZlbnQoKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC00MjIxLDUgKzQyMzgsMzMgQEAg
U3RyaW5nIEZyYW1lTG9hZGVyOjpyZWZlcnJlcigpIGNvbnN0CiAgICAgcmV0dXJuIGRvY3VtZW50
TG9hZGVyKCktPnJlcXVlc3QoKS5odHRwUmVmZXJyZXIoKTsKIH0KIAorI2lmICFQTEFURk9STShN
QUMpCitGcmFtZSogRnJhbWVMb2FkZXI6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29u
c3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0
aCwgaW50IG1hcmdpbkhlaWdodCkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPmNyZWF0ZUZyYW1l
KHVybCwgbmFtZSwgb3duZXJFbGVtZW50LCByZWZlcnJlciwgYWxsb3dzU2Nyb2xsaW5nLCBtYXJn
aW5XaWR0aCwgbWFyZ2luSGVpZ2h0KTsKK30KKworT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2Fk
ZXI6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPm9iamVjdENvbnRlbnRUeXBlKHVybCwgbWlt
ZVR5cGUpOworfQorCitXaWRnZXQqIEZyYW1lTG9hZGVyOjpjcmVhdGVQbHVnaW4oRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFyYW1WYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPmNyZWF0ZVBsdWdpbihl
bGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSk7Cit9CisKK1dp
ZGdldCogRnJhbWVMb2FkZXI6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGFy
Z3MpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KHNpemUs
IGVsZW1lbnQsIGFyZ3MpOworfQorCitTdHJpbmcgRnJhbWVMb2FkZXI6Om92ZXJyaWRlTWVkaWFU
eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPm92ZXJyaWRlTWVkaWFUeXBlKCk7
Cit9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5oCShyZXZpc2lvbiAxODk3MykKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDEwICs4Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBUaW1lcjsKIAotICAgIGVudW0gT2JqZWN0Q29u
dGVudFR5cGUgewotICAgICAgICBPYmplY3RDb250ZW50Tm9uZSwgT2JqZWN0Q29udGVudEltYWdl
LCBPYmplY3RDb250ZW50RnJhbWUsIE9iamVjdENvbnRlbnRQbHVnaW4KLSAgICB9OwotCiAgICAg
dHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gPiBSZXNvdXJjZUxvYWRlclNl
dDsKIAogICAgIGJvb2wgaXNCYWNrRm9yd2FyZExvYWRUeXBlKEZyYW1lTG9hZFR5cGUpOwpAQCAt
MjgxLDcgKzI3Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB1cmxTZWxl
Y3RlZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgRXZlbnQqKTsKICAgICAgIAogICAgICAgICBi
b29sIHJlcXVlc3RGcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIFVS
TCwgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUpOwotICAgICAgICBGcmFtZSogY3JlYXRl
RnJhbWUoY29uc3QgS1VSTCYgVVJMLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFtZU93bmVy
RWxlbWVudCosIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpOworICAgICAgICBGcmFtZSogY3JlYXRl
RnJhbWUoY29uc3QgS1VSTCYgVVJMLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFtZU93bmVy
RWxlbWVudCosIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVp
Z2h0KTsKICAgICAgICAgRnJhbWUqIGxvYWRTdWJmcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQq
LCBjb25zdCBLVVJMJiBVUkwsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiByZWZl
cnJlcik7CiAKICAgICAgICAgdm9pZCBzdWJtaXRGb3JtKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29u
c3QgU3RyaW5nJiBVUkwsIFBhc3NSZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBTdHJpbmcmIHRhcmdl
dCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwgRXZl
bnQqKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gMTg5NzMp
CisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw3ICsyOSw5IEBACiAjZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50X2gKIAogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyVHlwZXMuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MSw2ICs0Myw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBGcmFtZUxvYWRlcjsK
ICAgICBjbGFzcyBIaXN0b3J5SXRlbTsKKyAgICBjbGFzcyBIVE1MRnJhbWVPd25lckVsZW1lbnQ7
CisgICAgY2xhc3MgSW50U2l6ZTsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIE5hdmlnYXRp
b25BY3Rpb247CiAgICAgY2xhc3MgUGFnZUNhY2hlOwpAQCAtNTAsNiArNTQsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogICAgIGNsYXNzIFJlc291
cmNlUmVzcG9uc2U7CiAgICAgY2xhc3MgU3RyaW5nOworICAgIGNsYXNzIFdpZGdldDsKIAogICAg
IHR5cGVkZWYgdm9pZCAoRnJhbWVMb2FkZXI6OipGcmFtZVBvbGljeUZ1bmN0aW9uKShQb2xpY3lB
Y3Rpb24pOwogCkBAIC0xNzksNiArMTg0LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHNhdmVEb2N1bWVudFZpZXdUb1BhZ2VDYWNoZShQYWdlQ2FjaGUqKSA9
IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5DYWNoZVBhZ2UoKSBjb25zdCA9IDA7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkb3dubG9hZChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSA9IDA7CisKKyAgICAgICAgdmlydHVh
bCBGcmFtZSogY3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9s
bGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KSA9IDA7CisgICAgICAgIHZp
cnR1YWwgV2lkZ2V0KiBjcmVhdGVQbHVnaW4oRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikgPSAw
OworICAgICAgICB2aXJ0dWFsIFdpZGdldCogY3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJ
bnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JikgPSAwOwor
CisgICAgICAgIHZpcnR1YWwgT2JqZWN0Q29udGVudFR5cGUgb2JqZWN0Q29udGVudFR5cGUoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSA9IDA7CisgICAgICAgIHZpcnR1
YWwgU3RyaW5nIG92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QgPSAwOworCiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaAkocmV2
aXNpb24gMTg5NzMpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDYgKzY2LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
TmF2aWdhdGlvblR5cGVPdGhlcgogICAgIH07CiAKKyAgICBlbnVtIE9iamVjdENvbnRlbnRUeXBl
IHsKKyAgICAgICAgT2JqZWN0Q29udGVudE5vbmUsCisgICAgICAgIE9iamVjdENvbnRlbnRJbWFn
ZSwKKyAgICAgICAgT2JqZWN0Q29udGVudEZyYW1lLAorICAgICAgICBPYmplY3RDb250ZW50UGx1
Z2luCisgICAgfTsKIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9tYWMvRnJhbWVM
b2FkZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbWFjL0ZyYW1lTG9hZGVy
TWFjLm1tCShyZXZpc2lvbiAxODk3MykKKysrIFdlYkNvcmUvbG9hZGVyL21hYy9GcmFtZUxvYWRl
ck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTIsMTggKzkyLDkgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6ZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbgogICAgICAgICB9CiB9CiAKLUZyYW1lKiBGcmFtZUxv
YWRlcjo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhU
TUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcmIHJlZmVycmVy
KQorRnJhbWUqIEZyYW1lTG9hZGVyOjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29s
IGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KQogewot
ICAgIEJPT0wgYWxsb3dzU2Nyb2xsaW5nID0gWUVTOwotICAgIGludCBtYXJnaW5XaWR0aCA9IC0x
OwotICAgIGludCBtYXJnaW5IZWlnaHQgPSAtMTsKLSAgICBpZiAob3duZXJFbGVtZW50LT5oYXNU
YWdOYW1lKGZyYW1lVGFnKSB8fCBvd25lckVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkg
ewotICAgICAgICBIVE1MRnJhbWVFbGVtZW50KiBvID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxl
bWVudCo+KG93bmVyRWxlbWVudCk7Ci0gICAgICAgIGFsbG93c1Njcm9sbGluZyA9IG8tPnNjcm9s
bGluZ01vZGUoKSAhPSBTY3JvbGxiYXJBbHdheXNPZmY7Ci0gICAgICAgIG1hcmdpbldpZHRoID0g
by0+Z2V0TWFyZ2luV2lkdGgoKTsKLSAgICAgICAgbWFyZ2luSGVpZ2h0ID0gby0+Z2V0TWFyZ2lu
SGVpZ2h0KCk7Ci0gICAgfQotCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAg
IAogICAgIHJldHVybiBbTWFjKG1fZnJhbWUpLT5icmlkZ2UoKSBjcmVhdGVDaGlsZEZyYW1lTmFt
ZWQ6bmFtZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvcXQvRnJhbWVMb2FkZXJRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvcXQvRnJhbWVMb2FkZXJRdC5jcHAJKHJldmlzaW9uIDE4
OTczKQorKysgV2ViQ29yZS9sb2FkZXIvcXQvRnJhbWVMb2FkZXJRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgwLDM2ICs4MCw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIAotRnJhbWUqIEZy
YW1lTG9hZGVyOjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcmVm
ZXJyZXIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotT2Jq
ZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXI6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwm
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIE9iamVjdENvbnRlbnRUeXBlKCk7Ci19Ci0KLVdpZGdldCogRnJhbWVMb2FkZXI6OmNy
ZWF0ZVBsdWdpbihFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVdpZGdldCogRnJhbWVMb2FkZXI6OmNyZWF0ZUph
dmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotU3RyaW5nIEZyYW1lTG9hZGVyOjpvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0Ci17Ci0g
ICAgLy8gbm8tb3AKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6
OnBhcnRDbGVhcmVkSW5CZWdpbigpCiB7CiAgICAgaWYgKG1fZnJhbWUtPnNldHRpbmdzKCktPmlz
SmF2YVNjcmlwdEVuYWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Zn
L1NWR0ltYWdlRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdmcvU1ZHSW1hZ2VFbXB0eUNsaWVudHMuaAkocmV2aXNpb24gMTg5NzMpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdJbWFnZUVtcHR5Q2xpZW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2F2ZURvY3VtZW50Vmlld1RvUGFnZUNhY2hlKFBhZ2VDYWNoZSopIHsgfQogICAgIHZpcnR1YWwg
Ym9vbCBjYW5DYWNoZVBhZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVh
bCBGcmFtZSAqY3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5n
LCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQpIHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIFdpZGdldCogY3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYpIHsg
cmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFdpZGdldCogY3JlYXRlSmF2YUFwcGxldFdpZGdldChj
b25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jikg
eyByZXR1cm4gMDsgfQorICAgIAorICAgIHZpcnR1YWwgT2JqZWN0Q29udGVudFR5cGUgb2JqZWN0
Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSB7IHJl
dHVybiBPYmplY3RDb250ZW50VHlwZSgpOyB9CisgICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJpZGVN
ZWRpYVR5cGUoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQorCiB9OwogCiBjbGFzcyBTVkdF
bXB0eUVkaXRvckNsaWVudCA6IHB1YmxpYyBFZGl0b3JDbGllbnQgewpJbmRleDogV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODk3NSkK
KysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAw
Ny0wMS0xOSAgTGFycyBLbm9sbCA8bGFyc0B0cm9sbHRlY2guY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN0dWJzIGZvciB0aGUgbmV3
IEZyYW1lTG9hZGVyQ2xpZW50IG1ldGhvZHMuCisgICAgICAgIFJlbW92ZWQgYSBjaGVjayBpbiBj
cmVhdGVDaGlsZEZyYW1lTmFtZWQgdGhhdCBoYXMgbm93IGJlZW4KKyAgICAgICAgbW92ZWQgdG8g
RnJhbWVMb2FkZXI6OmxvYWRTdWJGcmFtZQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVCcmlkZ2UubW06CisgICAgICAgICgtW1dlYkZyYW1lQnJpZGdlIGNyZWF0ZUNoaWxkRnJh
bWVOYW1lZDp3aXRoVVJMOnJlZmVycmVyOm93bmVyRWxlbWVudDphbGxvd3NTY3JvbGxpbmc6bWFy
Z2luV2lkdGg6bWFyZ2luSGVpZ2h0Ol0pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlRnJhbWUp
OgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6Om9iamVjdENvbnRlbnRUeXBlKToKKyAg
ICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAoV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQpOgorICAgICAgICAoV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6Om92ZXJyaWRlTWVkaWFUeXBlKToKKwogMjAwNy0wMS0xOCAgQWRh
bSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0aC4K
SW5kZXg6IFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDE4
OTczKQorKysgV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zODksMTAgKzM4OSw2IEBAIE5TU3RyaW5nICpXZWJQbHVnaW5Db250YWluZXJL
ZXkgPSAgIEAiV2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5XaWR0
aDooaW50KXdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5IZWln
aHQ6KGludCloZWlnaHQKIHsKLSAgICBib29sIGhpZGVSZWZlcnJlcjsKLSAgICBpZiAoIW1fZnJh
bWUtPmxvYWRlcigpLT5jYW5Mb2FkKFVSTCwgcmVmZXJyZXIsIGhpZGVSZWZlcnJlcikpCi0gICAg
ICAgIHJldHVybiAwOwotCiAgICAgQVNTRVJUKF9mcmFtZSk7CiAgICAgCiAgICAgV2ViRnJhbWVW
aWV3ICpjaGlsZFZpZXcgPSBbW1dlYkZyYW1lVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsMCwwLDApXTsKQEAgLTQxMSw3ICs0MDcsNyBAQCBOU1N0cmluZyAqV2ViUGx1Z2lu
Q29udGFpbmVyS2V5ID0gICBAIldlCiAKICAgICBSZWZQdHI8RnJhbWU+IG5ld0ZyYW1lID0gW25l
d0JyaWRnZSBfZnJhbWVdOwogICAgIAotICAgIFtfZnJhbWUgX2xvYWRVUkw6VVJMIHJlZmVycmVy
OihoaWRlUmVmZXJyZXIgPyBTdHJpbmcoKSA6IHJlZmVycmVyKSBpbnRvQ2hpbGQ6a2l0KG5ld0Zy
YW1lLmdldCgpKV07CisgICAgW19mcmFtZSBfbG9hZFVSTDpVUkwgcmVmZXJyZXI6cmVmZXJyZXIg
aW50b0NoaWxkOmtpdChuZXdGcmFtZS5nZXQoKSldOwogCiAgICAgLy8gVGhlIGZyYW1lJ3Mgb25s
b2FkIGhhbmRsZXIgbWF5IGhhdmUgcmVtb3ZlZCBpdCBmcm9tIHRoZSBkb2N1bWVudC4KICAgICBp
ZiAoIW5ld0ZyYW1lLT50cmVlKCktPnBhcmVudCgpKQpJbmRleDogV2ViS2l0L1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDE4OTczKQorKysgV2ViS2l0
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3OSw2ICsxNzksMTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUaXRsZShjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmIHRpdGxlLCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CiAKKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OkZyYW1lKiBjcmVhdGVGcmFtZShjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0
IFdlYkNvcmU6OlN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHJl
ZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2lu
SGVpZ2h0KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OldpZGdldCogY3JlYXRlUGx1Z2luKFdlYkNv
cmU6OkVsZW1lbnQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6
OlN0cmluZz4mLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiYsIGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6V2lkZ2V0KiBjcmVhdGVKYXZhQXBwbGV0
V2lkZ2V0KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpFbGVtZW50KiwgY29uc3Qg
SGFzaE1hcDxXZWJDb3JlOjpTdHJpbmcsIFdlYkNvcmU6OlN0cmluZz4mKTsKKyAgICAKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0
IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSk7Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdDsKKyAg
ICAKKwogICAgIHZvaWQgZGVsaXZlckFyY2hpdmVkUmVzb3VyY2VzQWZ0ZXJEZWxheSgpIGNvbnN0
OwogICAgIGJvb2wgY2FuVXNlQXJjaGl2ZWRSZXNvdXJjZShOU1VSTFJlcXVlc3QgKikgY29uc3Q7
CiAgICAgYm9vbCBjYW5Vc2VBcmNoaXZlZFJlc291cmNlKE5TVVJMUmVzcG9uc2UgKikgY29uc3Q7
CkluZGV4OiBXZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1t
CShyZXZpc2lvbiAxODk3MykKKysrIFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA2MSw2ICsxMDYxLDM3IEBAIGJvb2wgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmNhbkNhY2hlUGFnZSgKICAgICByZXR1cm4gW1tbbV93ZWJGcmFt
ZS5nZXQoKSBkYXRhU291cmNlXSByZXByZXNlbnRhdGlvbl0gaXNLaW5kT2ZDbGFzczpbV2ViSFRN
TFJlcHJlc2VudGF0aW9uIGNsYXNzXV07CiB9CiAKK0ZyYW1lKiBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxG
cmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAorCQkJCQkgY29uc3QgU3RyaW5nJiByZWZl
cnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhl
aWdodCkKK3sKKyAgICAvLyBzdHViYmVkIG91dCB1bnRpbCB0aGUgY29kZSBpcyBtb3ZlZCBoZXJl
IGZyb20gdGhlIEZyYW1lQnJpZGdlLCBhbmQgRnJhbWVMb2FkZXIgbG9zZXMgdGhlIGNyZWF0ZUZy
YW1lKCkgbWV0aG9kCisgICAgcmV0dXJuIDA7Cit9CisKK09iamVjdENvbnRlbnRUeXBlIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8gc3R1YmJlZCBvdXQgdW50aWwgdGhlIGNvZGUg
aXMgbW92ZWQgaGVyZSBmcm9tIHRoZSBGcmFtZUJyaWRnZSwgYW5kIEZyYW1lTG9hZGVyIGxvc2Vz
IHRoZSBvYmplY3RDb250ZW50VHlwZSgpIG1ldGhvZAorICAgIHJldHVybiBPYmplY3RDb250ZW50
VHlwZSgpOworfQorCitXaWRnZXQqIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4o
RWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBzdHViYmVkIG91dCB1bnRpbCB0
aGUgY29kZSBpcyBtb3ZlZCBoZXJlIGZyb20gdGhlIEZyYW1lQnJpZGdlLCBhbmQgRnJhbWVMb2Fk
ZXIgbG9zZXMgdGhlIGNyZWF0ZVBsdWdpbigpIG1ldGhvZAorICAgIHJldHVybiAwOworfQorCitX
aWRnZXQqIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0
IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKQorewor
ICAgIC8vIHN0dWJiZWQgb3V0IHVudGlsIHRoZSBjb2RlIGlzIG1vdmVkIGhlcmUgZnJvbSB0aGUg
RnJhbWVCcmlkZ2UsIGFuZCBGcmFtZUxvYWRlciBsb3NlcyB0aGUgY3JlYXRlSmF2YUFwcGxldFdp
ZGdldCgpIG1ldGhvZAorICAgIHJldHVybiAwOworfQorCitTdHJpbmcgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6Om92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QKK3sKKyAgICAvLyBzdHViYmVkIG91dCB1
bnRpbCB0aGUgY29kZSBpcyBtb3ZlZCBoZXJlIGZyb20gdGhlIEZyYW1lQnJpZGdlLCBhbmQgRnJh
bWVMb2FkZXIgbG9zZXMgdGhlIG92ZXJyaWRlTWVkaWFUeXBlKCkgbWV0aG9kCisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCiBAaW1wbGVtZW50YXRpb24gV2ViRnJhbWVQb2xpY3lMaXN0ZW5lcgog
CiAtIChpZClpbml0V2l0aFdlYkNvcmVGcmFtZTooRnJhbWUqKWZyYW1lCkluZGV4OiBXZWJLaXRR
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0UXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
ODk3MykKKysrIFdlYktpdFF0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUx
IEBACisyMDA3LTAxLTE5ICBMYXJzIEtub2xsIDxsYXJzQHRyb2xsdGVjaC5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZyYW1l
TG9hZGVyQ2xpZW50OjpjcmVhdGVGcmFtZSgpLCBzdHViIG91dCB0aGUKKyAgICAgICAgb3RoZXIg
bWV0aG9kcy4KKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZy
YW1lOjpRV2ViRnJhbWUpOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWUuaDoKKyAgICAgICAgKiBB
cGkvcXdlYmZyYW1lX3AuaDoKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAo
UVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVNYWluRnJhbWUpOgorICAgICAgICAoUVdlYlBhZ2U6OmNy
ZWF0ZUZyYW1lKToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuaDoKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmNhbmNlbFBvbGljeUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50UXQ6Om9iamVjdENvbnRlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlckNsaWVudFF0OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6Om92ZXJyaWRlTWVkaWFUeXBlKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0Lmg6CisKKzIwMDctMDEtMTggIExhcnMg
S25vbGwgPGxhcnNAdHJvbGx0ZWNoLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUZy
YW1lKCksIHN0dWIgb3V0IHRoZQorICAgICAgICBvdGhlciBtZXRob2RzLgorCisgICAgICAgICog
QXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWU6OlFXZWJGcmFtZSk6CisgICAg
ICAgICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWVfcC5oOgorICAg
ICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OmNyZWF0
ZU1haW5GcmFtZSk6CisgICAgICAgIChRV2ViUGFnZTo6Y3JlYXRlRnJhbWUpOgorICAgICAgICAq
IEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6Y2FuY2Vs
UG9saWN5Q2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6Y3Jl
YXRlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6b2JqZWN0
Q29udGVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6Y3Jl
YXRlUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0
ZUphdmFBcHBsZXRXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRR
dDo6b3ZlcnJpZGVNZWRpYVR5cGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50UXQuaDoKKwogMjAwNy0wMS0xOCAgWmFjayBSdXNpbiAgPHphY2tAa2RlLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBMYXJzLgpJbmRleDogV2ViS2l0UXQvQXBpL3F3ZWJmcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0UXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHJldmlzaW9u
IDE4OTczKQorKysgV2ViS2l0UXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGcmFtZVF0Q2xpZW50LmgiCiAjaW5jbHVkZSAiRnJh
bWVRdC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgogCiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5o
IgpAQCAtNDEsMzcgKzQyLDUwIEBACiAjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAi
b2JqZWN0LmgiCiAKKyNpbmNsdWRlICJ3dGYvSGFzaE1hcC5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAotUVdlYkZyYW1lOjpRV2ViRnJhbWUoUVdlYlBhZ2UgKnBhcmVudCkKK1FXZWJG
cmFtZTo6UVdlYkZyYW1lKFFXZWJQYWdlICpwYXJlbnQsIFFXZWJGcmFtZURhdGEgKmZyYW1lRGF0
YSkKICAgICA6IFFTY3JvbGxBcmVhKHBhcmVudCkKICAgICAsIGQobmV3IFFXZWJGcmFtZVByaXZh
dGUpCiB7CiAgICAgZC0+cGFnZSA9IHBhcmVudDsKIAogICAgIGQtPmZyYW1lTG9hZGVyQ2xpZW50
ID0gbmV3IEZyYW1lTG9hZGVyQ2xpZW50UXQoKTsKLSAgICBkLT5mcmFtZSA9IG5ldyBGcmFtZVF0
KHBhcmVudC0+ZC0+cGFnZSwgMCwgbmV3IEZyYW1lUXRDbGllbnQoKSwgZC0+ZnJhbWVMb2FkZXJD
bGllbnQpOworICAgIGQtPmZyYW1lID0gbmV3IEZyYW1lUXQocGFyZW50LT5kLT5wYWdlLCBmcmFt
ZURhdGEtPm93bmVyRWxlbWVudCwgbmV3IEZyYW1lUXRDbGllbnQoKSwgZC0+ZnJhbWVMb2FkZXJD
bGllbnQpOwogICAgIGQtPmZyYW1lTG9hZGVyQ2xpZW50LT5zZXRGcmFtZSh0aGlzLCBkLT5mcmFt
ZSk7CiAKICAgICBkLT5mcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KGQtPmZyYW1lKTsKICAgICBk
LT5mcmFtZVZpZXctPnNldFNjcm9sbEFyZWEodGhpcyk7CiAgICAgZC0+ZnJhbWUtPnNldFZpZXco
ZC0+ZnJhbWVWaWV3KTsKKyAgICBpZiAoIWZyYW1lRGF0YS0+dXJsLmlzRW1wdHkoKSkgeworICAg
ICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChmcmFtZURhdGEtPnVybCwgZnJhbWVEYXRhLT5y
ZWZlcnJlcik7CisgICAgICAgIGQtPmZyYW1lLT5sb2FkZXIoKS0+bG9hZChyZXF1ZXN0LCBmcmFt
ZURhdGEtPm5hbWUpOworICAgIH0KIH0KIAogCi1RV2ViRnJhbWU6OlFXZWJGcmFtZShRV2ViRnJh
bWUgKnBhcmVudCkKK1FXZWJGcmFtZTo6UVdlYkZyYW1lKFFXZWJGcmFtZSAqcGFyZW50LCBRV2Vi
RnJhbWVEYXRhICpmcmFtZURhdGEpCiAgICAgOiBRU2Nyb2xsQXJlYShwYXJlbnQpCiAgICAgLCBk
KG5ldyBRV2ViRnJhbWVQcml2YXRlKQogewogICAgIGQtPnBhZ2UgPSBwYXJlbnQtPmQtPnBhZ2U7
Ci0vLyAgICAgZC0+ZnJhbWVMb2FkZXJDbGllbnQgPSBuZXcgRnJhbWVMb2FkZXJDbGllbnRRdCgp
OwotLy8gICAgIGQtPmZyYW1lID0gbmV3IEZyYW1lUXQocGFnZSwgMCwgbmV3IEZyYW1lUXRDbGll
bnQoKSwgZnJhbWVMb2FkZXJDbGllbnQpOwotLy8gICAgIGQtPmZyYW1lTG9hZGVyQ2xpZW50LT5z
ZXRGcmFtZShkLT5mcmFtZSk7Ci0KLS8vICAgICBkLT5mcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3
KGQtPmZyYW1lKTsKLS8vICAgICBkLT5mcmFtZVZpZXctPnNldFNjcm9sbEFyZWEodGhpcyk7Ci0v
LyAgICAgZC0+ZnJhbWUtPnNldFZpZXcoZC0+ZnJhbWVWaWV3KTsKKworICAgIGQtPmZyYW1lTG9h
ZGVyQ2xpZW50ID0gbmV3IEZyYW1lTG9hZGVyQ2xpZW50UXQoKTsKKyAgICBkLT5mcmFtZSA9IG5l
dyBGcmFtZVF0KHBhcmVudC0+ZC0+cGFnZS0+ZC0+cGFnZSwgZnJhbWVEYXRhLT5vd25lckVsZW1l
bnQsIG5ldyBGcmFtZVF0Q2xpZW50KCksIGQtPmZyYW1lTG9hZGVyQ2xpZW50KTsKKyAgICBkLT5m
cmFtZUxvYWRlckNsaWVudC0+c2V0RnJhbWUodGhpcywgZC0+ZnJhbWUpOworCisgICAgZC0+ZnJh
bWVWaWV3ID0gbmV3IEZyYW1lVmlldyhkLT5mcmFtZSk7CisgICAgZC0+ZnJhbWVWaWV3LT5zZXRT
Y3JvbGxBcmVhKHRoaXMpOworICAgIGQtPmZyYW1lLT5zZXRWaWV3KGQtPmZyYW1lVmlldyk7Cisg
ICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoZnJhbWVEYXRhLT51cmwsIGZyYW1lRGF0YS0+cmVm
ZXJyZXIpOworICAgIAorICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUgPSBwYXJlbnQtPmQtPmZy
YW1lLT5sb2FkZXIoKS0+bG9hZFR5cGUoKTsKKyAgICBGcmFtZUxvYWRUeXBlIGNoaWxkTG9hZFR5
cGUgPSBGcmFtZUxvYWRUeXBlSW50ZXJuYWw7CisKKyAgICBkLT5mcmFtZS0+bG9hZGVyKCktPmxv
YWQoZnJhbWVEYXRhLT51cmwsIGZyYW1lRGF0YS0+cmVmZXJyZXIsIGNoaWxkTG9hZFR5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZygpLCAwLCAwLCBXVEY6Okhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+KCkpOwogfQogCiBRV2ViRnJhbWU6On5RV2ViRnJhbWUoKQpJbmRleDog
V2ViS2l0UXQvQXBpL3F3ZWJmcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFF0L0FwaS9xd2Vi
ZnJhbWUuaAkocmV2aXNpb24gMTg5NzMpCisrKyBXZWJLaXRRdC9BcGkvcXdlYmZyYW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwxOCBAQCBjbGFzcyBRV2ViUGFnZTsKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0OwogfQorY2xhc3MgUVdl
YkZyYW1lRGF0YTsKIAogY2xhc3MgUVdlYkZyYW1lIDogcHVibGljIFFTY3JvbGxBcmVhCiB7CiAg
ICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBRV2ViRnJhbWUoUVdlYlBhZ2UgKnBhcmVudCk7Ci0g
ICAgUVdlYkZyYW1lKFFXZWJGcmFtZSAqcGFyZW50KTsKK3Byb3RlY3RlZDoKKyAgICBRV2ViRnJh
bWUoUVdlYlBhZ2UgKnBhcmVudCwgUVdlYkZyYW1lRGF0YSAqZnJhbWVEYXRhKTsKKyAgICBRV2Vi
RnJhbWUoUVdlYkZyYW1lICpwYXJlbnQsIFFXZWJGcmFtZURhdGEgKmZyYW1lRGF0YSk7CiAgICAg
flFXZWJGcmFtZSgpOwogCitwdWJsaWM6CisgICAgCiAgICAgUVdlYlBhZ2UgKnBhZ2UoKSBjb25z
dDsKIAogICAgIHZvaWQgYWRkVG9KU1dpbmRvd09iamVjdChjb25zdCBRQnl0ZUFycmF5ICZuYW1l
LCBRT2JqZWN0ICpvYmplY3QpOwpJbmRleDogV2ViS2l0UXQvQXBpL3F3ZWJmcmFtZV9wLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0UXQvQXBpL3F3ZWJmcmFtZV9wLmgJKHJldmlzaW9uIDE4OTczKQor
KysgV2ViS2l0UXQvQXBpL3F3ZWJmcmFtZV9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsy
NSwxNSBAQAogI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgogI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIK
IAorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCiBuYW1l
c3BhY2UgV2ViQ29yZQogewogICAgIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAgICAgY2xh
c3MgRnJhbWVRdDsKICAgICBjbGFzcyBGcmFtZVZpZXc7CisgICAgY2xhc3MgSFRNTEZyYW1lT3du
ZXJFbGVtZW50OwogfQogY2xhc3MgUVdlYlBhZ2U7CiAKQEAgLTQ4LDUgKzUyLDE3IEBAIHB1Ymxp
YzoKICAgICBRV2ViUGFnZSAqcGFnZTsKIH07CiAKK2NsYXNzIFFXZWJGcmFtZURhdGEKK3sKK3B1
YmxpYzoKKyAgICBXZWJDb3JlOjpLVVJMIHVybDsKKyAgICBXZWJDb3JlOjpTdHJpbmcgbmFtZTsK
KyAgICBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudDsKKyAgICAK
KyAgICBXZWJDb3JlOjpTdHJpbmcgcmVmZXJyZXI7CisgICAgYm9vbCBhbGxvd3NTY3JvbGxpbmc7
CisgICAgaW50IG1hcmdpbldpZHRoOworICAgIGludCBtYXJnaW5IZWlnaHQ7ICAgIAorfTsKIAog
I2VuZGlmCkluZGV4OiBXZWJLaXRRdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFF0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDE4OTczKQorKysgV2ViS2l0UXQvQXBp
L3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTIgQEAgUVdlYlBhZ2VQ
cml2YXRlOjp+UVdlYlBhZ2VQcml2YXRlKCkKIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVN
YWluRnJhbWUoKQogewogICAgIGlmICghbWFpbkZyYW1lKSB7Ci0gICAgICAgIG1haW5GcmFtZSA9
IHEtPmNyZWF0ZUZyYW1lKDApOworICAgICAgICBRV2ViRnJhbWVEYXRhIGZyYW1lRGF0YTsKKyAg
ICAgICAgZnJhbWVEYXRhLm93bmVyRWxlbWVudCA9IDA7CisgICAgICAgIGZyYW1lRGF0YS5hbGxv
d3NTY3JvbGxpbmcgPSB0cnVlOworICAgICAgICBmcmFtZURhdGEubWFyZ2luV2lkdGggPSA1Owor
ICAgICAgICBmcmFtZURhdGEubWFyZ2luSGVpZ2h0ID0gNTsKKyAgICAgICAgbWFpbkZyYW1lID0g
cS0+Y3JlYXRlRnJhbWUoMCwgJmZyYW1lRGF0YSk7CiAgICAgICAgIGxheW91dC0+YWRkV2lkZ2V0
KG1haW5GcmFtZSk7CiAgICAgfQogfQpAQCAtNzcsMTEgKzgyLDExIEBAIFFXZWJQYWdlOjp+UVdl
YlBhZ2UoKQogICAgIGRlbGV0ZSBkOwogfQogCi1RV2ViRnJhbWUgKlFXZWJQYWdlOjpjcmVhdGVG
cmFtZShRV2ViRnJhbWUgKnBhcmVudEZyYW1lKQorUVdlYkZyYW1lICpRV2ViUGFnZTo6Y3JlYXRl
RnJhbWUoUVdlYkZyYW1lICpwYXJlbnRGcmFtZSwgUVdlYkZyYW1lRGF0YSAqZnJhbWVEYXRhKQog
ewogICAgIGlmIChwYXJlbnRGcmFtZSkKLSAgICAgICAgcmV0dXJuIG5ldyBRV2ViRnJhbWUocGFy
ZW50RnJhbWUpOwotICAgIHJldHVybiBuZXcgUVdlYkZyYW1lKHRoaXMpOworICAgICAgICByZXR1
cm4gbmV3IFFXZWJGcmFtZShwYXJlbnRGcmFtZSwgZnJhbWVEYXRhKTsKKyAgICByZXR1cm4gbmV3
IFFXZWJGcmFtZSh0aGlzLCBmcmFtZURhdGEpOwogfQogCiB2b2lkIFFXZWJQYWdlOjpvcGVuKGNv
bnN0IFFVcmwgJnVybCkKSW5kZXg6IFdlYktpdFF0L0FwaS9xd2VicGFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFF0L0FwaS9xd2VicGFnZS5oCShyZXZpc2lvbiAxODk3MykKKysrIFdlYktpdFF0
L0FwaS9xd2VicGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCwxMSBAQCBjbGFzcyBR
V2ViRnJhbWU7CiBjbGFzcyBRVXJsOwogCiBjbGFzcyBRV2ViUGFnZVByaXZhdGU7CitjbGFzcyBR
V2ViRnJhbWVEYXRhOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWVMb2Fk
ZXJDbGllbnRRdDsKK30KIAogY2xhc3MgUVdlYlBhZ2UgOiBwdWJsaWMgUVdpZGdldAogewpAQCAt
MzYsOCArNDEsNiBAQCBwdWJsaWM6CiAgICAgUVdlYlBhZ2UoUVdpZGdldCAqcGFyZW50KTsKICAg
ICB+UVdlYlBhZ2UoKTsKIAotICAgIHZpcnR1YWwgUVdlYkZyYW1lICpjcmVhdGVGcmFtZShRV2Vi
RnJhbWUgKnBhcmVudEZyYW1lKTsKLSAgICAvL3ZpcnR1YWwgUVdlYlBhZ2UgKmNyZWF0ZVBhZ2Uo
Li4uKTsKIAogICAgIHZvaWQgb3Blbihjb25zdCBRVXJsICZ1cmwpOwogCkBAIC02NSw5ICs2OCwx
NCBAQCBzaWduYWxzOgogICAgICAqLwogICAgIHZvaWQgbG9hZEZpbmlzaGVkKFFXZWJGcmFtZSAq
ZnJhbWUpOwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBRV2ViRnJhbWUgKmNyZWF0ZUZyYW1l
KFFXZWJGcmFtZSAqcGFyZW50RnJhbWUsIFFXZWJGcmFtZURhdGEgKmZyYW1lRGF0YSk7CisgICAg
Ly92aXJ0dWFsIFFXZWJQYWdlICpjcmVhdGVQYWdlKC4uLik7CiAgICAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIFFXZWJGcmFtZTsKKyAgICBmcmllbmQgY2xhc3MgUVdlYlBhZ2VQcml2YXRl
OworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OwogICAgIFFX
ZWJQYWdlUHJpdmF0ZSAqZDsKIH07CiAKSW5kZXg6IFdlYktpdFF0L1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFF0L1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiAxODk3MykKKysrIFdlYktpdFF0
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNr
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQog
ICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjUsMTYgKzI2LDE4IEBACiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KLSAKKwogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50UXQuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCiAKICNpbmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgorI2lu
Y2x1ZGUgInF3ZWJmcmFtZV9wLmgiCiAKICNpbmNsdWRlICJxZGVidWcuaCIKIApAQCAtMzU1LDYg
KzM1OCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hTaG93KCkKIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFF0OjpjYW5jZWxQb2xpY3lDaGVjaygpCiB7CisgICAgcURlYnVn
KCkgPDwgIkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbmNlbFBvbGljeUNoZWNrIjsKICAgICBtX3Bv
bGljeUZ1bmN0aW9uID0gMDsKIH0KIApAQCAtNzY1LDYgKzc2OSw0OCBAQCBib29sIEZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OndpbGxVc2VBcmNoaXZlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitGcmFt
ZSAqRnJhbWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJy
ZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWln
aHQpCit7CisgICAgcURlYnVnKCkgPDwgIj4+Pj4+Pj4+Pj4+IGNyZWF0ZUZyYW1lIjsKKyAgICBR
V2ViRnJhbWVEYXRhIGZyYW1lRGF0YTsKKyAgICBmcmFtZURhdGEudXJsID0gdXJsOworICAgIGZy
YW1lRGF0YS5uYW1lID0gbmFtZTsKKyAgICBmcmFtZURhdGEub3duZXJFbGVtZW50ID0gb3duZXJF
bGVtZW50OworICAgIGZyYW1lRGF0YS5yZWZlcnJlciA9IHJlZmVycmVyOworICAgIGZyYW1lRGF0
YS5hbGxvd3NTY3JvbGxpbmcgPSBhbGxvd3NTY3JvbGxpbmc7CisgICAgZnJhbWVEYXRhLm1hcmdp
bldpZHRoID0gbWFyZ2luV2lkdGg7CisgICAgZnJhbWVEYXRhLm1hcmdpbkhlaWdodCA9IG1hcmdp
bkhlaWdodDsKKyAgICAgICAgCisKKyAgICBRV2ViRnJhbWUgKndlYkZyYW1lID0gbV93ZWJGcmFt
ZS0+cGFnZSgpLT5jcmVhdGVGcmFtZShtX3dlYkZyYW1lLCAmZnJhbWVEYXRhKTsKKyAgICByZXR1
cm4gd2ViRnJhbWUtPmQtPmZyYW1lOworfQorCitPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRl
ckNsaWVudFF0OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gT2JqZWN0
Q29udGVudFR5cGUoKTsKK30KKworV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVQ
bHVnaW4oRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCitXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0
ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50UXQ6Om92ZXJyaWRlTWVkaWFUeXBlKCkg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30K
KwogfQogCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5tb2MiCkluZGV4OiBXZWJLaXRR
dC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0UXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCShyZXZpc2lvbiAxODk3
MykKKysrIFdlYktpdFF0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgTmF2aWdhdGlvbkFjdGlvbjsKICAgICBjbGFzcyBTdHJpbmc7CiAgICAgY2xhc3MgUmVzb3Vy
Y2VMb2FkZXI7Ci0KKyAgICAKICAgICBzdHJ1Y3QgTG9hZEVycm9yUmVzZXRUb2tlbjsKIAogICAg
IGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50UXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIEZyYW1l
TG9hZGVyQ2xpZW50IHsKQEAgLTIwNiw2ICsyMDYsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2dyZXNzRXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0
aW9uKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNh
dGlvbigpOworCisgICAgICAgIHZpcnR1YWwgRnJhbWUgKmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxl
bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBy
ZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdp
bkhlaWdodCkgOworICAgICAgICB2aXJ0dWFsIFdpZGdldCogY3JlYXRlUGx1Z2luKEVsZW1lbnQq
LCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIGNvbnN0IFN0cmluZyYpOworICAgICAgICB2aXJ0dWFsIFdpZGdldCogY3JlYXRlSmF2YUFw
cGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+Jik7CisKKyAgICAgICAgdmlydHVhbCBPYmplY3RDb250ZW50VHlwZSBvYmplY3RD
b250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAg
ICAgICB2aXJ0dWFsIFN0cmluZyBvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0OwogICAgICAgICAK
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IG5vdCBiZSBoZXJlLCBidXQg
aXQncyBuZWVkZWQgZm9yIHRoZSB0ZXN0cyBjdXJyZW50bHkKICAgICAgICAgdmlydHVhbCB2b2lk
IHBhcnRDbGVhcmVkSW5CZWdpbigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12610</attachid>
            <date>2007-01-22 11:11:13 -0800</date>
            <delta_ts>2007-01-23 01:44:45 -0800</delta_ts>
            <desc>new patch refactoring also the Mac code</desc>
            <filename>frames.diff</filename>
            <type>text/plain</type>
            <size>66970</size>
            <attacher name="Lars Knoll">lars.knoll</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTAyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjEgQEAKKzIwMDctMDEtMjIgIExhcnMgS25vbGwgPGxhcnNAdHJvbGx0ZWNoLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCU1ha2UgdGhlIGxh
c3QgcmVtYWluaW5nIHBpZWNlZCBvZiB0aGUgRnJhbWVMb2FkZXIgcGxhdGZvcm0gCisgICAgICAg
IGluZGVwZW5kZW50LiBNb3ZlIG1vc3Qgb2YgdGhlIGNvZGUgb3ZlciB0byBXZWJGcmFtZUxvYWRl
ckNsaWVudC4KKyAgICAgICAgU29tZSBzbWFsbGVyIGNsZWFudXBzIGluIHRoZSBXZWJGcmFtZUJy
aWRnZSwgYW5kIG1vdmVkIHNvbWUKKyAgICAgICAgcGxhdGZvcm0gaW5kZXBlbmRlbnQgZnVuY3Rp
b25hbGl0eSBvdmVyIHRvIHRoZSBzaGFyZWQgY29kZQorICAgICAgICBpbiBXZWJDb3JlLgorICAg
ICAgICAKKyAgICAgICAgKiBXZWJDb3JlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2Fk
U3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNob3VsZFVzZVBsdWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFBsdWdpbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZGV0YWNoRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6cGFydENsZWFyZWRJbkJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpkaWRDaGFuZ2VUaXRsZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9h
ZGVyLmg6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAg
ICogbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblRv
a2VuaXplcjo6d3JpdGVSYXdEYXRhKToKKyAgICAgICAgKiBsb2FkZXIvbWFjL0ZyYW1lTG9hZGVy
TWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAqIGxvYWRlci9xdC9GcmFtZUxvYWRlclF0LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpGcmFtZSk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjptZWRpYVR5cGUpOgorICAgICAgICAqIHBhZ2UvcXQvRnJhbWVRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpGcmFtZVF0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdmcvU1ZHSW1hZ2VFbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0VtcHR5RnJhbWVMb2FkZXJDbGllbnQ6Om1ha2VSZXByZXNlbnRhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZExvYWRS
ZXNvdXJjZUZyb21NZW1vcnlDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbXB0eUZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaENyZWF0ZVBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vt
cHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3kpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRW1wdHlGcmFtZUxvYWRlckNsaWVudDo6cmV2ZXJ0VG9Qcm92
aXNpb25hbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VtcHR5RnJhbWVMb2FkZXJDbGll
bnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VtcHR5RnJh
bWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRW1w
dHlGcmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRGYWxsQmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdFbXB0eUZyYW1lTG9hZGVyQ2xpZW50Ojp3aWxsVXNlQXJjaGl2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVEb2N1bWVudExvYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpjcmVh
dGVQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRW1wdHlGcmFtZUxvYWRlckNsaWVudDo6
Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbXB0eUZyYW1l
TG9hZGVyQ2xpZW50OjpvYmplY3RDb250ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdF
bXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpvdmVycmlkZU1lZGlhVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFUb1BsdWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdFbXB0eUZyYW1lTG9hZGVyQ2xpZW50Ojp3aW5kb3dPYmplY3RD
bGVhcmVkKToKKwogMjAwNy0wMS0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgTWl0ei4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cAkocmV2aXNpb24gMTkwMjgpCisrKyBXZWJD
b3JlL1dlYkNvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNiArMzQ1LDkgQEAgX19aTjdX
ZWJDb3JlNlN0cmluZzZhcHBlbmRFUktTMF8KIF9fWk43V2ViQ29yZTZTdHJpbmdDMUVQOE5TU3Ry
aW5nCiBfX1pON1dlYkNvcmU2U3RyaW5nQzFFUEtjCiBfX1pON1dlYkNvcmU2U3RyaW5nQzFFUktO
U18xNkRlcHJlY2F0ZWRTdHJpbmdFCitfX1pON1dlYkNvcmU2V2lkZ2V0N3NldFZpZXdFUDZOU1Zp
ZXcKK19fWk43V2ViQ29yZTZXaWRnZXRDMUVQNk5TVmlldworX19aTjdXZWJDb3JlNldpZGdldEMx
RXYKIF9fWk43V2ViQ29yZTdJbnRTaXplQzFFUks3X05TU2l6ZQogX19aTjdXZWJDb3JlN25zQ29s
b3JFUktOU181Q29sb3JFCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQxMWNvbXBsZXRlVVJMRVJLTlNf
MTZEZXByZWNhdGVkU3RyaW5nRQpAQCAtNDI3LDYgKzQzMCw3IEBAIF9fWk43V2ViQ29yZTlUaW1l
ckJhc2U1c3RhcnRFZGQKIF9fWk43V2ViQ29yZTlUaW1lckJhc2VDMkV2CiBfX1pON1dlYkNvcmU5
VGltZXJCYXNlRDJFdgogX19aTjdXZWJDb3JlZXFFUktOU180S1VSTEVTMl8KK19fWk5LN1dlYkNv
cmU2V2lkZ2V0N2dldFZpZXdFdgogX19aTks3V2ViQ29yZTEwU3RyaW5nSW1wbGN2UDhOU1N0cmlu
Z0V2CiBfX1pOSzdXZWJDb3JlMTFDYWNoZWRJbWFnZTVpbWFnZUV2CiBfX1pOSzdXZWJDb3JlMTFD
b250ZXh0TWVudTE5cGxhdGZvcm1EZXNjcmlwdGlvbkV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDE5MDI4KQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtNTE0LDcgKzUxNCw2IEBA
IFNPVVJDRVMgKz0gXAogICAgIGxvYWRlci9pY29uL1NRTFRyYW5zYWN0aW9uLmNwcCBcCiAgICAg
bG9hZGVyL2ljb24vU1FMU3RhdGVtZW50LmNwcCBcCiAgICAgbG9hZGVyL2ljb24vU1FMRGF0YWJh
c2UuY3BwIFwKLSAgICBsb2FkZXIvcXQvRnJhbWVMb2FkZXJRdC5jcHAgXAogICAgIGxvYWRlci9x
dC9Eb2N1bWVudExvYWRlclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vQ1N0cmluZy5jcHAgXAogICAg
IHBsYXRmb3JtL0F0b21pY1N0cmluZy5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MDI4KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3OSw3ICszNzks
NiBAQAogCQk2NTZEMzczQTBBREJBNURFMDBBNDU1NEQgLyogRm9ybVN0YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTZEMzcyMjBBREJBNURFMDBB
NDU1NEQgLyogRm9ybVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNjU2RDM3M0IwQURCQTVERTAwQTQ1NTREIC8qIEZvcm1TdGF0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTZEMzcyMzBB
REJBNURFMDBBNDU1NEQgLyogRm9ybVN0YXRlLmNwcCAqLzsgfTsKIAkJNjU2RDM3M0MwQURCQTVE
RTAwQTQ1NTREIC8qIEZyYW1lTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTZEMzcyNDBBREJBNURFMDBBNDU1NEQgLyogRnJhbWVMb2FkZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2NTZE
MzczRDBBREJBNURFMDBBNDU1NEQgLyogRnJhbWVMb2FkZXJNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTZEMzcyNTBBREJBNURFMDBBNDU1NEQg
LyogRnJhbWVMb2FkZXJNYWMubW0gKi87IH07CiAJCTY1NkQzNzNFMEFEQkE1REUwMEE0NTU0RCAv
KiBGcmFtZUxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU2RDM3MjYwQURCQTVERTAwQTQ1NTREIC8qIEZyYW1lTG9hZGVyQ2xpZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU2
RDM3M0YwQURCQTVERTAwQTQ1NTREIC8qIFJlc291cmNlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTZEMzcyNzBBREJBNURFMDBBNDU1NEQg
LyogUmVzb3VyY2VMb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk2NTZEMzc0MTBBREJBNURFMDBBNDU1NEQgLyogTWFpblJlc291cmNlTG9h
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTZE
MzcyOTBBREJBNURFMDBBNDU1NEQgLyogTWFpblJlc291cmNlTG9hZGVyLmggKi87IH07CkBAIC0z
NDYxLDcgKzM0NjAsNiBAQAogCQk2NTZEMzcyMjBBREJBNURFMDBBNDU1NEQgLyogRm9ybVN0YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtU3RhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2RDM3MjMwQURCQTVERTAwQTQ1NTREIC8qIEZvcm1T
dGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gMzA7IHBhdGggPSBGb3JtU3Rh
dGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTZEMzcyNDBBREJBNURFMDBB
NDU1NEQgLyogRnJhbWVMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZyYW1lTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1NkQzNzI1MEFE
QkE1REUwMEE0NTU0RCAvKiBGcmFtZUxvYWRlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBmaWxlRW5j
b2RpbmcgPSAzMDsgcGF0aCA9IEZyYW1lTG9hZGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2NTZEMzcyNjBBREJBNURFMDBBNDU1NEQgLyogRnJhbWVMb2FkZXJDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lTG9hZGVyQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NkQzNzI3MEFEQkE1REUwMEE0NTU0RCAv
KiBSZXNvdXJjZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVz
b3VyY2VMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2RDM3MjkwQURC
QTVERTAwQTQ1NTREIC8qIE1haW5SZXNvdXJjZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFpblJlc291cmNlTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC03ODM1LDcgKzc4MzMsNiBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKIAkJCQk2NTZEMzcxRjBBREJBNURFMDBBNDU1NEQgLyogRG9jdW1lbnRMb2FkZXJN
YWMubW0gKi8sCi0JCQkJNjU2RDM3MjUwQURCQTVERTAwQTQ1NTREIC8qIEZyYW1lTG9hZGVyTWFj
Lm1tICovLAogCQkJCTkzQTFFQUE3MEE1NjM1MDgwMDY5NjBBMCAvKiBJbWFnZURvY3VtZW50TWFj
LmggKi8sCiAJCQkJOTNBMUVBOUYwQTU2MzRDOTAwNjk2MEEwIC8qIEltYWdlRG9jdW1lbnRNYWMu
bW0gKi8sCiAJCQkJNjU2RDM3MUEwQURCQTVERTAwQTQ1NTREIC8qIExvYWRlck5TVVJMRXh0cmFz
LmggKi8sCkBAIC0xMjE1Nyw3ICsxMjE1NCw2IEBACiAJCQkJNjU2RDM3MzUwQURCQTVERTAwQTQ1
NTREIC8qIFdlYkRhdGFQcm90b2NvbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTY1NkQzNzM3MEFE
QkE1REUwMEE0NTU0RCAvKiBEb2N1bWVudExvYWRlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTY1NkQzNzNCMEFEQkE1REUwMEE0NTU0RCAvKiBGb3JtU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNjU2RDM3M0QwQURCQTVERTAwQTQ1NTREIC8qIEZyYW1lTG9hZGVyTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjU2RDM3NDQwQURCQTVERTAwQTQ1NTREIC8qIE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDY2OEUxOTAwQUREOTY0MDAw
NDEyOEUwIC8qIFBvcHVwTWVudU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTRCMzA0M0M5MEFF
MDM3MUQwMEE4MjY0NyAvKiBTb3VuZE1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMTkwMjgpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJIVE1MT2JqZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUVFBQYXJz
ZXJzLmgiCkBAIC0zOTcsNyArMzk4LDIzIEBAIGJvb2wgRnJhbWVMb2FkZXI6OnJlcXVlc3RGcmFt
ZShIVE1MRnJhbWUKIAogRnJhbWUqIEZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUoSFRNTEZyYW1l
T3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGNy
ZWF0ZUZyYW1lKHVybCwgbmFtZSwgb3duZXJFbGVtZW50LCByZWZlcnJlcik7CisgICAgYm9vbCBh
bGxvd3NTY3JvbGxpbmcgPSB0cnVlOworICAgIGludCBtYXJnaW5XaWR0aCA9IC0xOworICAgIGlu
dCBtYXJnaW5IZWlnaHQgPSAtMTsKKyAgICBpZiAob3duZXJFbGVtZW50LT5oYXNUYWdOYW1lKGZy
YW1lVGFnKSB8fCBvd25lckVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkgeworICAgICAg
ICBIVE1MRnJhbWVFbGVtZW50KiBvID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+KG93
bmVyRWxlbWVudCk7CisgICAgICAgIGFsbG93c1Njcm9sbGluZyA9IG8tPnNjcm9sbGluZ01vZGUo
KSAhPSBTY3JvbGxiYXJBbHdheXNPZmY7CisgICAgICAgIG1hcmdpbldpZHRoID0gby0+Z2V0TWFy
Z2luV2lkdGgoKTsKKyAgICAgICAgbWFyZ2luSGVpZ2h0ID0gby0+Z2V0TWFyZ2luSGVpZ2h0KCk7
CisgICAgfQorCisgICAgYm9vbCBoaWRlUmVmZXJyZXI7CisgICAgaWYgKCFjYW5Mb2FkKHVybCwg
cmVmZXJyZXIsIGhpZGVSZWZlcnJlcikpCisgICAgICAgIHJldHVybiAwOworCisgICAgRnJhbWUq
IGZyYW1lID0gbV9jbGllbnQtPmNyZWF0ZUZyYW1lKHVybCwgbmFtZSwgb3duZXJFbGVtZW50LCBo
aWRlUmVmZXJyZXIgPyBTdHJpbmcoKSA6IHJlZmVycmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhbGxvd3NTY3JvbGxpbmcsIG1hcmdpbldpZHRoLCBtYXJnaW5I
ZWlnaHQpOworCiAgICAgaWYgKCFmcmFtZSkgIHsKICAgICAgICAgY2hlY2tFbWl0TG9hZEV2ZW50
KCk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTMzNCw3ICsxMzUxLDcgQEAgYm9vbCBGcmFtZUxv
YWRlcjo6cmVxdWVzdE9iamVjdChSZW5kZXJQYQogCiBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRV
c2VQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGhh
c0ZhbGxiYWNrLCBib29sJiB1c2VGYWxsYmFjaykKIHsKLSAgICBPYmplY3RDb250ZW50VHlwZSBv
YmplY3RUeXBlID0gb2JqZWN0Q29udGVudFR5cGUodXJsLCBtaW1lVHlwZSk7CisgICAgT2JqZWN0
Q29udGVudFR5cGUgb2JqZWN0VHlwZSA9IG1fY2xpZW50LT5vYmplY3RDb250ZW50VHlwZSh1cmws
IG1pbWVUeXBlKTsKICAgICAvLyBJZiBhbiBvYmplY3QncyBjb250ZW50IGNhbid0IGJlIGhhbmRs
ZWQgYW5kIGl0IGhhcyBubyBmYWxsYmFjaywgbGV0CiAgICAgLy8gaXQgYmUgaGFuZGxlZCBhcyBh
IHBsdWdpbiB0byBzaG93IHRoZSBicm9rZW4gcGx1Z2luIGljb24uCiAgICAgdXNlRmFsbGJhY2sg
PSBvYmplY3RUeXBlID09IE9iamVjdENvbnRlbnROb25lICYmIGhhc0ZhbGxiYWNrOwpAQCAtMTM1
MSw3ICsxMzY4LDEyIEBAIGJvb2wgRnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4oUmVuZGVyUGFydCoK
ICAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlKCkgJiYgcmVuZGVyZXItPm5vZGUoKS0+aXNFbGVt
ZW50Tm9kZSgpKQogICAgICAgICAgICAgcGx1Z2luRWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihyZW5kZXJlci0+bm9kZSgpKTsKIAotICAgICAgICB3aWRnZXQgPSBjcmVhdGVQbHVnaW4o
cGx1Z2luRWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUpOwor
ICAgICAgICBib29sIGhpZGVSZWZlcnJlcjsKKyAgICAgICAgaWYgKCFjYW5Mb2FkKHVybCwgb3V0
Z29pbmdSZWZlcnJlcigpLCBoaWRlUmVmZXJyZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIHdpZGdldCA9IG1fY2xpZW50LT5jcmVhdGVQbHVnaW4ocGx1Z2luRWxlbWVu
dCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aXNQbHVnaW5E
b2N1bWVudCgpKTsKICAgICAgICAgaWYgKHdpZGdldCkgewogICAgICAgICAgICAgcmVuZGVyZXIt
PnNldFdpZGdldCh3aWRnZXQpOwogICAgICAgICAgICAgbV9jb250YWluc1BsdWdJbnMgPSB0cnVl
OwpAQCAtMjg1Nyw3ICsyODc5LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6ZGV0YWNoRnJvbVBhcmVu
dCgpCiAKICAgICBjbG9zZVVSTCgpOwogICAgIHN0b3BBbGxMb2FkZXJzKCk7Ci0gICAgbV9jbGll
bnQtPmRldGFjaGVkRnJvbVBhcmVudDEoKTsKKyAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3
U3RhdGVUb0l0ZW0oY3VycmVudEhpc3RvcnlJdGVtKCkpOwogICAgIGRldGFjaENoaWxkcmVuKCk7
CiAgICAgbV9jbGllbnQtPmRldGFjaGVkRnJvbVBhcmVudDIoKTsKICAgICBzZXREb2N1bWVudExv
YWRlcigwKTsKQEAgLTI4NjksNyArMjg5MSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRldGFjaEZy
b21QYXJlbnQoKQogICAgICAgICBtX2ZyYW1lLT5wYWdlRGVzdHJveWVkKCk7CiAgICAgfQogI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBjbG9zZUJyaWRnZSgpOworICAgIFtNYWMobV9mcmFtZSktPmJy
aWRnZSgpIGNsb3NlXTsKICNlbmRpZgogICAgIG1fY2xpZW50LT5kZXRhY2hlZEZyb21QYXJlbnQ0
KCk7CiB9CkBAIC00MjI2LDUgKzQyNDgsNDcgQEAgU3RyaW5nIEZyYW1lTG9hZGVyOjpyZWZlcnJl
cigpIGNvbnN0CiAgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKS5odHRwUmVm
ZXJyZXIoKTsKIH0KIAordm9pZCBGcmFtZUxvYWRlcjo6cGFydENsZWFyZWRJbkJlZ2luKCkKK3sK
KyAgICBpZiAobV9mcmFtZS0+c2V0dGluZ3MoKS0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpKQorICAg
ICAgICBtX2NsaWVudC0+d2luZG93T2JqZWN0Q2xlYXJlZCgpOworfQorCitXaWRnZXQqIEZyYW1l
TG9hZGVyOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBhcmdzKQoreworICAg
IFN0cmluZyBiYXNlVVJMU3RyaW5nOworICAgIFZlY3RvcjxTdHJpbmc+IHBhcmFtTmFtZXM7Cisg
ICAgVmVjdG9yPFN0cmluZz4gcGFyYW1WYWx1ZXM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFyZ3MuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPFN0
cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPmZpcnN0Lmxvd2VyKCkgPT0gImJhc2V1cmwiKQor
ICAgICAgICAgICAgYmFzZVVSTFN0cmluZyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHBhcmFtTmFt
ZXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAgIHBhcmFtVmFsdWVzLmFwcGVuZChpdC0+c2Vj
b25kKTsKKyAgICB9CisgICAgCisgICAgaWYgKGJhc2VVUkxTdHJpbmcuaXNFbXB0eSgpKQorICAg
ICAgICBiYXNlVVJMU3RyaW5nID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpOworICAg
IEtVUkwgYmFzZVVSTCA9IGNvbXBsZXRlVVJMKGJhc2VVUkxTdHJpbmcpOworCisgICAgV2lkZ2V0
KiB3aWRnZXQgPSBtX2NsaWVudC0+Y3JlYXRlSmF2YUFwcGxldFdpZGdldChzaXplLCBlbGVtZW50
LCBiYXNlVVJMLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgaWYod2lkZ2V0KQorICAg
ICAgICBtX2ZyYW1lLT52aWV3KCktPmFkZENoaWxkKHdpZGdldCk7CisgICAgcmV0dXJuIHdpZGdl
dDsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6ZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIq
IGxvYWRlcikKK3sKKyAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlVGl0bGUobG9hZGVyKTsKKworICAg
IC8vIFRoZSB0aXRsZSBkb2Vzbid0IGdldCBjb21tdW5pY2F0ZWQgdG8gdGhlIFdlYlZpZXcgdW50
aWwgd2UgYXJlIGNvbW1pdHRlZC4KKyAgICBpZiAobG9hZGVyLT5pc0NvbW1pdHRlZCgpKSB7Cisg
ICAgICAgIC8vIE11c3QgdXBkYXRlIHRoZSBlbnRyaWVzIGluIHRoZSBiYWNrLWZvcndhcmQgbGlz
dCB0b28uCisgICAgICAgIC8vIFRoaXMgbXVzdCBnbyB0aHJvdWdoIHRoZSBXZWJGcmFtZSBiZWNh
dXNlIGl0IGhhcyB0aGUgcmlnaHQgbm90aW9uIG9mIHRoZSBjdXJyZW50IGIvZiBpdGVtLgorICAg
ICAgICBtX2NsaWVudC0+c2V0VGl0bGUobG9hZGVyLT50aXRsZSgpLCBsb2FkZXItPnVybEZvckhp
c3RvcnkoKSk7CisgICAgICAgIG1fY2xpZW50LT5zZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KHRy
dWUpOyAvLyB1cGRhdGUgb2JzZXJ2ZXJzIHdpdGggbmV3IERPTURvY3VtZW50CisgICAgICAgIG1f
Y2xpZW50LT5kaXNwYXRjaERpZFJlY2VpdmVUaXRsZShsb2FkZXItPnRpdGxlKCkpOworICAgIH0K
K30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZp
c2lvbiAxOTAyOCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDEwICs4Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBjbGFzcyBUaW1lcjsKIAotICAgIGVudW0gT2JqZWN0Q29udGVudFR5cGUg
ewotICAgICAgICBPYmplY3RDb250ZW50Tm9uZSwgT2JqZWN0Q29udGVudEltYWdlLCBPYmplY3RD
b250ZW50RnJhbWUsIE9iamVjdENvbnRlbnRQbHVnaW4KLSAgICB9OwotCiAgICAgdHlwZWRlZiBI
YXNoU2V0PFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gPiBSZXNvdXJjZUxvYWRlclNldDsKIAogICAg
IGJvb2wgaXNCYWNrRm9yd2FyZExvYWRUeXBlKEZyYW1lTG9hZFR5cGUpOwpAQCAtMTYzLDkgKzE1
OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gQWxzbyBub3QgY29vbC4KICAg
ICAgICAgdm9pZCBzdG9wTG9hZGluZ1BsdWdJbnMoKTsKICAgICAgICAgdm9pZCBzdG9wTG9hZGlu
Z1N1YnJlc291cmNlcygpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgdm9pZCBjbG9zZUJy
aWRnZSgpOwotI2VuZGlmCiAgICAgICAgIHZvaWQgY2FuY2VsTWFpblJlc291cmNlTG9hZChjb25z
dCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgIHZvaWQgc3RvcEFsbExvYWRlcnMoKTsKICAgICAg
ICAgdm9pZCBjYW5jZWxNYWluUmVzb3VyY2VMb2FkKCk7CkBAIC0yODEsNyArMjc0LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVybFNlbGVjdGVkKGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmLCBFdmVudCopOwogICAgICAgCiAgICAgICAgIGJvb2wgcmVxdWVzdEZyYW1lKEhU
TUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYgVVJMLCBjb25zdCBBdG9taWNTdHJp
bmcmIGZyYW1lTmFtZSk7Ci0gICAgICAgIEZyYW1lKiBjcmVhdGVGcmFtZShjb25zdCBLVVJMJiBV
UkwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3QgU3Ry
aW5nJiByZWZlcnJlcik7CiAgICAgICAgIEZyYW1lKiBsb2FkU3ViZnJhbWUoSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiwgY29uc3QgS1VSTCYgVVJMLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgcmVmZXJyZXIpOwogCiAgICAgICAgIHZvaWQgc3VibWl0Rm9ybShjb25zdCBjaGFyKiBh
Y3Rpb24sIGNvbnN0IFN0cmluZyYgVVJMLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiwgY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91
bmRhcnksIEV2ZW50Kik7CkBAIC0zNDcsOCArMzM5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIFN0cmluZyBvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0OwogCi0gICAgICAgIHZv
aWQgcmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQpOwotCiAgICAgICAg
IEZyYW1lKiBvcGVuZXIoKTsKICAgICAgICAgdm9pZCBzZXRPcGVuZXIoRnJhbWUqKTsKICAgICAg
ICAgYm9vbCBvcGVuZWRCeUphdmFTY3JpcHQoKTsKQEAgLTM5NSwxMyArMzg1LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiBV
UkwpOwogCi0gICAgICAgIFdpZGdldCogY3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBjb25zdCBLVVJM
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsCi0gICAgICAgICAgICBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotCiAg
ICAgICAgIHZvaWQgY2xlYXIoYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRpZXMgPSB0cnVlKTsKIAot
ICAgICAgICBPYmplY3RDb250ZW50VHlwZSBvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotCiAgICAgICAgIHZvaWQgZGlkVGVsbEJyaWRn
ZUFib3V0TG9hZChjb25zdCBTdHJpbmcmIFVSTCk7CiAgICAgICAgIGJvb2wgaGF2ZVRvbGRCcmlk
Z2VBYm91dExvYWQoY29uc3QgU3RyaW5nJiBVUkwpOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyQ2xpZW50LmgJKHJldmlzaW9uIDE5MDI4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBGcmFt
ZUxvYWRlckNsaWVudF9oCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVk
ZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CiAKQEAgLTQxLDYgKzQyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEZyYW1lTG9hZGVyOwogICAgIGNsYXNzIEhpc3RvcnlJ
dGVtOworICAgIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKKyAgICBjbGFzcyBJbnRTaXpl
OwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgTmF2aWdhdGlvbkFjdGlvbjsKICAgICBjbGFz
cyBQYWdlQ2FjaGU7CkBAIC01MCw2ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKICAgICBj
bGFzcyBTdHJpbmc7CisgICAgY2xhc3MgV2lkZ2V0OwogCiAgICAgdHlwZWRlZiB2b2lkIChGcmFt
ZUxvYWRlcjo6KkZyYW1lUG9saWN5RnVuY3Rpb24pKFBvbGljeUFjdGlvbik7CiAKQEAgLTcxLDcg
Kzc1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRD
b3BpZXNPblNjcm9sbCgpID0gMDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9t
UGFyZW50MSgpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDIo
KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJlbnQzKCkgPSAwOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50NCgpID0gMDsKQEAgLTE4MCw2
ICsxODMsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgc2F2
ZURvY3VtZW50Vmlld1RvUGFnZUNhY2hlKFBhZ2VDYWNoZSopID0gMDsKICAgICAgICAgdmlydHVh
bCBib29sIGNhbkNhY2hlUGFnZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRv
d25sb2FkKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpID0gMDsKKworICAgICAgICB2aXJ0dWFsIEZyYW1lKiBjcmVhdGVGcmFt
ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVt
ZW50KiBvd25lckVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lk
dGgsIGludCBtYXJnaW5IZWlnaHQpID0gMDsKKyAgICAgICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0
ZVBsdWdpbihFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sIGxvYWRNYW51YWxseSkgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVn
aW5XaWRnZXQpID0gMDsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgV2lkZ2V0KiBjcmVhdGVK
YXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFz
ZVVSTCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbVZhbHVlcykgPSAwOworCisgICAgICAgIHZpcnR1YWwgT2JqZWN0Q29udGVudFR5
cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKSA9IDA7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIG92ZXJyaWRlTWVkaWFUeXBlKCkgY29u
c3QgPSAwOworCisgICAgICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCkgY29u
c3QgPSAwOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlclR5cGVzLmgJKHJldmlzaW9uIDE5MDI4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXJUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIE5hdmlnYXRpb25UeXBlT3RoZXIKICAgICB9OwogCisgICAg
ZW51bSBPYmplY3RDb250ZW50VHlwZSB7CisgICAgICAgIE9iamVjdENvbnRlbnROb25lLAorICAg
ICAgICBPYmplY3RDb250ZW50SW1hZ2UsCisgICAgICAgIE9iamVjdENvbnRlbnRGcmFtZSwKKyAg
ICAgICAgT2JqZWN0Q29udGVudFBsdWdpbgorICAgIH07CiB9CiAKICNlbmRpZgpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL1BsdWdpbkRvY3VtZW50LmNwcAkocmV2aXNpb24gMTkwMjgpCisrKyBXZWJDb3JlL2xvYWRl
ci9QbHVnaW5Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKQEAgLTk0LDggKzk1LDkgQEAgYm9v
bCBQbHVnaW5Ub2tlbml6ZXI6OndyaXRlUmF3RGF0YShjb25zdAogICAgIGlmICghbV9lbWJlZEVs
ZW1lbnQpIHsKICAgICAgICAgY3JlYXRlRG9jdW1lbnRTdHJ1Y3R1cmUoKTsKIAotICAgICAgICBp
ZiAobV9kb2MtPmZyYW1lKCktPnNldHRpbmdzKCktPmFyZVBsdWdpbnNFbmFibGVkKCkpIHsKLSAg
ICAgICAgICAgIG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+cmVkaXJlY3REYXRhVG9QbHVnaW4o
c3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4obV9lbWJlZEVsZW1lbnQtPnJlbmRlcmVyKCkpLT53
aWRnZXQoKSk7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jLT5mcmFtZSgpOworICAgICAg
ICBpZiAoZnJhbWUtPnNldHRpbmdzKCktPmFyZVBsdWdpbnNFbmFibGVkKCkpIHsKKyAgICAgICAg
ICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnJlZGlyZWN0RGF0YVRvUGx1Z2luKHN0YXRp
Y19jYXN0PFJlbmRlcldpZGdldCo+KG1fZW1iZWRFbGVtZW50LT5yZW5kZXJlcigpKS0+d2lkZ2V0
KCkpOwogICAgICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9tYWMvRnJhbWVMb2FkZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvbWFjL0ZyYW1lTG9hZGVyTWFjLm1tCShyZXZpc2lvbiAxOTAyOCkKKysrIFdlYkNv
cmUvbG9hZGVyL21hYy9GcmFtZUxvYWRlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwyMTUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkZyYW1l
TG9hZGVyLmgiCi0KLSNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiQ2FjaGUu
aCIKLSNpbXBvcnQgIkNocm9tZS5oIgotI2ltcG9ydCAiRE9NRWxlbWVudEludGVybmFsLmgiCi0j
aW1wb3J0ICJEb2N1bWVudC5oIgotI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbXBvcnQg
IkV2ZW50LmgiCi0jaW1wb3J0ICJGbG9hdFJlY3QuaCIKLSNpbXBvcnQgIkZvcm1EYXRhU3RyZWFt
TWFjLmgiCi0jaW1wb3J0ICJGb3JtU3RhdGUuaCIKLSNpbXBvcnQgIkZyYW1lTG9hZFJlcXVlc3Qu
aCIKLSNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW1wb3J0ICJGcmFtZU1hYy5oIgot
I2ltcG9ydCAiRnJhbWVQcml2YXRlLmgiCi0jaW1wb3J0ICJGcmFtZVRyZWUuaCIKLSNpbXBvcnQg
IkZyYW1lVmlldy5oIgotI2ltcG9ydCAiSGlzdG9yeUl0ZW0uaCIKLSNpbXBvcnQgIkhUTUxGb3Jt
RWxlbWVudC5oIgotI2ltcG9ydCAiSFRNTEZyYW1lRWxlbWVudC5oIgotI2ltcG9ydCAiSFRNTE5h
bWVzLmgiCi0jaW1wb3J0ICJJY29uRGF0YWJhc2UuaCIKLSNpbXBvcnQgIkxvYWRlck5TVVJMRXh0
cmFzLmgiCi0jaW1wb3J0ICJNYWluUmVzb3VyY2VMb2FkZXIuaCIKLSNpbXBvcnQgIk5hdmlnYXRp
b25BY3Rpb24uaCIKLSNpbXBvcnQgIlBhZ2UuaCIKLSNpbXBvcnQgIlBhZ2VTdGF0ZS5oIgotI2lt
cG9ydCAiUGx1Z2luLmgiCi0jaW1wb3J0ICJSZXNvdXJjZUVycm9yLmgiCi0jaW1wb3J0ICJSZXNv
dXJjZUhhbmRsZS5oIgotI2ltcG9ydCAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW1wb3J0ICJSZXNv
dXJjZVJlc3BvbnNlLmgiCi0jaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKLSNpbXBvcnQgIlNldHRp
bmdzLmgiCi0jaW1wb3J0ICJTdWJyZXNvdXJjZUxvYWRlci5oIgotI2ltcG9ydCAiU3lzdGVtVGlt
ZS5oIgotI2ltcG9ydCAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2ltcG9ydCAiV2ViQ29yZUZy
YW1lQnJpZGdlLmgiCi0jaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW1wb3J0
ICJXZWJEYXRhUHJvdG9jb2wuaCIKLSNpbXBvcnQgIldpZGdldC5oIgotI2ltcG9ydCAiV2luZG93
RmVhdHVyZXMuaCIKLSNpbXBvcnQgPGtqcy9KU0xvY2suaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKLQotdm9pZCBGcmFtZUxvYWRlcjo6ZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlcikKLXsKLSAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlVGl0bGUobG9hZGVyKTsKLQotICAgIC8v
IFRoZSB0aXRsZSBkb2Vzbid0IGdldCBjb21tdW5pY2F0ZWQgdG8gdGhlIFdlYlZpZXcgdW50aWwg
d2UgYXJlIGNvbW1pdHRlZC4KLSAgICBpZiAobG9hZGVyLT5pc0NvbW1pdHRlZCgpKQotICAgICAg
ICBpZiAoTlNVUkwgKnVybEZvckhpc3RvcnkgPSBjYW5vbmljYWxVUkwobG9hZGVyLT51cmxGb3JI
aXN0b3J5KCkuZ2V0TlNVUkwoKSkpIHsKLSAgICAgICAgICAgIC8vIE11c3QgdXBkYXRlIHRoZSBl
bnRyaWVzIGluIHRoZSBiYWNrLWZvcndhcmQgbGlzdCB0b28uCi0gICAgICAgICAgICAvLyBUaGlz
IG11c3QgZ28gdGhyb3VnaCB0aGUgV2ViRnJhbWUgYmVjYXVzZSBpdCBoYXMgdGhlIHJpZ2h0IG5v
dGlvbiBvZiB0aGUgY3VycmVudCBiL2YgaXRlbS4KLSAgICAgICAgICAgIG1fY2xpZW50LT5zZXRU
aXRsZShsb2FkZXItPnRpdGxlKCksIHVybEZvckhpc3RvcnkpOwotICAgICAgICAgICAgbV9jbGll
bnQtPnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkodHJ1ZSk7IC8vIHVwZGF0ZSBvYnNlcnZlcnMg
d2l0aCBuZXcgRE9NRG9jdW1lbnQKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZFJl
Y2VpdmVUaXRsZShsb2FkZXItPnRpdGxlKCkpOwotICAgICAgICB9Ci19Ci0KLUZyYW1lKiBGcmFt
ZUxvYWRlcjo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcmIHJlZmVy
cmVyKQotewotICAgIEJPT0wgYWxsb3dzU2Nyb2xsaW5nID0gWUVTOwotICAgIGludCBtYXJnaW5X
aWR0aCA9IC0xOwotICAgIGludCBtYXJnaW5IZWlnaHQgPSAtMTsKLSAgICBpZiAob3duZXJFbGVt
ZW50LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBvd25lckVsZW1lbnQtPmhhc1RhZ05hbWUoaWZy
YW1lVGFnKSkgewotICAgICAgICBIVE1MRnJhbWVFbGVtZW50KiBvID0gc3RhdGljX2Nhc3Q8SFRN
TEZyYW1lRWxlbWVudCo+KG93bmVyRWxlbWVudCk7Ci0gICAgICAgIGFsbG93c1Njcm9sbGluZyA9
IG8tPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJBbHdheXNPZmY7Ci0gICAgICAgIG1hcmdp
bldpZHRoID0gby0+Z2V0TWFyZ2luV2lkdGgoKTsKLSAgICAgICAgbWFyZ2luSGVpZ2h0ID0gby0+
Z2V0TWFyZ2luSGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIAotICAgIHJldHVybiBbTWFjKG1fZnJhbWUpLT5icmlkZ2UoKSBjcmVhdGVDaGls
ZEZyYW1lTmFtZWQ6bmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpdGhVUkw6dXJsLmdldE5TVVJMKCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVycmVyOnJlZmVycmVyIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyRWxlbWVudDpvd25lckVsZW1l
bnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dzU2Nyb2xs
aW5nOmFsbG93c1Njcm9sbGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFyZ2luV2lkdGg6bWFyZ2luV2lkdGgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFyZ2luSGVpZ2h0Om1hcmdpbkhlaWdodF07Ci0KLSAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiAwOwotfQotCi1PYmplY3RDb250
ZW50VHlwZSBGcmFtZUxvYWRlcjo6b2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLSAgICByZXR1cm4gKE9iamVjdENvbnRlbnRUeXBlKVtNYWMobV9mcmFtZSktPmJyaWRnZSgp
IGRldGVybWluZU9iamVjdEZyb21NSU1FVHlwZTptaW1lVHlwZSBVUkw6dXJsLmdldE5TVVJMKCld
OwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIE9iamVjdENvbnRl
bnROb25lOwotfQotCi1zdGF0aWMgTlNBcnJheSogbnNBcnJheShjb25zdCBWZWN0b3I8U3RyaW5n
PiYgdmVjdG9yKQotewotICAgIHVuc2lnbmVkIGxlbiA9IHZlY3Rvci5zaXplKCk7Ci0gICAgTlNN
dXRhYmxlQXJyYXkqIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Omxl
bl07Ci0gICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGxlbjsgeCsrKQotICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0OnZlY3Rvclt4XV07Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi1XaWRnZXQq
IEZyYW1lTG9hZGVyOjpjcmVhdGVQbHVnaW4oRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYg
dXJsLAotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1WYWx1ZXMsCi0gICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIG5ldyBXaWRnZXQoW01h
YyhtX2ZyYW1lKS0+YnJpZGdlKCkgdmlld0ZvclBsdWdpbldpdGhVUkw6dXJsLmdldE5TVVJMKCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lczpuc0FycmF5
KHBhcmFtTmFtZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRl
VmFsdWVzOm5zQXJyYXkocGFyYW1WYWx1ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTUlNRVR5cGU6bWltZVR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBET01FbGVtZW50OltET01FbGVtZW50IF9lbGVtZW50V2l0aDplbGVtZW50XQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2FkTWFudWFsbHk6bV9mcmFtZS0+ZG9jdW1lbnQoKS0+
aXNQbHVnaW5Eb2N1bWVudCgpXSk7Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBGcmFtZUxvYWRlcjo6cmVkaXJlY3REYXRhVG9QbHVnaW4o
V2lkZ2V0KiBwbHVnaW5XaWRnZXQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotICAgIFtNYWMobV9mcmFtZSktPmJyaWRnZSgpIHJlZGlyZWN0RGF0YVRvUGx1Z2luOnBsdWdp
bldpZGdldC0+Z2V0VmlldygpXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQot
Ci1XaWRnZXQqIEZyYW1lTG9hZGVyOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNp
emUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiBhcmdzKQotewotICAgIFdpZGdldCogcmVzdWx0ID0gbmV3IFdpZGdldDsKLSAgICAKLSAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgTlNNdXRhYmxlQXJyYXkgKmF0
dHJpYnV0ZU5hbWVzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgTlNNdXRh
YmxlQXJyYXkgKmF0dHJpYnV0ZVZhbHVlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRd
OwotICAgIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgYmFzZVVSTFN0cmluZzsKLSAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQoKTsKLSAgICBm
b3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFyZ3MuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+Zmlyc3QubG93ZXIoKSA9
PSAiYmFzZXVybCIpCi0gICAgICAgICAgICBiYXNlVVJMU3RyaW5nID0gaXQtPnNlY29uZC5kZXBy
ZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgIFthdHRyaWJ1dGVOYW1lcyBhZGRPYmplY3Q6aXQtPmZp
cnN0XTsKLSAgICAgICAgW2F0dHJpYnV0ZVZhbHVlcyBhZGRPYmplY3Q6aXQtPnNlY29uZF07Ci0g
ICAgfQotICAgIAotICAgIGlmIChiYXNlVVJMU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgYmFz
ZVVSTFN0cmluZyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKTsKLQotICAgIHJlc3Vs
dC0+c2V0VmlldyhbTWFjKG1fZnJhbWUpLT5icmlkZ2UoKSB2aWV3Rm9ySmF2YUFwcGxldFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXM6YXR0cmli
dXRlTmFtZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVWYWx1ZXM6YXR0cmlidXRlVmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiYXNlVVJMOmNvbXBsZXRlVVJMKGJhc2VVUkxTdHJpbmcpLmdldE5T
VVJMKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERPTUVs
ZW1lbnQ6W0RPTUVsZW1lbnQgX2VsZW1lbnRXaXRoOmVsZW1lbnRdXSk7Ci0gICAgW2F0dHJpYnV0
ZU5hbWVzIHJlbGVhc2VdOwotICAgIFthdHRyaWJ1dGVWYWx1ZXMgcmVsZWFzZV07Ci0gICAgbV9m
cmFtZS0+dmlldygpLT5hZGRDaGlsZChyZXN1bHQpOwotICAgIAotICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBGcmFtZUxv
YWRlcjo6cGFydENsZWFyZWRJbkJlZ2luKCkKLXsKLSAgICBpZiAobV9mcmFtZS0+c2V0dGluZ3Mo
KS0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpKQotICAgICAgICBbTWFjKG1fZnJhbWUpLT5icmlkZ2Uo
KSB3aW5kb3dPYmplY3RDbGVhcmVkXTsKLX0KLQotU3RyaW5nIEZyYW1lTG9hZGVyOjpvdmVycmlk
ZU1lZGlhVHlwZSgpIGNvbnN0Ci17Ci0gICAgTlNTdHJpbmcgKm92ZXJyaWRlVHlwZSA9IFtNYWMo
bV9mcmFtZSktPmJyaWRnZSgpIG92ZXJyaWRlTWVkaWFUeXBlXTsKLSAgICBpZiAob3ZlcnJpZGVU
eXBlKQotICAgICAgICByZXR1cm4gb3ZlcnJpZGVUeXBlOwotICAgIHJldHVybiBTdHJpbmcoKTsK
LX0KLQotdm9pZCBGcmFtZUxvYWRlcjo6Y2xvc2VCcmlkZ2UoKQotewotICAgIFtNYWMobV9mcmFt
ZSktPmJyaWRnZSgpIGNsb3NlXTsKLX0KLQotCi19CkluZGV4OiBXZWJDb3JlL2xvYWRlci9xdC9G
cmFtZUxvYWRlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9xdC9GcmFtZUxv
YWRlclF0LmNwcAkocmV2aXNpb24gMTkwMjgpCisrKyBXZWJDb3JlL2xvYWRlci9xdC9GcmFtZUxv
YWRlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhbWVRdC5oIgotCi0jaW5jbHVkZSAiRE9N
SW1wbGVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWRpdG9yQ2xpZW50UXQu
aCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVQcml2YXRlLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNp
bmNsdWRlICJGb3JtU3RhdGUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJIVE1MRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxGb3JtRWxlbWVudC5oIgotI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCi0jaW5jbHVkZSAi
SlNMb2NrLmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgotI2lu
Y2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQu
aCIKLSNpbmNsdWRlICJQbHVnaW4uaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgotI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgot
I2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNp
bmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKLSNpbmNsdWRl
ICJranNfd2luZG93LmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0KLSNpbmNsdWRlIDxR
U2Nyb2xsQXJlYT4KLSNpbmNsdWRlIDxxZGVidWcuaD4KLQotI2RlZmluZSBub3RJbXBsZW1lbnRl
ZCgpIHFEZWJ1ZygiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkICglcykiLCBfX0ZJTEVfXywg
X19MSU5FX18sIF9fRlVOQ1RJT05fXykKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0KLUZyYW1l
KiBGcmFtZUxvYWRlcjo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcm
IHJlZmVycmVyKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LU9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyOjpvYmplY3RDb250ZW50VHlwZShjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBPYmplY3RDb250ZW50VHlwZSgpOwotfQotCi1XaWRnZXQqIEZyYW1lTG9hZGVy
OjpjcmVhdGVQbHVnaW4oRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1XaWRnZXQqIEZyYW1lTG9hZGVyOjpjcmVh
dGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLVN0cmluZyBGcmFtZUxvYWRlcjo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdAot
ewotICAgIC8vIG5vLW9wCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEZyYW1lTG9h
ZGVyOjpwYXJ0Q2xlYXJlZEluQmVnaW4oKQotewotICAgIGlmIChtX2ZyYW1lLT5zZXR0aW5ncygp
LT5pc0phdmFTY3JpcHRFbmFibGVkKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PEZyYW1lTG9hZGVy
Q2xpZW50UXQqPihtX2NsaWVudCktPnBhcnRDbGVhcmVkSW5CZWdpbigpOwotfQotCi12b2lkIEZy
YW1lTG9hZGVyOjpkaWRDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciogbG9hZGVyKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgbV9jbGllbnQtPmRpZENoYW5nZVRpdGxlKGxvYWRlcik7
Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXI6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCogcGx1
Z2luV2lkZ2V0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLQotfQotCi0vLyB2aW06
IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAxOTAyOCkKKysrIFdlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsOCBAQCBGcmFtZTo6RnJh
bWUoUGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFCiAgICAgICAgIG93bmVyRWxlbWVudC0+bV9j
b250ZW50RnJhbWUgPSB0aGlzOwogICAgIH0KIAorICAgIHNldFNldHRpbmdzKHBhZ2UtPnNldHRp
bmdzKCkpOworCiAjaWZuZGVmIE5ERUJVRwogICAgICsrRnJhbWVDb3VudGVyOjpjb3VudDsKICNl
bmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDE5MDI4KQorKysgV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCkBAIC01NDksNyArNTUwLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldE1lZGlhVHlwZShj
b25zdCBTdHJpbgogU3RyaW5nIEZyYW1lVmlldzo6bWVkaWFUeXBlKCkgY29uc3QKIHsKICAgICAv
LyBTZWUgaWYgd2UgaGF2ZSBhbiBvdmVycmlkZSB0eXBlLgotICAgIFN0cmluZyBvdmVycmlkZVR5
cGUgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+b3ZlcnJpZGVNZWRpYVR5cGUoKTsKKyAgICBTdHJpbmcg
b3ZlcnJpZGVUeXBlID0gbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5vdmVycmlkZU1lZGlh
VHlwZSgpOwogICAgIGlmICghb3ZlcnJpZGVUeXBlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
b3ZlcnJpZGVUeXBlOwogICAgIHJldHVybiBkLT5tX21lZGlhVHlwZTsKSW5kZXg6IFdlYkNvcmUv
cGFnZS9xdC9GcmFtZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvcXQvRnJhbWVR
dC5jcHAJKHJldmlzaW9uIDE5MDI4KQorKysgV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDMsMjIgKzEwMyw2IEBAIEZyYW1lUXQ6OkZyYW1lUXQoUGFnZSog
cGFnZSwgSFRNTEZyYW1lT3cKICAgICA6IEZyYW1lKHBhZ2UsIG93bmVyRWxlbWVudCwgZnJhbWVM
b2FkZXIpCiAgICAgLCBtX2JpbmRpbmdSb290KDApCiB7Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdz
ID0gbmV3IFNldHRpbmdzOwotICAgIHNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkodHJ1ZSk7Ci0gICAgc2V0dGluZ3MtPnNldE1pbmltdW1Gb250U2l6ZSg1KTsKLSAgICBzZXR0
aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSg1KTsKLSAgICBzZXR0aW5ncy0+c2V0U2hv
dWxkUHJpbnRCYWNrZ3JvdW5kcyh0cnVlKTsKLSAgICBzZXR0aW5ncy0+c2V0SmF2YVNjcmlwdEVu
YWJsZWQodHJ1ZSk7Ci0KLSAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTQp
OwotICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoMTQpOwotICAgIHNldHRpbmdzLT5z
ZXRTZXJpZkZvbnRGYW1pbHkoIlRpbWVzIE5ldyBSb21hbiIpOwotICAgIHNldHRpbmdzLT5zZXRT
YW5zU2VyaWZGb250RmFtaWx5KCJBcmlhbCIpOwotICAgIHNldHRpbmdzLT5zZXRGaXhlZEZvbnRG
YW1pbHkoIkNvdXJpZXIiKTsKLSAgICBzZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KCJB
cmlhbCIpOwotCi0gICAgc2V0U2V0dGluZ3Moc2V0dGluZ3MpOwotCiAgICAgbV9jbGllbnQgPSBm
cmFtZUNsaWVudDsKICAgICBtX2NsaWVudC0+c2V0RnJhbWUodGhpcyk7CiB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdJbWFnZUVtcHR5Q2xpZW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR0ltYWdlRW1wdHlDbGllbnRz
LmgJKHJldmlzaW9uIDE5MDI4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZH
SW1hZ2VFbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDkgKzExOSw2IEBAIHB1
YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgbWFrZURvY3VtZW50VmlldygpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBtYWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqKSB7IH0KLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lkIHNldERvY3VtZW50Vmlld0Zyb21QYWdl
Q2FjaGUoTlNEaWN0aW9uYXJ5ICopIHsgfQotI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGZvcmNl
TGF5b3V0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpIHsg
fQogICAgIApAQCAtMTM2LDE0ICsxMzMsMTIgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRDb3BpZXNPblNjcm9sbCgpIHsgfQogICAgICAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoZWRGcm9tUGFyZW50MSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21Q
YXJlbnQyKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDMoKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50NCgpIHsgfQogICAgIAogICAgIHZp
cnR1YWwgdm9pZCBsb2FkZWRGcm9tUGFnZUNhY2hlKCkgeyB9CiAgICAgCi0jaWYgUExBVEZPUk0o
TUFDKQogICAgIHZpcnR1YWwgdm9pZCBkb3dubG9hZChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KICAgICAKICAgICB2
aXJ0dWFsIHZvaWQgYXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIHsg
fQpAQCAtMTU1LDcgKzE1MCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyhEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsg
fQogICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmLCBpbnQgbGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCiAgICAgCiAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkKCkgeyB9CkBAIC0xNjcsMjkgKzE2MSwyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpIHsgfQotI2lmIFBMQVRGT1JNKE1B
QykKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0
IFJlc291cmNlRXJyb3ImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9h
ZChjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9Ci0jZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRGaW5pc2hMb2FkKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlyc3RM
YXlvdXQoKSB7IH0KICAgICAKLSNpZiBQTEFURk9STShNQUMpCiAgICAgdmlydHVhbCBGcmFtZSog
ZGlzcGF0Y2hDcmVhdGVQYWdlKCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCiAgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoU2hvdygpIHsgfQogICAgIAotI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShGcmFtZVBvbGljeUZ1bmN0
aW9uLCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24o
RnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVu
Y3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSB7
IH0KLSNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxQb2xpY3lDaGVjaygpIHsgfQogICAg
IAotI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hVbmFibGVUb0lt
cGxlbWVudFBvbGljeShjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9Ci0jZW5kaWYKIAogICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24sIFBh
c3NSZWZQdHI8Rm9ybVN0YXRlPikgeyB9CiAgICAgCkBAIC0xOTcsOSArMTgzLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBjbGVhckxvYWRpbmdGcm9tUGFnZUNhY2hlKERvY3VtZW50TG9h
ZGVyKikgeyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZ0Zyb21QYWdlQ2FjaGUoRG9jdW1l
bnRMb2FkZXIqKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIHJldmVydFRvUHJvdmlz
aW9uYWxTdGF0ZShEb2N1bWVudExvYWRlciopIHsgfQotI2lmIFBMQVRGT1JNKE1BQykKICAgICB2
aXJ0dWFsIHZvaWQgc2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBS
ZXNvdXJjZUVycm9yJikgeyB9Ci0jZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJVbmFyY2hp
dmluZ1N0YXRlKERvY3VtZW50TG9hZGVyKikgeyB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHdp
bGxDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcygpIHsgfQpAQCAtMjEwLDIwICsxOTQsMTUgQEAgcHVi
bGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJv
b2wpIHsgfQogICAgIAotI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRE
b3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSB7IH0KLSNlbmRpZgogICAgIAogICAgIHZp
cnR1YWwgdm9pZCB3aWxsQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKSB7IH0KICAgICAKLSNpZiBQ
TEFURk9STShNQUMpCiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2Fk
ZXIqLCBjb25zdCBjaGFyKiwgaW50KSB7IH0KLSNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBmaW5p
c2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZmluYWxT
ZXR1cEZvclJlcGxhY2UoRG9jdW1lbnRMb2FkZXIqKSB7IH0KICAgICAKLSNpZiBQTEFURk9STShN
QUMpCiAgICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYpIHsgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsgfQogICAgIHZpcnR1YWwgUmVz
b3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyBy
ZXR1cm4gUmVzb3VyY2VFcnJvcigpOyB9CiAgICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGludGVy
cnVwdEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIHsgcmV0dXJu
IFJlc291cmNlRXJyb3IoKTsgfQpAQCAtMjMyLDEzICsyMTEsMTAgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgUmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpIHsgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsgfQogICAgIAogICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRGYWxsQmFjayhjb25zdCBSZXNvdXJjZUVycm9yJikgeyByZXR1cm4gZmFsc2U7
IH0KLSNlbmRpZgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wp
IHsgfQogICAgIAotI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIGJvb2wgd2lsbFVzZUFy
Y2hpdmUoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBLVVJM
JiBvcmlnaW5hbFVSTCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgogICAgIHZpcnR1
YWwgYm9vbCBpc0FyY2hpdmVMb2FkUGVuZGluZyhSZXNvdXJjZUxvYWRlciopIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbFBlbmRpbmdBcmNoaXZlTG9hZChS
ZXNvdXJjZUxvYWRlciopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjbGVhckFyY2hpdmVkUmVzb3Vy
Y2VzKCkgeyB9CkBAIC0yNTYsOSArMjMyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEYXRhU291cmNl
UmVwbGFjZW1lbnQoKSB7IH0KICAgICAKLSNpZiBQTEFURk9STShNQUMpCiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpIHsgcmV0dXJuIG5ldyBEb2N1bWVudExvYWRlcihyZXF1ZXN0
KTsgfQotI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0
bGUsIGNvbnN0IEtVUkwmKSB7IH0KICAgICAKICAgICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQo
KSB7IHJldHVybiAiIjsgfQpAQCAtMjcxLDYgKzI0NSwxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHNhdmVEb2N1bWVudFZpZXdUb1BhZ2VDYWNoZShQYWdlQ2FjaGUqKSB7IH0KICAgICB2
aXJ0dWFsIGJvb2wgY2FuQ2FjaGVQYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAg
IHZpcnR1YWwgRnJhbWUqIGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Nj
cm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KSB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0ZVBsdWdpbihFbGVtZW50KiwgY29uc3QgS1VSTCYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJp
bmcmLCBib29sKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0ZUphdmFB
cHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpIHsgcmV0dXJuIDA7IH0KKyAg
ICAKKyAgICB2aXJ0dWFsIE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgeyByZXR1cm4gT2JqZWN0Q29udGVu
dFR5cGUoKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIG92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3Qg
eyByZXR1cm4gU3RyaW5nKCk7IH0KKworICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdERhdGFUb1Bs
dWdpbihXZWJDb3JlOjpXaWRnZXQqKSB7fQorICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dPYmplY3RD
bGVhcmVkKCkgY29uc3Qge30KIH07CiAKIGNsYXNzIFNWR0VtcHR5RWRpdG9yQ2xpZW50IDogcHVi
bGljIEVkaXRvckNsaWVudCB7CkluZGV4OiBXZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDI4KQorKysgV2ViS2l0L0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDA3LTAxLTIyICBMYXJzIEtub2xsIDxs
YXJzQHRyb2xsdGVjaC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKwlNYWtlIHRoZSBsYXN0IHJlbWFpbmluZyBwaWVjZWQgb2YgdGhlIEZyYW1lTG9hZGVyIHBs
YXRmb3JtIAorICAgICAgICBpbmRlcGVuZGVudC4gTW92ZSBtb3N0IG9mIHRoZSBjb2RlIG92ZXIg
dG8gV2ViRnJhbWVMb2FkZXJDbGllbnQuCisgICAgICAgIFNvbWUgc21hbGxlciBjbGVhbnVwcyBp
biB0aGUgV2ViRnJhbWVCcmlkZ2UsIGFuZCBtb3ZlZCBzb21lCisgICAgICAgIHBsYXRmb3JtIGlu
ZGVwZW5kZW50IGZ1bmN0aW9uYWxpdHkgb3ZlciB0byB0aGUgc2hhcmVkIGNvZGUKKyAgICAgICAg
aW4gV2ViQ29yZS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1t
OgorICAgICAgICAoLVtXZWJGcmFtZUJyaWRnZSBmaW5pc2hJbml0aWFsaXppbmdXaXRoUGFnZTpm
cmFtZU5hbWU6ZnJhbWVWaWV3Om93bmVyRWxlbWVudDpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVC
cmlkZ2UgY3JlYXRlQ2hpbGRGcmFtZU5hbWVkOndpdGhVUkw6cmVmZXJyZXI6b3duZXJFbGVtZW50
OmFsbG93c1Njcm9sbGluZzptYXJnaW5XaWR0aDptYXJnaW5IZWlnaHQ6XSk6CisgICAgICAgICgt
W1dlYkZyYW1lQnJpZGdlIHZpZXdGb3JQbHVnaW5XaXRoVVJMOmF0dHJpYnV0ZU5hbWVzOmF0dHJp
YnV0ZVZhbHVlczpNSU1FVHlwZTpET01FbGVtZW50OmxvYWRNYW51YWxseTpdKToKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OnNldFRpdGxlKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVh
dGVGcmFtZSk6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6b2JqZWN0Q29udGVudFR5
cGUpOgorICAgICAgICAobnNBcnJheSk6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6
Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERh
dGFUb1BsdWdpbik6CisgICAgICAgIChuc011dGFibGVBcnJheSk6CisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6b3ZlcnJpZGVNZWRpYVR5cGUpOgorICAgICAgICAoV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OndpbmRvd09iamVjdENsZWFyZWQpOgorCiAyMDA3LTAxLTIxICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW0gSC4KSW5kZXg6
IFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDE5MDI4KQor
KysgV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzQsNyArMTM0LDYgQEAgTlNTdHJpbmcgKldlYlBsdWdpbkNvbnRhaW5lcktleSA9ICAg
QCJXZQogICAgIG1fZnJhbWUgPSBuZXcgRnJhbWVNYWMocGFnZSwgb3duZXJFbGVtZW50LCBuZXcg
V2ViRnJhbWVMb2FkZXJDbGllbnQoX2ZyYW1lKSk7CiAgICAgbV9mcmFtZS0+c2V0QnJpZGdlKHNl
bGYpOwogICAgIG1fZnJhbWUtPnRyZWUoKS0+c2V0TmFtZShuYW1lKTsKLSAgICBtX2ZyYW1lLT5z
ZXRTZXR0aW5ncyhjb3JlKHdlYlZpZXcpLT5zZXR0aW5ncygpKTsKICAgICAKICAgICBbc2VsZiBz
ZXRUZXh0U2l6ZU11bHRpcGxpZXI6W3dlYlZpZXcgdGV4dFNpemVNdWx0aXBsaWVyXV07CiAKQEAg
LTM1NSwxMCArMzU0LDYgQEAgTlNTdHJpbmcgKldlYlBsdWdpbkNvbnRhaW5lcktleSA9ICAgQCJX
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbldpZHRoOihpbnQpd2lk
dGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkhlaWdodDooaW50KWhl
aWdodAogewotICAgIGJvb2wgaGlkZVJlZmVycmVyOwotICAgIGlmICghbV9mcmFtZS0+bG9hZGVy
KCktPmNhbkxvYWQoVVJMLCByZWZlcnJlciwgaGlkZVJlZmVycmVyKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KICAgICBBU1NFUlQoX2ZyYW1lKTsKICAgICAKICAgICBXZWJGcmFtZVZpZXcgKmNoaWxk
VmlldyA9IFtbV2ViRnJhbWVWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCww
LDAsMCldOwpAQCAtMzc3LDcgKzM3Miw3IEBAIE5TU3RyaW5nICpXZWJQbHVnaW5Db250YWluZXJL
ZXkgPSAgIEAiV2UKIAogICAgIFJlZlB0cjxGcmFtZT4gbmV3RnJhbWUgPSBbbmV3QnJpZGdlIF9m
cmFtZV07CiAgICAgCi0gICAgW19mcmFtZSBfbG9hZFVSTDpVUkwgcmVmZXJyZXI6KGhpZGVSZWZl
cnJlciA/IFN0cmluZygpIDogcmVmZXJyZXIpIGludG9DaGlsZDpraXQobmV3RnJhbWUuZ2V0KCkp
XTsKKyAgICBbX2ZyYW1lIF9sb2FkVVJMOlVSTCByZWZlcnJlcjpyZWZlcnJlciBpbnRvQ2hpbGQ6
a2l0KG5ld0ZyYW1lLmdldCgpKV07CiAKICAgICAvLyBUaGUgZnJhbWUncyBvbmxvYWQgaGFuZGxl
ciBtYXkgaGF2ZSByZW1vdmVkIGl0IGZyb20gdGhlIGRvY3VtZW50LgogICAgIGlmICghbmV3RnJh
bWUtPnRyZWUoKS0+cGFyZW50KCkpCkBAIC01MDQsMTAgKzQ5OSw2IEBAIE5TU3RyaW5nICpXZWJQ
bHVnaW5Db250YWluZXJLZXkgPSAgIEAiV2UKICAgICAgICAgICAgICAgICAgICAgICBET01FbGVt
ZW50OihET01FbGVtZW50ICopZWxlbWVudAogICAgICAgICAgICAgICAgICAgICBsb2FkTWFudWFs
bHk6KEJPT0wpbG9hZE1hbnVhbGx5CiB7Ci0gICAgYm9vbCBoaWRlUmVmZXJyZXI7Ci0gICAgaWYg
KCFtX2ZyYW1lLT5sb2FkZXIoKS0+Y2FuTG9hZChVUkwsIG1fZnJhbWUtPmxvYWRlcigpLT5vdXRn
b2luZ1JlZmVycmVyKCksIGhpZGVSZWZlcnJlcikpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KICAg
ICBBU1NFUlQoW2F0dHJpYnV0ZU5hbWVzIGNvdW50XSA9PSBbYXR0cmlidXRlVmFsdWVzIGNvdW50
XSk7CiAKICAgICBXZWJCYXNlUGx1Z2luUGFja2FnZSAqcGx1Z2luUGFja2FnZSA9IG5pbDsKSW5k
ZXg6IFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZp
c2lvbiAxOTAyOCkKKysrIFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw2IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29waWVzT25TY3JvbGwoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hl
ZEZyb21QYXJlbnQxKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDIoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MygpOwogICAgIHZpcnR1YWwgdm9p
ZCBkZXRhY2hlZEZyb21QYXJlbnQ0KCk7CkBAIC0xODAsNiArMTc5LDIwIEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyPiBjcmVhdGVEb2N1
bWVudExvYWRlcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0VGl0bGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB0aXRsZSwgY29uc3QgV2ViQ29y
ZTo6S1VSTCYpOwogCisgICAgdmlydHVhbCBXZWJDb3JlOjpGcmFtZSogY3JlYXRlRnJhbWUoY29u
c3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5hbWUsIFdlYkNv
cmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NT
Y3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCk7CisgICAgdmlydHVh
bCBXZWJDb3JlOjpXaWRnZXQqIGNyZWF0ZVBsdWdpbihXZWJDb3JlOjpFbGVtZW50KiwgY29uc3Qg
V2ViQ29yZTo6S1VSTCYsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTdHJpbmc+JiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpT
dHJpbmc+JiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lk
IHJlZGlyZWN0RGF0YVRvUGx1Z2luKFdlYkNvcmU6OldpZGdldCogcGx1Z2luV2lkZ2V0KTsKKyAg
ICAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OldpZGdldCogY3JlYXRlSmF2YUFwcGxldFdpZGdldChj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6RWxlbWVudCosIGNvbnN0IFdlYkNvcmU6
OktVUkwmIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisgICAgCisgICAgdmly
dHVhbCBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZSBvYmplY3RDb250ZW50VHlwZShjb25zdCBX
ZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWltZVR5cGUpOworICAg
IHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIG92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3Q7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKSBjb25zdDsKKwogICAgIHZv
aWQgZGVsaXZlckFyY2hpdmVkUmVzb3VyY2VzQWZ0ZXJEZWxheSgpIGNvbnN0OwogICAgIGJvb2wg
Y2FuVXNlQXJjaGl2ZWRSZXNvdXJjZShOU1VSTFJlcXVlc3QgKikgY29uc3Q7CiAgICAgYm9vbCBj
YW5Vc2VBcmNoaXZlZFJlc291cmNlKE5TVVJMUmVzcG9uc2UgKikgY29uc3Q7CkluZGV4OiBXZWJL
aXQvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAx
OTAyOCkKKysrIFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiV2ViRnJhbWUuaCIKICN1
bmRlZiBwcml2YXRlCiAKKyNpbXBvcnQgIkRPTUVsZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V2ViQmFja0ZvcndhcmRMaXN0LmgiCiAjaW1wb3J0ICJXZWJDaHJvbWVDbGllbnQuaCIKICNpbXBv
cnQgIldlYkRhdGFTb3VyY2VJbnRlcm5hbC5oIgpAQCAtNjUsNiArNjYsNyBAQAogI2ltcG9ydCAi
V2ViVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCiAjaW1wb3J0IDxX
ZWJDb3JlL0F1dGhlbnRpY2F0aW9uTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Jsb2NrRXhjZXB0
aW9ucy5oPgogI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9j
dW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KQEAgLTc4LDYgKzgw
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MRm9ybUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSWNvbkRhdGFiYXNlLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0xvYWRlck5TVVJMRXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01v
dXNlRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Q
YWdlQ2FjaGUuaD4KQEAgLTg5LDYgKzkyLDggQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VS
ZXF1ZXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVGcmFtZUJyaWRnZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9XZWJEYXRhUHJvdG9jb2wuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2lkZ2V0Lmg+
CisjaW1wb3J0IDxXZWJLaXQvRE9NRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViS2l0L0RPTUhUTUxG
b3JtRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW1wb3J0
IDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtMjA1LDEzICsyMTAsNiBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpzZXRDb3BpZXNPblNjCiAgICAgW1tbbV93ZWJGcmFtZS0+X3ByaXZhdGUtPndl
YkZyYW1lVmlldyBfc2Nyb2xsVmlld10gY29udGVudFZpZXddIHNldENvcGllc09uU2Nyb2xsOllF
U107CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJvbVBhcmVudDEo
KQotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpOwotICAg
IGlmIChjb3JlRnJhbWUpCi0gICAgICAgIGNvcmVGcmFtZS0+bG9hZGVyKCktPnNhdmVTY3JvbGxQ
b3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShjb3JlRnJhbWUtPmxvYWRlcigpLT5jdXJyZW50SGlz
dG9yeUl0ZW0oKSk7Ci19Ci0KIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJv
bVBhcmVudDIoKQogewogICAgIFttX3dlYkZyYW1lLT5fcHJpdmF0ZS0+aW5zcGVjdG9ycyBtYWtl
T2JqZWN0c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYkZyYW1lRGV0YWNoZWQ6KSB3aXRo
T2JqZWN0Om1fd2ViRnJhbWUuZ2V0KCldOwpAQCAtOTExLDggKzkwOSwxMSBAQCBQYXNzUmVmUHRy
PERvY3VtZW50TG9hZGVyPiBXZWJGcmFtZUxvYWRlCiAvLyBPbmNlIHRoYXQgdGFzayBpcyBjb21w
bGV0ZSwgdGhpcyB3aWxsIGdvIGF3YXkKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldFRp
dGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IEtVUkwmIFVSTCkKIHsKKyAgICBOU1VSTCog
bnNVUkwgPSBjYW5vbmljYWxVUkwoVVJMLmdldE5TVVJMKCkpOworICAgIGlmKCFuc1VSTCkKKwly
ZXR1cm47CiAgICAgTlNTdHJpbmcgKnRpdGxlTlNTdHJpbmcgPSB0aXRsZTsKLSAgICBbW1tXZWJI
aXN0b3J5IG9wdGlvbmFsU2hhcmVkSGlzdG9yeV0gaXRlbUZvclVSTDpVUkwuZ2V0TlNVUkwoKV0g
c2V0VGl0bGU6dGl0bGVOU1N0cmluZ107CisgICAgW1tbV2ViSGlzdG9yeSBvcHRpb25hbFNoYXJl
ZEhpc3RvcnldIGl0ZW1Gb3JVUkw6bnNVUkxdIHNldFRpdGxlOnRpdGxlTlNTdHJpbmddOwogICAg
IGlmIChIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSktPmxvYWRlcigp
LT5jdXJyZW50SGlzdG9yeUl0ZW0oKSkKICAgICAgICAgaXRlbS0+c2V0VGl0bGUodGl0bGUpOwog
fQpAQCAtMTA2OSw2ICsxMDcwLDExMSBAQCBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5D
YWNoZVBhZ2UoCiAgICAgcmV0dXJuIFtbW21fd2ViRnJhbWUuZ2V0KCkgZGF0YVNvdXJjZV0gcmVw
cmVzZW50YXRpb25dIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxSZXByZXNlbnRhdGlvbiBjbGFzc11d
OwogfQogCitGcmFtZSogV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUZyYW1lKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVy
RWxlbWVudCwKKwkJCQkJIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xs
aW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQpCit7CisgICAgV2ViRnJhbWVC
cmlkZ2UqIGJyaWRnZSA9IG1fd2ViRnJhbWUtPl9wcml2YXRlLT5icmlkZ2U7CisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIAorICAgIHJldHVybiBbYnJpZGdlIGNyZWF0ZUNo
aWxkRnJhbWVOYW1lZDpuYW1lCisJCSAgIHdpdGhVUkw6dXJsLmdldE5TVVJMKCkKKwkJICAgcmVm
ZXJyZXI6cmVmZXJyZXIgCisJCSAgIG93bmVyRWxlbWVudDpvd25lckVsZW1lbnQKKwkJICAgYWxs
b3dzU2Nyb2xsaW5nOmFsbG93c1Njcm9sbGluZworCQkgICBtYXJnaW5XaWR0aDptYXJnaW5XaWR0
aAorCQkgICBtYXJnaW5IZWlnaHQ6bWFyZ2luSGVpZ2h0XTsKKworICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisgICAgcmV0dXJuIDA7Cit9CisKK09iamVjdENvbnRlbnRUeXBlIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgV2ViRnJhbWVCcmlkZ2UqIGJyaWRnZSA9IG1fd2Vi
RnJhbWUtPl9wcml2YXRlLT5icmlkZ2U7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworICAgIHJldHVybiAoT2JqZWN0Q29udGVudFR5cGUpW2JyaWRnZSBkZXRlcm1pbmVPYmplY3RG
cm9tTUlNRVR5cGU6bWltZVR5cGUgVVJMOnVybC5nZXROU1VSTCgpXTsKKyAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBPYmplY3RDb250ZW50Tm9uZTsKK30KKworc3Rh
dGljIE5TQXJyYXkqIG5zQXJyYXkoY29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvcikKK3sKKyAg
ICB1bnNpZ25lZCBsZW4gPSB2ZWN0b3Iuc2l6ZSgpOworICAgIE5TTXV0YWJsZUFycmF5KiBhcnJh
eSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpsZW5dOworICAgIGZvciAodW5z
aWduZWQgeCA9IDA7IHggPCBsZW47IHgrKykKKyAgICAgICAgW2FycmF5IGFkZE9iamVjdDp2ZWN0
b3JbeF1dOworICAgIHJldHVybiBhcnJheTsKK30KKworV2lkZ2V0KiBXZWJGcmFtZUxvYWRlckNs
aWVudDo6Y3JlYXRlUGx1Z2luKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsCisJCQkJCSAgIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFs
bHkpCit7CisgICAgV2ViRnJhbWVCcmlkZ2UqIGJyaWRnZSA9IG1fd2ViRnJhbWUtPl9wcml2YXRl
LT5icmlkZ2U7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBu
ZXcgV2lkZ2V0KFticmlkZ2Ugdmlld0ZvclBsdWdpbldpdGhVUkw6dXJsLmdldE5TVVJMKCkKKwkJ
CSAgICAgIGF0dHJpYnV0ZU5hbWVzOm5zQXJyYXkocGFyYW1OYW1lcykKKwkJCSAgICAgIGF0dHJp
YnV0ZVZhbHVlczpuc0FycmF5KHBhcmFtVmFsdWVzKQorCQkJICAgICAgTUlNRVR5cGU6bWltZVR5
cGUKKwkJCSAgICAgIERPTUVsZW1lbnQ6W0RPTUVsZW1lbnQgX2VsZW1lbnRXaXRoOmVsZW1lbnRd
CisJCQkgICAgICBsb2FkTWFudWFsbHk6bG9hZE1hbnVhbGx5XSk7CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJGcmFtZUxvYWRlckNs
aWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQpCit7CisgICAg
V2ViRnJhbWVCcmlkZ2UqIGJyaWRnZSA9IG1fd2ViRnJhbWUtPl9wcml2YXRlLT5icmlkZ2U7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFticmlkZ2UgcmVkaXJlY3REYXRh
VG9QbHVnaW46cGx1Z2luV2lkZ2V0LT5nZXRWaWV3KCldOworICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Cit9CisKK3N0YXRpYyBOU011dGFibGVBcnJheSogbnNNdXRhYmxlQXJyYXkoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvcikKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSB2ZWN0b3Iu
c2l6ZSgpOworICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpsZW5dOworICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBsZW47IHgr
KykKKyAgICAgICAgW2FycmF5IGFkZE9iamVjdDp2ZWN0b3JbeF1dOworICAgIHJldHVybiBhcnJh
eTsKK30KKworV2ViQ29yZTo6V2lkZ2V0KiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2
YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBLVVJMJiBiYXNlVVJMLCAKKwkJCQkJCQkgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQoreworICAgIFdpZGdl
dCogcmVzdWx0ID0gbmV3IFdpZGdldDsKKyAgICAKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgCisgICAgTlNNdXRhYmxlQXJyYXkqIGF0dHJpYnV0ZU5hbWVzID0gbnNNdXRh
YmxlQXJyYXkocGFyYW1OYW1lcyk7CisgICAgTlNNdXRhYmxlQXJyYXkqIGF0dHJpYnV0ZVZhbHVl
cyA9IG5zTXV0YWJsZUFycmF5KHBhcmFtVmFsdWVzKTsKKyAgICAKKyAgICBXZWJGcmFtZUJyaWRn
ZSogYnJpZGdlID0gbV93ZWJGcmFtZS0+X3ByaXZhdGUtPmJyaWRnZTsKKyAgICByZXN1bHQtPnNl
dFZpZXcoW2JyaWRnZSB2aWV3Rm9ySmF2YUFwcGxldFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkKKwkJCSAgICBhdHRyaWJ1dGVOYW1lczphdHRy
aWJ1dGVOYW1lcworCQkJICAgIGF0dHJpYnV0ZVZhbHVlczphdHRyaWJ1dGVWYWx1ZXMKKwkJCSAg
ICBiYXNlVVJMOmJhc2VVUkwuZ2V0TlNVUkwoKQorCQkJICAgIERPTUVsZW1lbnQ6W0RPTUVsZW1l
bnQgX2VsZW1lbnRXaXRoOmVsZW1lbnRdXSk7CisgICAgW2F0dHJpYnV0ZU5hbWVzIHJlbGVhc2Vd
OworICAgIFthdHRyaWJ1dGVWYWx1ZXMgcmVsZWFzZV07CisgICAgCisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJpbmcgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6Om92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QKK3sKKyAgICBOU1N0
cmluZyogb3ZlcnJpZGVUeXBlID0gW21fd2ViRnJhbWUtPl9wcml2YXRlLT5icmlkZ2Ugb3ZlcnJp
ZGVNZWRpYVR5cGVdOworICAgIGlmIChvdmVycmlkZVR5cGUpCisgICAgICAgIHJldHVybiBvdmVy
cmlkZVR5cGU7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIFdlYkZyYW1lTG9hZGVy
Q2xpZW50Ojp3aW5kb3dPYmplY3RDbGVhcmVkKCkgY29uc3QKK3sKKyAgICBbbV93ZWJGcmFtZS0+
X3ByaXZhdGUtPmJyaWRnZSB3aW5kb3dPYmplY3RDbGVhcmVkXTsKK30KKwogQGltcGxlbWVudGF0
aW9uIFdlYkZyYW1lUG9saWN5TGlzdGVuZXIKIAogLSAoaWQpaW5pdFdpdGhXZWJDb3JlRnJhbWU6
KEZyYW1lKilmcmFtZQpJbmRleDogV2ViS2l0UXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFF0L0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMjgpCisrKyBXZWJLaXRRdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAwNy0wMS0yMiAgTGFycyBLbm9sbCA8
bGFyc0B0cm9sbHRlY2guY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBGcmFtZXMgdG8gdGhlIFF0IGJ1aWxkIGFuZCBm
aXggc29tZSBpc3N1ZXMKKyAgICAgICAgaW4gdGhlIEFQSSBjbGFzc2VzLgorCisgICAgICAgICog
QXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWU6OlFXZWJGcmFtZSk6CisgICAg
ICAgIChRV2ViRnJhbWU6On5RV2ViRnJhbWUpOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWUuaDoK
KyAgICAgICAgKiBBcGkvcXdlYmZyYW1lX3AuaDoKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3Bw
OgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUpOgorICAgICAgICAo
UVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVNYWluRnJhbWUpOgorICAgICAgICAoUVdlYlBhZ2U6OmNy
ZWF0ZUZyYW1lKToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuaDoKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmRldGFjaGVkRnJvbVBhcmVudDMpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGV0YWNoZWRGcm9tUGFyZW50NCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpjYW5jZWxQb2xpY3lDaGVjayk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojp3aW5kb3dPYmplY3RDbGVhcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZUZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6Om9iamVjdENvbnRlbnRUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpyZWRpcmVjdERhdGFUb1BsdWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVKYXZhQXBwbGV0V2lk
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6Om92ZXJyaWRlTWVk
aWFUeXBlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0Lmg6
CisKIDIwMDctMDEtMTkgIEpvaG4gU3VsbGl2YW4gIDxzdWxsaXZhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkZWQgc3R1YnMgZm9yIG5ldyBjYWxsYmFja3MsIHRvIHRyeSB0byBhdm9pZCBicmVh
a2luZyB0aGUgUXQgcG9ydC4KSW5kZXg6IFdlYktpdFF0L0FwaS9xd2ViZnJhbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFF0L0FwaS9xd2ViZnJhbWUuY3BwCShyZXZpc2lvbiAxOTAyOCkKKysr
IFdlYktpdFF0L0FwaS9xd2ViZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiRnJhbWVRdENsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lUXQuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKIAogI2lu
Y2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKQEAgLTQxLDQy
ICs0Miw0OCBAQAogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIm9iamVjdC5oIgog
CisjaW5jbHVkZSAid3RmL0hhc2hNYXAuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LVFXZWJGcmFtZTo6UVdlYkZyYW1lKFFXZWJQYWdlICpwYXJlbnQpCitRV2ViRnJhbWU6OlFXZWJG
cmFtZShRV2ViUGFnZSAqcGFyZW50LCBRV2ViRnJhbWVEYXRhICpmcmFtZURhdGEpCiAgICAgOiBR
U2Nyb2xsQXJlYShwYXJlbnQpCiAgICAgLCBkKG5ldyBRV2ViRnJhbWVQcml2YXRlKQogewogICAg
IGQtPnBhZ2UgPSBwYXJlbnQ7CiAKICAgICBkLT5mcmFtZUxvYWRlckNsaWVudCA9IG5ldyBGcmFt
ZUxvYWRlckNsaWVudFF0KCk7Ci0gICAgZC0+ZnJhbWUgPSBuZXcgRnJhbWVRdChwYXJlbnQtPmQt
PnBhZ2UsIDAsIG5ldyBGcmFtZVF0Q2xpZW50KCksIGQtPmZyYW1lTG9hZGVyQ2xpZW50KTsKLSAg
ICBkLT5mcmFtZUxvYWRlckNsaWVudC0+c2V0RnJhbWUodGhpcywgZC0+ZnJhbWUpOworICAgIGQt
PmZyYW1lID0gbmV3IEZyYW1lUXQocGFyZW50LT5kLT5wYWdlLCBmcmFtZURhdGEtPm93bmVyRWxl
bWVudCwgbmV3IEZyYW1lUXRDbGllbnQoKSwgZC0+ZnJhbWVMb2FkZXJDbGllbnQpOworICAgIGQt
PmZyYW1lTG9hZGVyQ2xpZW50LT5zZXRGcmFtZSh0aGlzLCBkLT5mcmFtZS5nZXQoKSk7CiAKLSAg
ICBkLT5mcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KGQtPmZyYW1lKTsKKyAgICBkLT5mcmFtZVZp
ZXcgPSBuZXcgRnJhbWVWaWV3KGQtPmZyYW1lLmdldCgpKTsKICAgICBkLT5mcmFtZVZpZXctPnNl
dFNjcm9sbEFyZWEodGhpcyk7Ci0gICAgZC0+ZnJhbWUtPnNldFZpZXcoZC0+ZnJhbWVWaWV3KTsK
KyAgICBkLT5mcmFtZS0+c2V0VmlldyhkLT5mcmFtZVZpZXcuZ2V0KCkpOworICAgIGlmICghZnJh
bWVEYXRhLT51cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
KGZyYW1lRGF0YS0+dXJsLCBmcmFtZURhdGEtPnJlZmVycmVyKTsKKyAgICAgICAgZC0+ZnJhbWUt
PmxvYWRlcigpLT5sb2FkKHJlcXVlc3QsIGZyYW1lRGF0YS0+bmFtZSk7CisgICAgfQogfQogCiAK
LVFXZWJGcmFtZTo6UVdlYkZyYW1lKFFXZWJGcmFtZSAqcGFyZW50KQorUVdlYkZyYW1lOjpRV2Vi
RnJhbWUoUVdlYkZyYW1lICpwYXJlbnQsIFFXZWJGcmFtZURhdGEgKmZyYW1lRGF0YSkKICAgICA6
IFFTY3JvbGxBcmVhKHBhcmVudCkKICAgICAsIGQobmV3IFFXZWJGcmFtZVByaXZhdGUpCiB7CiAg
ICAgZC0+cGFnZSA9IHBhcmVudC0+ZC0+cGFnZTsKLS8vICAgICBkLT5mcmFtZUxvYWRlckNsaWVu
dCA9IG5ldyBGcmFtZUxvYWRlckNsaWVudFF0KCk7Ci0vLyAgICAgZC0+ZnJhbWUgPSBuZXcgRnJh
bWVRdChwYWdlLCAwLCBuZXcgRnJhbWVRdENsaWVudCgpLCBmcmFtZUxvYWRlckNsaWVudCk7Ci0v
LyAgICAgZC0+ZnJhbWVMb2FkZXJDbGllbnQtPnNldEZyYW1lKGQtPmZyYW1lKTsKLQotLy8gICAg
IGQtPmZyYW1lVmlldyA9IG5ldyBGcmFtZVZpZXcoZC0+ZnJhbWUpOwotLy8gICAgIGQtPmZyYW1l
Vmlldy0+c2V0U2Nyb2xsQXJlYSh0aGlzKTsKLS8vICAgICBkLT5mcmFtZS0+c2V0VmlldyhkLT5m
cmFtZVZpZXcpOworCisgICAgZC0+ZnJhbWVMb2FkZXJDbGllbnQgPSBuZXcgRnJhbWVMb2FkZXJD
bGllbnRRdCgpOworICAgIGQtPmZyYW1lID0gbmV3IEZyYW1lUXQocGFyZW50LT5kLT5wYWdlLT5k
LT5wYWdlLCBmcmFtZURhdGEtPm93bmVyRWxlbWVudCwgbmV3IEZyYW1lUXRDbGllbnQoKSwgZC0+
ZnJhbWVMb2FkZXJDbGllbnQpOworICAgIGQtPmZyYW1lTG9hZGVyQ2xpZW50LT5zZXRGcmFtZSh0
aGlzLCBkLT5mcmFtZS5nZXQoKSk7CisKKyAgICBkLT5mcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3
KGQtPmZyYW1lLmdldCgpKTsKKyAgICBkLT5mcmFtZVZpZXctPnNldFNjcm9sbEFyZWEodGhpcyk7
CisgICAgZC0+ZnJhbWUtPnNldFZpZXcoZC0+ZnJhbWVWaWV3LmdldCgpKTsKIH0KIAogUVdlYkZy
YW1lOjp+UVdlYkZyYW1lKCkKIHsKLSAgICBkZWxldGUgZC0+ZnJhbWU7CisgICAgZGVsZXRlIGQ7
CiB9CiAKIHZvaWQgUVdlYkZyYW1lOjphZGRUb0pTV2luZG93T2JqZWN0KGNvbnN0IFFCeXRlQXJy
YXkgJm5hbWUsIFFPYmplY3QgKm9iamVjdCkKSW5kZXg6IFdlYktpdFF0L0FwaS9xd2ViZnJhbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRRdC9BcGkvcXdlYmZyYW1lLmgJKHJldmlzaW9uIDE5MDI4
KQorKysgV2ViS2l0UXQvQXBpL3F3ZWJmcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSAr
MzEsMTggQEAgY2xhc3MgUVdlYlBhZ2U7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
RnJhbWVMb2FkZXJDbGllbnRRdDsKIH0KK2NsYXNzIFFXZWJGcmFtZURhdGE7CiAKIGNsYXNzIFFX
ZWJGcmFtZSA6IHB1YmxpYyBRU2Nyb2xsQXJlYQogewogICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0g
ICAgUVdlYkZyYW1lKFFXZWJQYWdlICpwYXJlbnQpOwotICAgIFFXZWJGcmFtZShRV2ViRnJhbWUg
KnBhcmVudCk7Citwcm90ZWN0ZWQ6CisgICAgUVdlYkZyYW1lKFFXZWJQYWdlICpwYXJlbnQsIFFX
ZWJGcmFtZURhdGEgKmZyYW1lRGF0YSk7CisgICAgUVdlYkZyYW1lKFFXZWJGcmFtZSAqcGFyZW50
LCBRV2ViRnJhbWVEYXRhICpmcmFtZURhdGEpOwogICAgIH5RV2ViRnJhbWUoKTsKIAorcHVibGlj
OgorICAgIAogICAgIFFXZWJQYWdlICpwYWdlKCkgY29uc3Q7CiAKICAgICB2b2lkIGFkZFRvSlNX
aW5kb3dPYmplY3QoY29uc3QgUUJ5dGVBcnJheSAmbmFtZSwgUU9iamVjdCAqb2JqZWN0KTsKSW5k
ZXg6IFdlYktpdFF0L0FwaS9xd2ViZnJhbWVfcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFF0L0Fw
aS9xd2ViZnJhbWVfcC5oCShyZXZpc2lvbiAxOTAyOCkKKysrIFdlYktpdFF0L0FwaS9xd2ViZnJh
bWVfcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTcgQEAKICNpbmNsdWRlICJxd2Vi
ZnJhbWUuaCIKICNpbmNsdWRlICJxd2VicGFnZV9wLmgiCiAKKyNpbmNsdWRlICJLVVJMLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNs
dWRlICJ3dGYvUmVmUHRyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAgICAgY2xhc3MgRnJh
bWVMb2FkZXJDbGllbnRRdDsKICAgICBjbGFzcyBGcmFtZVF0OwogICAgIGNsYXNzIEZyYW1lVmll
dzsKKyAgICBjbGFzcyBIVE1MRnJhbWVPd25lckVsZW1lbnQ7CiB9CiBjbGFzcyBRV2ViUGFnZTsK
IApAQCAtNDMsMTAgKzQ5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgLCBwYWdlKDApCiAgICAgICAg
IHt9CiAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdCAqZnJhbWVMb2FkZXJDbGllbnQ7
Ci0gICAgV2ViQ29yZTo6RnJhbWVRdCAqZnJhbWU7Ci0gICAgV2ViQ29yZTo6RnJhbWVWaWV3ICpm
cmFtZVZpZXc7CisgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6RnJhbWVRdD4gZnJhbWU7CisgICAg
V1RGOjpSZWZQdHI8V2ViQ29yZTo6RnJhbWVWaWV3PiBmcmFtZVZpZXc7CiAgICAgUVdlYlBhZ2Ug
KnBhZ2U7CiB9OwogCitjbGFzcyBRV2ViRnJhbWVEYXRhCit7CitwdWJsaWM6CisgICAgV2ViQ29y
ZTo6S1VSTCB1cmw7CisgICAgV2ViQ29yZTo6U3RyaW5nIG5hbWU7CisgICAgV2ViQ29yZTo6SFRN
TEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQ7CisgICAgCisgICAgV2ViQ29yZTo6U3Ry
aW5nIHJlZmVycmVyOworICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5nOworICAgIGludCBtYXJnaW5X
aWR0aDsKKyAgICBpbnQgbWFyZ2luSGVpZ2h0OyAgICAKK307CiAKICNlbmRpZgpJbmRleDogV2Vi
S2l0UXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRRdC9BcGkvcXdlYnBh
Z2UuY3BwCShyZXZpc2lvbiAxOTAyOCkKKysrIFdlYktpdFF0L0FwaS9xd2VicGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5o
IgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50UXQuaCIKICNpbmNsdWRlICJFZGl0b3JDbGll
bnRRdC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtNDYsNiArNDcsMjAgQEAg
UVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZwogICAgIGVkaXRvckNsaWVu
dCA9IG5ldyBFZGl0b3JDbGllbnRRdCgpOwogICAgIHBhZ2UgPSBuZXcgUGFnZShjaHJvbWVDbGll
bnQsIGNvbnRleHRNZW51Q2xpZW50LCBlZGl0b3JDbGllbnQpOwogCisgICAgU2V0dGluZ3MgKnNl
dHRpbmdzID0gcGFnZS0+c2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5KHRydWUpOworICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoNSk7
CisgICAgc2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoNSk7CisgICAgc2V0dGlu
Z3MtPnNldFNob3VsZFByaW50QmFja2dyb3VuZHModHJ1ZSk7CisgICAgc2V0dGluZ3MtPnNldEph
dmFTY3JpcHRFbmFibGVkKHRydWUpOworCisgICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZv
bnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE0KTsKKyAgICBz
ZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KCJUaW1lcyBOZXcgUm9tYW4iKTsKKyAgICBzZXR0
aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiQXJpYWwiKTsKKyAgICBzZXR0aW5ncy0+c2V0
Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVyIik7CisgICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9u
dEZhbWlseSgiQXJpYWwiKTsKKwogICAgIG1haW5GcmFtZSA9IDA7CiB9CiAKQEAgLTU3LDcgKzcy
LDEyIEBAIFFXZWJQYWdlUHJpdmF0ZTo6flFXZWJQYWdlUHJpdmF0ZSgpCiB2b2lkIFFXZWJQYWdl
UHJpdmF0ZTo6Y3JlYXRlTWFpbkZyYW1lKCkKIHsKICAgICBpZiAoIW1haW5GcmFtZSkgewotICAg
ICAgICBtYWluRnJhbWUgPSBxLT5jcmVhdGVGcmFtZSgwKTsKKyAgICAgICAgUVdlYkZyYW1lRGF0
YSBmcmFtZURhdGE7CisgICAgICAgIGZyYW1lRGF0YS5vd25lckVsZW1lbnQgPSAwOworICAgICAg
ICBmcmFtZURhdGEuYWxsb3dzU2Nyb2xsaW5nID0gdHJ1ZTsKKyAgICAgICAgZnJhbWVEYXRhLm1h
cmdpbldpZHRoID0gNTsKKyAgICAgICAgZnJhbWVEYXRhLm1hcmdpbkhlaWdodCA9IDU7CisgICAg
ICAgIG1haW5GcmFtZSA9IHEtPmNyZWF0ZUZyYW1lKDAsICZmcmFtZURhdGEpOwogICAgICAgICBs
YXlvdXQtPmFkZFdpZGdldChtYWluRnJhbWUpOwogICAgIH0KIH0KQEAgLTc3LDExICs5NywxMSBA
QCBRV2ViUGFnZTo6flFXZWJQYWdlKCkKICAgICBkZWxldGUgZDsKIH0KIAotUVdlYkZyYW1lICpR
V2ViUGFnZTo6Y3JlYXRlRnJhbWUoUVdlYkZyYW1lICpwYXJlbnRGcmFtZSkKK1FXZWJGcmFtZSAq
UVdlYlBhZ2U6OmNyZWF0ZUZyYW1lKFFXZWJGcmFtZSAqcGFyZW50RnJhbWUsIFFXZWJGcmFtZURh
dGEgKmZyYW1lRGF0YSkKIHsKICAgICBpZiAocGFyZW50RnJhbWUpCi0gICAgICAgIHJldHVybiBu
ZXcgUVdlYkZyYW1lKHBhcmVudEZyYW1lKTsKLSAgICByZXR1cm4gbmV3IFFXZWJGcmFtZSh0aGlz
KTsKKyAgICAgICAgcmV0dXJuIG5ldyBRV2ViRnJhbWUocGFyZW50RnJhbWUsIGZyYW1lRGF0YSk7
CisgICAgcmV0dXJuIG5ldyBRV2ViRnJhbWUodGhpcywgZnJhbWVEYXRhKTsKIH0KIAogdm9pZCBR
V2ViUGFnZTo6b3Blbihjb25zdCBRVXJsICZ1cmwpCkluZGV4OiBXZWJLaXRRdC9BcGkvcXdlYnBh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRRdC9BcGkvcXdlYnBhZ2UuaAkocmV2aXNpb24gMTkw
MjgpCisrKyBXZWJLaXRRdC9BcGkvcXdlYnBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsMTEgQEAgY2xhc3MgUVdlYkZyYW1lOwogY2xhc3MgUVVybDsKIAogY2xhc3MgUVdlYlBhZ2VQ
cml2YXRlOworY2xhc3MgUVdlYkZyYW1lRGF0YTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50UXQ7Cit9CiAKIGNsYXNzIFFXZWJQYWdlIDogcHVibGlj
IFFXaWRnZXQKIHsKQEAgLTM2LDggKzQxLDYgQEAgcHVibGljOgogICAgIFFXZWJQYWdlKFFXaWRn
ZXQgKnBhcmVudCk7CiAgICAgflFXZWJQYWdlKCk7CiAKLSAgICB2aXJ0dWFsIFFXZWJGcmFtZSAq
Y3JlYXRlRnJhbWUoUVdlYkZyYW1lICpwYXJlbnRGcmFtZSk7Ci0gICAgLy92aXJ0dWFsIFFXZWJQ
YWdlICpjcmVhdGVQYWdlKC4uLik7CiAKICAgICB2b2lkIG9wZW4oY29uc3QgUVVybCAmdXJsKTsK
IApAQCAtNjUsOSArNjgsMTQgQEAgc2lnbmFsczoKICAgICAgKi8KICAgICB2b2lkIGxvYWRGaW5p
c2hlZChRV2ViRnJhbWUgKmZyYW1lKTsKIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgUVdlYkZy
YW1lICpjcmVhdGVGcmFtZShRV2ViRnJhbWUgKnBhcmVudEZyYW1lLCBRV2ViRnJhbWVEYXRhICpm
cmFtZURhdGEpOworICAgIC8vdmlydHVhbCBRV2ViUGFnZSAqY3JlYXRlUGFnZSguLi4pOwogICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBRV2ViRnJhbWU7CisgICAgZnJpZW5kIGNsYXNz
IFFXZWJQYWdlUHJpdmF0ZTsKKyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRRdDsKICAgICBRV2ViUGFnZVByaXZhdGUgKmQ7CiB9OwogCkluZGV4OiBXZWJLaXRRdC9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRRdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkocmV2aXNpb24gMTkw
MjgpCisrKyBXZWJLaXRRdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
WmFjayBSdXNpbiA8emFja0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
IFRyb2xsdGVjaCBBU0EKICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTI1LDE2
ICsyNiwyMCBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCi0gCisKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0LmgiCisjaW5j
bHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJlc291cmNl
UmVxdWVzdC5oIgogCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKICNpbmNsdWRlICJxd2ViZnJhbWUu
aCIKKyNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgogCiAjaW5jbHVkZSAicWRlYnVnLmgiCiAKQEAg
LTI0OCwxMyArMjUzLDYgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojp3aWxsQ2xvc2VEb2N1
bQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0
OjpkZXRhY2hlZEZyb21QYXJlbnQxKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0K
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGV0YWNoZWRGcm9tUGFyZW50MigpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKQEAgLTI2MywxMyArMjYxLDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnRRdDo6ZGV0YWNoZWRGcm9tUGEKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkZXRh
Y2hlZEZyb21QYXJlbnQzKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fd2ViRnJh
bWUtPmQtPmZyYW1lVmlldyA9IDA7CiB9CiAKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpk
ZXRhY2hlZEZyb21QYXJlbnQ0KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGRlbGV0
ZSBtX3dlYkZyYW1lOwogfQogCiAKQEAgLTM2MSw2ICszNTksNyBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmRpc3BhdGNoU2hvdygpCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y2Fu
Y2VsUG9saWN5Q2hlY2soKQogeworICAgIHFEZWJ1ZygpIDw8ICJGcmFtZUxvYWRlckNsaWVudFF0
OjpjYW5jZWxQb2xpY3lDaGVjayI7CiAgICAgbV9wb2xpY3lGdW5jdGlvbiA9IDA7CiB9CiAKQEAg
LTU2OCw3ICs1NjcsNyBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbkhhbmRsZVJlcXVl
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6cGFydENs
ZWFyZWRJbkJlZ2luKCkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6d2luZG93T2JqZWN0Q2xl
YXJlZCgpIGNvbnN0CiB7CiAgICAgZW1pdCBtX3dlYkZyYW1lLT5jbGVhcmVkKCk7CiB9CkBAIC03
NzEsNiArNzcwLDczIEBAIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRRdDo6d2lsbFVzZUFyY2hpdmUK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0ZyYW1lKiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVh
dGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGlu
dCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkKK3sKKyAgICBxRGVidWcoKSA8PCAiPj4+
Pj4+Pj4+Pj4gY3JlYXRlRnJhbWUiOworICAgIFFXZWJGcmFtZURhdGEgZnJhbWVEYXRhOworICAg
IGZyYW1lRGF0YS51cmwgPSB1cmw7CisgICAgZnJhbWVEYXRhLm5hbWUgPSBuYW1lOworICAgIGZy
YW1lRGF0YS5vd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQ7CisgICAgZnJhbWVEYXRhLnJlZmVy
cmVyID0gcmVmZXJyZXI7CisgICAgZnJhbWVEYXRhLmFsbG93c1Njcm9sbGluZyA9IGFsbG93c1Nj
cm9sbGluZzsKKyAgICBmcmFtZURhdGEubWFyZ2luV2lkdGggPSBtYXJnaW5XaWR0aDsKKyAgICBm
cmFtZURhdGEubWFyZ2luSGVpZ2h0ID0gbWFyZ2luSGVpZ2h0OworICAgICAgICAKKworICAgIFFX
ZWJGcmFtZSogd2ViRnJhbWUgPSBtX3dlYkZyYW1lLT5wYWdlKCktPmNyZWF0ZUZyYW1lKG1fd2Vi
RnJhbWUsICZmcmFtZURhdGEpOworCisgICAgUmVmUHRyPEZyYW1lPiBjaGlsZEZyYW1lID0gd2Vi
RnJhbWUtPmQtPmZyYW1lOworCisgICAgLy8gRklYTUU6IEFsbCBvZiB0aGUgYmVsb3cgc2hvdWxk
IHByb2JhYmx5IGJlIG1vdmVkIG92ZXIgaW50byBXZWJDb3JlCisgICAgY2hpbGRGcmFtZS0+dHJl
ZSgpLT5zZXROYW1lKG5hbWUpOworICAgIG1fZnJhbWUtPnRyZWUoKS0+YXBwZW5kQ2hpbGQoY2hp
bGRGcmFtZSk7CisgICAgLy8gIyMjIHNldCBvdmVycmlkZSBlbmNvZGluZyBpZiB3ZSBoYXZlIG9u
ZQorCisgICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSA9IG1fZnJhbWUtPmxvYWRlcigpLT5sb2Fk
VHlwZSgpOworICAgIEZyYW1lTG9hZFR5cGUgY2hpbGRMb2FkVHlwZSA9IEZyYW1lTG9hZFR5cGVJ
bnRlcm5hbDsKKworICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLT5sb2FkKGZyYW1lRGF0YS51cmws
IGZyYW1lRGF0YS5yZWZlcnJlciwgY2hpbGRMb2FkVHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nKCksIDAsIDAsIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKSk7
CisgICAgCisgICAgLy8gVGhlIGZyYW1lJ3Mgb25sb2FkIGhhbmRsZXIgbWF5IGhhdmUgcmVtb3Zl
ZCBpdCBmcm9tIHRoZSBkb2N1bWVudC4KKyAgICBpZiAoIWNoaWxkRnJhbWUtPnRyZWUoKS0+cGFy
ZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBjaGlsZEZyYW1lLmdl
dCgpOworfQorCitPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudFF0OjpvYmplY3RD
b250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gT2JqZWN0Q29udGVudFR5cGUoKTsKK30K
KworV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVQbHVnaW4oRWxlbWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jiwg
Y29uc3QgU3RyaW5nJiwgYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2lu
KFdpZGdldCogcGx1Z2luV2lkZ2V0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuOworfQorCitXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZUphdmFBcHBsZXRX
aWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5n
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6Om92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwogfQogCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5tb2MiCkluZGV4OiBXZWJLaXRRdC9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0UXQvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCShyZXZpc2lvbiAxOTAyOCkKKysrIFdlYktpdFF0
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTmF2aWdhdGlvbkFj
dGlvbjsKICAgICBjbGFzcyBTdHJpbmc7CiAgICAgY2xhc3MgUmVzb3VyY2VMb2FkZXI7Ci0KKyAg
ICAKICAgICBzdHJ1Y3QgTG9hZEVycm9yUmVzZXRUb2tlbjsKIAogICAgIGNsYXNzIEZyYW1lTG9h
ZGVyQ2xpZW50UXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50IHsK
QEAgLTEwMSw3ICsxMDEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIHdpbGxDbG9zZURvY3VtZW50KCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRldGFj
aGVkRnJvbVBhcmVudDEoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVu
dDIoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDMoKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDQoKTsKQEAgLTIwNywxMCArMjA2LDE3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVz
c1N0YXJ0ZWROb3RpZmljYXRpb24oKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVz
c0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9z
dFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24oKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBub3QgYmUgaGVyZSwgYnV0IGl0J3MgbmVlZGVkIGZv
ciB0aGUgdGVzdHMgY3VycmVudGx5Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYXJ0Q2xlYXJlZElu
QmVnaW4oKTsKIAorICAgICAgICB2aXJ0dWFsIEZyYW1lKiBjcmVhdGVGcmFtZShjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVs
ZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
cmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJn
aW5IZWlnaHQpIDsKKyAgICAgICAgdmlydHVhbCBXaWRnZXQqIGNyZWF0ZVBsdWdpbihFbGVtZW50
KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBjb25zdCBTdHJpbmcmLCBib29sKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0
RGF0YVRvUGx1Z2luKFdpZGdldCogcGx1Z2luV2lkZ2V0KTsKKyAgICAgICAgdmlydHVhbCBXaWRn
ZXQqIGNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25z
dCBLVVJMJiBiYXNlVVJMLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKTsKKworICAgICAgICB2aXJ0dWFsIE9iamVjdENv
bnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSk7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIG92ZXJyaWRlTWVkaWFUeXBlKCkg
Y29uc3Q7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJl
ZCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgRnJhbWUgKm1fZnJhbWU7Cg==
</data>
<flag name="review"
          id="4786"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>