<?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>200904</bug_id>
          
          <creation_ts>2019-08-19 17:09:33 -0700</creation_ts>
          <short_desc>Implement accelerated video-to-texture upload path for ANGLE backend for WebGL on desktop</short_desc>
          <delta_ts>2020-02-26 17:27:07 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>202780</dependson>
          <blocked>198948</blocked>
    
    <blocked>205734</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>achristensen</cc>
    
    <cc>dino</cc>
    
    <cc>enga</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>jdarpinian</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kainino</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1562854</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2019-08-19 17:09:33 -0700</bug_when>
    <thetext>The accelerated video-to-WebGL-texture upload path in Source/WebCore/platform/graphics/cv/VideoTextureCopierCV.cpp and related files is currently #ifdef&apos;d out for the ANGLE backend for WebGL. From examining the code and after discussion with Geoff Lang and Jamie Madill from the ANGLE team, in order to implement it, it seems a few changes will be necessary: (these are only for desktop GL; more work will be needed for iOS and OpenGL ES):

1) A new ANGLE extension needs to be defined to expose the CGLContextObj and CGLPixelFormatObj associated with the EGLDisplay.

2) A new ANGLE extension needs to be defined to allow creation of a pbuffer from a client buffer which is actually a driver-level OpenGL texture ID.

3) TextureCacheCV will need to be changed to allocate a separate OpenGL context sharing resources with ANGLE&apos;s, and allocate the CVOpenGLTextureCacheCreate with that separate context. textureFromImage will get the native texture from the CVOpenGLTextureCache and import it into ANGLE&apos;s context as a pbuffer, then bind it to a texture ANGLE can reference. At that point, the rest of the code in VideoTextureCopierCV should be able to operate against the texture in ANGLE&apos;s context. Some of the shaders may need to be ported to use ANGLE&apos;s rectangular texture extensions.

This bug might end up being a meta-bug, since at least one ANGLE roll will be needed for the above changes.

There&apos;s also an IOSurface code path in VideoTextureCopierCV::copyImageToPlatformTexture; I haven&apos;t figured out whether that&apos;s usually taken and whether it&apos;s important to implement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588795</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2019-11-08 13:24:51 -0800</bug_when>
    <thetext>Ran into a slight problem while hooking everything up. It looks like along with the OpenGL deprecation on macOS, CVOpenGLTextureCache has effectively been disabled. The call to CVOpenGLTextureCacheCreateTextureFromImage here:

https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/cv/TextureCacheCV.mm#L86

returns -6683, which is kCVReturnPixelBufferNotOpenGLCompatible ( /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreVideo.framework/Versions/A/Headers/CVReturn.h ).

It therefore looks like the EGL_ANGLE_opengl_texture_client_buffer proposed extension isn&apos;t actually needed, and the existing EGL_ANGLE_iosurface_client_buffer extension can be used for this purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588985</commentid>
    <comment_count>2</comment_count>
      <attachid>383207</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2019-11-09 00:45:53 -0800</bug_when>
    <thetext>Created attachment 383207
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588986</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2019-11-09 00:48:45 -0800</bug_when>
    <thetext>The EGL_ANGLE_iosurface_client_buffer extension already did everything needed. After only a couple of compile and minor runtime issues, this &quot;just worked&quot;! Tested with the ANGLE backend on macOS with Mozilla&apos;s &quot;Animating textures in WebGL&quot; article. The new code path is being taken, and works!

James (jdarpinian@), could you please take this over if any updates to the code are needed? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589038</commentid>
    <comment_count>4</comment_count>
      <attachid>383207</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-09 13:53:46 -0800</bug_when>
    <thetext>Comment on attachment 383207
Patch

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

cool

&gt; Source/WebCore/platform/graphics/cv/VideoTextureCopierCV.cpp:50
&gt; +// Skip the inclusion of ANGLE&apos;s explicit context entry points for now.

for now?

&gt; Source/WebCore/platform/graphics/cv/VideoTextureCopierCV.cpp:757
&gt; +    EGLSurface pbuffer = EGL_CreatePbufferFromClientBuffer(display, EGL_IOSURFACE_ANGLE, surface, m_context-&gt;platformConfig(), surfaceAttributes);

Is there a way we could return a std::unique_ptr with a custom deleter that to make the memory management model a little more sane?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591831</commentid>
    <comment_count>5</comment_count>
      <attachid>383207</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2019-11-19 18:38:01 -0800</bug_when>
    <thetext>Comment on attachment 383207
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/cv/VideoTextureCopierCV.cpp:50
&gt;&gt; +// Skip the inclusion of ANGLE&apos;s explicit context entry points for now.
&gt; 
&gt; for now?

We might later try to use those in order to avoid a thread-local storage lookup for every call into ANGLE. Other files with changes to use ANGLE have the same comment.

&gt;&gt; Source/WebCore/platform/graphics/cv/VideoTextureCopierCV.cpp:757
&gt;&gt; +    EGLSurface pbuffer = EGL_CreatePbufferFromClientBuffer(display, EGL_IOSURFACE_ANGLE, surface, m_context-&gt;platformConfig(), surfaceAttributes);
&gt; 
&gt; Is there a way we could return a std::unique_ptr with a custom deleter that to make the memory management model a little more sane?

These are the semantics of the standard EGL APIs. Yes, we could consider adding wrappers but could we do that as a later refactor to more of the code which uses ANGLE? There are multiple other places (like WebGLLayer.mm) which manually create and delete pbuffers which should be changed too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592430</commentid>
    <comment_count>6</comment_count>
      <attachid>383207</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-11-21 10:34:25 -0800</bug_when>
    <thetext>Comment on attachment 383207
Patch

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

I&apos;ll land manually.

&gt; Source/WebCore/ChangeLog:13
&gt; +        Uses the EGL_ANGLE_iosurface_client_buffer extension to import
&gt; +        IOSurfaces; reuses all of the existing shader and OpenGL code.

Not important to this patch, but I&apos;ll mention to anyone watching that we don&apos;t yet have a solution for this in the iOS simulator (where we cannot bind IOSurface to GL).

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:748
&gt; +        // Necessary desktop OpenGL constants

Nit: End with period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592570</commentid>
    <comment_count>7</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-11-21 15:58:36 -0800</bug_when>
    <thetext>Committed r252741: &lt;https://trac.webkit.org/changeset/252741&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592572</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-21 15:59:30 -0800</bug_when>
    <thetext>&lt;rdar://problem/57411766&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383207</attachid>
            <date>2019-11-09 00:45:53 -0800</date>
            <delta_ts>2019-11-21 10:34:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200904-20191109004552.patch</filename>
            <type>text/plain</type>
            <size>18665</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY5N2FjY2EwMGJlNTI0
NjcyMDYyZGNiYTkzYzk2NDZlN2QwMzQxYy4uNDMzZmE4YjIxNzQ2NzVhNWY2Y2ZkMDUwZWQ4YTFj
ZWE0NWE1NmJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE5LTExLTA5ICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEltcGxlbWVudCBhY2Nl
bGVyYXRlZCB2aWRlby10by10ZXh0dXJlIHVwbG9hZCBwYXRoIGZvciBBTkdMRSBiYWNrZW5kIGZv
ciBXZWJHTCBvbiBkZXNrdG9wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDA5MDQKKworICAgICAgICBTdXBwb3J0IEdQVS1hY2NlbGVyYXRlZCB2aWRl
byB1cGxvYWRzIHRvIFdlYkdMIHRleHR1cmVzIHdpdGggQU5HTEUuCisKKyAgICAgICAgVXNlcyB0
aGUgSU9TdXJmYWNlIHBhdGgsIGFzIHRoZSBDVk9wZW5HTFRleHR1cmVDYWNoZSBzZWVtcyB0byBo
YXZlCisgICAgICAgIGJlZW4gZGlzYWJsZWQgYXQgdGhlIE9TIGxldmVsLCBldmVuIG9uIHRvcC1v
Zi10cmVlIFdlYktpdCB3aXRob3V0CisgICAgICAgIHVzaW5nIEFOR0xFLgorCisgICAgICAgIFVz
ZXMgdGhlIEVHTF9BTkdMRV9pb3N1cmZhY2VfY2xpZW50X2J1ZmZlciBleHRlbnNpb24gdG8gaW1w
b3J0CisgICAgICAgIElPU3VyZmFjZXM7IHJldXNlcyBhbGwgb2YgdGhlIGV4aXN0aW5nIHNoYWRl
ciBhbmQgT3BlbkdMIGNvZGUuCisKKyAgICAgICAgTmVjZXNzYXJ5IG90aGVyIGZpeGVzIHRvIEdy
YXBoaWNzQ29udGV4dDNEJ3MgQU5HTEUgYmFja2VuZDogc3VwcG9ydGluZworICAgICAgICBjb250
ZXh0IHNoYXJpbmcsIGFuZCBxdWVyeWluZyB0aGUgc2VsZWN0ZWQgRUdMQ29uZmlnLgorCisgICAg
ICAgIENvdmVyZWQgYnkgV2ViR0wgY29uZm9ybWFuY2UgdGVzdHMuIFZlcmlmaWVkIHNwZWVkdXAg
d2l0aAorICAgICAgICAiQW5pbWF0aW5nIHRleHR1cmVzIGluIFdlYkdMIiBNRE4gYXJ0aWNsZS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cGxhdGZvcm1EaXNwbGF5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUNvbmZpZyBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRpYWxpemVDb250ZXh0T2JqZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RleHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6ZVVW
Q29udGV4dE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9UZXh0dXJlQ29waWVyQ1Y6
OmF0dGFjaElPU3VyZmFjZVRvVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb1RleHR1
cmVDb3BpZXJDVjo6ZGV0YWNoSU9TdXJmYWNlRnJvbVRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlJbWFnZVRvUGxhdGZvcm1UZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5VmlkZW9UZXh0dXJlVG9Q
bGF0Zm9ybVRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4
dHVyZUNvcGllckNWLmg6CisKIDIwMTktMTEtMDggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBw
bGUuY29tPgogCiAgICAgICAgIFN0eWxlUmVzb2x2ZXIgc3RhdGUgc2hvdWxkIHN0b3JlIHVzZXIg
YWdlbnQgYXBwZWFyYW5jZSBzdHlsZSBhcyBSZW5kZXJTdHlsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggOGFkYjYz
NmI5N2I2Njg3MjQ5OWFlNmUxN2E0YWQ3Nzg1MDZjNjRkZC4uZDQ0NmY4Mzc2NjIxNjUxNDVjZjMw
YTM0MjAzMmEwNTNjMDAzMTY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC03NDMsNyArNzQzLDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgUFJJTUlUSVZFX1JFU1RBUlQgPSAweDhGOUQsCiAKICAgICAgICAgLy8gT3Bl
bkdMIEVTIDMgY29uc3RhbnRzCi0gICAgICAgIE1BUF9SRUFEX0JJVCA9IDB4MDAwMQorICAgICAg
ICBNQVBfUkVBRF9CSVQgPSAweDAwMDEsCisKKyAgICAgICAgLy8gTmVjZXNzYXJ5IGRlc2t0b3Ag
T3BlbkdMIGNvbnN0YW50cworICAgICAgICBURVhUVVJFX1JFQ1RBTkdMRV9BUkIgPSAweDg0RjUK
ICAgICB9OwogCiAgICAgZW51bSBSZW5kZXJTdHlsZSB7CkBAIC03NzcsNiArNzgwLDEwIEBAIHB1
YmxpYzoKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRPYmo7IH0KICAgICBQbGF0Zm9ybTNET2Jq
ZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQogICAgIENB
TGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PENB
TGF5ZXIqPihtX3dlYkdMTGF5ZXIuZ2V0KCkpOyB9CisjaWYgVVNFKEFOR0xFKQorICAgIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0REaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlzcGxheU9iajsgfQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RDb25maWcg
cGxhdGZvcm1Db25maWcoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ09iajsgfQorI2VuZGlmIC8v
IFVTRShBTkdMRSkKICNlbHNlCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKCk7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1
cmUoKSBjb25zdDsKQEAgLTEzODAsNiArMTM4Nyw3IEBAIHByaXZhdGU6CiAgICAgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCBtX2NvbnRleHRPYmogeyBudWxscHRyIH07CiAjaWYgVVNFKEFOR0xF
KQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0REaXNwbGF5IG1fZGlzcGxheU9iaiB7IG51
bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEQ29uZmlnIG1fY29uZmlnT2Jq
IHsgbnVsbHB0ciB9OwogI2VuZGlmIC8vIFVTRShBTkdMRSkKICNlbmRpZiAvLyBQTEFURk9STShD
T0NPQSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0KaW5kZXggZDFhZjgwM2YzOGQ5
ZmJkNTU5ZjM1YjFjNWFmYmI5ZDk4OGNlMWIzZS4uMGQ1ODM3Y2RmMzU4Y2QzZGYzYWY4OGI5NmFl
ZTAyOWY3MWQ3MTEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tCkBAIC0yOTAs
NyArMjkwLDYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmQKICNlbGlmIFVTRShBTkdMRSkKIAog
ICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKLSAgICBVTlVTRURfUEFSQU0oc2hhcmVkQ29u
dGV4dCk7CiAKICAgICBtX2Rpc3BsYXlPYmogPSBFR0xfR2V0RGlzcGxheShFR0xfREVGQVVMVF9E
SVNQTEFZKTsKICAgICBpZiAobV9kaXNwbGF5T2JqID09IEVHTF9OT19ESVNQTEFZKQpAQCAtMzA0
LDcgKzMwMyw2IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGlj
c0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kCiAgICAgY29uc3QgY2hhciAqZGlz
cGxheUV4dGVuc2lvbnMgPSBFR0xfUXVlcnlTdHJpbmcobV9kaXNwbGF5T2JqLCBFR0xfRVhURU5T
SU9OUyk7CiAgICAgTE9HKFdlYkdMLCAiRXh0ZW5zaW9uczogJXMiLCBkaXNwbGF5RXh0ZW5zaW9u
cyk7CiAKLSAgICBFR0xDb25maWcgY29uZmlnOwogICAgIEVHTGludCBjb25maWdBdHRyaWJ1dGVz
W10gPSB7CiAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwK
ICAgICAgICAgRUdMX1JFRF9TSVpFLCA4LApAQCAtMzE0LDcgKzMxMiw3IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0
cnMsIEhvc3RXaW5kCiAgICAgICAgIEVHTF9OT05FCiAgICAgfTsKICAgICBFR0xpbnQgbnVtYmVy
Q29uZmlnc1JldHVybmVkID0gMDsKLSAgICBFR0xfQ2hvb3NlQ29uZmlnKG1fZGlzcGxheU9iaiwg
Y29uZmlnQXR0cmlidXRlcywgJmNvbmZpZywgMSwgJm51bWJlckNvbmZpZ3NSZXR1cm5lZCk7Cisg
ICAgRUdMX0Nob29zZUNvbmZpZyhtX2Rpc3BsYXlPYmosIGNvbmZpZ0F0dHJpYnV0ZXMsICZtX2Nv
bmZpZ09iaiwgMSwgJm51bWJlckNvbmZpZ3NSZXR1cm5lZCk7CiAgICAgaWYgKG51bWJlckNvbmZp
Z3NSZXR1cm5lZCAhPSAxKSB7CiAgICAgICAgIExPRyhXZWJHTCwgIkVHTENvbmZpZyBJbml0aWFs
aXphdGlvbiBmYWlsZWQuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTM0OSw3ICszNDcsNyBAQCBH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0RBdHRy
aWJ1dGVzIGF0dHJzLCBIb3N0V2luZAogICAgIH0KICAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNo
X2JhY2soRUdMX05PTkUpOwogCi0gICAgbV9jb250ZXh0T2JqID0gRUdMX0NyZWF0ZUNvbnRleHQo
bV9kaXNwbGF5T2JqLCBjb25maWcsIEVHTF9OT19DT05URVhULCBjb250ZXh0QXR0cmlidXRlcy5k
YXRhKCkpOworICAgIG1fY29udGV4dE9iaiA9IEVHTF9DcmVhdGVDb250ZXh0KG1fZGlzcGxheU9i
aiwgbV9jb25maWdPYmosIHNoYXJlZENvbnRleHQgPyBzdGF0aWNfY2FzdDxFR0xDb250ZXh0Pihz
aGFyZWRDb250ZXh0LT5tX2NvbnRleHRPYmopIDogRUdMX05PX0NPTlRFWFQsIGNvbnRleHRBdHRy
aWJ1dGVzLmRhdGEoKSk7CiAgICAgaWYgKG1fY29udGV4dE9iaiA9PSBFR0xfTk9fQ09OVEVYVCkg
ewogICAgICAgICBMT0coV2ViR0wsICJFR0xDb250ZXh0IEluaXRpYWxpemF0aW9uIGZhaWxlZC4i
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzg3LDcgKzM4NSw3IEBAIEdyYXBoaWNzQ29udGV4dDNE
OjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMsIEhv
c3RXaW5kCiAgICAgICAgIFttX3dlYkdMTGF5ZXIgc2V0TmFtZTpAIldlYkdMIExheWVyIl07CiAj
ZW5kaWYKICNpZiBVU0UoQU5HTEUpCi0gICAgICAgIFttX3dlYkdMTGF5ZXIgc2V0RUdMRGlzcGxh
eTptX2Rpc3BsYXlPYmogY29uZmlnOmNvbmZpZ107CisgICAgICAgIFttX3dlYkdMTGF5ZXIgc2V0
RUdMRGlzcGxheTptX2Rpc3BsYXlPYmogY29uZmlnOm1fY29uZmlnT2JqXTsKICNlbmRpZgogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwCmluZGV4
IGQ3YTZiYTExYjJiZjNjNzY2YzlmNWJhOWNhOGFjNDFjOGU5YzExMGEuLjEyMDcyNGRlYzljYWUz
YmNhNzBiYWEzMGQ3ZmMzMDY3ZmU5MzBkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAKQEAg
LTQwLDYgKzQwLDE5IEBACiAjaW5jbHVkZSA8T3BlbkdMRVMvRVMzL2dsZXh0Lmg+CiAjZW5kaWYK
IAorI2lmIFVTRShBTkdMRSkKKyNkZWZpbmUgRUdMX0VHTF9QUk9UT1RZUEVTIDAKKyNpbmNsdWRl
IDxBTkdMRS9lZ2wuaD4KKyNpbmNsdWRlIDxBTkdMRS9lZ2xleHQuaD4KKyNpbmNsdWRlIDxBTkdM
RS9lZ2xleHRfYW5nbGUuaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZWdsLmg+Cisj
aW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4KKy8vIFNraXAg
dGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50cnkgcG9pbnRzIGZv
ciBub3cuCisjZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKKyNpbmNsdWRlIDxBTkdM
RS9nbDJleHQuaD4KKyNpbmNsdWRlIDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KKyNlbmRpZgorCiAj
aW5jbHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NTE1LDE0ICs1MjgsMTMgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6ZUNv
bnRleHRPYmplY3RzKCkKIAogICAgIFN0cmluZ0J1aWxkZXIgZnJhZ21lbnRTaGFkZXJTb3VyY2U7
CiAKLSNpZiBVU0UoT1BFTkdMX0VTKQorI2lmIFVTRShPUEVOR0xfRVMpIHx8IFVTRShBTkdMRSkK
ICAgICBmcmFnbWVudFNoYWRlclNvdXJjZS5hcHBlbmRMaXRlcmFsKCJwcmVjaXNpb24gbWVkaXVt
cCBmbG9hdDtcbiIpOworI2VuZGlmCisjaWYgVVNFKE9QRU5HTF9FUykgfHwgKFVTRShBTkdMRSkg
JiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkpCiAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UuYXBwZW5k
TGl0ZXJhbCgidW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xuIik7Ci0jZWxpZiBVU0UoT1BF
TkdMKQorI2VsaWYgVVNFKE9QRU5HTCkgfHwgKFVTRShBTkdMRSkgJiYgIVBMQVRGT1JNKElPU19G
QU1JTFkpKQogICAgIGZyYWdtZW50U2hhZGVyU291cmNlLmFwcGVuZExpdGVyYWwoInVuaWZvcm0g
c2FtcGxlcjJEUmVjdCB1X3RleHR1cmU7XG4iKTsKLSNlbGlmIFVTRShBTkdMRSkKLSAgICAvLyBG
SVhNRTogZGV0ZXJtaW5lIGhvdyB0byBhY2Nlc3MgcmVjdGFuZ3VsYXIgdGV4dHVyZXMgdmlhIEFO
R0xFLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2Vsc2UKICNlcnJvciBVbnN1cHBvcnRl
ZCBjb25maWd1cmF0aW9uCiAjZW5kaWYKQEAgLTUzMiwxMyArNTQ0LDEwIEBAIGJvb2wgVmlkZW9U
ZXh0dXJlQ29waWVyQ1Y6OmluaXRpYWxpemVDb250ZXh0T2JqZWN0cygpCiAgICAgZnJhZ21lbnRT
aGFkZXJTb3VyY2UuYXBwZW5kTGl0ZXJhbCgidW5pZm9ybSBpbnQgdV9zd2FwQ29sb3JDaGFubmVs
cztcbiIpOwogICAgIGZyYWdtZW50U2hhZGVyU291cmNlLmFwcGVuZExpdGVyYWwoInZvaWQgbWFp
bigpIHtcbiIpOwogICAgIGZyYWdtZW50U2hhZGVyU291cmNlLmFwcGVuZExpdGVyYWwoIiAgICB2
ZWMyIHRleFBvcyA9IHZlYzIodl90ZXh0dXJlUG9zaXRpb24ueCAqIHVfdGV4dHVyZURpbWVuc2lv
bnMueCwgdl90ZXh0dXJlUG9zaXRpb24ueSAqIHVfdGV4dHVyZURpbWVuc2lvbnMueSk7XG4iKTsK
LSNpZiBVU0UoT1BFTkdMX0VTKQorI2lmIFVTRShPUEVOR0xfRVMpIHx8IChVU0UoQU5HTEUpICYm
IFBMQVRGT1JNKElPU19GQU1JTFkpKQogICAgIGZyYWdtZW50U2hhZGVyU291cmNlLmFwcGVuZExp
dGVyYWwoIiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVfdGV4dHVyZSwgdGV4UG9zKTtcbiIp
OwotI2VsaWYgVVNFKE9QRU5HTCkKKyNlbGlmIFVTRShPUEVOR0wpIHx8IChVU0UoQU5HTEUpICYm
ICFQTEFURk9STShJT1NfRkFNSUxZKSkKICAgICBmcmFnbWVudFNoYWRlclNvdXJjZS5hcHBlbmRM
aXRlcmFsKCIgICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3QodV90ZXh0dXJlLCB0ZXhQb3Mp
O1xuIik7Ci0jZWxpZiBVU0UoQU5HTEUpCi0gICAgLy8gRklYTUU6IGRldGVybWluZSBob3cgdG8g
YWNjZXNzIHJlY3Rhbmd1bGFyIHRleHR1cmVzIHZpYSBBTkdMRS4KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICNlbHNlCiAjZXJyb3IgVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbgogI2VuZGlm
CkBAIC02MTgsMTQgKzYyNywxMiBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFs
aXplVVZDb250ZXh0T2JqZWN0cygpCiAgICAgICAgICIgICBpZiAodV9mbGlwWSA9PSAxKSB7XG4i
CiAgICAgICAgICIgICAgICAgbm9ybWFsaXplZFBvc2l0aW9uLnkgPSAxLjAgLSBub3JtYWxpemVk
UG9zaXRpb24ueTtcbiIKICAgICAgICAgIiAgIH1cbiIKLSNpZiBVU0UoT1BFTkdMX0VTKQorI2lm
IFVTRShPUEVOR0xfRVMpIHx8IChVU0UoQU5HTEUpICYmIFBMQVRGT1JNKElPU19GQU1JTFkpKQog
ICAgICAgICAiICAgdl95VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247XG4i
CiAgICAgICAgICIgICB2X3V2VGV4dHVyZUNvb3JkaW5hdGUgPSBub3JtYWxpemVkUG9zaXRpb247
XG4iCi0jZWxpZiBVU0UoT1BFTkdMKQorI2VsaWYgVVNFKE9QRU5HTCkgfHwgKFVTRShBTkdMRSkg
JiYgIVBMQVRGT1JNKElPU19GQU1JTFkpKQogICAgICAgICAiICAgdl95VGV4dHVyZUNvb3JkaW5h
dGUgPSBub3JtYWxpemVkUG9zaXRpb24gKiB1X3lUZXh0dXJlU2l6ZTtcbiIKICAgICAgICAgIiAg
IHZfdXZUZXh0dXJlQ29vcmRpbmF0ZSA9IG5vcm1hbGl6ZWRQb3NpdGlvbiAqIHVfdXZUZXh0dXJl
U2l6ZTtcbiIKLSNlbGlmIFVTRShBTkdMRSkKLSAgICAgICAgLy8gRklYTUU6IGRldGVybWluZSBo
b3cgdG8gYWNjZXNzIHJlY3Rhbmd1bGFyIHRleHR1cmVzIHZpYSBBTkdMRS4KICNlbHNlCiAjZXJy
b3IgVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbgogI2VuZGlmCkBAIC02NDUsMTUgKzY1MiwxNSBA
QCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cygp
CiAgICAgfQogCiAgICAgU3RyaW5nIGZyYWdtZW50U2hhZGVyU291cmNlIHsKLSNpZiBVU0UoT1BF
TkdMX0VTKQorI2lmIFVTRShPUEVOR0xfRVMpIHx8IFVTRShBTkdMRSkKICAgICAgICAgInByZWNp
c2lvbiBtZWRpdW1wIGZsb2F0O1xuIgorI2VuZGlmCisjaWYgVVNFKE9QRU5HTF9FUykgfHwgKFVT
RShBTkdMRSkgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkpCiAgICAgICAgICIjZGVmaW5lIFNBTVBM
RVJUWVBFIHNhbXBsZXIyRFxuIgogICAgICAgICAiI2RlZmluZSBURVhUVVJFRlVOQyB0ZXh0dXJl
MkRcbiIKLSNlbGlmIFVTRShPUEVOR0wpCisjZWxpZiBVU0UoT1BFTkdMKSB8fCAoVVNFKEFOR0xF
KSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkpCiAgICAgICAgICIjZGVmaW5lIFNBTVBMRVJUWVBF
IHNhbXBsZXIyRFJlY3RcbiIKICAgICAgICAgIiNkZWZpbmUgVEVYVFVSRUZVTkMgdGV4dHVyZTJE
UmVjdFxuIgotI2VsaWYgVVNFKEFOR0xFKQotICAgICAgICAvLyBGSVhNRTogZGV0ZXJtaW5lIGhv
dyB0byBhY2Nlc3MgcmVjdGFuZ3VsYXIgdGV4dHVyZXMgdmlhIEFOR0xFLgogI2Vsc2UKICNlcnJv
ciBVbnN1cHBvcnRlZCBjb25maWd1cmF0aW9uCiAjZW5kaWYKQEAgLTcyMiw4ICs3MjksNTcgQEAg
Ym9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6ZVVWQ29udGV4dE9iamVjdHMoKQog
ICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgVVNFKEFOR0xFKQordm9pZCogVmlkZW9UZXh0dXJl
Q29waWVyQ1Y6OmF0dGFjaElPU3VyZmFjZVRvVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIHR5cGUsIElPU3VyZmFjZVJlZiBzdXJmYWNlLCBHQzNEdWludCBwbGFuZSkKK3sKKyAg
ICBhdXRvIGRpc3BsYXkgPSBtX2NvbnRleHQtPnBsYXRmb3JtRGlzcGxheSgpOworICAgIEVHTGlu
dCBlZ2xUZXh0dXJlVGFyZ2V0ID0gMDsKKworICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQikKKyAgICAgICAgZWdsVGV4dHVyZVRhcmdldCA9
IEVHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRTsKKyAgICBlbHNlIGlmICh0YXJnZXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpCisgICAgICAgIGVnbFRleHR1cmVUYXJnZXQgPSBF
R0xfVEVYVFVSRV8yRDsKKyAgICBlbHNlIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiVW5rbm93biB0
ZXh0dXJlIHRhcmdldCAlZC4iLCBzdGF0aWNfY2FzdDxpbnQ+KHRhcmdldCkpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBjb25zdCBFR0xpbnQgc3VyZmFjZUF0dHJpYnV0
ZXNbXSA9IHsKKyAgICAgICAgRUdMX1dJRFRILCB3aWR0aCwKKyAgICAgICAgRUdMX0hFSUdIVCwg
aGVpZ2h0LAorICAgICAgICBFR0xfSU9TVVJGQUNFX1BMQU5FX0FOR0xFLCBzdGF0aWNfY2FzdDxF
R0xpbnQ+KHBsYW5lKSwKKyAgICAgICAgRUdMX1RFWFRVUkVfVEFSR0VULCBzdGF0aWNfY2FzdDxF
R0xpbnQ+KGVnbFRleHR1cmVUYXJnZXQpLAorICAgICAgICBFR0xfVEVYVFVSRV9JTlRFUk5BTF9G
T1JNQVRfQU5HTEUsIHN0YXRpY19jYXN0PEVHTGludD4oaW50ZXJuYWxGb3JtYXQpLAorICAgICAg
ICBFR0xfVEVYVFVSRV9GT1JNQVQsIEVHTF9URVhUVVJFX1JHQkEsCisgICAgICAgIEVHTF9URVhU
VVJFX1RZUEVfQU5HTEUsIHN0YXRpY19jYXN0PEVHTGludD4odHlwZSksCisgICAgICAgIEVHTF9O
T05FLCBFR0xfTk9ORQorICAgIH07CisgICAgRUdMU3VyZmFjZSBwYnVmZmVyID0gRUdMX0NyZWF0
ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKGRpc3BsYXksIEVHTF9JT1NVUkZBQ0VfQU5HTEUsIHN1
cmZhY2UsIG1fY29udGV4dC0+cGxhdGZvcm1Db25maWcoKSwgc3VyZmFjZUF0dHJpYnV0ZXMpOwor
ICAgIGlmICghcGJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFFR0xf
QmluZFRleEltYWdlKGRpc3BsYXksIHBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsKKyAgICAg
ICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKGRpc3BsYXksIHBidWZmZXIpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHBidWZmZXI7Cit9CisKK3ZvaWQgVmlkZW9UZXh0
dXJlQ29waWVyQ1Y6OmRldGFjaElPU3VyZmFjZUZyb21UZXh0dXJlKHZvaWQqIGhhbmRsZSkKK3sK
KyAgICBhdXRvIGRpc3BsYXkgPSBtX2NvbnRleHQtPnBsYXRmb3JtRGlzcGxheSgpOworICAgIEVH
TF9SZWxlYXNlVGV4SW1hZ2UoZGlzcGxheSwgaGFuZGxlLCBFR0xfQkFDS19CVUZGRVIpOworICAg
IEVHTF9EZXN0cm95U3VyZmFjZShkaXNwbGF5LCBoYW5kbGUpOworfQorI2VuZGlmCisKIGJvb2wg
VmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlJbWFnZVRvUGxhdGZvcm1UZXh0dXJlKENWUGl4ZWxC
dWZmZXJSZWYgaW1hZ2UsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgUGxhdGZvcm0zRE9i
amVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKIHsKKyAgICAvLyBDVk9wZW5HTFRl
eHR1cmVDYWNoZSBzZWVtcyB0byBiZSBkaXNhYmxlZCBzaW5jZSB0aGUgZGVwcmVjYXRpb24gb2YK
KyAgICAvLyBPcGVuR0wuIFRvIGF2b2lkIHBvcnRpbmcgdW51c2VkIGNvZGUgdG8gdGhlIEFOR0xF
IGNvZGUgcGF0aHMsIHJlbW92ZSBpdC4KKyNpZiBVU0UoQU5HTEUpCisgICAgVU5VU0VEX1BBUkFN
KG91dHB1dFRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKHByZW11bHRpcGx5QWxwaGEpOworI2Vs
c2UKICAgICBpZiAoIW1fdGV4dHVyZUNhY2hlKSB7CiAgICAgICAgIG1fdGV4dHVyZUNhY2hlID0g
VGV4dHVyZUNhY2hlQ1Y6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBpZiAoIW1fdGV4dHVy
ZUNhY2hlKQpAQCAtNzM4LDYgKzc5NCw3IEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNv
cHlJbWFnZVRvUGxhdGZvcm1UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsIHNpCiAjZW5k
aWYKICAgICAgICAgcmV0dXJuIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSh0ZXh0
dXJlLmdldCgpLCB3aWR0aCwgaGVpZ2h0LCBvdXRwdXRUZXh0dXJlLCBvdXRwdXRUYXJnZXQsIGxl
dmVsLCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhLCBmbGlw
WSwgc3dhcENvbG9yQ2hhbm5lbHMpOwogICAgIH0KKyNlbmRpZiAvLyBVU0UoQU5HTEUpCiAKICNp
ZiBIQVZFKElPU1VSRkFDRSkKICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgb25seSBzdXBw
b3J0cyAnNDIwdicgYW5kICc0MjBmJyBwaXhlbCBmb3JtYXRzLiBJbnZlc3RpZ2F0ZSBzdXBwb3J0
aW5nIG1vcmUgcGl4ZWwgZm9ybWF0cy4KQEAgLTc5NCwxMyArODUxLDEwIEBAIGJvb2wgVmlkZW9U
ZXh0dXJlQ29waWVyQ1Y6OmNvcHlJbWFnZVRvUGxhdGZvcm1UZXh0dXJlKENWUGl4ZWxCdWZmZXJS
ZWYgaW1hZ2UsIHNpCiAgICAgYXV0byB1dlBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9m
UGxhbmUoc3VyZmFjZSwgMSk7CiAgICAgYXV0byB1dlBsYW5lSGVpZ2h0ID0gSU9TdXJmYWNlR2V0
SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAxKTsKIAotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgR0Mz
RGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ7
Ci0jZWxpZiBVU0UoT1BFTkdMKQotICAgIEdDM0RlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IEdM
X1RFWFRVUkVfUkVDVEFOR0xFX0FSQjsKLSNlbGlmIFVTRShBTkdMRSkKLSAgICAvLyBGSVhNRTog
ZGV0ZXJtaW5lIGhvdyB0byBhY2Nlc3MgcmVjdGFuZ3VsYXIgdGV4dHVyZXMgdmlhIEFOR0xFLgor
I2lmIFVTRShPUEVOR0xfRVMpIHx8IChVU0UoQU5HTEUpICYmIFBMQVRGT1JNKElPU19GQU1JTFkp
KQogICAgIEdDM0RlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJEOworI2VsaWYgVVNFKE9QRU5HTCkgfHwgKFVTRShBTkdMRSkgJiYgIVBMQVRGT1JN
KElPU19GQU1JTFkpKQorICAgIEdDM0RlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkI7CiAjZWxzZQogI2Vycm9yIFVuc3VwcG9y
dGVkIGNvbmZpZ3VyYXRpb24KICNlbmRpZgpAQCAtODExLDEwICs4NjUsMTggQEAgYm9vbCBWaWRl
b1RleHR1cmVDb3BpZXJDVjo6Y29weUltYWdlVG9QbGF0Zm9ybVRleHR1cmUoQ1ZQaXhlbEJ1ZmZl
clJlZiBpbWFnZSwgc2kKICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKTsKICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0
dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKTsKICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyNpZiBVU0UoQU5HTEUpCisgICAgYXV0byB1
dkhhbmRsZSA9IGF0dGFjaElPU3VyZmFjZVRvVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIEdy
YXBoaWNzQ29udGV4dDNEOjpSRywgdXZQbGFuZVdpZHRoLCB1dlBsYW5lSGVpZ2h0LCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgaWYgKCF1dkhhbmRs
ZSkgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUodXZUZXh0dXJlKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbHNlCiAgICAgaWYgKCFtX2NvbnRleHQtPnRleElt
YWdlSU9TdXJmYWNlMkQodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6Ukcs
IHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSkpIHsKICAgICAgICAgbV9j
b250ZXh0LT5kZWxldGVUZXh0dXJlKHV2VGV4dHVyZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CisjZW5kaWYgLy8gVVNFKEFOR0xFKQogCiAgICAgYXV0byB5VGV4dHVyZSA9IG1fY29u
dGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwogICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwpAQCAtODIzLDExICs4ODUsMjAgQEAgYm9vbCBWaWRl
b1RleHR1cmVDb3BpZXJDVjo6Y29weUltYWdlVG9QbGF0Zm9ybVRleHR1cmUoQ1ZQaXhlbEJ1ZmZl
clJlZiBpbWFnZSwgc2kKICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKTsKICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0
dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKTsKICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyNpZiBVU0UoQU5HTEUpCisgICAgYXV0byB5
SGFuZGxlID0gYXR0YWNoSU9TdXJmYWNlVG9UZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFRCwgeVBsYW5lV2lkdGgsIHlQbGFuZUhlaWdodCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGlmICgheUhhbmRsZSkg
eworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUoeVRleHR1cmUpOworICAgICAgICBt
X2NvbnRleHQtPmRlbGV0ZVRleHR1cmUodXZUZXh0dXJlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyNlbHNlCiAgICAgaWYgKCFtX2NvbnRleHQtPnRleEltYWdlSU9TdXJmYWNlMkQo
dmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFLCB5UGxhbmVX
aWR0aCwgeVBsYW5lSGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgc3VyZmFjZSwgMCkpIHsKICAgICAgICAgbV9jb250
ZXh0LT5kZWxldGVUZXh0dXJlKHlUZXh0dXJlKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVU
ZXh0dXJlKHV2VGV4dHVyZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisjZW5kaWYg
Ly8gVVNFKEFOR0xFKQogCiAgICAgLy8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFtZXRlcnMu
CiAgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMCk7
CkBAIC04NDQsNyArOTE1LDcgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weUltYWdl
VG9QbGF0Zm9ybVRleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgc2kKICAgICAvLyBEbyB0
aGUgYWN0dWFsIGRyYXdpbmcuCiAgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29u
dGV4dDNEOjpUUklBTkdMRVMsIDAsIDYpOwogCi0jaWYgVVNFKE9QRU5HTF9FUykKKyNpZiBVU0Uo
T1BFTkdMX0VTKSB8fCAoVVNFKEFOR0xFKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKSkKICAgICAv
LyBmbHVzaCgpIG11c3QgYmUgY2FsbGVkIGhlcmUgaW4gb3JkZXIgdG8gcmUtc3luY2hyb25pemUg
dGhlIG91dHB1dCB0ZXh0dXJlJ3MgY29udGVudHMgYWNyb3NzIHRoZQogICAgIC8vIHR3byBFQUdM
IGNvbnRleHRzLgogICAgIG1fY29udGV4dC0+Zmx1c2goKTsKQEAgLTg1Myw2ICs5MjQsMTAgQEAg
Ym9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weUltYWdlVG9QbGF0Zm9ybVRleHR1cmUoQ1ZQ
aXhlbEJ1ZmZlclJlZiBpbWFnZSwgc2kKICAgICAvLyBDbGVhbi11cC4KICAgICBtX2NvbnRleHQt
PmRlbGV0ZVRleHR1cmUoeVRleHR1cmUpOwogICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh1
dlRleHR1cmUpOworI2lmIFVTRShBTkdMRSkKKyAgICBkZXRhY2hJT1N1cmZhY2VGcm9tVGV4dHVy
ZSh5SGFuZGxlKTsKKyAgICBkZXRhY2hJT1N1cmZhY2VGcm9tVGV4dHVyZSh1dkhhbmRsZSk7Cisj
ZW5kaWYKIAogICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJmYWNlOwogICAgIG1fbGFzdFN1cmZhY2VT
ZWVkID0gbmV3U3VyZmFjZVNlZWQ7CkBAIC04ODYsNiArOTYxLDEwIEBAIGJvb2wgVmlkZW9UZXh0
dXJlQ29waWVyQ1Y6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShUZXh0dXJlVHlw
ZSBpbnB1dFZpCiAgICAgdmlkZW9UZXh0dXJlVGFyZ2V0ID0gQ1ZPcGVuR0xUZXh0dXJlR2V0VGFy
Z2V0KGlucHV0VmlkZW9UZXh0dXJlKTsKICAgICBDVk9wZW5HTFRleHR1cmVHZXRDbGVhblRleENv
b3JkcyhpbnB1dFZpZGVvVGV4dHVyZSwgbG93ZXJMZWZ0LCBsb3dlclJpZ2h0LCB1cHBlclJpZ2h0
LCB1cHBlckxlZnQpOwogI2VsaWYgVVNFKEFOR0xFKQorICAgIC8vIENWT3BlbkdMVGV4dHVyZUNh
Y2hlQ3JlYXRlVGV4dHVyZUZyb21JbWFnZSBzZWVtcyB0byBhbHdheXMgcmV0dXJuCisgICAgLy8g
a0NWUmV0dXJuUGl4ZWxCdWZmZXJOb3RPcGVuR0xDb21wYXRpYmxlIG9uIGRlc2t0b3AgbWFjT1Mg
bm93LCBzbyB0aGlzCisgICAgLy8gZW50aXJlIGNvZGUgcGF0aCBzZWVtcyB0byBiZSB1bnVzZWQu
IEFzc3VtZSB0aGUgSU9TdXJmYWNlIHBhdGggd2lsbCBiZQorICAgIC8vIHRha2VuIHdoZW4gdXNp
bmcgQU5HTEUuCiAgICAgVU5VU0VEX1BBUkFNKGxvd2VyTGVmdCk7CiAgICAgVU5VU0VEX1BBUkFN
KGxvd2VyUmlnaHQpOwogICAgIFVOVVNFRF9QQVJBTSh1cHBlckxlZnQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1Yu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGll
ckNWLmgKaW5kZXggOWQzOTJlYTA1OGIzNjAwOGNhNTY5Y2E0NGZkNzEyODgzYjBkNmY1Ny4uMzZi
ZGE5MWRkNThmZGIzNDhmNGYyY2JhYjNlZWI0YWY4OTI1ZjRlMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJD
Vi5oCkBAIC03MCw5ICs3MCwyMiBAQCBwcml2YXRlOgogICAgIH0KICNlbmRpZgogCisjaWYgVVNF
KEFOR0xFKQorI2lmICFIQVZFKElPU1VSRkFDRSkKKyNlcnJvciBVU0UoQU5HTEUpIHJlcXVpcmVz
IEhBVkUoSU9TVVJGQUNFKQorI2VuZGlmIC8vICFIQVZFKElPU1VSRkFDRSkKKworICAgIC8vIFJl
dHVybnMgYSBoYW5kbGUgd2hpY2gsIGlmIG5vbi1udWxsLCBtdXN0IGJlIHJlbGVhc2VkIHZpYSB0
aGUKKyAgICAvLyBkZXRhY2ggY2FsbCBiZWxvdy4KKyAgICB2b2lkKiBhdHRhY2hJT1N1cmZhY2VU
b1RleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYs
IEdDM0R1aW50IHBsYW5lKTsKKyAgICB2b2lkIGRldGFjaElPU3VyZmFjZUZyb21UZXh0dXJlKHZv
aWQqIGhhbmRsZSk7CisjZW5kaWYKKwogICAgIFJlZjxHcmFwaGljc0NvbnRleHQzRD4gbV9zaGFy
ZWRDb250ZXh0OwogICAgIFJlZjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworI2lmICFV
U0UoQU5HTEUpCiAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVDYWNoZUNWPiBtX3RleHR1cmVD
YWNoZTsKKyNlbmRpZgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFtZWJ1ZmZlciB7IDAgfTsK
ICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fcHJvZ3JhbSB7IDAgfTsKICAgICBQbGF0Zm9ybTNET2Jq
ZWN0IG1fdmVydGV4QnVmZmVyIHsgMCB9Owo=
</data>
<flag name="review"
          id="398960"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>