<?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>136897</bug_id>
          
          <creation_ts>2014-09-17 14:26:59 -0700</creation_ts>
          <short_desc>[GTK] Add WaylandCompositor</short_desc>
          <delta_ts>2016-08-17 00:31:37 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>115803</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>joone</cc>
    
    <cc>mitz</cc>
    
    <cc>mrobinson</cc>
    
    <cc>sam</cc>
    
    <cc>yoon</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1035769</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-17 14:26:59 -0700</bug_when>
    <thetext>[GTK] Add WaylandCompositor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035771</commentid>
    <comment_count>1</comment_count>
      <attachid>238266</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-17 14:42:20 -0700</bug_when>
    <thetext>Created attachment 238266
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035772</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-17 14:43:02 -0700</bug_when>
    <thetext>Attachment 238266 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/wayland/WaylandCompositorEGL.cpp:86:  int32_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/wayland/WaylandCompositorEGL.cpp:86:  int32_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/wayland/WaylandCompositorEGL.cpp:174:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/wayland/WaylandCompositor.cpp:246:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/platform/graphics/wayland/WaylandCompositorEGL.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/wayland/WaylandCompositor.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/wayland/WaylandCompositor.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/wayland/WaylandCompositor.h:108:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 8 in 6 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>1056300</commentid>
    <comment_count>3</comment_count>
      <attachid>238266</attachid>
    <who name="Pekka Paalanen">ppaalanen</who>
    <bug_when>2014-12-17 02:32:45 -0800</bug_when>
    <thetext>Comment on attachment 238266
Patch

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

Kov asked me to take a look.

comments on the design... well, I can read through that, but not sure about the design, since your protocol extension specifications are not there.

Nothing I can complain about the design, really, from what I can see here.

&gt; Source/WebCore/platform/graphics/wayland/WaylandCompositor.cpp:301
&gt; +    if (wl_display_add_socket(m_display.childDisplay, &quot;webkitgtk-wayland-compositor-socket&quot;)) {

shouldn&apos;t the wl_display_add_socket() be somehow browser-instance specific?
do you even need a socket to begin with?

&gt; Source/WebCore/platform/graphics/wayland/WaylandCompositorEGL.cpp:164
&gt; +        surface-&gt;buffer = nullptr;

assumes there cannot be a commit without attach

&gt; Source/WebCore/platform/graphics/wayland/WaylandCompositorEGL.cpp:176
&gt; +        wl_callback_send_done(nc-&gt;resource, 0);
&gt; +        wl_resource_destroy(nc-&gt;resource);

sending frame callbacks from the commitSurface seems too early, you haven&apos;t drawn yet. You are hoping that the clients throttle by some other means.

&gt; Source/WebCore/platform/graphics/wayland/WaylandCompositorEGL.cpp:214
&gt; +        EGL_STENCIL_SIZE, 8,

what is the stencil buffer needed for?

&gt; Source/WebCore/platform/graphics/wayland/WaylandCompositorEGL.cpp:251
&gt; +    if (eglChooseConfig(m_display.eglDisplay, configAttributes, &amp;m_eglConfig, 1, &amp;numberOfConfigs) == EGL_FALSE
&gt; +        || numberOfConfigs != 1)

The eglChooseConfig call seems naive, but that&apos;s the majority of apps anyway.

&gt; Source/WebCore/platform/graphics/wayland/WaylandCompositorEGL.cpp:258
&gt; +    if (eglMakeCurrent(m_display.eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, m_eglContext) == EGL_FALSE)

seems to be relying on the surfaceless extension</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220809</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-17 00:31:37 -0700</bug_when>
    <thetext>Let&apos;s track this in bug #115803 instead.

*** This bug has been marked as a duplicate of bug 115803 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238266</attachid>
            <date>2014-09-17 14:42:20 -0700</date>
            <delta_ts>2016-01-14 14:08:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136897-20140917144217.patch</filename>
            <type>text/plain</type>
            <size>39234</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzcwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDE0LTA5LTE3ICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgV2F5bGFu
ZENvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjg5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBXYXlsYW5kQ29tcG9zaXRvciBhbmQgV2F5bGFuZENvbXBvc2l0b3JFR0wgY2xhc3Nl
cy4gVGhlc2UgaW1wbGVtZW50IHRoZQorICAgICAgICBuZXN0ZWQgV2F5bGFuZCBjb21wb3NpdG9y
IHRoYXQncyB0byBiZSB1c2VkIGJ5IHRoZSBVSVByb2Nlc3MgYXMgYSByZWxheSBiZXR3ZWVuCisg
ICAgICAgIHRoZSBXZWJQcm9jZXNzIGFuZCB0aGUgcGFyZW50IFdheWxhbmQgY29tcG9zaXRvci4K
KworICAgICAgICBUaGUgV2F5bGFuZENvbXBvc2l0b3IgY2xhc3MgcHJvdmlkZXMgdGhlIGJhc2lj
IHN0cnVjdHVyZSBmb3IgdGhlIG5lc3RlZCBjb21wb3NpdG9yLgorICAgICAgICBJdCBzZXRzIHVw
IHRoZSBnbG9iYWxzIGZvciBjb21wb3NpdG9yIGFuZCB0aGUgV2ViS2l0R1RLKy1zcGVjaWZpYyBw
cm90b2NvbCBleHRlbnNpb24KKyAgICAgICAgYW5kIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBkZXJp
dmVkIGNsYXNzIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZSBFR0wgcGxhdGZvcm0gYW5kCisgICAg
ICAgIHRoYXQgdGhlIGJhc2ljIFdheWxhbmQgRUdMIGV4dGVuc2lvbnMgYXJlIGF2YWlsYWJsZS4g
VGhpcyBjbGFzcyBhbHNvIG1hbmFnZXMgdGhlCisgICAgICAgIHN1cmZhY2UtcmVzb3VyY2UtdG8t
R3RrV2lkZ2V0IG1hcHBpbmcuCisKKyAgICAgICAgVGhlIFdheWxhbmRDb21wb3NpdG9yRUdMIGNs
YXNzIGlzIHRoZSBiYXNpYyBleHRlbnNpb24gb2YgV2F5bGFuZENvbXBvc2l0b3IgYW5kCisgICAg
ICAgIGNvbnRyb2xzIHByb3Blcmx5IHJlbmRlcmluZyB0aGUgY29tbWl0dGVkIGJ1ZmZlcnMgZm9y
IHRoZSBjb3JyZWN0IHN1cmZhY2UuIEl0IHVzZXMKKyAgICAgICAgYSBmZXcgb2hlciBFR0wgZXh0
ZW5zaW9ucyBhbmQgQ2Fpcm8uIFRoZSBjbGFzcyBvdmVycmlkZXMgbWV0aG9kcyBmcm9tIGl0cyBi
YXNlIGNsYXNzCisgICAgICAgIGFuZCB0aGVuIGhhbmRsZXMgdGhlIGJ1ZmZlcnMgYXR0YWNoZWQg
dG8gYSBzcGVjaWZpYyBzdXJmYWNlIGFuZCBjb21taXRzIG9mIHRoYXQKKyAgICAgICAgc3BlY2lm
aWMgc3VyZmFjZS4gVGhlIGF0dGFjaGVkIGJ1ZmZlcnMgc2VydmUgYXMgYSBiYXNlIGZvciBFR0xJ
bWFnZXMgdGhhdCBhcmUgdGhlbgorICAgICAgICB0aWVkIHRvIGEgc3VyZmFjZS1zcGVjaWZpYyBH
TFRleHR1cmUuIFRoZSBsYXR0ZXIgaXMgdXNlZCB0byBjcmVhdGUgR0wtYmFja2VkIENhaXJvCisg
ICAgICAgIHN1cmZhY2VzIHdoaWNoIHNlcnZlIGFzIHRoZSBzb3VyY2Ugc3VyZmFjZXMgd2hlbiBy
ZW5kZXJpbmcgaW50byB0aGUgdGFyZ2V0IEd0a1dpZGdldC4KKworICAgICAgICAqIFBsYXRmb3Jt
R1RLLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQvV2F5bGFuZENv
bXBvc2l0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5lc3RlZEJ1ZmZlcjo6ZnJv
bVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5lc3RlZEJ1ZmZlcjo6cmVmZXJlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5lc3RlZEJ1ZmZlcjo6ZGVzdHJveUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpOZXN0ZWRCdWZmZXI6OmJ1ZmZlckRlc3Ryb3llZENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5lc3RlZFN1cmZhY2U6Ok5lc3RlZFN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6TmVzdGVkU3VyZmFjZTo6fk5lc3RlZFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
TmVzdGVkU3VyZmFjZTo6c2V0V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5lc3RlZFN1cmZh
Y2U6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpOZXN0ZWRTdXJmYWNlOjpidWZm
ZXJEZXN0cm95ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpkZXN0cm95Q2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNoQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
ZGFtYWdlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpjb21taXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpzZXRCdWZm
ZXJUcmFuc2Zvcm1DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpzZXRCdWZmZXJTY2FsZUNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVN1cmZhY2VDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVSZWdpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRTdXJmYWNlRm9yV2lkZ2V0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6V2F5bGFuZENv
bXBvc2l0b3I6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldheWxhbmRDb21wb3NpdG9y
OjpXYXlsYW5kQ29tcG9zaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpXYXlsYW5kQ29tcG9zaXRv
cjo6fldheWxhbmRDb21wb3NpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmJpbmRDb21wb3NpdG9y
R2xvYmFsKToKKyAgICAgICAgKFdlYkNvcmU6OmJpbmRXZWJLaXRHVEtHbG9iYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6V2F5bGFuZENvbXBvc2l0b3I6OmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2F5bGFuZENvbXBvc2l0b3I6OmFkZFdpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpX
YXlsYW5kQ29tcG9zaXRvcjo6cmVtb3ZlV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldheWxh
bmRDb21wb3NpdG9yOjp3aWRnZXRJRCk6CisgICAgICAgIChXZWJDb3JlOjpXYXlsYW5kQ29tcG9z
aXRvcjo6c2V0U3VyZmFjZUZvcldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpkZXN0cm95TmVz
dGVkU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpXYXlsYW5kQ29tcG9zaXRvcjo6Y3JlYXRl
U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9XYXlsYW5kQ29t
cG9zaXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5lc3RlZEJ1ZmZlcjo6TmVzdGVk
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5lc3RlZEZyYW1lQ2FsbGJhY2s6Ok5lc3RlZEZy
YW1lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6V2F5bGFuZENvbXBvc2l0b3I6OlJlbmRl
cmluZ0NvbnRleHQ6OlJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2F5bGFu
ZENvbXBvc2l0b3I6OmVnbERpc3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dh
eWxhbmQvV2F5bGFuZENvbXBvc2l0b3JFR0wuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok5lc3RlZFN1cmZhY2VFR0w6Ok5lc3RlZFN1cmZhY2VFR0wpOgorICAgICAgICAoV2ViQ29yZTo6
TmVzdGVkU3VyZmFjZUVHTDo6fk5lc3RlZFN1cmZhY2VFR0wpOgorICAgICAgICAoV2ViQ29yZTo6
V2F5bGFuZENvbXBvc2l0b3JFR0w6OldheWxhbmRDb21wb3NpdG9yRUdMKToKKyAgICAgICAgKFdl
YkNvcmU6OldheWxhbmRDb21wb3NpdG9yRUdMOjphdHRhY2hTdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OmRlc3Ryb3lOZXN0ZWRGcmFtZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Oldh
eWxhbmRDb21wb3NpdG9yRUdMOjpyZXF1ZXN0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6d2xf
Y2xpZW50OjppZik6CisgICAgICAgIChXZWJDb3JlOjp3bF9jbGllbnQ6OndsX2xpc3RfZm9yX2Vh
Y2hfc2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpXYXlsYW5kQ29tcG9zaXRvckVHTDo6cmVuZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldheWxhbmRDb21wb3NpdG9yRUdMOjppbml0aWFsaXplRUdM
KToKKyAgICAgICAgKFdlYkNvcmU6OldheWxhbmRDb21wb3NpdG9yRUdMOjpjcmVhdGVOZXN0ZWRT
dXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kL1dheWxhbmRDb21w
b3NpdG9yRUdMLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2F5bGFuZENvbXBvc2l0b3JF
R0w6OlJlbmRlcmluZ0NvbnRleHQ6OlJlbmRlcmluZ0NvbnRleHQpOgorCiAyMDE0LTA5LTE3ICBS
b2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgU3BlY3VsYXRpdmUg
Zml4IGZvciBhIGZhc3RcZG9tXGh0bWwtY29sbGVjdGlvbnMtbmFtZWQtZ2V0dGVyIGZhaWxpbmcg
b25seSBpbiBEZWJ1ZyBidWlsZHMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQkocmV2
aXNpb24gMTczNjk4KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJKHdvcmtp
bmcgY29weSkKQEAgLTQzMSw2ICs0MzEsOCBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAKIGlmIChF
TkFCTEVfV0FZTEFORF9UQVJHRVQpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZVBsYXRmb3JtR1RL
X1NPVVJDRVMKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9XYXlsYW5kQ29tcG9z
aXRvci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9XYXlsYW5kQ29tcG9z
aXRvckVHTC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9XYXlsYW5kRGlz
cGxheS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZC9XYXlsYW5kRXZlbnRT
b3VyY2UuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQvV2F5bGFuZFN1cmZh
Y2UuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kL1dh
eWxhbmRDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93YXlsYW5kL1dheWxhbmRDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQvV2F5bGFuZENvbXBvc2l0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldheWxhbmRDb21wb3NpdG9yLmgiCisKKyNpZiBQTEFURk9STShXQVlMQU5EKQorCisjaW5j
bHVkZSAiV2F5bGFuZENvbXBvc2l0b3JFR0wuaCIKKyNpbmNsdWRlICJXYXlsYW5kRXZlbnRTb3Vy
Y2UuaCIKKyNpbmNsdWRlICJXZWJLaXRHdGtXYXlsYW5kU2VydmVyUHJvdG9jb2wuaCIKKyNpbmNs
dWRlIDxnZGsvZ2Rrd2F5bGFuZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFdheWxh
bmQgRUdMIGZ1bmN0aW9ucworI2lmICFkZWZpbmVkKFBGTkVHTEJJTkRXQVlMQU5ERElTUExBWVdM
KQordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMQklORFdBWUxBTkRESVNQ
TEFZV0wpKEVHTERpc3BsYXksIHN0cnVjdCB3bF9kaXNwbGF5Kik7CisjZW5kaWYKKworI2lmICFk
ZWZpbmVkKFBGTkVHTFVOQklORFdBWUxBTkRESVNQTEFZV0wpCit0eXBlZGVmIEVHTEJvb2xlYW4g
KEVHTEFQSUVOVFJZUCBQRk5FR0xVTkJJTkRXQVlMQU5ERElTUExBWVdMKShFR0xEaXNwbGF5LCBz
dHJ1Y3Qgd2xfZGlzcGxheSopOworI2VuZGlmCisKK3N0YXRpYyBQRk5FR0xCSU5EV0FZTEFORERJ
U1BMQVlXTCBlZ2xCaW5kRGlzcGxheSA9IG51bGxwdHI7CitzdGF0aWMgUEZORUdMVU5CSU5EV0FZ
TEFORERJU1BMQVlXTCBlZ2xVbmJpbmREaXNwbGF5ID0gbnVsbHB0cjsKKworTmVzdGVkQnVmZmVy
KiBOZXN0ZWRCdWZmZXI6OmZyb21SZXNvdXJjZShOZXN0ZWRTdXJmYWNlKiBzdXJmYWNlLCBzdHJ1
Y3Qgd2xfcmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIHN0cnVjdCB3bF9saXN0ZW5lciogbGlz
dGVuZXIgPSB3bF9yZXNvdXJjZV9nZXRfZGVzdHJveV9saXN0ZW5lcihyZXNvdXJjZSwgZGVzdHJv
eUJ1ZmZlcik7CisgICAgaWYgKGxpc3RlbmVyKQorICAgICAgICByZXR1cm4gd2xfY29udGFpbmVy
X29mKGxpc3RlbmVyLCBzdGF0aWNfY2FzdDxOZXN0ZWRCdWZmZXIqPihudWxscHRyKSwgZGVzdHJv
eUxpc3RlbmVyKTsKKworICAgIHJldHVybiBzdXJmYWNlLT5jcmVhdGVCdWZmZXIocmVzb3VyY2Up
OworfQorCit2b2lkIE5lc3RlZEJ1ZmZlcjo6cmVmZXJlbmNlKE5lc3RlZFN1cmZhY2U6OkJ1ZmZl
clJlZmVyZW5jZSogcmVmLCBOZXN0ZWRCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoYnVmZmVy
ID09IHJlZi0+YnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVmLT5idWZmZXIp
IHsKKyAgICAgICAgcmVmLT5idWZmZXItPmJ1c3lDb3VudC0tOworICAgICAgICBpZiAoIXJlZi0+
YnVmZmVyLT5idXN5Q291bnQpCisgICAgICAgICAgICB3bF9yZXNvdXJjZV9xdWV1ZV9ldmVudChy
ZWYtPmJ1ZmZlci0+cmVzb3VyY2UsIFdMX0JVRkZFUl9SRUxFQVNFKTsKKyAgICAgICAgd2xfbGlz
dF9yZW1vdmUoJnJlZi0+ZGVzdHJveUxpc3RlbmVyLmxpbmspOworICAgIH0KKworICAgIGlmIChi
dWZmZXIpIHsKKyAgICAgICAgYnVmZmVyLT5idXN5Q291bnQrKzsKKyAgICAgICAgd2xfc2lnbmFs
X2FkZCgmYnVmZmVyLT5kZXN0cm95U2lnbmFsLCAmcmVmLT5kZXN0cm95TGlzdGVuZXIpOworICAg
ICAgICByZWYtPmRlc3Ryb3lMaXN0ZW5lci5ub3RpZnkgPSBidWZmZXJEZXN0cm95ZWRDYWxsYmFj
azsKKyAgICB9CisKKyAgICByZWYtPmJ1ZmZlciA9IGJ1ZmZlcjsKK30KKwordm9pZCBOZXN0ZWRC
dWZmZXI6OmRlc3Ryb3lCdWZmZXIoc3RydWN0IHdsX2xpc3RlbmVyKiBsaXN0ZW5lciwgdm9pZCop
Cit7CisgICAgTmVzdGVkQnVmZmVyKiBidWZmZXIgPSBudWxscHRyOworICAgIGJ1ZmZlciA9IHds
X2NvbnRhaW5lcl9vZihsaXN0ZW5lciwgYnVmZmVyLCBkZXN0cm95TGlzdGVuZXIpOworICAgIHds
X3NpZ25hbF9lbWl0KCZidWZmZXItPmRlc3Ryb3lTaWduYWwsIGJ1ZmZlcik7CisgICAgZGVsZXRl
IGJ1ZmZlcjsKK30KKwordm9pZCBOZXN0ZWRCdWZmZXI6OmJ1ZmZlckRlc3Ryb3llZENhbGxiYWNr
KHN0cnVjdCB3bF9saXN0ZW5lciogbGlzdGVuZXIsIHZvaWQqKQoreworICAgIE5lc3RlZFN1cmZh
Y2U6OkJ1ZmZlclJlZmVyZW5jZSogcmVmID0gbnVsbHB0cjsKKyAgICByZWYgPSB3bF9jb250YWlu
ZXJfb2YobGlzdGVuZXIsIHJlZiwgZGVzdHJveUxpc3RlbmVyKTsKKyAgICByZWYtPmJ1ZmZlciA9
IG51bGxwdHI7Cit9CisKK05lc3RlZFN1cmZhY2U6Ok5lc3RlZFN1cmZhY2UoV2F5bGFuZENvbXBv
c2l0b3IqIGNvbXBvc2l0b3IpCisgICAgOiBjb21wb3NpdG9yKGNvbXBvc2l0b3IpCisgICAgLCBi
dWZmZXIobnVsbHB0cikKKyAgICAsIHdpZGdldChudWxscHRyKQoreworICAgIHdsX2xpc3RfaW5p
dCgmZnJhbWVDYWxsYmFja0xpc3QpOworCisgICAgd2xfbGlzdF9pbml0KCZidWZmZXJEZXN0cm95
TGlzdGVuZXIubGluayk7CisgICAgYnVmZmVyRGVzdHJveUxpc3RlbmVyLm5vdGlmeSA9IGJ1ZmZl
ckRlc3Ryb3llZENhbGxiYWNrOworCisgICAgd2xfbGlzdF9pbml0KCZsaW5rKTsKKworICAgIGJ1
ZmZlclJlZi5idWZmZXIgPSBudWxscHRyOworICAgIHdsX2xpc3RfaW5pdCgmYnVmZmVyUmVmLmRl
c3Ryb3lMaXN0ZW5lci5saW5rKTsKK30KKworTmVzdGVkU3VyZmFjZTo6fk5lc3RlZFN1cmZhY2Uo
KQoreworICAgIC8vIERlc3Ryb3kgcGVuZGluZyBmcmFtZSBjYWxsYmFja3MKKyAgICBOZXN0ZWRG
cmFtZUNhbGxiYWNrKiBjYjsKKyAgICBOZXN0ZWRGcmFtZUNhbGxiYWNrKiBuZXh0OworICAgIHds
X2xpc3RfZm9yX2VhY2hfc2FmZShjYiwgbmV4dCwgJmZyYW1lQ2FsbGJhY2tMaXN0LCBsaW5rKQor
ICAgICAgICB3bF9yZXNvdXJjZV9kZXN0cm95KGNiLT5yZXNvdXJjZSk7CisgICAgd2xfbGlzdF9p
bml0KCZmcmFtZUNhbGxiYWNrTGlzdCk7CisKKyAgICAvLyBSZWxlYXNlIGN1cnJlbnQgYnVmZmVy
CisgICAgTmVzdGVkQnVmZmVyOjpyZWZlcmVuY2UoJmJ1ZmZlclJlZiwgbnVsbHB0cik7CisKKyAg
ICAvLyBVbmxpbmsgdGhpcyBzdXJmYWNlIGZyb20gdGhlIGNvbXBvc2l0b3IncyBzdXJmYWNlIGxp
c3QKKyAgICB3bF9saXN0X3JlbW92ZSgmbGluayk7Cit9CisKK3ZvaWQgTmVzdGVkU3VyZmFjZTo6
c2V0V2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIHRoaXMtPndpZGdldCA9IHdpZGdl
dDsKK30KKworTmVzdGVkQnVmZmVyKiBOZXN0ZWRTdXJmYWNlOjpjcmVhdGVCdWZmZXIoc3RydWN0
IHdsX3Jlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICByZXR1cm4gbmV3IE5lc3RlZEJ1ZmZlcihy
ZXNvdXJjZSk7Cit9CisKK3ZvaWQgTmVzdGVkU3VyZmFjZTo6YnVmZmVyRGVzdHJveWVkQ2FsbGJh
Y2soc3RydWN0IHdsX2xpc3RlbmVyKiBsaXN0ZW5lciwgdm9pZCopCit7CisgICAgTmVzdGVkU3Vy
ZmFjZSogc3VyZmFjZSA9IG51bGxwdHI7CisgICAgc3VyZmFjZSA9IHdsX2NvbnRhaW5lcl9vZihs
aXN0ZW5lciwgc3VyZmFjZSwgYnVmZmVyRGVzdHJveUxpc3RlbmVyKTsKKyAgICBzdXJmYWNlLT5i
dWZmZXIgPSBudWxscHRyOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95Q2FsbGJhY2soc3RydWN0
IHdsX2NsaWVudCosIHN0cnVjdCB3bF9yZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAgd2xfcmVz
b3VyY2VfZGVzdHJveShyZXNvdXJjZSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0dGFjaENhbGxiYWNr
KHN0cnVjdCB3bF9jbGllbnQqIGNsaWVudCwgc3RydWN0IHdsX3Jlc291cmNlKiByZXNvdXJjZSwK
KyAgICBzdHJ1Y3Qgd2xfcmVzb3VyY2UqIGJ1ZmZlclJlc291cmNlLCBpbnQzMl90IHN4LCBpbnQz
Ml90IHN5KQoreworICAgIGF1dG8qIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxOZXN0ZWRTdXJmYWNl
Kj4od2xfcmVzb3VyY2VfZ2V0X3VzZXJfZGF0YShyZXNvdXJjZSkpOworICAgIGlmIChzdXJmYWNl
KQorICAgICAgICBzdXJmYWNlLT5jb21wb3NpdG9yLT5hdHRhY2hTdXJmYWNlKHN1cmZhY2UsIGNs
aWVudCwgYnVmZmVyUmVzb3VyY2UsIHN4LCBzeSk7Cit9CisKK3N0YXRpYyB2b2lkIGRhbWFnZUNh
bGxiYWNrKHN0cnVjdCB3bF9jbGllbnQqLCBzdHJ1Y3Qgd2xfcmVzb3VyY2UqLCBpbnQzMl90LCBp
bnQzMl90LCBpbnQzMl90LCBpbnQzMl90KQoreworICAgIC8vIEZJWE1FOiBUcnkgdG8gdXNlIGRh
bWFnZSBpbmZvcm1hdGlvbiB0byBpbXByb3ZlIHBhaW50aW5nCit9CisKK3N0YXRpYyB2b2lkIGZy
YW1lQ2FsbGJhY2soc3RydWN0IHdsX2NsaWVudCogY2xpZW50LCBzdHJ1Y3Qgd2xfcmVzb3VyY2Uq
IHJlc291cmNlLCB1aW50MzJfdCBpZCkKK3sKKyAgICBhdXRvKiBzdXJmYWNlID0gc3RhdGljX2Nh
c3Q8TmVzdGVkU3VyZmFjZSo+KHdsX3Jlc291cmNlX2dldF91c2VyX2RhdGEocmVzb3VyY2UpKTsK
KyAgICBpZiAoc3VyZmFjZSkKKyAgICAgICAgc3VyZmFjZS0+Y29tcG9zaXRvci0+cmVxdWVzdEZy
YW1lKHN1cmZhY2UsIGNsaWVudCwgaWQpOworfQorCitzdGF0aWMgdm9pZCBzZXRPcGFxdWVSZWdp
b25DYWxsYmFjayhzdHJ1Y3Qgd2xfY2xpZW50Kiwgc3RydWN0IHdsX3Jlc291cmNlKiwgc3RydWN0
IHdsX3Jlc291cmNlKikKK3sKK30KKworc3RhdGljIHZvaWQgc2V0SW5wdXRSZWdpb25DYWxsYmFj
ayhzdHJ1Y3Qgd2xfY2xpZW50Kiwgc3RydWN0IHdsX3Jlc291cmNlKiwgc3RydWN0IHdsX3Jlc291
cmNlKikKK3sKK30KKworc3RhdGljIHZvaWQgY29tbWl0Q2FsbGJhY2soc3RydWN0IHdsX2NsaWVu
dCogY2xpZW50LCBzdHJ1Y3Qgd2xfcmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIGF1dG8qIHN1
cmZhY2UgPSBzdGF0aWNfY2FzdDxOZXN0ZWRTdXJmYWNlKj4od2xfcmVzb3VyY2VfZ2V0X3VzZXJf
ZGF0YShyZXNvdXJjZSkpOworICAgIGlmIChzdXJmYWNlKQorICAgICAgICBzdXJmYWNlLT5jb21w
b3NpdG9yLT5jb21taXRTdXJmYWNlKHN1cmZhY2UsIGNsaWVudCk7Cit9CisKK3N0YXRpYyB2b2lk
IHNldEJ1ZmZlclRyYW5zZm9ybUNhbGxiYWNrKHN0cnVjdCB3bF9jbGllbnQqLCBzdHJ1Y3Qgd2xf
cmVzb3VyY2UqLCBpbnQzMl90KQoreworfQorCitzdGF0aWMgdm9pZCBzZXRCdWZmZXJTY2FsZUNh
bGxiYWNrKHN0cnVjdCB3bF9jbGllbnQqLCBzdHJ1Y3Qgd2xfcmVzb3VyY2UqLCBpbnQzMl90KQor
eworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHdsX3N1cmZhY2VfaW50ZXJmYWNlIHN1cmZhY2VJ
bnRlcmZhY2UgPSB7CisgICAgZGVzdHJveUNhbGxiYWNrLAorICAgIGF0dGFjaENhbGxiYWNrLAor
ICAgIGRhbWFnZUNhbGxiYWNrLAorICAgIGZyYW1lQ2FsbGJhY2ssCisgICAgc2V0T3BhcXVlUmVn
aW9uQ2FsbGJhY2ssCisgICAgc2V0SW5wdXRSZWdpb25DYWxsYmFjaywKKyAgICBjb21taXRDYWxs
YmFjaywKKyAgICBzZXRCdWZmZXJUcmFuc2Zvcm1DYWxsYmFjaywKKyAgICBzZXRCdWZmZXJTY2Fs
ZUNhbGxiYWNrCit9OworCitzdGF0aWMgdm9pZCBjcmVhdGVTdXJmYWNlQ2FsbGJhY2soc3RydWN0
IHdsX2NsaWVudCogY2xpZW50LCBzdHJ1Y3Qgd2xfcmVzb3VyY2UqIHJlc291cmNlLCB1aW50MzJf
dCBpZCkKK3sKKyAgICBhdXRvKiBjb21wb3NpdG9yID0gc3RhdGljX2Nhc3Q8V2F5bGFuZENvbXBv
c2l0b3IqPih3bF9yZXNvdXJjZV9nZXRfdXNlcl9kYXRhKHJlc291cmNlKSk7CisgICAgY29tcG9z
aXRvci0+Y3JlYXRlU3VyZmFjZShjbGllbnQsIGlkKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRl
UmVnaW9uQ2FsbGJhY2soc3RydWN0IHdsX2NsaWVudCosIHN0cnVjdCB3bF9yZXNvdXJjZSosIHVp
bnQzMl90KQoreworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHdsX2NvbXBvc2l0b3JfaW50ZXJm
YWNlIGNvbXBvc2l0b3JJbnRlcmZhY2UgPSB7CisgICAgY3JlYXRlU3VyZmFjZUNhbGxiYWNrLAor
ICAgIGNyZWF0ZVJlZ2lvbkNhbGxiYWNrCit9OworCitzdGF0aWMgdm9pZCBzZXRTdXJmYWNlRm9y
V2lkZ2V0Q2FsbGJhY2soc3RydWN0IHdsX2NsaWVudCogY2xpZW50LCBzdHJ1Y3Qgd2xfcmVzb3Vy
Y2UqIHJlc291cmNlLAorICAgIHN0cnVjdCB3bF9yZXNvdXJjZSogc3VyZmFjZVJlc291cmNlLCB1
aW50MzJfdCBpZCkKK3sKKyAgICBhdXRvKiBjb21wb3NpdG9yID0gc3RhdGljX2Nhc3Q8V2F5bGFu
ZENvbXBvc2l0b3IqPih3bF9yZXNvdXJjZV9nZXRfdXNlcl9kYXRhKHJlc291cmNlKSk7CisgICAg
Y29tcG9zaXRvci0+c2V0U3VyZmFjZUZvcldpZGdldChjbGllbnQsIHN1cmZhY2VSZXNvdXJjZSwg
aWQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHdsX3dlYmtpdGd0a19pbnRlcmZhY2Ugd2tn
dGtJbnRlcmZhY2UgPSB7CisgICAgc2V0U3VyZmFjZUZvcldpZGdldENhbGxiYWNrCit9OworCitX
YXlsYW5kQ29tcG9zaXRvciogV2F5bGFuZENvbXBvc2l0b3I6Omluc3RhbmNlKCkKK3sKKyAgICBz
dGF0aWMgV2F5bGFuZENvbXBvc2l0b3IqIGNvbXBvc2l0b3IgPSBudWxscHRyOworICAgIGlmIChj
b21wb3NpdG9yKQorICAgICAgICByZXR1cm4gY29tcG9zaXRvcjsKKworICAgIGNvbXBvc2l0b3Ig
PSBuZXcgV2F5bGFuZENvbXBvc2l0b3JFR0woKTsKKyAgICBpZiAoIWNvbXBvc2l0b3ItPmluaXRp
YWxpemUoKSkgeworICAgICAgICBkZWxldGUgY29tcG9zaXRvcjsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGNvbXBvc2l0b3I7Cit9CisKK1dheWxhbmRDb21w
b3NpdG9yOjpXYXlsYW5kQ29tcG9zaXRvcigpCisgICAgOiBtX2Rpc3BsYXl7IG51bGxwdHIsIG51
bGxwdHIsIEVHTF9OT19ESVNQTEFZLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
IH0KK3sKKyAgICB3bF9saXN0X2luaXQoJm1fc3VyZmFjZXMpOworfQorCitXYXlsYW5kQ29tcG9z
aXRvcjo6fldheWxhbmRDb21wb3NpdG9yKCkKK3sKKyAgICBOZXN0ZWRTdXJmYWNlKiBzdXJmYWNl
OworICAgIE5lc3RlZFN1cmZhY2UqIG5leHQ7CisgICAgd2xfbGlzdF9mb3JfZWFjaF9zYWZlKHN1
cmZhY2UsIG5leHQsICZtX3N1cmZhY2VzLCBsaW5rKQorICAgICAgICBkZWxldGUgc3VyZmFjZTsK
KyAgICB3bF9saXN0X2luaXQoJm1fc3VyZmFjZXMpOworCisgICAgaWYgKG1fZGlzcGxheS5ldmVu
dFNvdXJjZSkKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKGdfc291cmNlX2dldF9pZChtX2Rpc3Bs
YXkuZXZlbnRTb3VyY2UpKTsKKyAgICBpZiAobV9kaXNwbGF5LndrZ3RrR2xvYmFsKQorICAgICAg
ICB3bF9nbG9iYWxfZGVzdHJveShtX2Rpc3BsYXkud2tndGtHbG9iYWwpOworICAgIGlmIChtX2Rp
c3BsYXkud2xHbG9iYWwpCisgICAgICAgIHdsX2dsb2JhbF9kZXN0cm95KG1fZGlzcGxheS53bEds
b2JhbCk7CisgICAgaWYgKG1fZGlzcGxheS5jaGlsZERpc3BsYXkpCisgICAgICAgIHdsX2Rpc3Bs
YXlfZGVzdHJveShtX2Rpc3BsYXkuY2hpbGREaXNwbGF5KTsKK30KKworc3RhdGljIHZvaWQgYmlu
ZENvbXBvc2l0b3JHbG9iYWwoc3RydWN0IHdsX2NsaWVudCogY2xpZW50LCB2b2lkKiBkYXRhLCB1
aW50MzJfdCB2ZXJzaW9uLCB1aW50MzJfdCBpZCkKK3sKKyAgICBhdXRvKiBjb21wb3NpdG9yID0g
c3RhdGljX2Nhc3Q8V2F5bGFuZENvbXBvc2l0b3IqPihkYXRhKTsKKyAgICBzdHJ1Y3Qgd2xfcmVz
b3VyY2UqIHJlc291cmNlID0gd2xfcmVzb3VyY2VfY3JlYXRlKGNsaWVudCwgJndsX2NvbXBvc2l0
b3JfaW50ZXJmYWNlLAorICAgICAgICBzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24p
LCAzKSwgaWQpOworICAgIHdsX3Jlc291cmNlX3NldF9pbXBsZW1lbnRhdGlvbihyZXNvdXJjZSwg
JmNvbXBvc2l0b3JJbnRlcmZhY2UsIGNvbXBvc2l0b3IsIG51bGxwdHIpOworfQorCitzdGF0aWMg
dm9pZCBiaW5kV2ViS2l0R1RLR2xvYmFsKHN0cnVjdCB3bF9jbGllbnQqIGNsaWVudCwgdm9pZCog
ZGF0YSwgdWludDMyX3QsIHVpbnQzMl90IGlkKQoreworICAgIGF1dG8qIGNvbXBvc2l0b3IgPSBz
dGF0aWNfY2FzdDxXYXlsYW5kQ29tcG9zaXRvcio+KGRhdGEpOworICAgIHN0cnVjdCB3bF9yZXNv
dXJjZSogcmVzb3VyY2UgPSB3bF9yZXNvdXJjZV9jcmVhdGUoY2xpZW50LCAmd2xfd2Via2l0Z3Rr
X2ludGVyZmFjZSwgMSwgaWQpOworICAgIHdsX3Jlc291cmNlX3NldF9pbXBsZW1lbnRhdGlvbihy
ZXNvdXJjZSwgJndrZ3RrSW50ZXJmYWNlLCBjb21wb3NpdG9yLCBudWxscHRyKTsKK30KKworYm9v
bCBXYXlsYW5kQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgpCit7CisgICAgR2RrRGlzcGxheSogZ2Rr
RGlzcGxheSA9IGdka19kaXNwbGF5X21hbmFnZXJfZ2V0X2RlZmF1bHRfZGlzcGxheShnZGtfZGlz
cGxheV9tYW5hZ2VyX2dldCgpKTsKKyAgICBzdHJ1Y3Qgd2xfZGlzcGxheSogd2xEaXNwbGF5ID0g
Z2RrX3dheWxhbmRfZGlzcGxheV9nZXRfd2xfZGlzcGxheShnZGtEaXNwbGF5KTsKKyAgICBpZiAo
IXdsRGlzcGxheSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3JlYXRlIHRoZSBu
ZXN0ZWQgZGlzcGxheQorICAgIG1fZGlzcGxheS5nZGtEaXNwbGF5ID0gZ2RrRGlzcGxheTsKKyAg
ICBtX2Rpc3BsYXkud2xEaXNwbGF5ID0gd2xEaXNwbGF5OworCisgICAgbV9kaXNwbGF5LmNoaWxk
RGlzcGxheSA9IHdsX2Rpc3BsYXlfY3JlYXRlKCk7CisgICAgaWYgKCFtX2Rpc3BsYXkuY2hpbGRE
aXNwbGF5KSB7CisgICAgICAgIGdfd2FybmluZygiTmVzdGVkIFdheWxhbmQgY29tcG9zaXRvciBj
b3VsZCBub3QgY3JlYXRlIGRpc3BsYXkgb2JqZWN0LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKHdsX2Rpc3BsYXlfYWRkX3NvY2tldChtX2Rpc3BsYXkuY2hpbGRE
aXNwbGF5LCAid2Via2l0Z3RrLXdheWxhbmQtY29tcG9zaXRvci1zb2NrZXQiKSkgeworICAgICAg
ICBnX3dhcm5pbmcoIk5lc3RlZCBXYXlsYW5kIGNvbXBvc2l0b3IgY291bGQgbm90IGNyZWF0ZSBk
aXNwbGF5IHNvY2tldCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8g
QmluZCB0aGUgY29tcG9zaXRvciB0byB0aGlzIGRpc3BsYXkKKyAgICBtX2Rpc3BsYXkud2xHbG9i
YWwgPSB3bF9nbG9iYWxfY3JlYXRlKG1fZGlzcGxheS5jaGlsZERpc3BsYXksICZ3bF9jb21wb3Np
dG9yX2ludGVyZmFjZSwKKyAgICAgICAgd2xfY29tcG9zaXRvcl9pbnRlcmZhY2UudmVyc2lvbiwg
dGhpcywgYmluZENvbXBvc2l0b3JHbG9iYWwpOworICAgIGlmICghbV9kaXNwbGF5LndsR2xvYmFs
KSB7CisgICAgICAgIGdfd2FybmluZygiTmVzdGVkIFdheWxhbmQgY29tcG9zaXRvciBjb3VsZCBu
b3QgcmVnaXN0ZXIgZGlzcGxheSBnbG9iYWwiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIEJpbmQgdGhlIHdlYmtpdGd0ayBwcm90b2NvbCBleHRlbnNpb24KKyAgICBt
X2Rpc3BsYXkud2tndGtHbG9iYWwgPSB3bF9nbG9iYWxfY3JlYXRlKG1fZGlzcGxheS5jaGlsZERp
c3BsYXksICZ3bF93ZWJraXRndGtfaW50ZXJmYWNlLAorICAgICAgICAxLCB0aGlzLCBiaW5kV2Vi
S2l0R1RLR2xvYmFsKTsKKyAgICBpZiAoIW1fZGlzcGxheS53a2d0a0dsb2JhbCkgeworICAgICAg
ICBnX3dhcm5pbmcoIk5lc3RlZCBXYXlsYW5kIGNvbXBvc2l0b3IgY291bGQgbm90IHJlZ2lzdGVy
IHdlYmtpdGd0ayBnbG9iYWwiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmICghaW5pdGlhbGl6ZUVHTCgpKSB7CisgICAgICAgIGdfd2FybmluZygiTmVzdGVkIFdheWxh
bmQgY29tcG9zaXRvciBjb3VsZCBub3QgaW5pdGlhbGl6ZSBFR0wuIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmVxdWlyZWQg
V2F5bGFuZCBFR0wgZXh0ZW5zaW9uCisgICAgY29uc3QgY2hhciogZXh0ZW5zaW9ucyA9IGVnbFF1
ZXJ5U3RyaW5nKG1fZGlzcGxheS5lZ2xEaXNwbGF5LCBFR0xfRVhURU5TSU9OUyk7CisgICAgaWYg
KCFzdHJzdHIoZXh0ZW5zaW9ucywgIkVHTF9XTF9iaW5kX3dheWxhbmRfZGlzcGxheSIpKSB7Cisg
ICAgICAgIGdfd2FybmluZygiTmVzdGVkIFdheWxhbmQgY29tcG9zaXRvciByZXF1aXJlcyBFR0xf
V0xfYmluZF93YXlsYW5kX2Rpc3BsYXkgZXh0ZW5zaW9uLlxuIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBNYXAgcmVxdWlyZWQgRUdMIGZ1bmN0aW9ucworICAgIGVn
bEJpbmREaXNwbGF5ID0gKFBGTkVHTEJJTkRXQVlMQU5ERElTUExBWVdMKSBlZ2xHZXRQcm9jQWRk
cmVzcygiZWdsQmluZFdheWxhbmREaXNwbGF5V0wiKTsKKyAgICBlZ2xVbmJpbmREaXNwbGF5ID0g
KFBGTkVHTFVOQklORFdBWUxBTkRESVNQTEFZV0wpIGVnbEdldFByb2NBZGRyZXNzKCJlZ2xVbmJp
bmRXYXlsYW5kRGlzcGxheVdMIik7CisgICAgaWYgKCFlZ2xCaW5kRGlzcGxheSB8fCAhZWdsVW5i
aW5kRGlzcGxheSkgeworICAgICAgICBnX3dhcm5pbmcoIkVHTCBzdXBwb3J0cyBFR0xfV0xfYmlu
ZF93YXlsYW5kX2Rpc3BsYXkgZXh0ZW5zaW9uIGJ1dCBkb2VzIG5vdCBwcm92aWRlIGV4dGVuc2lv
biBmdW5jdGlvbnMuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
IWVnbEJpbmREaXNwbGF5KG1fZGlzcGxheS5lZ2xEaXNwbGF5LCBtX2Rpc3BsYXkuY2hpbGREaXNw
bGF5KSkgeworICAgICAgICBnX3dhcm5pbmcoIk5lc3RlZCBXYXlsYW5kIGNvbXBvc2l0b3IgY291
bGQgbm90IGJpbmQgbmVzdGVkIGRpc3BsYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIEhhbmRsZSBvdXIgZGlzcGxheSBldmVudHMgdGhyb3VnaCBHTGliJ3MgbWFp
biBsb29wCisgICAgbV9kaXNwbGF5LmV2ZW50U291cmNlID0gV2F5bGFuZEV2ZW50U291cmNlOjpj
cmVhdGVEaXNwbGF5RXZlbnRTb3VyY2UobV9kaXNwbGF5LmNoaWxkRGlzcGxheSk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXYXlsYW5kQ29tcG9zaXRvcjo6YWRkV2lkZ2V0KEd0a1dp
ZGdldCogd2lkZ2V0LCB1aW50NjRfdCBpZCkKK3sKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09C
SkVDVCh3aWRnZXQpLCAid2F5bGFuZC1jb21wb3NpdG9yLXdpZGdldC1pZCIsIEdVSU5UX1RPX1BP
SU5URVIoaWQpKTsKKyAgICBtX3dpZGdldEhhc2hNYXAuc2V0KHdpZGdldCwgbnVsbHB0cik7Cit9
CisKK3ZvaWQgV2F5bGFuZENvbXBvc2l0b3I6OnJlbW92ZVdpZGdldChHdGtXaWRnZXQqIHdpZGdl
dCkKK3sKKyAgICBOZXN0ZWRTdXJmYWNlKiBzdXJmYWNlID0gbV93aWRnZXRIYXNoTWFwLmdldCh3
aWRnZXQpOworICAgIGlmIChzdXJmYWNlKQorICAgICAgICBzdXJmYWNlLT53aWRnZXQgPSBudWxs
cHRyOworCisgICAgaW50IHdpZGdldElkID0gd2lkZ2V0SUQod2lkZ2V0KTsKKyAgICBpZiAod2lk
Z2V0SWQpIHsKKyAgICAgICAgbV93aWRnZXRIYXNoTWFwLnJlbW92ZSh3aWRnZXQpOworICAgICAg
ICBnX29iamVjdF9zdGVhbF9kYXRhKEdfT0JKRUNUKHdpZGdldCksICJ3YXlsYW5kLWNvbXBvc2l0
b3Itd2lkZ2V0LWlkIik7CisgICAgfQorfQorCit1bnNpZ25lZCBXYXlsYW5kQ29tcG9zaXRvcjo6
d2lkZ2V0SUQoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgcmV0dXJuIEdQT0lOVEVSX1RPX1VJ
TlQoZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgIndheWxhbmQtY29tcG9zaXRv
ci13aWRnZXQtaWQiKSk7Cit9CisKK3ZvaWQgV2F5bGFuZENvbXBvc2l0b3I6OnNldFN1cmZhY2VG
b3JXaWRnZXQoc3RydWN0IHdsX2NsaWVudCosIHN0cnVjdCB3bF9yZXNvdXJjZSogc3VyZmFjZVJl
c291cmNlLCB1aW50MzJfdCBpZCkKK3sKKyAgICBhdXRvKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8
TmVzdGVkU3VyZmFjZSo+KHdsX3Jlc291cmNlX2dldF91c2VyX2RhdGEoc3VyZmFjZVJlc291cmNl
KSk7CisgICAgZm9yIChjb25zdCBhdXRvJiB3aWRnZXQgOiBtX3dpZGdldEhhc2hNYXAua2V5cygp
KSB7CisgICAgICAgIGlmIChpZCA9PSB3aWRnZXRJRCh3aWRnZXQpKSB7CisgICAgICAgICAgICAv
LyBBc3NvY2lhdGUgdGhlIG5ldyBzdXJmYWNlIHdpdGggdGhlIHdpZGdldCwgdGhlIGNsaWVudCBp
cyByZXNwb25zaWJsZQorICAgICAgICAgICAgLy8gZm9yIGRlc3Ryb3lpbmcgYW55IHByZXZpb3Vz
IHN1cmZhY2UgY3JlYXRlZCBmb3IgdGhpcyB3aWRnZXQKKyAgICAgICAgICAgIG1fd2lkZ2V0SGFz
aE1hcC5zZXQod2lkZ2V0LCBzdXJmYWNlKTsKKyAgICAgICAgICAgIHN1cmZhY2UtPnNldFdpZGdl
dCh3aWRnZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIGRlc3Ryb3lOZXN0ZWRTdXJmYWNlKHN0cnVjdCB3bF9yZXNvdXJjZSogcmVzb3Vy
Y2UpCit7CisgICAgYXV0byogc3VyZmFjZSA9IHN0YXRpY19jYXN0PE5lc3RlZFN1cmZhY2UqPih3
bF9yZXNvdXJjZV9nZXRfdXNlcl9kYXRhKHJlc291cmNlKSk7CisgICAgZGVsZXRlIHN1cmZhY2U7
Cit9CisKK3ZvaWQgV2F5bGFuZENvbXBvc2l0b3I6OmNyZWF0ZVN1cmZhY2Uoc3RydWN0IHdsX2Ns
aWVudCogY2xpZW50LCB1aW50MzJfdCBpZCkKK3sKKyAgICBOZXN0ZWRTdXJmYWNlKiBzdXJmYWNl
ID0gY3JlYXRlTmVzdGVkU3VyZmFjZSgpOworCisgICAgLy8gQ3JlYXRlIHRoZSBzdXJmYWNlIHJl
c291cmNlCisgICAgc3RydWN0IHdsX3Jlc291cmNlKiByZXNvdXJjZSA9IHdsX3Jlc291cmNlX2Ny
ZWF0ZShjbGllbnQsICZ3bF9zdXJmYWNlX2ludGVyZmFjZSwgMSwgaWQpOworICAgIHdsX3Jlc291
cmNlX3NldF9pbXBsZW1lbnRhdGlvbihyZXNvdXJjZSwgJnN1cmZhY2VJbnRlcmZhY2UsIHN1cmZh
Y2UsIGRlc3Ryb3lOZXN0ZWRTdXJmYWNlKTsKKworICAgIHdsX2xpc3RfaW5zZXJ0KG1fc3VyZmFj
ZXMucHJldiwgJnN1cmZhY2UtPmxpbmspOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBQTEFURk9STShXQVlMQU5EKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2F5bGFuZC9XYXlsYW5kQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQvV2F5bGFuZENvbXBvc2l0b3Iu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dheWxh
bmQvV2F5bGFuZENvbXBvc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2F5
bGFuZENvbXBvc2l0b3JfaAorI2RlZmluZSBXYXlsYW5kQ29tcG9zaXRvcl9oCisKKyNpZiBQTEFU
Rk9STShXQVlMQU5EKQorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPG1lbW9yeT4K
KyNpbmNsdWRlIDx3YXlsYW5kLWNsaWVudC5oPgorI2luY2x1ZGUgPHdheWxhbmQtc2VydmVyLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworI2luY2x1ZGUgPHdheWxhbmQtZWdsLmg+Cisj
aW5jbHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPEVHTC9lZ2xleHQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdHJ1Y3QgTmVzdGVkQnVmZmVyOworY2xhc3MgV2F5bGFuZENvbXBvc2l0
b3I7CisKKy8vIE5lc3RlZCBXYXlsYW5kIGNvbXBvc2l0b3Igc3VyZmFjZQorc3RydWN0IE5lc3Rl
ZFN1cmZhY2UgeworICAgIE5lc3RlZFN1cmZhY2UoV2F5bGFuZENvbXBvc2l0b3IqKTsKKyAgICB2
aXJ0dWFsIH5OZXN0ZWRTdXJmYWNlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2lkZ2V0KEd0
a1dpZGdldCopOworICAgIHZpcnR1YWwgTmVzdGVkQnVmZmVyKiBjcmVhdGVCdWZmZXIoc3RydWN0
IHdsX3Jlc291cmNlKik7CisKKyAgICBzdGF0aWMgdm9pZCBidWZmZXJEZXN0cm95ZWRDYWxsYmFj
ayhzdHJ1Y3Qgd2xfbGlzdGVuZXIqLCB2b2lkKik7CisKKyAgICBXYXlsYW5kQ29tcG9zaXRvciog
Y29tcG9zaXRvcjsgLy8gTmVzdGVkIGNvbXBvc2l0b3IgaW5zdGFuY2UKKyAgICBzdHJ1Y3QgTmVz
dGVkQnVmZmVyKiBidWZmZXI7IC8vIExhc3QgYXR0YWNoZWQgYnVmZmVyIChwZW5kaW5nIGJ1ZmZl
cikKKyAgICBzdHJ1Y3Qgd2xfbGlzdCBmcmFtZUNhbGxiYWNrTGlzdDsgLy8gUGVuZGluZyBmcmFt
ZSBjYWxsYmFjayBsaXN0CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQ7IC8vIHdpZGdldCBhc3NvY2lh
dGVkIHdpdGggdGhpcyBzdXJmYWNlCisgICAgc3RydWN0IHdsX2xpc3RlbmVyIGJ1ZmZlckRlc3Ry
b3lMaXN0ZW5lcjsgLy8gUGVuZGluZyBidWZmZXIgZGVzdHJveSBsaXN0ZW5lcgorICAgIHN0cnVj
dCB3bF9saXN0IGxpbms7CisKKyAgICBzdHJ1Y3QgQnVmZmVyUmVmZXJlbmNlIHsKKyAgICAgICAg
c3RydWN0IE5lc3RlZEJ1ZmZlciogYnVmZmVyOworICAgICAgICBzdHJ1Y3Qgd2xfbGlzdGVuZXIg
ZGVzdHJveUxpc3RlbmVyOworICAgIH0gYnVmZmVyUmVmOyAvLyBDdXJyZW50IGJ1ZmZlci4KK307
CisKK3N0cnVjdCBOZXN0ZWRCdWZmZXIgeworICAgIE5lc3RlZEJ1ZmZlcihzdHJ1Y3Qgd2xfcmVz
b3VyY2UqIHJlc291cmNlKQorICAgICAgICA6IHJlc291cmNlKHJlc291cmNlKQorICAgICAgICAs
IGJ1c3lDb3VudCgwKQorICAgIHsKKyAgICAgICAgd2xfc2lnbmFsX2luaXQoJmRlc3Ryb3lTaWdu
YWwpOworCisgICAgICAgIHdsX2xpc3RfaW5pdCgmZGVzdHJveUxpc3RlbmVyLmxpbmspOworICAg
ICAgICBkZXN0cm95TGlzdGVuZXIubm90aWZ5ID0gZGVzdHJveUJ1ZmZlcjsKKyAgICAgICAgd2xf
cmVzb3VyY2VfYWRkX2Rlc3Ryb3lfbGlzdGVuZXIocmVzb3VyY2UsICZkZXN0cm95TGlzdGVuZXIp
OworICAgIH0KKworICAgIHN0YXRpYyBzdHJ1Y3QgTmVzdGVkQnVmZmVyKiBmcm9tUmVzb3VyY2Uo
TmVzdGVkU3VyZmFjZSosIHN0cnVjdCB3bF9yZXNvdXJjZSopOworICAgIHN0YXRpYyB2b2lkIHJl
ZmVyZW5jZShOZXN0ZWRTdXJmYWNlOjpCdWZmZXJSZWZlcmVuY2UqLCBzdHJ1Y3QgTmVzdGVkQnVm
ZmVyKik7CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95QnVmZmVyKHN0cnVjdCB3bF9saXN0ZW5l
ciosIHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCBidWZmZXJEZXN0cm95ZWRDYWxsYmFjayhzdHJ1
Y3Qgd2xfbGlzdGVuZXIqLCB2b2lkKik7CisKKyAgICBzdHJ1Y3Qgd2xfcmVzb3VyY2UqIHJlc291
cmNlOworICAgIHN0cnVjdCB3bF9zaWduYWwgZGVzdHJveVNpZ25hbDsKKyAgICBzdHJ1Y3Qgd2xf
bGlzdGVuZXIgZGVzdHJveUxpc3RlbmVyOworICAgIHVpbnQzMl90IGJ1c3lDb3VudDsKK307CisK
Ky8vIExpc3Qgb2YgcGVuZGluZyBmcmFtZSBjYWxsYmFja3Mgb24gYSBuZXN0ZWQgc3VyZmFjZQor
c3RydWN0IE5lc3RlZEZyYW1lQ2FsbGJhY2sgeworICAgIE5lc3RlZEZyYW1lQ2FsbGJhY2soc3Ry
dWN0IHdsX3Jlc291cmNlKiByZXNvdXJjZSkKKyAgICAgICAgOiByZXNvdXJjZShyZXNvdXJjZSkK
KyAgICB7CisgICAgICAgIHdsX2xpc3RfaW5pdCgmbGluayk7CisgICAgfQorCisgICAgc3RydWN0
IHdsX3Jlc291cmNlKiByZXNvdXJjZTsKKyAgICBzdHJ1Y3Qgd2xfbGlzdCBsaW5rOworfTsKKwor
Y2xhc3MgV2F5bGFuZENvbXBvc2l0b3IgeworcHVibGljOgorICAgIGVudW0gQ29tcG9zaXRvclR5
cGUgeworICAgICAgICBFR0wgLy8gRm9yIHRoZSBtb21lbnQgdGhlIG9ubHkgc3VwcG9ydGVkIHR5
cGUuCisgICAgfTsKKworICAgIHN0YXRpYyBXYXlsYW5kQ29tcG9zaXRvciogaW5zdGFuY2UoKTsK
KyAgICB2aXJ0dWFsIH5XYXlsYW5kQ29tcG9zaXRvcigpOworCisgICAgLy8gV2ViS2l0IGludGVn
cmF0aW9uCisgICAgdm9pZCBhZGRXaWRnZXQoR3RrV2lkZ2V0KiwgdWludDY0X3QpOworICAgIHZv
aWQgcmVtb3ZlV2lkZ2V0KEd0a1dpZGdldCopOworICAgIHN0YXRpYyB1bnNpZ25lZCB3aWRnZXRJ
RChHdGtXaWRnZXQqKTsKKworICAgIHZvaWQgc2V0U3VyZmFjZUZvcldpZGdldChzdHJ1Y3Qgd2xf
Y2xpZW50Kiwgc3RydWN0IHdsX3Jlc291cmNlKiwgdWludDMyX3QpOworCisgICAgdm9pZCBjcmVh
dGVTdXJmYWNlKHN0cnVjdCB3bF9jbGllbnQqLCB1aW50MzJfdCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoU3VyZmFjZShOZXN0ZWRTdXJmYWNlKiwgc3RydWN0IHdsX2NsaWVudCosIHN0cnVj
dCB3bF9yZXNvdXJjZSosIGludDMyX3QsIGludDMyX3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdEZyYW1lKE5lc3RlZFN1cmZhY2UqLCBzdHJ1Y3Qgd2xfY2xpZW50KiwgdWludDMyX3Qp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0U3VyZmFjZShOZXN0ZWRTdXJmYWNlKiwgc3Ry
dWN0IHdsX2NsaWVudCopID0gMDsKKworICAgIHN0cnVjdCBSZW5kZXJpbmdDb250ZXh0IHsKKyAg
ICAgICAgUmVuZGVyaW5nQ29udGV4dChDb21wb3NpdG9yVHlwZSB0eXBlKQorICAgICAgICAgICAg
OiB0eXBlKHR5cGUpCisgICAgICAgIHsgfQorCisgICAgICAgIENvbXBvc2l0b3JUeXBlIHR5cGU7
CisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyKFJlbmRlcmluZ0NvbnRleHQmKSA9IDA7
CisKKyAgICBFR0xEaXNwbGF5IGVnbERpc3BsYXkoKSB7IHJldHVybiBtX2Rpc3BsYXkuZWdsRGlz
cGxheTsgfQorCitwcm90ZWN0ZWQ6CisgICAgV2F5bGFuZENvbXBvc2l0b3IoKTsKKworICAgIC8v
IE5lc3RlZCBjb21wb3NpdG9yIGRpc3BsYXkgaW5pdGlhbGl6YXRpb24KKyAgICB2aXJ0dWFsIGJv
b2wgaW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplRUdMKCkgPSAwOwor
CisgICAgdmlydHVhbCBOZXN0ZWRTdXJmYWNlKiBjcmVhdGVOZXN0ZWRTdXJmYWNlKCkgPSAwOwor
CisgICAgc3RydWN0IERpc3BsYXkgeworICAgICAgICBHZGtEaXNwbGF5KiBnZGtEaXNwbGF5Owor
ICAgICAgICBzdHJ1Y3Qgd2xfZGlzcGxheSogd2xEaXNwbGF5OworICAgICAgICBFR0xEaXNwbGF5
IGVnbERpc3BsYXk7CisKKyAgICAgICAgc3RydWN0IHdsX2Rpc3BsYXkqIGNoaWxkRGlzcGxheTsK
KyAgICAgICAgc3RydWN0IHdsX2dsb2JhbCogd2xHbG9iYWw7CisgICAgICAgIHN0cnVjdCB3bF9n
bG9iYWwqIHdrZ3RrR2xvYmFsOworICAgICAgICBHU291cmNlKiBldmVudFNvdXJjZTsKKyAgICB9
IG1fZGlzcGxheTsKKworICAgIEhhc2hNYXA8R3RrV2lkZ2V0KiwgTmVzdGVkU3VyZmFjZSo+IG1f
d2lkZ2V0SGFzaE1hcDsKKyAgICBzdHJ1Y3Qgd2xfbGlzdCBtX3N1cmZhY2VzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oV0FZTEFORCkKKworI2Vu
ZGlmIC8vIFdheWxhbmRDb21wb3NpdG9yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dheWxhbmQvV2F5bGFuZENvbXBvc2l0b3JFR0wuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQvV2F5bGFuZENvbXBvc2l0
b3JFR0wuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2F5bGFuZC9XYXlsYW5kQ29tcG9zaXRvckVHTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2F5bGFuZENvbXBvc2l0b3JFR0wuaCIK
KworI2lmIFBMQVRGT1JNKFdBWUxBTkQpCisKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNs
dWRlIDxHTEVTMi9nbDJleHQuaD4KKworI2lmICFkZWZpbmVkKFBGTkVHTFFVRVJZV0FZTEFOREJV
RkZFUldMKQordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMUVVFUllXQVlM
QU5EQlVGRkVSV0wpKEVHTERpc3BsYXksIHN0cnVjdCB3bF9yZXNvdXJjZSosIEVHTGludCwgRUdM
aW50Kik7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVHTF9XQVlMQU5EX0JVRkZFUl9XTCkKKyNk
ZWZpbmUgRUdMX1dBWUxBTkRfQlVGRkVSX1dMIDB4MzFENQorI2VuZGlmCisKK3N0YXRpYyBQRk5H
TEVHTElNQUdFVEFSR0VUVEVYVFVSRTJET0VTUFJPQyBlZ2xJbWFnZVRhcmdldFRleHR1cmUyZCA9
IG51bGxwdHI7CitzdGF0aWMgUEZORUdMQ1JFQVRFSU1BR0VLSFJQUk9DIGVnbENyZWF0ZUltYWdl
ID0gbnVsbHB0cjsKK3N0YXRpYyBQRk5FR0xERVNUUk9ZSU1BR0VLSFJQUk9DIGVnbERlc3Ryb3lJ
bWFnZSA9IG51bGxwdHI7CitzdGF0aWMgUEZORUdMUVVFUllXQVlMQU5EQlVGRkVSV0wgZWdsUXVl
cnlCdWZmZXIgPSBudWxscHRyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE5lc3Rl
ZFN1cmZhY2VFR0wgOiBwdWJsaWMgTmVzdGVkU3VyZmFjZSB7CitwdWJsaWM6CisgICAgTmVzdGVk
U3VyZmFjZUVHTChXYXlsYW5kQ29tcG9zaXRvciogY29tcG9zaXRvcikKKyAgICAgICAgOiBOZXN0
ZWRTdXJmYWNlKGNvbXBvc2l0b3IpCisgICAgICAgICwgdGV4dHVyZSgwKQorICAgICAgICAsIGlt
YWdlKEVHTF9OT19JTUFHRV9LSFIpCisgICAgICAgICwgY2Fpcm9TdXJmYWNlKG51bGxwdHIpCisg
ICAgeworICAgICAgICAvLyBDcmVhdGUgYSBHTCB0ZXh0dXJlIHRvIGJhY2sgdGhpcyBzdXJmYWNl
CisgICAgICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAgICAgICBnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAg
ICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NM
QU1QX1RPX0VER0UpOworICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9ORUFSRVNUKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAg
fQorCisgICAgdmlydHVhbCB+TmVzdGVkU3VyZmFjZUVHTCgpCisgICAgeworICAgICAgICBpZiAo
aW1hZ2UgIT0gRUdMX05PX0lNQUdFX0tIUikKKyAgICAgICAgICAgIGVnbERlc3Ryb3lJbWFnZShj
b21wb3NpdG9yLT5lZ2xEaXNwbGF5KCksIGltYWdlKTsKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJl
cygxLCAmdGV4dHVyZSk7CisgICAgfQorCisgICAgR0x1aW50IHRleHR1cmU7IC8vIEdMIHRleHR1
cmUgZm9yIHRoZSBzdXJmYWNlCisgICAgRUdMSW1hZ2VLSFIgaW1hZ2U7IC8vIEVHTCBJbWFnZSBm
b3IgdGV4dHVyZQorICAgIGNhaXJvX3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlOyAvLyBDYWlybyBz
dXJmYWNlIGZvciBHTCB0ZXh0dXJlCit9OworCitXYXlsYW5kQ29tcG9zaXRvckVHTDo6V2F5bGFu
ZENvbXBvc2l0b3JFR0woKQorICAgIDogbV9lZ2xDb25maWcobnVsbHB0cikKKyAgICAsIG1fZWds
Q29udGV4dChFR0xfTk9fQ09OVEVYVCkKKyAgICAsIG1fZWdsRGV2aWNlKG51bGxwdHIpCit7Cit9
CisKK3ZvaWQgV2F5bGFuZENvbXBvc2l0b3JFR0w6OmF0dGFjaFN1cmZhY2UoTmVzdGVkU3VyZmFj
ZSogc3VyZmFjZUJhc2UsIHN0cnVjdCB3bF9jbGllbnQqLAorICAgIHN0cnVjdCB3bF9yZXNvdXJj
ZSogYnVmZmVyUmVzb3VyY2UsIGludDMyX3QsIGludDMyX3QpCit7CisgICAgYXV0byogc3VyZmFj
ZSA9IHN0YXRpY19jYXN0PE5lc3RlZFN1cmZhY2VFR0wqPihzdXJmYWNlQmFzZSk7CisKKyAgICBF
R0xpbnQgZm9ybWF0OworICAgIGlmICghZWdsUXVlcnlCdWZmZXIobV9kaXNwbGF5LmVnbERpc3Bs
YXksIGJ1ZmZlclJlc291cmNlLCBFR0xfVEVYVFVSRV9GT1JNQVQsICZmb3JtYXQpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGZvcm1hdCAhPSBFR0xfVEVYVFVSRV9SR0IgJiYgZm9ybWF0ICE9
IEVHTF9URVhUVVJFX1JHQkEpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFJlbW92ZSByZWZl
cmVuY2VzIHRvIGFueSBwcmV2aW91cyBwZW5kaW5nIGJ1ZmZlciBmb3IgdGhpcyBzdXJmYWNlCisg
ICAgaWYgKHN1cmZhY2UtPmJ1ZmZlcikgeworICAgICAgICBzdXJmYWNlLT5idWZmZXIgPSBudWxs
cHRyOworICAgICAgICB3bF9saXN0X3JlbW92ZSgmc3VyZmFjZS0+YnVmZmVyRGVzdHJveUxpc3Rl
bmVyLmxpbmspOworICAgIH0KKworICAgIC8vIE1ha2UgdGhlIG5ldyBidWZmZXIgdGhlIGN1cnJl
bnQgcGVuZGluZyBidWZmZXIKKyAgICBpZiAoYnVmZmVyUmVzb3VyY2UpIHsKKyAgICAgICAgc3Vy
ZmFjZS0+YnVmZmVyID0gTmVzdGVkQnVmZmVyOjpmcm9tUmVzb3VyY2Uoc3VyZmFjZSwgYnVmZmVy
UmVzb3VyY2UpOworICAgICAgICB3bF9zaWduYWxfYWRkKCZzdXJmYWNlLT5idWZmZXItPmRlc3Ry
b3lTaWduYWwsICZzdXJmYWNlLT5idWZmZXJEZXN0cm95TGlzdGVuZXIpOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgZGVzdHJveU5lc3RlZEZyYW1lQ2FsbGJhY2soc3RydWN0IHdsX3Jlc291cmNl
KiByZXNvdXJjZSkKK3sKKyAgICBhdXRvKiBjYWxsYmFjayA9IHN0YXRpY19jYXN0PE5lc3RlZEZy
YW1lQ2FsbGJhY2sqPih3bF9yZXNvdXJjZV9nZXRfdXNlcl9kYXRhKHJlc291cmNlKSk7CisgICAg
d2xfbGlzdF9yZW1vdmUoJmNhbGxiYWNrLT5saW5rKTsKKyAgICBkZWxldGUgY2FsbGJhY2s7Cit9
CisKK3ZvaWQgV2F5bGFuZENvbXBvc2l0b3JFR0w6OnJlcXVlc3RGcmFtZShOZXN0ZWRTdXJmYWNl
KiBzdXJmYWNlQmFzZSwgc3RydWN0IHdsX2NsaWVudCogY2xpZW50LCB1aW50MzJfdCBpZCkKK3sK
KyAgICBhdXRvKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8TmVzdGVkU3VyZmFjZUVHTCo+KHN1cmZh
Y2VCYXNlKTsKKworICAgIE5lc3RlZEZyYW1lQ2FsbGJhY2sqIGNhbGxiYWNrID0gbmV3IE5lc3Rl
ZEZyYW1lQ2FsbGJhY2sod2xfcmVzb3VyY2VfY3JlYXRlKGNsaWVudCwKKyAgICAgICAgJndsX2Nh
bGxiYWNrX2ludGVyZmFjZSwgMSwgaWQpKTsKKyAgICB3bF9yZXNvdXJjZV9zZXRfaW1wbGVtZW50
YXRpb24oY2FsbGJhY2stPnJlc291cmNlLCBudWxscHRyLCBjYWxsYmFjaywgZGVzdHJveU5lc3Rl
ZEZyYW1lQ2FsbGJhY2spOworICAgIHdsX2xpc3RfaW5zZXJ0KHN1cmZhY2UtPmZyYW1lQ2FsbGJh
Y2tMaXN0LnByZXYsICZjYWxsYmFjay0+bGluayk7Cit9CisKK3ZvaWQgV2F5bGFuZENvbXBvc2l0
b3JFR0w6OmNvbW1pdFN1cmZhY2UoTmVzdGVkU3VyZmFjZSogc3VyZmFjZUJhc2UsIHN0cnVjdCB3
bF9jbGllbnQqKQoreworICAgIGF1dG8qIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxOZXN0ZWRTdXJm
YWNlRUdMKj4oc3VyZmFjZUJhc2UpOworCisgICAgLy8gTWFrZSB0aGUgcGVuZGluZyBidWZmZXIg
Y3VycmVudCAKKyAgICBOZXN0ZWRCdWZmZXI6OnJlZmVyZW5jZSgmc3VyZmFjZS0+YnVmZmVyUmVm
LCBzdXJmYWNlLT5idWZmZXIpOworCisgICAgLy8gRGVzdHJveSBhbnkgZXhpc3RpbmcgRUdMSW1h
Z2UgZm9yIHRoaXMgc3VyZmFjZQorICAgIGlmIChzdXJmYWNlLT5pbWFnZSAhPSBFR0xfTk9fSU1B
R0VfS0hSKQorICAgICAgICBlZ2xEZXN0cm95SW1hZ2UobV9kaXNwbGF5LmVnbERpc3BsYXksIHN1
cmZhY2UtPmltYWdlKTsKKworICAgIC8vIERlc3Ryb3kgYW55IGV4aXN0aW5nIGNhaXJvIHN1cmZh
Y2UgZm9yIHRoaXMgc3VyZmFjZQorICAgIGlmIChzdXJmYWNlLT5jYWlyb1N1cmZhY2UpIHsKKyAg
ICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UtPmNhaXJvU3VyZmFjZSk7CisgICAg
ICAgIHN1cmZhY2UtPmNhaXJvU3VyZmFjZSA9IG51bGxwdHI7CisgICAgfQorCisgICAgLy8gQ3Jl
YXRlIGEgbmV3IEVHTEltYWdlIGZyb20gdGhlIGxhc3QgYnVmZmVyIGF0dGFjaGVkIHRvIHRoaXMg
c3VyZmFjZQorICAgIHN1cmZhY2UtPmltYWdlID0gc3RhdGljX2Nhc3Q8RUdMSW1hZ2VLSFIqPihl
Z2xDcmVhdGVJbWFnZShtX2Rpc3BsYXkuZWdsRGlzcGxheSwgRUdMX05PX0NPTlRFWFQsCisgICAg
ICAgIEVHTF9XQVlMQU5EX0JVRkZFUl9XTCwgc3VyZmFjZS0+YnVmZmVyLT5yZXNvdXJjZSwgbnVs
bHB0cikpOworICAgIGlmIChzdXJmYWNlLT5pbWFnZSA9PSBFR0xfTk9fSU1BR0VfS0hSKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBCaW5kIHRoZSBzdXJmYWNlIHRleHR1cmUgdG8gdGhlIG5l
dyBFR0xJbWFnZQorICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgc3VyZmFjZS0+dGV4
dHVyZSk7CisgICAgZWdsSW1hZ2VUYXJnZXRUZXh0dXJlMmQoR0xfVEVYVFVSRV8yRCwgc3VyZmFj
ZS0+aW1hZ2UpOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IGNhaXJvIHN1cmZhY2UgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBzdXJmYWNlIHRleHR1cmUKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBl
Z2xRdWVyeUJ1ZmZlcihtX2Rpc3BsYXkuZWdsRGlzcGxheSwgc3VyZmFjZS0+YnVmZmVyLT5yZXNv
dXJjZSwgRUdMX1dJRFRILCAmd2lkdGgpOworICAgIGVnbFF1ZXJ5QnVmZmVyKG1fZGlzcGxheS5l
Z2xEaXNwbGF5LCBzdXJmYWNlLT5idWZmZXItPnJlc291cmNlLCBFR0xfSEVJR0hULCAmaGVpZ2h0
KTsKKyAgICBzdXJmYWNlLT5jYWlyb1N1cmZhY2UgPSBjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9m
b3JfdGV4dHVyZShtX2VnbERldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwKKyAgICAg
ICAgc3VyZmFjZS0+dGV4dHVyZSwgd2lkdGgsIGhlaWdodCk7CisgICAgY2Fpcm9fc3VyZmFjZV9t
YXJrX2RpcnR5KHN1cmZhY2UtPmNhaXJvU3VyZmFjZSk7IC8vIEZJWE1FOiBXaHkgZG8gd2UgbmVl
ZCB0aGlzPworCisgICAgLy8gV2UgYXJlIGRvbmUgd2l0aCB0aGlzIGJ1ZmZlcgorICAgIGlmIChz
dXJmYWNlLT5idWZmZXIpIHsKKyAgICAgICAgd2xfbGlzdF9yZW1vdmUoJnN1cmZhY2UtPmJ1ZmZl
ckRlc3Ryb3lMaXN0ZW5lci5saW5rKTsKKyAgICAgICAgc3VyZmFjZS0+YnVmZmVyID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICAvLyBSZWRyYXcgdGhlIHdpZGdldCBiYWNrZWQgYnkgdGhpcyBzdXJm
YWNlCisgICAgaWYgKHN1cmZhY2UtPndpZGdldCkKKyAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9k
cmF3KHN1cmZhY2UtPndpZGdldCk7CisKKyAgICAvLyBQcm9jZXNzIGZyYW1lIGNhbGxiYWNrcyBm
b3IgdGhpcyBzdXJmYWNlIHNvIHRoZSBjbGllbnQgY2FuIHJlbmRlciBhIG5ldyBmcmFtZQorICAg
IE5lc3RlZEZyYW1lQ2FsbGJhY2sqIG5jOworICAgIE5lc3RlZEZyYW1lQ2FsbGJhY2sqIG5leHQ7
CisgICAgd2xfbGlzdF9mb3JfZWFjaF9zYWZlKG5jLCBuZXh0LCAmc3VyZmFjZS0+ZnJhbWVDYWxs
YmFja0xpc3QsIGxpbmspIHsKKyAgICAgICAgd2xfY2FsbGJhY2tfc2VuZF9kb25lKG5jLT5yZXNv
dXJjZSwgMCk7CisgICAgICAgIHdsX3Jlc291cmNlX2Rlc3Ryb3kobmMtPnJlc291cmNlKTsKKyAg
ICB9CisKKyAgICB3bF9saXN0X2luaXQoJnN1cmZhY2UtPmZyYW1lQ2FsbGJhY2tMaXN0KTsKKyAg
ICB3bF9kaXNwbGF5X2ZsdXNoX2NsaWVudHMobV9kaXNwbGF5LmNoaWxkRGlzcGxheSk7Cit9CisK
K3ZvaWQgV2F5bGFuZENvbXBvc2l0b3JFR0w6OnJlbmRlcihXYXlsYW5kQ29tcG9zaXRvcjo6UmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dEJhc2UpCit7CisgICAgQVNTRVJUKGNvbnRleHRCYXNlLnR5
cGUgPT0gV2F5bGFuZENvbXBvc2l0b3I6OkVHTCk7CisgICAgYXV0byYgY29udGV4dCA9IHN0YXRp
Y19jYXN0PFJlbmRlcmluZ0NvbnRleHQmPihjb250ZXh0QmFzZSk7CisKKyAgICBOZXN0ZWRTdXJm
YWNlKiBzdXJmYWNlQmFzZSA9IG1fd2lkZ2V0SGFzaE1hcC5nZXQoY29udGV4dC53aWRnZXQpOwor
ICAgIGlmICghc3VyZmFjZUJhc2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHN1cmZh
Y2UgPSBzdGF0aWNfY2FzdDxOZXN0ZWRTdXJmYWNlRUdMKj4oc3VyZmFjZUJhc2UpOworICAgIGlm
ICghc3VyZmFjZS0+Y2Fpcm9TdXJmYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb19y
ZWN0YW5nbGUoY29udGV4dC5jciwgY29udGV4dC5jbGlwUmVjdC0+eCwgY29udGV4dC5jbGlwUmVj
dC0+eSwKKyAgICAgICAgY29udGV4dC5jbGlwUmVjdC0+d2lkdGgsIGNvbnRleHQuY2xpcFJlY3Qt
PmhlaWdodCk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNvbnRleHQuY3IsIHN1cmZh
Y2UtPmNhaXJvU3VyZmFjZSwgMCwgMCk7CisgICAgY2Fpcm9fZmlsbChjb250ZXh0LmNyKTsKK30K
KworYm9vbCBXYXlsYW5kQ29tcG9zaXRvckVHTDo6aW5pdGlhbGl6ZUVHTCgpCit7CisgICAgLy8g
RklYTUU6IHdlIHByb2JhYmx5IHdhbnQgdG8gZ2V0IHRoZSBFR0wgY29uZmlndXJhdGlvbiBmcm9t
IEdMQ29udGV4dEVHTAorICAgIHN0YXRpYyBjb25zdCBFR0xpbnQgY29udGV4dEF0dHJpYnV0ZXNb
XSA9IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIsCisgICAgICAgIEVH
TF9OT05FCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgRUdMaW50IGNvbmZpZ0F0dHJpYnV0ZXNb
XSA9IHsKKyAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAor
ICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAorICAg
ICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICBFR0xfU1RFTkNJTF9TSVpFLCA4LAorICAg
ICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdMX1dJ
TkRPV19CSVQsCisgICAgICAgIEVHTF9OT05FCisgICAgfTsKKworICAgIG1fZGlzcGxheS5lZ2xE
aXNwbGF5ID0gZWdsR2V0RGlzcGxheShtX2Rpc3BsYXkud2xEaXNwbGF5KTsKKyAgICBpZiAobV9k
aXNwbGF5LmVnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChlZ2xJbml0aWFsaXplKG1fZGlzcGxheS5lZ2xEaXNwbGF5LCBudWxscHRy
LCBudWxscHRyKSA9PSBFR0xfRkFMU0UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChlZ2xCaW5kQVBJKEVHTF9PUEVOR0xfRVNfQVBJKSA9PSBFR0xfRkFMU0UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGVnbENyZWF0ZUltYWdlID0gKFBGTkVHTENSRUFURUlNQUdFS0hS
UFJPQykgZWdsR2V0UHJvY0FkZHJlc3MoImVnbENyZWF0ZUltYWdlS0hSIik7CisgICAgZWdsRGVz
dHJveUltYWdlID0gKFBGTkVHTERFU1RST1lJTUFHRUtIUlBST0MpIGVnbEdldFByb2NBZGRyZXNz
KCJlZ2xEZXN0cm95SW1hZ2VLSFIiKTsKKyAgICBpZiAoIWVnbENyZWF0ZUltYWdlIHx8ICFlZ2xE
ZXN0cm95SW1hZ2UpIHsKKyAgICAgICAgZ193YXJuaW5nKCJXYXlsYW5kQ29tcG9zaXRvckVHTCBy
ZXF1aXJlcyBlZ2xDcmVhdGVJbWFnZUtIUi4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGVnbEltYWdlVGFyZ2V0VGV4dHVyZTJkID0gKFBGTkdMRUdMSU1BR0VUQVJHRVRU
RVhUVVJFMkRPRVNQUk9DKSBlZ2xHZXRQcm9jQWRkcmVzcygiZ2xFR0xJbWFnZVRhcmdldFRleHR1
cmUyRE9FUyIpOworICAgIGlmICghZWdsSW1hZ2VUYXJnZXRUZXh0dXJlMmQpIHsKKyAgICAgICAg
Z193YXJuaW5nKCJXYXlsYW5kQ29tcG9zaXRvckVHTCByZXF1aXJlcyBnbEVHTEltYWdlVGFyZ2V0
VGV4dHVyZS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGVnbFF1ZXJ5
QnVmZmVyID0gKFBGTkVHTFFVRVJZV0FZTEFOREJVRkZFUldMKSBlZ2xHZXRQcm9jQWRkcmVzcygi
ZWdsUXVlcnlXYXlsYW5kQnVmZmVyV0wiKTsKKyAgICBpZiAoIWVnbFF1ZXJ5QnVmZmVyKSB7Cisg
ICAgICAgIGdfd2FybmluZygiV2F5bGFuZENvbXBvc2l0b3JFR0wgcmVxdWlyZXMgZWdsUXVlcnlC
dWZmZXIuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBFR0xpbnQgbnVt
YmVyT2ZDb25maWdzOworICAgIGlmIChlZ2xDaG9vc2VDb25maWcobV9kaXNwbGF5LmVnbERpc3Bs
YXksIGNvbmZpZ0F0dHJpYnV0ZXMsICZtX2VnbENvbmZpZywgMSwgJm51bWJlck9mQ29uZmlncykg
PT0gRUdMX0ZBTFNFCisgICAgICAgIHx8IG51bWJlck9mQ29uZmlncyAhPSAxKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBtX2VnbENvbnRleHQgPSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlz
cGxheS5lZ2xEaXNwbGF5LCBtX2VnbENvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRBdHRy
aWJ1dGVzKTsKKyAgICBpZiAobV9lZ2xDb250ZXh0ID09IEVHTF9OT19DT05URVhUKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LmVnbERp
c3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9lZ2xDb250ZXh0KSA9PSBF
R0xfRkFMU0UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZWdsRGV2aWNlID0gY2Fp
cm9fZWdsX2RldmljZV9jcmVhdGUobV9kaXNwbGF5LmVnbERpc3BsYXksIG1fZWdsQ29udGV4dCk7
CisgICAgaWYgKGNhaXJvX2RldmljZV9zdGF0dXMobV9lZ2xEZXZpY2UpICE9IENBSVJPX1NUQVRV
U19TVUNDRVNTKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworTmVzdGVkU3VyZmFjZSogV2F5bGFuZENvbXBvc2l0b3JFR0w6OmNyZWF0ZU5lc3RlZFN1cmZh
Y2UoKQoreworICAgIHJldHVybiBuZXcgTmVzdGVkU3VyZmFjZUVHTCh0aGlzKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oV0FZTEFORCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dheWxhbmQvV2F5bGFuZENvbXBvc2l0
b3JFR0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
YXlsYW5kL1dheWxhbmRDb21wb3NpdG9yRUdMLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kL1dheWxhbmRDb21wb3NpdG9yRUdMLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2F5bGFuZENvbXBvc2l0b3JFR0xfaAorI2RlZmlu
ZSBXYXlsYW5kQ29tcG9zaXRvckVHTF9oCisKKyNpZiBQTEFURk9STShXQVlMQU5EKQorCisjaW5j
bHVkZSAiV2F5bGFuZENvbXBvc2l0b3IuaCIKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNs
dWRlIDxHTEVTMi9nbDJleHQuaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGNhaXJv
LWdsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2F5bGFuZENvbXBvc2l0b3JF
R0wgOiBwdWJsaWMgV2F5bGFuZENvbXBvc2l0b3IgeworcHVibGljOgorICAgIFdheWxhbmRDb21w
b3NpdG9yRUdMKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoU3VyZmFjZShOZXN0ZWRTdXJm
YWNlKiwgc3RydWN0IHdsX2NsaWVudCosIHN0cnVjdCB3bF9yZXNvdXJjZSosIGludDMyX3QsIGlu
dDMyX3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWUoTmVzdGVkU3Vy
ZmFjZSosIHN0cnVjdCB3bF9jbGllbnQqLCB1aW50MzJfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGNvbW1pdFN1cmZhY2UoTmVzdGVkU3VyZmFjZSosIHN0cnVjdCB3bF9jbGllbnQqKSBv
dmVycmlkZTsKKworICAgIHN0cnVjdCBSZW5kZXJpbmdDb250ZXh0IDogcHVibGljIFdheWxhbmRD
b21wb3NpdG9yOjpSZW5kZXJpbmdDb250ZXh0IHsKKyAgICAgICAgUmVuZGVyaW5nQ29udGV4dChH
dGtXaWRnZXQqIHdpZGdldCwgY2Fpcm9fdCogY3IsIEdka1JlY3RhbmdsZSogY2xpcFJlY3QpCisg
ICAgICAgICAgICA6IFdheWxhbmRDb21wb3NpdG9yOjpSZW5kZXJpbmdDb250ZXh0KFdheWxhbmRD
b21wb3NpdG9yOjpFR0wpCisgICAgICAgICAgICAsIHdpZGdldCh3aWRnZXQpCisgICAgICAgICAg
ICAsIGNyKGNyKQorICAgICAgICAgICAgLCBjbGlwUmVjdChjbGlwUmVjdCkKKyAgICAgICAgeyB9
CisKKyAgICAgICAgR3RrV2lkZ2V0KiB3aWRnZXQ7CisgICAgICAgIGNhaXJvX3QqIGNyOworICAg
ICAgICBHZGtSZWN0YW5nbGUqIGNsaXBSZWN0OworICAgIH07CisgICAgdmlydHVhbCB2b2lkIHJl
bmRlcihXYXlsYW5kQ29tcG9zaXRvcjo6UmVuZGVyaW5nQ29udGV4dCYpIG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplRUdMKCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBOZXN0ZWRTdXJmYWNlKiBjcmVhdGVOZXN0ZWRTdXJmYWNlKCkgb3ZlcnJpZGU7CisK
KyAgICBFR0xDb25maWcgbV9lZ2xDb25maWc7CisgICAgRUdMQ29udGV4dCBtX2VnbENvbnRleHQ7
CisgICAgY2Fpcm9fZGV2aWNlX3QqIG1fZWdsRGV2aWNlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oV0FZTEFORCkKKworI2VuZGlmIC8vIFdheWxh
bmRDb21wb3NpdG9yRUdMX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>