<?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>105357</bug_id>
          
          <creation_ts>2012-12-18 15:25:58 -0800</creation_ts>
          <short_desc>[EFL][WebGL] Refactor GLXSurface</short_desc>
          <delta_ts>2012-12-19 03:36:17 -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>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>105286</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kalyan">kalyan.kondapally</reporter>
          <assigned_to name="Kalyan">kalyan.kondapally</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>794114</commentid>
    <comment_count>0</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-18 15:25:58 -0800</bug_when>
    <thetext>This is in preparation to add EGL support. There is lot of code related to X which could be shared. This refactoring ensures that we don&apos;t have to duplicate any code between our EGL and GLX implementations. In future we might even be able to share this with GraphicsSurfaceGLX</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794355</commentid>
    <comment_count>1</comment_count>
      <attachid>180094</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-18 22:28:53 -0800</bug_when>
    <thetext>Created attachment 180094
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794356</commentid>
    <comment_count>2</comment_count>
      <attachid>180094</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-18 22:36:43 -0800</bug_when>
    <thetext>Comment on attachment 180094
WIP

Not marking it for review yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794387</commentid>
    <comment_count>3</comment_count>
      <attachid>180103</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-18 23:35:49 -0800</bug_when>
    <thetext>Created attachment 180103
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794423</commentid>
    <comment_count>4</comment_count>
      <attachid>180103</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-19 00:51:55 -0800</bug_when>
    <thetext>Comment on attachment 180103
patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        This is in preparation for adding EGL support.
&gt; +        There is lot of X related code which could be shared between our current GLX implementation
&gt; +        and EGL. This patch makes it possible to share the common code but doesn&apos;t change any functionality.

What about EGL platforms not having X ?

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXWindowResources.h:168
&gt; +    GLXFBConfig m_surfaceContextfbConfig;
&gt; +
&gt; +};

unneeded newline

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXWindowResources.h:172
&gt; +}
&gt; +
&gt; +#endif

unneeded newline

&gt; Source/WebCore/platform/graphics/surfaces/glx/X11WindowResources.h:108
&gt; +    }
&gt; +
&gt; +
&gt; +    XVisualInfo* visualInfo()
&gt; +    {
&gt; +        if (!m_VisualInfo)
&gt; +            surfaceContextConfig();
&gt; +
&gt; +        return m_VisualInfo;
&gt; +    }
&gt; +
&gt; +
&gt; +
&gt; +    bool isXRenderExtensionSupported()

what is up with the newlines?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794435</commentid>
    <comment_count>5</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-19 01:22:54 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 180103 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180103&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        This is in preparation for adding EGL support.
&gt; &gt; +        There is lot of X related code which could be shared between our current GLX implementation
&gt; &gt; +        and EGL. This patch makes it possible to share the common code but doesn&apos;t change any functionality.
&gt; 
&gt; What about EGL platforms not having X ?
&gt; 

We need to add support as needed. This moves us in the write direction though as there is clear separation and surface dosen&apos;t expect to have X. One would probably need to replace x11windowresources with the right support and things should work.

&gt; what is up with the newlines?
sorry, will fix and upload a new patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794468</commentid>
    <comment_count>6</comment_count>
      <attachid>180103</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-19 02:24:01 -0800</bug_when>
    <thetext>Comment on attachment 180103
patch

Attachment 180103 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15404608

New failing tests:
fast/frames/sandboxed-iframe-attribute-parsing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794470</commentid>
    <comment_count>7</comment_count>
      <attachid>180124</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-19 02:32:07 -0800</bug_when>
    <thetext>Created attachment 180124
patch

Review fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794491</commentid>
    <comment_count>8</comment_count>
      <attachid>180124</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-19 03:36:12 -0800</bug_when>
    <thetext>Comment on attachment 180124
patch

Clearing flags on attachment: 180124

Committed r138140: &lt;http://trac.webkit.org/changeset/138140&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794492</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-19 03:36:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180094</attachid>
            <date>2012-12-18 22:28:53 -0800</date>
            <delta_ts>2012-12-18 23:35:49 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>GraphicsSurfaceRefactpr.patch</filename>
            <type>text/plain</type>
            <size>29672</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGYxOWU3YzIuLjI1ZDRkM2IgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEy
LTEyLTE4ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtXZWJHTF0gUmVmYWN0b3IgR0xYU3VyZmFjZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTM1NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgaW4gcHJlcGFyYXRp
b24gZm9yIGFkZGluZyBFR0wgc3VwcG9ydC4KKyAgICAgICAgVGhlcmUgaXMgbG90IG9mIFggcmVs
YXRlZCBjb2RlIHdoaWNoIGNvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuIG91ciBjdXJyZW50IEdMWCBp
bXBsZW1lbnRhdGlvbgorICAgICAgICBhbmQgRUdMLiBUaGlzIHBhdGNoIG1ha2VzIGl0IHBvc3Np
YmxlIHRvIHNoYXJlIHRoZSBjb21tb24gY29kZSBidXQgZG9lc24ndCBjaGFuZ2UgYW55IGZ1bmN0
aW9uYWxpdHkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9y
dFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmln
dXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OmZyZWVSZXNvdXJjZXMp
OgorICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6R0xYUEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhQQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFBC
dWZmZXI6OmNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6c2V0
R2VvbWV0cnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmg6CisgICAgICAgIChHTFhUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKEdMWFBC
dWZmZXIpOgorCisgICAgICAgIEdMWCByZWxhdGVkIGltcGxlbWVudGF0aW9uLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNoYXJlZEdMWFJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRHTFhSZXNvdXJjZXM6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRHTFhSZXNvdXJjZXM6Om5hdGl2ZURpc3BsYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkR0xYUmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHTFhSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29uZmlnKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZEdMWFJlc291cmNlczo6U2hhcmVkR0xYUmVzb3VyY2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdMWFJlc291cmNlczo6Y3JlYXRlQ29uZmlnKToKKwor
ICAgICAgICBNb3ZpbmcgWCByZWxhdGVkIGNvZGUgdG8gYSBzZXBlcmF0ZSBjbGFzcy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNj
cmVlbldpbmRvdzo6WDExT2ZmU2NyZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9m
ZlNjcmVlbldpbmRvdzo6flgxMU9mZlNjcmVlbldpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpY
MTFPZmZTY3JlZW5XaW5kb3c6OnNldEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9m
ZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTaGFyZWRYMTFSZXNvdXJjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkWDExUmVzb3VyY2VzOjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRYMTFSZXNvdXJjZXM6OngxMURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
WDExUmVzb3VyY2VzOjpnZXRYV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJl
c291cmNlczo6dmlzdWFsSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRYMTFSZXNvdXJj
ZXM6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRYMTFSZXNvdXJjZXM6OlNoYXJlZFgxMVJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRYMTFSZXNvdXJjZXM6On5TaGFyZWRYMTFSZXNvdXJjZXMpOgorICAgICAgICAoWDExT2Zm
U2NyZWVuV2luZG93KToKKwogMjAxMi0xMi0xMiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVz
bWFubkBkaWdpYS5jb20+CiAKICAgICAgICAgW1F0XSBGaXggYnVpbGQgb24gTWFjCmRpZmYgLS1n
aXQgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1FZmwuY21ha2UKaW5kZXggMDJhNjBmYi4uMTlhNWUyYyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQpAQCAtMjk0LDYgKzI5NCw3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAKICAgICApCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAppbmRleCBjY2FmNzhhLi43MTJhNGQ3IDEwMDY0
NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1
cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYU3VyZmFjZS5jcHAKQEAgLTMwLDUxICszMCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVNoYXJlZFgxMVJlc291cmNlcyogU2hhcmVkWDExUmVzb3VyY2VzOjptX3N0YXRpY1No
YXJlZFJlc291cmNlID0gMDsKLQogc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRlc1td
ID0geyBHTFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0hULCAxLCAwIH07CiAK
LUdMWFN1cmZhY2U6OkdMWFN1cmZhY2UoKQotICAgIDogR0xQbGF0Zm9ybVN1cmZhY2UoKQotewot
ICAgIG1fc2hhcmVkUmVzb3VyY2VzID0gU2hhcmVkWDExUmVzb3VyY2VzOjpjcmVhdGUoKTsKLSAg
ICBtX3NoYXJlZERpc3BsYXkgPSBtX3NoYXJlZFJlc291cmNlcy0+ZGlzcGxheSgpOwotfQotCi1H
TFhTdXJmYWNlOjp+R0xYU3VyZmFjZSgpCi17Ci19Ci0KLVhWaXN1YWxJbmZvKiBHTFhTdXJmYWNl
Ojp2aXN1YWxJbmZvKCkKLXsKLSAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPnZpc3VhbElu
Zm8oKTsKLX0KLQotV2luZG93IEdMWFN1cmZhY2U6OnhXaW5kb3coKQotewotICAgIHJldHVybiBt
X3NoYXJlZFJlc291cmNlcy0+Z2V0WFdpbmRvdygpOwotfQotCi1HTFhGQkNvbmZpZyBHTFhTdXJm
YWNlOjpwQnVmZmVyQ29uZmlndXJhdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fc2hhcmVkUmVzb3Vy
Y2VzLT5wQnVmZmVyQ29udGV4dENvbmZpZygpOwotfQotCi1HTFhGQkNvbmZpZyBHTFhTdXJmYWNl
Ojp0cmFuc3BvcnRTdXJmYWNlQ29uZmlndXJhdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fc2hhcmVk
UmVzb3VyY2VzLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOwotfQotCi1ib29sIEdMWFN1cmZhY2U6
OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpCi17Ci0gICAgcmV0dXJuIG1fc2hhcmVkUmVz
b3VyY2VzLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKTsKLX0KLQogI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQogR0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSgp
Ci0gICAgOiBHTFhTdXJmYWNlKCkKKyAgICA6IFgxMU9mZlNjcmVlbldpbmRvdygpCiB7Ci0gICAg
aW5pdGlhbGl6ZSgpOworICAgIGNyZWF0ZU9mZnNjcmVlbldpbmRvdygpOwogfQogCiBHTFhUcmFu
c3BvcnRTdXJmYWNlOjp+R0xYVHJhbnNwb3J0U3VyZmFjZSgpCkBAIC04Myw3ICs0NSw3IEBAIEdM
WFRyYW5zcG9ydFN1cmZhY2U6On5HTFhUcmFuc3BvcnRTdXJmYWNlKCkKIAogUGxhdGZvcm1TdXJm
YWNlQ29uZmlnIEdMWFRyYW5zcG9ydFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQogewotICAgIHJl
dHVybiB0cmFuc3BvcnRTdXJmYWNlQ29uZmlndXJhdGlvbigpOworICAgIHJldHVybiBtX3NoYXJl
ZFJlc291cmNlcy0+c3VyZmFjZUNvbnRleHRDb25maWcoKTsKIH0KIAogdm9pZCBHTFhUcmFuc3Bv
cnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCkBAIC0xMDEsNDUgKzYzLDkgQEAgdm9pZCBHTFhUcmFu
c3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCiAgICAgICAgIGdsWFN3YXBCdWZmZXJzKHNoYXJl
ZERpc3BsYXkoKSwgbV9kcmF3YWJsZSk7CiB9CiAKLXZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6
c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKLXsKLSAgICBHTFBsYXRmb3JtU3Vy
ZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7Ci0gICAgaW50IHdpZHRoID0gbmV3UmVjdC53aWR0
aCgpOwotICAgIGludCBoZWlnaHQgPSBuZXdSZWN0LmhlaWdodCgpOwotICAgIFhSZXNpemVXaW5k
b3coc2hhcmVkRGlzcGxheSgpLCBtX2RyYXdhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9p
ZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjppbml0aWFsaXplKCkKLXsKLSAgICBEaXNwbGF5KiBkaXNw
bGF5ID0gc2hhcmVkRGlzcGxheSgpOwotICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9IHRyYW5zcG9y
dFN1cmZhY2VDb25maWd1cmF0aW9uKCk7Ci0gICAgaWYgKCFjb25maWcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFhWaXN1YWxJbmZvKiB2aXNJbmZvID0gdmlzdWFsSW5mbygpOwotICAgIGlmICgh
dmlzSW5mbykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVD
b2xvcm1hcChkaXNwbGF5LCB4V2luZG93KCksIHZpc0luZm8tPnZpc3VhbCwgQWxsb2NOb25lKTsK
LSAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlLmJhY2tn
cm91bmRfcGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXksIDApOwotICAgIGF0dHJpYnV0ZS5ib3Jk
ZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDApOwotICAgIGF0dHJpYnV0ZS5jb2xvcm1h
cCA9IGNtYXA7Ci0gICAgbV9kcmF3YWJsZSA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRv
dygpLCAwLCAwLCAxLCAxLCAwLCB2aXNJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8t
PnZpc3VhbCwgQ1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBpeGVsIHwgQ1dDb2xvcm1hcCwgJmF0dHJp
YnV0ZSk7Ci0gICAgaWYgKCFtX2RyYXdhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBYU2V0
V2luZG93QmFja2dyb3VuZFBpeG1hcChkaXNwbGF5LCBtX2RyYXdhYmxlLCAwKTsKLSAgICBYQ29t
cG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgbV9kcmF3YWJsZSwgQ29tcG9zaXRlUmVkaXJl
Y3RNYW51YWwpOwotCi0gICAgaWYgKGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpKQotICAg
ICAgICBYTWFwV2luZG93KGRpc3BsYXksIG1fZHJhd2FibGUpOwotfQotCiB2b2lkIEdMWFRyYW5z
cG9ydFN1cmZhY2U6OmRlc3Ryb3koKQogewogICAgIGZyZWVSZXNvdXJjZXMoKTsKLSAgICBHTFBs
YXRmb3JtU3VyZmFjZTo6ZGVzdHJveSgpOwogfQogCiB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6
OmZyZWVSZXNvdXJjZXMoKQpAQCAtMTU4LDcgKzg0LDcgQEAgdm9pZCBHTFhUcmFuc3BvcnRTdXJm
YWNlOjpmcmVlUmVzb3VyY2VzKCkKICNlbmRpZgogCiBHTFhQQnVmZmVyOjpHTFhQQnVmZmVyKCkK
LSAgICA6IEdMWFN1cmZhY2UoKQorICAgIDogWDExT2ZmU2NyZWVuV2luZG93KCkKIHsKICAgICBp
bml0aWFsaXplKCk7CiB9CkBAIC0xNzAsNyArOTYsNyBAQCBHTFhQQnVmZmVyOjp+R0xYUEJ1ZmZl
cigpCiB2b2lkIEdMWFBCdWZmZXI6OmluaXRpYWxpemUoKQogewogICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBzaGFyZWREaXNwbGF5KCk7Ci0gICAgR0xYRkJDb25maWcgY29uZmlnID0gcEJ1ZmZlckNv
bmZpZ3VyYXRpb24oKTsKKyAgICBHTFhGQkNvbmZpZyBjb25maWcgPSBtX3NoYXJlZFJlc291cmNl
cy0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsKICAgICBpZiAoIWNvbmZpZykKICAgICAgICAgcmV0
dXJuOwogCkBAIC0xNzksNyArMTA1LDcgQEAgdm9pZCBHTFhQQnVmZmVyOjppbml0aWFsaXplKCkK
IAogUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEdMWFBCdWZmZXI6OmNvbmZpZ3VyYXRpb24oKQogewot
ICAgIHJldHVybiBwQnVmZmVyQ29uZmlndXJhdGlvbigpOworICAgIHJldHVybiBtX3NoYXJlZFJl
c291cmNlcy0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsKIH0KIAogdm9pZCBHTFhQQnVmZmVyOjpk
ZXN0cm95KCkKQEAgLTIwMSw2ICsxMjcsMTEgQEAgdm9pZCBHTFhQQnVmZmVyOjpmcmVlUmVzb3Vy
Y2VzKCkKICAgICBtX2RyYXdhYmxlID0gMDsKIH0KIAordm9pZCBHTFhQQnVmZmVyOjpzZXRHZW9t
ZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQoreworICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpz
ZXRHZW9tZXRyeShuZXdSZWN0KTsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKaW5k
ZXggMDY4ODdiMi4uODU0NGYwZSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKQEAgLTI4LDIzNiArMjgsMTQg
QEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgSEFWRShHTFgpCiAKLSNp
bmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5oIgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQot
I2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KLSNpbmNsdWRlIDxYMTEvZXh0
ZW5zaW9ucy9YcmVuZGVyLmg+Ci0jZW5kaWYKKyNpbmNsdWRlICJHTFhXaW5kb3dSZXNvdXJjZXMu
aCIKKwogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2hhcmVkWDExUmVzb3VyY2Vz
IDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNoYXJlZFgxMVJlc291cmNlcyk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
aGFyZWRYMTFSZXNvdXJjZXM+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBpZiAoIW1fc3RhdGlj
U2hhcmVkUmVzb3VyY2UpCi0gICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlID0gbmV3
IFNoYXJlZFgxMVJlc291cmNlcygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3N0YXRp
Y1NoYXJlZFJlc291cmNlLT5yZWYoKTsKLQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobV9zdGF0
aWNTaGFyZWRSZXNvdXJjZSk7Ci0gICAgfQotCi0gICAgdm9pZCBkZXJlZigpCi0gICAgewotICAg
ICAgICBpZiAoZGVyZWZCYXNlKCkpIHsKLSAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3Vy
Y2UgPSAwOwotICAgICAgICAgICAgZGVsZXRlIHRoaXM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBXaW5kb3cgZ2V0WFdpbmRvdygpCi0gICAgewotICAgICAgICBpZiAoIW1fd2luZG93KSB7Ci0g
ICAgICAgICAgICBEaXNwbGF5KiBkcHkgPSBkaXNwbGF5KCk7Ci0gICAgICAgICAgICBYU2V0V2lu
ZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwotICAgICAgICAgICAgYXR0cmlidXRlcy5vdmVycmlk
ZV9yZWRpcmVjdCA9IHRydWU7Ci0gICAgICAgICAgICBtX3dpbmRvdyA9IFhDcmVhdGVTaW1wbGVX
aW5kb3coZHB5LCBYRGVmYXVsdFJvb3RXaW5kb3coZHB5KSwgLTEsIC0xLCAxLCAxLCAwLCBCbGFj
a1BpeGVsKGRweSwgMCksIFdoaXRlUGl4ZWwoZHB5LCAwKSk7Ci0gICAgICAgICAgICAvLyBGcm9t
IGh0dHA6Ly90cm9uY2hlLmNvbS9ndWkveC94bGliL3dpbmRvdy9hdHRyaWJ1dGVzLwotICAgICAg
ICAgICAgWENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoZHB5LCBtX3dpbmRvdywgQ1dPdmVycmlkZVJl
ZGlyZWN0LCAmYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICBYTWFwV2luZG93KGRweSwgbV93aW5k
b3cpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1fd2luZG93OwotICAgIH0KLQotICAg
IERpc3BsYXkqIGRpc3BsYXkoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2Rpc3BsYXkpCi0gICAg
ICAgICAgICBtX2Rpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7Ci0KLSAgICAgICAgcmV0dXJuIG1f
ZGlzcGxheTsKLSAgICB9Ci0KLSAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbygpCi0gICAgewot
ICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbykKLSAgICAgICAgICAgIHN1cmZhY2VDb250ZXh0Q29u
ZmlnKCk7Ci0KLSAgICAgICAgcmV0dXJuIG1fVmlzdWFsSW5mbzsKLSAgICB9Ci0KLSAgICBHTFhG
QkNvbmZpZyBjcmVhdGVDb25maWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSkKLSAgICB7Ci0gICAg
ICAgIGludCBudW1SZXR1cm5lZDsKLSAgICAgICAgbV9WaXN1YWxJbmZvID0gMDsKLSAgICAgICAg
R0xYRkJDb25maWcqIHRlbXAgPSBnbFhDaG9vc2VGQkNvbmZpZyhkaXNwbGF5KCksIERlZmF1bHRT
Y3JlZW4oZGlzcGxheSgpKSwgYXR0cmlidXRlcywgJm51bVJldHVybmVkKTsKLQotICAgICAgICBp
ZiAoIW51bVJldHVybmVkKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgR0xYRkJD
b25maWcgc2VsZWN0ZWRDb25maWcgPSAwOwotICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1SZXR1cm5lZDsgKytpKSB7Ci0gICAgICAg
ICAgICBtX1Zpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcoZGlzcGxheSgpLCB0
ZW1wW2ldKTsKLSAgICAgICAgICAgIGlmICghbV9WaXN1YWxJbmZvKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgICAgICAgICAgaWYgKG1f
c3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKSB7Ci0gICAgICAgICAgICAgICAgWFJlbmRlclBpY3RG
b3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRpc3BsYXkoKSwgbV9WaXN1
YWxJbmZvLT52aXN1YWwpOwotICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5k
aXJlY3QuYWxwaGFNYXNrID4gMCkgewotICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZp
ZyA9IHRlbXBbaV07Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IGlmIChtX1Zpc3VhbEluZm8tPmRlcHRoID09IDMyKSB7Ci0jZWxzZQotICAgICAgICAgICAgaWYg
KG1fVmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpIHsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNl
bGVjdGVkQ29uZmlnID0gdGVtcFtpXTsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEaWQgbm90IGZpbmQgYW55IHZp
c3VhbCBzdXBwb3J0aW5nIGFscGhhLCBzZWxlY3QgdGhlIGZpcnN0IGF2YWlsYWJsZSBjb25maWcu
Ci0gICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIHNlbGVjdGVkQ29uZmlnID0gdGVt
cFswXTsKLSAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZp
ZyhtX2Rpc3BsYXksIHRlbXBbMF0pOwotICAgICAgICB9Ci0KLSAgICAgICAgWEZyZWUodGVtcCk7
Ci0KLSAgICAgICAgcmV0dXJuIHNlbGVjdGVkQ29uZmlnOwotICAgIH0KLQotICAgIEdMWEZCQ29u
ZmlnIHBCdWZmZXJDb250ZXh0Q29uZmlnKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9wYnVmZmVy
ZmJDb25maWcpIHsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgYXR0cmlidXRlc1tdID0g
ewotICAgICAgICAgICAgICAgIEdMWF9MRVZFTCwgMCwKLSAgICAgICAgICAgICAgICBHTFhfRFJB
V0FCTEVfVFlQRSwgR0xYX1BCVUZGRVJfQklULAotICAgICAgICAgICAgICAgIEdMWF9SRU5ERVJf
VFlQRSwgICBHTFhfUkdCQV9CSVQsCi0gICAgICAgICAgICAgICAgR0xYX1JFRF9TSVpFLCAgICAg
IDEsCi0gICAgICAgICAgICAgICAgR0xYX0dSRUVOX1NJWkUsICAgIDEsCi0gICAgICAgICAgICAg
ICAgR0xYX0JMVUVfU0laRSwgICAgIDEsCi0gICAgICAgICAgICAgICAgR0xYX0RPVUJMRUJVRkZF
UiwgIEdMX0ZBTFNFLAotICAgICAgICAgICAgICAgIE5vbmUKLSAgICAgICAgICAgIH07Ci0KLSAg
ICAgICAgICAgIGludCBudW1SZXR1cm5lZDsKLSAgICAgICAgICAgIEdMWEZCQ29uZmlnKiB0ZW1w
ID0gZ2xYQ2hvb3NlRkJDb25maWcoZGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkoKSks
IGF0dHJpYnV0ZXMsICZudW1SZXR1cm5lZCk7Ci0gICAgICAgICAgICBpZiAobnVtUmV0dXJuZWQp
Ci0gICAgICAgICAgICAgICAgbV9wYnVmZmVyZmJDb25maWcgPSB0ZW1wWzBdOwotICAgICAgICAg
ICAgWEZyZWUodGVtcCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbV9wYnVmZmVyZmJD
b25maWc7Ci0gICAgfQotCi0gICAgR0xYRkJDb25maWcgc3VyZmFjZUNvbnRleHRDb25maWcoKQot
ICAgIHsKLSAgICAgICAgaWYgKCFtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcpIHsKLSAgICAgICAg
ICAgIHN0YXRpYyBpbnQgYXR0cmlidXRlc1tdID0gewotICAgICAgICAgICAgICAgIEdMWF9MRVZF
TCwgMCwKLSAgICAgICAgICAgICAgICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1dJTkRPV19CSVQs
Ci0gICAgICAgICAgICAgICAgR0xYX1JFTkRFUl9UWVBFLCAgIEdMWF9SR0JBX0JJVCwKLSAgICAg
ICAgICAgICAgICBHTFhfUkVEX1NJWkUsICAgICAgMSwKLSAgICAgICAgICAgICAgICBHTFhfR1JF
RU5fU0laRSwgICAgMSwKLSAgICAgICAgICAgICAgICBHTFhfQkxVRV9TSVpFLCAgICAgMSwKLSAg
ICAgICAgICAgICAgICBHTFhfQUxQSEFfU0laRSwgICAgMSwKLSAgICAgICAgICAgICAgICBHTFhf
REVQVEhfU0laRSwgICAgMSwKLSAgICAgICAgICAgICAgICBHTFhfWF9WSVNVQUxfVFlQRSwgR0xY
X1RSVUVfQ09MT1IsCi0gICAgICAgICAgICAgICAgR0xYX0RPVUJMRUJVRkZFUiwgIFRydWUsCi0g
ICAgICAgICAgICAgICAgTm9uZQotICAgICAgICAgICAgfTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKLSAgICAgICAgICAgIGludCBldmVudEJhc2VwLCBlcnJvckJhc2VwOwotICAgICAgICAg
ICAgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24gPSBYUmVuZGVyUXVlcnlFeHRlbnNpb24oZGlz
cGxheSgpLCAmZXZlbnRCYXNlcCwgJmVycm9yQmFzZXApOwotI2VuZGlmCi0gICAgICAgICAgICBt
X3N1cmZhY2VDb250ZXh0ZmJDb25maWcgPSBjcmVhdGVDb25maWcoYXR0cmlidXRlcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnOwotICAgIH0K
LQotICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgU2hhcmVkWDExUmVzb3VyY2VzKCkKLSAgICAgICAgOiBtX3N1cHBvcnRzWFJlbmRlckV4dGVu
c2lvbihmYWxzZSkKLSAgICAgICAgLCBtX21hcmtGb3JEZWxldGlvbihmYWxzZSkKLSAgICAgICAg
LCBtX3dpbmRvdygwKQotICAgICAgICAsIG1fZGlzcGxheSgwKQotICAgICAgICAsIG1fcGJ1ZmZl
cmZiQ29uZmlnKDApCi0gICAgICAgICwgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKDApCi0gICAg
ICAgICwgbV9WaXN1YWxJbmZvKDApCi0gICAgewotICAgIH0KLQotICAgIH5TaGFyZWRYMTFSZXNv
dXJjZXMoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2Rpc3BsYXkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgaWYgKG1fd2luZG93KSB7Ci0gICAgICAgICAgICBYVW5tYXBXaW5kb3co
bV9kaXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAgICAgICAgICBYRGVzdHJveVdpbmRvdyhtX2Rpc3Bs
YXksIG1fd2luZG93KTsKLSAgICAgICAgICAgIG1fd2luZG93ID0gMDsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChtX3BidWZmZXJmYkNvbmZpZykKLSAgICAgICAgICAgIG1fcGJ1ZmZlcmZiQ29u
ZmlnID0gMDsKLQotICAgICAgICBpZiAobV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKQotICAgICAg
ICAgICAgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnID0gMDsKLQotICAgICAgICBpZiAobV9WaXN1
YWxJbmZvKSB7Ci0gICAgICAgICAgICBYRnJlZShtX1Zpc3VhbEluZm8pOwotICAgICAgICAgICAg
bV9WaXN1YWxJbmZvID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIFhDbG9zZURpc3BsYXkobV9k
aXNwbGF5KTsKLSAgICAgICAgbV9kaXNwbGF5ID0gMDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU2hh
cmVkWDExUmVzb3VyY2VzKiBtX3N0YXRpY1NoYXJlZFJlc291cmNlOwotICAgIGJvb2wgbV9zdXBw
b3J0c1hSZW5kZXJFeHRlbnNpb247Ci0gICAgYm9vbCBtX21hcmtGb3JEZWxldGlvbjsKLSAgICBX
aW5kb3cgbV93aW5kb3c7Ci0gICAgRGlzcGxheSogbV9kaXNwbGF5OwotICAgIEdMWEZCQ29uZmln
IG1fcGJ1ZmZlcmZiQ29uZmlnOwotICAgIEdMWEZCQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRmYkNv
bmZpZzsKLSAgICBYVmlzdWFsSW5mbyogbV9WaXN1YWxJbmZvOwotfTsKLQotY2xhc3MgR0xYU3Vy
ZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoR0xYU3VyZmFjZSk7Ci0KLXB1YmxpYzoKLSAgICBHTFhTdXJmYWNlKCk7Ci0gICAgdmlydHVh
bCB+R0xYU3VyZmFjZSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgWFZpc3VhbEluZm8qIHZpc3VhbElu
Zm8oKTsKLSAgICBXaW5kb3cgeFdpbmRvdygpOwotICAgIEdMWEZCQ29uZmlnIHBCdWZmZXJDb25m
aWd1cmF0aW9uKCk7Ci0gICAgR0xYRkJDb25maWcgdHJhbnNwb3J0U3VyZmFjZUNvbmZpZ3VyYXRp
b24oKTsKLSAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOwotCi1wcml2YXRl
OgotICAgIFJlZlB0cjxTaGFyZWRYMTFSZXNvdXJjZXM+IG1fc2hhcmVkUmVzb3VyY2VzOwotfTsK
LQogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotY2xhc3MgR0xYVHJhbnNwb3J0U3VyZmFjZSA6
IHB1YmxpYyBHTFhTdXJmYWNlIHsKK2NsYXNzIEdMWFRyYW5zcG9ydFN1cmZhY2UgOiBwdWJsaWMg
WDExT2ZmU2NyZWVuV2luZG93IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhUcmFuc3Bv
cnRTdXJmYWNlKTsKIAogcHVibGljOgpAQCAtMjY1LDcgKzQzLDYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgfkdMWFRyYW5zcG9ydFN1cmZhY2UoKTsKICAgICBQbGF0Zm9ybVN1cmZhY2VDb25maWcg
Y29uZmlndXJhdGlvbigpOwogICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKLSAgICB2b2lkIHNldEdl
b21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpOwogICAgIHZvaWQgZGVzdHJveSgpOwogCiBw
cml2YXRlOgpAQCAtMjc0LDEzICs1MSwxNCBAQCBwcml2YXRlOgogfTsKICNlbmRpZgogCi1jbGFz
cyBHTFhQQnVmZmVyIDogcHVibGljIEdMWFN1cmZhY2UgeworY2xhc3MgR0xYUEJ1ZmZlciA6IHB1
YmxpYyBYMTFPZmZTY3JlZW5XaW5kb3cgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMWFBC
dWZmZXIpOwogCiBwdWJsaWM6CiAgICAgR0xYUEJ1ZmZlcigpOwogICAgIHZpcnR1YWwgfkdMWFBC
dWZmZXIoKTsKICAgICBQbGF0Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigpOworICAg
IHZvaWQgc2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOwogICAgIHZvaWQgZGVzdHJveSgpOwog
CiBwcml2YXRlOgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYV2luZG93UmVzb3VyY2VzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxNjc4ZgotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYV2luZG93UmVzb3VyY2VzLmgK
QEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0xYV2luZG93
UmVzb3VyY2VzX2gKKyNkZWZpbmUgR0xYV2luZG93UmVzb3VyY2VzX2gKKworI2luY2x1ZGUgIlgx
MVdpbmRvd1Jlc291cmNlcy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiBIQVZFKEdMWCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRHTFhSZXNv
dXJjZXMgOiBwdWJsaWMgU2hhcmVkWDExUmVzb3VyY2VzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTaGFyZWRHTFhSZXNvdXJjZXMpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2hhcmVkR0xYUmVzb3VyY2VzPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0
YXRpY1NoYXJlZFJlc291cmNlKQorICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9
IG5ldyBTaGFyZWRHTFhSZXNvdXJjZXMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9z
dGF0aWNTaGFyZWRSZXNvdXJjZS0+cmVmKCk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG1f
c3RhdGljU2hhcmVkUmVzb3VyY2UpOworICAgIH0KKworICAgIFBsYXRmb3JtRGlzcGxheSBuYXRp
dmVEaXNwbGF5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBTaGFyZWRYMTFSZXNvdXJjZXM6Ongx
MURpc3BsYXkoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEdMWEZCQ29uZmlnIHBCdWZmZXJDb250
ZXh0Q29uZmlnKCkKKyAgICB7CisgICAgICAgIGlmICghbV9wYnVmZmVyZmJDb25maWcpIHsKKyAg
ICAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgYXR0cmlidXRlc1tdID0geworICAgICAgICAgICAg
ICAgIEdMWF9MRVZFTCwgMCwKKyAgICAgICAgICAgICAgICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xY
X1BCVUZGRVJfQklULAorICAgICAgICAgICAgICAgIEdMWF9SRU5ERVJfVFlQRSwgICBHTFhfUkdC
QV9CSVQsCisgICAgICAgICAgICAgICAgR0xYX1JFRF9TSVpFLCAgICAgIDEsCisgICAgICAgICAg
ICAgICAgR0xYX0dSRUVOX1NJWkUsICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0JMVUVfU0la
RSwgICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0RPVUJMRUJVRkZFUiwgIEdMX0ZBTFNFLAor
ICAgICAgICAgICAgICAgIE5vbmUKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGludCBu
dW1SZXR1cm5lZDsKKyAgICAgICAgICAgIEdMWEZCQ29uZmlnKiB0ZW1wID0gZ2xYQ2hvb3NlRkJD
b25maWcobmF0aXZlRGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKG5hdGl2ZURpc3BsYXkoKSksIGF0
dHJpYnV0ZXMsICZudW1SZXR1cm5lZCk7CisgICAgICAgICAgICBpZiAobnVtUmV0dXJuZWQpCisg
ICAgICAgICAgICAgICAgbV9wYnVmZmVyZmJDb25maWcgPSB0ZW1wWzBdOworICAgICAgICAgICAg
WEZyZWUodGVtcCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9wYnVmZmVyZmJDb25m
aWc7CisgICAgfQorCisgICAgdmlydHVhbCBHTFhGQkNvbmZpZyBzdXJmYWNlQ29udGV4dENvbmZp
ZygpCisgICAgeworICAgICAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZykgeworICAg
ICAgICAgICAgc3RhdGljIGludCBhdHRyaWJ1dGVzW10gPSB7CisgICAgICAgICAgICAgICAgR0xY
X0xFVkVMLCAwLAorICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfV0lORE9X
X0JJVCwKKyAgICAgICAgICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklULAor
ICAgICAgICAgICAgICAgIEdMWF9SRURfU0laRSwgICAgICAxLAorICAgICAgICAgICAgICAgIEdM
WF9HUkVFTl9TSVpFLCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUsICAgICAx
LAorICAgICAgICAgICAgICAgIEdMWF9BTFBIQV9TSVpFLCAgICAxLAorICAgICAgICAgICAgICAg
IEdMWF9ERVBUSF9TSVpFLCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9YX1ZJU1VBTF9UWVBF
LCBHTFhfVFJVRV9DT0xPUiwKKyAgICAgICAgICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCAgVHJ1
ZSwKKyAgICAgICAgICAgICAgICBOb25lCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBt
X3N1cmZhY2VDb250ZXh0ZmJDb25maWcgPSBjcmVhdGVDb25maWcoYXR0cmlidXRlcyk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBTaGFyZWRHTFhSZXNvdXJjZXMoKQorICAgICAgICA6IFNoYXJlZFgx
MVJlc291cmNlcygpCisgICAgICAgICwgbV9wYnVmZmVyZmJDb25maWcoMCkKKyAgICAgICAgLCBt
X3N1cmZhY2VDb250ZXh0ZmJDb25maWcoMCkKKyAgICB7CisgICAgfQorCisgICAgR0xYRkJDb25m
aWcgY3JlYXRlQ29uZmlnKGNvbnN0IGludCBhdHRyaWJ1dGVzW10pCisgICAgeworICAgICAgICBp
bnQgbnVtUmV0dXJuZWQ7CisgICAgICAgIG1fVmlzdWFsSW5mbyA9IDA7CisgICAgICAgIEdMWEZC
Q29uZmlnKiB0ZW1wID0gZ2xYQ2hvb3NlRkJDb25maWcobmF0aXZlRGlzcGxheSgpLCBEZWZhdWx0
U2NyZWVuKG5hdGl2ZURpc3BsYXkoKSksIGF0dHJpYnV0ZXMsICZudW1SZXR1cm5lZCk7CisKKyAg
ICAgICAgaWYgKCFudW1SZXR1cm5lZCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAg
IEdMWEZCQ29uZmlnIHNlbGVjdGVkQ29uZmlnID0gMDsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUmV0dXJuZWQ7ICsraSkgewor
ICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKG5hdGl2
ZURpc3BsYXkoKSwgdGVtcFtpXSk7CisgICAgICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAg
ICAgICAgIGlmIChtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikgeworICAgICAgICAgICAgICAg
IFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChuYXRp
dmVEaXNwbGF5KCksIG1fVmlzdWFsSW5mby0+dmlzdWFsKTsKKyAgICAgICAgICAgICAgICBpZiAo
Zm9ybWF0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1wW2ldOworICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9WaXN1YWxJbmZvLT5kZXB0aCA9PSAzMikgeworI2Vs
c2UKKyAgICAgICAgICAgIGlmIChtX1Zpc3VhbEluZm8tPmRlcHRoID09IDMyKSB7CisjZW5kaWYK
KyAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbaV07CisgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
RGlkIG5vdCBmaW5kIGFueSB2aXN1YWwgc3VwcG9ydGluZyBhbHBoYSwgc2VsZWN0IHRoZSBmaXJz
dCBhdmFpbGFibGUgY29uZmlnLgorICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBz
ZWxlY3RlZENvbmZpZyA9IHRlbXBbMF07CisgICAgICAgICAgICBtX1Zpc3VhbEluZm8gPSBnbFhH
ZXRWaXN1YWxGcm9tRkJDb25maWcobV9kaXNwbGF5LCB0ZW1wWzBdKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFhGcmVlKHRlbXApOworCisgICAgICAgIHJldHVybiBzZWxlY3RlZENvbmZpZzsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIH5TaGFyZWRHTFhSZXNvdXJjZXMoKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX2Rpc3BsYXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fcGJ1
ZmZlcmZiQ29uZmlnKQorICAgICAgICAgICAgbV9wYnVmZmVyZmJDb25maWcgPSAwOworCisgICAg
ICAgIGlmIChtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcpCisgICAgICAgICAgICBtX3N1cmZhY2VD
b250ZXh0ZmJDb25maWcgPSAwOworICAgIH0KKworICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlcmZi
Q29uZmlnOworICAgIEdMWEZCQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKKworfTsK
KworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlNjE4NQotLS0gL2Rldi9u
dWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDEx
V2luZG93UmVzb3VyY2VzLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlgxMVdpbmRvd1Jlc291cmNlcy5oIgor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiR0xYV2luZG93
UmVzb3VyY2VzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxhdGZvcm1TaGFyZWRSZXNv
dXJjZXMqIFNoYXJlZFgxMVJlc291cmNlczo6bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7CisK
K1gxMU9mZlNjcmVlbldpbmRvdzo6WDExT2ZmU2NyZWVuV2luZG93KCkKKyAgICA6IEdMUGxhdGZv
cm1TdXJmYWNlKCkKK3sKKyAgICBtX3NoYXJlZFJlc291cmNlcyA9IFBsYXRmb3JtU2hhcmVkUmVz
b3VyY2VzOjpjcmVhdGUoKTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBtX3NoYXJlZFJlc291cmNl
cy0+bmF0aXZlRGlzcGxheSgpOworfQorCitYMTFPZmZTY3JlZW5XaW5kb3c6On5YMTFPZmZTY3Jl
ZW5XaW5kb3coKQoreworfQorCit2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6c2V0R2VvbWV0cnko
Y29uc3QgSW50UmVjdCYgbmV3UmVjdCkKK3sKKyAgICBHTFBsYXRmb3JtU3VyZmFjZTo6c2V0R2Vv
bWV0cnkobmV3UmVjdCk7CisgICAgWFJlc2l6ZVdpbmRvdyhtX3NoYXJlZFJlc291cmNlcy0+eDEx
RGlzcGxheSgpLCBtX2RyYXdhYmxlLCBuZXdSZWN0LndpZHRoKCksIG5ld1JlY3QuaGVpZ2h0KCkp
OworfQorCit2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KCkK
K3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXko
KTsKKworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR0xYRkJDb25m
aWcgY29uZmlnID0gbV9zaGFyZWRSZXNvdXJjZXMtPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7CisK
KyAgICBpZiAoIWNvbmZpZykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2
ZSBhIHZhbGlkIGNvbmZpZ2lyYXRpb24uIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBYVmlzdWFsSW5mbyogdmlzSW5mbyA9IG1fc2hhcmVkUmVzb3VyY2VzLT52aXN1YWxJbmZvKCk7
CisKKyAgICBpZiAoIXZpc0luZm8pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZmlu
ZCB2YWxpZCBYVmlzdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBXaW5kb3cg
eFdpbmRvdyA9IG1fc2hhcmVkUmVzb3VyY2VzLT5nZXRYV2luZG93KCk7CisKKyAgICBpZiAoIXhX
aW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29s
b3JtYXAoZGlzcGxheSwgeFdpbmRvdywgdmlzSW5mby0+dmlzdWFsLCBBbGxvY05vbmUpOworICAg
IFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUuYmFja2dyb3Vu
ZF9waXhlbCA9IFdoaXRlUGl4ZWwoZGlzcGxheSwgMCk7CisgICAgYXR0cmlidXRlLmJvcmRlcl9w
aXhlbCA9IEJsYWNrUGl4ZWwoZGlzcGxheSwgMCk7CisgICAgYXR0cmlidXRlLmNvbG9ybWFwID0g
Y21hcDsKKyAgICBtX2RyYXdhYmxlID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LCB4V2luZG93LCAw
LCAwLCAxLCAxLCAwLCB2aXNJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8tPnZpc3Vh
bCwgQ1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBpeGVsIHwgQ1dDb2xvcm1hcCwgJmF0dHJpYnV0ZSk7
CisKKyAgICBpZiAoIW1fZHJhd2FibGUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
Y3JlYXRlIG9mZnNjcmVlbiB3aW5kb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKGRpc3BsYXksIG1fZHJhd2FibGUsIDApOworICAg
IFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCBtX2RyYXdhYmxlLCBDb21wb3NpdGVS
ZWRpcmVjdE1hbnVhbCk7CisKKyAgICBpZiAobV9zaGFyZWRSZXNvdXJjZXMtPmlzWFJlbmRlckV4
dGVuc2lvblN1cHBvcnRlZCgpKQorICAgICAgICBYTWFwV2luZG93KGRpc3BsYXksIG1fZHJhd2Fi
bGUpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjUxNWE5Ci0tLSAvZGV2L251bGwK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5k
b3dSZXNvdXJjZXMuaApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBYMTFXaW5kb3dSZXNvdXJjZXNfaAorI2RlZmluZSBYMTFXaW5kb3dSZXNvdXJjZXNfaAor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiR0xQbGF0Zm9y
bVN1cmZhY2UuaCIKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorI2luY2x1ZGUgPFgxMS9l
eHRlbnNpb25zL1hjb21wb3NpdGUuaD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVy
Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVkR0xY
UmVzb3VyY2VzOwordHlwZWRlZiBTaGFyZWRHTFhSZXNvdXJjZXMgUGxhdGZvcm1TaGFyZWRSZXNv
dXJjZXM7CisKK2NsYXNzIFNoYXJlZFgxMVJlc291cmNlcyA6IHB1YmxpYyBXVEY6OlJlZkNvdW50
ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFyZWRYMTFSZXNvdXJjZXMpOwor
CitwdWJsaWM6CisgICAgdm9pZCBkZXJlZigpCisgICAgeworICAgICAgICBpZiAoZGVyZWZCYXNl
KCkpIHsKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UgPSAwOworICAgICAgICAg
ICAgZGVsZXRlIHRoaXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBEaXNwbGF5KiB4MTFEaXNw
bGF5KCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5KSB7CisgICAgICAgICAgICBtX2Rp
c3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7CisgICAgICAgICAgICBpZiAoIW1fZGlzcGxheSkgewor
ICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG1ha2UgY29ubmVjdGlvbiB3aXRo
IFgiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgICAgIGlmIChtX2Rpc3BsYXkpIHsKKyAgICAgICAg
ICAgICAgICBpbnQgZXZlbnRCYXNlcCwgZXJyb3JCYXNlcDsKKyAgICAgICAgICAgICAgICBtX3N1
cHBvcnRzWFJlbmRlckV4dGVuc2lvbiA9IFhSZW5kZXJRdWVyeUV4dGVuc2lvbihtX2Rpc3BsYXks
ICZldmVudEJhc2VwLCAmZXJyb3JCYXNlcCk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBtX2Rpc3BsYXk7CisgICAgfQorCisgICAgV2luZG93IGdl
dFhXaW5kb3coKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3dpbmRvdykgeworICAgICAgICAgICAg
RGlzcGxheSogZHB5ID0geDExRGlzcGxheSgpOworICAgICAgICAgICAgWFNldFdpbmRvd0F0dHJp
YnV0ZXMgYXR0cmlidXRlczsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJl
Y3QgPSB0cnVlOworICAgICAgICAgICAgbV93aW5kb3cgPSBYQ3JlYXRlU2ltcGxlV2luZG93KGRw
eSwgWERlZmF1bHRSb290V2luZG93KGRweSksIC0xLCAtMSwgMSwgMSwgMCwgQmxhY2tQaXhlbChk
cHksIDApLCBXaGl0ZVBpeGVsKGRweSwgMCkpOworICAgICAgICAgICAgLy8gRnJvbSBodHRwOi8v
dHJvbmNoZS5jb20vZ3VpL3gveGxpYi93aW5kb3cvYXR0cmlidXRlcy8KKyAgICAgICAgICAgIFhD
aGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKGRweSwgbV93aW5kb3csIENXT3ZlcnJpZGVSZWRpcmVjdCwg
JmF0dHJpYnV0ZXMpOworICAgICAgICAgICAgWE1hcFdpbmRvdyhkcHksIG1fd2luZG93KTsKKwor
ICAgICAgICAgICAgaWYgKCFtX3dpbmRvdykgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGNyZWF0ZSBTaW1wbGVXaW5kb3ciKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX3dpbmRvdzsK
KyAgICB9CisKKworICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCkKKyAgICB7CisgICAgICAg
IGlmICghbV9WaXN1YWxJbmZvKQorICAgICAgICAgICAgc3VyZmFjZUNvbnRleHRDb25maWcoKTsK
KworICAgICAgICByZXR1cm4gbV9WaXN1YWxJbmZvOworICAgIH0KKworCisKKyAgICBib29sIGlz
WFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdXBw
b3J0c1hSZW5kZXJFeHRlbnNpb247CisgICAgfQorCisgICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZh
Y2VDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKSA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9y
bVN1cmZhY2VDb25maWcgc3VyZmFjZUNvbnRleHRDb25maWcoKSA9IDA7CisgICAgdmlydHVhbCBQ
bGF0Zm9ybURpc3BsYXkgbmF0aXZlRGlzcGxheSgpID0gMDsKKworcHJvdGVjdGVkOgorICAgIFNo
YXJlZFgxMVJlc291cmNlcygpCisgICAgICAgIDogbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24o
ZmFsc2UpCisgICAgICAgICwgbV93aW5kb3coMCkKKyAgICAgICAgLCBtX2Rpc3BsYXkoMCkKKyAg
ICAgICAgLCBtX1Zpc3VhbEluZm8oMCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+U2hh
cmVkWDExUmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5KQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX3dpbmRvdykgeworICAgICAgICAgICAgWFVu
bWFwV2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cpOworICAgICAgICAgICAgWERlc3Ryb3lXaW5k
b3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgICAgICAgICBtX3dpbmRvdyA9IDA7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobV9WaXN1YWxJbmZvKSB7CisgICAgICAgICAgICBYRnJlZSht
X1Zpc3VhbEluZm8pOworICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gMDsKKyAgICAgICAgfQor
CisgICAgICAgIFhDbG9zZURpc3BsYXkobV9kaXNwbGF5KTsKKyAgICAgICAgbV9kaXNwbGF5ID0g
MDsKKyAgICB9CisKKyAgICBzdGF0aWMgUGxhdGZvcm1TaGFyZWRSZXNvdXJjZXMqIG1fc3RhdGlj
U2hhcmVkUmVzb3VyY2U7CisgICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKKyAg
ICBXaW5kb3cgbV93aW5kb3c7CisgICAgRGlzcGxheSogbV9kaXNwbGF5OworICAgIFhWaXN1YWxJ
bmZvKiBtX1Zpc3VhbEluZm87Cit9OworCitjbGFzcyBYMTFPZmZTY3JlZW5XaW5kb3cgOiBwdWJs
aWMgR0xQbGF0Zm9ybVN1cmZhY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFgxMU9mZlNj
cmVlbldpbmRvdyk7CisKK3B1YmxpYzoKKyAgICBYMTFPZmZTY3JlZW5XaW5kb3coKTsKKyAgICB2
aXJ0dWFsIH5YMTFPZmZTY3JlZW5XaW5kb3coKTsKKyAgICB2b2lkIHNldEdlb21ldHJ5KGNvbnN0
IEludFJlY3QmKTsKKyAgICB2b2lkIGNyZWF0ZU9mZnNjcmVlbldpbmRvdygpOworCitwcm90ZWN0
ZWQ6CisgICAgUmVmUHRyPFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzPiBtX3NoYXJlZFJlc291cmNl
czsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180103</attachid>
            <date>2012-12-18 23:35:49 -0800</date>
            <delta_ts>2012-12-19 02:32:07 -0800</delta_ts>
            <desc>patch</desc>
            <filename>GraphicsSurfaceRefactpr.patch</filename>
            <type>text/plain</type>
            <size>30171</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGYxOWU3YzIuLjI1ZDRkM2IgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEy
LTEyLTE4ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtXZWJHTF0gUmVmYWN0b3IgR0xYU3VyZmFjZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTM1NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgaW4gcHJlcGFyYXRp
b24gZm9yIGFkZGluZyBFR0wgc3VwcG9ydC4KKyAgICAgICAgVGhlcmUgaXMgbG90IG9mIFggcmVs
YXRlZCBjb2RlIHdoaWNoIGNvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuIG91ciBjdXJyZW50IEdMWCBp
bXBsZW1lbnRhdGlvbgorICAgICAgICBhbmQgRUdMLiBUaGlzIHBhdGNoIG1ha2VzIGl0IHBvc3Np
YmxlIHRvIHNoYXJlIHRoZSBjb21tb24gY29kZSBidXQgZG9lc24ndCBjaGFuZ2UgYW55IGZ1bmN0
aW9uYWxpdHkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9y
dFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmln
dXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OmZyZWVSZXNvdXJjZXMp
OgorICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6R0xYUEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhQQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFBC
dWZmZXI6OmNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6c2V0
R2VvbWV0cnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmg6CisgICAgICAgIChHTFhUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKEdMWFBC
dWZmZXIpOgorCisgICAgICAgIEdMWCByZWxhdGVkIGltcGxlbWVudGF0aW9uLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNoYXJlZEdMWFJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRHTFhSZXNvdXJjZXM6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRHTFhSZXNvdXJjZXM6Om5hdGl2ZURpc3BsYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkR0xYUmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHTFhSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29uZmlnKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZEdMWFJlc291cmNlczo6U2hhcmVkR0xYUmVzb3VyY2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdMWFJlc291cmNlczo6Y3JlYXRlQ29uZmlnKToKKwor
ICAgICAgICBNb3ZpbmcgWCByZWxhdGVkIGNvZGUgdG8gYSBzZXBlcmF0ZSBjbGFzcy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNj
cmVlbldpbmRvdzo6WDExT2ZmU2NyZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9m
ZlNjcmVlbldpbmRvdzo6flgxMU9mZlNjcmVlbldpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpY
MTFPZmZTY3JlZW5XaW5kb3c6OnNldEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9m
ZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTaGFyZWRYMTFSZXNvdXJjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkWDExUmVzb3VyY2VzOjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRYMTFSZXNvdXJjZXM6OngxMURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
WDExUmVzb3VyY2VzOjpnZXRYV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJl
c291cmNlczo6dmlzdWFsSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRYMTFSZXNvdXJj
ZXM6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRYMTFSZXNvdXJjZXM6OlNoYXJlZFgxMVJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRYMTFSZXNvdXJjZXM6On5TaGFyZWRYMTFSZXNvdXJjZXMpOgorICAgICAgICAoWDExT2Zm
U2NyZWVuV2luZG93KToKKwogMjAxMi0xMi0xMiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVz
bWFubkBkaWdpYS5jb20+CiAKICAgICAgICAgW1F0XSBGaXggYnVpbGQgb24gTWFjCmRpZmYgLS1n
aXQgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1FZmwuY21ha2UKaW5kZXggMDJhNjBmYi4uMTlhNWUyYyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQpAQCAtMjk0LDYgKzI5NCw3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAKICAgICApCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAppbmRleCBjY2FmNzhhLi4zYmMzMjA2IDEwMDY0
NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1
cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYU3VyZmFjZS5jcHAKQEAgLTMwLDUxICszMCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVNoYXJlZFgxMVJlc291cmNlcyogU2hhcmVkWDExUmVzb3VyY2VzOjptX3N0YXRpY1No
YXJlZFJlc291cmNlID0gMDsKLQogc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRlc1td
ID0geyBHTFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0hULCAxLCAwIH07CiAK
LUdMWFN1cmZhY2U6OkdMWFN1cmZhY2UoKQotICAgIDogR0xQbGF0Zm9ybVN1cmZhY2UoKQotewot
ICAgIG1fc2hhcmVkUmVzb3VyY2VzID0gU2hhcmVkWDExUmVzb3VyY2VzOjpjcmVhdGUoKTsKLSAg
ICBtX3NoYXJlZERpc3BsYXkgPSBtX3NoYXJlZFJlc291cmNlcy0+ZGlzcGxheSgpOwotfQotCi1H
TFhTdXJmYWNlOjp+R0xYU3VyZmFjZSgpCi17Ci19Ci0KLVhWaXN1YWxJbmZvKiBHTFhTdXJmYWNl
Ojp2aXN1YWxJbmZvKCkKLXsKLSAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPnZpc3VhbElu
Zm8oKTsKLX0KLQotV2luZG93IEdMWFN1cmZhY2U6OnhXaW5kb3coKQotewotICAgIHJldHVybiBt
X3NoYXJlZFJlc291cmNlcy0+Z2V0WFdpbmRvdygpOwotfQotCi1HTFhGQkNvbmZpZyBHTFhTdXJm
YWNlOjpwQnVmZmVyQ29uZmlndXJhdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fc2hhcmVkUmVzb3Vy
Y2VzLT5wQnVmZmVyQ29udGV4dENvbmZpZygpOwotfQotCi1HTFhGQkNvbmZpZyBHTFhTdXJmYWNl
Ojp0cmFuc3BvcnRTdXJmYWNlQ29uZmlndXJhdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fc2hhcmVk
UmVzb3VyY2VzLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOwotfQotCi1ib29sIEdMWFN1cmZhY2U6
OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpCi17Ci0gICAgcmV0dXJuIG1fc2hhcmVkUmVz
b3VyY2VzLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKTsKLX0KLQogI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQogR0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSgp
Ci0gICAgOiBHTFhTdXJmYWNlKCkKKyAgICA6IFgxMU9mZlNjcmVlbldpbmRvdygpCiB7Ci0gICAg
aW5pdGlhbGl6ZSgpOworICAgIGNyZWF0ZU9mZnNjcmVlbldpbmRvdygpOwogfQogCiBHTFhUcmFu
c3BvcnRTdXJmYWNlOjp+R0xYVHJhbnNwb3J0U3VyZmFjZSgpCkBAIC04Myw3ICs0NSw3IEBAIEdM
WFRyYW5zcG9ydFN1cmZhY2U6On5HTFhUcmFuc3BvcnRTdXJmYWNlKCkKIAogUGxhdGZvcm1TdXJm
YWNlQ29uZmlnIEdMWFRyYW5zcG9ydFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQogewotICAgIHJl
dHVybiB0cmFuc3BvcnRTdXJmYWNlQ29uZmlndXJhdGlvbigpOworICAgIHJldHVybiBtX3NoYXJl
ZFJlc291cmNlcy0+c3VyZmFjZUNvbnRleHRDb25maWcoKTsKIH0KIAogdm9pZCBHTFhUcmFuc3Bv
cnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCkBAIC0xMDEsNjQgKzYzLDE1IEBAIHZvaWQgR0xYVHJh
bnNwb3J0U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQogICAgICAgICBnbFhTd2FwQnVmZmVycyhzaGFy
ZWREaXNwbGF5KCksIG1fZHJhd2FibGUpOwogfQogCi12b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6
OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCi17Ci0gICAgR0xQbGF0Zm9ybVN1
cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOwotICAgIGludCB3aWR0aCA9IG5ld1JlY3Qud2lk
dGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gbmV3UmVjdC5oZWlnaHQoKTsKLSAgICBYUmVzaXplV2lu
ZG93KHNoYXJlZERpc3BsYXkoKSwgbV9kcmF3YWJsZSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZv
aWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgRGlzcGxheSogZGlz
cGxheSA9IHNoYXJlZERpc3BsYXkoKTsKLSAgICBHTFhGQkNvbmZpZyBjb25maWcgPSB0cmFuc3Bv
cnRTdXJmYWNlQ29uZmlndXJhdGlvbigpOwotICAgIGlmICghY29uZmlnKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBYVmlzdWFsSW5mbyogdmlzSW5mbyA9IHZpc3VhbEluZm8oKTsKLSAgICBpZiAo
IXZpc0luZm8pCi0gICAgICAgIHJldHVybjsKLQotICAgIENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRl
Q29sb3JtYXAoZGlzcGxheSwgeFdpbmRvdygpLCB2aXNJbmZvLT52aXN1YWwsIEFsbG9jTm9uZSk7
Ci0gICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlOwotICAgIGF0dHJpYnV0ZS5iYWNr
Z3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5LCAwKTsKLSAgICBhdHRyaWJ1dGUuYm9y
ZGVyX3BpeGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAwKTsKLSAgICBhdHRyaWJ1dGUuY29sb3Jt
YXAgPSBjbWFwOwotICAgIG1fZHJhd2FibGUgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5k
b3coKSwgMCwgMCwgMSwgMSwgMCwgdmlzSW5mby0+ZGVwdGgsIElucHV0T3V0cHV0LCB2aXNJbmZv
LT52aXN1YWwsIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhdHRy
aWJ1dGUpOwotICAgIGlmICghbV9kcmF3YWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWFNl
dFdpbmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxheSwgbV9kcmF3YWJsZSwgMCk7Ci0gICAgWENv
bXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIG1fZHJhd2FibGUsIENvbXBvc2l0ZVJlZGly
ZWN0TWFudWFsKTsKLQotICAgIGlmIChpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkKLSAg
ICAgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCBtX2RyYXdhYmxlKTsKLX0KLQogdm9pZCBHTFhUcmFu
c3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKIHsKLSAgICBmcmVlUmVzb3VyY2VzKCk7Ci0gICAgR0xQ
bGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsKKyAgICBkZXN0cm95V2luZG93KCk7CiB9CiAKLXZv
aWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6ZnJlZVJlc291cmNlcygpCi17Ci0gICAgaWYgKCFtX2Ry
YXdhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHTFBsYXRmb3JtU3VyZmFjZTo6ZGVzdHJv
eSgpOwotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7Ci0gICAgaWYgKCFk
aXNwbGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBt
X2RyYXdhYmxlKTsKLSAgICBtX2RyYXdhYmxlID0gMDsKLX0KICNlbmRpZgogCiBHTFhQQnVmZmVy
OjpHTFhQQnVmZmVyKCkKLSAgICA6IEdMWFN1cmZhY2UoKQorICAgIDogWDExT2ZmU2NyZWVuV2lu
ZG93KCkKIHsKICAgICBpbml0aWFsaXplKCk7CiB9CkBAIC0xNzAsNyArODMsNyBAQCBHTFhQQnVm
ZmVyOjp+R0xYUEJ1ZmZlcigpCiB2b2lkIEdMWFBCdWZmZXI6OmluaXRpYWxpemUoKQogewogICAg
IERpc3BsYXkqIGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7Ci0gICAgR0xYRkJDb25maWcgY29u
ZmlnID0gcEJ1ZmZlckNvbmZpZ3VyYXRpb24oKTsKKyAgICBHTFhGQkNvbmZpZyBjb25maWcgPSBt
X3NoYXJlZFJlc291cmNlcy0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsKICAgICBpZiAoIWNvbmZp
ZykKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNzksNyArOTIsNyBAQCB2b2lkIEdMWFBCdWZmZXI6
OmluaXRpYWxpemUoKQogCiBQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYUEJ1ZmZlcjo6Y29uZmln
dXJhdGlvbigpCiB7Ci0gICAgcmV0dXJuIHBCdWZmZXJDb25maWd1cmF0aW9uKCk7CisgICAgcmV0
dXJuIG1fc2hhcmVkUmVzb3VyY2VzLT5wQnVmZmVyQ29udGV4dENvbmZpZygpOwogfQogCiB2b2lk
IEdMWFBCdWZmZXI6OmRlc3Ryb3koKQpAQCAtMjAxLDYgKzExNCwxMSBAQCB2b2lkIEdMWFBCdWZm
ZXI6OmZyZWVSZXNvdXJjZXMoKQogICAgIG1fZHJhd2FibGUgPSAwOwogfQogCit2b2lkIEdMWFBC
dWZmZXI6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCit7CisgICAgR0xQbGF0
Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOworfQorCiB9CiAKICNlbmRpZgpkaWZm
IC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dM
WFN1cmZhY2UuaAppbmRleCAwNjg4N2IyLi5jZjAxYTQ1IDEwMDY0NAotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaAorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaApAQCAt
MjgsMjM2ICsyOCwxNCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBI
QVZFKEdMWCkKIAotI2luY2x1ZGUgIkdMUGxhdGZvcm1TdXJmYWNlLmgiCi0jaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgotI2lu
Y2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KLSNlbmRpZgorI2luY2x1ZGUgIkdMWFdp
bmRvd1Jlc291cmNlcy5oIgorCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTaGFy
ZWRYMTFSZXNvdXJjZXMgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkQmFzZSB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU2hhcmVkWDExUmVzb3VyY2VzKTsKLQotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNoYXJlZFgxMVJlc291cmNlcz4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAg
IGlmICghbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSkKLSAgICAgICAgICAgIG1fc3RhdGljU2hhcmVk
UmVzb3VyY2UgPSBuZXcgU2hhcmVkWDExUmVzb3VyY2VzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UtPnJlZigpOwotCi0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihtX3N0YXRpY1NoYXJlZFJlc291cmNlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlcmVm
KCkKLSAgICB7Ci0gICAgICAgIGlmIChkZXJlZkJhc2UoKSkgewotICAgICAgICAgICAgbV9zdGF0
aWNTaGFyZWRSZXNvdXJjZSA9IDA7Ci0gICAgICAgICAgICBkZWxldGUgdGhpczsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIFdpbmRvdyBnZXRYV2luZG93KCkKLSAgICB7Ci0gICAgICAgIGlmICgh
bV93aW5kb3cpIHsKLSAgICAgICAgICAgIERpc3BsYXkqIGRweSA9IGRpc3BsYXkoKTsKLSAgICAg
ICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7Ci0gICAgICAgICAgICBhdHRy
aWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fd2luZG93ID0g
WENyZWF0ZVNpbXBsZVdpbmRvdyhkcHksIFhEZWZhdWx0Um9vdFdpbmRvdyhkcHkpLCAtMSwgLTEs
IDEsIDEsIDAsIEJsYWNrUGl4ZWwoZHB5LCAwKSwgV2hpdGVQaXhlbChkcHksIDApKTsKLSAgICAg
ICAgICAgIC8vIEZyb20gaHR0cDovL3Ryb25jaGUuY29tL2d1aS94L3hsaWIvd2luZG93L2F0dHJp
YnV0ZXMvCi0gICAgICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93
LCBDV092ZXJyaWRlUmVkaXJlY3QsICZhdHRyaWJ1dGVzKTsKLSAgICAgICAgICAgIFhNYXBXaW5k
b3coZHB5LCBtX3dpbmRvdyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbV93aW5kb3c7
Ci0gICAgfQotCi0gICAgRGlzcGxheSogZGlzcGxheSgpCi0gICAgewotICAgICAgICBpZiAoIW1f
ZGlzcGxheSkKLSAgICAgICAgICAgIG1fZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKLQotICAg
ICAgICByZXR1cm4gbV9kaXNwbGF5OwotICAgIH0KLQotICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJ
bmZvKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9WaXN1YWxJbmZvKQotICAgICAgICAgICAgc3Vy
ZmFjZUNvbnRleHRDb25maWcoKTsKLQotICAgICAgICByZXR1cm4gbV9WaXN1YWxJbmZvOwotICAg
IH0KLQotICAgIEdMWEZCQ29uZmlnIGNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1td
KQotICAgIHsKLSAgICAgICAgaW50IG51bVJldHVybmVkOwotICAgICAgICBtX1Zpc3VhbEluZm8g
PSAwOwotICAgICAgICBHTFhGQkNvbmZpZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKGRpc3Bs
YXkoKSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0dXJuZWQp
OwotCi0gICAgICAgIGlmICghbnVtUmV0dXJuZWQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQot
ICAgICAgICBHTFhGQkNvbmZpZyBzZWxlY3RlZENvbmZpZyA9IDA7Ci0gICAgICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVJldHVybmVkOyAr
K2kpIHsKLSAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZp
ZyhkaXNwbGF5KCksIHRlbXBbaV0pOwotICAgICAgICAgICAgaWYgKCFtX1Zpc3VhbEluZm8pCi0g
ICAgICAgICAgICAgICAgY29udGludWU7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAg
ICAgICAgICBpZiAobV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24pIHsKLSAgICAgICAgICAgICAg
ICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQoZGlz
cGxheSgpLCBtX1Zpc3VhbEluZm8tPnZpc3VhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcm1h
dCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHNlbGVjdGVkQ29uZmlnID0gdGVtcFtpXTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG1fVmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpIHsKLSNlbHNlCi0g
ICAgICAgICAgICBpZiAobV9WaXN1YWxJbmZvLT5kZXB0aCA9PSAzMikgewotI2VuZGlmCi0gICAg
ICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1wW2ldOwotICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIERpZCBu
b3QgZmluZCBhbnkgdmlzdWFsIHN1cHBvcnRpbmcgYWxwaGEsIHNlbGVjdCB0aGUgZmlyc3QgYXZh
aWxhYmxlIGNvbmZpZy4KLSAgICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgc2VsZWN0
ZWRDb25maWcgPSB0ZW1wWzBdOwotICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gZ2xYR2V0Vmlz
dWFsRnJvbUZCQ29uZmlnKG1fZGlzcGxheSwgdGVtcFswXSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBYRnJlZSh0ZW1wKTsKLQotICAgICAgICByZXR1cm4gc2VsZWN0ZWRDb25maWc7Ci0gICAgfQot
Ci0gICAgR0xYRkJDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKQotICAgIHsKLSAgICAgICAg
aWYgKCFtX3BidWZmZXJmYkNvbmZpZykgewotICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBh
dHRyaWJ1dGVzW10gPSB7Ci0gICAgICAgICAgICAgICAgR0xYX0xFVkVMLCAwLAotICAgICAgICAg
ICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfUEJVRkZFUl9CSVQsCi0gICAgICAgICAgICAg
ICAgR0xYX1JFTkRFUl9UWVBFLCAgIEdMWF9SR0JBX0JJVCwKLSAgICAgICAgICAgICAgICBHTFhf
UkVEX1NJWkUsICAgICAgMSwKLSAgICAgICAgICAgICAgICBHTFhfR1JFRU5fU0laRSwgICAgMSwK
LSAgICAgICAgICAgICAgICBHTFhfQkxVRV9TSVpFLCAgICAgMSwKLSAgICAgICAgICAgICAgICBH
TFhfRE9VQkxFQlVGRkVSLCAgR0xfRkFMU0UsCi0gICAgICAgICAgICAgICAgTm9uZQotICAgICAg
ICAgICAgfTsKLQotICAgICAgICAgICAgaW50IG51bVJldHVybmVkOwotICAgICAgICAgICAgR0xY
RkJDb25maWcqIHRlbXAgPSBnbFhDaG9vc2VGQkNvbmZpZyhkaXNwbGF5KCksIERlZmF1bHRTY3Jl
ZW4oZGlzcGxheSgpKSwgYXR0cmlidXRlcywgJm51bVJldHVybmVkKTsKLSAgICAgICAgICAgIGlm
IChudW1SZXR1cm5lZCkKLSAgICAgICAgICAgICAgICBtX3BidWZmZXJmYkNvbmZpZyA9IHRlbXBb
MF07Ci0gICAgICAgICAgICBYRnJlZSh0ZW1wKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBtX3BidWZmZXJmYkNvbmZpZzsKLSAgICB9Ci0KLSAgICBHTFhGQkNvbmZpZyBzdXJmYWNlQ29u
dGV4dENvbmZpZygpCi0gICAgewotICAgICAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRmYkNvbmZp
ZykgewotICAgICAgICAgICAgc3RhdGljIGludCBhdHRyaWJ1dGVzW10gPSB7Ci0gICAgICAgICAg
ICAgICAgR0xYX0xFVkVMLCAwLAotICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBH
TFhfV0lORE9XX0JJVCwKLSAgICAgICAgICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JH
QkFfQklULAotICAgICAgICAgICAgICAgIEdMWF9SRURfU0laRSwgICAgICAxLAotICAgICAgICAg
ICAgICAgIEdMWF9HUkVFTl9TSVpFLCAgICAxLAotICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJ
WkUsICAgICAxLAotICAgICAgICAgICAgICAgIEdMWF9BTFBIQV9TSVpFLCAgICAxLAotICAgICAg
ICAgICAgICAgIEdMWF9ERVBUSF9TSVpFLCAgICAxLAotICAgICAgICAgICAgICAgIEdMWF9YX1ZJ
U1VBTF9UWVBFLCBHTFhfVFJVRV9DT0xPUiwKLSAgICAgICAgICAgICAgICBHTFhfRE9VQkxFQlVG
RkVSLCAgVHJ1ZSwKLSAgICAgICAgICAgICAgICBOb25lCi0gICAgICAgICAgICB9OwotI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQotICAgICAgICAgICAgaW50IGV2ZW50QmFzZXAsIGVycm9yQmFz
ZXA7Ci0gICAgICAgICAgICBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbiA9IFhSZW5kZXJRdWVy
eUV4dGVuc2lvbihkaXNwbGF5KCksICZldmVudEJhc2VwLCAmZXJyb3JCYXNlcCk7Ci0jZW5kaWYK
LSAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZyA9IGNyZWF0ZUNvbmZpZyhhdHRy
aWJ1dGVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtX3N1cmZhY2VDb250ZXh0ZmJD
b25maWc7Ci0gICAgfQotCi0gICAgYm9vbCBpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBTaGFyZWRYMTFSZXNvdXJjZXMoKQotICAgICAgICA6IG1fc3VwcG9y
dHNYUmVuZGVyRXh0ZW5zaW9uKGZhbHNlKQotICAgICAgICAsIG1fbWFya0ZvckRlbGV0aW9uKGZh
bHNlKQotICAgICAgICAsIG1fd2luZG93KDApCi0gICAgICAgICwgbV9kaXNwbGF5KDApCi0gICAg
ICAgICwgbV9wYnVmZmVyZmJDb25maWcoMCkKLSAgICAgICAgLCBtX3N1cmZhY2VDb250ZXh0ZmJD
b25maWcoMCkKLSAgICAgICAgLCBtX1Zpc3VhbEluZm8oMCkKLSAgICB7Ci0gICAgfQotCi0gICAg
flNoYXJlZFgxMVJlc291cmNlcygpCi0gICAgewotICAgICAgICBpZiAoIW1fZGlzcGxheSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobV93aW5kb3cpIHsKLSAgICAgICAgICAg
IFhVbm1hcFdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93KTsKLSAgICAgICAgICAgIFhEZXN0cm95
V2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cpOwotICAgICAgICAgICAgbV93aW5kb3cgPSAwOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fcGJ1ZmZlcmZiQ29uZmlnKQotICAgICAgICAgICAg
bV9wYnVmZmVyZmJDb25maWcgPSAwOwotCi0gICAgICAgIGlmIChtX3N1cmZhY2VDb250ZXh0ZmJD
b25maWcpCi0gICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcgPSAwOwotCi0gICAg
ICAgIGlmIChtX1Zpc3VhbEluZm8pIHsKLSAgICAgICAgICAgIFhGcmVlKG1fVmlzdWFsSW5mbyk7
Ci0gICAgICAgICAgICBtX1Zpc3VhbEluZm8gPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgWENs
b3NlRGlzcGxheShtX2Rpc3BsYXkpOwotICAgICAgICBtX2Rpc3BsYXkgPSAwOwotICAgIH0KLQot
ICAgIHN0YXRpYyBTaGFyZWRYMTFSZXNvdXJjZXMqIG1fc3RhdGljU2hhcmVkUmVzb3VyY2U7Ci0g
ICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKLSAgICBib29sIG1fbWFya0ZvckRl
bGV0aW9uOwotICAgIFdpbmRvdyBtX3dpbmRvdzsKLSAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Ci0g
ICAgR0xYRkJDb25maWcgbV9wYnVmZmVyZmJDb25maWc7Ci0gICAgR0xYRkJDb25maWcgbV9zdXJm
YWNlQ29udGV4dGZiQ29uZmlnOwotICAgIFhWaXN1YWxJbmZvKiBtX1Zpc3VhbEluZm87Ci19Owot
Ci1jbGFzcyBHTFhTdXJmYWNlIDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShHTFhTdXJmYWNlKTsKLQotcHVibGljOgotICAgIEdMWFN1cmZhY2Uo
KTsKLSAgICB2aXJ0dWFsIH5HTFhTdXJmYWNlKCk7Ci0KLXByb3RlY3RlZDoKLSAgICBYVmlzdWFs
SW5mbyogdmlzdWFsSW5mbygpOwotICAgIFdpbmRvdyB4V2luZG93KCk7Ci0gICAgR0xYRkJDb25m
aWcgcEJ1ZmZlckNvbmZpZ3VyYXRpb24oKTsKLSAgICBHTFhGQkNvbmZpZyB0cmFuc3BvcnRTdXJm
YWNlQ29uZmlndXJhdGlvbigpOwotICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVk
KCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFNoYXJlZFgxMVJlc291cmNlcz4gbV9zaGFyZWRS
ZXNvdXJjZXM7Ci19OwotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi1jbGFzcyBHTFhUcmFu
c3BvcnRTdXJmYWNlIDogcHVibGljIEdMWFN1cmZhY2UgeworY2xhc3MgR0xYVHJhbnNwb3J0U3Vy
ZmFjZSA6IHB1YmxpYyBYMTFPZmZTY3JlZW5XaW5kb3cgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEdMWFRyYW5zcG9ydFN1cmZhY2UpOwogCiBwdWJsaWM6CkBAIC0yNjUsMjIgKzQzLDIxIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5HTFhUcmFuc3BvcnRTdXJmYWNlKCk7CiAgICAgUGxhdGZv
cm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsKICAgICB2b2lkIHN3YXBCdWZmZXJzKCk7
Ci0gICAgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KTsKICAgICB2b2lk
IGRlc3Ryb3koKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemUoKTsKLSAgICB2b2lk
IGZyZWVSZXNvdXJjZXMoKTsKIH07CiAjZW5kaWYKIAotY2xhc3MgR0xYUEJ1ZmZlciA6IHB1Ymxp
YyBHTFhTdXJmYWNlIHsKK2NsYXNzIEdMWFBCdWZmZXIgOiBwdWJsaWMgWDExT2ZmU2NyZWVuV2lu
ZG93IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhQQnVmZmVyKTsKIAogcHVibGljOgog
ICAgIEdMWFBCdWZmZXIoKTsKICAgICB2aXJ0dWFsIH5HTFhQQnVmZmVyKCk7CiAgICAgUGxhdGZv
cm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsKKyAgICB2b2lkIHNldEdlb21ldHJ5KGNv
bnN0IEludFJlY3QmKTsKICAgICB2b2lkIGRlc3Ryb3koKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdp
dCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYV2luZG93
UmVzb3VyY2VzLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWFdpbmRvd1Jlc291cmNlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmE2MTY3OGYKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dMWFdpbmRvd1Jlc291cmNlcy5oCkBAIC0wLDAgKzEsMTc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdMWFdpbmRvd1Jlc291cmNlc19oCisjZGVmaW5l
IEdMWFdpbmRvd1Jlc291cmNlc19oCisKKyNpbmNsdWRlICJYMTFXaW5kb3dSZXNvdXJjZXMuaCIK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgSEFWRShHTFgpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVkR0xYUmVzb3VyY2VzIDogcHVibGljIFNoYXJl
ZFgxMVJlc291cmNlcyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhcmVkR0xYUmVzb3Vy
Y2VzKTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMWFJlc291cmNl
cz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSkK
KyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UgPSBuZXcgU2hhcmVkR0xYUmVzb3Vy
Y2VzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2Ut
PnJlZigpOworCisgICAgICAgIHJldHVybiBhZG9wdFJlZihtX3N0YXRpY1NoYXJlZFJlc291cmNl
KTsKKyAgICB9CisKKyAgICBQbGF0Zm9ybURpc3BsYXkgbmF0aXZlRGlzcGxheSgpCisgICAgewor
ICAgICAgICByZXR1cm4gU2hhcmVkWDExUmVzb3VyY2VzOjp4MTFEaXNwbGF5KCk7CisgICAgfQor
CisgICAgdmlydHVhbCBHTFhGQkNvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZpZygpCisgICAgewor
ICAgICAgICBpZiAoIW1fcGJ1ZmZlcmZiQ29uZmlnKSB7CisgICAgICAgICAgICBzdGF0aWMgY29u
c3QgaW50IGF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgICAgICAgICBHTFhfTEVWRUwsIDAsCisg
ICAgICAgICAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9QQlVGRkVSX0JJVCwKKyAgICAg
ICAgICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklULAorICAgICAgICAgICAg
ICAgIEdMWF9SRURfU0laRSwgICAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9HUkVFTl9TSVpF
LCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAorICAgICAgICAg
ICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsICBHTF9GQUxTRSwKKyAgICAgICAgICAgICAgICBOb25l
CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpbnQgbnVtUmV0dXJuZWQ7CisgICAgICAg
ICAgICBHTFhGQkNvbmZpZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKG5hdGl2ZURpc3BsYXko
KSwgRGVmYXVsdFNjcmVlbihuYXRpdmVEaXNwbGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0dXJu
ZWQpOworICAgICAgICAgICAgaWYgKG51bVJldHVybmVkKQorICAgICAgICAgICAgICAgIG1fcGJ1
ZmZlcmZiQ29uZmlnID0gdGVtcFswXTsKKyAgICAgICAgICAgIFhGcmVlKHRlbXApOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIG1fcGJ1ZmZlcmZiQ29uZmlnOworICAgIH0KKworICAgIHZp
cnR1YWwgR0xYRkJDb25maWcgc3VyZmFjZUNvbnRleHRDb25maWcoKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcpIHsKKyAgICAgICAgICAgIHN0YXRpYyBpbnQg
YXR0cmlidXRlc1tdID0geworICAgICAgICAgICAgICAgIEdMWF9MRVZFTCwgMCwKKyAgICAgICAg
ICAgICAgICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1dJTkRPV19CSVQsCisgICAgICAgICAgICAg
ICAgR0xYX1JFTkRFUl9UWVBFLCAgIEdMWF9SR0JBX0JJVCwKKyAgICAgICAgICAgICAgICBHTFhf
UkVEX1NJWkUsICAgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhfR1JFRU5fU0laRSwgICAgMSwK
KyAgICAgICAgICAgICAgICBHTFhfQkxVRV9TSVpFLCAgICAgMSwKKyAgICAgICAgICAgICAgICBH
TFhfQUxQSEFfU0laRSwgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhfREVQVEhfU0laRSwgICAg
MSwKKyAgICAgICAgICAgICAgICBHTFhfWF9WSVNVQUxfVFlQRSwgR0xYX1RSVUVfQ09MT1IsCisg
ICAgICAgICAgICAgICAgR0xYX0RPVUJMRUJVRkZFUiwgIFRydWUsCisgICAgICAgICAgICAgICAg
Tm9uZQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dGZiQ29u
ZmlnID0gY3JlYXRlQ29uZmlnKGF0dHJpYnV0ZXMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU2hh
cmVkR0xYUmVzb3VyY2VzKCkKKyAgICAgICAgOiBTaGFyZWRYMTFSZXNvdXJjZXMoKQorICAgICAg
ICAsIG1fcGJ1ZmZlcmZiQ29uZmlnKDApCisgICAgICAgICwgbV9zdXJmYWNlQ29udGV4dGZiQ29u
ZmlnKDApCisgICAgeworICAgIH0KKworICAgIEdMWEZCQ29uZmlnIGNyZWF0ZUNvbmZpZyhjb25z
dCBpbnQgYXR0cmlidXRlc1tdKQorICAgIHsKKyAgICAgICAgaW50IG51bVJldHVybmVkOworICAg
ICAgICBtX1Zpc3VhbEluZm8gPSAwOworICAgICAgICBHTFhGQkNvbmZpZyogdGVtcCA9IGdsWENo
b29zZUZCQ29uZmlnKG5hdGl2ZURpc3BsYXkoKSwgRGVmYXVsdFNjcmVlbihuYXRpdmVEaXNwbGF5
KCkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0dXJuZWQpOworCisgICAgICAgIGlmICghbnVtUmV0dXJu
ZWQpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBHTFhGQkNvbmZpZyBzZWxlY3Rl
ZENvbmZpZyA9IDA7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bVJldHVybmVkOyArK2kpIHsKKyAgICAgICAgICAgIG1fVmlzdWFs
SW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhuYXRpdmVEaXNwbGF5KCksIHRlbXBbaV0p
OworICAgICAgICAgICAgaWYgKCFtX1Zpc3VhbEluZm8pCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgICAgICBpZiAobV9zdXBwb3J0
c1hSZW5kZXJFeHRlbnNpb24pIHsKKyAgICAgICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCog
Zm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQobmF0aXZlRGlzcGxheSgpLCBtX1Zpc3Vh
bEluZm8tPnZpc3VhbCk7CisgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRp
cmVjdC5hbHBoYU1hc2sgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29uZmln
ID0gdGVtcFtpXTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fVmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpIHsKKyNlbHNlCisgICAgICAgICAgICBpZiAo
bV9WaXN1YWxJbmZvLT5kZXB0aCA9PSAzMikgeworI2VuZGlmCisgICAgICAgICAgICAgICAgc2Vs
ZWN0ZWRDb25maWcgPSB0ZW1wW2ldOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIERpZCBub3QgZmluZCBhbnkgdmlz
dWFsIHN1cHBvcnRpbmcgYWxwaGEsIHNlbGVjdCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNvbmZpZy4K
KyAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1w
WzBdOworICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmln
KG1fZGlzcGxheSwgdGVtcFswXSk7CisgICAgICAgIH0KKworICAgICAgICBYRnJlZSh0ZW1wKTsK
KworICAgICAgICByZXR1cm4gc2VsZWN0ZWRDb25maWc7CisgICAgfQorCisgICAgdmlydHVhbCB+
U2hhcmVkR0xYUmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5KQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX3BidWZmZXJmYkNvbmZpZykKKyAgICAg
ICAgICAgIG1fcGJ1ZmZlcmZiQ29uZmlnID0gMDsKKworICAgICAgICBpZiAobV9zdXJmYWNlQ29u
dGV4dGZiQ29uZmlnKQorICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnID0gMDsK
KyAgICB9CisKKyAgICBHTFhGQkNvbmZpZyBtX3BidWZmZXJmYkNvbmZpZzsKKyAgICBHTFhGQkNv
bmZpZyBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWc7CisKK307CisKK30KKworI2VuZGlmCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjc1NWE0ODgKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAK
QEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJYMTFXaW5kb3dSZXNvdXJjZXMuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkdMWFdpbmRvd1Jlc291cmNlcy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1BsYXRmb3JtU2hhcmVkUmVzb3VyY2VzKiBTaGFyZWRYMTFSZXNv
dXJjZXM6Om1fc3RhdGljU2hhcmVkUmVzb3VyY2UgPSAwOworCitYMTFPZmZTY3JlZW5XaW5kb3c6
OlgxMU9mZlNjcmVlbldpbmRvdygpCisgICAgOiBHTFBsYXRmb3JtU3VyZmFjZSgpCit7CisgICAg
bV9zaGFyZWRSZXNvdXJjZXMgPSBQbGF0Zm9ybVNoYXJlZFJlc291cmNlczo6Y3JlYXRlKCk7Cisg
ICAgbV9zaGFyZWREaXNwbGF5ID0gbV9zaGFyZWRSZXNvdXJjZXMtPm5hdGl2ZURpc3BsYXkoKTsK
K30KKworWDExT2ZmU2NyZWVuV2luZG93Ojp+WDExT2ZmU2NyZWVuV2luZG93KCkKK3sKK30KKwor
dm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1Jl
Y3QpCit7CisgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOworICAg
IFhSZXNpemVXaW5kb3cobV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwgbV9kcmF3YWJs
ZSwgbmV3UmVjdC53aWR0aCgpLCBuZXdSZWN0LmhlaWdodCgpKTsKK30KKwordm9pZCBYMTFPZmZT
Y3JlZW5XaW5kb3c6OmNyZWF0ZU9mZnNjcmVlbldpbmRvdygpCit7CisgICAgRGlzcGxheSogZGlz
cGxheSA9IG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCk7CisgICAgaWYgKCFkaXNwbGF5
KQorICAgICAgICByZXR1cm47CisKKyAgICBHTFhGQkNvbmZpZyBjb25maWcgPSBtX3NoYXJlZFJl
c291cmNlcy0+c3VyZmFjZUNvbnRleHRDb25maWcoKTsKKworICAgIGlmICghY29uZmlnKSB7Cisg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIGEgdmFsaWQgY29uZmlnaXJhdGlv
bi4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFhWaXN1YWxJbmZvKiB2aXNJbmZv
ID0gbV9zaGFyZWRSZXNvdXJjZXMtPnZpc3VhbEluZm8oKTsKKworICAgIGlmICghdmlzSW5mbykg
eworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBmaW5kIHZhbGlkIFhWaXN1YWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdpbmRvdyB4V2luZG93ID0gbV9zaGFyZWRSZXNv
dXJjZXMtPmdldFhXaW5kb3coKTsKKyAgICBpZiAoIXhXaW5kb3cpCisgICAgICAgIHJldHVybjsK
KworICAgIENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSwgeFdpbmRvdywg
dmlzSW5mby0+dmlzdWFsLCBBbGxvY05vbmUpOworICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0
dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUuYmFja2dyb3VuZF9waXhlbCA9IFdoaXRlUGl4ZWwoZGlz
cGxheSwgMCk7CisgICAgYXR0cmlidXRlLmJvcmRlcl9waXhlbCA9IEJsYWNrUGl4ZWwoZGlzcGxh
eSwgMCk7CisgICAgYXR0cmlidXRlLmNvbG9ybWFwID0gY21hcDsKKyAgICBtX2RyYXdhYmxlID0g
WENyZWF0ZVdpbmRvdyhkaXNwbGF5LCB4V2luZG93LCAwLCAwLCAxLCAxLCAwLCB2aXNJbmZvLT5k
ZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8tPnZpc3VhbCwgQ1dCYWNrUGl4ZWwgfCBDV0JvcmRl
clBpeGVsIHwgQ1dDb2xvcm1hcCwgJmF0dHJpYnV0ZSk7CisKKyAgICBpZiAoIW1fZHJhd2FibGUp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiB3aW5kb3ci
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4
bWFwKGRpc3BsYXksIG1fZHJhd2FibGUsIDApOworICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRv
dyhkaXNwbGF5LCBtX2RyYXdhYmxlLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7CisKKyAgICBp
ZiAobV9zaGFyZWRSZXNvdXJjZXMtPmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpKQorICAg
ICAgICBYTWFwV2luZG93KGRpc3BsYXksIG1fZHJhd2FibGUpOworCit9CisKK3ZvaWQgWDExT2Zm
U2NyZWVuV2luZG93OjpkZXN0cm95V2luZG93KCkKK3sKKyAgICBpZiAoIW1fZHJhd2FibGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCk7CisgICAg
RGlzcGxheSogZGlzcGxheSA9IHNoYXJlZERpc3BsYXkoKTsKKyAgICBpZiAoIWRpc3BsYXkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1fZHJhd2FibGUp
OworICAgIG1fZHJhd2FibGUgPSAwOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJj
ZXMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2lu
ZG93UmVzb3VyY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3ODBk
MQotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgWDExV2luZG93UmVzb3VyY2VzX2gKKyNkZWZpbmUgWDExV2lu
ZG93UmVzb3VyY2VzX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2lu
Y2x1ZGUgIkdMUGxhdGZvcm1TdXJmYWNlLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
KyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8WDExL2V4
dGVuc2lvbnMvWHJlbmRlci5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNoYXJlZEdMWFJlc291cmNlczsKK3R5cGVkZWYgU2hhcmVkR0xYUmVzb3VyY2VzIFBs
YXRmb3JtU2hhcmVkUmVzb3VyY2VzOworCitjbGFzcyBTaGFyZWRYMTFSZXNvdXJjZXMgOiBwdWJs
aWMgV1RGOjpSZWZDb3VudGVkQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhcmVk
WDExUmVzb3VyY2VzKTsKKworcHVibGljOgorICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAg
ICAgaWYgKGRlcmVmQmFzZSgpKSB7CisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNl
ID0gMDsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICB9CisgICAgfQorCisgICAg
RGlzcGxheSogeDExRGlzcGxheSgpCisgICAgeworICAgICAgICBpZiAoIW1fZGlzcGxheSkgewor
ICAgICAgICAgICAgbV9kaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOworICAgICAgICAgICAgaWYg
KCFtX2Rpc3BsYXkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBtYWtl
IGNvbm5lY3Rpb24gd2l0aCBYIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICB9CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgICAgICBpZiAobV9kaXNw
bGF5KSB7CisgICAgICAgICAgICAgICAgaW50IGV2ZW50QmFzZXAsIGVycm9yQmFzZXA7CisgICAg
ICAgICAgICAgICAgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24gPSBYUmVuZGVyUXVlcnlFeHRl
bnNpb24obV9kaXNwbGF5LCAmZXZlbnRCYXNlcCwgJmVycm9yQmFzZXApOworICAgICAgICAgICAg
fQorI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9kaXNwbGF5OworICAgIH0K
KworICAgIFdpbmRvdyBnZXRYV2luZG93KCkKKyAgICB7CisgICAgICAgIGlmICghbV93aW5kb3cp
IHsKKyAgICAgICAgICAgIERpc3BsYXkqIGRweSA9IHgxMURpc3BsYXkoKTsKKyAgICAgICAgICAg
IFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgICAgICAgICBhdHRyaWJ1dGVz
Lm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fd2luZG93ID0gWENyZWF0
ZVNpbXBsZVdpbmRvdyhkcHksIFhEZWZhdWx0Um9vdFdpbmRvdyhkcHkpLCAtMSwgLTEsIDEsIDEs
IDAsIEJsYWNrUGl4ZWwoZHB5LCAwKSwgV2hpdGVQaXhlbChkcHksIDApKTsKKyAgICAgICAgICAg
IC8vIEZyb20gaHR0cDovL3Ryb25jaGUuY29tL2d1aS94L3hsaWIvd2luZG93L2F0dHJpYnV0ZXMv
CisgICAgICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBDV092
ZXJyaWRlUmVkaXJlY3QsICZhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIFhNYXBXaW5kb3coZHB5
LCBtX3dpbmRvdyk7CisKKyAgICAgICAgICAgIGlmICghbV93aW5kb3cpIHsKKyAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgU2ltcGxlV2luZG93Iik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gbV93aW5kb3c7CisgICAgfQorCisKKyAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbygp
CisgICAgeworICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbykKKyAgICAgICAgICAgIHN1cmZhY2VD
b250ZXh0Q29uZmlnKCk7CisKKyAgICAgICAgcmV0dXJuIG1fVmlzdWFsSW5mbzsKKyAgICB9CisK
KworCisgICAgYm9vbCBpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOworICAgIH0KKworICAgIHZpcnR1
YWwgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIHBCdWZmZXJDb250ZXh0Q29uZmlnKCkgPSAwOworICAg
IHZpcnR1YWwgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIHN1cmZhY2VDb250ZXh0Q29uZmlnKCkgPSAw
OworICAgIHZpcnR1YWwgUGxhdGZvcm1EaXNwbGF5IG5hdGl2ZURpc3BsYXkoKSA9IDA7CisKK3By
b3RlY3RlZDoKKyAgICBTaGFyZWRYMTFSZXNvdXJjZXMoKQorICAgICAgICA6IG1fc3VwcG9ydHNY
UmVuZGVyRXh0ZW5zaW9uKGZhbHNlKQorICAgICAgICAsIG1fd2luZG93KDApCisgICAgICAgICwg
bV9kaXNwbGF5KDApCisgICAgICAgICwgbV9WaXN1YWxJbmZvKDApCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgflNoYXJlZFgxMVJlc291cmNlcygpCisgICAgeworICAgICAgICBpZiAoIW1f
ZGlzcGxheSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV93aW5kb3cpIHsK
KyAgICAgICAgICAgIFhVbm1hcFdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93KTsKKyAgICAgICAg
ICAgIFhEZXN0cm95V2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cpOworICAgICAgICAgICAgbV93
aW5kb3cgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fVmlzdWFsSW5mbykgeworICAg
ICAgICAgICAgWEZyZWUobV9WaXN1YWxJbmZvKTsKKyAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9
IDA7CisgICAgICAgIH0KKworICAgICAgICBYQ2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7CisgICAg
ICAgIG1fZGlzcGxheSA9IDA7CisgICAgfQorCisgICAgc3RhdGljIFBsYXRmb3JtU2hhcmVkUmVz
b3VyY2VzKiBtX3N0YXRpY1NoYXJlZFJlc291cmNlOworICAgIGJvb2wgbV9zdXBwb3J0c1hSZW5k
ZXJFeHRlbnNpb247CisgICAgV2luZG93IG1fd2luZG93OworICAgIERpc3BsYXkqIG1fZGlzcGxh
eTsKKyAgICBYVmlzdWFsSW5mbyogbV9WaXN1YWxJbmZvOworfTsKKworY2xhc3MgWDExT2ZmU2Ny
ZWVuV2luZG93IDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShYMTFPZmZTY3JlZW5XaW5kb3cpOworCitwdWJsaWM6CisgICAgWDExT2ZmU2NyZWVu
V2luZG93KCk7CisgICAgdmlydHVhbCB+WDExT2ZmU2NyZWVuV2luZG93KCk7CisgICAgdm9pZCBz
ZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBjcmVhdGVPZmZzY3JlZW5XaW5k
b3coKTsKKyAgICB2b2lkIGRlc3Ryb3lXaW5kb3coKTsKKworcHJvdGVjdGVkOgorICAgIFJlZlB0
cjxQbGF0Zm9ybVNoYXJlZFJlc291cmNlcz4gbV9zaGFyZWRSZXNvdXJjZXM7Cit9OworCit9CisK
KyNlbmRpZgorCisjZW5kaWYK
</data>
<flag name="commit-queue"
          id="197254"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180124</attachid>
            <date>2012-12-19 02:32:07 -0800</date>
            <delta_ts>2012-12-19 03:36:12 -0800</delta_ts>
            <desc>patch</desc>
            <filename>reviewfixes.patch</filename>
            <type>text/plain</type>
            <size>30227</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDYwOWNlMmMuLjYyMGRmNmEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEy
LTEyLTE5ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtXZWJHTF0gUmVmYWN0b3IgR0xYU3VyZmFjZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTM1NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgaW4gcHJlcGFyYXRp
b24gZm9yIGFkZGluZyBFR0wgc3VwcG9ydC4KKyAgICAgICAgVGhlcmUgaXMgbG90IG9mIFggcmVs
YXRlZCBjb2RlIHdoaWNoIGNvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuIG91ciBjdXJyZW50IEdMWCBp
bXBsZW1lbnRhdGlvbgorICAgICAgICBhbmQgRUdMLiBUaGlzIHBhdGNoIG1ha2VzIGl0IHBvc3Np
YmxlIHRvIHNoYXJlIHRoZSBjb21tb24gY29kZSBidXQgZG9lc24ndCBjaGFuZ2UgYW55IGZ1bmN0
aW9uYWxpdHkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9y
dFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmln
dXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OmZyZWVSZXNvdXJjZXMp
OgorICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6R0xYUEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhQQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFBC
dWZmZXI6OmNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6c2V0
R2VvbWV0cnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmg6CisgICAgICAgIChHTFhUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKEdMWFBC
dWZmZXIpOgorCisgICAgICAgIEdMWCByZWxhdGVkIGltcGxlbWVudGF0aW9uLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNoYXJlZEdMWFJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRHTFhSZXNvdXJjZXM6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRHTFhSZXNvdXJjZXM6Om5hdGl2ZURpc3BsYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkR0xYUmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHTFhSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29uZmlnKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZEdMWFJlc291cmNlczo6U2hhcmVkR0xYUmVzb3VyY2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEdMWFJlc291cmNlczo6Y3JlYXRlQ29uZmlnKToKKwor
ICAgICAgICBNb3ZpbmcgWCByZWxhdGVkIGNvZGUgdG8gYSBzZXBlcmF0ZSBjbGFzcy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNj
cmVlbldpbmRvdzo6WDExT2ZmU2NyZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9m
ZlNjcmVlbldpbmRvdzo6flgxMU9mZlNjcmVlbldpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpY
MTFPZmZTY3JlZW5XaW5kb3c6OnNldEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9m
ZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTaGFyZWRYMTFSZXNvdXJjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkWDExUmVzb3VyY2VzOjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRYMTFSZXNvdXJjZXM6OngxMURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
WDExUmVzb3VyY2VzOjpnZXRYV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJl
c291cmNlczo6dmlzdWFsSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRYMTFSZXNvdXJj
ZXM6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRYMTFSZXNvdXJjZXM6OlNoYXJlZFgxMVJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRYMTFSZXNvdXJjZXM6On5TaGFyZWRYMTFSZXNvdXJjZXMpOgorICAgICAgICAoWDExT2Zm
U2NyZWVuV2luZG93KToKKwogMjAxMi0xMi0xOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4ZWQgYmFkIG1lcmdlIGluICJJbml0aWFsIHJlZmFjdG9yaW5nIG9m
IGRhdGFiYXNlIGZ1bmN0aW9uYWxpdHkgaW50byB0aGUgbWFuYWdlciBhbmQgc2VydmVyIi4KZGlm
ZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZQppbmRleCA4NGE2ZDViLi43OGVlZWJkIDEwMDY0NAotLS0gU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZs
LmNtYWtlCkBAIC0yNzYsNiArMjc2LDcgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKKyAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5j
cHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmNwcAogICAgICkKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmluZGV4IGNjYWY3OGEuLjNiYzMyMDYg
MTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R0xYU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HTFhTdXJmYWNlLmNwcApAQCAtMzAsNTEgKzMwLDEzIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotU2hhcmVkWDExUmVzb3VyY2VzKiBTaGFyZWRYMTFSZXNvdXJjZXM6Om1fc3Rh
dGljU2hhcmVkUmVzb3VyY2UgPSAwOwotCiBzdGF0aWMgY29uc3QgaW50IHBidWZmZXJBdHRyaWJ1
dGVzW10gPSB7IEdMWF9QQlVGRkVSX1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlHSFQsIDEsIDAg
fTsKIAotR0xYU3VyZmFjZTo6R0xYU3VyZmFjZSgpCi0gICAgOiBHTFBsYXRmb3JtU3VyZmFjZSgp
Ci17Ci0gICAgbV9zaGFyZWRSZXNvdXJjZXMgPSBTaGFyZWRYMTFSZXNvdXJjZXM6OmNyZWF0ZSgp
OwotICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fc2hhcmVkUmVzb3VyY2VzLT5kaXNwbGF5KCk7Ci19
Ci0KLUdMWFN1cmZhY2U6On5HTFhTdXJmYWNlKCkKLXsKLX0KLQotWFZpc3VhbEluZm8qIEdMWFN1
cmZhY2U6OnZpc3VhbEluZm8oKQotewotICAgIHJldHVybiBtX3NoYXJlZFJlc291cmNlcy0+dmlz
dWFsSW5mbygpOwotfQotCi1XaW5kb3cgR0xYU3VyZmFjZTo6eFdpbmRvdygpCi17Ci0gICAgcmV0
dXJuIG1fc2hhcmVkUmVzb3VyY2VzLT5nZXRYV2luZG93KCk7Ci19Ci0KLUdMWEZCQ29uZmlnIEdM
WFN1cmZhY2U6OnBCdWZmZXJDb25maWd1cmF0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9zaGFyZWRS
ZXNvdXJjZXMtPnBCdWZmZXJDb250ZXh0Q29uZmlnKCk7Ci19Ci0KLUdMWEZCQ29uZmlnIEdMWFN1
cmZhY2U6OnRyYW5zcG9ydFN1cmZhY2VDb25maWd1cmF0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9z
aGFyZWRSZXNvdXJjZXMtPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7Ci19Ci0KLWJvb2wgR0xYU3Vy
ZmFjZTo6aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkKLXsKLSAgICByZXR1cm4gbV9zaGFy
ZWRSZXNvdXJjZXMtPmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOwotfQotCiAjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCiBHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJm
YWNlKCkKLSAgICA6IEdMWFN1cmZhY2UoKQorICAgIDogWDExT2ZmU2NyZWVuV2luZG93KCkKIHsK
LSAgICBpbml0aWFsaXplKCk7CisgICAgY3JlYXRlT2Zmc2NyZWVuV2luZG93KCk7CiB9CiAKIEdM
WFRyYW5zcG9ydFN1cmZhY2U6On5HTFhUcmFuc3BvcnRTdXJmYWNlKCkKQEAgLTgzLDcgKzQ1LDcg
QEAgR0xYVHJhbnNwb3J0U3VyZmFjZTo6fkdMWFRyYW5zcG9ydFN1cmZhY2UoKQogCiBQbGF0Zm9y
bVN1cmZhY2VDb25maWcgR0xYVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCiB7Ci0g
ICAgcmV0dXJuIHRyYW5zcG9ydFN1cmZhY2VDb25maWd1cmF0aW9uKCk7CisgICAgcmV0dXJuIG1f
c2hhcmVkUmVzb3VyY2VzLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOwogfQogCiB2b2lkIEdMWFRy
YW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKQEAgLTEwMSw2NCArNjMsMTUgQEAgdm9pZCBH
TFhUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCiAgICAgICAgIGdsWFN3YXBCdWZmZXJz
KHNoYXJlZERpc3BsYXkoKSwgbV9kcmF3YWJsZSk7CiB9CiAKLXZvaWQgR0xYVHJhbnNwb3J0U3Vy
ZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKLXsKLSAgICBHTFBsYXRm
b3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7Ci0gICAgaW50IHdpZHRoID0gbmV3UmVj
dC53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBuZXdSZWN0LmhlaWdodCgpOwotICAgIFhSZXNp
emVXaW5kb3coc2hhcmVkRGlzcGxheSgpLCBtX2RyYXdhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKLX0K
LQotdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjppbml0aWFsaXplKCkKLXsKLSAgICBEaXNwbGF5
KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgpOwotICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9IHRy
YW5zcG9ydFN1cmZhY2VDb25maWd1cmF0aW9uKCk7Ci0gICAgaWYgKCFjb25maWcpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFhWaXN1YWxJbmZvKiB2aXNJbmZvID0gdmlzdWFsSW5mbygpOwotICAg
IGlmICghdmlzSW5mbykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29sb3JtYXAgY21hcCA9IFhD
cmVhdGVDb2xvcm1hcChkaXNwbGF5LCB4V2luZG93KCksIHZpc0luZm8tPnZpc3VhbCwgQWxsb2NO
b25lKTsKLSAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRl
LmJhY2tncm91bmRfcGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXksIDApOwotICAgIGF0dHJpYnV0
ZS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDApOwotICAgIGF0dHJpYnV0ZS5j
b2xvcm1hcCA9IGNtYXA7Ci0gICAgbV9kcmF3YWJsZSA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwg
eFdpbmRvdygpLCAwLCAwLCAxLCAxLCAwLCB2aXNJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIHZp
c0luZm8tPnZpc3VhbCwgQ1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBpeGVsIHwgQ1dDb2xvcm1hcCwg
JmF0dHJpYnV0ZSk7Ci0gICAgaWYgKCFtX2RyYXdhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBYU2V0V2luZG93QmFja2dyb3VuZFBpeG1hcChkaXNwbGF5LCBtX2RyYXdhYmxlLCAwKTsKLSAg
ICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgbV9kcmF3YWJsZSwgQ29tcG9zaXRl
UmVkaXJlY3RNYW51YWwpOwotCi0gICAgaWYgKGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgp
KQotICAgICAgICBYTWFwV2luZG93KGRpc3BsYXksIG1fZHJhd2FibGUpOwotfQotCiB2b2lkIEdM
WFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3koKQogewotICAgIGZyZWVSZXNvdXJjZXMoKTsKLSAg
ICBHTFBsYXRmb3JtU3VyZmFjZTo6ZGVzdHJveSgpOworICAgIGRlc3Ryb3lXaW5kb3coKTsKIH0K
IAotdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpmcmVlUmVzb3VyY2VzKCkKLXsKLSAgICBpZiAo
IW1fZHJhd2FibGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpk
ZXN0cm95KCk7Ci0gICAgRGlzcGxheSogZGlzcGxheSA9IHNoYXJlZERpc3BsYXkoKTsKLSAgICBp
ZiAoIWRpc3BsYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFhEZXN0cm95V2luZG93KGRpc3Bs
YXksIG1fZHJhd2FibGUpOwotICAgIG1fZHJhd2FibGUgPSAwOwotfQogI2VuZGlmCiAKIEdMWFBC
dWZmZXI6OkdMWFBCdWZmZXIoKQotICAgIDogR0xYU3VyZmFjZSgpCisgICAgOiBYMTFPZmZTY3Jl
ZW5XaW5kb3coKQogewogICAgIGluaXRpYWxpemUoKTsKIH0KQEAgLTE3MCw3ICs4Myw3IEBAIEdM
WFBCdWZmZXI6On5HTFhQQnVmZmVyKCkKIHZvaWQgR0xYUEJ1ZmZlcjo6aW5pdGlhbGl6ZSgpCiB7
CiAgICAgRGlzcGxheSogZGlzcGxheSA9IHNoYXJlZERpc3BsYXkoKTsKLSAgICBHTFhGQkNvbmZp
ZyBjb25maWcgPSBwQnVmZmVyQ29uZmlndXJhdGlvbigpOworICAgIEdMWEZCQ29uZmlnIGNvbmZp
ZyA9IG1fc2hhcmVkUmVzb3VyY2VzLT5wQnVmZmVyQ29udGV4dENvbmZpZygpOwogICAgIGlmICgh
Y29uZmlnKQogICAgICAgICByZXR1cm47CiAKQEAgLTE3OSw3ICs5Miw3IEBAIHZvaWQgR0xYUEJ1
ZmZlcjo6aW5pdGlhbGl6ZSgpCiAKIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBHTFhQQnVmZmVyOjpj
b25maWd1cmF0aW9uKCkKIHsKLSAgICByZXR1cm4gcEJ1ZmZlckNvbmZpZ3VyYXRpb24oKTsKKyAg
ICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPnBCdWZmZXJDb250ZXh0Q29uZmlnKCk7CiB9CiAK
IHZvaWQgR0xYUEJ1ZmZlcjo6ZGVzdHJveSgpCkBAIC0yMDEsNiArMTE0LDExIEBAIHZvaWQgR0xY
UEJ1ZmZlcjo6ZnJlZVJlc291cmNlcygpCiAgICAgbV9kcmF3YWJsZSA9IDA7CiB9CiAKK3ZvaWQg
R0xYUEJ1ZmZlcjo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKK3sKKyAgICBH
TFBsYXRmb3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7Cit9CisKIH0KIAogI2VuZGlm
CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYU3VyZmFjZS5oCmluZGV4IDA2ODg3YjIuLmNmMDFhNDUgMTAwNjQ0Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5o
CkBAIC0yOCwyMzYgKzI4LDE0IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIEhBVkUoR0xYKQogCi0jaW5jbHVkZSAiR0xQbGF0Zm9ybVN1cmZhY2UuaCIKLSNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+
Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgotI2VuZGlmCisjaW5jbHVkZSAi
R0xYV2luZG93UmVzb3VyY2VzLmgiCisKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IFNoYXJlZFgxMVJlc291cmNlcyA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWRCYXNlIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShTaGFyZWRYMTFSZXNvdXJjZXMpOwotCi1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkWDExUmVzb3VyY2VzPiBjcmVhdGUoKQotICAgIHsKLSAg
ICAgICAgaWYgKCFtX3N0YXRpY1NoYXJlZFJlc291cmNlKQotICAgICAgICAgICAgbV9zdGF0aWNT
aGFyZWRSZXNvdXJjZSA9IG5ldyBTaGFyZWRYMTFSZXNvdXJjZXMoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZS0+cmVmKCk7Ci0KLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hhcmVkUmVzb3VyY2UpOwotICAgIH0KLQotICAgIHZvaWQg
ZGVyZWYoKQotICAgIHsKLSAgICAgICAgaWYgKGRlcmVmQmFzZSgpKSB7Ci0gICAgICAgICAgICBt
X3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgV2luZG93IGdldFhXaW5kb3coKQotICAgIHsKLSAgICAgICAg
aWYgKCFtX3dpbmRvdykgewotICAgICAgICAgICAgRGlzcGxheSogZHB5ID0gZGlzcGxheSgpOwot
ICAgICAgICAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICAgICAgICAg
IGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSB0cnVlOwotICAgICAgICAgICAgbV93aW5k
b3cgPSBYQ3JlYXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSksIC0x
LCAtMSwgMSwgMSwgMCwgQmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBpeGVsKGRweSwgMCkpOwot
ICAgICAgICAgICAgLy8gRnJvbSBodHRwOi8vdHJvbmNoZS5jb20vZ3VpL3gveGxpYi93aW5kb3cv
YXR0cmlidXRlcy8KLSAgICAgICAgICAgIFhDaGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKGRweSwgbV93
aW5kb3csIENXT3ZlcnJpZGVSZWRpcmVjdCwgJmF0dHJpYnV0ZXMpOwotICAgICAgICAgICAgWE1h
cFdpbmRvdyhkcHksIG1fd2luZG93KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtX3dp
bmRvdzsKLSAgICB9Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5KCkKLSAgICB7Ci0gICAgICAgIGlm
ICghbV9kaXNwbGF5KQotICAgICAgICAgICAgbV9kaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOwot
Ci0gICAgICAgIHJldHVybiBtX2Rpc3BsYXk7Ci0gICAgfQotCi0gICAgWFZpc3VhbEluZm8qIHZp
c3VhbEluZm8oKQotICAgIHsKLSAgICAgICAgaWYgKCFtX1Zpc3VhbEluZm8pCi0gICAgICAgICAg
ICBzdXJmYWNlQ29udGV4dENvbmZpZygpOwotCi0gICAgICAgIHJldHVybiBtX1Zpc3VhbEluZm87
Ci0gICAgfQotCi0gICAgR0xYRkJDb25maWcgY3JlYXRlQ29uZmlnKGNvbnN0IGludCBhdHRyaWJ1
dGVzW10pCi0gICAgewotICAgICAgICBpbnQgbnVtUmV0dXJuZWQ7Ci0gICAgICAgIG1fVmlzdWFs
SW5mbyA9IDA7Ci0gICAgICAgIEdMWEZCQ29uZmlnKiB0ZW1wID0gZ2xYQ2hvb3NlRkJDb25maWco
ZGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkoKSksIGF0dHJpYnV0ZXMsICZudW1SZXR1
cm5lZCk7Ci0KLSAgICAgICAgaWYgKCFudW1SZXR1cm5lZCkKLSAgICAgICAgICAgIHJldHVybiAw
OwotCi0gICAgICAgIEdMWEZCQ29uZmlnIHNlbGVjdGVkQ29uZmlnID0gMDsKLSAgICAgICAgYm9v
bCBmb3VuZCA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUmV0dXJu
ZWQ7ICsraSkgewotICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZC
Q29uZmlnKGRpc3BsYXkoKSwgdGVtcFtpXSk7Ci0gICAgICAgICAgICBpZiAoIW1fVmlzdWFsSW5m
bykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
LSAgICAgICAgICAgIGlmIChtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikgewotICAgICAgICAg
ICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1h
dChkaXNwbGF5KCksIG1fVmlzdWFsSW5mby0+dmlzdWFsKTsKLSAgICAgICAgICAgICAgICBpZiAo
Zm9ybWF0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+IDApIHsKLSAgICAgICAgICAgICAg
ICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1wW2ldOwotICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9WaXN1YWxJbmZvLT5kZXB0aCA9PSAzMikgewotI2Vs
c2UKLSAgICAgICAgICAgIGlmIChtX1Zpc3VhbEluZm8tPmRlcHRoID09IDMyKSB7Ci0jZW5kaWYK
LSAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbaV07Ci0gICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
RGlkIG5vdCBmaW5kIGFueSB2aXN1YWwgc3VwcG9ydGluZyBhbHBoYSwgc2VsZWN0IHRoZSBmaXJz
dCBhdmFpbGFibGUgY29uZmlnLgotICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICBz
ZWxlY3RlZENvbmZpZyA9IHRlbXBbMF07Ci0gICAgICAgICAgICBtX1Zpc3VhbEluZm8gPSBnbFhH
ZXRWaXN1YWxGcm9tRkJDb25maWcobV9kaXNwbGF5LCB0ZW1wWzBdKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFhGcmVlKHRlbXApOwotCi0gICAgICAgIHJldHVybiBzZWxlY3RlZENvbmZpZzsKLSAg
ICB9Ci0KLSAgICBHTFhGQkNvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZpZygpCi0gICAgewotICAg
ICAgICBpZiAoIW1fcGJ1ZmZlcmZiQ29uZmlnKSB7Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGF0dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAgICAgICAgICBHTFhfTEVWRUwsIDAsCi0gICAg
ICAgICAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9QQlVGRkVSX0JJVCwKLSAgICAgICAg
ICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklULAotICAgICAgICAgICAgICAg
IEdMWF9SRURfU0laRSwgICAgICAxLAotICAgICAgICAgICAgICAgIEdMWF9HUkVFTl9TSVpFLCAg
ICAxLAotICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAotICAgICAgICAgICAg
ICAgIEdMWF9ET1VCTEVCVUZGRVIsICBHTF9GQUxTRSwKLSAgICAgICAgICAgICAgICBOb25lCi0g
ICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBpbnQgbnVtUmV0dXJuZWQ7Ci0gICAgICAgICAg
ICBHTFhGQkNvbmZpZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKGRpc3BsYXkoKSwgRGVmYXVs
dFNjcmVlbihkaXNwbGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0dXJuZWQpOwotICAgICAgICAg
ICAgaWYgKG51bVJldHVybmVkKQotICAgICAgICAgICAgICAgIG1fcGJ1ZmZlcmZiQ29uZmlnID0g
dGVtcFswXTsKLSAgICAgICAgICAgIFhGcmVlKHRlbXApOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIG1fcGJ1ZmZlcmZiQ29uZmlnOwotICAgIH0KLQotICAgIEdMWEZCQ29uZmlnIHN1cmZh
Y2VDb250ZXh0Q29uZmlnKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9zdXJmYWNlQ29udGV4dGZi
Q29uZmlnKSB7Ci0gICAgICAgICAgICBzdGF0aWMgaW50IGF0dHJpYnV0ZXNbXSA9IHsKLSAgICAg
ICAgICAgICAgICBHTFhfTEVWRUwsIDAsCi0gICAgICAgICAgICAgICAgR0xYX0RSQVdBQkxFX1RZ
UEUsIEdMWF9XSU5ET1dfQklULAotICAgICAgICAgICAgICAgIEdMWF9SRU5ERVJfVFlQRSwgICBH
TFhfUkdCQV9CSVQsCi0gICAgICAgICAgICAgICAgR0xYX1JFRF9TSVpFLCAgICAgIDEsCi0gICAg
ICAgICAgICAgICAgR0xYX0dSRUVOX1NJWkUsICAgIDEsCi0gICAgICAgICAgICAgICAgR0xYX0JM
VUVfU0laRSwgICAgIDEsCi0gICAgICAgICAgICAgICAgR0xYX0FMUEhBX1NJWkUsICAgIDEsCi0g
ICAgICAgICAgICAgICAgR0xYX0RFUFRIX1NJWkUsICAgIDEsCi0gICAgICAgICAgICAgICAgR0xY
X1hfVklTVUFMX1RZUEUsIEdMWF9UUlVFX0NPTE9SLAotICAgICAgICAgICAgICAgIEdMWF9ET1VC
TEVCVUZGRVIsICBUcnVlLAotICAgICAgICAgICAgICAgIE5vbmUKLSAgICAgICAgICAgIH07Ci0j
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgICAgICAgICBpbnQgZXZlbnRCYXNlcCwgZXJy
b3JCYXNlcDsKLSAgICAgICAgICAgIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uID0gWFJlbmRl
clF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXkoKSwgJmV2ZW50QmFzZXAsICZlcnJvckJhc2VwKTsKLSNl
bmRpZgotICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnID0gY3JlYXRlQ29uZmln
KGF0dHJpYnV0ZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRl
eHRmYkNvbmZpZzsKLSAgICB9Ci0KLSAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRl
ZCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIFNoYXJlZFgxMVJlc291cmNlcygpCi0gICAgICAgIDogbV9z
dXBwb3J0c1hSZW5kZXJFeHRlbnNpb24oZmFsc2UpCi0gICAgICAgICwgbV9tYXJrRm9yRGVsZXRp
b24oZmFsc2UpCi0gICAgICAgICwgbV93aW5kb3coMCkKLSAgICAgICAgLCBtX2Rpc3BsYXkoMCkK
LSAgICAgICAgLCBtX3BidWZmZXJmYkNvbmZpZygwKQotICAgICAgICAsIG1fc3VyZmFjZUNvbnRl
eHRmYkNvbmZpZygwKQotICAgICAgICAsIG1fVmlzdWFsSW5mbygwKQotICAgIHsKLSAgICB9Ci0K
LSAgICB+U2hhcmVkWDExUmVzb3VyY2VzKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9kaXNwbGF5
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX3dpbmRvdykgewotICAgICAg
ICAgICAgWFVubWFwV2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cpOwotICAgICAgICAgICAgWERl
c3Ryb3lXaW5kb3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAgICAgICAgICBtX3dpbmRvdyA9
IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9wYnVmZmVyZmJDb25maWcpCi0gICAgICAg
ICAgICBtX3BidWZmZXJmYkNvbmZpZyA9IDA7Ci0KLSAgICAgICAgaWYgKG1fc3VyZmFjZUNvbnRl
eHRmYkNvbmZpZykKLSAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZyA9IDA7Ci0K
LSAgICAgICAgaWYgKG1fVmlzdWFsSW5mbykgewotICAgICAgICAgICAgWEZyZWUobV9WaXN1YWxJ
bmZvKTsKLSAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IDA7Ci0gICAgICAgIH0KLQotICAgICAg
ICBYQ2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7Ci0gICAgICAgIG1fZGlzcGxheSA9IDA7Ci0gICAg
fQotCi0gICAgc3RhdGljIFNoYXJlZFgxMVJlc291cmNlcyogbV9zdGF0aWNTaGFyZWRSZXNvdXJj
ZTsKLSAgICBib29sIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOwotICAgIGJvb2wgbV9tYXJr
Rm9yRGVsZXRpb247Ci0gICAgV2luZG93IG1fd2luZG93OwotICAgIERpc3BsYXkqIG1fZGlzcGxh
eTsKLSAgICBHTFhGQkNvbmZpZyBtX3BidWZmZXJmYkNvbmZpZzsKLSAgICBHTFhGQkNvbmZpZyBt
X3N1cmZhY2VDb250ZXh0ZmJDb25maWc7Ci0gICAgWFZpc3VhbEluZm8qIG1fVmlzdWFsSW5mbzsK
LX07Ci0KLWNsYXNzIEdMWFN1cmZhY2UgOiBwdWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2UgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEdMWFN1cmZhY2UpOwotCi1wdWJsaWM6Ci0gICAgR0xYU3Vy
ZmFjZSgpOwotICAgIHZpcnR1YWwgfkdMWFN1cmZhY2UoKTsKLQotcHJvdGVjdGVkOgotICAgIFhW
aXN1YWxJbmZvKiB2aXN1YWxJbmZvKCk7Ci0gICAgV2luZG93IHhXaW5kb3coKTsKLSAgICBHTFhG
QkNvbmZpZyBwQnVmZmVyQ29uZmlndXJhdGlvbigpOwotICAgIEdMWEZCQ29uZmlnIHRyYW5zcG9y
dFN1cmZhY2VDb25maWd1cmF0aW9uKCk7Ci0gICAgYm9vbCBpc1hSZW5kZXJFeHRlbnNpb25TdXBw
b3J0ZWQoKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8U2hhcmVkWDExUmVzb3VyY2VzPiBtX3No
YXJlZFJlc291cmNlczsKLX07Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLWNsYXNzIEdM
WFRyYW5zcG9ydFN1cmZhY2UgOiBwdWJsaWMgR0xYU3VyZmFjZSB7CitjbGFzcyBHTFhUcmFuc3Bv
cnRTdXJmYWNlIDogcHVibGljIFgxMU9mZlNjcmVlbldpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoR0xYVHJhbnNwb3J0U3VyZmFjZSk7CiAKIHB1YmxpYzoKQEAgLTI2NSwyMiArNDMs
MjEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkdMWFRyYW5zcG9ydFN1cmZhY2UoKTsKICAgICBQ
bGF0Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigpOwogICAgIHZvaWQgc3dhcEJ1ZmZl
cnMoKTsKLSAgICB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpOwogICAg
IHZvaWQgZGVzdHJveSgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAg
IHZvaWQgZnJlZVJlc291cmNlcygpOwogfTsKICNlbmRpZgogCi1jbGFzcyBHTFhQQnVmZmVyIDog
cHVibGljIEdMWFN1cmZhY2UgeworY2xhc3MgR0xYUEJ1ZmZlciA6IHB1YmxpYyBYMTFPZmZTY3Jl
ZW5XaW5kb3cgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMWFBCdWZmZXIpOwogCiBwdWJs
aWM6CiAgICAgR0xYUEJ1ZmZlcigpOwogICAgIHZpcnR1YWwgfkdMWFBCdWZmZXIoKTsKICAgICBQ
bGF0Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigpOworICAgIHZvaWQgc2V0R2VvbWV0
cnkoY29uc3QgSW50UmVjdCYpOwogICAgIHZvaWQgZGVzdHJveSgpOwogCiBwcml2YXRlOgpkaWZm
IC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhX
aW5kb3dSZXNvdXJjZXMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYV2luZG93UmVzb3VyY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYjgwNTRmMmJjCi0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaApAQCAtMCwwICsxLDE3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHTFhXaW5kb3dSZXNvdXJjZXNfaAor
I2RlZmluZSBHTFhXaW5kb3dSZXNvdXJjZXNfaAorCisjaW5jbHVkZSAiWDExV2luZG93UmVzb3Vy
Y2VzLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEhBVkUoR0xYKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEdMWFJlc291cmNlcyA6IHB1Ymxp
YyBTaGFyZWRYMTFSZXNvdXJjZXMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYXJlZEdM
WFJlc291cmNlcyk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRHTFhS
ZXNvdXJjZXM+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBpZiAoIW1fc3RhdGljU2hhcmVkUmVz
b3VyY2UpCisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlID0gbmV3IFNoYXJlZEdM
WFJlc291cmNlcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJl
c291cmNlLT5yZWYoKTsKKworICAgICAgICByZXR1cm4gYWRvcHRSZWYobV9zdGF0aWNTaGFyZWRS
ZXNvdXJjZSk7CisgICAgfQorCisgICAgUGxhdGZvcm1EaXNwbGF5IG5hdGl2ZURpc3BsYXkoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFNoYXJlZFgxMVJlc291cmNlczo6eDExRGlzcGxheSgpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgR0xYRkJDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX3BidWZmZXJmYkNvbmZpZykgeworICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBhdHRyaWJ1dGVzW10gPSB7CisgICAgICAgICAgICAgICAgR0xYX0xFVkVM
LCAwLAorICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfUEJVRkZFUl9CSVQs
CisgICAgICAgICAgICAgICAgR0xYX1JFTkRFUl9UWVBFLCAgIEdMWF9SR0JBX0JJVCwKKyAgICAg
ICAgICAgICAgICBHTFhfUkVEX1NJWkUsICAgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhfR1JF
RU5fU0laRSwgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhfQkxVRV9TSVpFLCAgICAgMSwKKyAg
ICAgICAgICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCAgR0xfRkFMU0UsCisgICAgICAgICAgICAg
ICAgTm9uZQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaW50IG51bVJldHVybmVkOwor
ICAgICAgICAgICAgR0xYRkJDb25maWcqIHRlbXAgPSBnbFhDaG9vc2VGQkNvbmZpZyhuYXRpdmVE
aXNwbGF5KCksIERlZmF1bHRTY3JlZW4obmF0aXZlRGlzcGxheSgpKSwgYXR0cmlidXRlcywgJm51
bVJldHVybmVkKTsKKyAgICAgICAgICAgIGlmIChudW1SZXR1cm5lZCkKKyAgICAgICAgICAgICAg
ICBtX3BidWZmZXJmYkNvbmZpZyA9IHRlbXBbMF07CisgICAgICAgICAgICBYRnJlZSh0ZW1wKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX3BidWZmZXJmYkNvbmZpZzsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIEdMWEZCQ29uZmlnIHN1cmZhY2VDb250ZXh0Q29uZmlnKCkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKSB7CisgICAgICAgICAgICBzdGF0
aWMgaW50IGF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgICAgICAgICBHTFhfTEVWRUwsIDAsCisg
ICAgICAgICAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1dfQklULAorICAgICAg
ICAgICAgICAgIEdMWF9SRU5ERVJfVFlQRSwgICBHTFhfUkdCQV9CSVQsCisgICAgICAgICAgICAg
ICAgR0xYX1JFRF9TSVpFLCAgICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0dSRUVOX1NJWkUs
ICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0JMVUVfU0laRSwgICAgIDEsCisgICAgICAgICAg
ICAgICAgR0xYX0FMUEhBX1NJWkUsICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0RFUFRIX1NJ
WkUsICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX1hfVklTVUFMX1RZUEUsIEdMWF9UUlVFX0NP
TE9SLAorICAgICAgICAgICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsICBUcnVlLAorICAgICAgICAg
ICAgICAgIE5vbmUKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRl
eHRmYkNvbmZpZyA9IGNyZWF0ZUNvbmZpZyhhdHRyaWJ1dGVzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWc7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFNoYXJlZEdMWFJlc291cmNlcygpCisgICAgICAgIDogU2hhcmVkWDExUmVzb3VyY2VzKCkK
KyAgICAgICAgLCBtX3BidWZmZXJmYkNvbmZpZygwKQorICAgICAgICAsIG1fc3VyZmFjZUNvbnRl
eHRmYkNvbmZpZygwKQorICAgIHsKKyAgICB9CisKKyAgICBHTFhGQkNvbmZpZyBjcmVhdGVDb25m
aWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSkKKyAgICB7CisgICAgICAgIGludCBudW1SZXR1cm5l
ZDsKKyAgICAgICAgbV9WaXN1YWxJbmZvID0gMDsKKyAgICAgICAgR0xYRkJDb25maWcqIHRlbXAg
PSBnbFhDaG9vc2VGQkNvbmZpZyhuYXRpdmVEaXNwbGF5KCksIERlZmF1bHRTY3JlZW4obmF0aXZl
RGlzcGxheSgpKSwgYXR0cmlidXRlcywgJm51bVJldHVybmVkKTsKKworICAgICAgICBpZiAoIW51
bVJldHVybmVkKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgR0xYRkJDb25maWcg
c2VsZWN0ZWRDb25maWcgPSAwOworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1SZXR1cm5lZDsgKytpKSB7CisgICAgICAgICAgICBt
X1Zpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcobmF0aXZlRGlzcGxheSgpLCB0
ZW1wW2ldKTsKKyAgICAgICAgICAgIGlmICghbV9WaXN1YWxJbmZvKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAgICAgICAgaWYgKG1f
c3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKSB7CisgICAgICAgICAgICAgICAgWFJlbmRlclBpY3RG
b3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KG5hdGl2ZURpc3BsYXkoKSwg
bV9WaXN1YWxJbmZvLT52aXN1YWwpOworICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9y
bWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkgeworICAgICAgICAgICAgICAgICAgICBzZWxlY3Rl
ZENvbmZpZyA9IHRlbXBbaV07CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNlIGlmIChtX1Zpc3VhbEluZm8tPmRlcHRoID09IDMyKSB7CisjZWxzZQorICAgICAgICAg
ICAgaWYgKG1fVmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpIHsKKyNlbmRpZgorICAgICAgICAgICAg
ICAgIHNlbGVjdGVkQ29uZmlnID0gdGVtcFtpXTsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBEaWQgbm90IGZpbmQg
YW55IHZpc3VhbCBzdXBwb3J0aW5nIGFscGhhLCBzZWxlY3QgdGhlIGZpcnN0IGF2YWlsYWJsZSBj
b25maWcuCisgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkQ29uZmln
ID0gdGVtcFswXTsKKyAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21G
QkNvbmZpZyhtX2Rpc3BsYXksIHRlbXBbMF0pOworICAgICAgICB9CisKKyAgICAgICAgWEZyZWUo
dGVtcCk7CisKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkQ29uZmlnOworICAgIH0KKworICAgIHZp
cnR1YWwgflNoYXJlZEdMWFJlc291cmNlcygpCisgICAgeworICAgICAgICBpZiAoIW1fZGlzcGxh
eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV9wYnVmZmVyZmJDb25maWcp
CisgICAgICAgICAgICBtX3BidWZmZXJmYkNvbmZpZyA9IDA7CisKKyAgICAgICAgaWYgKG1fc3Vy
ZmFjZUNvbnRleHRmYkNvbmZpZykKKyAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZp
ZyA9IDA7CisgICAgfQorCisgICAgR0xYRkJDb25maWcgbV9wYnVmZmVyZmJDb25maWc7CisgICAg
R0xYRkJDb25maWcgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnOworfTsKKworfQorCisjZW5kaWYK
KworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1YTQ4OAotLS0gL2Rldi9udWxsCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2Vz
LmNwcApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlgxMVdpbmRvd1Jlc291cmNlcy5oIgorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiR0xYV2luZG93UmVzb3VyY2VzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxhdGZvcm1TaGFyZWRSZXNvdXJjZXMqIFNoYXJlZFgx
MVJlc291cmNlczo6bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7CisKK1gxMU9mZlNjcmVlbldp
bmRvdzo6WDExT2ZmU2NyZWVuV2luZG93KCkKKyAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKK3sK
KyAgICBtX3NoYXJlZFJlc291cmNlcyA9IFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzOjpjcmVhdGUo
KTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBtX3NoYXJlZFJlc291cmNlcy0+bmF0aXZlRGlzcGxh
eSgpOworfQorCitYMTFPZmZTY3JlZW5XaW5kb3c6On5YMTFPZmZTY3JlZW5XaW5kb3coKQorewor
fQorCit2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYg
bmV3UmVjdCkKK3sKKyAgICBHTFBsYXRmb3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7
CisgICAgWFJlc2l6ZVdpbmRvdyhtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCBtX2Ry
YXdhYmxlLCBuZXdSZWN0LndpZHRoKCksIG5ld1JlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFgx
MU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KCkKK3sKKyAgICBEaXNwbGF5
KiBkaXNwbGF5ID0gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKKyAgICBpZiAoIWRp
c3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9IG1fc2hh
cmVkUmVzb3VyY2VzLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOworCisgICAgaWYgKCFjb25maWcp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgYSB2YWxpZCBjb25maWdp
cmF0aW9uLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgWFZpc3VhbEluZm8qIHZp
c0luZm8gPSBtX3NoYXJlZFJlc291cmNlcy0+dmlzdWFsSW5mbygpOworCisgICAgaWYgKCF2aXNJ
bmZvKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGZpbmQgdmFsaWQgWFZpc3VhbCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2luZG93IHhXaW5kb3cgPSBtX3NoYXJl
ZFJlc291cmNlcy0+Z2V0WFdpbmRvdygpOworICAgIGlmICgheFdpbmRvdykKKyAgICAgICAgcmV0
dXJuOworCisgICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVDb2xvcm1hcChkaXNwbGF5LCB4V2lu
ZG93LCB2aXNJbmZvLT52aXN1YWwsIEFsbG9jTm9uZSk7CisgICAgWFNldFdpbmRvd0F0dHJpYnV0
ZXMgYXR0cmlidXRlOworICAgIGF0dHJpYnV0ZS5iYWNrZ3JvdW5kX3BpeGVsID0gV2hpdGVQaXhl
bChkaXNwbGF5LCAwKTsKKyAgICBhdHRyaWJ1dGUuYm9yZGVyX3BpeGVsID0gQmxhY2tQaXhlbChk
aXNwbGF5LCAwKTsKKyAgICBhdHRyaWJ1dGUuY29sb3JtYXAgPSBjbWFwOworICAgIG1fZHJhd2Fi
bGUgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIDEsIDEsIDAsIHZpc0lu
Zm8tPmRlcHRoLCBJbnB1dE91dHB1dCwgdmlzSW5mby0+dmlzdWFsLCBDV0JhY2tQaXhlbCB8IENX
Qm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0cmlidXRlKTsKKworICAgIGlmICghbV9kcmF3
YWJsZSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2NyZWVuIHdp
bmRvdyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgWFNldFdpbmRvd0JhY2tncm91
bmRQaXhtYXAoZGlzcGxheSwgbV9kcmF3YWJsZSwgMCk7CisgICAgWENvbXBvc2l0ZVJlZGlyZWN0
V2luZG93KGRpc3BsYXksIG1fZHJhd2FibGUsIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKKwor
ICAgIGlmIChtX3NoYXJlZFJlc291cmNlcy0+aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkp
CisgICAgICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV9kcmF3YWJsZSk7CisKK30KKwordm9pZCBY
MTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ryb3lXaW5kb3coKQoreworICAgIGlmICghbV9kcmF3YWJs
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsK
KyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgpOworICAgIGlmICghZGlzcGxh
eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgbV9kcmF3
YWJsZSk7CisgICAgbV9kcmF3YWJsZSA9IDA7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jl
c291cmNlcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9Y
MTFXaW5kb3dSZXNvdXJjZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
MjViMmFjCi0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaApAQCAtMCwwICsxLDE2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBYMTFXaW5kb3dSZXNvdXJjZXNfaAorI2RlZmluZSBY
MTFXaW5kb3dSZXNvdXJjZXNfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CisjaW5jbHVkZSAiR0xQbGF0Zm9ybVN1cmZhY2UuaCIKKworI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQorI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KKyNpbmNsdWRlIDxY
MTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgU2hhcmVkR0xYUmVzb3VyY2VzOwordHlwZWRlZiBTaGFyZWRHTFhSZXNvdXJj
ZXMgUGxhdGZvcm1TaGFyZWRSZXNvdXJjZXM7CisKK2NsYXNzIFNoYXJlZFgxMVJlc291cmNlcyA6
IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
aGFyZWRYMTFSZXNvdXJjZXMpOworCitwdWJsaWM6CisgICAgdm9pZCBkZXJlZigpCisgICAgewor
ICAgICAgICBpZiAoZGVyZWZCYXNlKCkpIHsKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVz
b3VyY2UgPSAwOworICAgICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBEaXNwbGF5KiB4MTFEaXNwbGF5KCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5
KSB7CisgICAgICAgICAgICBtX2Rpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7CisgICAgICAgICAg
ICBpZiAoIW1fZGlzcGxheSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IG1ha2UgY29ubmVjdGlvbiB3aXRoIFgiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIH0KKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgICAgIGlmICht
X2Rpc3BsYXkpIHsKKyAgICAgICAgICAgICAgICBpbnQgZXZlbnRCYXNlcCwgZXJyb3JCYXNlcDsK
KyAgICAgICAgICAgICAgICBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbiA9IFhSZW5kZXJRdWVy
eUV4dGVuc2lvbihtX2Rpc3BsYXksICZldmVudEJhc2VwLCAmZXJyb3JCYXNlcCk7CisgICAgICAg
ICAgICB9CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX2Rpc3BsYXk7Cisg
ICAgfQorCisgICAgV2luZG93IGdldFhXaW5kb3coKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3dp
bmRvdykgeworICAgICAgICAgICAgRGlzcGxheSogZHB5ID0geDExRGlzcGxheSgpOworICAgICAg
ICAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICAgICAgICAgIGF0dHJp
YnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSB0cnVlOworICAgICAgICAgICAgbV93aW5kb3cgPSBY
Q3JlYXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSksIC0xLCAtMSwg
MSwgMSwgMCwgQmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBpeGVsKGRweSwgMCkpOworICAgICAg
ICAgICAgLy8gRnJvbSBodHRwOi8vdHJvbmNoZS5jb20vZ3VpL3gveGxpYi93aW5kb3cvYXR0cmli
dXRlcy8KKyAgICAgICAgICAgIFhDaGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKGRweSwgbV93aW5kb3cs
IENXT3ZlcnJpZGVSZWRpcmVjdCwgJmF0dHJpYnV0ZXMpOworICAgICAgICAgICAgWE1hcFdpbmRv
dyhkcHksIG1fd2luZG93KTsKKworICAgICAgICAgICAgaWYgKCFtX3dpbmRvdykgeworICAgICAg
ICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBTaW1wbGVXaW5kb3ciKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBtX3dpbmRvdzsKKyAgICB9CisKKyAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5m
bygpCisgICAgeworICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbykKKyAgICAgICAgICAgIHN1cmZh
Y2VDb250ZXh0Q29uZmlnKCk7CisKKyAgICAgICAgcmV0dXJuIG1fVmlzdWFsSW5mbzsKKyAgICB9
CisKKyAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247CisgICAgfQorCisgICAgdmlydHVh
bCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKSA9IDA7CisgICAg
dmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgc3VyZmFjZUNvbnRleHRDb25maWcoKSA9IDA7
CisgICAgdmlydHVhbCBQbGF0Zm9ybURpc3BsYXkgbmF0aXZlRGlzcGxheSgpID0gMDsKKworcHJv
dGVjdGVkOgorICAgIFNoYXJlZFgxMVJlc291cmNlcygpCisgICAgICAgIDogbV9zdXBwb3J0c1hS
ZW5kZXJFeHRlbnNpb24oZmFsc2UpCisgICAgICAgICwgbV93aW5kb3coMCkKKyAgICAgICAgLCBt
X2Rpc3BsYXkoMCkKKyAgICAgICAgLCBtX1Zpc3VhbEluZm8oMCkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB+U2hhcmVkWDExUmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAgIGlmICghbV9k
aXNwbGF5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX3dpbmRvdykgewor
ICAgICAgICAgICAgWFVubWFwV2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cpOworICAgICAgICAg
ICAgWERlc3Ryb3lXaW5kb3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgICAgICAgICBtX3dp
bmRvdyA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9WaXN1YWxJbmZvKSB7CisgICAg
ICAgICAgICBYRnJlZShtX1Zpc3VhbEluZm8pOworICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0g
MDsKKyAgICAgICAgfQorCisgICAgICAgIFhDbG9zZURpc3BsYXkobV9kaXNwbGF5KTsKKyAgICAg
ICAgbV9kaXNwbGF5ID0gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgUGxhdGZvcm1TaGFyZWRSZXNv
dXJjZXMqIG1fc3RhdGljU2hhcmVkUmVzb3VyY2U7CisgICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRl
ckV4dGVuc2lvbjsKKyAgICBXaW5kb3cgbV93aW5kb3c7CisgICAgRGlzcGxheSogbV9kaXNwbGF5
OworICAgIFhWaXN1YWxJbmZvKiBtX1Zpc3VhbEluZm87Cit9OworCitjbGFzcyBYMTFPZmZTY3Jl
ZW5XaW5kb3cgOiBwdWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2UgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFgxMU9mZlNjcmVlbldpbmRvdyk7CisKK3B1YmxpYzoKKyAgICBYMTFPZmZTY3JlZW5X
aW5kb3coKTsKKyAgICB2aXJ0dWFsIH5YMTFPZmZTY3JlZW5XaW5kb3coKTsKKyAgICB2b2lkIHNl
dEdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIGNyZWF0ZU9mZnNjcmVlbldpbmRv
dygpOworICAgIHZvaWQgZGVzdHJveVdpbmRvdygpOworCitwcm90ZWN0ZWQ6CisgICAgUmVmUHRy
PFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzPiBtX3NoYXJlZFJlc291cmNlczsKK307CisKK30KKwor
I2VuZGlmCisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>