<?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>43754</bug_id>
          
          <creation_ts>2010-08-09 15:56:33 -0700</creation_ts>
          <short_desc>Use Chromium OpenGL bindings rather than GLEW in WebGraphicsContextDefaultImpl</short_desc>
          <delta_ts>2010-08-10 14:43:47 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>43811</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gman</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>262374</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-09 15:56:33 -0700</bug_when>
    <thetext>In the Chromium WebGL port, the &quot;default&quot; implementation of WebGraphicsContext3D calls OpenGL directly, currently via GLEW. We need to switch this to use Chromium&apos;s OpenGL bindings rather than GLEW so that Chromium&apos;s test shell can use the OSMesa renderer. This will allow WebGL tests to be run on the build bots all of the time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262779</commentid>
    <comment_count>1</comment_count>
      <attachid>64032</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-10 11:14:00 -0700</bug_when>
    <thetext>Created attachment 64032
Patch

From the ChangeLog:

Deleted per-platform OpenGL context management code, now abstracted via GLContext. Built and tested in Chromium with --in-process-webgl flag.

Thanks to Al Patrick for the initial patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262780</commentid>
    <comment_count>2</comment_count>
      <attachid>64033</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-10 11:14:01 -0700</bug_when>
    <thetext>Created attachment 64033


From the ChangeLog:

Deleted per-platform OpenGL context management code, now abstracted via GLContext. Built and tested in Chromium with --in-process-webgl flag.

Thanks to Al Patrick for the initial patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262785</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-10 11:18:39 -0700</bug_when>
    <thetext>Attachment 64032 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:35:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:72:  Use 0 instead of NULL.  [readability/null] [5]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:107:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 3 in 4 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>262787</commentid>
    <comment_count>4</comment_count>
      <attachid>64032</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-08-10 11:23:46 -0700</bug_when>
    <thetext>Comment on attachment 64032
Patch

r=me, after style fixes:

WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:72
 +      , m_glContext(NULL)
(0)

WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:98
 +          delete m_glContext;
Maybe make OwnPtr?

WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:107
 +      m_glContext = gfx::GLContext::CreateOffscreenGLContext(NULL);
(0)

WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:427
 +      // TODO(apatrick): OpenGL ES 2 does not support GL_BGRA so this fails when
FIXME:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262848</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-10 14:24:41 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 64032 [details])
&gt; r=me, after style fixes:
&gt; 
&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:72
&gt;  +      , m_glContext(NULL)
&gt; (0)
&gt; 
&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:98
&gt;  +          delete m_glContext;
&gt; Maybe make OwnPtr?
&gt; 
&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:107
&gt;  +      m_glContext = gfx::GLContext::CreateOffscreenGLContext(NULL);
&gt; (0)
&gt; 
&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:427
&gt;  +      // TODO(apatrick): OpenGL ES 2 does not support GL_BGRA so this fails when
&gt; FIXME:

Will fix these issues before commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262850</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-10 14:27:44 -0700</bug_when>
    <thetext>Committed r65093: &lt;http://trac.webkit.org/changeset/65093&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262856</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-10 14:41:12 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65093 might have broken Chromium Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64032</attachid>
            <date>2010-08-10 11:14:00 -0700</date>
            <delta_ts>2010-08-10 11:23:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>context.patch</filename>
            <type>text/plain</type>
            <size>27168</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjUwNzcpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTAtMDgtMTAgIEtlbm5l
dGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVzZSBDaHJvbWl1bSBPcGVuR0wgYmluZGluZ3MgcmF0aGVy
IHRoYW4gR0xFVyBpbiBXZWJHcmFwaGljc0NvbnRleHREZWZhdWx0SW1wbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM3NTQKKworICAgICAgICBEZWxl
dGVkIHBlci1wbGF0Zm9ybSBPcGVuR0wgY29udGV4dCBtYW5hZ2VtZW50IGNvZGUsIG5vdworICAg
ICAgICBhYnN0cmFjdGVkIHZpYSBHTENvbnRleHQuIEJ1aWx0IGFuZCB0ZXN0ZWQgaW4gQ2hyb21p
dW0gd2l0aAorICAgICAgICAtLWluLXByb2Nlc3Mtd2ViZ2wgZmxhZy4KKworICAgICAgICAqIFdl
YktpdC5neXA6CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAg
KiBzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OldlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjp+V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp2YWxpZGF0ZUF0dHJp
YnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6cmVhZEJhY2tGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNvcHlUZXhJbWFnZTJEKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y29weVRleFN1
YkltYWdlMkQpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKiBzcmMvV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oOgorCiAyMDEwLTA4LTEwICBHYXZpbiBCYXJyYWNs
b3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXIgc3RhbXBlZCBi
eSBTYW0gV2VpbmlnLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDY1MDE5KQorKysgV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAK
ICAgICAgICAgICAgICdtc3ZzX2d1aWQnOiAnNUVDRUM5RTUtOEYyMy00N0I2LTkzRTAtQzNCMzI4
QjNCRTY1JywKICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCiAgICAgICAgICAgICAgICAg
Jy4uLy4uL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6d2ViY29yZScsCisgICAgICAg
ICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYXBwL2FwcC5neXA6YXBwX2Jhc2UnLCAjIEZv
ciBHTENvbnRleHQKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9za2lhL3Nr
aWEuZ3lwOnNraWEnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJk
X3BhcnR5L25wYXBpL25wYXBpLmd5cDpucGFwaScsCiAgICAgICAgICAgICBdLApAQCAtMzExLDYg
KzMxMiw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9HTEVTMkNvbnRleHQuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL0dMRVMyQ29udGV4dEludGVybmFsLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9HTEVTMkNvbnRleHRJbnRlcm5hbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL0dy
YXBoaWNzQ29udGV4dDNELmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9ndGsvV2ViRm9udElu
Zm8uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL2d0ay9XZWJGb250SW5mby5oJywKICAgICAg
ICAgICAgICAgICAnc3JjL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAnLApAQCAtNTgzLDE4
ICs1ODUsNiBAQAogICAgICAgICAgICAgICAgICAgICAnc291cmNlcy8nOiBbWydleGNsdWRlJywg
Jy93aW4vJ11dLAogICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgIFsnIkVOQUJM
RV8zRF9DQU5WQVM9MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgewotICAgICAgICAgICAgICAgICAg
ICAjIENvbmRpdGlvbmFsbHkgY29tcGlsZSBpbiBHTEVXIGFuZCBvdXIgR3JhcGhpY3NDb250ZXh0
M0QgaW1wbGVtZW50YXRpb24uCi0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzKyc6IFsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICdzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2dsZXcv
c3JjL2dsZXcuYycKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAg
J2luY2x1ZGVfZGlycysnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9z
cmNfZGlyKS90aGlyZF9wYXJ0eS9nbGV3L2luY2x1ZGUnCi0gICAgICAgICAgICAgICAgICAgIF0s
Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzKyc6IFsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICdHTEVXX1NUQVRJQz0xJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdHTEVXX05PX0dM
VT0xJywKLSAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgJ2NvbmRp
dGlvbnMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICBbJ09TPT0ibWFjIicsIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA2NTAxOSkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NSw5ICs4NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8g
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbAogCi0vLyBVbmNvbW1lbnQgdGhpcyB0byByZW5kZXIg
dG8gYSBzZXBhcmF0ZSB3aW5kb3cgZm9yIGRlYnVnZ2luZwotLy8gI2RlZmluZSBSRU5ERVJfVE9f
REVCVUdHSU5HX1dJTkRPVwotCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKIHB1
YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKCk7CkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5j
cHAJKHJldmlzaW9uIDY1MDE5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOSBAQAog
CiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAorI2luY2x1ZGUgImFwcC9nZngvZ2wvZ2xfYmluZGlu
Z3MuaCIKKyNpbmNsdWRlICJhcHAvZ2Z4L2dsL2dsX2NvbnRleHQuaCIKKwogI2luY2x1ZGUgIldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaCIKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCkBAIC0zOSw3NiArNDIsOCBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8
c3RyaW5nLmg+CiAKLSNpZiBPUyhMSU5VWCkKLSNpbmNsdWRlIDxkbGZjbi5oPgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJLaXQgewogCi0vLyBVbmNvbW1lbnQgdGhpcyB0byByZW5kZXIgdG8gYSBz
ZXBhcmF0ZSB3aW5kb3cgZm9yIGRlYnVnZ2luZwotLy8gI2RlZmluZSBSRU5ERVJfVE9fREVCVUdH
SU5HX1dJTkRPVwotCi0jaWYgT1MoREFSV0lOKQotI2RlZmluZSBVU0VfVEVYVFVSRV9SRUNUQU5H
TEVfRk9SX0ZSQU1FQlVGRkVSCi0jZW5kaWYKLQotYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpzX2luaXRpYWxpemVkR0xFVyA9IGZhbHNlOwotCi0jaWYgT1MoTElOVVgpCi1X
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpHTENvbm5lY3Rpb24qIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OnNfZ2wgPSAwOwotCi1XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpHTENvbm5lY3Rpb24qIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OkdMQ29ubmVjdGlvbjo6Y3JlYXRlKCkKLXsKLSAgICBEaXNwbGF5KiBkcHkgPSBYT3BlbkRpc3Bs
YXkoMCk7Ci0gICAgaWYgKCFkcHkpIHsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQz
RDogZXJyb3Igb3BlbmluZyBYIGRpc3BsYXlcbiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICAvLyBXZSB1c2UgUlRMRF9HTE9CQUwgc2VtYW50aWNzIHNvIHRoYXQgR0xFVyBpbml0
aWFsaXphdGlvbiB3b3JrczsKLSAgICAvLyBHTEVXIGV4cGVjdHMgdG8gYmUgYWJsZSB0byBvcGVu
IHRoZSBjdXJyZW50IHByb2Nlc3MncyBoYW5kbGUKLSAgICAvLyBhbmQgZG8gZGxzeW0ncyBvZiBH
TCBlbnRyeSBwb2ludHMgZnJvbSB0aGVyZS4KLSAgICB2b2lkKiBsaWJHTCA9IGRsb3BlbigibGli
R0wuc28uMSIsIFJUTERfTEFaWSB8IFJUTERfR0xPQkFMKTsKLSAgICBpZiAoIWxpYkdMKSB7Ci0g
ICAgICAgIFhDbG9zZURpc3BsYXkoZHB5KTsKLSAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRl
eHQzRDogZXJyb3Igb3BlbmluZyBsaWJHTC5zby4xOiAlc1xuIiwgZGxlcnJvcigpKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUEZOR0xYQ0hPT1NFRkJDT05GSUdQUk9DIGNob29z
ZUZCQ29uZmlnID0gKFBGTkdMWENIT09TRUZCQ09ORklHUFJPQykgZGxzeW0obGliR0wsICJnbFhD
aG9vc2VGQkNvbmZpZyIpOwotICAgIFBGTkdMWENSRUFURU5FV0NPTlRFWFRQUk9DIGNyZWF0ZU5l
d0NvbnRleHQgPSAoUEZOR0xYQ1JFQVRFTkVXQ09OVEVYVFBST0MpIGRsc3ltKGxpYkdMLCAiZ2xY
Q3JlYXRlTmV3Q29udGV4dCIpOwotICAgIFBGTkdMWENSRUFURVBCVUZGRVJQUk9DIGNyZWF0ZVBi
dWZmZXIgPSAoUEZOR0xYQ1JFQVRFUEJVRkZFUlBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYQ3JlYXRl
UGJ1ZmZlciIpOwotICAgIFBGTkdMWERFU1RST1lQQlVGRkVSUFJPQyBkZXN0cm95UGJ1ZmZlciA9
IChQRk5HTFhERVNUUk9ZUEJVRkZFUlBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYRGVzdHJveVBidWZm
ZXIiKTsKLSAgICBQRk5HTFhNQUtFQ1VSUkVOVFBST0MgbWFrZUN1cnJlbnQgPSAoUEZOR0xYTUFL
RUNVUlJFTlRQUk9DKSBkbHN5bShsaWJHTCwgImdsWE1ha2VDdXJyZW50Iik7Ci0gICAgUEZOR0xY
REVTVFJPWUNPTlRFWFRQUk9DIGRlc3Ryb3lDb250ZXh0ID0gKFBGTkdMWERFU1RST1lDT05URVhU
UFJPQykgZGxzeW0obGliR0wsICJnbFhEZXN0cm95Q29udGV4dCIpOwotICAgIFBGTkdMWEdFVENV
UlJFTlRDT05URVhUUFJPQyBnZXRDdXJyZW50Q29udGV4dCA9IChQRk5HTFhHRVRDVVJSRU5UQ09O
VEVYVFBST0MpIGRsc3ltKGxpYkdMLCAiZ2xYR2V0Q3VycmVudENvbnRleHQiKTsKLSAgICBpZiAo
IWNob29zZUZCQ29uZmlnIHx8ICFjcmVhdGVOZXdDb250ZXh0IHx8ICFjcmVhdGVQYnVmZmVyCi0g
ICAgICAgIHx8ICFkZXN0cm95UGJ1ZmZlciB8fCAhbWFrZUN1cnJlbnQgfHwgIWRlc3Ryb3lDb250
ZXh0Ci0gICAgICAgIHx8ICFnZXRDdXJyZW50Q29udGV4dCkgewotICAgICAgICBYQ2xvc2VEaXNw
bGF5KGRweSk7Ci0gICAgICAgIGRsY2xvc2UobGliR0wpOwotICAgICAgICBwcmludGYoIkdyYXBo
aWNzQ29udGV4dDNEOiBlcnJvciBsb29raW5nIHVwIGJvb3RzdHJhcHBpbmcgZW50cnkgcG9pbnRz
XG4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBuZXcgR0xDb25uZWN0
aW9uKGRweSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJHTCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaG9vc2VGQkNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjcmVhdGVOZXdDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0
ZVBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveVBidWZmZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZUN1cnJlbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdHJveUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0Q3VycmVudENvbnRleHQpOwotfQotCi1XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpHTENvbm5lY3Rpb246On5HTENvbm5lY3Rpb24oKQotewotICAgIFhDbG9zZURpc3BsYXkobV9k
aXNwbGF5KTsKLSAgICBkbGNsb3NlKG1fbGliR0wpOwotfQotCi0jZW5kaWYgLy8gT1MoTElOVVgp
Ci0KIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OlZlcnRleEF0dHJpYlBvaW50ZXJT
dGF0ZTo6VmVydGV4QXR0cmliUG9pbnRlclN0YXRlKCkKICAgICA6IGVuYWJsZWQoZmFsc2UpCiAg
ICAgLCBidWZmZXIoMCkKQEAgLTEzNCwyMCArNjksNyBAQCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpXZWJHcmFwCiAgICAgLCBtX3NjYW5saW5lKDApCiAjZW5kaWYKICAgICAsIG1f
Ym91bmRBcnJheUJ1ZmZlcigwKQotI2lmIE9TKFdJTkRPV1MpCi0gICAgLCBtX2NhbnZhc1dpbmRv
dygwKQotICAgICwgbV9jYW52YXNEQygwKQotICAgICwgbV9jb250ZXh0T2JqKDApCi0jZWxpZiBQ
TEFURk9STShDRykKLSAgICAsIG1fcGJ1ZmZlcigwKQotICAgICwgbV9jb250ZXh0T2JqKDApCi0g
ICAgLCBtX3JlbmRlck91dHB1dCgwKQotI2VsaWYgT1MoTElOVVgpCi0gICAgLCBtX2NvbnRleHRP
YmooMCkKLSAgICAsIG1fcGJ1ZmZlcigwKQotI2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQgdG8geW91
ciBwbGF0Zm9ybQotI2VuZGlmCisgICAgLCBtX2dsQ29udGV4dChOVUxMKQogewogfQogCkBAIC0x
NTUsNyArNzcsNyBAQCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp+V2ViR3JhCiB7
CiAgICAgaWYgKG1faW5pdGlhbGl6ZWQpIHsKICAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0jaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisKICAgICAgICAgaWYgKG1fYXR0
cmlidXRlcy5hbnRpYWxpYXMpIHsKICAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VY
VCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKICAgICAgICAgICAgIGlmIChtX2F0dHJp
YnV0ZXMuZGVwdGggfHwgbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCkBAIC0xNzEsMjIwICs5MywyMCBA
QCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp+V2ViR3JhCiAgICAgICAgICAgICBk
ZWxldGVbXSBtX3NjYW5saW5lOwogI2VuZGlmCiAgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJz
RVhUKDEsICZtX2Zibyk7Ci0jZW5kaWYgLy8gIVJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0j
aWYgT1MoV0lORE9XUykKLSAgICAgICAgd2dsZXdNYWtlQ3VycmVudCgwLCAwKTsKLSAgICAgICAg
d2dsZXdEZWxldGVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgICAgIFJlbGVhc2VEQyhtX2Nh
bnZhc1dpbmRvdywgbV9jYW52YXNEQyk7Ci0gICAgICAgIERlc3Ryb3lXaW5kb3cobV9jYW52YXNX
aW5kb3cpOwotI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0
KDApOwotICAgICAgICBDR0xEZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgICAgICBD
R0xEZXN0cm95UEJ1ZmZlcihtX3BidWZmZXIpOwotICAgICAgICBpZiAobV9yZW5kZXJPdXRwdXQp
Ci0gICAgICAgICAgICBkZWxldGVbXSBtX3JlbmRlck91dHB1dDsKLSNlbGlmIE9TKExJTlVYKQot
ICAgICAgICBzX2dsLT5tYWtlQ3VycmVudCgwLCAwKTsKLSAgICAgICAgc19nbC0+ZGVzdHJveUNv
bnRleHQobV9jb250ZXh0T2JqKTsKLSAgICAgICAgc19nbC0+ZGVzdHJveVBidWZmZXIobV9wYnVm
ZmVyKTsKLSNlbHNlCi0jZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KLSNlbmRpZgot
ICAgICAgICBtX2NvbnRleHRPYmogPSAwOworCisgICAgICAgIG1fZ2xDb250ZXh0LT5EZXN0cm95
KCk7CisgICAgICAgIGRlbGV0ZSBtX2dsQ29udGV4dDsKICAgICB9CiB9CiAKIGJvb2wgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6aW5pdGlhbGl6ZShXZWJHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBXZWJWaWV3KiB3ZWJWaWV3KQogewotI2lmIE9TKFdJ
TkRPV1MpCi0gICAgaWYgKCFzX2luaXRpYWxpemVkR0xFVykgewotICAgICAgICAvLyBEbyB0aGlz
IG9ubHkgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaC4KLSAgICAgICAgaWYgKCF3Z2xld0luaXQoKSkg
ewotICAgICAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiB3
Z2xld0luaXQgZmFpbGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIFdORENMQVNTIHdjOwotICAgIGlmICghR2V0Q2xhc3NJbmZvKEdldE1v
ZHVsZUhhbmRsZSgwKSwgTCJDQU5WQVNHTCIsICZ3YykpIHsKLSAgICAgICAgWmVyb01lbW9yeSgm
d2MsIHNpemVvZihXTkRDTEFTUykpOwotICAgICAgICB3Yy5zdHlsZSA9IENTX09XTkRDOwotICAg
ICAgICB3Yy5oSW5zdGFuY2UgPSBHZXRNb2R1bGVIYW5kbGUoMCk7Ci0gICAgICAgIHdjLmxwZm5X
bmRQcm9jID0gRGVmV2luZG93UHJvYzsKLSAgICAgICAgd2MubHBzekNsYXNzTmFtZSA9IEwiQ0FO
VkFTR0wiOwotCi0gICAgICAgIGlmICghUmVnaXN0ZXJDbGFzcygmd2MpKSB7Ci0gICAgICAgICAg
ICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IFJlZ2lzdGVyQ2xhc3Mg
ZmFpbGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIG1fY2FudmFzV2luZG93ID0gQ3JlYXRlV2luZG93KEwiQ0FOVkFTR0wiLCBMIkNBTlZB
U0dMIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXU19DQVBUSU9OLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFV
TFQsIENXX1VTRURFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1df
VVNFREVGQVVMVCwgMCwgMCwgR2V0TW9kdWxlSGFuZGxlKDApLCAwKTsKLSAgICBpZiAoIW1fY2Fu
dmFzV2luZG93KSB7Ci0gICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDogQ3JlYXRlV2luZG93IGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICAvLyBnZXQgdGhlIGRldmljZSBjb250ZXh0Ci0gICAgbV9jYW52YXNEQyA9IEdl
dERDKG1fY2FudmFzV2luZG93KTsKLSAgICBpZiAoIW1fY2FudmFzREMpIHsKLSAgICAgICAgcHJp
bnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBHZXREQyBmYWlsZWRcbiIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gZmluZCBkZWZhdWx0IHBpeGVs
IGZvcm1hdAotICAgIFBJWEVMRk9STUFUREVTQ1JJUFRPUiBwZmQ7Ci0gICAgWmVyb01lbW9yeSgm
cGZkLCBzaXplb2YoUElYRUxGT1JNQVRERVNDUklQVE9SKSk7Ci0gICAgcGZkLm5TaXplID0gc2l6
ZW9mKFBJWEVMRk9STUFUREVTQ1JJUFRPUik7Ci0gICAgcGZkLm5WZXJzaW9uID0gMTsKLSNpZmRl
ZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwotICAgIHBmZC5kd0ZsYWdzID0gUEZEX0RSQVdf
VE9fV0lORE9XIHwgUEZEX1NVUFBPUlRfT1BFTkdMIHwgUEZEX0RPVUJMRUJVRkZFUjsKLSNlbHNl
Ci0gICAgcGZkLmR3RmxhZ3MgPSBQRkRfRFJBV19UT19XSU5ET1cgfCBQRkRfU1VQUE9SVF9PUEVO
R0w7Ci0jZW5kaWYKLSAgICBpbnQgcGl4ZWxmb3JtYXQgPSBDaG9vc2VQaXhlbEZvcm1hdChtX2Nh
bnZhc0RDLCAmcGZkKTsKLQotICAgIC8vIHNldCB0aGUgcGl4ZWwgZm9ybWF0IGZvciB0aGUgZGMK
LSAgICBpZiAoIVNldFBpeGVsRm9ybWF0KG1fY2FudmFzREMsIHBpeGVsZm9ybWF0LCAmcGZkKSkg
ewotICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IFNldFBp
eGVsRm9ybWF0IGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBjcmVhdGUgcmVuZGVyaW5nIGNvbnRleHQKLSAgICBtX2NvbnRleHRPYmogPSB3Z2xld0Ny
ZWF0ZUNvbnRleHQobV9jYW52YXNEQyk7Ci0gICAgaWYgKCFtX2NvbnRleHRPYmopIHsKLSAgICAg
ICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiB3Z2xDcmVhdGVDb250
ZXh0IGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
IXdnbGV3TWFrZUN1cnJlbnQobV9jYW52YXNEQywgbV9jb250ZXh0T2JqKSkgewotICAgICAgICBw
cmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IHdnbE1ha2VDdXJyZW50IGZh
aWxlZFxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSNpZmRlZiBSRU5ERVJf
VE9fREVCVUdHSU5HX1dJTkRPVwotICAgIHR5cGVkZWYgQk9PTCAoV0lOQVBJICogUEZOV0dMU1dB
UElOVEVSVkFMRVhUUFJPQykgKGludCBpbnRlcnZhbCk7Ci0gICAgUEZOV0dMU1dBUElOVEVSVkFM
RVhUUFJPQyBzZXRTd2FwSW50ZXJ2YWwgPSAwOwotICAgIHNldFN3YXBJbnRlcnZhbCA9IChQRk5X
R0xTV0FQSU5URVJWQUxFWFRQUk9DKSB3Z2xld0dldFByb2NBZGRyZXNzKCJ3Z2xTd2FwSW50ZXJ2
YWxFWFQiKTsKLSAgICBpZiAoc2V0U3dhcEludGVydmFsKQotICAgICAgICBzZXRTd2FwSW50ZXJ2
YWwoMSk7Ci0jZW5kaWYgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLQotI2VsaWYgUExB
VEZPUk0oQ0cpCi0gICAgLy8gQ3JlYXRlIGEgMXgxIHBidWZmZXIgYW5kIGFzc29jaWF0ZWQgY29u
dGV4dCB0byBib290c3RyYXAgdGhpbmdzCi0gICAgQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUgYXR0
cmlic1tdID0gewotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFQQnVm
ZmVyLAotICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIDAKLSAgICB9OwotICAgIENH
TFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0OwotICAgIEdMaW50IG51bVBpeGVsRm9ybWF0czsK
LSAgICBpZiAoQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicywgJnBpeGVsRm9ybWF0LCAmbnVt
UGl4ZWxGb3JtYXRzKSAhPSBrQ0dMTm9FcnJvcikgewotICAgICAgICBwcmludGYoIldlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGVycm9yIGNob29zaW5nIHBpeGVsIGZvcm1hdFxuIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFwaXhlbEZvcm1hdCkgewot
ICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IG5vIHBpeGVs
IGZvcm1hdCBzZWxlY3RlZFxuIik7CisgICAgaWYgKCFnZng6OkdMQ29udGV4dDo6SW5pdGlhbGl6
ZU9uZU9mZigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIENHTENvbnRleHRP
YmogY29udGV4dDsKLSAgICBDR0xFcnJvciByZXMgPSBDR0xDcmVhdGVDb250ZXh0KHBpeGVsRm9y
bWF0LCAwLCAmY29udGV4dCk7Ci0gICAgQ0dMRGVzdHJveVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0
KTsKLSAgICBpZiAocmVzICE9IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIHByaW50ZigiV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZXJyb3IgY3JlYXRpbmcgY29udGV4dFxuIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgQ0dMUEJ1ZmZlck9iaiBwYnVmZmVyOwot
ICAgIGlmIChDR0xDcmVhdGVQQnVmZmVyKDEsIDEsIEdMX1RFWFRVUkVfMkQsIEdMX1JHQkEsIDAs
ICZwYnVmZmVyKSAhPSBrQ0dMTm9FcnJvcikgewotICAgICAgICBDR0xEZXN0cm95Q29udGV4dChj
b250ZXh0KTsKLSAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OiBlcnJvciBjcmVhdGluZyBwYnVmZmVyXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAoQ0dMU2V0UEJ1ZmZlcihjb250ZXh0LCBwYnVmZmVyLCAwLCAwLCAwKSAhPSBr
Q0dMTm9FcnJvcikgewotICAgICAgICBDR0xEZXN0cm95Q29udGV4dChjb250ZXh0KTsKLSAgICAg
ICAgQ0dMRGVzdHJveVBCdWZmZXIocGJ1ZmZlcik7Ci0gICAgICAgIHByaW50ZigiV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDogZXJyb3IgYXR0YWNoaW5nIHBidWZmZXIgdG8gY29udGV4
dFxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKENHTFNldEN1cnJl
bnRDb250ZXh0KGNvbnRleHQpICE9IGtDR0xOb0Vycm9yKSB7Ci0gICAgICAgIENHTERlc3Ryb3lD
b250ZXh0KGNvbnRleHQpOwotICAgICAgICBDR0xEZXN0cm95UEJ1ZmZlcihwYnVmZmVyKTsKLSAg
ICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBlcnJvciBtYWtp
bmcgY29udGV4dCBjdXJyZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBtX3BidWZmZXIgPSBwYnVmZmVyOwotICAgIG1fY29udGV4dE9iaiA9IGNvbnRleHQ7Ci0jZWxp
ZiBPUyhMSU5VWCkKLSAgICBpZiAoIXNfZ2wpIHsKLSAgICAgICAgc19nbCA9IEdMQ29ubmVjdGlv
bjo6Y3JlYXRlKCk7Ci0gICAgICAgIGlmICghc19nbCkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpbnQgY29uZmlnQXR0cnNbXSA9IHsKLSAgICAgICAgR0xYX0RSQVdB
QkxFX1RZUEUsCi0gICAgICAgIEdMWF9QQlVGRkVSX0JJVCwKLSAgICAgICAgR0xYX1JFTkRFUl9U
WVBFLAotICAgICAgICBHTFhfUkdCQV9CSVQsCi0gICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsCi0g
ICAgICAgIDAsCi0gICAgICAgIDAKLSAgICB9OwotICAgIGludCBuZWxlbWVudHMgPSAwOwotICAg
IEdMWEZCQ29uZmlnKiBjb25maWcgPSBzX2dsLT5jaG9vc2VGQkNvbmZpZygwLCBjb25maWdBdHRy
cywgJm5lbGVtZW50cyk7Ci0gICAgaWYgKCFjb25maWcpIHsKLSAgICAgICAgcHJpbnRmKCJXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBnbFhDaG9vc2VGQkNvbmZpZyBmYWlsZWRcbiIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghbmVsZW1lbnRzKSB7Ci0g
ICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZ2xYQ2hvb3Nl
RkJDb25maWcgcmV0dXJuZWQgMCBlbGVtZW50c1xuIik7Ci0gICAgICAgIFhGcmVlKGNvbmZpZyk7
CisgICAgICAgIAorICAgIG1fZ2xDb250ZXh0ID0gZ2Z4OjpHTENvbnRleHQ6OkNyZWF0ZU9mZnNj
cmVlbkdMQ29udGV4dChOVUxMKTsKKyAgICBpZiAoIW1fZ2xDb250ZXh0KQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIEdMWENvbnRleHQgY29udGV4dCA9IHNfZ2wtPmNyZWF0ZU5l
d0NvbnRleHQoY29uZmlnWzBdLCBHTFhfUkdCQV9UWVBFLCAwLCBUcnVlKTsKLSAgICBpZiAoIWNv
bnRleHQpIHsKLSAgICAgICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OiBnbFhDcmVhdGVOZXdDb250ZXh0IGZhaWxlZFxuIik7Ci0gICAgICAgIFhGcmVlKGNvbmZpZyk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaW50IHBidWZmZXJBdHRyc1tdID0g
ewotICAgICAgICBHTFhfUEJVRkZFUl9XSURUSCwKLSAgICAgICAgMSwKLSAgICAgICAgR0xYX1BC
VUZGRVJfSEVJR0hULAotICAgICAgICAxLAotICAgICAgICAwCi0gICAgfTsKLSAgICBHTFhQYnVm
ZmVyIHBidWZmZXIgPSBzX2dsLT5jcmVhdGVQYnVmZmVyKGNvbmZpZ1swXSwgcGJ1ZmZlckF0dHJz
KTsKLSAgICBYRnJlZShjb25maWcpOwotICAgIGlmICghcGJ1ZmZlcikgewotICAgICAgICBwcmlu
dGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IGdseENyZWF0ZVBidWZmZXIgZmFp
bGVkXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIXNfZ2wtPm1h
a2VDdXJyZW50KHBidWZmZXIsIGNvbnRleHQpKSB7Ci0gICAgICAgIHByaW50ZigiV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDogZ2xYTWFrZUN1cnJlbnQgZmFpbGVkXG4iKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBtX2NvbnRleHRPYmogPSBjb250ZXh0OwotICAg
IG1fcGJ1ZmZlciA9IHBidWZmZXI7Ci0jZWxzZQotI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBs
YXRmb3JtCi0jZW5kaWYKLQotICAgIGlmICghc19pbml0aWFsaXplZEdMRVcpIHsKLSAgICAgICAg
Ly8gSW5pdGlhbGl6ZSBHTEVXIGFuZCBjaGVjayBmb3IgR0wgMi4wIHN1cHBvcnQgYnkgdGhlIGRy
aXZlcnMuCi0gICAgICAgIEdMZW51bSBnbGV3SW5pdFJlc3VsdCA9IGdsZXdJbml0KCk7Ci0gICAg
ICAgIGlmIChnbGV3SW5pdFJlc3VsdCAhPSBHTEVXX09LKSB7Ci0gICAgICAgICAgICBwcmludGYo
IldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6IEdMRVcgaW5pdGlhbGl6YXRpb24gZmFp
bGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoIWdsZXdJc1N1cHBvcnRlZCgiR0xfVkVSU0lPTl8yXzAiKSkgewotICAgICAgICAgICAgcHJp
bnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBPcGVuR0wgMi4wIG5vdCBzdXBw
b3J0ZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IHNfaW5pdGlhbGl6ZWRHTEVXID0gdHJ1ZTsKLSAgICB9CiAKICAgICBtX2F0dHJpYnV0ZXMgPSBh
dHRyaWJ1dGVzOwogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwpAQCAtNDIzLDIyICsxNDUsNyBA
QCB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnZhCiAKIGJvb2wgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSNpZiBP
UyhXSU5ET1dTKQotICAgIGlmICh3Z2xld0dldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0
T2JqKQotICAgICAgICBpZiAod2dsZXdNYWtlQ3VycmVudChtX2NhbnZhc0RDLCBtX2NvbnRleHRP
YmopKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxpZiBQTEFURk9STShDRykKLSAgICBp
ZiAoQ0dMR2V0Q3VycmVudENvbnRleHQoKSAhPSBtX2NvbnRleHRPYmopCi0gICAgICAgIGlmIChD
R0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopID09IGtDR0xOb0Vycm9yKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICBpZiAoc19nbC0+Z2V0Q3Vy
cmVudENvbnRleHQoKSAhPSBtX2NvbnRleHRPYmopCi0gICAgICAgIGlmIChzX2dsLT5tYWtlQ3Vy
cmVudChtX3BidWZmZXIsIG1fY29udGV4dE9iaikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSNlbHNlCi0jZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KLSNlbmRpZgotICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9nbENvbnRleHQtPk1ha2VDdXJyZW50KCk7CiB9CiAK
IGludCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp3aWR0aCgpCkBAIC01MDAsMjMg
KzIwNywxMiBAQCBzdGF0aWMgaW50IGNyZWF0ZVRleHR1cmVPYmplY3QoR0xlbnVtIHRhCiAKIHZv
aWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmVzaGFwZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCiB7Ci0jaWZkZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKLSAgICBTZXRX
aW5kb3dQb3MobV9jYW52YXNXaW5kb3csIEhXTkRfVE9QLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICBTV1BfTk9NT1ZFKTsKLSAgICBTaG93V2luZG93KG1fY2FudmFzV2lu
ZG93LCBTV19TSE9XKTsKLSNlbmRpZgotCiAgICAgbV9jYWNoZWRXaWR0aCA9IHdpZHRoOwogICAg
IG1fY2FjaGVkSGVpZ2h0ID0gaGVpZ2h0OwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0j
aWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0jaWZkZWYgVVNFX1RFWFRVUkVfUkVD
VEFOR0xFX0ZPUl9GUkFNRUJVRkZFUgotICAgIC8vIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiBp
cyB0aGUgYmVzdCBzdXBwb3J0ZWQgcmVuZGVyIHRhcmdldCBvbiBNYWMgT1MgWAotICAgIEdMZW51
bSB0YXJnZXQgPSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkI7Ci0jZWxzZQogICAgIEdMZW51bSB0
YXJnZXQgPSBHTF9URVhUVVJFXzJEOwotI2VuZGlmCisKICAgICBpZiAoIW1fdGV4dHVyZSkgewog
ICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgdGV4dHVyZSBvYmplY3QKICAgICAgICAgbV90ZXh0dXJl
ID0gY3JlYXRlVGV4dHVyZU9iamVjdCh0YXJnZXQpOwpAQCAtNjU4LDcgKzM1NCw2IEBAIHZvaWQg
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmUKIAogICAgIGlmIChtdXN0UmVzdG9y
ZUZCTykKICAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBt
X2JvdW5kRkJPKTsKLSNlbmRpZiAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwogCiAjaWZk
ZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCiAgICAgaWYgKG1fc2NhbmxpbmUpIHsKQEAg
LTcwMCw5ICszOTUsNiBAQCBib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJl
CiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotI2lmZGVmIFJFTkRFUl9UT19ERUJVR0dJ
TkdfV0lORE9XCi0gICAgU3dhcEJ1ZmZlcnMobV9jYW52YXNEQyk7Ci0jZWxzZQogICAgIC8vIEVh
cmxpZXIgdmVyc2lvbnMgb2YgdGhpcyBjb2RlIHVzZWQgdGhlIEdQVSB0byBmbGlwIHRoZQogICAg
IC8vIGZyYW1lYnVmZmVyIHZlcnRpY2FsbHkgYmVmb3JlIHJlYWRpbmcgaXQgYmFjayBmb3IgY29t
cG9zaXRpbmcKICAgICAvLyB2aWEgc29mdHdhcmUuIFRoaXMgY29kZSB3YXMgcXVpdGUgY29tcGxp
Y2F0ZWQsIHVzZWQgYSBsb3Qgb2YKQEAgLTczMiwxMyArNDI0LDkgQEAgYm9vbCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZQogICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1l
bnQgPSB0cnVlOwogICAgIH0KIAotI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgLy8gVE9ETyhhcGF0
cmljayk6IE9wZW5HTCBFUyAyIGRvZXMgbm90IHN1cHBvcnQgR0xfQkdSQSBzbyB0aGlzIGZhaWxz
IHdoZW4KKyAgICAvLyB1c2luZyB0aGF0IGJhY2tlbmQuCiAgICAgZ2xSZWFkUGl4ZWxzKDAsIDAs
IG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9CWVRF
LCBwaXhlbHMpOwotI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgZ2xSZWFkUGl4ZWxzKDAsIDAsIG1f
Y2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84
XzhfOF9SRVYsIHBpeGVscyk7Ci0jZWxzZQotI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRm
b3JtCi0jZW5kaWYKIAogICAgIGlmIChtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQpCiAgICAgICAg
IGdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOwpAQCAtNzUx
LDcgKzQzOSw2IEBAIGJvb2wgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmUKICAg
ICAgICAgZmxpcFZlcnRpY2FsbHkocGl4ZWxzLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdo
dCk7CiAjZW5kaWYKIAotI2VuZGlmIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTkxNiwzOCArNjAzLDM2IEBAIHZvaWQgV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6Y28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikKIHsKICAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKwogICAgIGlmICht
X2F0dHJpYnV0ZXMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykg
ewogICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwg
bV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdf
RlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CiAgICAgICAgIGdsQmxpdEZyYW1lYnVmZmVyRVhUKHgs
IHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBH
TF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwogICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKICAgICB9Ci0jZW5kaWYKKwogICAgIGds
Q29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIGJvcmRlcik7Ci0jaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisK
ICAgICBpZiAobV9hdHRyaWJ1dGVzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlz
YW1wbGVGQk8pCiAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9ib3VuZEZCTyk7Ci0jZW5kaWYKIH0KIAogdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBs
ZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKICAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKwogICAgIGlmICht
X2F0dHJpYnV0ZXMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykg
ewogICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwg
bV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdf
RlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CiAgICAgICAgIGdsQmxpdEZyYW1lYnVmZmVyRVhUKHgs
IHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBH
TF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwogICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKICAgICB9Ci0jZW5kaWYKKwogICAgIGds
Q29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwg
d2lkdGgsIGhlaWdodCk7Ci0jaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisKICAg
ICBpZiAobV9hdHRyaWJ1dGVzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1w
bGVGQk8pCiAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
bV9ib3VuZEZCTyk7Ci0jZW5kaWYKIH0KIAogREVMRUdBVEVfVE9fR0xfMShjdWxsRmFjZSwgQ3Vs
bEZhY2UsIHVuc2lnbmVkIGxvbmcpCkBAIC0xMjQyLDExICs5MjcsMTEgQEAgREVMRUdBVEVfVE9f
R0xfMVIoaXNCdWZmZXIsIElzQnVmZmVyLCBXZQogCiBERUxFR0FURV9UT19HTF8xUihpc0VuYWJs
ZWQsIElzRW5hYmxlZCwgdW5zaWduZWQgbG9uZywgYm9vbCkKIAotREVMRUdBVEVfVE9fR0xfMVIo
aXNGcmFtZWJ1ZmZlciwgSXNGcmFtZWJ1ZmZlciwgV2ViR0xJZCwgYm9vbCkKK0RFTEVHQVRFX1RP
X0dMXzFSKGlzRnJhbWVidWZmZXIsIElzRnJhbWVidWZmZXJFWFQsIFdlYkdMSWQsIGJvb2wpCiAK
IERFTEVHQVRFX1RPX0dMXzFSKGlzUHJvZ3JhbSwgSXNQcm9ncmFtLCBXZWJHTElkLCBib29sKQog
Ci1ERUxFR0FURV9UT19HTF8xUihpc1JlbmRlcmJ1ZmZlciwgSXNSZW5kZXJidWZmZXIsIFdlYkdM
SWQsIGJvb2wpCitERUxFR0FURV9UT19HTF8xUihpc1JlbmRlcmJ1ZmZlciwgSXNSZW5kZXJidWZm
ZXJFWFQsIFdlYkdMSWQsIGJvb2wpCiAKIERFTEVHQVRFX1RPX0dMXzFSKGlzU2hhZGVyLCBJc1No
YWRlciwgV2ViR0xJZCwgYm9vbCkKIApAQCAtMTI2Niw3ICs5NTEsNiBAQCB2b2lkIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdv
IGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAv
LyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFk
aW5nIHBpeGVscy4KICAgICBnbEZsdXNoKCk7Ci0jaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdf
V0lORE9XCiAgICAgaWYgKG1fYXR0cmlidXRlcy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBt
X211bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURf
RlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKICAgICAgICAgZ2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKQEAgLTEyNzQsMTIgKzk1
OCwxMSBAQCB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlCiAgICAgICAg
IGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwogICAgICAg
ICBnbEZsdXNoKCk7CiAgICAgfQotI2VuZGlmCisKICAgICBnbFJlYWRQaXhlbHMoeCwgeSwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotI2lmbmRlZiBSRU5ERVJfVE9fREVC
VUdHSU5HX1dJTkRPVworCiAgICAgaWYgKG1fYXR0cmlidXRlcy5hbnRpYWxpYXMgJiYgbV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQogICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOwotI2VuZGlmCiB9CiAKIHZvaWQgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKQEAgLTE0
MzEsNyArMTExNCw3IEBAIHVuc2lnbmVkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwK
IHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBHTHVpbnQgbzsKLSAgICBnbEdlbkJ1
ZmZlcnMoMSwgJm8pOworICAgIGdsR2VuQnVmZmVyc0FSQigxLCAmbyk7CiAgICAgcmV0dXJuIG87
CiB9CiAKQEAgLTE0NzAsNyArMTE1Myw3IEBAIHVuc2lnbmVkIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwKIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRl
QnVmZmVyKHVuc2lnbmVkIGJ1ZmZlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CisgICAgZ2xEZWxldGVCdWZmZXJzQVJCKDEs
ICZidWZmZXIpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRl
bGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkIGZyYW1lYnVmZmVyKQpJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgJKHJl
dmlzaW9uIDY1MDE5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDI0ICszNywxMiBAQAogCiAjaW5j
bHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAKLSNpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgPHdp
bmRvd3MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiR0wvZ2xldy5oIgotI2lmIE9TKFdJTkRPV1Mp
Ci0jaW5jbHVkZSAiR0wvd2dsZXcuaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ0cpCi0jaW5j
bHVkZSA8T3BlbkdML09wZW5HTC5oPgotI2Vsc2UKKyNpZiAhUExBVEZPUk0oQ0cpCiAjZGVmaW5l
IEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQogI2VuZGlmCi0KLSNpZiBPUyhMSU5VWCkKLSNp
bmNsdWRlICJHTC9nbHhldy5oIgotI2VuZGlmCituYW1lc3BhY2UgZ2Z4IHsKK2NsYXNzIEdMQ29u
dGV4dDsKK30KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTMyMywxMDMgKzMxMSw3IEBAIHBy
aXZhdGU6CiAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgogICAg
IExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+IG1fc3ludGhldGljRXJyb3JzOwogCi0gICAgc3Rh
dGljIGJvb2wgc19pbml0aWFsaXplZEdMRVc7Ci0jaWYgT1MoV0lORE9XUykKLSAgICBIV05EIG1f
Y2FudmFzV2luZG93OwotICAgIEhEQyBtX2NhbnZhc0RDOwotICAgIEhHTFJDIG1fY29udGV4dE9i
ajsKLSNlbGlmIFBMQVRGT1JNKENHKQotICAgIENHTFBCdWZmZXJPYmogbV9wYnVmZmVyOwotICAg
IENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwotICAgIHVuc2lnbmVkIGNoYXIqIG1fcmVuZGVy
T3V0cHV0OwotI2VsaWYgT1MoTElOVVgpCi0gICAgR0xYQ29udGV4dCBtX2NvbnRleHRPYmo7Ci0g
ICAgR0xYUGJ1ZmZlciBtX3BidWZmZXI7Ci0KLSAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBwcm9i
bGVtcyBjYXVzZWQgYnkgbGlua2luZyBhZ2FpbnN0IGxpYkdMLCB3ZQotICAgIC8vIGR5bmFtaWNh
bGx5IGxvb2sgdXAgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCi0gICAgLy8gaHR0cDovL2NvZGUu
Z29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTY4MDAKLSAgICBjbGFzcyBH
TENvbm5lY3Rpb24gewotICAgICAgcHVibGljOgotICAgICAgICB+R0xDb25uZWN0aW9uKCk7Ci0K
LSAgICAgICAgc3RhdGljIEdMQ29ubmVjdGlvbiogY3JlYXRlKCk7Ci0KLSAgICAgICAgR0xYRkJD
b25maWcqIGNob29zZUZCQ29uZmlnKGludCBzY3JlZW4sIGNvbnN0IGludCAqYXR0cmliX2xpc3Qs
IGludCAqbmVsZW1lbnRzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9nbFhDaG9v
c2VGQkNvbmZpZyhtX2Rpc3BsYXksIHNjcmVlbiwgYXR0cmliX2xpc3QsIG5lbGVtZW50cyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBHTFhDb250ZXh0IGNyZWF0ZU5ld0NvbnRleHQoR0xYRkJDb25m
aWcgY29uZmlnLCBpbnQgcmVuZGVyVHlwZSwgR0xYQ29udGV4dCBzaGFyZUxpc3QsIEJvb2wgZGly
ZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9nbFhDcmVhdGVOZXdDb250ZXh0
KG1fZGlzcGxheSwgY29uZmlnLCByZW5kZXJUeXBlLCBzaGFyZUxpc3QsIGRpcmVjdCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBHTFhQYnVmZmVyIGNyZWF0ZVBidWZmZXIoR0xYRkJDb25maWcgY29u
ZmlnLCBjb25zdCBpbnQgKmF0dHJpYkxpc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBtX2dsWENyZWF0ZVBidWZmZXIobV9kaXNwbGF5LCBjb25maWcsIGF0dHJpYkxpc3QpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBkZXN0cm95UGJ1ZmZlcihHTFhQYnVmZmVyIHBidWYpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1fZ2xYRGVzdHJveVBidWZmZXIobV9kaXNwbGF5LCBwYnVm
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJvb2wgbWFrZUN1cnJlbnQoR0xYRHJhd2FibGUgZHJh
d2FibGUsIEdMWENvbnRleHQgY3R4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9n
bFhNYWtlQ3VycmVudChtX2Rpc3BsYXksIGRyYXdhYmxlLCBjdHgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBkZXN0cm95Q29udGV4dChHTFhDb250ZXh0IGN0eCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV9nbFhEZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIGN0eCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBHTFhDb250ZXh0IGdldEN1cnJlbnRDb250ZXh0KCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIG1fZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKLSAgICAgICAgfQotCi0g
ICAgICBwcml2YXRlOgotICAgICAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Ci0gICAgICAgIHZvaWQq
IG1fbGliR0w7Ci0gICAgICAgIFBGTkdMWENIT09TRUZCQ09ORklHUFJPQyBtX2dsWENob29zZUZC
Q29uZmlnOwotICAgICAgICBQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQyBtX2dsWENyZWF0ZU5l
d0NvbnRleHQ7Ci0gICAgICAgIFBGTkdMWENSRUFURVBCVUZGRVJQUk9DIG1fZ2xYQ3JlYXRlUGJ1
ZmZlcjsKLSAgICAgICAgUEZOR0xYREVTVFJPWVBCVUZGRVJQUk9DIG1fZ2xYRGVzdHJveVBidWZm
ZXI7Ci0gICAgICAgIHR5cGVkZWYgQm9vbCAoKiBQRk5HTFhNQUtFQ1VSUkVOVFBST0MpKERpc3Bs
YXkqIGRweSwgR0xYRHJhd2FibGUgZHJhd2FibGUsIEdMWENvbnRleHQgY3R4KTsKLSAgICAgICAg
UEZOR0xYTUFLRUNVUlJFTlRQUk9DIG1fZ2xYTWFrZUN1cnJlbnQ7Ci0gICAgICAgIHR5cGVkZWYg
dm9pZCAoKiBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MpKERpc3BsYXkqIGRweSwgR0xYQ29udGV4
dCBjdHgpOwotICAgICAgICBQRk5HTFhERVNUUk9ZQ09OVEVYVFBST0MgbV9nbFhEZXN0cm95Q29u
dGV4dDsKLSAgICAgICAgdHlwZWRlZiBHTFhDb250ZXh0ICgqIFBGTkdMWEdFVENVUlJFTlRDT05U
RVhUUFJPQykodm9pZCk7Ci0gICAgICAgIFBGTkdMWEdFVENVUlJFTlRDT05URVhUUFJPQyBtX2ds
WEdldEN1cnJlbnRDb250ZXh0OwotCi0gICAgICAgIEdMQ29ubmVjdGlvbihEaXNwbGF5KiBkaXNw
bGF5LAotICAgICAgICAgICAgICAgICAgICAgdm9pZCogbGliR0wsCi0gICAgICAgICAgICAgICAg
ICAgICBQRk5HTFhDSE9PU0VGQkNPTkZJR1BST0MgY2hvb3NlRkJDb25maWcsCi0gICAgICAgICAg
ICAgICAgICAgICBQRk5HTFhDUkVBVEVORVdDT05URVhUUFJPQyBjcmVhdGVOZXdDb250ZXh0LAot
ICAgICAgICAgICAgICAgICAgICAgUEZOR0xYQ1JFQVRFUEJVRkZFUlBST0MgY3JlYXRlUGJ1ZmZl
ciwKLSAgICAgICAgICAgICAgICAgICAgIFBGTkdMWERFU1RST1lQQlVGRkVSUFJPQyBkZXN0cm95
UGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgIFBGTkdMWE1BS0VDVVJSRU5UUFJPQyBtYWtl
Q3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAgIFBGTkdMWERFU1RST1lDT05URVhUUFJPQyBk
ZXN0cm95Q29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgIFBGTkdMWEdFVENVUlJFTlRDT05U
RVhUUFJPQyBnZXRDdXJyZW50Q29udGV4dCkKLSAgICAgICAgICAgIDogbV9saWJHTChsaWJHTCkK
LSAgICAgICAgICAgICwgbV9kaXNwbGF5KGRpc3BsYXkpCi0gICAgICAgICAgICAsIG1fZ2xYQ2hv
b3NlRkJDb25maWcoY2hvb3NlRkJDb25maWcpCi0gICAgICAgICAgICAsIG1fZ2xYQ3JlYXRlTmV3
Q29udGV4dChjcmVhdGVOZXdDb250ZXh0KQotICAgICAgICAgICAgLCBtX2dsWENyZWF0ZVBidWZm
ZXIoY3JlYXRlUGJ1ZmZlcikKLSAgICAgICAgICAgICwgbV9nbFhEZXN0cm95UGJ1ZmZlcihkZXN0
cm95UGJ1ZmZlcikKLSAgICAgICAgICAgICwgbV9nbFhNYWtlQ3VycmVudChtYWtlQ3VycmVudCkK
LSAgICAgICAgICAgICwgbV9nbFhEZXN0cm95Q29udGV4dChkZXN0cm95Q29udGV4dCkKLSAgICAg
ICAgICAgICwgbV9nbFhHZXRDdXJyZW50Q29udGV4dChnZXRDdXJyZW50Q29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0YXRpYyBHTENvbm5lY3Rpb24qIHNfZ2w7
Ci0jZWxzZQotICAgICNlcnJvciBNdXN0IHBvcnQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbCB0byB5b3VyIHBsYXRmb3JtCi0jZW5kaWYKKyAgICBnZng6OkdMQ29udGV4dCogbV9nbENv
bnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="52493"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="52494"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>