<?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>100533</bug_id>
          
          <creation_ts>2012-10-26 09:26:03 -0700</creation_ts>
          <short_desc>[CSS Shaders] CustomFilterOperation should be converted to ValidatedCustomFilterOperation before using it</short_desc>
          <delta_ts>2012-11-01 17:34:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>100532</dependson>
    
    <dependson>100548</dependson>
    
    <dependson>100558</dependson>
    
    <dependson>100782</dependson>
    
    <dependson>100890</dependson>
          <blocked>71392</blocked>
    
    <blocked>100905</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexandru Chiculita">achicu</reporter>
          <assigned_to name="Alexandru Chiculita">achicu</assigned_to>
          <cc>dino</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>eric</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gustavo</cc>
    
    <cc>mvujovic</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>752128</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-10-26 09:26:03 -0700</bug_when>
    <thetext>CustomFilterOperation is too hard to use in platform code and we need a simplified version of it. This bug will create a new class called ValidatedCustomFilterOperation and use that instead of the CustomFilterOperation in the platform code.

The difference between CustomFilterOperation and ValidatedCustomFilterOperation is that the later already has the shaders loaded and verified to comply with the specification. At that point the shaders should be ready to be used in a WebGL compliant context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755736</commentid>
    <comment_count>1</comment_count>
      <attachid>171743</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-10-31 17:07:54 -0700</bug_when>
    <thetext>Created attachment 171743
Patch V1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756611</commentid>
    <comment_count>2</comment_count>
      <attachid>171743</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-11-01 14:16:19 -0700</bug_when>
    <thetext>Comment on attachment 171743
Patch V1

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

&gt; Source/WebCore/platform/graphics/filters/ValidatedCustomFilterOperation.h:66
&gt; +    CustomFilterMeshType meshType() const { return m_meshType; }
&gt;  private:

Nit: space between these lines

&gt; Source/WebCore/rendering/FilterEffectRenderer.cpp:342
&gt; +            // CUSTOM operations are alwasy converted to VALIDATED_CUSTOM before getting here.

typo &quot;always&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756708</commentid>
    <comment_count>3</comment_count>
      <attachid>171950</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-11-01 16:21:04 -0700</bug_when>
    <thetext>Created attachment 171950
Patch V2

Sorry, I noticed that there was an issue with the old patch. I&apos;ve split updateOrRemoveFilterEffect and removed the assert_not_reached in computeFilterOperations (I&apos;ve added a comment to explain why).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756711</commentid>
    <comment_count>4</comment_count>
      <attachid>171950</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-11-01 16:23:56 -0700</bug_when>
    <thetext>Comment on attachment 171950
Patch V2

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

&gt; Source/WebCore/ChangeLog:44
&gt; +        layer is updated. Otherwise the composited layer will never see a loaded filter in the first call.
&gt; +
&gt; +        (WebCore):
&gt; +        (WebCore::RenderLayer::isCSSCustomFilterEnabled):
&gt; +        (WebCore::RenderLayer::computeFilterOperations):
&gt; +        (WebCore::RenderLayer::updateOrRemoveFilterClients): Split updateOrRemoveFilterEffect into 2 functions.
&gt; +        This one is supposed to add the clients needed to load network resources.
&gt; +
&gt; +        (WebCore::RenderLayer::updateOrRemoveFilterEffectRenderer): Figures out if a software fallback is needed 
&gt; +        and creates a FilterEffectRenderer.
&gt; +
&gt; +        * rendering/RenderLayer.h:

You have a few blank lines in there.

&gt; Source/WebCore/platform/graphics/filters/ValidatedCustomFilterOperation.h:68
&gt; +    CustomFilterMeshType meshType() const { return m_meshType; }
&gt;  private:
&gt; +    
&gt;      virtual bool operator==(const FilterOperation&amp; o) const

I actually was asking for the empty line between meshType() and private :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756715</commentid>
    <comment_count>5</comment_count>
      <attachid>171950</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-11-01 16:28:45 -0700</bug_when>
    <thetext>Comment on attachment 171950
Patch V2

Attachment 171950 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14696469</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756716</commentid>
    <comment_count>6</comment_count>
      <attachid>171950</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-01 16:29:53 -0700</bug_when>
    <thetext>Comment on attachment 171950
Patch V2

Attachment 171950 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14697446</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756728</commentid>
    <comment_count>7</comment_count>
      <attachid>171950</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-01 16:48:02 -0700</bug_when>
    <thetext>Comment on attachment 171950
Patch V2

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

&gt; Source/WebCore/rendering/RenderLayer.cpp:5126
&gt; +            RefPtr&lt;CustomFilterValidatedProgram&gt; validatedProgram = globalContext-&gt;getValidatedProgram(program-&gt;programInfo());

As you filed Bug 100906, all Accelerated Compositings(a.k.a AC) do not want to compile here, because AC can not use the same GraphicsContext3D belonging to CustomFilterGlobalContext. AC would compile shaders again.
I think &quot;PassRefPtr&lt;FECustomFilter&gt; createCustomFilterEffect() in FilterEffectRenderer&quot; should compile in software path.
And each AC will compile in their own code.

Will you fix this in Bug 100906 later?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756731</commentid>
    <comment_count>8</comment_count>
      <attachid>171950</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-01 16:55:13 -0700</bug_when>
    <thetext>Comment on attachment 171950
Patch V2

Attachment 171950 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14697449</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756736</commentid>
    <comment_count>9</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-11-01 17:05:39 -0700</bug_when>
    <thetext>The other patch got landed first, so I&apos;ve updated the FilterEffectRenderer to use the new constant style. 100890 will actually add the new mesh box type.

Landed in http://trac.webkit.org/changeset/133242.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756741</commentid>
    <comment_count>10</comment_count>
      <attachid>171950</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-01 17:11:54 -0700</bug_when>
    <thetext>Comment on attachment 171950
Patch V2

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

&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:5126
&gt;&gt; +            RefPtr&lt;CustomFilterValidatedProgram&gt; validatedProgram = globalContext-&gt;getValidatedProgram(program-&gt;programInfo());
&gt; 
&gt; As you filed Bug 100906, all Accelerated Compositings(a.k.a AC) do not want to compile here, because AC can not use the same GraphicsContext3D belonging to CustomFilterGlobalContext. AC would compile shaders again.
&gt; I think &quot;PassRefPtr&lt;FECustomFilter&gt; createCustomFilterEffect() in FilterEffectRenderer&quot; should compile in software path.
&gt; And each AC will compile in their own code.
&gt; 
&gt; Will you fix this in Bug 100906 later?

I said the wrong fact. We do not compile here, but we still have the similar problem.

CustomFilterGlobalContext has two roles: supplying GraphicsContext3D and caching CustomFilterValidatedProgram (especially caching gl compiled program to not recompile).

I think we do not use CustomFilterGlobalContext here because AC can not use CustomFilterGlobalContext owned by RenderView.
ValidatedCustomFilterOperation should not know CustomFilterValidatedProgram. ValidatedCustomFilterOperation should know just validated program strings as you filed Bug 100906.
We need to perform &quot;RefPtr&lt;CustomFilterValidatedProgram&gt; validatedProgram = globalContext-&gt;getValidatedProgram(program-&gt;programInfo());&quot; in &quot;PassRefPtr&lt;FECustomFilter&gt; createCustomFilterEffect() in FilterEffectRenderer&quot;
Each AC can use CustomFilterGlobalContext and perform &quot;globalContext-&gt;getValidatedProgram()&quot; in its own code too.

Finally, Thanks for this patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756747</commentid>
    <comment_count>11</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-11-01 17:19:55 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 171950 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171950&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:5126
&gt; &gt;&gt; +            RefPtr&lt;CustomFilterValidatedProgram&gt; validatedProgram = globalContext-&gt;getValidatedProgram(program-&gt;programInfo());
&gt; &gt; 
&gt; &gt; As you filed Bug 100906, all Accelerated Compositings(a.k.a AC) do not want to compile here, because AC can not use the same GraphicsContext3D belonging to CustomFilterGlobalContext. AC would compile shaders again.
&gt; &gt; I think &quot;PassRefPtr&lt;FECustomFilter&gt; createCustomFilterEffect() in FilterEffectRenderer&quot; should compile in software path.
&gt; &gt; And each AC will compile in their own code.
&gt; &gt; 
&gt; &gt; Will you fix this in Bug 100906 later?
&gt; 
&gt; I said the wrong fact. We do not compile here, but we still have the similar problem.
&gt; 
&gt; CustomFilterGlobalContext has two roles: supplying GraphicsContext3D and caching CustomFilterValidatedProgram (especially caching gl compiled program to not recompile).
&gt; 
&gt; I think we do not use CustomFilterGlobalContext here because AC can not use CustomFilterGlobalContext owned by RenderView.
&gt; ValidatedCustomFilterOperation should not know CustomFilterValidatedProgram. ValidatedCustomFilterOperation should know just validated program strings as you filed Bug 100906.
&gt; We need to perform &quot;RefPtr&lt;CustomFilterValidatedProgram&gt; validatedProgram = globalContext-&gt;getValidatedProgram(program-&gt;programInfo());&quot; in &quot;PassRefPtr&lt;FECustomFilter&gt; createCustomFilterEffect() in FilterEffectRenderer&quot;
&gt; Each AC can use CustomFilterGlobalContext and perform &quot;globalContext-&gt;getValidatedProgram()&quot; in its own code too.
&gt; 
&gt; Finally, Thanks for this patch!

In https://bugs.webkit.org/show_bug.cgi?id=100906 I will add a base class to be used by the ValidatedCustomFilterProgram. In the webkit process it will keep a reference to the Validated program. That way we have a reference to the caching system. The UI process will keep a reference to the other class that will just store empty strings.

The advantage is that the validated program can actually keep a reference to the class that stores the strings, using the platform program. That way we could keep and id instead of serializing the shader every time. I will do that one too and then you will need to update your rendering patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756754</commentid>
    <comment_count>12</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-01 17:34:09 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; That way we could keep and id instead of serializing the shader every time.

Good idea!

&gt; I will do that one too and then you will need to update your rendering patches.

Yes, I will.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171743</attachid>
            <date>2012-10-31 17:07:54 -0700</date>
            <delta_ts>2012-11-01 16:21:04 -0700</delta_ts>
            <desc>Patch V1</desc>
            <filename>bug100533_v2.patch</filename>
            <type>text/plain</type>
            <size>13634</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMGZjZTZiLi45NDUxYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzgg
QEAKKzIwMTItMTAtMzEgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgor
CisgICAgICAgIFtDU1MgU2hhZGVyc10gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uIHNob3VsZCBiZSBj
b252ZXJ0ZWQgdG8gVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uIGJlZm9yZSB1c2luZyBp
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNTMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQg
dGhlIGNvZGUgdGhhdCBjb252ZXJ0cyBhIEN1c3RvbUZpbHRlck9wZXJhdGlvbiB0byBhIFZhbGlk
YXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi4KKyAgICAgICAgQm90aCB0aGUgc29mdHdhcmUgcGF0
aCBhbmQgdGhlIGNvbXBvc2l0ZWQgb25lIHdpbGwgdXNlIHRoaXMgb3BlcmF0aW9uIGluc3RlYWQu
IFRoZXJlIHdpbGwgYmUKKyAgICAgICAgbm8gbmVlZCB0byBjaGVjayB0aGUgc2hhZGVyIGluIHBs
YXRmb3JtIGNvZGUgYW55bW9yZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVhZHkgY292
ZXJlZCBieSBleGlzdGluZyBjdXN0b20gZmlsdGVyIHRlc3RzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpWYWxpZGF0
ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb246OnZhbGlkYXRlZFByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpw
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJh
dGlvbjo6bWVzaFJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRhdGVkQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uOjptZXNoQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGF0ZWRDdXN0
b21GaWx0ZXJPcGVyYXRpb246Om1lc2hUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRl
ZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcmVuZGVyaW5n
L0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUN1c3Rv
bUZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6
YnVpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc0NTU0N1c3RvbUZpbHRl
ckVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVGaWx0ZXJP
cGVyYXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAg
KFJlbmRlckxheWVyKToKKwogMjAxMi0xMC0zMSAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIEltcGxlbWVudCB0aGUgY2Fub25pY2FsICJDb250ZW50LVNlY3VyaXR5
LVBvbGljeSIgaGVhZGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJP
cGVyYXRpb24uY3BwCmluZGV4IGVmNjYzNGYuLjM1ZGVmMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAKQEAgLTMyLDEzICszMiwyMSBAQAog
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKICNpbmNsdWRlICJWYWxpZGF0ZWRDdXN0b21GaWx0ZXJP
cGVyYXRpb24uaCIKIAorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFtZXRlci5oIgorI2luY2x1
ZGUgIkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uaCIKICNpbmNsdWRlICJGcmFjdGlvbmFs
TGF5b3V0U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6VmFsaWRhdGVkQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uKCkKK1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6VmFs
aWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRh
dGVkUHJvZ3JhbT4gdmFsaWRhdGVkUHJvZ3JhbSwgCisgICAgY29uc3QgQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdCYgc29ydGVkUGFyYW1ldGVycywgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVk
IG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKICAgICA6IEZpbHRl
ck9wZXJhdGlvbihWQUxJREFURURfQ1VTVE9NKQorICAgICwgbV92YWxpZGF0ZWRQcm9ncmFtKHZh
bGlkYXRlZFByb2dyYW0pCisgICAgLCBtX3BhcmFtZXRlcnMoc29ydGVkUGFyYW1ldGVycykKKyAg
ICAsIG1fbWVzaFJvd3MobWVzaFJvd3MpCisgICAgLCBtX21lc2hDb2x1bW5zKG1lc2hDb2x1bW5z
KQorICAgICwgbV9tZXNoVHlwZShtZXNoVHlwZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJP
cGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFs
aWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgKaW5kZXggYTU3Yzk5Zi4uMDdmYzQ1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0
ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCkBAIC0zMSwx
NiArMzEsMjEgQEAKICNkZWZpbmUgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uX2gKIAog
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJDb25zdGFudHMu
aCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0LmgiCiAjaW5jbHVkZSAiRmls
dGVyT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOworCiBjbGFzcyBW
YWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24gOiBwdWJsaWMgRmlsdGVyT3BlcmF0aW9uIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVy
YXRpb24+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VmFsaWRhdGVkQ3VzdG9tRmls
dGVyT3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtPiB2YWxpZGF0ZWRQcm9ncmFtLCAKKyAgICAgICAgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyTGlzdCYgc29ydGVkUGFyYW1ldGVycywgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1l
c2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKCkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlv
bih2YWxpZGF0ZWRQcm9ncmFtLCBzb3J0ZWRQYXJhbWV0ZXJzLCBtZXNoUm93cywgbWVzaENvbHVt
bnMsIG1lc2hUeXBlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+VmFsaWRhdGVkQ3VzdG9tRmls
dGVyT3BlcmF0aW9uKCk7CkBAIC01MCwxNiArNTUsMzkgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBibGVuZGluZ05lZWRzUmVuZGVyZXJTaXplKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmQoY29uc3QgRmls
dGVyT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IExheW91dFNpemUmLCBi
b29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKTsKKworICAgIEN1c3RvbUZpbHRlclZhbGlk
YXRlZFByb2dyYW0qIHZhbGlkYXRlZFByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkYXRl
ZFByb2dyYW0uZ2V0KCk7IH0KKyAgICBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBw
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisKKyAgICB1bnNpZ25l
ZCBtZXNoUm93cygpIGNvbnN0IHsgcmV0dXJuIG1fbWVzaFJvd3M7IH0KKyAgICB1bnNpZ25lZCBt
ZXNoQ29sdW1ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWVzaENvbHVtbnM7IH0KKworICAgIEN1c3Rv
bUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNoVHlwZTsgfQog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRp
b24mIG8pIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIWlzU2FtZVR5cGUobykpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNvbnN0
IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbiogb3RoZXIgPSBzdGF0aWNfY2FzdDxjb25z
dCBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24qPigmbyk7CisgICAgICAgIHJldHVybiBt
X3ZhbGlkYXRlZFByb2dyYW0uZ2V0KCkgPT0gb3RoZXItPm1fdmFsaWRhdGVkUHJvZ3JhbS5nZXQo
KQorICAgICAgICAgICAgJiYgbV9tZXNoUm93cyA9PSBvdGhlci0+bV9tZXNoUm93cworICAgICAg
ICAgICAgJiYgbV9tZXNoQ29sdW1ucyA9PSBvdGhlci0+bV9tZXNoQ29sdW1ucworICAgICAgICAg
ICAgJiYgbV9tZXNoVHlwZSA9PSBvdGhlci0+bV9tZXNoVHlwZQorICAgICAgICAgICAgJiYgbV9w
YXJhbWV0ZXJzID09IG90aGVyLT5tX3BhcmFtZXRlcnM7CiAgICAgfQogCi0gICAgVmFsaWRhdGVk
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uKCk7CisgICAgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uKFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4sIGNvbnN0IEN1c3Rv
bUZpbHRlclBhcmFtZXRlckxpc3QmLCB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENv
bHVtbnMsIEN1c3RvbUZpbHRlck1lc2hUeXBlKTsKKworICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJW
YWxpZGF0ZWRQcm9ncmFtPiBtX3ZhbGlkYXRlZFByb2dyYW07CisKKyAgICBDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXJMaXN0IG1fcGFyYW1ldGVyczsKKyAgICB1bnNpZ25lZCBtX21lc2hSb3dzOworICAg
IHVuc2lnbmVkIG1fbWVzaENvbHVtbnM7CisgICAgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbV9tZXNo
VHlwZTsKKyAgICAKKyAgICAvLyBGSVhNRTogQWRkIEN1c3RvbUZpbHRlck1lc2hCb3hUeXBlIGFm
dGVyIDEwMDc4MiBpcyBsYW5kZWQuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMDg5MAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKaW5kZXgg
MjM3ZDBmOS4uODQxNjI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zp
bHRlckVmZmVjdFJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmls
dGVyRWZmZWN0UmVuZGVyZXIuY3BwCkBAIC00OSw3ICs0OSw3IEBACiAjaW5jbHVkZSAiQ3VzdG9t
RmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgogI2luY2x1ZGUgIkZFQ3VzdG9tRmlsdGVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAi
VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShT
VkcpCkBAIC04NiwzMyArODYsMTggQEAgaW5saW5lIGJvb2wgaXNGaWx0ZXJTaXplVmFsaWQoRmxv
YXRSZWN0IHJlY3QpCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpICYmIFVTRSgzRF9HUkFQ
SElDUykKLXN0YXRpYyBib29sIGlzQ1NTQ3VzdG9tRmlsdGVyRW5hYmxlZChEb2N1bWVudCogZG9j
dW1lbnQpCitzdGF0aWMgUGFzc1JlZlB0cjxGRUN1c3RvbUZpbHRlcj4gY3JlYXRlQ3VzdG9tRmls
dGVyRWZmZWN0KEZpbHRlciogZmlsdGVyLCBEb2N1bWVudCogZG9jdW1lbnQsIFZhbGlkYXRlZEN1
c3RvbUZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uKQogewotICAgIC8vIFdlIG9ubHkgd2FudCB0
byBlbmFibGUgc2hhZGVycyBpZiBXZWJHTCBpcyBhbHNvIGVuYWJsZWQgb24gdGhpcyBwbGF0Zm9y
bS4KLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKLSAgICBy
ZXR1cm4gc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmlzQ1NTQ3VzdG9tRmlsdGVyRW5hYmxlZCgpICYm
IHNldHRpbmdzLT53ZWJHTEVuYWJsZWQoKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8RkVDdXN0
b21GaWx0ZXI+IGNyZWF0ZUN1c3RvbUZpbHRlckVmZmVjdChGaWx0ZXIqIGZpbHRlciwgRG9jdW1l
bnQqIGRvY3VtZW50LCBDdXN0b21GaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbikKLXsKLSAgICBp
ZiAoIWlzQ1NTQ3VzdG9tRmlsdGVyRW5hYmxlZChkb2N1bWVudCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgUmVmUHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBvcGVyYXRpb24t
PnByb2dyYW0oKTsKLSAgICBpZiAoIXByb2dyYW0tPmlzTG9hZGVkKCkpCi0gICAgICAgIHJldHVy
biAwOwotCiAgICAgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCogZ2xvYmFsQ29udGV4dCA9IGRv
Y3VtZW50LT5yZW5kZXJWaWV3KCktPmN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQoKTsKICAgICBn
bG9iYWxDb250ZXh0LT5wcmVwYXJlQ29udGV4dElmTmVlZGVkKGRvY3VtZW50LT52aWV3KCktPmhv
c3RXaW5kb3coKSk7CiAgICAgaWYgKCFnbG9iYWxDb250ZXh0LT5jb250ZXh0KCkpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHZh
bGlkYXRlZFByb2dyYW0gPSBnbG9iYWxDb250ZXh0LT5nZXRWYWxpZGF0ZWRQcm9ncmFtKHByb2dy
YW0tPnByb2dyYW1JbmZvKCkpOwotICAgIGlmICghdmFsaWRhdGVkUHJvZ3JhbS0+aXNJbml0aWFs
aXplZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBGRUN1c3RvbUZpbHRlcjo6
Y3JlYXRlKGZpbHRlciwgZ2xvYmFsQ29udGV4dC0+Y29udGV4dCgpLCB2YWxpZGF0ZWRQcm9ncmFt
LnJlbGVhc2UoKSwgb3BlcmF0aW9uLT5wYXJhbWV0ZXJzKCksCi0gICAgICAgIG9wZXJhdGlvbi0+
bWVzaFJvd3MoKSwgb3BlcmF0aW9uLT5tZXNoQ29sdW1ucygpLCBvcGVyYXRpb24tPm1lc2hCb3hU
eXBlKCksIG9wZXJhdGlvbi0+bWVzaFR5cGUoKSk7CisgICAgLy8gRklYTUU6IFVzZSB0aGUgcmln
aHQgQ3VzdG9tRmlsdGVyTWVzaEJveFR5cGUgd2hlbiB0aGF0IHdpbGwgYmUgYXZhaWxhYmxlIG9u
IHRoZSBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uCisgICAgLy8gUmlnaHQgbm93IHRo
ZSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHVzZSB0aGF0IHBhcmFtZXRlciBhbnl3YXksIHNvIGp1
c3QgcGFzcyB0aGUgZGVmYXVsdCBGSUxURVJfQk9YLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA4OTAKKyAgICByZXR1cm4gRkVDdXN0b21GaWx0ZXI6
OmNyZWF0ZShmaWx0ZXIsIGdsb2JhbENvbnRleHQtPmNvbnRleHQoKSwgb3BlcmF0aW9uLT52YWxp
ZGF0ZWRQcm9ncmFtKCksIG9wZXJhdGlvbi0+cGFyYW1ldGVycygpLAorICAgICAgICBvcGVyYXRp
b24tPm1lc2hSb3dzKCksIG9wZXJhdGlvbi0+bWVzaENvbHVtbnMoKSwgQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uOjpGSUxURVJfQk9YLCBvcGVyYXRpb24tPm1lc2hUeXBlKCkpOwogfQogI2VuZGlmCiAK
QEAgLTM1Myw4ICszMzgsMTMgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVpbGQoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGUKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKSAmJiBVU0UoM0RfR1JB
UEhJQ1MpCi0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006IHsKLSAgICAgICAg
ICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbiogY3VzdG9tRmlsdGVyT3BlcmF0aW9uID0gc3RhdGlj
X2Nhc3Q8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTToKKyAgICAgICAgICAgIC8vIENVU1RPTSBvcGVy
YXRpb25zIGFyZSBhbHdhc3kgY29udmVydGVkIHRvIFZBTElEQVRFRF9DVVNUT00gYmVmb3JlIGdl
dHRpbmcgaGVyZS4KKyAgICAgICAgICAgIC8vIFRoZSBjb252ZXJzaW9uIGhhcHBlbnMgaW4gUmVu
ZGVyTGF5ZXI6OmNvbXB1dGVGaWx0ZXJPcGVyYXRpb25zLgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlZBTElEQVRFRF9DVVNUT006IHsKKyAgICAgICAgICAgIFZhbGlkYXRlZEN1c3RvbUZp
bHRlck9wZXJhdGlvbiogY3VzdG9tRmlsdGVyT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8VmFsaWRh
dGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAg
IGVmZmVjdCA9IGNyZWF0ZUN1c3RvbUZpbHRlckVmZmVjdCh0aGlzLCBkb2N1bWVudCwgY3VzdG9t
RmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGlmIChlZmZlY3QpCiAgICAgICAgICAgICAg
ICAgbV9oYXNDdXN0b21TaGFkZXJGaWx0ZXIgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggOWU4NDVkOC4uMGI4MWRhNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xMTAsOCArMTEwLDExIEBACiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNlbmRpZgogCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotI2luY2x1
ZGUgPEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oPgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykgJiYg
VVNFKDNEX0dSQVBISUNTKQorI2luY2x1ZGUgIkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuaCIK
KyNpbmNsdWRlICJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0
ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCisjaW5jbHVkZSAiVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uLmgiCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCkBAIC01MDc5LDYg
KzUwODIsMTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUmVmbGVjdGlvblN0eWxlKCkKICAg
ICBtX3JlZmxlY3Rpb24tPnNldFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CiB9CiAKKyNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCitib29sIFJlbmRlckxheWVyOjppc0NTU0N1c3RvbUZpbHRlckVu
YWJsZWQoKSBjb25zdAoreworICAgIC8vIFdlIG9ubHkgd2FudCB0byBlbmFibGUgc2hhZGVycyBp
ZiBXZWJHTCBpcyBhbHNvIGVuYWJsZWQgb24gdGhpcyBwbGF0Zm9ybS4KKyAgICBjb25zdCBTZXR0
aW5ncyogc2V0dGluZ3MgPSByZW5kZXJlcigpLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAg
IHJldHVybiBzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNDU1NDdXN0b21GaWx0ZXJFbmFibGVkKCkg
JiYgc2V0dGluZ3MtPndlYkdMRW5hYmxlZCgpOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCiBGaWx0ZXJPcGVyYXRpb25zIFJlbmRlckxheWVyOjpjb21wdXRlRmlsdGVyT3Bl
cmF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CkBAIC01MDg5LDYgKzUxMDEsMTIg
QEAgRmlsdGVyT3BlcmF0aW9ucyBSZW5kZXJMYXllcjo6Y29tcHV0ZUZpbHRlck9wZXJhdGlvbnMo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogICAgIGlmICghZmlsdGVycy5oYXNDdXN0b21GaWx0
ZXIoKSkKICAgICAgICAgcmV0dXJuIGZpbHRlcnM7CiAKKyAgICBpZiAoIWlzQ1NTQ3VzdG9tRmls
dGVyRW5hYmxlZCgpKSB7CisgICAgICAgIC8vIENTUyBDdXN0b20gZmlsdGVycyBzaG91bGQgbm90
IHBhcnNlIGF0IGFsbCBpbiB0aGlzIGNhc2UuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9ucygpOworICAgIH0KKwogICAgIEZpbHRl
ck9wZXJhdGlvbnMgb3V0cHV0RmlsdGVyczsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
bHRlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZmls
dGVyT3BlcmF0aW9uID0gZmlsdGVycy5vcGVyYXRpb25zKCkuYXQoaSk7CkBAIC01MDk2LDEwICs1
MTE0LDE5IEBAIEZpbHRlck9wZXJhdGlvbnMgUmVuZGVyTGF5ZXI6OmNvbXB1dGVGaWx0ZXJPcGVy
YXRpb25zKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICAgICAgICAgIC8vIFdlIGhhdmUg
dG8gd2FpdCB1bnRpbCB0aGUgcHJvZ3JhbSBvZiBDU1MgU2hhZGVycyBpcyBsb2FkZWQgYmVmb3Jl
IHNldHRpbmcgaXQgb24gdGhlIGxheWVyLgogICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIHdp
bGwgaGFuZGxlIHRoZSBsb2FkaW5nIG9mIHRoZSBzaGFkZXJzIGFuZCByZXBhaW50aW5nIG9mIHRo
ZSBsYXllciBpbiB1cGRhdGVPclJlbW92ZUZpbHRlckVmZmVjdC4KICAgICAgICAgICAgIGNvbnN0
IEN1c3RvbUZpbHRlck9wZXJhdGlvbiogY3VzdG9tT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uLmdldCgpKTsKLSAgICAg
ICAgICAgIGlmICghY3VzdG9tT3BlcmF0aW9uLT5wcm9ncmFtKCktPmlzTG9hZGVkKCkpCisgICAg
ICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGN1c3RvbU9wZXJh
dGlvbi0+cHJvZ3JhbSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5pc0xvYWRlZCgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBDdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0KiBnbG9iYWxDb250ZXh0ID0gcmVuZGVyZXIoKS0+dmlldygp
LT5jdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KCk7CisgICAgICAgICAgICBSZWZQdHI8Q3VzdG9t
RmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gdmFsaWRhdGVkUHJvZ3JhbSA9IGdsb2JhbENvbnRleHQt
PmdldFZhbGlkYXRlZFByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUluZm8oKSk7CisgICAgICAgICAg
ICBpZiAoIXZhbGlkYXRlZFByb2dyYW0tPmlzSW5pdGlhbGl6ZWQoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBWYWxpZGF0ZSB0aGUgc2hhZGVycyBh
bmQgY29udmVydCB0aGUgb3BlcmF0aW9uIHRvIGEgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMDUzMworCisgICAgICAgICAgICBSZWZQdHI8VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uPiB2YWxpZGF0ZWRPcGVyYXRpb24gPSBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRp
b246OmNyZWF0ZSh2YWxpZGF0ZWRQcm9ncmFtLnJlbGVhc2UoKSwgCisgICAgICAgICAgICAgICAg
Y3VzdG9tT3BlcmF0aW9uLT5wYXJhbWV0ZXJzKCksIGN1c3RvbU9wZXJhdGlvbi0+bWVzaFJvd3Mo
KSwgY3VzdG9tT3BlcmF0aW9uLT5tZXNoQ29sdW1ucygpLCBjdXN0b21PcGVyYXRpb24tPm1lc2hU
eXBlKCkpOworICAgICAgICAgICAgb3V0cHV0RmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKHZh
bGlkYXRlZE9wZXJhdGlvbi5yZWxlYXNlKCkpOworICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KICAgICAgICAgb3V0cHV0RmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKGZpbHRlck9w
ZXJhdGlvbi5yZWxlYXNlKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgKaW5kZXggZmVkMjQxOC4uMWE0OWI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmgKQEAgLTY1Myw2ICs2NTMsMTAgQEAgcHVibGljOgogICAgIGJvb2wgY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5
T3ZlcmxheVNjcm9sbGJhcnM7IH0KICAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Ny
b2xsYmFycyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Ny
b2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFyczsgfQogCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQor
ICAgIGJvb2wgaXNDU1NDdXN0b21GaWx0ZXJFbmFibGVkKCkgY29uc3Q7CisjZW5kaWYKKwogI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKICAgICBGaWx0ZXJPcGVyYXRpb25zIGNvbXB1dGVGaWx0ZXJP
cGVyYXRpb25zKGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAgYm9vbCBwYWludHNXaXRoRmlsdGVy
cygpIGNvbnN0Owo=
</data>
<flag name="review"
          id="185768"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171950</attachid>
            <date>2012-11-01 16:21:04 -0700</date>
            <delta_ts>2012-11-01 17:11:54 -0700</delta_ts>
            <desc>Patch V2</desc>
            <filename>bug100533_v3.patch</filename>
            <type>text/plain</type>
            <size>17309</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyZDQ5NzQ0Li40Y2YxOGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTItMTEtMDEgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgor
CisgICAgICAgIFtDU1MgU2hhZGVyc10gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uIHNob3VsZCBiZSBj
b252ZXJ0ZWQgdG8gVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uIGJlZm9yZSB1c2luZyBp
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNTMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgKG5vYm9keSkuCisKKyAgICAgICAgQWRkZWQgdGhlIGNv
ZGUgdGhhdCBjb252ZXJ0cyBhIEN1c3RvbUZpbHRlck9wZXJhdGlvbiB0byBhIFZhbGlkYXRlZEN1
c3RvbUZpbHRlck9wZXJhdGlvbi4KKyAgICAgICAgQm90aCB0aGUgc29mdHdhcmUgcGF0aCBhbmQg
dGhlIGNvbXBvc2l0ZWQgb25lIHdpbGwgdXNlIHRoaXMgb3BlcmF0aW9uIGluc3RlYWQuIFRoZXJl
IHdpbGwgYmUKKyAgICAgICAgbm8gbmVlZCB0byBjaGVjayB0aGUgc2hhZGVyIGluIHBsYXRmb3Jt
IGNvZGUgYW55bW9yZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVhZHkgY292ZXJlZCBi
eSBleGlzdGluZyBjdXN0b20gZmlsdGVyIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpWYWxpZGF0ZWRDdXN0
b21GaWx0ZXJPcGVyYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKToK
KyAgICAgICAgKFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb246OnZhbGlkYXRlZFByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpwYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6
bWVzaFJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uOjptZXNoQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGF0ZWRDdXN0b21GaWx0
ZXJPcGVyYXRpb246Om1lc2hUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRlZEN1c3Rv
bUZpbHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUN1c3RvbUZpbHRl
ckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVpbGQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6ZW5zdXJlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y2xlYXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzdHls
ZUNoYW5nZWQpOiB1cGRhdGVPclJlbW92ZUZpbHRlckNsaWVudHMgbmVlZHMgdG8gYmUgY2FsbGVk
IGJlZm9yZSB0aGUgY29tcG9zaXRlZAorICAgICAgICBsYXllciBpcyB1cGRhdGVkLiBPdGhlcndp
c2UgdGhlIGNvbXBvc2l0ZWQgbGF5ZXIgd2lsbCBuZXZlciBzZWUgYSBsb2FkZWQgZmlsdGVyIGlu
IHRoZSBmaXJzdCBjYWxsLgorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjppc0NTU0N1c3RvbUZpbHRlckVuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVGaWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjp1cGRhdGVPclJlbW92ZUZpbHRlckNsaWVudHMpOiBTcGxpdCB1cGRh
dGVPclJlbW92ZUZpbHRlckVmZmVjdCBpbnRvIDIgZnVuY3Rpb25zLgorICAgICAgICBUaGlzIG9u
ZSBpcyBzdXBwb3NlZCB0byBhZGQgdGhlIGNsaWVudHMgbmVlZGVkIHRvIGxvYWQgbmV0d29yayBy
ZXNvdXJjZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVPclJlbW92
ZUZpbHRlckVmZmVjdFJlbmRlcmVyKTogRmlndXJlcyBvdXQgaWYgYSBzb2Z0d2FyZSBmYWxsYmFj
ayBpcyBuZWVkZWQgCisgICAgICAgIGFuZCBjcmVhdGVzIGEgRmlsdGVyRWZmZWN0UmVuZGVyZXIu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKFJlbmRlckxh
eWVyKToKKwogMjAxMi0xMS0wMSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIFBhcnQyIG9mOiBFeHRlbmQgLXdlYmtpdC11c2VyLXNlbGVjdCB3aXRoIG5ldyB2
YWx1ZSAiYWxsIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRp
b24uY3BwCmluZGV4IGVmNjYzNGYuLjM1ZGVmMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1ZhbGlk
YXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAKQEAgLTMyLDEzICszMiwyMSBAQAogI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKICNpbmNsdWRlICJWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRp
b24uaCIKIAorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFtZXRlci5oIgorI2luY2x1ZGUgIkN1
c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uaCIKICNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0
U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6VmFsaWRhdGVkQ3VzdG9tRmls
dGVyT3BlcmF0aW9uKCkKK1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6VmFsaWRhdGVk
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJv
Z3JhbT4gdmFsaWRhdGVkUHJvZ3JhbSwgCisgICAgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
TGlzdCYgc29ydGVkUGFyYW1ldGVycywgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hD
b2x1bW5zLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKICAgICA6IEZpbHRlck9wZXJh
dGlvbihWQUxJREFURURfQ1VTVE9NKQorICAgICwgbV92YWxpZGF0ZWRQcm9ncmFtKHZhbGlkYXRl
ZFByb2dyYW0pCisgICAgLCBtX3BhcmFtZXRlcnMoc29ydGVkUGFyYW1ldGVycykKKyAgICAsIG1f
bWVzaFJvd3MobWVzaFJvd3MpCisgICAgLCBtX21lc2hDb2x1bW5zKG1lc2hDb2x1bW5zKQorICAg
ICwgbV9tZXNoVHlwZShtZXNoVHlwZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVk
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgKaW5kZXggYTU3Yzk5Zi4uMTMwMDY4NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9WYWxpZGF0ZWRDdXN0
b21GaWx0ZXJPcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCkBAIC0zMSwxNiArMzEs
MjEgQEAKICNkZWZpbmUgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uX2gKIAogI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJDb25zdGFudHMuaCIKKyNp
bmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0LmgiCiAjaW5jbHVkZSAiRmlsdGVyT3Bl
cmF0aW9uLmgiCiAjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOworCiBjbGFzcyBWYWxpZGF0
ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24gOiBwdWJsaWMgRmlsdGVyT3BlcmF0aW9uIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24+
IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiB2
YWxpZGF0ZWRQcm9ncmFtLCAKKyAgICAgICAgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlz
dCYgc29ydGVkUGFyYW1ldGVycywgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1
bW5zLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKCkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbih2YWxp
ZGF0ZWRQcm9ncmFtLCBzb3J0ZWRQYXJhbWV0ZXJzLCBtZXNoUm93cywgbWVzaENvbHVtbnMsIG1l
c2hUeXBlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uKCk7CkBAIC01MCwxNiArNTUsNDAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBi
bGVuZGluZ05lZWRzUmVuZGVyZXJTaXplKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmQoY29uc3QgRmlsdGVyT3Bl
cmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IExheW91dFNpemUmLCBib29sIGJs
ZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKTsKKworICAgIEN1c3RvbUZpbHRlclZhbGlkYXRlZFBy
b2dyYW0qIHZhbGlkYXRlZFByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkYXRlZFByb2dy
YW0uZ2V0KCk7IH0KKyAgICBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisKKyAgICB1bnNpZ25lZCBtZXNo
Um93cygpIGNvbnN0IHsgcmV0dXJuIG1fbWVzaFJvd3M7IH0KKyAgICB1bnNpZ25lZCBtZXNoQ29s
dW1ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWVzaENvbHVtbnM7IH0KKworICAgIEN1c3RvbUZpbHRl
ck1lc2hUeXBlIG1lc2hUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNoVHlwZTsgfQogcHJpdmF0
ZToKKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRp
b24mIG8pIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIWlzU2FtZVR5cGUobykpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNvbnN0
IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbiogb3RoZXIgPSBzdGF0aWNfY2FzdDxjb25z
dCBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24qPigmbyk7CisgICAgICAgIHJldHVybiBt
X3ZhbGlkYXRlZFByb2dyYW0uZ2V0KCkgPT0gb3RoZXItPm1fdmFsaWRhdGVkUHJvZ3JhbS5nZXQo
KQorICAgICAgICAgICAgJiYgbV9tZXNoUm93cyA9PSBvdGhlci0+bV9tZXNoUm93cworICAgICAg
ICAgICAgJiYgbV9tZXNoQ29sdW1ucyA9PSBvdGhlci0+bV9tZXNoQ29sdW1ucworICAgICAgICAg
ICAgJiYgbV9tZXNoVHlwZSA9PSBvdGhlci0+bV9tZXNoVHlwZQorICAgICAgICAgICAgJiYgbV9w
YXJhbWV0ZXJzID09IG90aGVyLT5tX3BhcmFtZXRlcnM7CiAgICAgfQogCi0gICAgVmFsaWRhdGVk
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uKCk7CisgICAgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uKFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4sIGNvbnN0IEN1c3Rv
bUZpbHRlclBhcmFtZXRlckxpc3QmLCB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENv
bHVtbnMsIEN1c3RvbUZpbHRlck1lc2hUeXBlKTsKKworICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJW
YWxpZGF0ZWRQcm9ncmFtPiBtX3ZhbGlkYXRlZFByb2dyYW07CisKKyAgICBDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXJMaXN0IG1fcGFyYW1ldGVyczsKKyAgICB1bnNpZ25lZCBtX21lc2hSb3dzOworICAg
IHVuc2lnbmVkIG1fbWVzaENvbHVtbnM7CisgICAgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbV9tZXNo
VHlwZTsKKyAgICAKKyAgICAvLyBGSVhNRTogQWRkIEN1c3RvbUZpbHRlck1lc2hCb3hUeXBlIGFm
dGVyIDEwMDc4MiBpcyBsYW5kZWQuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMDg5MAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKaW5kZXgg
MjM3ZDBmOS4uZDUyYzAyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zp
bHRlckVmZmVjdFJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmls
dGVyRWZmZWN0UmVuZGVyZXIuY3BwCkBAIC00OSw3ICs0OSw3IEBACiAjaW5jbHVkZSAiQ3VzdG9t
RmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgogI2luY2x1ZGUgIkZFQ3VzdG9tRmlsdGVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAi
VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShT
VkcpCkBAIC04NiwzMyArODYsMTggQEAgaW5saW5lIGJvb2wgaXNGaWx0ZXJTaXplVmFsaWQoRmxv
YXRSZWN0IHJlY3QpCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpICYmIFVTRSgzRF9HUkFQ
SElDUykKLXN0YXRpYyBib29sIGlzQ1NTQ3VzdG9tRmlsdGVyRW5hYmxlZChEb2N1bWVudCogZG9j
dW1lbnQpCitzdGF0aWMgUGFzc1JlZlB0cjxGRUN1c3RvbUZpbHRlcj4gY3JlYXRlQ3VzdG9tRmls
dGVyRWZmZWN0KEZpbHRlciogZmlsdGVyLCBEb2N1bWVudCogZG9jdW1lbnQsIFZhbGlkYXRlZEN1
c3RvbUZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uKQogewotICAgIC8vIFdlIG9ubHkgd2FudCB0
byBlbmFibGUgc2hhZGVycyBpZiBXZWJHTCBpcyBhbHNvIGVuYWJsZWQgb24gdGhpcyBwbGF0Zm9y
bS4KLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKLSAgICBy
ZXR1cm4gc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmlzQ1NTQ3VzdG9tRmlsdGVyRW5hYmxlZCgpICYm
IHNldHRpbmdzLT53ZWJHTEVuYWJsZWQoKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8RkVDdXN0
b21GaWx0ZXI+IGNyZWF0ZUN1c3RvbUZpbHRlckVmZmVjdChGaWx0ZXIqIGZpbHRlciwgRG9jdW1l
bnQqIGRvY3VtZW50LCBDdXN0b21GaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbikKLXsKLSAgICBp
ZiAoIWlzQ1NTQ3VzdG9tRmlsdGVyRW5hYmxlZChkb2N1bWVudCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgUmVmUHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBvcGVyYXRpb24t
PnByb2dyYW0oKTsKLSAgICBpZiAoIXByb2dyYW0tPmlzTG9hZGVkKCkpCi0gICAgICAgIHJldHVy
biAwOwotCiAgICAgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCogZ2xvYmFsQ29udGV4dCA9IGRv
Y3VtZW50LT5yZW5kZXJWaWV3KCktPmN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQoKTsKICAgICBn
bG9iYWxDb250ZXh0LT5wcmVwYXJlQ29udGV4dElmTmVlZGVkKGRvY3VtZW50LT52aWV3KCktPmhv
c3RXaW5kb3coKSk7CiAgICAgaWYgKCFnbG9iYWxDb250ZXh0LT5jb250ZXh0KCkpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHZh
bGlkYXRlZFByb2dyYW0gPSBnbG9iYWxDb250ZXh0LT5nZXRWYWxpZGF0ZWRQcm9ncmFtKHByb2dy
YW0tPnByb2dyYW1JbmZvKCkpOwotICAgIGlmICghdmFsaWRhdGVkUHJvZ3JhbS0+aXNJbml0aWFs
aXplZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBGRUN1c3RvbUZpbHRlcjo6
Y3JlYXRlKGZpbHRlciwgZ2xvYmFsQ29udGV4dC0+Y29udGV4dCgpLCB2YWxpZGF0ZWRQcm9ncmFt
LnJlbGVhc2UoKSwgb3BlcmF0aW9uLT5wYXJhbWV0ZXJzKCksCi0gICAgICAgIG9wZXJhdGlvbi0+
bWVzaFJvd3MoKSwgb3BlcmF0aW9uLT5tZXNoQ29sdW1ucygpLCBvcGVyYXRpb24tPm1lc2hCb3hU
eXBlKCksIG9wZXJhdGlvbi0+bWVzaFR5cGUoKSk7CisgICAgLy8gRklYTUU6IFVzZSB0aGUgcmln
aHQgQ3VzdG9tRmlsdGVyTWVzaEJveFR5cGUgd2hlbiB0aGF0IHdpbGwgYmUgYXZhaWxhYmxlIG9u
IHRoZSBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uCisgICAgLy8gUmlnaHQgbm93IHRo
ZSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHVzZSB0aGF0IHBhcmFtZXRlciBhbnl3YXksIHNvIGp1
c3QgcGFzcyB0aGUgZGVmYXVsdCBGSUxURVJfQk9YLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA4OTAKKyAgICByZXR1cm4gRkVDdXN0b21GaWx0ZXI6
OmNyZWF0ZShmaWx0ZXIsIGdsb2JhbENvbnRleHQtPmNvbnRleHQoKSwgb3BlcmF0aW9uLT52YWxp
ZGF0ZWRQcm9ncmFtKCksIG9wZXJhdGlvbi0+cGFyYW1ldGVycygpLAorICAgICAgICBvcGVyYXRp
b24tPm1lc2hSb3dzKCksIG9wZXJhdGlvbi0+bWVzaENvbHVtbnMoKSwgQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uOjpGSUxURVJfQk9YLCBvcGVyYXRpb24tPm1lc2hUeXBlKCkpOwogfQogI2VuZGlmCiAK
QEAgLTM1Myw4ICszMzgsMTMgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVpbGQoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGUKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKSAmJiBVU0UoM0RfR1JB
UEhJQ1MpCi0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006IHsKLSAgICAgICAg
ICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbiogY3VzdG9tRmlsdGVyT3BlcmF0aW9uID0gc3RhdGlj
X2Nhc3Q8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTToKKyAgICAgICAgICAgIC8vIENVU1RPTSBvcGVy
YXRpb25zIGFyZSBhbHdheXMgY29udmVydGVkIHRvIFZBTElEQVRFRF9DVVNUT00gYmVmb3JlIGdl
dHRpbmcgaGVyZS4KKyAgICAgICAgICAgIC8vIFRoZSBjb252ZXJzaW9uIGhhcHBlbnMgaW4gUmVu
ZGVyTGF5ZXI6OmNvbXB1dGVGaWx0ZXJPcGVyYXRpb25zLgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlZBTElEQVRFRF9DVVNUT006IHsKKyAgICAgICAgICAgIFZhbGlkYXRlZEN1c3RvbUZp
bHRlck9wZXJhdGlvbiogY3VzdG9tRmlsdGVyT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8VmFsaWRh
dGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAg
IGVmZmVjdCA9IGNyZWF0ZUN1c3RvbUZpbHRlckVmZmVjdCh0aGlzLCBkb2N1bWVudCwgY3VzdG9t
RmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGlmIChlZmZlY3QpCiAgICAgICAgICAgICAg
ICAgbV9oYXNDdXN0b21TaGFkZXJGaWx0ZXIgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggOWU4NDVkOC4uMzk5N2JkZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xMTAsOCArMTEwLDExIEBACiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNlbmRpZgogCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotI2luY2x1
ZGUgPEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oPgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykgJiYg
VVNFKDNEX0dSQVBISUNTKQorI2luY2x1ZGUgIkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuaCIK
KyNpbmNsdWRlICJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0
ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCisjaW5jbHVkZSAiVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uLmgiCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCkBAIC00NTA1LDcg
KzQ1MDgsNyBAQCBSZW5kZXJMYXllckJhY2tpbmcqIFJlbmRlckxheWVyOjplbnN1cmVCYWNraW5n
KCkKICAgICAgICAgY29tcG9zaXRvcigpLT5sYXllckJlY2FtZUNvbXBvc2l0ZWQodGhpcyk7CiAK
ICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgICAgIHVwZGF0ZU9yUmVtb3ZlRmlsdGVyRWZm
ZWN0KCk7CisgICAgICAgIHVwZGF0ZU9yUmVtb3ZlRmlsdGVyRWZmZWN0UmVuZGVyZXIoKTsKICNl
bmRpZgogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgICAgIGJhY2tpbmcoKS0+c2V0
QmxlbmRNb2RlKG1fYmxlbmRNb2RlKTsKQEAgLTQ1MjIsNyArNDUyNSw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OmNsZWFyQmFja2luZyhib29sIGxheWVyQmVpbmdEZXN0cm95ZWQpCiAKICNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCiAgICAgaWYgKCFsYXllckJlaW5nRGVzdHJveWVkKQotICAgICAgICB1
cGRhdGVPclJlbW92ZUZpbHRlckVmZmVjdCgpOworICAgICAgICB1cGRhdGVPclJlbW92ZUZpbHRl
ckVmZmVjdFJlbmRlcmVyKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShsYXllckJlaW5nRGVz
dHJveWVkKTsKICNlbmRpZgpAQCAtNDk0MSw2ICs0OTQ0LDkgQEAgdm9pZCBSZW5kZXJMYXllcjo6
c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KQogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgdXBkYXRlQmxlbmRNb2RlKCk7CiAj
ZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdXBkYXRlT3JSZW1vdmVGaWx0ZXJD
bGllbnRzKCk7CisjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICBpZiAoY29tcG9zaXRvcigpLT51cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUodGhpcykpCkBA
IC00OTU2LDcgKzQ5NjIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVE
aWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKLSAgICB1cGRhdGVPclJlbW92ZUZpbHRlckVmZmVjdCgpOworICAg
IHVwZGF0ZU9yUmVtb3ZlRmlsdGVyRWZmZWN0UmVuZGVyZXIoKTsKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAgICAgYm9vbCBiYWNraW5nRGlkQ29tcG9zaXRlTGF5ZXJzID0gaXND
b21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5jYW5Db21wb3NpdGVGaWx0ZXJzKCk7CiAgICAgaWYg
KGlzQ29tcG9zaXRlZCgpICYmIGJhY2tpbmdEaWRDb21wb3NpdGVMYXllcnMgJiYgIWJhY2tpbmco
KS0+Y2FuQ29tcG9zaXRlRmlsdGVycygpKSB7CkBAIC01MDc5LDYgKzUwODUsMTUgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlUmVmbGVjdGlvblN0eWxlKCkKICAgICBtX3JlZmxlY3Rpb24tPnNl
dFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
Citib29sIFJlbmRlckxheWVyOjppc0NTU0N1c3RvbUZpbHRlckVuYWJsZWQoKSBjb25zdAorewor
ICAgIC8vIFdlIG9ubHkgd2FudCB0byBlbmFibGUgc2hhZGVycyBpZiBXZWJHTCBpcyBhbHNvIGVu
YWJsZWQgb24gdGhpcyBwbGF0Zm9ybS4KKyAgICBjb25zdCBTZXR0aW5ncyogc2V0dGluZ3MgPSBy
ZW5kZXJlcigpLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgIHJldHVybiBzZXR0aW5ncyAm
JiBzZXR0aW5ncy0+aXNDU1NDdXN0b21GaWx0ZXJFbmFibGVkKCkgJiYgc2V0dGluZ3MtPndlYkdM
RW5hYmxlZCgpOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiBGaWx0ZXJP
cGVyYXRpb25zIFJlbmRlckxheWVyOjpjb21wdXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUpCiB7CkBAIC01MDg5LDE3ICs1MTA0LDMzIEBAIEZpbHRlck9wZXJhdGlv
bnMgUmVuZGVyTGF5ZXI6OmNvbXB1dGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSkKICAgICBpZiAoIWZpbHRlcnMuaGFzQ3VzdG9tRmlsdGVyKCkpCiAgICAgICAgIHJl
dHVybiBmaWx0ZXJzOwogCisgICAgaWYgKCFpc0NTU0N1c3RvbUZpbHRlckVuYWJsZWQoKSkgewor
ICAgICAgICAvLyBDU1MgQ3VzdG9tIGZpbHRlcnMgc2hvdWxkIG5vdCBwYXJzZSBhdCBhbGwgaW4g
dGhpcyBjYXNlLCBidXQgdGhlcmUgbWlnaHQgYmUKKyAgICAgICAgLy8gcmVtYWluaW5nIHN0eWxl
cyB0aGF0IHdlcmUgcGFyc2VkIHdoZW4gdGhlIGZsYWcgd2FzIGVuYWJsZWQuIFJlcHJvZHVjZXMg
aW4gRHVtcFJlbmRlclRyZWUKKyAgICAgICAgLy8gYmVjYXVzZSBpdCByZXNldHMgdGhlIGZsYWcg
d2hpbGUgdGhlIHByZXZpb3VzIHRlc3QgaXMgc3RpbGwgbG9hZGVkLgorICAgICAgICByZXR1cm4g
RmlsdGVyT3BlcmF0aW9ucygpOworICAgIH0KKwogICAgIEZpbHRlck9wZXJhdGlvbnMgb3V0cHV0
RmlsdGVyczsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZmlsdGVyT3BlcmF0aW9uID0gZmls
dGVycy5vcGVyYXRpb25zKCkuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdl
dE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewogICAgICAgICAg
ICAgLy8gV2UgaGF2ZSB0byB3YWl0IHVudGlsIHRoZSBwcm9ncmFtIG9mIENTUyBTaGFkZXJzIGlz
IGxvYWRlZCBiZWZvcmUgc2V0dGluZyBpdCBvbiB0aGUgbGF5ZXIuCi0gICAgICAgICAgICAvLyBO
b3RlIHRoYXQgd2Ugd2lsbCBoYW5kbGUgdGhlIGxvYWRpbmcgb2YgdGhlIHNoYWRlcnMgYW5kIHJl
cGFpbnRpbmcgb2YgdGhlIGxheWVyIGluIHVwZGF0ZU9yUmVtb3ZlRmlsdGVyRWZmZWN0LgorICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIHdpbGwgaGFuZGxlIHRoZSBsb2FkaW5nIG9mIHRoZSBz
aGFkZXJzIGFuZCByZXBhaW50aW5nIG9mIHRoZSBsYXllciBpbiB1cGRhdGVPclJlbW92ZUZpbHRl
ckNsaWVudHMuCiAgICAgICAgICAgICBjb25zdCBDdXN0b21GaWx0ZXJPcGVyYXRpb24qIGN1c3Rv
bU9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KGZp
bHRlck9wZXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoIWN1c3RvbU9wZXJhdGlvbi0+
cHJvZ3JhbSgpLT5pc0xvYWRlZCgpKQorICAgICAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclBy
b2dyYW0+IHByb2dyYW0gPSBjdXN0b21PcGVyYXRpb24tPnByb2dyYW0oKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbS0+aXNMb2FkZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCogZ2xvYmFs
Q29udGV4dCA9IHJlbmRlcmVyKCktPnZpZXcoKS0+Y3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCgp
OworICAgICAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHZhbGlk
YXRlZFByb2dyYW0gPSBnbG9iYWxDb250ZXh0LT5nZXRWYWxpZGF0ZWRQcm9ncmFtKHByb2dyYW0t
PnByb2dyYW1JbmZvKCkpOworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZWRQcm9ncmFtLT5pc0lu
aXRpYWxpemVkKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogVmFsaWRhdGUgdGhlIHNoYWRlcnMgYW5kIGNvbnZlcnQgdGhlIG9wZXJhdGlvbiB0byBh
IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA1MzMKKworICAgICAgICAgICAgUmVm
UHRyPFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gdmFsaWRhdGVkT3BlcmF0aW9uID0g
VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUodmFsaWRhdGVkUHJvZ3JhbS5y
ZWxlYXNlKCksIAorICAgICAgICAgICAgICAgIGN1c3RvbU9wZXJhdGlvbi0+cGFyYW1ldGVycygp
LCBjdXN0b21PcGVyYXRpb24tPm1lc2hSb3dzKCksIGN1c3RvbU9wZXJhdGlvbi0+bWVzaENvbHVt
bnMoKSwgY3VzdG9tT3BlcmF0aW9uLT5tZXNoVHlwZSgpKTsKKyAgICAgICAgICAgIG91dHB1dEZp
bHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZCh2YWxpZGF0ZWRPcGVyYXRpb24ucmVsZWFzZSgpKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIG91dHB1dEZpbHRlcnMu
b3BlcmF0aW9ucygpLmFwcGVuZChmaWx0ZXJPcGVyYXRpb24ucmVsZWFzZSgpKTsKICAgICB9CkBA
IC01MTA3LDcgKzUxMzgsNyBAQCBGaWx0ZXJPcGVyYXRpb25zIFJlbmRlckxheWVyOjpjb21wdXRl
RmlsdGVyT3BlcmF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiAjZW5kaWYKIH0KIAot
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlT3JSZW1vdmVGaWx0ZXJFZmZlY3QoKQordm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlT3JSZW1vdmVGaWx0ZXJDbGllbnRzKCkKIHsKICAgICBpZiAoIWhhc0Zp
bHRlcigpKSB7CiAgICAgICAgIHJlbW92ZUZpbHRlckluZm9JZk5lZWRlZCgpOwpAQCAtNTEyNyw3
ICs1MTU4LDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU9yUmVtb3ZlRmlsdGVyRWZmZWN0
KCkKICAgICBlbHNlIGlmIChoYXNGaWx0ZXJJbmZvKCkpCiAgICAgICAgIGZpbHRlckluZm8oKS0+
cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpOwogI2VuZGlmCit9CiAKK3ZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZU9yUmVtb3ZlRmlsdGVyRWZmZWN0UmVuZGVyZXIoKQoreworICAgIC8vIEZp
bHRlckVmZmVjdFJlbmRlcmVyIGlzIG9ubHkgdXNlZCB0byByZW5kZXIgdGhlIGZpbHRlcnMgaW4g
c29mdHdhcmUgbW9kZSwKKyAgICAvLyBzbyB3ZSBhbHdheXMgbmVlZCB0byBydW4gdXBkYXRlT3JS
ZW1vdmVGaWx0ZXJFZmZlY3RSZW5kZXJlciBhZnRlciB0aGUgY29tcG9zaXRlZAorICAgIC8vIG1v
ZGUgbWlnaHQgaGF2ZSBjaGFuZ2VkIGZvciB0aGlzIGxheWVyLgogICAgIGlmICghcGFpbnRzV2l0
aEZpbHRlcnMoKSkgewogICAgICAgICAvLyBEb24ndCBkZWxldGUgdGhlIHdob2xlIGZpbHRlciBp
bmZvIGhlcmUsIGJlY2F1c2Ugd2UgbWlnaHQgdXNlIGl0CiAgICAgICAgIC8vIGZvciBsb2FkaW5n
IENTUyBzaGFkZXIgZmlsZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmlu
ZGV4IGZlZDI0MTguLjdmZTQ0OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5oCkBAIC02NTMsNiArNjUzLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zRGlydHlP
dmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlT
Y3JvbGxiYXJzOyB9CiAgICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMo
Ym9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMg
PSBkaXJ0eVNjcm9sbGJhcnM7IH0KIAorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBib29s
IGlzQ1NTQ3VzdG9tRmlsdGVyRW5hYmxlZCgpIGNvbnN0OworI2VuZGlmCisKICNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCiAgICAgRmlsdGVyT3BlcmF0aW9ucyBjb21wdXRlRmlsdGVyT3BlcmF0aW9u
cyhjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIGJvb2wgcGFpbnRzV2l0aEZpbHRlcnMoKSBjb25z
dDsKQEAgLTg0Myw3ICs4NDcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0UGFpbnRpbmdJbnNp
ZGVSZWZsZWN0aW9uKGJvb2wgYikgeyBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbiA9IGI7IH0K
IAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHVwZGF0ZU9yUmVtb3ZlRmlsdGVy
RWZmZWN0KCk7CisgICAgdm9pZCB1cGRhdGVPclJlbW92ZUZpbHRlckNsaWVudHMoKTsKKyAgICB2
b2lkIHVwZGF0ZU9yUmVtb3ZlRmlsdGVyRWZmZWN0UmVuZGVyZXIoKTsKICNlbmRpZgogCiAgICAg
dm9pZCBwYXJlbnRDbGlwUmVjdHMoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVy
UmVnaW9uKiwgQ2xpcFJlY3RzVHlwZSwgQ2xpcFJlY3RzJiwgT3ZlcmxheVNjcm9sbGJhclNpemVS
ZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJm
bG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApIGNvbnN0Owo=
</data>
<flag name="review"
          id="186079"
          type_id="1"
          status="+"
          setter="dino"
    />
    <flag name="commit-queue"
          id="186080"
          type_id="3"
          status="-"
          setter="gtk-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>