<?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>116412</bug_id>
          
          <creation_ts>2013-05-19 06:42:00 -0700</creation_ts>
          <short_desc>[iOS] Get iOS port off legacy clipboard</short_desc>
          <delta_ts>2013-08-16 15:17:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>119863</dependson>
          <blocked>115980</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>891020</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-19 06:42:00 -0700</bug_when>
    <thetext>[iOS] Get iOS part off legacy clipboard</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891021</commentid>
    <comment_count>1</comment_count>
      <attachid>202233</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-19 06:42:27 -0700</bug_when>
    <thetext>Created attachment 202233
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891022</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-19 06:43:55 -0700</bug_when>
    <thetext>Attachment 202233 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/dom/Clipboard.h&apos;, u&apos;Source/WebCore/editing/Editor.cpp&apos;, u&apos;Source/WebCore/platform/Pasteboard.h&apos;, u&apos;Source/WebCore/platform/ios/ClipboardIOS.h&apos;, u&apos;Source/WebCore/platform/ios/ClipboardIOS.mm&apos;, u&apos;Source/WebCore/platform/ios/PasteboardIOS.mm&apos;]&quot; exit_code: 1
Source/WebCore/editing/Editor.cpp:708:  Do not add platform specific code in WebCore outside of platform.  [build/webcore_platform_layering_violation] [5]
Source/WebCore/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891023</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-19 06:46:40 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Source/WebCore/editing/Editor.cpp:708:  Do not add platform specific code in WebCore outside of platform.  [build/webcore_platform_layering_violation] [5]

That guideline is right in spirit, but wrong in detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896303</commentid>
    <comment_count>4</comment_count>
      <attachid>203554</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-06-02 22:25:34 -0700</bug_when>
    <thetext>Created attachment 203554
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916748</commentid>
    <comment_count>5</comment_count>
      <attachid>208640</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-13 09:20:11 -0700</bug_when>
    <thetext>Created attachment 208640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916749</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-13 09:20:53 -0700</bug_when>
    <thetext>I need some help testing this in an iOS merge. I think the patch is ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916945</commentid>
    <comment_count>7</comment_count>
      <attachid>208640</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-08-13 17:00:04 -0700</bug_when>
    <thetext>Comment on attachment 208640
Patch

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

This change looks sane to me. I noticed some minor issues. I am happy to help you merge this change into iOS WebKit and test it. We will likely need to make changes to iOS-specific files that aren&apos;t upstream, at the time of writing, before we can build with this change. It should be sufficient to land this change and then merge it into iOS WebKit and test it. Let me know if you would like to make such changes and test this patch before landing it in the WebKit.org repository.

Dave Kilzer may also have insight/suggestions into how best to merge and test this in iOS WebKit.

&gt; Source/WebCore/editing/Editor.cpp:712
&gt; +    clipboard-&gt;pasteboard()-&gt;setFrame(m_frame);

Notice that Clipboard::pasteboard() returns a reference instead of a pointer: &lt;http://trac.webkit.org/browser/trunk/Source/WebCore/dom/Clipboard.h?rev=153978#L136&gt;. So, we need to write this as:

clipboard-&gt;pasteboard().setFrame(m_frame);

&gt; Source/WebCore/platform/ios/PasteboardIOS.mm:514
&gt; +String Pasteboard::readString(const String&amp; type) const

Notice that Pasteboard::readString() isn&apos;t declared const in Pasteboard.h, &lt;http://trac.webkit.org/browser/trunk/Source/WebCore/platform/Pasteboard.h#L129&gt;.

&gt; Source/WebCore/platform/ios/PasteboardIOS.mm:605
&gt; +ListHashSet&lt;String&gt; Pasteboard::types() const

Notice that Pasteboard::types() isn&apos;t declared const in Pasteboard.h, &lt;http://trac.webkit.org/browser/trunk/Source/WebCore/platform/Pasteboard.h?rev=153978#L127&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917676</commentid>
    <comment_count>8</comment_count>
      <attachid>208847</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-08-15 13:46:47 -0700</bug_when>
    <thetext>Created attachment 208847
iOS-specific changes

Here are the changes we need to make in order to build this patch on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917801</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-15 19:36:56 -0700</bug_when>
    <thetext>Just curious, Dan, any testing results yet? Did it work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917803</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-15 19:48:53 -0700</bug_when>
    <thetext>Committed r154160: &lt;http://trac.webkit.org/changeset/154160&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918132</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-08-16 15:17:24 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Just curious, Dan, any testing results yet? Did it work?

As far as I can tell copying and pasting works in iOS after this change. I copied and pasted combinations of English, Hebrew, and Chinese text from websites and third-party apps into content editable elements, &lt;textarea&gt;s and &lt;input&gt;s as well as copied and pasted such text between content editable elements, &lt;textarea&gt;s and &lt;input&gt;s.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202233</attachid>
            <date>2013-05-19 06:42:27 -0700</date>
            <delta_ts>2013-06-02 22:25:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116412-20130519064118.patch</filename>
            <type>text/plain</type>
            <size>25249</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwMzQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTA2NTBiYTRiNjI0NGZl
MjJjMTc1ZTk3M2E1NzViMWJhMWViYzkyOC4uNTgzNGI0ZWE3YzRlNGEwMjA3ZTZjZmU4MmM2Mzgz
NjIzYmVmMWU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEzLTA1LTE5ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBHZXQgaU9TIHBhcnQg
b2ZmIGxlZ2FjeSBjbGlwYm9hcmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExNjQxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisJSnVzdCB0aGUgZmlyc3QgY3V0LCBubyBjaGFuZ2UgbG9nIHlldC4KKwogMjAxMy0wNS0x
OCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBIb2lz
dCBzZXZlcmFsIGNodW5rcyBvZiBjb2RlIGF0IHRoZSB0b3Agb2YgUmVuZGVyTGF5ZXI6OnBhaW50
TGF5ZXJDb250ZW50cygpIG9udG8gbmV3IGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0NsaXBib2FyZC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oCmlu
ZGV4IDY2YjMwODE3YjFhZDQ2OTc4NGM2NDQxNTdkNGQwMzc1MjExM2Q0MzIuLjM0ZTVlZmIwYWJh
OTE5MzMwODczZDU5OGNiMDJhZTY4YjlmMWEyZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DbGlwYm9hcmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKQEAg
LTM0LDcgKzM0LDcgQEAKIC8vIFRoaXMgRE9NIG9iamVjdCBub3cgd29ya3MgYnkgY2FsbGluZyB0
aHJvdWdoIHRvIGNsYXNzZXMgaW4gdGhlIHBsYXRmb3JtIGxheWVyLgogLy8gU3BlY2lmaWNhbGx5
LCB0aGUgY2xhc3MgY3VycmVudGx5IG5hbWVkIFBhc3RlYm9hcmQuIFRoZSBsZWdhY3kgc3R5bGUg
aW5zdGVhZAogLy8gdXNlcyB0aGlzIGFzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MuCi0jZGVmaW5l
IFdURl9VU0VfTEVHQUNZX1NUWUxFX0FCU1RSQUNUX0NMSVBCT0FSRF9DTEFTUyAoUExBVEZPUk0o
SU9TKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV0lOKSkKKyNkZWZpbmUgV1RGX1VTRV9M
RUdBQ1lfU1RZTEVfQUJTVFJBQ1RfQ0xJUEJPQVJEX0NMQVNTIChQTEFURk9STShRVCkgfHwgUExB
VEZPUk0oV0lOKSkKIAogI2lmIFVTRShMRUdBQ1lfU1RZTEVfQUJTVFJBQ1RfQ0xJUEJPQVJEX0NM
QVNTKQogI2RlZmluZSBMRUdBQ1lfVklSVFVBTCB2aXJ0dWFsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKaW5kZXggZWM1Yzg5ZGRhZTI0MWMyNTNiZDhjMDFlMDdiMDYzZDAxMDNhYTgyMS4uZGJl
ODQ3MWU1YjUxODJmZTM2ZmZiN2QyNTMzYzc4NGRmMjIxOWNlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcApAQCAtNzA1LDYgKzcwNSwxMCBAQCBib29sIEVkaXRvcjo6ZGlzcGF0Y2hDUFBF
dmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgQ2xpcGJvYXJkQWNjZXNzUG9saQog
ICAgIAogICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IG5ld0dlbmVyYWxDbGlwYm9h
cmQocG9saWN5LCBtX2ZyYW1lKTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBjbGlwYm9hcmQt
PnBhc3RlYm9hcmQoKS0+c2V0RnJhbWUobV9mcmFtZSk7CisjZW5kaWYKKwogICAgIFJlZlB0cjxF
dmVudD4gZXZ0ID0gQ2xpcGJvYXJkRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIHRydWUsIHRydWUs
IGNsaXBib2FyZCk7CiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2dCwgSUdOT1JFX0VYQ0VQ
VElPTik7CiAgICAgYm9vbCBub0RlZmF1bHRQcm9jZXNzaW5nID0gZXZ0LT5kZWZhdWx0UHJldmVu
dGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKaW5kZXggZjAwNWE1NGVlNzI3
MjI0YmQ5ZGQwZWNkMTIzNWM2ODdmNDBkODA3ZS4uMjUzOGJlNzkyY2I2ZDIxZWU5NDUxYzExMmYz
ZDI1ODA0OTZiNmFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVi
b2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApAQCAtMTQ0
LDcgKzE0NCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gbW92
ZSB0byB0aGUgZWRpdGluZyBkaXJlY3RvcnkgZXZlbiBpZiB0aGV5IGhhdmUgcGxhdGZvcm0tc3Bl
Y2lmaWMgYXNwZWN0cy4KICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50
RnJhZ21lbnQoRnJhbWUqLCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9vbCBhbGxvd1BsYWluVGV4dCwg
Ym9vbCYgY2hvc2VQbGFpblRleHQpOwogICAgIFN0cmluZyBwbGFpblRleHQoRnJhbWUqID0gMCk7
Ci0gICAgCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9u
Y2Ugd2Ugc3dpdGNoIHRvIHBsYXRmb3JtIHN0cmF0ZWdpZXMgaW5zdGVhZCBvZiB0aGUgZWRpdG9y
IGNsaWVudC4KKyAgICB2b2lkIHNldEZyYW1lKEZyYW1lKik7CisjZW5kaWYKKwogI2lmIFBMQVRG
T1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgYm9vbCBpc1NlbGVjdGlvbk1vZGUoKSBjb25z
dDsKICAgICB2b2lkIHNldFNlbGVjdGlvbk1vZGUoYm9vbCk7CkBAIC0xNzIsNiArMTc3LDkgQEAg
cHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGRvY3VtZW50RnJhZ21lbnRGb3JQYXN0ZWJvYXJkSXRlbUF0SW5kZXgoRnJhbWUqLCBp
bnQgaW5kZXgsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KTsKKwor
ICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIGxvbmcgbV9jaGFuZ2VDb3VudDsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L0NsaXBib2FyZElPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NsaXBib2FyZElP
Uy5oCmluZGV4IGIyYWVmNWNkMjhhYjhkYmMzYTJlY2EyMTU3Yzg4MGMwZDZjZDRkMGQuLjA5Yzdj
ZmFmZDBjYjJlZTEzMTUyZTM5OWRiN2Q5OTE5ODI3MmIyZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9DbGlwYm9hcmRJT1MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvQ2xpcGJvYXJkSU9TLmgKQEAgLTEsNzggKzEgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBDbGlwYm9hcmRJT1NfaAotI2RlZmluZSBDbGlwYm9hcmRJT1Nf
aAotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKLSNpbmNsdWRlICJDbGlwYm9h
cmQuaCIKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRnJhbWU7Ci1jbGFzcyBGaWxlTGlzdDsKLQotY2xhc3MgQ2xpcGJvYXJkSU9TIDog
cHVibGljIENsaXBib2FyZCwgcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlw
Ym9hcmRJT1M+IGNyZWF0ZShDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUsIENsaXBib2FyZEFj
Y2Vzc1BvbGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ2xpcGJvYXJkSU9TKGNsaXBib2FyZFR5cGUsIHBvbGljeSwgZnJhbWUpKTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5DbGlwYm9hcmRJT1MoKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJBbGxEYXRhKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0RGF0YShj
b25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBzZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKSBPVkVSUklERTsKLQot
ICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCkgT1ZFUlJJREU7Ci0KLSAgICAvLyBFeHRlbnNpb25z
IGJleW9uZCBJRSdzIEFQSS4KLSAgICB2aXJ0dWFsIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXMo
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVz
KCkgY29uc3QgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hl
ZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
RHJhZ0ltYWdlRWxlbWVudChOb2RlICosIGNvbnN0IEludFBvaW50JikgT1ZFUlJJREU7Ci0KLSAg
ICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRyYWdMb2Mp
IGNvbnN0IE9WRVJSSURFOwotI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCi0gICAgdmlydHVhbCB2
b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgdGl0bGUsIEZyYW1lKikgT1ZFUlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZv
aWQgd3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lk
IHdyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmKSBPVkVSUklERTsK
LQotcHJpdmF0ZToKLSAgICBDbGlwYm9hcmRJT1MoQ2xpcGJvYXJkVHlwZSwgQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5LCBGcmFtZSopOwotCi0gICAgaW50IG1fY2hhbmdlQ291bnQ7Ci0gICAgRnJhbWUq
IG1fZnJhbWU7IC8vIFVzZWQgdG8gYWNjZXNzIHRoZSBVSVBhc3RlYm9hcmQgdGhyb3VnaCB0aGUg
ZWRpdG9yIGNsaWVudC4KLX07Ci0KLX0KLQotI2VuZGlmCisjZXJyb3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9DbGlwYm9hcmRJT1MubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvQ2xpcGJvYXJkSU9TLm1tCmluZGV4IDBjOWI3MTM4YjdmZjFhYTg0OGE5
NWIxZjVkMGMzOGNkOWQ5ZmMyOTQuLjE3ZDU3YWEyZmU5OTk5MzNiN2Q2NzFkZTM2YTdlYjRjN2Ew
Yjk1YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9DbGlwYm9hcmRJ
T1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NsaXBib2FyZElPUy5tbQpA
QCAtMSwyOTcgKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJDbGlwYm9hcmRJT1MuaCIKLQotI2ltcG9ydCAiRHJhZ0RhdGEuaCIKLSNpbXBvcnQgIkVkaXRv
ci5oIgotI2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCi0jaW1wb3J0ICJGaWxlTGlzdC5oIgotI2lt
cG9ydCAiRnJhbWUuaCIKLSNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKLQotI2luY2x1ZGUgIlNvZnRM
aW5raW5nLmgiCi0jaW5jbHVkZSA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNl
cy5oPgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLKE1vYmlsZUNvcmVTZXJ2aWNlcykKLQotU09GVF9M
SU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZv
clRhZywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1JlZiBpblRhZ0NsYXNzLCBDRlN0cmluZ1JlZiBp
blRhZywgQ0ZTdHJpbmdSZWYgaW5Db25mb3JtaW5nVG9VVEkpLCAoaW5UYWdDbGFzcywgaW5UYWcs
IGluQ29uZm9ybWluZ1RvVVRJKSkKLVNPRlRfTElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlw
ZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3MsIENGU3RyaW5nUmVmLCAoQ0ZTdHJpbmdSZWYgaW5V
VEksIENGU3RyaW5nUmVmIGluVGFnQ2xhc3MpLCAoaW5VVEksIGluVGFnQ2xhc3MpKQotCi1TT0ZU
X0xJTktfQ09OU1RBTlQoTW9iaWxlQ29yZVNlcnZpY2VzLCBrVVRUeXBlVGV4dCwgQ0ZTdHJpbmdS
ZWYpCi1TT0ZUX0xJTktfQ09OU1RBTlQoTW9iaWxlQ29yZVNlcnZpY2VzLCBrVVRUeXBlVVJMLCBD
RlN0cmluZ1JlZikKLVNPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2VydmljZXMsIGtVVFRh
Z0NsYXNzTUlNRVR5cGUsIENGU3RyaW5nUmVmKQotCi0jZGVmaW5lIGtVVFR5cGVUZXh0IGdldGtV
VFR5cGVUZXh0KCkKLSNkZWZpbmUga1VUVHlwZVVSTCAgZ2V0a1VUVHlwZVVSTCgpCi0jZGVmaW5l
IGtVVFR5cGVUSUZGIGdldGtVVFR5cGVUSUZGKCkKLSNkZWZpbmUga1VUVGFnQ2xhc3NNSU1FVHlw
ZSBnZXRrVVRUYWdDbGFzc01JTUVUeXBlKCkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNz
UmVmUHRyPENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5
IHBvbGljeSwgRHJhZ0RhdGEqLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgcmV0dXJuIENsaXBib2Fy
ZElPUzo6Y3JlYXRlKERyYWdBbmREcm9wLCBwb2xpY3ksIGZyYW1lKTsKLX0KLQotQ2xpcGJvYXJk
SU9TOjpDbGlwYm9hcmRJT1MoQ2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlLCBDbGlwYm9hcmRB
Y2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCi0gICAgOiBDbGlwYm9hcmQocG9saWN5
LCBjbGlwYm9hcmRUeXBlKQotICAgICwgbV9mcmFtZShmcmFtZSkKLXsKLSAgICBtX2NoYW5nZUNv
dW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnBhc3RlYm9hcmRDaGFuZ2VDb3VudCgp
OwotfQotCi1DbGlwYm9hcmRJT1M6On5DbGlwYm9hcmRJT1MoKQotewotfQotCi1ib29sIENsaXBi
b2FyZElPUzo6aGFzRGF0YSgpCi17Ci0gICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVu
dCgpLT5nZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpICE9IDA7Ci19Ci0KLXN0YXRpYyBTdHJpbmcg
dXRpVHlwZUZyb21Db2NvYVR5cGUoTlNTdHJpbmcqIHR5cGUpCi17Ci0gICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiB1dGlUeXBlID0gYWRvcHRDRihVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlm
aWVyRm9yVGFnKGtVVFRhZ0NsYXNzTUlNRVR5cGUsIChDRlN0cmluZ1JlZil0eXBlLCBOVUxMKSk7
Ci0gICAgaWYgKHV0aVR5cGUpIHsKLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBtaW1l
VHlwZSA9IGFkb3B0Q0YoVVRUeXBlQ29weVByZWZlcnJlZFRhZ1dpdGhDbGFzcyh1dGlUeXBlLmdl
dCgpLCBrVVRUYWdDbGFzc01JTUVUeXBlKSk7Ci0gICAgICAgIGlmIChtaW1lVHlwZSkKLSAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcobWltZVR5cGUuZ2V0KCkpOwotICAgIH0KLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNTdHJpbmc+IGNvY29hVHlwZUZyb21I
VE1MQ2xpcGJvYXJkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCi17Ci0gICAgU3RyaW5nIHFUeXBl
ID0gdHlwZS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgIGlmIChxVHlwZSA9PSAiVGV4dCIpCi0g
ICAgICAgIHJldHVybiAoTlNTdHJpbmcqKWtVVFR5cGVUZXh0OwotICAgIGlmIChxVHlwZSA9PSAi
VVJMIikKLSAgICAgICAgcmV0dXJuIChOU1N0cmluZyopa1VUVHlwZVVSTDsKLQotICAgIC8vIEln
bm9yZSBhbnkgdHJhaWxpbmcgY2hhcnNldCAtIEpTIHN0cmluZ3MgYXJlIFVuaWNvZGUsIHdoaWNo
IGVuY2Fwc3VsYXRlcyB0aGUgY2hhcnNldCBpc3N1ZS4KLSAgICBpZiAocVR5cGUuc3RhcnRzV2l0
aChBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSkpCi0gICAgICAgIHJldHVybiAoTlNTdHJpbmcq
KWtVVFR5cGVUZXh0OwotICAgIGlmIChxVHlwZSA9PSAidGV4dC91cmktbGlzdCIpCi0gICAgICAg
IC8vIFNwZWNpYWwgY2FzZSBiZWNhdXNlIFVUSSBkb2Vzbid0IHdvcmsgd2l0aCBDb2NvYSdzIFVS
TCB0eXBlLgotICAgICAgICByZXR1cm4gKE5TU3RyaW5nKilrVVRUeXBlVVJMOwotCi0gICAgLy8g
VHJ5IFVUSSBub3cuCi0gICAgTlNTdHJpbmcgKnBiVHlwZSA9IHV0aVR5cGVGcm9tQ29jb2FUeXBl
KHFUeXBlKTsKLSAgICBpZiAocGJUeXBlKQotICAgICAgICByZXR1cm4gcGJUeXBlOwotCi0gICAg
Ly8gTm8gbWFwcGluZywganVzdCBwYXNzIHRoZSB3aG9sZSBzdHJpbmcgdGhvdWdoLgotICAgIHJl
dHVybiAoTlNTdHJpbmcqKXFUeXBlOwotfQotCi1zdGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJk
VHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIE5TU3Ry
aW5nKiBjb2NvYVR5cGUpCi17Ci0gICAgLy8gVVRJIG1heSBub3QgZG8gdGhlc2UgcmlnaHQsIHNv
IG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHJpZ2h0LCBwcmVkaWN0YWJsZSByZXN1bHQuCi0gICAgaWYg
KFtjb2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyopa1VUVHlwZVRleHRdKSB7Ci0g
ICAgICAgIHJlc3VsdFR5cGVzLmFkZChBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKFtjb2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOihO
U1N0cmluZyopa1VUVHlwZVVSTF0pIHsKLSAgICAgICAgcmVzdWx0VHlwZXMuYWRkKEFTQ0lJTGl0
ZXJhbCgidGV4dC91cmktbGlzdCIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBTdHJp
bmcgdXRpVHlwZSA9IHV0aVR5cGVGcm9tQ29jb2FUeXBlKGNvY29hVHlwZSk7Ci0gICAgaWYgKCF1
dGlUeXBlLmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHRUeXBlcy5hZGQodXRpVHlwZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gTm8gbWFwcGluZywganVzdCBwYXNzIHRoZSB3
aG9sZSBzdHJpbmcgdGhvdWdoLgotICAgIHJlc3VsdFR5cGVzLmFkZChjb2NvYVR5cGUpOwotfQot
Ci12b2lkIENsaXBib2FyZElPUzo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAg
ICBpZiAoIWNhbldyaXRlRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOb3RlIFVJ
UGFzdGVib2FyZCBlbmZvcmNlcyBjaGFuZ2VDb3VudCBpdHNlbGYgb24gd3JpdGluZyAtIGNhbid0
IHdyaXRlIGlmIG5vdCB0aGUgb3duZXIuCi0KLSAgICBpZiAoUmV0YWluUHRyPE5TU3RyaW5nPiBj
b2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZSkpIHsKLSAgICAg
ICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRvcHROUyhbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW3JlcHJlc2VudGF0aW9u
cy5nZXQoKSBzZXRWYWx1ZTowIGZvcktleTpjb2NvYVR5cGUuZ2V0KCldOwotICAgICAgICBtX2Zy
YW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0
aW9ucy5nZXQoKSk7Ci0gICAgfQotfQotCi12b2lkIENsaXBib2FyZElPUzo6Y2xlYXJBbGxEYXRh
KCkKLXsKLSAgICBpZiAoIWNhbldyaXRlRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBS
ZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVu
dCgpLT53cml0ZURhdGFUb1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zLmdldCgpKTsKLX0KLQot
U3RyaW5nIENsaXBib2FyZElPUzo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0Ci17
Ci0gICAgaWYgKCFjYW5SZWFkRGF0YSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAg
ICBSZXRhaW5QdHI8TlNTdHJpbmc+IGNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJv
YXJkVHlwZSh0eXBlKTsKLSAgICBOU1N0cmluZyAqY29jb2FWYWx1ZSA9IG5pbDsKLQotICAgIC8v
IEdyYWIgdGhlIHZhbHVlIG9mZiB0aGUgcGFzdGVib2FyZCBjb3JyZXNwb25kaW5nIHRvIHRoZSBj
b2NvYVR5cGUuCi0gICAgUmV0YWluUHRyPE5TQXJyYXk+IHBhc3RlYm9hcmRJdGVtID0gbV9mcmFt
ZS0+ZWRpdG9yKCkuY2xpZW50KCktPnJlYWREYXRhRnJvbVBhc3RlYm9hcmQoY29jb2FUeXBlLmdl
dCgpLCAwKTsKLQotICAgIGlmIChbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgY291bnRdID09IDApCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChbY29jb2FUeXBlLmdldCgpIGlzRXF1
YWxUb1N0cmluZzooTlNTdHJpbmcqKWtVVFR5cGVVUkxdKSB7Ci0gICAgICAgIGlkIHZhbHVlID0g
W3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgICAgIGlmICghW3Zh
bHVlIGlzS2luZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pIHsKLSAgICAgICAgICAgIEFTU0VSVChb
dmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSk7Ci0gICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgTlNVUkwqIGFic29sdXRlVVJMID0gKE5TVVJM
Kil2YWx1ZTsKLQotICAgICAgICBpZiAoYWJzb2x1dGVVUkwpCi0gICAgICAgICAgICBjb2NvYVZh
bHVlID0gW2Fic29sdXRlVVJMIGFic29sdXRlU3RyaW5nXTsKLSAgICB9IGVsc2UgaWYgKFtjb2Nv
YVR5cGUuZ2V0KCkgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyopa1VUVHlwZVRleHRdKSB7Ci0g
ICAgICAgIGlkIHZhbHVlID0gW3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF07
Ci0gICAgICAgIGlmICghW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pIHsK
LSAgICAgICAgICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
XSk7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBj
b2NvYVZhbHVlID0gWyhOU1N0cmluZyopdmFsdWUgcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25p
Y2FsTWFwcGluZ107Ci0gICAgfSBlbHNlIGlmIChjb2NvYVR5cGUpIHsKLSAgICAgICAgQVNTRVJU
KFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBjb3VudF0gPT0gMSk7Ci0gICAgICAgIGlkIHZhbHVlID0g
W3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgICAgIGlmICghW3Zh
bHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
W3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dKTsKLSAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBjb2NvYVZhbHVlID0gW1tbTlNTdHJpbmcg
YWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhICopdmFsdWUgZW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddIGF1dG9yZWxlYXNlXTsKLSAgICB9Ci0KLSAgICAvLyBFbmZvcmNlIGNoYW5nZUNv
dW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuICBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3Rl
YWQgb2YgYmVmb3JlIHRvIGJlCi0gICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVu
IG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KLSAg
ICBpZiAoY29jb2FWYWx1ZSAmJiBtX2NoYW5nZUNvdW50ID09IG1fZnJhbWUtPmVkaXRvcigpLmNs
aWVudCgpLT5wYXN0ZWJvYXJkQ2hhbmdlQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIGNvY29hVmFs
dWU7Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgQ2xpcGJvYXJkSU9TOjpzZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQotewotICAgIGlmICgh
Y2FuV3JpdGVEYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFpblB0cjxO
U1N0cmluZz4gY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUp
OwotICAgIE5TU3RyaW5nICpjb2NvYURhdGEgPSBkYXRhOwotCi0gICAgUmV0YWluUHRyPE5TRGlj
dGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkg
YWxsb2NdIGluaXRdKTsKLQotICAgIGlmIChbY29jb2FUeXBlLmdldCgpIGlzRXF1YWxUb1N0cmlu
ZzooTlNTdHJpbmcqKWtVVFR5cGVVUkxdKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU1VSTD4gdXJs
ID0gYWRvcHROUyhbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0cmluZzpjb2NvYURhdGFdKTsKLSAg
ICAgICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTp1cmwuZ2V0KCkgZm9yS2V5OihO
U1N0cmluZyopa1VUVHlwZVVSTF07Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgp
LT53cml0ZURhdGFUb1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zLmdldCgpKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGNvY29hVHlwZSkgewotICAgICAgICAvLyBF
dmVyeXRoaW5nIGVsc2Ugd2Uga25vdyBvZiBnb2VzIG9uIHRoZSBwYm9hcmQgYXMgdGhlIG9yaWdp
bmFsIHN0cmluZwotICAgICAgICAvLyB3ZSByZWNlaXZlZCBhcyBwYXJhbWV0ZXIuCi0gICAgICAg
IFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6Y29jb2FEYXRhIGZvcktleTpjb2NvYVR5
cGUuZ2V0KCldOwotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+d3JpdGVEYXRh
VG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9ucy5nZXQoKSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTGlzdEhhc2hTZXQ8U3RyaW5nPiBD
bGlwYm9hcmRJT1M6OnR5cGVzKCkgY29uc3QKLXsKLSAgICBpZiAoIWNhblJlYWRUeXBlcygpKQot
ICAgICAgICByZXR1cm4gTGlzdEhhc2hTZXQ8U3RyaW5nPigpOwotCi0gICAgTlNBcnJheSogdHlw
ZXMgPSBQYXN0ZWJvYXJkOjpzdXBwb3J0ZWRQYXN0ZWJvYXJkVHlwZXMoKTsKLQotICAgIC8vIEVu
Zm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gIFdlIGNoZWNrIGFmdGVy
IHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKLSAgICAvLyBzdXJlIGl0IGRvZXNuJ3Qg
Y2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5n
IHRoZSBkYXRhLgotICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IG1fZnJhbWUtPmVkaXRvcigpLmNs
aWVudCgpLT5wYXN0ZWJvYXJkQ2hhbmdlQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIExpc3RIYXNo
U2V0PFN0cmluZz4oKTsKLQotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwotICAgIE5T
VUludGVnZXIgY291bnQgPSBbdHlwZXMgY291bnRdOwotICAgIGZvciAoTlNVSW50ZWdlciBpID0g
MDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgTlNTdHJpbmcqIHBiVHlwZSA9IFt0eXBlcyBv
YmplY3RBdEluZGV4OmldOwotICAgICAgICBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5
cGUocmVzdWx0LCBwYlR5cGUpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBh
c3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZElPUzo6ZmlsZXMoKSBjb25zdAotewotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIENsaXBib2FyZElPUzo6d3JpdGVSYW5nZShSYW5nZSogcmFuZ2Us
IEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQocmFuZ2UpOwotICAgIEFTU0VSVChmcmFtZSk7
Ci0gICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVTZWxlY3Rpb24ocmFu
Z2UsIGZyYW1lLT5lZGl0b3IoKS5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSAmJiBmcmFtZS0+
c2VsZWN0aW9uKCktPmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5LCBmcmFtZSk7Ci19
Ci0KLXZvaWQgQ2xpcGJvYXJkSU9TOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQp
Ci17Ci0gICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQo
dGV4dCwgbV9mcmFtZSk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkSU9TOjp3cml0ZVVSTChjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKQotewotfQotCi0jaWYgRU5BQkxFKERSQUdfU1VQ
UE9SVCkKLXZvaWQgQ2xpcGJvYXJkSU9TOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSog
ZnJhbWUpCi17Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1l
LT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPmNsaWVudCgpLT5kZWNs
YXJlQW5kV3JpdGVEcmFnSW1hZ2UobV9wYXN0ZWJvYXJkLmdldCgpLCBraXQoZWxlbWVudCksIHVy
bCwgdGl0bGUsIGZyYW1lKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQotCi1E
cmFnSW1hZ2VSZWYgQ2xpcGJvYXJkSU9TOjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmKSBjb25z
dAotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIENsaXBib2FyZElPUzo6c2V0RHJhZ0ltYWdl
KENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKQotewotfQotCi12b2lkIENsaXBib2FyZElP
Uzo6c2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlICosIGNvbnN0IEludFBvaW50JikKLXsKLX0KLQot
fQorLy8gRW1wdHkuIFNob3VsZCBiZSBkZWxldGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGFzdGVib2FyZElPUy5tbQppbmRleCBiMDljYzRmNjAzNjY5ZjBjY2M1NDc2ODUyMGU4
MmExZWZjZmJkYzNlLi4xNWM1M2VlMGJlOGFlOWNlYzNjNWNmNDZkMzZiOTc5YmNhNDI3ZDE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTA3LDEwICsxMDcsNyBAQCBQYXN0ZWJvYXJkKiBQYXN0ZWJvYXJk
OjpnZW5lcmFsUGFzdGVib2FyZCgpCiB9CiAKIFBhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoKQotewot
fQotCi12b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKKyAgICA6IG1fZnJhbWUoMCkKIHsKIH0KIApA
QCAtNDUyLDQgKzQ0OSwxODUgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJv
YXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlAKICAgICByZXR1cm4g
MDsKIH0KIAordm9pZCBQYXN0ZWJvYXJkOjpzZXRGcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAg
bV9mcmFtZSA9IGZyYW1lOworICAgIG1fY2hhbmdlQ291bnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5j
bGllbnQoKS0+cGFzdGVib2FyZENoYW5nZUNvdW50KCk7Cit9CisKK2Jvb2wgUGFzdGVib2FyZDo6
aGFzRGF0YSgpCit7CisgICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5nZXRQ
YXN0ZWJvYXJkSXRlbXNDb3VudCgpICE9IDA7Cit9CisKK3N0YXRpYyBTdHJpbmcgdXRpVHlwZUZy
b21Db2NvYVR5cGUoTlNTdHJpbmcqIHR5cGUpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiB1dGlUeXBlID0gYWRvcHRDRihVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFn
KGtVVFRhZ0NsYXNzTUlNRVR5cGUsIChDRlN0cmluZ1JlZil0eXBlLCBOVUxMKSk7CisgICAgaWYg
KHV0aVR5cGUpIHsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBtaW1lVHlwZSA9IGFk
b3B0Q0YoVVRUeXBlQ29weVByZWZlcnJlZFRhZ1dpdGhDbGFzcyh1dGlUeXBlLmdldCgpLCBrVVRU
YWdDbGFzc01JTUVUeXBlKSk7CisgICAgICAgIGlmIChtaW1lVHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcobWltZVR5cGUuZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8TlNTdHJpbmc+IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJv
YXJkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgU3RyaW5nIHFUeXBlID0gdHlwZS5z
dHJpcFdoaXRlU3BhY2UoKTsKKworICAgIGlmIChxVHlwZSA9PSAiVGV4dCIpCisgICAgICAgIHJl
dHVybiAoTlNTdHJpbmcqKWtVVFR5cGVUZXh0OworICAgIGlmIChxVHlwZSA9PSAiVVJMIikKKyAg
ICAgICAgcmV0dXJuIChOU1N0cmluZyopa1VUVHlwZVVSTDsKKworICAgIC8vIElnbm9yZSBhbnkg
dHJhaWxpbmcgY2hhcnNldCAtIEpTIHN0cmluZ3MgYXJlIFVuaWNvZGUsIHdoaWNoIGVuY2Fwc3Vs
YXRlcyB0aGUgY2hhcnNldCBpc3N1ZS4KKyAgICBpZiAocVR5cGUuc3RhcnRzV2l0aChBU0NJSUxp
dGVyYWwoInRleHQvcGxhaW4iKSkpCisgICAgICAgIHJldHVybiAoTlNTdHJpbmcqKWtVVFR5cGVU
ZXh0OworICAgIGlmIChxVHlwZSA9PSAidGV4dC91cmktbGlzdCIpCisgICAgICAgIC8vIFNwZWNp
YWwgY2FzZSBiZWNhdXNlIFVUSSBkb2Vzbid0IHdvcmsgd2l0aCBDb2NvYSdzIFVSTCB0eXBlLgor
ICAgICAgICByZXR1cm4gKE5TU3RyaW5nKilrVVRUeXBlVVJMOworCisgICAgLy8gVHJ5IFVUSSBu
b3cuCisgICAgTlNTdHJpbmcgKnBiVHlwZSA9IHV0aVR5cGVGcm9tQ29jb2FUeXBlKHFUeXBlKTsK
KyAgICBpZiAocGJUeXBlKQorICAgICAgICByZXR1cm4gcGJUeXBlOworCisgICAgLy8gTm8gbWFw
cGluZywganVzdCBwYXNzIHRoZSB3aG9sZSBzdHJpbmcgdGhvdWdoLgorICAgIHJldHVybiAoTlNT
dHJpbmcqKXFUeXBlOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKGNvbnN0IFN0cmluZyYg
dHlwZSkKK3sKKyAgICAvLyBTaW5jZSBVSVBhc3RlYm9hcmQgZW5mb3JjZXMgY2hhbmdlQ291bnQg
aXRzZWxmIG9uIHdyaXRpbmcsIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgaXQgaGVyZS4KKworICAg
IFJldGFpblB0cjxOU1N0cmluZz4gY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9h
cmRUeXBlKHR5cGUpOworICAgIGlmICghY29jb2FUeXBlKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBGSVhNRTogU2hvdWxkIHdyaXRlIHRoaXMgd2l0aCBAe30gc3ludGF4LgorICAgIFJldGFp
blB0cjxOU0RpY3Rpb25hcnk+IHJlcHJlc2VudGF0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisgICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRW
YWx1ZTowIGZvcktleTpjb2NvYVR5cGUuZ2V0KCldOworICAgIG1fZnJhbWUtPmVkaXRvcigpLmNs
aWVudCgpLT53cml0ZURhdGFUb1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zLmdldCgpKTsKK30K
Kwordm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigpCit7CisgICAgbV9mcmFtZS0+ZWRpdG9yKCkuY2xp
ZW50KCktPndyaXRlRGF0YVRvUGFzdGVib2FyZChAe30pOworfQorCitTdHJpbmcgUGFzdGVib2Fy
ZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0Cit7CisgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlw
ZSk7CisgICAgTlNTdHJpbmcgKmNvY29hVmFsdWUgPSBuaWw7CisKKyAgICAvLyBHcmFiIHRoZSB2
YWx1ZSBvZmYgdGhlIHBhc3RlYm9hcmQgY29ycmVzcG9uZGluZyB0byB0aGUgY29jb2FUeXBlLgor
ICAgIFJldGFpblB0cjxOU0FycmF5PiBwYXN0ZWJvYXJkSXRlbSA9IG1fZnJhbWUtPmVkaXRvcigp
LmNsaWVudCgpLT5yZWFkRGF0YUZyb21QYXN0ZWJvYXJkKGNvY29hVHlwZS5nZXQoKSwgMCk7CisK
KyAgICBpZiAoW3Bhc3RlYm9hcmRJdGVtLmdldCgpIGNvdW50XSA9PSAwKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisKKyAgICBpZiAoW2NvY29hVHlwZS5nZXQoKSBpc0VxdWFsVG9TdHJpbmc6
KE5TU3RyaW5nKilrVVRUeXBlVVJMXSkgeworICAgICAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJk
SXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOworICAgICAgICBpZiAoIVt2YWx1ZSBpc0tpbmRP
ZkNsYXNzOltOU1VSTCBjbGFzc11dKSB7CisgICAgICAgICAgICBBU1NFUlQoW3ZhbHVlIGlzS2lu
ZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
ICAgICAgICB9CisgICAgICAgIE5TVVJMKiBhYnNvbHV0ZVVSTCA9IChOU1VSTCopdmFsdWU7CisK
KyAgICAgICAgaWYgKGFic29sdXRlVVJMKQorICAgICAgICAgICAgY29jb2FWYWx1ZSA9IFthYnNv
bHV0ZVVSTCBhYnNvbHV0ZVN0cmluZ107CisgICAgfSBlbHNlIGlmIChbY29jb2FUeXBlLmdldCgp
IGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcqKWtVVFR5cGVUZXh0XSkgeworICAgICAgICBpZCB2
YWx1ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOworICAgICAgICBp
ZiAoIVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7CisgICAgICAgICAg
ICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOworICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgY29jb2FWYWx1ZSA9
IFsoTlNTdHJpbmcqKXZhbHVlIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmdd
OworICAgIH0gZWxzZSBpZiAoY29jb2FUeXBlKSB7CisgICAgICAgIEFTU0VSVChbcGFzdGVib2Fy
ZEl0ZW0uZ2V0KCkgY291bnRdID09IDEpOworICAgICAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJk
SXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOworICAgICAgICBpZiAoIVt2YWx1ZSBpc0tpbmRP
ZkNsYXNzOltOU0RhdGEgY2xhc3NdXSkgeworICAgICAgICAgICAgQVNTRVJUKFt2YWx1ZSBpc0tp
bmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXSk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgICAgIH0KKyAgICAgICAgY29jb2FWYWx1ZSA9IFtbW05TU3RyaW5nIGFsbG9jXSBpbml0
V2l0aERhdGE6KE5TRGF0YSAqKXZhbHVlIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBh
dXRvcmVsZWFzZV07CisgICAgfQorCisgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2
ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3Jl
IHRvIGJlCisgICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5n
IHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KKyAgICBpZiAoY29jb2FW
YWx1ZSAmJiBtX2NoYW5nZUNvdW50ID09IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5wYXN0
ZWJvYXJkQ2hhbmdlQ291bnQoKSkKKyAgICAgICAgcmV0dXJuIGNvY29hVmFsdWU7CisKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0Zv
ckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywgTlNTdHJpbmcqIGNv
Y29hVHlwZSkKK3sKKyAgICAvLyBVVEkgbWF5IG5vdCBkbyB0aGVzZSByaWdodCwgc28gbWFrZSBz
dXJlIHdlIGdldCB0aGUgcmlnaHQsIHByZWRpY3RhYmxlIHJlc3VsdC4KKyAgICBpZiAoW2NvY29h
VHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nKilrVVRUeXBlVGV4dF0pIHsKKyAgICAgICAg
cmVzdWx0VHlwZXMuYWRkKEFTQ0lJTGl0ZXJhbCgidGV4dC9wbGFpbiIpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoW2NvY29hVHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5n
KilrVVRUeXBlVVJMXSkgeworICAgICAgICByZXN1bHRUeXBlcy5hZGQoQVNDSUlMaXRlcmFsKCJ0
ZXh0L3VyaS1saXN0IikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFN0cmluZyB1dGlU
eXBlID0gdXRpVHlwZUZyb21Db2NvYVR5cGUoY29jb2FUeXBlKTsKKyAgICBpZiAoIXV0aVR5cGUu
aXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdFR5cGVzLmFkZCh1dGlUeXBlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAvLyBObyBtYXBwaW5nLCBqdXN0IHBhc3MgdGhlIHdob2xlIHN0
cmluZyB0aG91Z2guCisgICAgcmVzdWx0VHlwZXMuYWRkKGNvY29hVHlwZSk7Cit9CisKK2Jvb2wg
UGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpCit7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVG
cm9tSFRNTENsaXBib2FyZFR5cGUodHlwZSk7CisgICAgTlNTdHJpbmcgKmNvY29hRGF0YSA9IGRh
dGE7CisKKyAgICBpZiAoW2NvY29hVHlwZS5nZXQoKSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5n
KilrVVRUeXBlVVJMXSkgeworICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNl
bnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwor
ICAgICAgICBSZXRhaW5QdHI8TlNVUkw+IHVybCA9IGFkb3B0TlMoW1tOU1VSTCBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6Y29jb2FEYXRhXSk7CisgICAgICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkg
c2V0VmFsdWU6dXJsLmdldCgpIGZvcktleTooTlNTdHJpbmcqKWtVVFR5cGVVUkxdOworICAgICAg
ICBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJl
c2VudGF0aW9ucy5nZXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChjb2NvYVR5cGUpIHsKKyAgICAgICAgLy8gRXZlcnl0aGluZyBlbHNlIHdlIGtub3cgb2YgZ29l
cyBvbiB0aGUgcGJvYXJkIGFzIHRoZSBvcmlnaW5hbCBzdHJpbmcgd2UgcmVjZWl2ZWQgYXMgcGFy
YW1ldGVyLgorICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgICAgICBb
cmVwcmVzZW50YXRpb25zLmdldCgpIHNldFZhbHVlOmNvY29hRGF0YSBmb3JLZXk6Y29jb2FUeXBl
LmdldCgpXTsKKyAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPndyaXRlRGF0YVRv
UGFzdGVib2FyZChyZXByZXNlbnRhdGlvbnMuZ2V0KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0xpc3RIYXNoU2V0PFN0cmluZz4gUGFz
dGVib2FyZDo6dHlwZXMoKSBjb25zdAoreworICAgIE5TQXJyYXkqIHR5cGVzID0gc3VwcG9ydGVk
UGFzdGVib2FyZFR5cGVzKCk7CisKKyAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZl
cyBmb3Igc2VjdXJpdHkuIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUg
dG8gYmUKKyAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3Rpbmcg
dGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgorICAgIGlmIChtX2NoYW5n
ZUNvdW50ICE9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5wYXN0ZWJvYXJkQ2hhbmdlQ291
bnQoKSkKKyAgICAgICAgcmV0dXJuIExpc3RIYXNoU2V0PFN0cmluZz4oKTsKKworICAgIExpc3RI
YXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIE5TVUludGVnZXIgY291bnQgPSBbdHlwZXMgY291
bnRdOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAg
ICAgTlNTdHJpbmcqIHBiVHlwZSA9IFt0eXBlcyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBh
ZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUocmVzdWx0LCBwYlR5cGUpOworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJl
YWRGaWxlbmFtZXMoKQoreworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203554</attachid>
            <date>2013-06-02 22:25:34 -0700</date>
            <delta_ts>2013-08-13 09:20:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116412-20130602222406.patch</filename>
            <type>text/plain</type>
            <size>25139</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDE0NGQxZTQ0MzFjZTc5
OWQ4YTllOWU5MDE5YzQzYjk3NGZjNDliOC4uMTQ0Nzg0ZjVjN2VhOTI0ZmEzMGUwNGRkM2NhODhh
ZjU0ZDkwYTU0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEzLTA1LTE5ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBHZXQgaU9TIHBhcnQg
b2ZmIGxlZ2FjeSBjbGlwYm9hcmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExNjQxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEp1c3QgdGhlIGZpcnN0IGN1dCwgbm8gY2hhbmdlIGxvZyB5ZXQuCisKIDIw
MTMtMDYtMDIgIEFydW5wcmFzYWQgUmFqa3VtYXIgIDxhcnVyYWprdUBjaXNjby5jb20+CiAKICAg
ICAgICAgW1F0XSBNb3ZlIFF0IHBvcnQgb2ZmIGxlZ2FjeSBjbGlwYm9hcmQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlw
Ym9hcmQuaAppbmRleCBjNWQ0NzJlZTRmYjkyZjUwNGY4YjM2MmI1NjM5ZTEzMGE1ODk3ZjRiLi45
ZjExZDJjY2VlMDdmYzJmM2ZjMGMxMzlhY2NkM2U1MjMwY2ZjNjRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBi
b2FyZC5oCkBAIC0zNCw3ICszNCw3IEBACiAvLyBUaGlzIERPTSBvYmplY3Qgbm93IHdvcmtzIGJ5
IGNhbGxpbmcgdGhyb3VnaCB0byBjbGFzc2VzIGluIHRoZSBwbGF0Zm9ybSBsYXllci4KIC8vIFNw
ZWNpZmljYWxseSwgdGhlIGNsYXNzIGN1cnJlbnRseSBuYW1lZCBQYXN0ZWJvYXJkLiBUaGUgbGVn
YWN5IHN0eWxlIGluc3RlYWQKIC8vIHVzZXMgdGhpcyBhcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNz
LgotI2RlZmluZSBXVEZfVVNFX0xFR0FDWV9TVFlMRV9BQlNUUkFDVF9DTElQQk9BUkRfQ0xBU1Mg
UExBVEZPUk0oSU9TKQorI2RlZmluZSBXVEZfVVNFX0xFR0FDWV9TVFlMRV9BQlNUUkFDVF9DTElQ
Qk9BUkRfQ0xBU1MgMAogCiAjaWYgVVNFKExFR0FDWV9TVFlMRV9BQlNUUkFDVF9DTElQQk9BUkRf
Q0xBU1MpCiAjZGVmaW5lIExFR0FDWV9WSVJUVUFMIHZpcnR1YWwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAppbmRleCA5MjBiZDk4ODk2ZWM3NmRiZjU2MTY4YTE3MzM5ZTUzZWUwMzg0M2JjLi40
YmQ2YzEwY2E5NzljMDQ3MTkwODBiMjc2ZTlhZTZlZWI4ZjA1MjViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCkBAIC03MTAsNiArNzEwLDEwIEBAIGJvb2wgRWRpdG9yOjpkaXNwYXRjaENQ
UEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBDbGlwYm9hcmRBY2Nlc3NQb2xp
CiAgICAgUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJkID0gbmV3R2VuZXJhbENsaXBib2FyZChw
b2xpY3ksIG1fZnJhbWUpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgY2xpcGJv
YXJkLT5wYXN0ZWJvYXJkKCktPnNldEZyYW1lKG1fZnJhbWUpOworI2VuZGlmCisKICAgICBSZWZQ
dHI8RXZlbnQ+IGV2ZW50ID0gQ2xpcGJvYXJkRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIHRydWUs
IHRydWUsIGNsaXBib2FyZCk7CiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBJR05P
UkVfRVhDRVBUSU9OKTsKICAgICBib29sIG5vRGVmYXVsdFByb2Nlc3NpbmcgPSBldmVudC0+ZGVm
YXVsdFByZXZlbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFz
dGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCmluZGV4IGIw
MDExOGM1NjkwN2MyZmIwOTQ4ZWU0MGViODhiOTNjMGI3NmFkMDMuLjViNmFkNzVkMGMyMjg1YzMx
YTMyNDdmNzg1ZDI4NzUwOTQ3ODY0YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Bhc3RlYm9hcmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJk
LmgKQEAgLTE2MCw3ICsxNjAsMTIgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBu
ZWVkIHRvIG1vdmUgdG8gdGhlIGVkaXRpbmcgZGlyZWN0b3J5IGV2ZW4gaWYgdGhleSBoYXZlIHBs
YXRmb3JtLXNwZWNpZmljIGFzcGVjdHMuCiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBkb2N1bWVudEZyYWdtZW50KEZyYW1lKiwgUGFzc1JlZlB0cjxSYW5nZT4sIGJvb2wgYWxsb3dQ
bGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KTsKICAgICBTdHJpbmcgcGxhaW5UZXh0KEZy
YW1lKiA9IDApOwotICAgIAorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBSZW1v
dmUgdGhpcyBvbmNlIHdlIHN3aXRjaCB0byBwbGF0Zm9ybSBzdHJhdGVnaWVzIGluc3RlYWQgb2Yg
dGhlIGVkaXRvciBjbGllbnQuCisgICAgdm9pZCBzZXRGcmFtZShGcmFtZSopOworI2VuZGlmCisK
ICNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIGJvb2wgaXNTZWxlY3Rpb25N
b2RlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25Nb2RlKGJvb2wpOwpAQCAtMjA2LDYg
KzIxMSw5IEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50Rm9yUGFzdGVib2FyZEl0ZW1BdEluZGV4
KEZyYW1lKiwgaW50IGluZGV4LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWlu
VGV4dCk7CisKKyAgICBGcmFtZSogbV9mcmFtZTsKKyAgICBsb25nIG1fY2hhbmdlQ291bnQ7CiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9DbGlwYm9hcmRJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9D
bGlwYm9hcmRJT1MuaAppbmRleCA1MDAxOTNjZjM3NWEzYzRiOWEwZjFjOThkYzFjNGM4MGRkOWU4
M2NiLi4wOWM3Y2ZhZmQwY2IyZWUxMzE1MmUzOTlkYjdkOTkxOTgyNzJiMmZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ2xpcGJvYXJkSU9TLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NsaXBib2FyZElPUy5oCkBAIC0xLDc4ICsxIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ2xpcGJvYXJkSU9TX2gKLSNkZWZpbmUgQ2xp
cGJvYXJkSU9TX2gKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVk
ZSAiQ2xpcGJvYXJkLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEZyYW1lOwotY2xhc3MgRmlsZUxpc3Q7Ci0KLWNsYXNzIENsaXBi
b2FyZElPUyA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q2xpcGJvYXJkSU9TPiBjcmVhdGUoQ2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlLCBD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZElPUyhjbGlwYm9hcmRUeXBlLCBwb2xpY3ks
IGZyYW1lKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+Q2xpcGJvYXJkSU9TKCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIGNsZWFyRGF0YSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGdl
dERhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkgT1ZFUlJJ
REU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpIE9WRVJSSURFOwotCi0gICAgLy8gRXh0
ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkuCi0gICAgdmlydHVhbCBMaXN0SGFzaFNldDxTdHJpbmc+
IHR5cGVzKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0
PiBmaWxlcygpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgdmlydHVhbCB2b2lkIHNldERyYWdJbWFn
ZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2
b2lkIHNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSAqLCBjb25zdCBJbnRQb2ludCYpIE9WRVJSSURF
OwotCi0gICAgdmlydHVhbCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JiBk
cmFnTG9jKSBjb25zdCBPVkVSUklERTsKLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAgIHZp
cnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCosIGNvbnN0IEtVUkwm
LCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSopIE9WRVJSSURFOwotI2VuZGlmCi0gICAgdmly
dHVhbCB2b2lkIHdyaXRlUmFuZ2UoUmFuZ2UqLCBGcmFtZSopIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCB3cml0ZVVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJikgT1ZF
UlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgQ2xpcGJvYXJkSU9TKENsaXBib2FyZFR5cGUsIENsaXBi
b2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKLQotICAgIGludCBtX2NoYW5nZUNvdW50OwotICAg
IEZyYW1lKiBtX2ZyYW1lOyAvLyBVc2VkIHRvIGFjY2VzcyB0aGUgVUlQYXN0ZWJvYXJkIHRocm91
Z2ggdGhlIGVkaXRvciBjbGllbnQuCi19OwotCi19Ci0KLSNlbmRpZgorI2Vycm9yCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ2xpcGJvYXJkSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NsaXBib2FyZElPUy5tbQppbmRleCA1ODViNmI1YjMzY2Ri
ODQ3OTQxYjkxMjY2Yzc1NWQwZjg3NDcxY2QxLi4xN2Q1N2FhMmZlOTk5OTMzYjdkNjcxZGUzNmE3
ZWI0YzdhMGI5NWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ2xp
cGJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9DbGlwYm9hcmRJ
T1MubW0KQEAgLTEsMjk3ICsxIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiQ2xpcGJvYXJkSU9TLmgiCi0KLSNpbXBvcnQgIkRyYWdEYXRhLmgiCi0jaW1wb3J0
ICJFZGl0b3IuaCIKLSNpbXBvcnQgIkVkaXRvckNsaWVudC5oIgotI2ltcG9ydCAiRmlsZUxpc3Qu
aCIKLSNpbXBvcnQgIkZyYW1lLmgiCi0jaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCi0KLSNpbmNsdWRl
ICJTb2Z0TGlua2luZy5oIgotI2luY2x1ZGUgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3Jl
U2VydmljZXMuaD4KLQotU09GVF9MSU5LX0ZSQU1FV09SSyhNb2JpbGVDb3JlU2VydmljZXMpCi0K
LVNPRlRfTElOSyhNb2JpbGVDb3JlU2VydmljZXMsIFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50
aWZpZXJGb3JUYWcsIENGU3RyaW5nUmVmLCAoQ0ZTdHJpbmdSZWYgaW5UYWdDbGFzcywgQ0ZTdHJp
bmdSZWYgaW5UYWcsIENGU3RyaW5nUmVmIGluQ29uZm9ybWluZ1RvVVRJKSwgKGluVGFnQ2xhc3Ms
IGluVGFnLCBpbkNvbmZvcm1pbmdUb1VUSSkpCi1TT0ZUX0xJTksoTW9iaWxlQ29yZVNlcnZpY2Vz
LCBVVFR5cGVDb3B5UHJlZmVycmVkVGFnV2l0aENsYXNzLCBDRlN0cmluZ1JlZiwgKENGU3RyaW5n
UmVmIGluVVRJLCBDRlN0cmluZ1JlZiBpblRhZ0NsYXNzKSwgKGluVVRJLCBpblRhZ0NsYXNzKSkK
LQotU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNlcywga1VUVHlwZVRleHQsIENG
U3RyaW5nUmVmKQotU09GVF9MSU5LX0NPTlNUQU5UKE1vYmlsZUNvcmVTZXJ2aWNlcywga1VUVHlw
ZVVSTCwgQ0ZTdHJpbmdSZWYpCi1TT0ZUX0xJTktfQ09OU1RBTlQoTW9iaWxlQ29yZVNlcnZpY2Vz
LCBrVVRUYWdDbGFzc01JTUVUeXBlLCBDRlN0cmluZ1JlZikKLQotI2RlZmluZSBrVVRUeXBlVGV4
dCBnZXRrVVRUeXBlVGV4dCgpCi0jZGVmaW5lIGtVVFR5cGVVUkwgIGdldGtVVFR5cGVVUkwoKQot
I2RlZmluZSBrVVRUeXBlVElGRiBnZXRrVVRUeXBlVElGRigpCi0jZGVmaW5lIGtVVFRhZ0NsYXNz
TUlNRVR5cGUgZ2V0a1VUVGFnQ2xhc3NNSU1FVHlwZSgpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3JlYXRlKENsaXBib2FyZEFjY2Vz
c1BvbGljeSBwb2xpY3ksIERyYWdEYXRhKiwgRnJhbWUqIGZyYW1lKQotewotICAgIHJldHVybiBD
bGlwYm9hcmRJT1M6OmNyZWF0ZShEcmFnQW5kRHJvcCwgcG9saWN5LCBmcmFtZSk7Ci19Ci0KLUNs
aXBib2FyZElPUzo6Q2xpcGJvYXJkSU9TKENsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSwgQ2xp
cGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQotICAgIDogQ2xpcGJvYXJk
KHBvbGljeSwgY2xpcGJvYXJkVHlwZSkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCi17Ci0gICAgbV9j
aGFuZ2VDb3VudCA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5wYXN0ZWJvYXJkQ2hhbmdl
Q291bnQoKTsKLX0KLQotQ2xpcGJvYXJkSU9TOjp+Q2xpcGJvYXJkSU9TKCkKLXsKLX0KLQotYm9v
bCBDbGlwYm9hcmRJT1M6Omhhc0RhdGEoKQotewotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3Io
KS5jbGllbnQoKS0+Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKSAhPSAwOwotfQotCi1zdGF0aWMg
U3RyaW5nIHV0aVR5cGVGcm9tQ29jb2FUeXBlKE5TU3RyaW5nKiB0eXBlKQotewotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdXRpVHlwZSA9IGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVk
SWRlbnRpZmllckZvclRhZyhrVVRUYWdDbGFzc01JTUVUeXBlLCAoQ0ZTdHJpbmdSZWYpdHlwZSwg
TlVMTCkpOwotICAgIGlmICh1dGlUeXBlKSB7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gbWltZVR5cGUgPSBhZG9wdENGKFVUVHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3ModXRp
VHlwZS5nZXQoKSwga1VUVGFnQ2xhc3NNSU1FVHlwZSkpOwotICAgICAgICBpZiAobWltZVR5cGUp
Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1pbWVUeXBlLmdldCgpKTsKLSAgICB9Ci0gICAg
cmV0dXJuIFN0cmluZygpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPE5TU3RyaW5nPiBjb2NvYVR5
cGVGcm9tSFRNTENsaXBib2FyZFR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQotewotICAgIFN0cmlu
ZyBxVHlwZSA9IHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0KLSAgICBpZiAocVR5cGUgPT0gIlRl
eHQiKQotICAgICAgICByZXR1cm4gKE5TU3RyaW5nKilrVVRUeXBlVGV4dDsKLSAgICBpZiAocVR5
cGUgPT0gIlVSTCIpCi0gICAgICAgIHJldHVybiAoTlNTdHJpbmcqKWtVVFR5cGVVUkw7Ci0KLSAg
ICAvLyBJZ25vcmUgYW55IHRyYWlsaW5nIGNoYXJzZXQgLSBKUyBzdHJpbmdzIGFyZSBVbmljb2Rl
LCB3aGljaCBlbmNhcHN1bGF0ZXMgdGhlIGNoYXJzZXQgaXNzdWUuCi0gICAgaWYgKHFUeXBlLnN0
YXJ0c1dpdGgoQVNDSUlMaXRlcmFsKCJ0ZXh0L3BsYWluIikpKQotICAgICAgICByZXR1cm4gKE5T
U3RyaW5nKilrVVRUeXBlVGV4dDsKLSAgICBpZiAocVR5cGUgPT0gInRleHQvdXJpLWxpc3QiKQot
ICAgICAgICAvLyBTcGVjaWFsIGNhc2UgYmVjYXVzZSBVVEkgZG9lc24ndCB3b3JrIHdpdGggQ29j
b2EncyBVUkwgdHlwZS4KLSAgICAgICAgcmV0dXJuIChOU1N0cmluZyopa1VUVHlwZVVSTDsKLQot
ICAgIC8vIFRyeSBVVEkgbm93LgotICAgIE5TU3RyaW5nICpwYlR5cGUgPSB1dGlUeXBlRnJvbUNv
Y29hVHlwZShxVHlwZSk7Ci0gICAgaWYgKHBiVHlwZSkKLSAgICAgICAgcmV0dXJuIHBiVHlwZTsK
LQotICAgIC8vIE5vIG1hcHBpbmcsIGp1c3QgcGFzcyB0aGUgd2hvbGUgc3RyaW5nIHRob3VnaC4K
LSAgICByZXR1cm4gKE5TU3RyaW5nKilxVHlwZTsKLX0KLQotc3RhdGljIHZvaWQgYWRkSFRNTENs
aXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKExpc3RIYXNoU2V0PFN0cmluZz4mIHJlc3VsdFR5cGVz
LCBOU1N0cmluZyogY29jb2FUeXBlKQotewotICAgIC8vIFVUSSBtYXkgbm90IGRvIHRoZXNlIHJp
Z2h0LCBzbyBtYWtlIHN1cmUgd2UgZ2V0IHRoZSByaWdodCwgcHJlZGljdGFibGUgcmVzdWx0Lgot
ICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcqKWtVVFR5cGVUZXh0
XSkgewotICAgICAgICByZXN1bHRUeXBlcy5hZGQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3BsYWluIikp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0
cmluZzooTlNTdHJpbmcqKWtVVFR5cGVVUkxdKSB7Ci0gICAgICAgIHJlc3VsdFR5cGVzLmFkZChB
U0NJSUxpdGVyYWwoInRleHQvdXJpLWxpc3QiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgU3RyaW5nIHV0aVR5cGUgPSB1dGlUeXBlRnJvbUNvY29hVHlwZShjb2NvYVR5cGUpOwotICAg
IGlmICghdXRpVHlwZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0VHlwZXMuYWRkKHV0aVR5
cGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIE5vIG1hcHBpbmcsIGp1c3QgcGFz
cyB0aGUgd2hvbGUgc3RyaW5nIHRob3VnaC4KLSAgICByZXN1bHRUeXBlcy5hZGQoY29jb2FUeXBl
KTsKLX0KLQotdm9pZCBDbGlwYm9hcmRJT1M6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUp
Ci17Ci0gICAgaWYgKCFjYW5Xcml0ZURhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
Tm90ZSBVSVBhc3RlYm9hcmQgZW5mb3JjZXMgY2hhbmdlQ291bnQgaXRzZWxmIG9uIHdyaXRpbmcg
LSBjYW4ndCB3cml0ZSBpZiBub3QgdGhlIG93bmVyLgotCi0gICAgaWYgKFJldGFpblB0cjxOU1N0
cmluZz4gY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpKSB7
Ci0gICAgICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IHJlcHJlc2VudGF0aW9ucyA9IGFkb3B0
TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFtyZXByZXNl
bnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6MCBmb3JLZXk6Y29jb2FUeXBlLmdldCgpXTsKLSAgICAg
ICAgbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPndyaXRlRGF0YVRvUGFzdGVib2FyZChyZXBy
ZXNlbnRhdGlvbnMuZ2V0KCkpOwotICAgIH0KLX0KLQotdm9pZCBDbGlwYm9hcmRJT1M6OmNsZWFy
RGF0YSgpCi17Ci0gICAgaWYgKCFjYW5Xcml0ZURhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRvcHROUyhbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS5j
bGllbnQoKS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9ucy5nZXQoKSk7Ci19
Ci0KLVN0cmluZyBDbGlwYm9hcmRJT1M6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25z
dAotewotICAgIGlmICghY2FuUmVhZERhdGEoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
Ci0gICAgUmV0YWluUHRyPE5TU3RyaW5nPiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENs
aXBib2FyZFR5cGUodHlwZSk7Ci0gICAgTlNTdHJpbmcgKmNvY29hVmFsdWUgPSBuaWw7Ci0KLSAg
ICAvLyBHcmFiIHRoZSB2YWx1ZSBvZmYgdGhlIHBhc3RlYm9hcmQgY29ycmVzcG9uZGluZyB0byB0
aGUgY29jb2FUeXBlLgotICAgIFJldGFpblB0cjxOU0FycmF5PiBwYXN0ZWJvYXJkSXRlbSA9IG1f
ZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5yZWFkRGF0YUZyb21QYXN0ZWJvYXJkKGNvY29hVHlw
ZS5nZXQoKSwgMCk7Ci0KLSAgICBpZiAoW3Bhc3RlYm9hcmRJdGVtLmdldCgpIGNvdW50XSA9PSAw
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoW2NvY29hVHlwZS5nZXQoKSBp
c0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nKilrVVRUeXBlVVJMXSkgewotICAgICAgICBpZCB2YWx1
ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICBpZiAo
IVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1VSTCBjbGFzc11dKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pOwotICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIE5TVVJMKiBhYnNvbHV0ZVVSTCA9IChO
U1VSTCopdmFsdWU7Ci0KLSAgICAgICAgaWYgKGFic29sdXRlVVJMKQotICAgICAgICAgICAgY29j
b2FWYWx1ZSA9IFthYnNvbHV0ZVVSTCBhYnNvbHV0ZVN0cmluZ107Ci0gICAgfSBlbHNlIGlmIChb
Y29jb2FUeXBlLmdldCgpIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcqKWtVVFR5cGVUZXh0XSkg
ewotICAgICAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4
OjBdOwotICAgICAgICBpZiAoIVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11d
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNs
YXNzXV0pOwotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgY29jb2FWYWx1ZSA9IFsoTlNTdHJpbmcqKXZhbHVlIHByZWNvbXBvc2VkU3RyaW5nV2l0aENh
bm9uaWNhbE1hcHBpbmddOwotICAgIH0gZWxzZSBpZiAoY29jb2FUeXBlKSB7Ci0gICAgICAgIEFT
U0VSVChbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgY291bnRdID09IDEpOwotICAgICAgICBpZCB2YWx1
ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOwotICAgICAgICBpZiAo
IVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXSkgewotICAgICAgICAgICAgQVNT
RVJUKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29jb2FWYWx1ZSA9IFtbW05TU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aERhdGE6KE5TRGF0YSAqKXZhbHVlIGVuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFzZV07Ci0gICAgfQotCi0gICAgLy8gRW5mb3JjZSBjaGFu
Z2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiAgV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBp
bnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0
d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEu
Ci0gICAgaWYgKGNvY29hVmFsdWUgJiYgbV9jaGFuZ2VDb3VudCA9PSBtX2ZyYW1lLT5lZGl0b3Io
KS5jbGllbnQoKS0+cGFzdGVib2FyZENoYW5nZUNvdW50KCkpCi0gICAgICAgIHJldHVybiBjb2Nv
YVZhbHVlOwotCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1ib29sIENsaXBib2FyZElPUzo6
c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKLXsKLSAgICBp
ZiAoIWNhbldyaXRlRGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IGNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0
eXBlKTsKLSAgICBOU1N0cmluZyAqY29jb2FEYXRhID0gZGF0YTsKLQotICAgIFJldGFpblB0cjxO
U0RpY3Rpb25hcnk+IHJlcHJlc2VudGF0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBpZiAoW2NvY29hVHlwZS5nZXQoKSBpc0VxdWFsVG9T
dHJpbmc6KE5TU3RyaW5nKilrVVRUeXBlVVJMXSkgewotICAgICAgICBSZXRhaW5QdHI8TlNVUkw+
IHVybCA9IGFkb3B0TlMoW1tOU1VSTCBhbGxvY10gaW5pdFdpdGhTdHJpbmc6Y29jb2FEYXRhXSk7
Ci0gICAgICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6dXJsLmdldCgpIGZvcktl
eTooTlNTdHJpbmcqKWtVVFR5cGVVUkxdOwotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5jbGll
bnQoKS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9ucy5nZXQoKSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChjb2NvYVR5cGUpIHsKLSAgICAgICAg
Ly8gRXZlcnl0aGluZyBlbHNlIHdlIGtub3cgb2YgZ29lcyBvbiB0aGUgcGJvYXJkIGFzIHRoZSBv
cmlnaW5hbCBzdHJpbmcKLSAgICAgICAgLy8gd2UgcmVjZWl2ZWQgYXMgcGFyYW1ldGVyLgotICAg
ICAgICBbcmVwcmVzZW50YXRpb25zLmdldCgpIHNldFZhbHVlOmNvY29hRGF0YSBmb3JLZXk6Y29j
b2FUeXBlLmdldCgpXTsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPndyaXRl
RGF0YVRvUGFzdGVib2FyZChyZXByZXNlbnRhdGlvbnMuZ2V0KCkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUxpc3RIYXNoU2V0PFN0cmlu
Zz4gQ2xpcGJvYXJkSU9TOjp0eXBlcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFjYW5SZWFkVHlwZXMo
KSkKLSAgICAgICAgcmV0dXJuIExpc3RIYXNoU2V0PFN0cmluZz4oKTsKLQotICAgIE5TQXJyYXkq
IHR5cGVzID0gUGFzdGVib2FyZDo6c3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzKCk7Ci0KLSAgICAv
LyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuICBXZSBjaGVjayBh
ZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCi0gICAgLy8gc3VyZSBpdCBkb2Vz
bid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vz
c2luZyB0aGUgZGF0YS4KLSAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBtX2ZyYW1lLT5lZGl0b3Io
KS5jbGllbnQoKS0+cGFzdGVib2FyZENoYW5nZUNvdW50KCkpCi0gICAgICAgIHJldHVybiBMaXN0
SGFzaFNldDxTdHJpbmc+KCk7Ci0KLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKLSAg
ICBOU1VJbnRlZ2VyIGNvdW50ID0gW3R5cGVzIGNvdW50XTsKLSAgICBmb3IgKE5TVUludGVnZXIg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIE5TU3RyaW5nKiBwYlR5cGUgPSBbdHlw
ZXMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29j
b2FUeXBlKHJlc3VsdCwgcGJUeXBlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1QYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRJT1M6OmZpbGVzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBDbGlwYm9hcmRJT1M6OndyaXRlUmFuZ2UoUmFuZ2UqIHJh
bmdlLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgQVNTRVJUKHJhbmdlKTsKLSAgICBBU1NFUlQoZnJh
bWUpOwotICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlU2VsZWN0aW9u
KHJhbmdlLCBmcmFtZS0+ZWRpdG9yKCkuc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgJiYgZnJh
bWUtPnNlbGVjdGlvbigpLT5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eSwgZnJhbWUp
OwotfQotCi12b2lkIENsaXBib2FyZElPUzo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0
ZXh0KQotewotICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlUGxhaW5U
ZXh0KHRleHQsIG1fZnJhbWUpOwotfQotCi12b2lkIENsaXBib2FyZElPUzo6d3JpdGVVUkwoY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikKLXsKLX0KLQotI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpCi12b2lkIENsaXBib2FyZElPUzo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJh
bWUqIGZyYW1lKQotewotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBm
cmFtZS0+cGFnZSgpKQotICAgICAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5jbGllbnQoKS0+
ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKG1fcGFzdGVib2FyZC5nZXQoKSwga2l0KGVsZW1lbnQp
LCB1cmwsIHRpdGxlLCBmcmFtZSk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkK
LQotRHJhZ0ltYWdlUmVmIENsaXBib2FyZElPUzo6Y3JlYXRlRHJhZ0ltYWdlKEludFBvaW50Jikg
Y29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBDbGlwYm9hcmRJT1M6OnNldERyYWdJ
bWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50JikKLXsKLX0KLQotdm9pZCBDbGlwYm9h
cmRJT1M6OnNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSAqLCBjb25zdCBJbnRQb2ludCYpCi17Ci19
Ci0KLX0KKy8vIEVtcHR5LiBTaG91bGQgYmUgZGVsZXRlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KaW5kZXggYjA5Y2M0ZjYwMzY2OWYwY2NjNTQ3Njg1
MjBlODJhMWVmY2ZiZGMzZS4uMTVjNTNlZTBiZThhZTljZWMzYzVjZjQ2ZDM2Yjk3OWJjYTQyN2Qx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1Mu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNywxMCArMTA3LDcgQEAgUGFzdGVib2FyZCogUGFzdGVi
b2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKQogfQogCiBQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkK
LXsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigpCisgICAgOiBtX2ZyYW1lKDApCiB7CiB9
CiAKQEAgLTQ1Miw0ICs0NDksMTg1IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFz
dGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQCiAgICAgcmV0
dXJuIDA7CiB9CiAKK3ZvaWQgUGFzdGVib2FyZDo6c2V0RnJhbWUoRnJhbWUqIGZyYW1lKQorewor
ICAgIG1fZnJhbWUgPSBmcmFtZTsKKyAgICBtX2NoYW5nZUNvdW50ID0gbV9mcmFtZS0+ZWRpdG9y
KCkuY2xpZW50KCktPnBhc3RlYm9hcmRDaGFuZ2VDb3VudCgpOworfQorCitib29sIFBhc3RlYm9h
cmQ6Omhhc0RhdGEoKQoreworICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+
Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKSAhPSAwOworfQorCitzdGF0aWMgU3RyaW5nIHV0aVR5
cGVGcm9tQ29jb2FUeXBlKE5TU3RyaW5nKiB0eXBlKQoreworICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gdXRpVHlwZSA9IGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZv
clRhZyhrVVRUYWdDbGFzc01JTUVUeXBlLCAoQ0ZTdHJpbmdSZWYpdHlwZSwgTlVMTCkpOworICAg
IGlmICh1dGlUeXBlKSB7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWltZVR5cGUg
PSBhZG9wdENGKFVUVHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3ModXRpVHlwZS5nZXQoKSwg
a1VUVGFnQ2xhc3NNSU1FVHlwZSkpOworICAgICAgICBpZiAobWltZVR5cGUpCisgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKG1pbWVUeXBlLmdldCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFN0cmlu
ZygpOworfQorCitzdGF0aWMgUmV0YWluUHRyPE5TU3RyaW5nPiBjb2NvYVR5cGVGcm9tSFRNTENs
aXBib2FyZFR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIFN0cmluZyBxVHlwZSA9IHR5
cGUuc3RyaXBXaGl0ZVNwYWNlKCk7CisKKyAgICBpZiAocVR5cGUgPT0gIlRleHQiKQorICAgICAg
ICByZXR1cm4gKE5TU3RyaW5nKilrVVRUeXBlVGV4dDsKKyAgICBpZiAocVR5cGUgPT0gIlVSTCIp
CisgICAgICAgIHJldHVybiAoTlNTdHJpbmcqKWtVVFR5cGVVUkw7CisKKyAgICAvLyBJZ25vcmUg
YW55IHRyYWlsaW5nIGNoYXJzZXQgLSBKUyBzdHJpbmdzIGFyZSBVbmljb2RlLCB3aGljaCBlbmNh
cHN1bGF0ZXMgdGhlIGNoYXJzZXQgaXNzdWUuCisgICAgaWYgKHFUeXBlLnN0YXJ0c1dpdGgoQVND
SUlMaXRlcmFsKCJ0ZXh0L3BsYWluIikpKQorICAgICAgICByZXR1cm4gKE5TU3RyaW5nKilrVVRU
eXBlVGV4dDsKKyAgICBpZiAocVR5cGUgPT0gInRleHQvdXJpLWxpc3QiKQorICAgICAgICAvLyBT
cGVjaWFsIGNhc2UgYmVjYXVzZSBVVEkgZG9lc24ndCB3b3JrIHdpdGggQ29jb2EncyBVUkwgdHlw
ZS4KKyAgICAgICAgcmV0dXJuIChOU1N0cmluZyopa1VUVHlwZVVSTDsKKworICAgIC8vIFRyeSBV
VEkgbm93LgorICAgIE5TU3RyaW5nICpwYlR5cGUgPSB1dGlUeXBlRnJvbUNvY29hVHlwZShxVHlw
ZSk7CisgICAgaWYgKHBiVHlwZSkKKyAgICAgICAgcmV0dXJuIHBiVHlwZTsKKworICAgIC8vIE5v
IG1hcHBpbmcsIGp1c3QgcGFzcyB0aGUgd2hvbGUgc3RyaW5nIHRob3VnaC4KKyAgICByZXR1cm4g
KE5TU3RyaW5nKilxVHlwZTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjpjbGVhcihjb25zdCBTdHJp
bmcmIHR5cGUpCit7CisgICAgLy8gU2luY2UgVUlQYXN0ZWJvYXJkIGVuZm9yY2VzIGNoYW5nZUNv
dW50IGl0c2VsZiBvbiB3cml0aW5nLCB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGl0IGhlcmUuCisK
KyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xp
cGJvYXJkVHlwZSh0eXBlKTsKKyAgICBpZiAoIWNvY29hVHlwZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gRklYTUU6IFNob3VsZCB3cml0ZSB0aGlzIHdpdGggQHt9IHN5bnRheC4KKyAgICBS
ZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkg
c2V0VmFsdWU6MCBmb3JLZXk6Y29jb2FUeXBlLmdldCgpXTsKKyAgICBtX2ZyYW1lLT5lZGl0b3Io
KS5jbGllbnQoKS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9ucy5nZXQoKSk7
Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoKQoreworICAgIG1fZnJhbWUtPmVkaXRvcigp
LmNsaWVudCgpLT53cml0ZURhdGFUb1Bhc3RlYm9hcmQoQHt9KTsKK30KKworU3RyaW5nIFBhc3Rl
Ym9hcmQ6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAoreworICAgIFJldGFp
blB0cjxOU1N0cmluZz4gY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBl
KHR5cGUpOworICAgIE5TU3RyaW5nICpjb2NvYVZhbHVlID0gbmlsOworCisgICAgLy8gR3JhYiB0
aGUgdmFsdWUgb2ZmIHRoZSBwYXN0ZWJvYXJkIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvY29hVHlw
ZS4KKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gcGFzdGVib2FyZEl0ZW0gPSBtX2ZyYW1lLT5lZGl0
b3IoKS5jbGllbnQoKS0+cmVhZERhdGFGcm9tUGFzdGVib2FyZChjb2NvYVR5cGUuZ2V0KCksIDAp
OworCisgICAgaWYgKFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBjb3VudF0gPT0gMCkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKFtjb2NvYVR5cGUuZ2V0KCkgaXNFcXVhbFRvU3Ry
aW5nOihOU1N0cmluZyopa1VUVHlwZVVSTF0pIHsKKyAgICAgICAgaWQgdmFsdWUgPSBbcGFzdGVi
b2FyZEl0ZW0uZ2V0KCkgb2JqZWN0QXRJbmRleDowXTsKKyAgICAgICAgaWYgKCFbdmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSkgeworICAgICAgICAgICAgQVNTRVJUKFt2YWx1ZSBp
c0tpbmRPZkNsYXNzOltOU1VSTCBjbGFzc11dKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICAgICAgfQorICAgICAgICBOU1VSTCogYWJzb2x1dGVVUkwgPSAoTlNVUkwqKXZhbHVl
OworCisgICAgICAgIGlmIChhYnNvbHV0ZVVSTCkKKyAgICAgICAgICAgIGNvY29hVmFsdWUgPSBb
YWJzb2x1dGVVUkwgYWJzb2x1dGVTdHJpbmddOworICAgIH0gZWxzZSBpZiAoW2NvY29hVHlwZS5n
ZXQoKSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nKilrVVRUeXBlVGV4dF0pIHsKKyAgICAgICAg
aWQgdmFsdWUgPSBbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgb2JqZWN0QXRJbmRleDowXTsKKyAgICAg
ICAgaWYgKCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgeworICAgICAg
ICAgICAgQVNTRVJUKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKKyAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvY29hVmFs
dWUgPSBbKE5TU3RyaW5nKil2YWx1ZSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBw
aW5nXTsKKyAgICB9IGVsc2UgaWYgKGNvY29hVHlwZSkgeworICAgICAgICBBU1NFUlQoW3Bhc3Rl
Ym9hcmRJdGVtLmdldCgpIGNvdW50XSA9PSAxKTsKKyAgICAgICAgaWQgdmFsdWUgPSBbcGFzdGVi
b2FyZEl0ZW0uZ2V0KCkgb2JqZWN0QXRJbmRleDowXTsKKyAgICAgICAgaWYgKCFbdmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0pIHsKKyAgICAgICAgICAgIEFTU0VSVChbdmFsdWUg
aXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0pOworICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICAgICB9CisgICAgICAgIGNvY29hVmFsdWUgPSBbW1tOU1N0cmluZyBhbGxvY10g
aW5pdFdpdGhEYXRhOihOU0RhdGEgKil2YWx1ZSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z10gYXV0b3JlbGVhc2VdOworICAgIH0KKworICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vy
c2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJl
Zm9yZSB0byBiZQorICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVz
dGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCisgICAgaWYgKGNv
Y29hVmFsdWUgJiYgbV9jaGFuZ2VDb3VudCA9PSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+
cGFzdGVib2FyZENoYW5nZUNvdW50KCkpCisgICAgICAgIHJldHVybiBjb2NvYVZhbHVlOworCisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCitzdGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlw
ZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIE5TU3RyaW5n
KiBjb2NvYVR5cGUpCit7CisgICAgLy8gVVRJIG1heSBub3QgZG8gdGhlc2UgcmlnaHQsIHNvIG1h
a2Ugc3VyZSB3ZSBnZXQgdGhlIHJpZ2h0LCBwcmVkaWN0YWJsZSByZXN1bHQuCisgICAgaWYgKFtj
b2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyopa1VUVHlwZVRleHRdKSB7CisgICAg
ICAgIHJlc3VsdFR5cGVzLmFkZChBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKFtjb2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0
cmluZyopa1VUVHlwZVVSTF0pIHsKKyAgICAgICAgcmVzdWx0VHlwZXMuYWRkKEFTQ0lJTGl0ZXJh
bCgidGV4dC91cmktbGlzdCIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTdHJpbmcg
dXRpVHlwZSA9IHV0aVR5cGVGcm9tQ29jb2FUeXBlKGNvY29hVHlwZSk7CisgICAgaWYgKCF1dGlU
eXBlLmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHRUeXBlcy5hZGQodXRpVHlwZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gTm8gbWFwcGluZywganVzdCBwYXNzIHRoZSB3aG9s
ZSBzdHJpbmcgdGhvdWdoLgorICAgIHJlc3VsdFR5cGVzLmFkZChjb2NvYVR5cGUpOworfQorCiti
b29sIFBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBkYXRhKQoreworICAgIFJldGFpblB0cjxOU1N0cmluZz4gY29jb2FUeXBlID0gY29jb2FU
eXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpOworICAgIE5TU3RyaW5nICpjb2NvYURhdGEg
PSBkYXRhOworCisgICAgaWYgKFtjb2NvYVR5cGUuZ2V0KCkgaXNFcXVhbFRvU3RyaW5nOihOU1N0
cmluZyopa1VUVHlwZVVSTF0pIHsKKyAgICAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcmVw
cmVzZW50YXRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRd
KTsKKyAgICAgICAgUmV0YWluUHRyPE5TVVJMPiB1cmwgPSBhZG9wdE5TKFtbTlNVUkwgYWxsb2Nd
IGluaXRXaXRoU3RyaW5nOmNvY29hRGF0YV0pOworICAgICAgICBbcmVwcmVzZW50YXRpb25zLmdl
dCgpIHNldFZhbHVlOnVybC5nZXQoKSBmb3JLZXk6KE5TU3RyaW5nKilrVVRUeXBlVVJMXTsKKyAg
ICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPndyaXRlRGF0YVRvUGFzdGVib2FyZChy
ZXByZXNlbnRhdGlvbnMuZ2V0KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoY29jb2FUeXBlKSB7CisgICAgICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSB3ZSBrbm93IG9m
IGdvZXMgb24gdGhlIHBib2FyZCBhcyB0aGUgb3JpZ2luYWwgc3RyaW5nIHdlIHJlY2VpdmVkIGFz
IHBhcmFtZXRlci4KKyAgICAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRp
b25zID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKyAgICAg
ICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTpjb2NvYURhdGEgZm9yS2V5OmNvY29h
VHlwZS5nZXQoKV07CisgICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT53cml0ZURh
dGFUb1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitMaXN0SGFzaFNldDxTdHJpbmc+
IFBhc3RlYm9hcmQ6OnR5cGVzKCkgY29uc3QKK3sKKyAgICBOU0FycmF5KiB0eXBlcyA9IHN1cHBv
cnRlZFBhc3RlYm9hcmRUeXBlcygpOworCisgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJz
ZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVm
b3JlIHRvIGJlCisgICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0
aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KKyAgICBpZiAobV9j
aGFuZ2VDb3VudCAhPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+cGFzdGVib2FyZENoYW5n
ZUNvdW50KCkpCisgICAgICAgIHJldHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7CisKKyAgICBM
aXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW3R5cGVz
IGNvdW50XTsKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cisg
ICAgICAgIE5TU3RyaW5nKiBwYlR5cGUgPSBbdHlwZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAg
ICAgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKHJlc3VsdCwgcGJUeXBlKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJk
OjpyZWFkRmlsZW5hbWVzKCkKK3sKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKK30KKwog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208640</attachid>
            <date>2013-08-13 09:20:11 -0700</date>
            <delta_ts>2013-08-13 17:00:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116412-20130813092011.patch</filename>
            <type>text/plain</type>
            <size>26038</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU0MDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmQxNjdhMzkzNmQwMmZj
ZDU1NmI4YTUyOGE3OTBlODM5Nzc4OTg1YS4uZGM4NGZhYzMzOTgwMzQxZmRhYjc0NzQ1YWU5YjJm
ZDU3OGJlNDQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEzLTA4LTEzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBHZXQgaU9TIHBvcnQg
b2ZmIGxlZ2FjeSBjbGlwYm9hcmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExNjQxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZG9tL0NsaXBib2FyZC5oOiBUdXJuIG9mZiBsZWdhY3kgc3R5bGUgY2xp
cGJvYXJkIGZvciBpT1MuCisgICAgICAgIE5leHQgcGF0Y2ggd2lsbCBiZSBhYmxlIHRvIHJlbW92
ZSBsZWdhY3kgc3R5bGUgZW50aXJlbHkhCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRpc3BhdGNoQ1BQRXZlbnQpOiBBdHRhY2ggdGhl
IGZyYW1lIHRvIHRoZQorICAgICAgICBwYXN0ZWJvYXJkIGRpcmVjdGx5IGV4cGxpY2l0bHkuIFRo
aXMgaXMgYSBsYXllcmluZyB2aW9sYXRpb24sIGJ1dAorICAgICAgICBpcyBuZWVkZWQgdW50aWwg
d2UgY2hhbmdlIGhvdyBpT1MgcGFzdGVib2FyZCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUKKyAgICAg
ICAgaG9zdCB0byB1c2UgcGxhdGZvcm0gc3RyYXRlZ2llcyBpbnN0ZWFkIG9mIHRoZSBlZGl0b3Ig
Y2xpZW50LgorCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOiBBZGRlZCB0aGUgc2V0
RnJhbWUgZnVuY3Rpb24gKGlPUy1vbmx5KSBhbmQKKyAgICAgICAgZnJhbWUgYW5kIGNoYW5nZSBj
b3VudCBkYXRhIG1lbWJlcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvQ2xpcGJvYXJkSU9T
Lmg6IEVtcHRpZWQgb3V0LiBMYXRlciB3ZSBjYW4gcmVtb3ZlIHRoaXMuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL0NsaXBib2FyZElPUy5tbTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvUGFzdGVib2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OlBhc3Rl
Ym9hcmQpOiBJbml0aWFsaXplIG1fZnJhbWUgdG8gemVyby4KKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmQ6OnNldEZyYW1lKTogQWRkZWQuIFNldHMgZnJhbWUgYW5kIGNoYW5nZSBjb3VudC4K
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6Omhhc0RhdGEpOiBNb3ZlZCBoZXJlIGZyb20g
Q2xpcGJvYXJkSU9TLgorICAgICAgICAoV2ViQ29yZTo6dXRpVHlwZUZyb21Db2NvYVR5cGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6Y2xlYXIpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTdHJpbmcpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKTogRGl0dG8uCisKIDIwMTMtMDgtMTMgIERhbmlsbyBD
ZXNhciBMZW1lcyBkZSBQYXVsYSAgPGRhbmlsby5jZXNhckBjb2xsYWJvcmEuY28udWs+CiAKICAg
ICAgICAgW0dUS10gY2xvc2UgdGhlIHZvbHVtZSBzbGlkZXIgd2hlbiB0aGUgbWVkaWEgY29udHJv
bCBwYW5lbCBpcyBoaWRkZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9h
cmQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaAppbmRleCBmODNhYjNmMTg1Yzg3
ZDJhNzU1ZjljMGMwNDk1ZjhlNTExNThkYmY3Li4zY2I2NzZhZTg3MGNmYmM0ZWRjYjRkMzdhZDk0
MmZjMmUzMGQ5MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oCkBAIC0zNCw3ICszNCw3IEBACiAv
LyBUaGlzIERPTSBvYmplY3Qgbm93IHdvcmtzIGJ5IGNhbGxpbmcgdGhyb3VnaCB0byBjbGFzc2Vz
IGluIHRoZSBwbGF0Zm9ybSBsYXllci4KIC8vIFNwZWNpZmljYWxseSwgdGhlIGNsYXNzIGN1cnJl
bnRseSBuYW1lZCBQYXN0ZWJvYXJkLiBUaGUgbGVnYWN5IHN0eWxlIGluc3RlYWQKIC8vIHVzZXMg
dGhpcyBhcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzLgotI2RlZmluZSBXVEZfVVNFX0xFR0FDWV9T
VFlMRV9BQlNUUkFDVF9DTElQQk9BUkRfQ0xBU1MgUExBVEZPUk0oSU9TKQorI2RlZmluZSBXVEZf
VVNFX0xFR0FDWV9TVFlMRV9BQlNUUkFDVF9DTElQQk9BUkRfQ0xBU1MgMAogCiAjaWYgVVNFKExF
R0FDWV9TVFlMRV9BQlNUUkFDVF9DTElQQk9BUkRfQ0xBU1MpCiAjZGVmaW5lIExFR0FDWV9WSVJU
VUFMIHZpcnR1YWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA4YzFjNGI2YmRhNTdk
OTI3YTg4NjViMzVkODI5NTkxYjUzM2RkNjE5Li44NDI5YzllN2M2MjlmNGJmZDJmNjBiZTRmMjE0
ODBjYjQ0OGVkMzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC03MDgsNiArNzA4
LDEwIEBAIGJvb2wgRWRpdG9yOjpkaXNwYXRjaENQUEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBDbGlwYm9hcmRBY2Nlc3NQb2xpCiAgICAgUmVmUHRyPENsaXBib2FyZD4gY2xp
cGJvYXJkID0gbmV3R2VuZXJhbENsaXBib2FyZChwb2xpY3ksIG1fZnJhbWUpOwogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShJT1MpCisgICAgY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCktPnNldEZyYW1l
KG1fZnJhbWUpOworI2VuZGlmCisKICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gQ2xpcGJvYXJk
RXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIHRydWUsIHRydWUsIGNsaXBib2FyZCk7CiAgICAgdGFy
Z2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICBib29sIG5v
RGVmYXVsdFByb2Nlc3NpbmcgPSBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGFzdGVib2FyZC5oCmluZGV4IDI4MDMyOGQzNWRjMWYzOTYyMTIzM2FlZDk4ZDlh
NTEzZDMzZGY2MTUuLjJhYzI0MjJjZDkzMzQ2MGJlYzUzZGNiN2FkNGI2YzAzYmUyN2NhYzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKQEAgLTE1Nyw3ICsxNTcsMTIgQEAgcHVi
bGljOgogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBuZWVkIHRvIG1vdmUgdG8gdGhlIGVkaXRpbmcg
ZGlyZWN0b3J5IGV2ZW4gaWYgdGhleSBoYXZlIHBsYXRmb3JtLXNwZWNpZmljIGFzcGVjdHMuCiAg
ICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50KEZyYW1lKiwg
UGFzc1JlZlB0cjxSYW5nZT4sIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5U
ZXh0KTsKICAgICBTdHJpbmcgcGxhaW5UZXh0KEZyYW1lKiA9IDApOwotICAgIAorCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHdlIHN3aXRjaCB0byBw
bGF0Zm9ybSBzdHJhdGVnaWVzIGluc3RlYWQgb2YgdGhlIGVkaXRvciBjbGllbnQuCisgICAgdm9p
ZCBzZXRGcmFtZShGcmFtZSopOworI2VuZGlmCisKICNpZiBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oR1RLKQogICAgIGJvb2wgaXNTZWxlY3Rpb25Nb2RlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRT
ZWxlY3Rpb25Nb2RlKGJvb2wpOwpAQCAtMjAzLDYgKzIwOCw5IEBAIHByaXZhdGU6CiAKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZy
YWdtZW50Rm9yUGFzdGVib2FyZEl0ZW1BdEluZGV4KEZyYW1lKiwgaW50IGluZGV4LCBib29sIGFs
bG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7CisKKyAgICBGcmFtZSogbV9mcmFt
ZTsKKyAgICBsb25nIG1fY2hhbmdlQ291bnQ7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9DbGlwYm9hcmRJT1MuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9DbGlwYm9hcmRJT1MuaAppbmRleCBmZTViZDcx
YzhiYzE2M2FjODVkMWMyNDVlZDlhZWZkYzcyNDY4MzI0Li4wOWM3Y2ZhZmQwY2IyZWUxMzE1MmUz
OTlkYjdkOTkxOTgyNzJiMmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvQ2xpcGJvYXJkSU9TLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NsaXBi
b2FyZElPUy5oCkBAIC0xLDc1ICsxIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgQ2xpcGJvYXJkSU9TX2gKLSNkZWZpbmUgQ2xpcGJvYXJkSU9TX2gKLQotI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCi0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZyYW1lOwot
Y2xhc3MgRmlsZUxpc3Q7Ci0KLWNsYXNzIENsaXBib2FyZElPUyA6IHB1YmxpYyBDbGlwYm9hcmQs
IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkSU9TPiBjcmVhdGUo
Q2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlLCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5
LCBGcmFtZSogZnJhbWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBi
b2FyZElPUyhjbGlwYm9hcmRUeXBlLCBwb2xpY3ksIGZyYW1lKSk7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB+Q2xpcGJvYXJkSU9TKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0YSgpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBj
b25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFz
RGF0YSgpIE9WRVJSSURFOwotCi0gICAgLy8gRXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkuCi0g
ICAgdmlydHVhbCBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0IE9WRVJSSURFOwot
Ci0gICAgdmlydHVhbCB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBv
aW50JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldERyYWdJbWFnZUVsZW1lbnQoTm9k
ZSAqLCBjb25zdCBJbnRQb2ludCYpIE9WRVJSSURFOwotCi0gICAgdmlydHVhbCBEcmFnSW1hZ2VS
ZWYgY3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JiBkcmFnTG9jKSBjb25zdCBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgd3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKikgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIHdyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSop
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCB3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcm
KSBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICBDbGlwYm9hcmRJT1MoQ2xpcGJvYXJkVHlwZSwg
Q2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOwotCi0gICAgaW50IG1fY2hhbmdlQ291bnQ7
Ci0gICAgRnJhbWUqIG1fZnJhbWU7IC8vIFVzZWQgdG8gYWNjZXNzIHRoZSBVSVBhc3RlYm9hcmQg
dGhyb3VnaCB0aGUgZWRpdG9yIGNsaWVudC4KLX07Ci0KLX0KLQotI2VuZGlmCisjZXJyb3IKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9DbGlwYm9hcmRJT1MubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ2xpcGJvYXJkSU9TLm1tCmluZGV4IGFlMjA5NDNi
NTNmNmJlMDUyNmZkMDgwNDgzM2I5ZDU0MWE0MDVkYjMuLjE3ZDU3YWEyZmU5OTk5MzNiN2Q2NzFk
ZTM2YTdlYjRjN2EwYjk1YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9DbGlwYm9hcmRJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NsaXBi
b2FyZElPUy5tbQpAQCAtMSwyODggKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJDbGlwYm9hcmRJT1MuaCIKLQotI2ltcG9ydCAiRHJhZ0RhdGEuaCIKLSNp
bXBvcnQgIkVkaXRvci5oIgotI2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCi0jaW1wb3J0ICJGaWxl
TGlzdC5oIgotI2ltcG9ydCAiRnJhbWUuaCIKLSNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKLQotI2lu
Y2x1ZGUgIlNvZnRMaW5raW5nLmgiCi0jaW5jbHVkZSA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmls
ZUNvcmVTZXJ2aWNlcy5oPgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLKE1vYmlsZUNvcmVTZXJ2aWNl
cykKLQotU09GVF9MSU5LKE1vYmlsZUNvcmVTZXJ2aWNlcywgVVRUeXBlQ3JlYXRlUHJlZmVycmVk
SWRlbnRpZmllckZvclRhZywgQ0ZTdHJpbmdSZWYsIChDRlN0cmluZ1JlZiBpblRhZ0NsYXNzLCBD
RlN0cmluZ1JlZiBpblRhZywgQ0ZTdHJpbmdSZWYgaW5Db25mb3JtaW5nVG9VVEkpLCAoaW5UYWdD
bGFzcywgaW5UYWcsIGluQ29uZm9ybWluZ1RvVVRJKSkKLVNPRlRfTElOSyhNb2JpbGVDb3JlU2Vy
dmljZXMsIFVUVHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3MsIENGU3RyaW5nUmVmLCAoQ0ZT
dHJpbmdSZWYgaW5VVEksIENGU3RyaW5nUmVmIGluVGFnQ2xhc3MpLCAoaW5VVEksIGluVGFnQ2xh
c3MpKQotCi1TT0ZUX0xJTktfQ09OU1RBTlQoTW9iaWxlQ29yZVNlcnZpY2VzLCBrVVRUeXBlVGV4
dCwgQ0ZTdHJpbmdSZWYpCi1TT0ZUX0xJTktfQ09OU1RBTlQoTW9iaWxlQ29yZVNlcnZpY2VzLCBr
VVRUeXBlVVJMLCBDRlN0cmluZ1JlZikKLVNPRlRfTElOS19DT05TVEFOVChNb2JpbGVDb3JlU2Vy
dmljZXMsIGtVVFRhZ0NsYXNzTUlNRVR5cGUsIENGU3RyaW5nUmVmKQotCi0jZGVmaW5lIGtVVFR5
cGVUZXh0IGdldGtVVFR5cGVUZXh0KCkKLSNkZWZpbmUga1VUVHlwZVVSTCAgZ2V0a1VUVHlwZVVS
TCgpCi0jZGVmaW5lIGtVVFR5cGVUSUZGIGdldGtVVFR5cGVUSUZGKCkKLSNkZWZpbmUga1VUVGFn
Q2xhc3NNSU1FVHlwZSBnZXRrVVRUYWdDbGFzc01JTUVUeXBlKCkKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1QYXNzUmVmUHRyPENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJvYXJk
QWNjZXNzUG9saWN5IHBvbGljeSwgRHJhZ0RhdGEqLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgcmV0
dXJuIENsaXBib2FyZElPUzo6Y3JlYXRlKERyYWdBbmREcm9wLCBwb2xpY3ksIGZyYW1lKTsKLX0K
LQotQ2xpcGJvYXJkSU9TOjpDbGlwYm9hcmRJT1MoQ2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBl
LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCi0gICAgOiBDbGlw
Ym9hcmQocG9saWN5LCBjbGlwYm9hcmRUeXBlKQotICAgICwgbV9mcmFtZShmcmFtZSkKLXsKLSAg
ICBtX2NoYW5nZUNvdW50ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnBhc3RlYm9hcmRD
aGFuZ2VDb3VudCgpOwotfQotCi1DbGlwYm9hcmRJT1M6On5DbGlwYm9hcmRJT1MoKQotewotfQot
Ci1ib29sIENsaXBib2FyZElPUzo6aGFzRGF0YSgpCi17Ci0gICAgcmV0dXJuIG1fZnJhbWUtPmVk
aXRvcigpLmNsaWVudCgpLT5nZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpICE9IDA7Ci19Ci0KLXN0
YXRpYyBTdHJpbmcgdXRpVHlwZUZyb21Db2NvYVR5cGUoTlNTdHJpbmcqIHR5cGUpCi17Ci0gICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlUeXBlID0gYWRvcHRDRihVVFR5cGVDcmVhdGVQcmVm
ZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0NsYXNzTUlNRVR5cGUsIChDRlN0cmluZ1JlZil0
eXBlLCBOVUxMKSk7Ci0gICAgaWYgKHV0aVR5cGUpIHsKLSAgICAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBtaW1lVHlwZSA9IGFkb3B0Q0YoVVRUeXBlQ29weVByZWZlcnJlZFRhZ1dpdGhDbGFz
cyh1dGlUeXBlLmdldCgpLCBrVVRUYWdDbGFzc01JTUVUeXBlKSk7Ci0gICAgICAgIGlmIChtaW1l
VHlwZSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWltZVR5cGUuZ2V0KCkpOwotICAgIH0K
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8TlNTdHJpbmc+IGNv
Y29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCi17Ci0gICAg
U3RyaW5nIHFUeXBlID0gdHlwZS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgIGlmIChxVHlwZSA9
PSAiVGV4dCIpCi0gICAgICAgIHJldHVybiAoTlNTdHJpbmcqKWtVVFR5cGVUZXh0OwotICAgIGlm
IChxVHlwZSA9PSAiVVJMIikKLSAgICAgICAgcmV0dXJuIChOU1N0cmluZyopa1VUVHlwZVVSTDsK
LQotICAgIC8vIElnbm9yZSBhbnkgdHJhaWxpbmcgY2hhcnNldCAtIEpTIHN0cmluZ3MgYXJlIFVu
aWNvZGUsIHdoaWNoIGVuY2Fwc3VsYXRlcyB0aGUgY2hhcnNldCBpc3N1ZS4KLSAgICBpZiAocVR5
cGUuc3RhcnRzV2l0aChBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSkpCi0gICAgICAgIHJldHVy
biAoTlNTdHJpbmcqKWtVVFR5cGVUZXh0OwotICAgIGlmIChxVHlwZSA9PSAidGV4dC91cmktbGlz
dCIpCi0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBiZWNhdXNlIFVUSSBkb2Vzbid0IHdvcmsgd2l0
aCBDb2NvYSdzIFVSTCB0eXBlLgotICAgICAgICByZXR1cm4gKE5TU3RyaW5nKilrVVRUeXBlVVJM
OwotCi0gICAgLy8gVHJ5IFVUSSBub3cuCi0gICAgTlNTdHJpbmcgKnBiVHlwZSA9IHV0aVR5cGVG
cm9tQ29jb2FUeXBlKHFUeXBlKTsKLSAgICBpZiAocGJUeXBlKQotICAgICAgICByZXR1cm4gcGJU
eXBlOwotCi0gICAgLy8gTm8gbWFwcGluZywganVzdCBwYXNzIHRoZSB3aG9sZSBzdHJpbmcgdGhv
dWdoLgotICAgIHJldHVybiAoTlNTdHJpbmcqKXFUeXBlOwotfQotCi1zdGF0aWMgdm9pZCBhZGRI
VE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0
VHlwZXMsIE5TU3RyaW5nKiBjb2NvYVR5cGUpCi17Ci0gICAgLy8gVVRJIG1heSBub3QgZG8gdGhl
c2UgcmlnaHQsIHNvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHJpZ2h0LCBwcmVkaWN0YWJsZSByZXN1
bHQuCi0gICAgaWYgKFtjb2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyopa1VUVHlw
ZVRleHRdKSB7Ci0gICAgICAgIHJlc3VsdFR5cGVzLmFkZChBU0NJSUxpdGVyYWwoInRleHQvcGxh
aW4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKFtjb2NvYVR5cGUgaXNFcXVh
bFRvU3RyaW5nOihOU1N0cmluZyopa1VUVHlwZVVSTF0pIHsKLSAgICAgICAgcmVzdWx0VHlwZXMu
YWRkKEFTQ0lJTGl0ZXJhbCgidGV4dC91cmktbGlzdCIpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBTdHJpbmcgdXRpVHlwZSA9IHV0aVR5cGVGcm9tQ29jb2FUeXBlKGNvY29hVHlwZSk7
Ci0gICAgaWYgKCF1dGlUeXBlLmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHRUeXBlcy5hZGQo
dXRpVHlwZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gTm8gbWFwcGluZywganVz
dCBwYXNzIHRoZSB3aG9sZSBzdHJpbmcgdGhvdWdoLgotICAgIHJlc3VsdFR5cGVzLmFkZChjb2Nv
YVR5cGUpOwotfQotCi12b2lkIENsaXBib2FyZElPUzo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSkKLXsKLSAgICBpZiAoIWNhbldyaXRlRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBOb3RlIFVJUGFzdGVib2FyZCBlbmZvcmNlcyBjaGFuZ2VDb3VudCBpdHNlbGYgb24gd3Jp
dGluZyAtIGNhbid0IHdyaXRlIGlmIG5vdCB0aGUgb3duZXIuCi0KLSAgICBpZiAoUmV0YWluUHRy
PE5TU3RyaW5nPiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlw
ZSkpIHsKLSAgICAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0g
YWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW3Jl
cHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTowIGZvcktleTpjb2NvYVR5cGUuZ2V0KCldOwot
ICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJk
KHJlcHJlc2VudGF0aW9ucy5nZXQoKSk7Ci0gICAgfQotfQotCi12b2lkIENsaXBib2FyZElPUzo6
Y2xlYXJEYXRhKCkKLXsKLSAgICBpZiAoIWNhbldyaXRlRGF0YSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOwotICAgIG1fZnJhbWUtPmVkaXRv
cigpLmNsaWVudCgpLT53cml0ZURhdGFUb1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zLmdldCgp
KTsKLX0KLQotU3RyaW5nIENsaXBib2FyZElPUzo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUp
IGNvbnN0Ci17Ci0gICAgaWYgKCFjYW5SZWFkRGF0YSgpKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0KLSAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21I
VE1MQ2xpcGJvYXJkVHlwZSh0eXBlKTsKLSAgICBOU1N0cmluZyAqY29jb2FWYWx1ZSA9IG5pbDsK
LQotICAgIC8vIEdyYWIgdGhlIHZhbHVlIG9mZiB0aGUgcGFzdGVib2FyZCBjb3JyZXNwb25kaW5n
IHRvIHRoZSBjb2NvYVR5cGUuCi0gICAgUmV0YWluUHRyPE5TQXJyYXk+IHBhc3RlYm9hcmRJdGVt
ID0gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnJlYWREYXRhRnJvbVBhc3RlYm9hcmQoY29j
b2FUeXBlLmdldCgpLCAwKTsKLQotICAgIGlmIChbcGFzdGVib2FyZEl0ZW0uZ2V0KCkgY291bnRd
ID09IDApCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChbY29jb2FUeXBlLmdl
dCgpIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcqKWtVVFR5cGVVUkxdKSB7Ci0gICAgICAgIGlk
IHZhbHVlID0gW3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgICAg
IGlmICghW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pIHsKLSAgICAgICAgICAg
IEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSk7Ci0gICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgTlNVUkwqIGFic29sdXRlVVJM
ID0gKE5TVVJMKil2YWx1ZTsKLQotICAgICAgICBpZiAoYWJzb2x1dGVVUkwpCi0gICAgICAgICAg
ICBjb2NvYVZhbHVlID0gW2Fic29sdXRlVVJMIGFic29sdXRlU3RyaW5nXTsKLSAgICB9IGVsc2Ug
aWYgKFtjb2NvYVR5cGUuZ2V0KCkgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyopa1VUVHlwZVRl
eHRdKSB7Ci0gICAgICAgIGlkIHZhbHVlID0gW3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9iamVjdEF0
SW5kZXg6MF07Ci0gICAgICAgIGlmICghW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNs
YXNzXV0pIHsKLSAgICAgICAgICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJp
bmcgY2xhc3NdXSk7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjb2NvYVZhbHVlID0gWyhOU1N0cmluZyopdmFsdWUgcHJlY29tcG9zZWRTdHJpbmdX
aXRoQ2Fub25pY2FsTWFwcGluZ107Ci0gICAgfSBlbHNlIGlmIChjb2NvYVR5cGUpIHsKLSAgICAg
ICAgQVNTRVJUKFtwYXN0ZWJvYXJkSXRlbS5nZXQoKSBjb3VudF0gPT0gMSk7Ci0gICAgICAgIGlk
IHZhbHVlID0gW3Bhc3RlYm9hcmRJdGVtLmdldCgpIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgICAg
IGlmICghW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dKTsKLSAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBjb2NvYVZhbHVlID0gW1tb
TlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhICopdmFsdWUgZW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmddIGF1dG9yZWxlYXNlXTsKLSAgICB9Ci0KLSAgICAvLyBFbmZvcmNl
IGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuICBXZSBjaGVjayBhZnRlciByZWFk
aW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCi0gICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5n
ZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUg
ZGF0YS4KLSAgICBpZiAoY29jb2FWYWx1ZSAmJiBtX2NoYW5nZUNvdW50ID09IG1fZnJhbWUtPmVk
aXRvcigpLmNsaWVudCgpLT5wYXN0ZWJvYXJkQ2hhbmdlQ291bnQoKSkKLSAgICAgICAgcmV0dXJu
IGNvY29hVmFsdWU7Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgQ2xpcGJvYXJk
SU9TOjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQotewot
ICAgIGlmICghY2FuV3JpdGVEYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRU
eXBlKHR5cGUpOwotICAgIE5TU3RyaW5nICpjb2NvYURhdGEgPSBkYXRhOwotCi0gICAgUmV0YWlu
UHRyPE5TRGljdGlvbmFyeT4gcmVwcmVzZW50YXRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZURp
Y3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLQotICAgIGlmIChbY29jb2FUeXBlLmdldCgpIGlzRXF1
YWxUb1N0cmluZzooTlNTdHJpbmcqKWtVVFR5cGVVUkxdKSB7Ci0gICAgICAgIFJldGFpblB0cjxO
U1VSTD4gdXJsID0gYWRvcHROUyhbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0cmluZzpjb2NvYURh
dGFdKTsKLSAgICAgICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTp1cmwuZ2V0KCkg
Zm9yS2V5OihOU1N0cmluZyopa1VUVHlwZVVSTF07Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigp
LmNsaWVudCgpLT53cml0ZURhdGFUb1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zLmdldCgpKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGNvY29hVHlwZSkgewotICAg
ICAgICAvLyBFdmVyeXRoaW5nIGVsc2Ugd2Uga25vdyBvZiBnb2VzIG9uIHRoZSBwYm9hcmQgYXMg
dGhlIG9yaWdpbmFsIHN0cmluZwotICAgICAgICAvLyB3ZSByZWNlaXZlZCBhcyBwYXJhbWV0ZXIu
Ci0gICAgICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6Y29jb2FEYXRhIGZvcktl
eTpjb2NvYVR5cGUuZ2V0KCldOwotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+
d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9ucy5nZXQoKSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTGlzdEhhc2hTZXQ8
U3RyaW5nPiBDbGlwYm9hcmRJT1M6OnR5cGVzKCkgY29uc3QKLXsKLSAgICBpZiAoIWNhblJlYWRU
eXBlcygpKQotICAgICAgICByZXR1cm4gTGlzdEhhc2hTZXQ8U3RyaW5nPigpOwotCi0gICAgTlNB
cnJheSogdHlwZXMgPSBQYXN0ZWJvYXJkOjpzdXBwb3J0ZWRQYXN0ZWJvYXJkVHlwZXMoKTsKLQot
ICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gIFdlIGNo
ZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKLSAgICAvLyBzdXJlIGl0
IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQg
YWNjZXNzaW5nIHRoZSBkYXRhLgotICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IG1fZnJhbWUtPmVk
aXRvcigpLmNsaWVudCgpLT5wYXN0ZWJvYXJkQ2hhbmdlQ291bnQoKSkKLSAgICAgICAgcmV0dXJu
IExpc3RIYXNoU2V0PFN0cmluZz4oKTsKLQotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0
OwotICAgIE5TVUludGVnZXIgY291bnQgPSBbdHlwZXMgY291bnRdOwotICAgIGZvciAoTlNVSW50
ZWdlciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgTlNTdHJpbmcqIHBiVHlwZSA9
IFt0eXBlcyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNG
b3JDb2NvYVR5cGUocmVzdWx0LCBwYlR5cGUpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLVBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZElPUzo6ZmlsZXMoKSBjb25zdAot
ewotICAgIHJldHVybiAwOwotfQotCi12b2lkIENsaXBib2FyZElPUzo6d3JpdGVSYW5nZShSYW5n
ZSogcmFuZ2UsIEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQocmFuZ2UpOwotICAgIEFTU0VS
VChmcmFtZSk7Ci0gICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVTZWxl
Y3Rpb24ocmFuZ2UsIGZyYW1lLT5lZGl0b3IoKS5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSAm
JiBmcmFtZS0+c2VsZWN0aW9uKCktPmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5LCBm
cmFtZSk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkSU9TOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJp
bmcmIHRleHQpCi17Ci0gICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQ
bGFpblRleHQodGV4dCwgbV9mcmFtZSk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkSU9TOjp3cml0ZVVS
TChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKQotewotfQotCi1EcmFnSW1hZ2VS
ZWYgQ2xpcGJvYXJkSU9TOjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmKSBjb25zdAotewotICAg
IHJldHVybiAwOwotfQotCi12b2lkIENsaXBib2FyZElPUzo6c2V0RHJhZ0ltYWdlKENhY2hlZElt
YWdlKiwgY29uc3QgSW50UG9pbnQmKQotewotfQotCi12b2lkIENsaXBib2FyZElPUzo6c2V0RHJh
Z0ltYWdlRWxlbWVudChOb2RlICosIGNvbnN0IEludFBvaW50JikKLXsKLX0KLQotfQorLy8gRW1w
dHkuIFNob3VsZCBiZSBkZWxldGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFz
dGVib2FyZElPUy5tbQppbmRleCA3YjlmYzFhZjI3MWVhMjUwMGQ1MWFmZWJiNGViOTI4MWFjNmMy
ZDJmLi5mYWFjMjUxNGRlYWM2YTcyMDQ1MWY2ODAzNDAzZTlmOTJiNDQxYTUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTA3LDEwICsxMDcsNyBAQCBQYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpnZW5lcmFs
UGFzdGVib2FyZCgpCiB9CiAKIFBhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoKQotewotfQotCi12b2lk
IFBhc3RlYm9hcmQ6OmNsZWFyKCkKKyAgICA6IG1fZnJhbWUoMCkKIHsKIH0KIApAQCAtNDQ4LDQg
KzQ0NSwxODUgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1
bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlAKICAgICByZXR1cm4gMDsKIH0KIAor
dm9pZCBQYXN0ZWJvYXJkOjpzZXRGcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgbV9mcmFtZSA9
IGZyYW1lOworICAgIG1fY2hhbmdlQ291bnQgPSBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+
cGFzdGVib2FyZENoYW5nZUNvdW50KCk7Cit9CisKK2Jvb2wgUGFzdGVib2FyZDo6aGFzRGF0YSgp
Cit7CisgICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5nZXRQYXN0ZWJvYXJk
SXRlbXNDb3VudCgpICE9IDA7Cit9CisKK3N0YXRpYyBTdHJpbmcgdXRpVHlwZUZyb21Db2NvYVR5
cGUoTlNTdHJpbmcqIHR5cGUpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlUeXBl
ID0gYWRvcHRDRihVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0Ns
YXNzTUlNRVR5cGUsIChDRlN0cmluZ1JlZil0eXBlLCBOVUxMKSk7CisgICAgaWYgKHV0aVR5cGUp
IHsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBtaW1lVHlwZSA9IGFkb3B0Q0YoVVRU
eXBlQ29weVByZWZlcnJlZFRhZ1dpdGhDbGFzcyh1dGlUeXBlLmdldCgpLCBrVVRUYWdDbGFzc01J
TUVUeXBlKSk7CisgICAgICAgIGlmIChtaW1lVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcobWltZVR5cGUuZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3N0
YXRpYyBSZXRhaW5QdHI8TlNTdHJpbmc+IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZShj
b25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgU3RyaW5nIHFUeXBlID0gdHlwZS5zdHJpcFdoaXRl
U3BhY2UoKTsKKworICAgIGlmIChxVHlwZSA9PSAiVGV4dCIpCisgICAgICAgIHJldHVybiAoTlNT
dHJpbmcqKWtVVFR5cGVUZXh0OworICAgIGlmIChxVHlwZSA9PSAiVVJMIikKKyAgICAgICAgcmV0
dXJuIChOU1N0cmluZyopa1VUVHlwZVVSTDsKKworICAgIC8vIElnbm9yZSBhbnkgdHJhaWxpbmcg
Y2hhcnNldCAtIEpTIHN0cmluZ3MgYXJlIFVuaWNvZGUsIHdoaWNoIGVuY2Fwc3VsYXRlcyB0aGUg
Y2hhcnNldCBpc3N1ZS4KKyAgICBpZiAocVR5cGUuc3RhcnRzV2l0aChBU0NJSUxpdGVyYWwoInRl
eHQvcGxhaW4iKSkpCisgICAgICAgIHJldHVybiAoTlNTdHJpbmcqKWtVVFR5cGVUZXh0OworICAg
IGlmIChxVHlwZSA9PSAidGV4dC91cmktbGlzdCIpCisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBi
ZWNhdXNlIFVUSSBkb2Vzbid0IHdvcmsgd2l0aCBDb2NvYSdzIFVSTCB0eXBlLgorICAgICAgICBy
ZXR1cm4gKE5TU3RyaW5nKilrVVRUeXBlVVJMOworCisgICAgLy8gVHJ5IFVUSSBub3cuCisgICAg
TlNTdHJpbmcgKnBiVHlwZSA9IHV0aVR5cGVGcm9tQ29jb2FUeXBlKHFUeXBlKTsKKyAgICBpZiAo
cGJUeXBlKQorICAgICAgICByZXR1cm4gcGJUeXBlOworCisgICAgLy8gTm8gbWFwcGluZywganVz
dCBwYXNzIHRoZSB3aG9sZSBzdHJpbmcgdGhvdWdoLgorICAgIHJldHVybiAoTlNTdHJpbmcqKXFU
eXBlOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sK
KyAgICAvLyBTaW5jZSBVSVBhc3RlYm9hcmQgZW5mb3JjZXMgY2hhbmdlQ291bnQgaXRzZWxmIG9u
IHdyaXRpbmcsIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgaXQgaGVyZS4KKworICAgIFJldGFpblB0
cjxOU1N0cmluZz4gY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5
cGUpOworICAgIGlmICghY29jb2FUeXBlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhN
RTogU2hvdWxkIHdyaXRlIHRoaXMgd2l0aCBAe30gc3ludGF4LgorICAgIFJldGFpblB0cjxOU0Rp
Y3Rpb25hcnk+IHJlcHJlc2VudGF0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5
IGFsbG9jXSBpbml0XSk7CisgICAgW3JlcHJlc2VudGF0aW9ucy5nZXQoKSBzZXRWYWx1ZTowIGZv
cktleTpjb2NvYVR5cGUuZ2V0KCldOworICAgIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT53
cml0ZURhdGFUb1Bhc3RlYm9hcmQocmVwcmVzZW50YXRpb25zLmdldCgpKTsKK30KKwordm9pZCBQ
YXN0ZWJvYXJkOjpjbGVhcigpCit7CisgICAgbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPndy
aXRlRGF0YVRvUGFzdGVib2FyZChAe30pOworfQorCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0
cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPE5TU3RyaW5n
PiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZSk7CisgICAg
TlNTdHJpbmcgKmNvY29hVmFsdWUgPSBuaWw7CisKKyAgICAvLyBHcmFiIHRoZSB2YWx1ZSBvZmYg
dGhlIHBhc3RlYm9hcmQgY29ycmVzcG9uZGluZyB0byB0aGUgY29jb2FUeXBlLgorICAgIFJldGFp
blB0cjxOU0FycmF5PiBwYXN0ZWJvYXJkSXRlbSA9IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgp
LT5yZWFkRGF0YUZyb21QYXN0ZWJvYXJkKGNvY29hVHlwZS5nZXQoKSwgMCk7CisKKyAgICBpZiAo
W3Bhc3RlYm9hcmRJdGVtLmdldCgpIGNvdW50XSA9PSAwKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisKKyAgICBpZiAoW2NvY29hVHlwZS5nZXQoKSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5n
KilrVVRUeXBlVVJMXSkgeworICAgICAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQo
KSBvYmplY3RBdEluZGV4OjBdOworICAgICAgICBpZiAoIVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltO
U1VSTCBjbGFzc11dKSB7CisgICAgICAgICAgICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6
W05TVVJMIGNsYXNzXV0pOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9
CisgICAgICAgIE5TVVJMKiBhYnNvbHV0ZVVSTCA9IChOU1VSTCopdmFsdWU7CisKKyAgICAgICAg
aWYgKGFic29sdXRlVVJMKQorICAgICAgICAgICAgY29jb2FWYWx1ZSA9IFthYnNvbHV0ZVVSTCBh
YnNvbHV0ZVN0cmluZ107CisgICAgfSBlbHNlIGlmIChbY29jb2FUeXBlLmdldCgpIGlzRXF1YWxU
b1N0cmluZzooTlNTdHJpbmcqKWtVVFR5cGVUZXh0XSkgeworICAgICAgICBpZCB2YWx1ZSA9IFtw
YXN0ZWJvYXJkSXRlbS5nZXQoKSBvYmplY3RBdEluZGV4OjBdOworICAgICAgICBpZiAoIVt2YWx1
ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7CisgICAgICAgICAgICBBU1NFUlQo
W3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOworICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgY29jb2FWYWx1ZSA9IFsoTlNTdHJp
bmcqKXZhbHVlIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOworICAgIH0g
ZWxzZSBpZiAoY29jb2FUeXBlKSB7CisgICAgICAgIEFTU0VSVChbcGFzdGVib2FyZEl0ZW0uZ2V0
KCkgY291bnRdID09IDEpOworICAgICAgICBpZCB2YWx1ZSA9IFtwYXN0ZWJvYXJkSXRlbS5nZXQo
KSBvYmplY3RBdEluZGV4OjBdOworICAgICAgICBpZiAoIVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltO
U0RhdGEgY2xhc3NdXSkgeworICAgICAgICAgICAgQVNTRVJUKFt2YWx1ZSBpc0tpbmRPZkNsYXNz
OltOU0RhdGEgY2xhc3NdXSk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAg
IH0KKyAgICAgICAgY29jb2FWYWx1ZSA9IFtbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6
KE5TRGF0YSAqKXZhbHVlIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBhdXRvcmVsZWFz
ZV07CisgICAgfQorCisgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNl
Y3VyaXR5LiBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCisg
ICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFu
Z2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KKyAgICBpZiAoY29jb2FWYWx1ZSAmJiBt
X2NoYW5nZUNvdW50ID09IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5wYXN0ZWJvYXJkQ2hh
bmdlQ291bnQoKSkKKyAgICAgICAgcmV0dXJuIGNvY29hVmFsdWU7CisKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlw
ZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywgTlNTdHJpbmcqIGNvY29hVHlwZSkK
K3sKKyAgICAvLyBVVEkgbWF5IG5vdCBkbyB0aGVzZSByaWdodCwgc28gbWFrZSBzdXJlIHdlIGdl
dCB0aGUgcmlnaHQsIHByZWRpY3RhYmxlIHJlc3VsdC4KKyAgICBpZiAoW2NvY29hVHlwZSBpc0Vx
dWFsVG9TdHJpbmc6KE5TU3RyaW5nKilrVVRUeXBlVGV4dF0pIHsKKyAgICAgICAgcmVzdWx0VHlw
ZXMuYWRkKEFTQ0lJTGl0ZXJhbCgidGV4dC9wbGFpbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoW2NvY29hVHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nKilrVVRUeXBl
VVJMXSkgeworICAgICAgICByZXN1bHRUeXBlcy5hZGQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3VyaS1s
aXN0IikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFN0cmluZyB1dGlUeXBlID0gdXRp
VHlwZUZyb21Db2NvYVR5cGUoY29jb2FUeXBlKTsKKyAgICBpZiAoIXV0aVR5cGUuaXNFbXB0eSgp
KSB7CisgICAgICAgIHJlc3VsdFR5cGVzLmFkZCh1dGlUeXBlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAvLyBObyBtYXBwaW5nLCBqdXN0IHBhc3MgdGhlIHdob2xlIHN0cmluZyB0aG91
Z2guCisgICAgcmVzdWx0VHlwZXMuYWRkKGNvY29hVHlwZSk7Cit9CisKK2Jvb2wgUGFzdGVib2Fy
ZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7
CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENs
aXBib2FyZFR5cGUodHlwZSk7CisgICAgTlNTdHJpbmcgKmNvY29hRGF0YSA9IGRhdGE7CisKKyAg
ICBpZiAoW2NvY29hVHlwZS5nZXQoKSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nKilrVVRUeXBl
VVJMXSkgeworICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgICAgICBS
ZXRhaW5QdHI8TlNVUkw+IHVybCA9IGFkb3B0TlMoW1tOU1VSTCBhbGxvY10gaW5pdFdpdGhTdHJp
bmc6Y29jb2FEYXRhXSk7CisgICAgICAgIFtyZXByZXNlbnRhdGlvbnMuZ2V0KCkgc2V0VmFsdWU6
dXJsLmdldCgpIGZvcktleTooTlNTdHJpbmcqKWtVVFR5cGVVUkxdOworICAgICAgICBtX2ZyYW1l
LT5lZGl0b3IoKS5jbGllbnQoKS0+d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKHJlcHJlc2VudGF0aW9u
cy5nZXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChjb2NvYVR5
cGUpIHsKKyAgICAgICAgLy8gRXZlcnl0aGluZyBlbHNlIHdlIGtub3cgb2YgZ29lcyBvbiB0aGUg
cGJvYXJkIGFzIHRoZSBvcmlnaW5hbCBzdHJpbmcgd2UgcmVjZWl2ZWQgYXMgcGFyYW1ldGVyLgor
ICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiByZXByZXNlbnRhdGlvbnMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0pOworICAgICAgICBbcmVwcmVzZW50
YXRpb25zLmdldCgpIHNldFZhbHVlOmNvY29hRGF0YSBmb3JLZXk6Y29jb2FUeXBlLmdldCgpXTsK
KyAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPndyaXRlRGF0YVRvUGFzdGVib2Fy
ZChyZXByZXNlbnRhdGlvbnMuZ2V0KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0xpc3RIYXNoU2V0PFN0cmluZz4gUGFzdGVib2FyZDo6
dHlwZXMoKSBjb25zdAoreworICAgIE5TQXJyYXkqIHR5cGVzID0gc3VwcG9ydGVkUGFzdGVib2Fy
ZFR5cGVzKCk7CisKKyAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2Vj
dXJpdHkuIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKKyAg
ICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5n
ZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgorICAgIGlmIChtX2NoYW5nZUNvdW50ICE9
IG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5wYXN0ZWJvYXJkQ2hhbmdlQ291bnQoKSkKKyAg
ICAgICAgcmV0dXJuIExpc3RIYXNoU2V0PFN0cmluZz4oKTsKKworICAgIExpc3RIYXNoU2V0PFN0
cmluZz4gcmVzdWx0OworICAgIE5TVUludGVnZXIgY291bnQgPSBbdHlwZXMgY291bnRdOworICAg
IGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgTlNTdHJp
bmcqIHBiVHlwZSA9IFt0eXBlcyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBhZGRIVE1MQ2xp
cGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUocmVzdWx0LCBwYlR5cGUpOworICAgIH0KKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFt
ZXMoKQoreworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCiB9Cg==
</data>
<flag name="review"
          id="230565"
          type_id="1"
          status="+"
          setter="dbates"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208847</attachid>
            <date>2013-08-15 13:46:47 -0700</date>
            <delta_ts>2013-08-15 13:46:47 -0700</delta_ts>
            <desc>iOS-specific changes</desc>
            <filename>iOSSpecificChanges.diff</filename>
            <type>text/plain</type>
            <size>3972</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMmZkMzY0Yi4uYjU3YWZmNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTExMzIsNiArMTEzMiw3IEBAIF9fWk43V2ViQ29yZThtYWtlUkdCQUVpaWlpCiBf
X1pON1dlYkNvcmU4b3BlbkZpbGVFUktOM1dURjZTdHJpbmdFTlNfMTJGaWxlT3Blbk1vZGVFCiBf
X1pON1dlYkNvcmU4dG9TdHJpbmdFUktOM1dURjZWZWN0b3JJTlNfMTFQcm94eVNlcnZlckVMbTBF
TlMwXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmU4dG9VSW50NjRFUE4zSlNDOUV4
ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFTlNfMzBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb25F
CitfX1pON1dlYkNvcmU5Q2xpcGJvYXJkRDFFdgogX19aTjdXZWJDb3JlOURPTVdpbmRvdzMwZGlz
cGF0Y2hBbGxQZW5kaW5nVW5sb2FkRXZlbnRzRXYKIF9fWk43V2ViQ29yZTlET01XaW5kb3czNmRp
c3BhdGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50c0V2CiBfX1pON1dlYkNvcmU5RmxvYXRS
ZWN0QzFFUks2Q0dSZWN0CkBAIC0xOTU3LDcgKzE5NTgsNiBAQCBfX1pON1dlYkNvcmU2V2lkZ2V0
QzJFUDZOU1ZpZXcKIF9fWk43V2ViQ29yZTduc0NvbG9yRVJLTlNfNUNvbG9yRQogX19aTjdXZWJD
b3JlOEludFBvaW50QzFFUks4X05TUG9pbnQKIF9fWk43V2ViQ29yZThJbnRQb2ludEMxRVJLN0NH
UG9pbnQKLV9fWk43V2ViQ29yZTlDbGlwYm9hcmREMUV2CiBfX1pON1dlYkNvcmU5RmxvYXRSZWN0
QzFFUks3X05TUmVjdAogX19aTks3V2ViQ29yZTEwRmxvYXRQb2ludGN2OF9OU1BvaW50RXYKIF9f
Wk5LN1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMTh2aXNpYmxlQ29udGVudFJlY3RFTlMwXzM2Vmlz
aWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCmluZGV4IGFmOWRjZDEuLjc1ZTY4NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
QEAgLTkzNSw3ICs5MzUsNyBAQCBib29sIEVkaXRvcjo6ZGlzcGF0Y2hDUFBFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgQ2xpcGJvYXJkQWNjZXNzUG9saQogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShJT1MpCi0gICAgY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCktPnNldEZyYW1lKG1f
ZnJhbWUpOworICAgIGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLnNldEZyYW1lKG1fZnJhbWUpOwog
I2VuZGlmCiAKICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gQ2xpcGJvYXJkRXZlbnQ6OmNyZWF0
ZShldmVudFR5cGUsIHRydWUsIHRydWUsIGNsaXBib2FyZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KaW5kZXggYjgwNDBkOC4uNzViMzJmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlICJFZGl0
b3IuaCIKIAogI2luY2x1ZGUgIkNsaXBib2FyZC5oIgotI2luY2x1ZGUgIkNsaXBib2FyZElPUy5o
IgogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNT
U1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJGb250LmgiCkBAIC0yOCwxMSAr
MjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLVBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xp
cGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQotewotICAgIHJldHVybiBD
bGlwYm9hcmRJT1M6OmNyZWF0ZShDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSwgcG9saWN5LCBmcmFt
ZSk7Ci19ICAgIAotCiB2b2lkIEVkaXRvcjo6c2hvd0ZvbnRQYW5lbCgpCiB7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCmluZGV4IGZhYWMyNTEuLjYw
MmJhMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJk
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1t
CkBAIC0xMDIsNyArMTAyLDcgQEAgTlNTdHJpbmcgKldlYkFyY2hpdmVQYm9hcmRUeXBlID0gQCJB
cHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJkIHR5cGUiOwogCiBQYXN0ZWJvYXJkKiBQYXN0ZWJv
YXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpCiB7Ci0gICAgc3RhdGljIFBhc3RlYm9hcmQqIHBhc3Rl
Ym9hcmQgPSBuZXcgUGFzdGVib2FyZCgpOworICAgIHN0YXRpYyBQYXN0ZWJvYXJkKiBwYXN0ZWJv
YXJkID0gbmV3IFBhc3RlYm9hcmQ7CiAgICAgcmV0dXJuIHBhc3RlYm9hcmQ7CiB9CiAKQEAgLTEx
MCw2ICsxMTAsMTYgQEAgUGFzdGVib2FyZDo6UGFzdGVib2FyZCgpCiAgICAgOiBtX2ZyYW1lKDAp
CiB7CiB9CisgICAgCitQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZUZv
ckNvcHlBbmRQYXN0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYXN0ZWJvYXJkKTsK
K30KKworUGFzc093blB0cjxQYXN0ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVQcml2YXRlKCkK
K3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhc3RlYm9hcmQpOworfQogCiB2b2lkIFBhc3Rl
Ym9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIC8qY2FuU21h
cnRDb3B5T3JEZWxldGUqLywgRnJhbWUgKmZyYW1lLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRl
eHRGb3JDbGlwYm9hcmQgc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKQog
ewpAQCAtMjA0LDYgKzIxNCwxMCBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlQ2xpcGJvYXJkKENs
aXBib2FyZCopCiB7CiB9CiAKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVQYXN0ZWJvYXJkKGNvbnN0
IFBhc3RlYm9hcmQmKQoreworfQorCiBib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSgp
CiB7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTExLDcgKzUyNSw3IEBAIHZvaWQgUGFzdGVib2Fy
ZDo6Y2xlYXIoKQogICAgIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT53cml0ZURhdGFUb1Bh
c3RlYm9hcmQoQHt9KTsKIH0KIAotU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0eXBlKSBjb25zdAorU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0eXBlKQogewogICAgIFJldGFpblB0cjxOU1N0cmluZz4gY29jb2FUeXBlID0gY29j
b2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpOwogICAgIE5TU3RyaW5nICpjb2NvYVZh
bHVlID0gbmlsOwpAQCAtNjAyLDcgKzYxNiw3IEBAIGJvb2wgUGFzdGVib2FyZDo6d3JpdGVTdHJp
bmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1MaXN0SGFzaFNldDxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzKCkgY29uc3QK
K0xpc3RIYXNoU2V0PFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXMoKQogewogICAgIE5TQXJyYXkq
IHR5cGVzID0gc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzKCk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>