<?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>92045</bug_id>
          
          <creation_ts>2012-07-23 16:51:21 -0700</creation_ts>
          <short_desc>[GTK] Update GraphicsLayerClutter</short_desc>
          <delta_ts>2012-12-23 17:19:29 -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>WebKitGTK</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>
          
          <blocked>73767</blocked>
    
    <blocked>105699</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joone Hur">joone</reporter>
          <assigned_to name="Joone Hur">joone</assigned_to>
          <cc>alex</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rodrigo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>676176</commentid>
    <comment_count>0</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-07-23 16:51:21 -0700</bug_when>
    <thetext>GraphicsLayerClutter will be updated for supporting CSS 3D transforms along with GraphicsLayerActor:
https://bugs.webkit.org/show_bug.cgi?id=91940</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697955</commentid>
    <comment_count>1</comment_count>
      <attachid>159019</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-08-17 00:07:29 -0700</bug_when>
    <thetext>Created attachment 159019
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788377</commentid>
    <comment_count>2</comment_count>
      <attachid>178790</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-12-11 06:07:20 -0800</bug_when>
    <thetext>Created attachment 178790
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788398</commentid>
    <comment_count>3</comment_count>
      <attachid>178790</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-12-11 06:39:26 -0800</bug_when>
    <thetext>Comment on attachment 178790
Patch

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

LGTM

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:3
&gt; + * Copyright (C) 2011,2012 Collabora Ltd.

Missing space after comma

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:431
&gt; +        // FIXME: It needs to paint content inside a layer.

Not sure what this FIXME is saying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788457</commentid>
    <comment_count>4</comment_count>
      <attachid>178790</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-12-11 08:08:48 -0800</bug_when>
    <thetext>Comment on attachment 178790
Patch

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

Thanks for the review!

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:3
&gt;&gt; + * Copyright (C) 2011,2012 Collabora Ltd.
&gt; 
&gt; Missing space after comma

There was the missing space in GraphicsLayerActor.h/cpp
I&apos;ve fixed them.

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:431
&gt;&gt; +        // FIXME: It needs to paint content inside a layer.
&gt; 
&gt; Not sure what this FIXME is saying.

Yes, I don&apos;t remember why I added this FIXME so I will remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788473</commentid>
    <comment_count>5</comment_count>
      <attachid>178812</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-12-11 08:35:20 -0800</bug_when>
    <thetext>Created attachment 178812
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788506</commentid>
    <comment_count>6</comment_count>
      <attachid>178812</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-11 09:35:15 -0800</bug_when>
    <thetext>Comment on attachment 178812
Patch

Clearing flags on attachment: 178812

Committed r137326: &lt;http://trac.webkit.org/changeset/137326&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159019</attachid>
            <date>2012-08-17 00:07:29 -0700</date>
            <delta_ts>2012-12-11 06:07:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92045-20120817160649.patch</filename>
            <type>text/plain</type>
            <size>23264</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2U4ZWFjNTRiZjgyYzE2
MjNkOWRkYjg5MTgxOWQ0MzFhNzg5YzNjNi4uZWExMGE5ZDI3N2E2ZGYxYjI0NTkyYjk1MTFhMGUx
MzFjNTNjOGI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA4LTE2ICBKb29u
ZSBIdXIgIDxqb29uZS5odXJAaW50ZWwuY29tPiwgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3Vz
dGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10gVXBkYXRlIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBtb3JlIG1ldGhvZHMgdG8gR3JhcGhpY3NMYXllckNsdXR0ZXIgaW4gb3JkZXIg
dG8gcnVuIENTUyAzRCB0cmFuc2Zvcm1zIAorICAgICAgICBieSB1c2luZyBHcmFwaGljc0xheWVy
QWN0b3IuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHdpbGwgYmUgY292ZXJlZCBieSBw
aXhlbCB0ZXN0cyBmb3IgUXQgYW5kIEdUSysgYWNjZWxlcmF0ZWQKKyAgICAgICAgY29tcG9zaXRp
bmcgYW5kIDNEIHRyYW5zZm9ybXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmlkbGVEZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjp+R3JhcGhpY3NMYXllckNsdXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsdXR0ZXI6OnBsYXRmb3JtTGF5ZXIpOiBSZXR1cm5zIHRoZSBwbGF0Zm9ybSBs
YXllcihDbHV0dGVyQWNvdHIpLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OnNldE5lZWRzRGlzcGxheSk6IFVwZGF0ZSB0aGUgZGlzcGxheS4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOiBVcGRhdGUg
cGFydCBvZiB0aGUgRGlzcGxheS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1
dHRlcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnNl
dFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0
RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpz
ZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldENo
aWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjphZGRDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6YWRkQ2hpbGRBdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjphZGRDaGlsZEJl
bG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjphZGRDaGlsZEFi
b3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZXBsYWNlQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnJlbW92ZUZyb21Q
YXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnBsYXRmb3Jt
Q2x1dHRlckxheWVyUGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6cGxhdGZvcm1DbHV0dGVyTGF5ZXJBbmltYXRpb25TdGFydGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZXBhaW50TGF5ZXJEaXJ0eVJlY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpjb21wdXRlUG9zaXRp
b25SZWxhdGl2ZVRvQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRl
cjo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOiBTeW5jaHJvbml6ZSB0aGUgY29ycmVzcG9uZGluZyBB
Y3RvcnMgd2l0aCB0aGUgY3VycmVudCAKKyAgICAgICAgY29tcG9zaXRpbmcgc3RhdGVzIG9mIHRo
aXMgR3JhcGhpY3NMYXllciBhbmQgaXRzIGNoaWxkIGxheWVycy4gCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KTogQ29tbWl0IGJhdGNoZWQgY2hhbmdlcyBub24tcmVjdXJzaXZlbHkuIAor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbW1pdExheWVyQ2hhbmdl
c0FmdGVyU3VibGF5ZXJzKTogUmVzZXQgbGF5ZXIgY2hhbmdlcyBhZnRlciB3ZSByZWN1cnNlIG9u
IGNoaWxkcmVuLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6Om5vdGVT
dWJsYXllcnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVy
Ojpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsdXR0ZXI6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyk6IENvbW1pdCBs
YXllciBjaGFuZ2VzIGJlZm9yZSB3ZSByZWN1cnNlIG9uIGNoaWxkcmVuLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZUdlb21ldHJ5KTogVXBkYXRlZCB0aGUg
cG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIEFjdG9yLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNsdXR0ZXI6OnVwZGF0ZVN1YmxheWVyTGlzdCk6IFVwZGF0ZWQgdGhlIGxpc3Qgb2Yg
Y2hpbGQgQWN0b3JzLiAKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1
cGRhdGVMYXllck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVy
Ojp1cGRhdGVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OnVwZGF0ZUxheWVyRHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDbHV0dGVyOjpsYXllckZvclN1cGVybGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnByaW1hcnlMYXllcik6
CisgICAgICAgIChHcmFwaGljc0xheWVyQ2x1dHRlcik6CisKIDIwMTItMDctMjMgIEpvb25lIEh1
ciAgPGpvb25lLmh1ckBpbnRlbC5jb20+LCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZv
Lm5vcm9uaGFAY29sbGFib3JhLmNvbT4KIAogICAgICAgICBbR1RLXSBBZGQgR3JhcGhpY3NMYXll
ckFjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwCmluZGV4IGVkYTE0ZDAzN2Qx
NDg3ZGZmODY2NzI2ODcxMTE0ZWI0MDYxNDY0YmYuLjUwODBmYzcxMDM2MDkzZWY3ZjVmMTc4YWEw
OTllZjdkODYyYjEwMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ29sbGFib3JhIEx0ZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSwyMDEyIENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEyICsyOCwyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllckNsdXR0ZXIuaCIKIAorI2luY2x1ZGUgIkdSZWZQdHJDbHV0dGVyLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllckFjdG9yLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIFRoaXMgaXMgdGhlIGhvb2sgZm9yIFdlYkNv
cmUgY29tcG9zaXRvciB0byBrbm93IHRoYXQgdGhlIHdlYktpdCBjbHV0dGVyIHBvcnQgaW1wbGVt
ZW50cworLy8gY29tcG9zaXRpbmcgd2l0aCBHcmFwaGljc0xheWVyQ2x1dHRlci4KIFBhc3NPd25Q
dHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGll
bnQqIGNsaWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdyYXBoaWNzTGF5ZXJDbHV0
dGVyKGNsaWVudCkpOwpAQCAtNDAsMjkgKzUwLDM5NyBAQCBQYXNzT3duUHRyPEdyYXBoaWNzTGF5
ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAK
IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpHcmFwaGljc0xheWVyQ2x1dHRlcihHcmFwaGljc0xheWVy
Q2xpZW50KiBjbGllbnQpCiAgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKKyAgICAsIG1fdW5j
b21taXR0ZWRDaGFuZ2VzKDApCiB7Ci0gICAgLy8gQ2x1dHRlclJlY3RhbmdsZSB3aWxsIGJlIHVz
ZWQgdG8gc2hvdyB0aGUgZGVidWcgYm9yZGVyLgotICAgIG1fbGF5ZXIgPSBhZG9wdEdSZWYoY2x1
dHRlcl9yZWN0YW5nbGVfbmV3KCkpOworICAgIG1fbGF5ZXIgPSBhZG9wdEdSZWYoZ3JhcGhpY3NM
YXllckFjdG9yTmV3V2l0aENsaWVudChMYXllclR5cGVXZWJMYXllciwgdGhpcykpOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gaWRsZURlc3Ryb3koZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBHUmVmUHRy
PENsdXR0ZXJBY3Rvcj4gYWN0b3IgPSBhZG9wdEdSZWYoQ0xVVFRFUl9BQ1RPUihkYXRhKSk7Cisg
ICAgQ2x1dHRlckFjdG9yKiBwYXJlbnQgPSBjbHV0dGVyX2FjdG9yX2dldF9wYXJlbnQoYWN0b3Iu
Z2V0KCkpOworCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSBjaGlsZCBhY3RvcnMgbWFudWFsbHkg
YmVjYXVzZSB0aGUgY29udGFpbmVyIG9mIENsdXR0ZXIgCisgICAgLy8gc2VlbXMgdG8gaGF2ZSBh
IGJ1ZyB0byByZW1vdmUgaXRzIGNoaWxkIGFjdG9ycyB3aGVuIGl0IGlzIHJlbW92ZWQuIAorICAg
IGlmIChHUkFQSElDU19MQVlFUl9JU19BQ1RPUihHUkFQSElDU19MQVlFUl9BQ1RPUihhY3Rvci5n
ZXQoKSkpKQorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JSZW1vdmVBbGwoR1JBUEhJQ1NfTEFZ
RVJfQUNUT1IoYWN0b3IuZ2V0KCkpKTsKKworICAgIGlmIChwYXJlbnQpCisgICAgICAgIGNsdXR0
ZXJfY29udGFpbmVyX3JlbW92ZV9hY3RvcihDTFVUVEVSX0NPTlRBSU5FUihwYXJlbnQpLCBhY3Rv
ci5nZXQoKSk7CisKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFzc2VydCB0aGF0IHRoZSBhY3Rv
cidzIHJlZiBjb3VudCBpcyAxIGhlcmUsIGJ1dCBzb21lCisgICAgLy8gb2YgdGhlbSBhcmUgZ2V0
dGluZyBoZXJlIHdpdGggMiEKKyAgICAvLyBBU1NFUlQoKEdfT0JKRUNUKGFjdG9yLmdldCgpKSkt
PnJlZl9jb3VudCA9PSAxKTsKKworICAgIHJldHVybiBGQUxTRTsKIH0KIAogR3JhcGhpY3NMYXll
ckNsdXR0ZXI6On5HcmFwaGljc0xheWVyQ2x1dHRlcigpCiB7Ci0gICAgd2lsbEJlRGVzdHJveWVk
KCk7CisgICAgLy8gVGhlIHJvb3QgbGF5ZXIgaXMgcmVtb3ZlZCBpbiB3ZWJraXRfaXdlYl92aWV3
X2RldGFjaF9yb290X2dyYXBoaWNzX2xheWVyLgorICAgIGlmIChncmFwaGljc0xheWVyQWN0b3JH
ZXRMYXllclR5cGUobV9sYXllci5nZXQoKSkgPT0gR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVy
VHlwZVJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgZGVzdHJveSB0aGUg
YWN0b3JzIG9uIGFuIGlkbGUgc28gdGhhdCB0aGUgbWFpbiBsb29wIGNhbiBydW4gZW5vdWdoIHRv
CisgICAgLy8gcmVwYWludCB0aGUgYmFja2dyb3VuZCB0aGF0IHdpbGwgcmVwbGFjZSB0aGUgYWN0
b3IuCisgICAgaWYgKG1fbGF5ZXIpIHsKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0Q2xp
ZW50KG1fbGF5ZXIuZ2V0KCksIDApOworICAgICAgICBnX2lkbGVfYWRkKGlkbGVEZXN0cm95LCBt
X2xheWVyLmxlYWtSZWYoKSk7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVy
OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBTdHJpbmcgbG9uZ05hbWUgPSBT
dHJpbmc6OmZvcm1hdCgiQWN0b3IoJXApIEdyYXBoaWNzTGF5ZXIoJXApICIsIG1fbGF5ZXIuZ2V0
KCksIHRoaXMpICsgbmFtZTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXROYW1lKGxvbmdOYW1lKTsK
KyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoTmFtZUNoYW5nZWQpOwogfQogCiBDbHV0dGVy
QWN0b3IqIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9sYXllci5nZXQoKTsKKyAgICByZXR1cm4gQ0xVVFRFUl9BQ1RPUihtX2xheWVy
LmdldCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmVlZHNEaXNwbGF5
KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEZsb2F0UmVjdCBodWdlUmVjdChGbG9h
dFBvaW50KDAsIDApLCBzaXplKCkpOworICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChodWdlUmVj
dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldE5lZWRzRGlzcGxheUluUmVj
dChjb25zdCBGbG9hdFJlY3QmIHIpCit7CisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRmxvYXRSZWN0IHJlY3Qocik7CisgICAgRmxvYXRSZWN0IGxheWVy
Qm91bmRzKEZsb2F0UG9pbnQoKSwgbV9zaXplKTsKKyAgICByZWN0LmludGVyc2VjdChsYXllckJv
dW5kcyk7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBj
b25zdCBzaXplX3QgbWF4RGlydHlSZWN0cyA9IDMyOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2RpcnR5UmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZGlydHlSZWN0
c1tpXS5jb250YWlucyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobV9kaXJ0eVJlY3RzLnNpemUoKSA8IG1heERpcnR5UmVjdHMpCisgICAgICAgIG1fZGlydHlS
ZWN0cy5hcHBlbmQocmVjdCk7CisgICAgZWxzZQorICAgICAgICBtX2RpcnR5UmVjdHNbMF0udW5p
dGUocmVjdCk7CisKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoRGlydHlSZWN0c0NoYW5n
ZWQpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmIHBvaW50KQoreworICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBvaW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChw
b2ludCk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKEdlb21ldHJ5Q2hhbmdlZCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KQoreworICAgIGlmIChwb2ludCA9PSBtX3Bvc2l0aW9uKQorICAgICAgICByZXR1
cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwb2ludCk7CisgICAgbm90ZUxh
eWVyUHJvcGVydHlDaGFuZ2VkKEdlb21ldHJ5Q2hhbmdlZCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NM
YXllckNsdXR0ZXI6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGlmIChz
aXplID09IG1fc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0
U2l6ZShzaXplKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoR2VvbWV0cnlDaGFuZ2Vk
KTsKK30KK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sKKyAgICBpZiAodCA9PSBtX3RyYW5zZm9ybSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOworICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChUcmFuc2Zvcm1DaGFuZ2VkKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyQ2x1dHRlcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KQorewor
ICAgIGlmIChkcmF3c0NvbnRlbnQgPT0gbV9kcmF3c0NvbnRlbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChkcmF3c0NvbnRlbnQpOworICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChEcmF3c0NvbnRlbnRDaGFuZ2VkKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0
UmVjdCYpCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXRQYXJlbnQoR3JhcGhpY3NMYXll
ciogY2hpbGRMYXllcikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOworCisgICAgR3JhcGhpY3NM
YXllcjo6c2V0UGFyZW50KGNoaWxkTGF5ZXIpOworfQorCitib29sIEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikK
K3sKKyAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVu
KGNoaWxkcmVuKTsKKyAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQorICAgICAgICBub3RlU3VibGF5
ZXJzQ2hhbmdlZCgpOworCisgICAgcmV0dXJuIGNoaWxkcmVuQ2hhbmdlZDsKK30KKwordm9pZCBH
cmFwaGljc0xheWVyQ2x1dHRlcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXllciogY2hpbGRMYXllcikK
K3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChjaGlsZExheWVyKTsKKyAgICBub3RlU3Vi
bGF5ZXJzQ2hhbmdlZCgpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjphZGRDaGls
ZEF0SW5kZXgoR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwgaW50IGluZGV4KQoreworICAgIEdy
YXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChjaGlsZExheWVyLCBpbmRleCk7CisgICAgbm90
ZVN1YmxheWVyc0NoYW5nZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6YWRk
Q2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0xheWVyKiBzaWJs
aW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3coY2hpbGRMYXllciwgc2li
bGluZyk7CisgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBjaGlsZExheWVyLCBHcmFw
aGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUo
Y2hpbGRMYXllciwgc2libGluZyk7CisgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKK30KKwor
Ym9vbCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9s
ZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKK3sKKyAgICBpZiAoR3JhcGhpY3NMYXll
cjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCkpIHsKKyAgICAgICAgbm90ZVN1Ymxh
eWVyc0NoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6cmVtb3ZlRnJvbVBhcmVudCgp
Cit7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVy
Q2x1dHRlcio+KG1fcGFyZW50KS0+bm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKKyAgICBHcmFwaGlj
c0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0
ZXI6OnBsYXRmb3JtQ2x1dHRlckxheWVyUGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIGNsaXApCit7CisgICAgcGFpbnRHcmFwaGljc0xheWVyQ29u
dGVudHMoY29udGV4dCwgY2xpcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnBs
YXRmb3JtQ2x1dHRlckxheWVyQW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKQorewor
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWQodGhpcywgc3RhcnRUaW1lKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6cmVw
YWludExheWVyRGlydHlSZWN0cygpCit7CisgICAgaWYgKCFtX2RpcnR5UmVjdHMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGlydHlSZWN0
cy5zaXplKCk7ICsraSkKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9ySW52YWxpZGF0ZVJlY3Rh
bmdsZShtX2xheWVyLmdldCgpLCBtX2RpcnR5UmVjdHNbaV0pOworCisgICAgbV9kaXJ0eVJlY3Rz
LmNsZWFyKCk7Cit9CisKK0Zsb2F0UG9pbnQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbXB1dGVQ
b3NpdGlvblJlbGF0aXZlVG9CYXNlKGZsb2F0JiBwYWdlU2NhbGUpIGNvbnN0Cit7CisgICAgcGFn
ZVNjYWxlID0gMTsKKworICAgIEZsb2F0UG9pbnQgb2Zmc2V0OworICAgIGZvciAoY29uc3QgR3Jh
cGhpY3NMYXllciogY3VyckxheWVyID0gdGhpczsgY3VyckxheWVyOyBjdXJyTGF5ZXIgPSBjdXJy
TGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChjdXJyTGF5ZXItPmFwcGxpZXNQYWdlU2Nh
bGUoKSkgeworICAgICAgICAgICAgaWYgKGN1cnJMYXllci0+Y2xpZW50KCkpCisgICAgICAgICAg
ICAgICAgcGFnZVNjYWxlID0gY3VyckxheWVyLT5wYWdlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAg
ICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXQgKz0gY3Vyckxh
eWVyLT5wb3NpdGlvbigpOworICAgIH0KKworICAgIHJldHVybiBGbG9hdFBvaW50KCk7Cit9CisK
Ky8vIGNhbGxlZCBmcm9tIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnN5bmNDb21wb3NpdGluZ1N0
YXRlKGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCit7CisgICAgVHJhbnNmb3JtU3RhdGUgc3Rh
dGUoVHJhbnNmb3JtU3RhdGU6OlVuYXBwbHlJbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uLCBGbG9h
dFF1YWQoY2xpcFJlY3QpKTsKKyAgICByZWN1cnNpdmVDb21taXRDaGFuZ2VzKHN0YXRlKTsKK30K
Kwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhjb25z
dCBUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxv
YXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSwgYm9vbCBhZmZlY3RlZEJ5UGFnZVNjYWxl
KQoreworICAgIC8vIEZJWE1FOiBTYXZlIHRoZSBzdGF0ZSBiZWZvcmUgc2VuZGluZyBkb3duIHRv
IGtpZHMgYW5kIHJlc3RvcmUgaXQgYWZ0ZXIKKyAgICBUcmFuc2Zvcm1TdGF0ZSBsb2NhbFN0YXRl
ID0gc3RhdGU7CisKKyAgICBpZiAoYXBwbGllc1BhZ2VTY2FsZSgpKSB7CisgICAgICAgIHBhZ2VT
Y2FsZUZhY3RvciA9IHRoaXMtPnBhZ2VTY2FsZUZhY3RvcigpOworICAgICAgICBhZmZlY3RlZEJ5
UGFnZVNjYWxlID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBBY2N1bXVsYXRlIGFuIG9mZnNldCBm
cm9tIHRoZSBhbmNlc3RyYWwgcGl4ZWwtYWxpZ25lZCBsYXllci4KKyAgICBGbG9hdFBvaW50IGJh
c2VSZWxhdGl2ZVBvc2l0aW9uID0gcG9zaXRpb25SZWxhdGl2ZVRvQmFzZTsKKyAgICBpZiAoYWZm
ZWN0ZWRCeVBhZ2VTY2FsZSkKKyAgICAgICAgYmFzZVJlbGF0aXZlUG9zaXRpb24gKz0gbV9wb3Np
dGlvbjsKKworICAgIGNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyhwYWdlU2NhbGVG
YWN0b3IsIGJhc2VSZWxhdGl2ZVBvc2l0aW9uKTsKKworICAgIGNvbnN0IFZlY3RvcjxHcmFwaGlj
c0xheWVyKj4mIGNoaWxkTGF5ZXJzID0gY2hpbGRyZW4oKTsKKyAgICBzaXplX3QgbnVtQ2hpbGRy
ZW4gPSBjaGlsZExheWVycy5zaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bUNoaWxkcmVuOyArK2kpIHsKKyAgICAgICAgR3JhcGhpY3NMYXllckNsdXR0ZXIqIGN1ckNoaWxk
ID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNsdXR0ZXIqPihjaGlsZExheWVyc1tpXSk7Cisg
ICAgICAgIGN1ckNoaWxkLT5yZWN1cnNpdmVDb21taXRDaGFuZ2VzKGxvY2FsU3RhdGUsIHBhZ2VT
Y2FsZUZhY3RvciwgYmFzZVJlbGF0aXZlUG9zaXRpb24sIGFmZmVjdGVkQnlQYWdlU2NhbGUpOwor
ICAgIH0KKworICAgIGNvbW1pdExheWVyQ2hhbmdlc0FmdGVyU3VibGF5ZXJzKCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpCit7CisgICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yOworICAgIEZsb2F0UG9pbnQgb2Zm
c2V0ID0gY29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UocGFnZVNjYWxlRmFjdG9yKTsKKyAg
ICBjb21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMocGFnZVNjYWxlRmFjdG9yLCBvZmZz
ZXQpOworICAgIGNvbW1pdExheWVyQ2hhbmdlc0FmdGVyU3VibGF5ZXJzKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbW1pdExheWVyQ2hhbmdlc0FmdGVyU3VibGF5ZXJzKCkK
K3sKKyAgICBpZiAoIW1fdW5jb21taXR0ZWRDaGFuZ2VzKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3VuY29tbWl0dGVkQ2hhbmdlcyA9IE5vQ2hhbmdlOworfQordm9pZCBHcmFwaGljc0xheWVy
Q2x1dHRlcjo6bm90ZVN1YmxheWVyc0NoYW5nZWQoKQoreworICAgIG5vdGVMYXllclByb3BlcnR5
Q2hhbmdlZChDaGlsZHJlbkNoYW5nZWQpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVy
Ojpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoTGF5ZXJDaGFuZ2VGbGFncyBmbGFncykKK3sKKyAg
ICBpZiAoIW1fdW5jb21taXR0ZWRDaGFuZ2VzICYmIG1fY2xpZW50KQorICAgICAgICBtX2NsaWVu
dC0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMpOyAvLyBjYWxsIFJlbmRlckxheWVyQmFja2luZzo6
bm90aWZ5U3luY1JlcXVpcmVkCisKKyAgICBtX3VuY29tbWl0dGVkQ2hhbmdlcyB8PSBmbGFnczsK
K30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6Y29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3Jl
U3VibGF5ZXJzKGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b25SZWxhdGl2ZVRvQmFzZSkKK3sKKyAgICBpZiAoIW1fdW5jb21taXR0ZWRDaGFuZ2VzKQorICAg
ICAgICAgcmV0dXJuOworCisgICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIE5hbWVDaGFu
Z2VkKQorICAgICAgICAgdXBkYXRlTGF5ZXJOYW1lcygpOworCisgICAgIGlmIChtX3VuY29tbWl0
dGVkQ2hhbmdlcyAmIENoaWxkcmVuQ2hhbmdlZCkKKyAgICAgICAgIHVwZGF0ZVN1YmxheWVyTGlz
dCgpOworCisgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgR2VvbWV0cnlDaGFuZ2VkKQor
ICAgICAgICAgICB1cGRhdGVHZW9tZXRyeShwYWdlU2NhbGVGYWN0b3IsIHBvc2l0aW9uUmVsYXRp
dmVUb0Jhc2UpOworCisgICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIFRyYW5zZm9ybUNo
YW5nZWQpCisgICAgICAgICB1cGRhdGVUcmFuc2Zvcm0oKTsKKworICAgICBpZiAobV91bmNvbW1p
dHRlZENoYW5nZXMgJiBEcmF3c0NvbnRlbnRDaGFuZ2VkKQorICAgICAgICAgdXBkYXRlTGF5ZXJE
cmF3c0NvbnRlbnQocGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKKwor
ICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBEaXJ0eVJlY3RzQ2hhbmdlZCkKKyAgICAg
ICAgIHJlcGFpbnRMYXllckRpcnR5UmVjdHMoKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1
dHRlcjo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQoreworICAgIEZsb2F0UG9pbnQgc2NhbGVkUG9z
aXRpb247CisgICAgRmxvYXRQb2ludDNEIHNjYWxlZEFuY2hvclBvaW50OworICAgIEZsb2F0U2l6
ZSBzY2FsZWRTaXplOworCisgICAgLy8gRklYTUU6IE5lZWQgdG8gc3VwcG9ydCBzY2FsaW5nCisg
ICAgc2NhbGVkUG9zaXRpb24gPSBtX3Bvc2l0aW9uOworICAgIHNjYWxlZEFuY2hvclBvaW50ID0g
bV9hbmNob3JQb2ludDsKKyAgICBzY2FsZWRTaXplID0gbV9zaXplOworCisgICAgRmxvYXRSZWN0
IGFkanVzdGVkQm91bmRzKG1fYm91bmRzT3JpZ2luICwgc2NhbGVkU2l6ZSk7CisKKyAgICAvLyBV
cGRhdGUgcG9zaXRpb24uCisgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvc2l0aW9uKHNjYWxlZFBv
c2l0aW9uLngoKSArIHNjYWxlZEFuY2hvclBvaW50LngoKSAqIHNjYWxlZFNpemUud2lkdGgoKSwg
c2NhbGVkUG9zaXRpb24ueSgpICsgc2NhbGVkQW5jaG9yUG9pbnQueSgpICogc2NhbGVkU2l6ZS5o
ZWlnaHQoKSk7CisKKyAgICAvLyBzZXRCb3VuZHMKKyAgICBjbHV0dGVyX2FjdG9yX3NldF9zaXpl
KENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSksIGFkanVzdGVkQm91bmRzLndpZHRoKCksIGFk
anVzdGVkQm91bmRzLmhlaWdodCgpKTsKKworICAgIC8vIHNldFBvc2l0aW9uCisgICAgY2x1dHRl
cl9hY3Rvcl9zZXRfcG9zaXRpb24oQ0xVVFRFUl9BQ1RPUihtX2xheWVyLmdldCgpKSwgYWRqdXN0
ZWRQb3NpdGlvbi54KCksIGFkanVzdGVkUG9zaXRpb24ueSgpKTsKKworICAgIC8vIHNldEFuY2hv
clBvaW50CisgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0QW5jaG9yUG9pbnQobV9sYXllci5nZXQo
KSwgc2NhbGVkQW5jaG9yUG9pbnQueCgpLCBzY2FsZWRBbmNob3JQb2ludC55KCksIHNjYWxlZEFu
Y2hvclBvaW50LnooKSk7Cit9CisKKy8vIEVhY2ggR3JhcGhpY3NMYXllciBoYXMgdGhlIGNvcnJl
c3BvbmRpbmcgbGF5ZXIgaW4gdGhlIHBsYXRmb3JtIHBvcnQuCisvLyBTbyB3aGVuZXZlciB0aGUg
bGlzdCBvZiBjaGlsZCBsYXllciBjaGFuZ2VzLCB0aGUgbGlzdCBvZiBHcmFwaGljc0xheWVyQWN0
b3Igc2hvdWxkIGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjp1cGRhdGVTdWJsYXllckxpc3QoKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3Rvckxpc3Qg
bmV3U3VibGF5ZXJzOworICAgIGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGF5
ZXJzID0gY2hpbGRyZW4oKTsKKworICAgIGlmIChjaGlsZExheWVycy5zaXplKCkgPiAwKSB7Cisg
ICAgICAgIHNpemVfdCBudW1DaGlsZHJlbiA9IGNoaWxkTGF5ZXJzLnNpemUoKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgKytpKSB7CisgICAgICAgICAgICBH
cmFwaGljc0xheWVyQ2x1dHRlciogY3VyQ2hpbGQgPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVy
Q2x1dHRlcio+KGNoaWxkTGF5ZXJzW2ldKTsKKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJBY3Rv
ciogY2hpbGRMYXllciA9IGN1ckNoaWxkLT5sYXllckZvclN1cGVybGF5ZXIoKTsKKyAgICAgICAg
ICAgIGdfYXNzZXJ0KEdSQVBISUNTX0xBWUVSX0lTX0FDVE9SKGNoaWxkTGF5ZXIpKTsKKyAgICAg
ICAgICAgIG5ld1N1YmxheWVycy5hcHBlbmQoY2hpbGRMYXllcik7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld1N1YmxheWVycy5zaXplKCk7IGkrKykgewor
ICAgICAgICAgICAgQ2x1dHRlckFjdG9yKiBsYXllckFjdG9yID0gQ0xVVFRFUl9BQ1RPUihuZXdT
dWJsYXllcnNbaV0uZ2V0KCkpOworICAgICAgICAgICAgQ2x1dHRlckFjdG9yKiBwYXJlbnRBY3Rv
ciA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3BhcmVudChsYXllckFjdG9yKTsKKyAgICAgICAgICAgIGlm
IChwYXJlbnRBY3RvcikKKyAgICAgICAgICAgICAgICBjbHV0dGVyX2NvbnRhaW5lcl9yZW1vdmVf
YWN0b3IoQ0xVVFRFUl9DT05UQUlORVIocGFyZW50QWN0b3IpLCBsYXllckFjdG9yKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyhtX2xheWVy
LmdldCgpLCBuZXdTdWJsYXllcnMpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1
cGRhdGVMYXllck5hbWVzKCkKK3sKKyAgICBjbHV0dGVyX2FjdG9yX3NldF9uYW1lKENMVVRURVJf
QUNUT1IobV9sYXllci5nZXQoKSksIG5hbWUoKS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBH
cmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlVHJhbnNmb3JtKCkKK3sKKyAgICBDb2dsTWF0cml4
IG1hdHJpeCA9IG1fdHJhbnNmb3JtOworICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zZm9y
bShwcmltYXJ5TGF5ZXIoKSwgJm1hdHJpeCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0
ZXI6OnVwZGF0ZUxheWVyRHJhd3NDb250ZW50KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3Qg
RmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSkKK3sKKyAgICBpZiAobV9kcmF3c0Nv
bnRlbnQpIHsKKyAgICAgICAgLy8gRklYTUU6IEl0IG5lZWRzIHRvIHBhaW50IGNvbnRlbnQgaW5z
aWRlIGEgbGF5ZXIuCisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldERyYXdzQ29udGVudCht
X2xheWVyLmdldCgpLCBUUlVFKTsKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0RHJhd3NDb250ZW50KG1fbGF5ZXIu
Z2V0KCksIEZBTFNFKTsKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0U3VyZmFjZShtX2xh
eWVyLmdldCgpLCAwKTsKKyAgICB9CisKKyAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKK30K
KworR3JhcGhpY3NMYXllckFjdG9yKiBHcmFwaGljc0xheWVyQ2x1dHRlcjo6bGF5ZXJGb3JTdXBl
cmxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5nZXQoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oCmluZGV4IDQyZjZi
NzZmOWM3ZDI1NGYxMGY3MGU2MjkyMjhjM2VkM2RiMmFkNWYuLjc4NmZhYTg3ZTM4Y2VjYTQzYzZl
YTQ2MzA3NjY0YzAzY2Y0NzAzN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmgKQEAg
LTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBDb2xsYWJvcmEgTHRkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLDIwMTIgQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMjIgKzMyLDEwOSBAQAogCiAjaW5jbHVkZSAiR1Jl
ZlB0ckNsdXR0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllckNsaWVudC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VT
b3VyY2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudC5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKLSNpbmNsdWRlIDxjbHV0dGVyL2NsdXR0ZXIuaD4KK3R5
cGVkZWYgc3RydWN0IF9HcmFwaGljc0xheWVyQWN0b3IgR3JhcGhpY3NMYXllckFjdG9yOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdyYXBoaWNzTGF5ZXJDbHV0dGVyIDogcHVibGlj
IEdyYXBoaWNzTGF5ZXIgeworY2xhc3MgVHJhbnNmb3JtU3RhdGU7CisKK3R5cGVkZWYgVmVjdG9y
PEdSZWZQdHI8R3JhcGhpY3NMYXllckFjdG9yPiA+IEdyYXBoaWNzTGF5ZXJBY3Rvckxpc3Q7CisK
K2NsYXNzIEdyYXBoaWNzTGF5ZXJDbHV0dGVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIsIHB1Ymxp
YyBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCB7CiBwdWJsaWM6CisgICAgZW51bSBMYXllclR5
cGUgeyBMYXllclR5cGVMYXllciwgTGF5ZXJUeXBlV2ViTGF5ZXIsIExheWVyVHlwZVZpZGVvTGF5
ZXIsIExheWVyVHlwZVRyYW5zZm9ybUxheWVyLCBMYXllclR5cGVSb290TGF5ZXIsIExheWVyVHlw
ZUN1c3RvbSB9OworCiAgICAgR3JhcGhpY3NMYXllckNsdXR0ZXIoR3JhcGhpY3NMYXllckNsaWVu
dCopOwogICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJDbHV0dGVyKCk7CiAKKyAgICAvLyAgUmVp
bXBsZW1lbnRlZCBmcm9tIEdyYXBoaWNzTGF5ZXIKICAgICB2aXJ0dWFsIENsdXR0ZXJBY3Rvciog
cGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChHcmFwaGlj
c0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVy
KiwgaW50IGluZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xh
eWVyKiwgR3JhcGhpY3NMYXllciogc2libGluZyk7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxk
QmVsb3coR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGls
ZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpOworICAg
IHZpcnR1YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7
CisgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChHcmFwaGljc0xheWVyKik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNo
b3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYpOworCisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogCisgICAgdmlydHVhbCB2
b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwg
dm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIHZvaWQg
cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhjb25zdCBUcmFuc2Zvcm1TdGF0ZSYsIGZsb2F0IHBhZ2VT
Y2FsZUZhY3RvciA9IDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2Ug
PSBGbG9hdFBvaW50KCksIGJvb2wgYWZmZWN0ZWRCeVBhZ2VTY2FsZSA9IGZhbHNlKTsKIHByaXZh
dGU6Ci0gICAgR1JlZlB0cjxDbHV0dGVyQWN0b3I+IG1fbGF5ZXI7CisKKyAgICBGbG9hdFBvaW50
IGNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKGZsb2F0JiBwYWdlU2NhbGUpIGNvbnN0Owor
ICAgIHZvaWQgY29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKGZsb2F0IHBhZ2VTY2Fs
ZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CisgICAg
dm9pZCBjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycygpOworCisgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtQ2x1dHRlckxheWVyQW5pbWF0aW9uU3RhcnRlZChkb3VibGUgYmVnaW5UaW1l
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DbHV0dGVyTGF5ZXJQYWludENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOworCisgICAgR3JhcGhpY3NMYXll
ckFjdG9yKiBwcmltYXJ5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyLmdldCgpOyB9Cisg
ICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllckZvclN1cGVybGF5ZXIoKSBjb25zdDsKKyAgICBl
bnVtIExheWVyQ2hhbmdlIHsKKyAgICAgICAgTm9DaGFuZ2UgPSAwLAorICAgICAgICBOYW1lQ2hh
bmdlZCA9IDEgPDwgMSwKKyAgICAgICAgQ2hpbGRyZW5DaGFuZ2VkID0gMSA8PCAyLCAvLyBhbHNv
IHVzZWQgZm9yIGNvbnRlbnQgbGF5ZXIsIGFuZCBwcmVzZXJ2ZXMtM2QsIGFuZCBzaXplIGlmIHRp
bGluZyBjaGFuZ2VzPworICAgICAgICBHZW9tZXRyeUNoYW5nZWQgPSAxIDw8IDMsCisgICAgICAg
IFRyYW5zZm9ybUNoYW5nZWQgPSAxIDw8IDQsCisgICAgICAgIENoaWxkcmVuVHJhbnNmb3JtQ2hh
bmdlZCA9IDEgPDwgNSwKKyAgICAgICAgUHJlc2VydmVzM0RDaGFuZ2VkID0gMSA8PCA2LAorICAg
ICAgICBNYXNrc1RvQm91bmRzQ2hhbmdlZCA9IDEgPDwgNywKKyAgICAgICAgRHJhd3NDb250ZW50
Q2hhbmdlZCA9IDEgPDwgOCwgLy8gbmVlZCB0aGlzPworICAgICAgICBCYWNrZ3JvdW5kQ29sb3JD
aGFuZ2VkID0gMSA8PCA5LAorICAgICAgICBDb250ZW50c09wYXF1ZUNoYW5nZWQgPSAxIDw8IDEw
LAorICAgICAgICBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2VkID0gMSA8PCAxMSwKKyAgICAgICAg
T3BhY2l0eUNoYW5nZWQgPSAxIDw8IDEyLAorICAgICAgICBBbmltYXRpb25DaGFuZ2VkID0gMSA8
PCAxMywKKyAgICAgICAgRGlydHlSZWN0c0NoYW5nZWQgPSAxIDw8IDE0LAorICAgICAgICBDb250
ZW50c0ltYWdlQ2hhbmdlZCA9IDEgPDwgMTUsCisgICAgICAgIENvbnRlbnRzTWVkaWFMYXllckNo
YW5nZWQgPSAxIDw8IDE2LAorICAgICAgICBDb250ZW50c0NhbnZhc0xheWVyQ2hhbmdlZCA9IDEg
PDwgMTcsCisgICAgICAgIENvbnRlbnRzUmVjdENoYW5nZWQgPSAxIDw8IDE4LAorICAgICAgICBN
YXNrTGF5ZXJDaGFuZ2VkID0gMSA8PCAxOSwKKyAgICAgICAgUmVwbGljYXRlZExheWVyQ2hhbmdl
ZCA9IDEgPDwgMjAsCisgICAgICAgIENvbnRlbnRzTmVlZHNEaXNwbGF5ID0gMSA8PCAyMSwKKyAg
ICAgICAgQWNjZWxlcmF0ZXNEcmF3aW5nQ2hhbmdlZCA9IDEgPDwgMjIsCisgICAgICAgIENvbnRl
bnRzU2NhbGVDaGFuZ2VkID0gMSA8PCAyMworICAgIH07CisKKyAgICB0eXBlZGVmIHVuc2lnbmVk
IExheWVyQ2hhbmdlRmxhZ3M7CisgICAgdm9pZCBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoTGF5
ZXJDaGFuZ2VGbGFncyk7CisgICAgdm9pZCBub3RlU3VibGF5ZXJzQ2hhbmdlZCgpOworCisgICAg
dm9pZCB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyTmFt
ZXMoKTsKKyAgICB2b2lkIHVwZGF0ZVN1YmxheWVyTGlzdCgpOworICAgIHZvaWQgdXBkYXRlR2Vv
bWV0cnkoZmxvYXQgcGl4ZWxBbGlnbm1lbnRTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b25SZWxhdGl2ZVRvQmFzZSk7CisgICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm0oKTsKKyAgICB2b2lk
IHVwZGF0ZUxheWVyRHJhd3NDb250ZW50KGZsb2F0IHBpeGVsQWxpZ25tZW50U2NhbGUsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOworICAgCisgICAgdm9pZCByZXBh
aW50TGF5ZXJEaXJ0eVJlY3RzKCk7CisKKyAgICBHUmVmUHRyPEdyYXBoaWNzTGF5ZXJBY3Rvcj4g
bV9sYXllcjsKKworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fZGlydHlSZWN0czsKKyAgICBMYXll
ckNoYW5nZUZsYWdzIG1fdW5jb21taXR0ZWRDaGFuZ2VzOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178790</attachid>
            <date>2012-12-11 06:07:20 -0800</date>
            <delta_ts>2012-12-11 08:08:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92045-20121211150427.patch</filename>
            <type>text/plain</type>
            <size>23213</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU2YmVlYjMzZWY5OWYy
MjYxODVjMGE1ZWI0YWNiNTJhMzc1ZTEwNC4uMDE3MTIzY2I2MDlhYmE5YWExMjRmOGJkNzgxNzZj
YWEwNzFmNTc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYzIEBACiAyMDEyLTEyLTA5ICBKb29u
ZSBIdXIgIDxqb29uZS5odXJAaW50ZWwuY29tPiwgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3Vz
dGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jb20+CiAKKyAgICAgICAgW0dUS10gVXBkYXRlIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBtb3JlIG1ldGhvZHMgdG8gR3JhcGhpY3NMYXllckNsdXR0ZXIgaW4gb3JkZXIg
dG8gcnVuIENTUyAzRCB0cmFuc2Zvcm1zIAorICAgICAgICBieSB1c2luZyBHcmFwaGljc0xheWVy
QWN0b3IuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHdpbGwgYmUgY292ZXJlZCBieSBw
aXhlbCB0ZXN0cyBmb3IgUXQgYW5kIEdUSysgYWNjZWxlcmF0ZWQKKyAgICAgICAgY29tcG9zaXRp
bmcgYW5kIDNEIHRyYW5zZm9ybXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmlkbGVEZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjp+R3JhcGhpY3NMYXllckNsdXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsdXR0ZXI6OnBsYXRmb3JtTGF5ZXIpOiBSZXR1cm5zIHRoZSBwbGF0Zm9ybSBs
YXllcihDbHV0dGVyQWNvdHIpLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OnNldE5lZWRzRGlzcGxheSk6IFVwZGF0ZSB0aGUgZGlzcGxheS4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOiBVcGRhdGUg
cGFydCBvZiB0aGUgRGlzcGxheS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1
dHRlcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnNl
dFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0
RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpz
ZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldENo
aWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjphZGRDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6YWRkQ2hpbGRBdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjphZGRDaGlsZEJl
bG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjphZGRDaGlsZEFi
b3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZXBsYWNlQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnJlbW92ZUZyb21Q
YXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnBsYXRmb3Jt
Q2x1dHRlckxheWVyUGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6cGxhdGZvcm1DbHV0dGVyTGF5ZXJBbmltYXRpb25TdGFydGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZXBhaW50TGF5ZXJEaXJ0eVJlY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpjb21wdXRlUG9zaXRp
b25SZWxhdGl2ZVRvQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRl
cjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlKTogU3luY2hyb25pemUgdGhlIGNvcnJlc3BvbmRpbmcg
QWN0b3JzIHdpdGggdGhlIGN1cnJlbnQgCisgICAgICAgIGNvbXBvc2l0aW5nIHN0YXRlcyBvZiB0
aGlzIEdyYXBoaWNzTGF5ZXIgYW5kIGl0cyBjaGlsZCBsYXllcnMuIAorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkpOiBDb21taXQgYmF0Y2hlZCBjaGFuZ2VzIG5vbi1yZWN1cnNpdmVseS4g
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6Y29tbWl0TGF5ZXJDaGFu
Z2VzQWZ0ZXJTdWJsYXllcnMpOiBSZXNldCBsYXllciBjaGFuZ2VzIGFmdGVyIHdlIHJlY3Vyc2Ug
b24gY2hpbGRyZW4uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6bm90
ZVN1YmxheWVyc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6Om5vdGVMYXllclByb3BlcnR5Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2x1dHRlcjo6Y29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKTogQ29tbWl0
IGxheWVyIGNoYW5nZXMgYmVmb3JlIHdlIHJlY3Vyc2Ugb24gY2hpbGRyZW4uCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlR2VvbWV0cnkpOiBVcGRhdGVkIHRo
ZSBwb3NpdGlvbiBhbmQgc2l6ZSBvZiB0aGUgQWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlU3VibGF5ZXJMaXN0KTogVXBkYXRlZCB0aGUgbGlzdCBv
ZiBjaGlsZCBBY3RvcnMuIAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6
OnVwZGF0ZUxheWVyTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OnVwZGF0ZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1
dHRlcjo6dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNsdXR0ZXI6OmxheWVyRm9yU3VwZXJsYXllcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6cHJpbWFyeUxheWVy
KToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJDbHV0dGVyKToKKworMjAxMi0xMi0wOSAgSm9vbmUg
SHVyICA8am9vbmUuaHVyQGludGVsLmNvbT4sIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rh
dm8ubm9yb25oYUBjb2xsYWJvcmEuY29tPgorCiAgICAgICAgIFtHVEtdIEFkZCBHcmFwaGljc0xh
eWVyQWN0b3IKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTkxOTQwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Ns
dXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5jcHAKaW5kZXggMTA2YmU3ODY4
NmE1YjQyZjc2ODY3YzhmNjdiMDgxYmE4ZmM2MGNlNC4uZjBkMjgzMzczODE3OGM0NzA0MGQ5OWVm
Y2Q0NjhjODg4OTRhNTIyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5jcHAKQEAg
LTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBDb2xsYWJvcmEgTHRkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLDIwMTIgQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMxLDE4IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllckNsdXR0ZXIuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJBY3Rvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJGYWN0b3J5LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2lu
Y2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
Ky8vIFRoaXMgaXMgdGhlIGhvb2sgZm9yIFdlYkNvcmUgY29tcG9zaXRvciB0byBrbm93IHRoYXQg
dGhlIHdlYktpdCBjbHV0dGVyIHBvcnQgaW1wbGVtZW50cworLy8gY29tcG9zaXRpbmcgd2l0aCBH
cmFwaGljc0xheWVyQ2x1dHRlci4KIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBmYWN0b3J5LCBHcmFwaGljc0xheWVy
Q2xpZW50KiBjbGllbnQpCiB7CiAgICAgaWYgKCFmYWN0b3J5KQpAQCAtNTAsMzMgKzU4LDM5MSBA
QCBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGlj
c0xheWVyQ2xpZW50KiBjbGllbnQpCiAKIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpHcmFwaGljc0xh
eWVyQ2x1dHRlcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBHcmFwaGljc0xh
eWVyKGNsaWVudCkKKyAgICAsIG1fdW5jb21taXR0ZWRDaGFuZ2VzKDApCiB7CiAgICAgLy8gQ2x1
dHRlclJlY3RhbmdsZSB3aWxsIGJlIHVzZWQgdG8gc2hvdyB0aGUgZGVidWcgYm9yZGVyLgotICAg
IG1fbGF5ZXIgPSBhZG9wdEdSZWYoY2x1dHRlcl9yZWN0YW5nbGVfbmV3KCkpOworICAgIG1fbGF5
ZXIgPSBncmFwaGljc0xheWVyQWN0b3JOZXdXaXRoQ2xpZW50KExheWVyVHlwZVdlYkxheWVyLCB0
aGlzKTsKK30KKworc3RhdGljIGdib29sZWFuIGlkbGVEZXN0cm95KGdwb2ludGVyIGRhdGEpCit7
CisgICAgR1JlZlB0cjxDbHV0dGVyQWN0b3I+IGFjdG9yID0gYWRvcHRHUmVmKENMVVRURVJfQUNU
T1IoZGF0YSkpOworICAgIENsdXR0ZXJBY3RvciogcGFyZW50ID0gY2x1dHRlcl9hY3Rvcl9nZXRf
cGFyZW50KGFjdG9yLmdldCgpKTsKKworICAgIC8vIFdlIHNob3VsZCByZW1vdmUgY2hpbGQgYWN0
b3JzIG1hbnVhbGx5IGJlY2F1c2UgdGhlIGNvbnRhaW5lciBvZiBDbHV0dGVyIAorICAgIC8vIHNl
ZW1zIHRvIGhhdmUgYSBidWcgdG8gcmVtb3ZlIGl0cyBjaGlsZCBhY3RvcnMgd2hlbiBpdCBpcyBy
ZW1vdmVkLiAKKyAgICBpZiAoR1JBUEhJQ1NfTEFZRVJfSVNfQUNUT1IoR1JBUEhJQ1NfTEFZRVJf
QUNUT1IoYWN0b3IuZ2V0KCkpKSkKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlQWxs
KEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9yLmdldCgpKSk7CisKKyAgICBpZiAocGFyZW50KQor
ICAgICAgICBjbHV0dGVyX2NvbnRhaW5lcl9yZW1vdmVfYWN0b3IoQ0xVVFRFUl9DT05UQUlORVIo
cGFyZW50KSwgYWN0b3IuZ2V0KCkpOworCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBhc3NlcnQg
dGhhdCB0aGUgYWN0b3IncyByZWYgY291bnQgaXMgMSBoZXJlLCBidXQgc29tZQorICAgIC8vIG9m
IHRoZW0gYXJlIGdldHRpbmcgaGVyZSB3aXRoIDIhCisgICAgLy8gQVNTRVJUKChHX09CSkVDVChh
Y3Rvci5nZXQoKSkpLT5yZWZfY291bnQgPT0gMSk7CisKKyAgICByZXR1cm4gRkFMU0U7CiB9CiAK
IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp+R3JhcGhpY3NMYXllckNsdXR0ZXIoKQogewotICAgIHdp
bGxCZURlc3Ryb3llZCgpOworICAgIGlmIChncmFwaGljc0xheWVyQWN0b3JHZXRMYXllclR5cGUo
bV9sYXllci5nZXQoKSkgPT0gR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZVJvb3RMYXll
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgZGVzdHJveSB0aGUgYWN0b3JzIG9uIGFu
IGlkbGUgc28gdGhhdCB0aGUgbWFpbiBsb29wIGNhbiBydW4gZW5vdWdoIHRvCisgICAgLy8gcmVw
YWludCB0aGUgYmFja2dyb3VuZCB0aGF0IHdpbGwgcmVwbGFjZSB0aGUgYWN0b3IuCisgICAgaWYg
KG1fbGF5ZXIpIHsKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0Q2xpZW50KG1fbGF5ZXIu
Z2V0KCksIDApOworICAgICAgICBnX2lkbGVfYWRkKGlkbGVEZXN0cm95LCBtX2xheWVyLmxlYWtS
ZWYoKSk7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXROYW1lKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBTdHJpbmcgbG9uZ05hbWUgPSBTdHJpbmc6OmZvcm1h
dCgiQWN0b3IoJXApIEdyYXBoaWNzTGF5ZXIoJXApICIsIG1fbGF5ZXIuZ2V0KCksIHRoaXMpICsg
bmFtZTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXROYW1lKGxvbmdOYW1lKTsKKyAgICBub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoTmFtZUNoYW5nZWQpOwogfQogCiBDbHV0dGVyQWN0b3IqIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9s
YXllci5nZXQoKTsKKyAgICByZXR1cm4gQ0xVVFRFUl9BQ1RPUihtX2xheWVyLmdldCgpKTsKIH0K
IAogdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIGFkZFJlcGFpbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIG1fc2l6ZSkpOworICAgIEZsb2F0UmVjdCBodWdlUmVjdChGbG9hdFBvaW50KCksIG1fc2l6
ZSk7CisgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGh1Z2VSZWN0KTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyQ2x1dHRlcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cikKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBG
bG9hdFJlY3QgcmVjdChyKTsKKyAgICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMoRmxvYXRQb2ludCgp
LCBtX3NpemUpOworICAgIHJlY3QuaW50ZXJzZWN0KGxheWVyQm91bmRzKTsKKyAgICBpZiAocmVj
dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IHNpemVfdCBtYXhEaXJ0
eVJlY3RzID0gMzI7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGlydHlSZWN0cy5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9kaXJ0eVJlY3RzW2ldLmNvbnRhaW5zKHJlY3Qp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2RpcnR5UmVjdHMuc2l6
ZSgpIDwgbWF4RGlydHlSZWN0cykKKyAgICAgICAgbV9kaXJ0eVJlY3RzLmFwcGVuZChyZWN0KTsK
KyAgICBlbHNlCisgICAgICAgIG1fZGlydHlSZWN0c1swXS51bml0ZShyZWN0KTsKKworICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChEaXJ0eVJlY3RzQ2hhbmdlZCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NMYXllckNsdXR0ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9p
bnQpCit7CisgICAgaWYgKHBvaW50ID09IG1fYW5jaG9yUG9pbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHBvaW50KTsKKyAgICBub3RlTGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoR2VvbWV0cnlDaGFuZ2VkKTsKK30KKwordm9pZCBHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAg
aWYgKHBvaW50ID09IG1fcG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldFBvc2l0aW9uKHBvaW50KTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQo
R2VvbWV0cnlDaGFuZ2VkKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgaWYgKHNpemUgPT0gbV9zaXplKQorICAg
ICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRTaXplKHNpemUpOworICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChHZW9tZXRyeUNoYW5nZWQpOworfQordm9pZCBHcmFwaGlj
c0xheWVyQ2x1dHRlcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
KQoreworICAgIGlmICh0ID09IG1fdHJhbnNmb3JtKQorICAgICAgICByZXR1cm47CisKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFu
Z2VkKFRyYW5zZm9ybUNoYW5nZWQpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpz
ZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCit7CisgICAgaWYgKGRyYXdzQ29udGVu
dCA9PSBtX2RyYXdzQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXll
cjo6c2V0RHJhd3NDb250ZW50KGRyYXdzQ29udGVudCk7CisgICAgbm90ZUxheWVyUHJvcGVydHlD
aGFuZ2VkKERyYXdzQ29udGVudENoYW5nZWQpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBH
cmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0UGFyZW50KEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBhZGRSZXBhaW50UmVjdChyZWN0KTsKKwor
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBhcmVudChjaGlsZExheWVyKTsKK30KKworYm9vbCBHcmFw
aGljc0xheWVyQ2x1dHRlcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIq
PiYgY2hpbGRyZW4pCit7CisgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBHcmFwaGljc0xheWVy
OjpzZXRDaGlsZHJlbihjaGlsZHJlbik7CisgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKKyAgICAg
ICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKKworICAgIHJldHVybiBjaGlsZHJlbkNoYW5nZWQ7
CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIq
IGNoaWxkTGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7
CisgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1
dHRlcjo6YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIsIGludCBpbmRl
eCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoY2hpbGRMYXllciwgaW5k
ZXgpOworICAgIG5vdGVTdWJsYXllcnNDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXll
ckNsdXR0ZXI6OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwgR3JhcGhp
Y3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGNo
aWxkTGF5ZXIsIHNpYmxpbmcpOworICAgIG5vdGVTdWJsYXllcnNDaGFuZ2VkKCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogY2hp
bGRMYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjph
ZGRDaGlsZEFib3ZlKGNoaWxkTGF5ZXIsIHNpYmxpbmcpOworICAgIG5vdGVTdWJsYXllcnNDaGFu
Z2VkKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnJlcGxhY2VDaGlsZChHcmFw
aGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpCit7CisgICAgaWYg
KEdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgbmV3Q2hpbGQpKSB7CisgICAg
ICAgIG5vdGVTdWJsYXllcnNDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnJlbW92
ZUZyb21QYXJlbnQoKQoreworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgc3RhdGljX2Nhc3Q8
R3JhcGhpY3NMYXllckNsdXR0ZXIqPihtX3BhcmVudCktPm5vdGVTdWJsYXllcnNDaGFuZ2VkKCk7
CisgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOworfQorCit2b2lkIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpwbGF0Zm9ybUNsdXR0ZXJMYXllclBhaW50Q29udGVudHMoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQoreworICAgIHBhaW50R3Jh
cGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNsaXApOworfQorCit2b2lkIEdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjpwbGF0Zm9ybUNsdXR0ZXJMYXllckFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlIHN0
YXJ0VGltZSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5ub3RpZnlB
bmltYXRpb25TdGFydGVkKHRoaXMsIHN0YXJ0VGltZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXll
ckNsdXR0ZXI6OnJlcGFpbnRMYXllckRpcnR5UmVjdHMoKQoreworICAgIGlmICghbV9kaXJ0eVJl
Y3RzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2RpcnR5UmVjdHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3Rvcklu
dmFsaWRhdGVSZWN0YW5nbGUobV9sYXllci5nZXQoKSwgbV9kaXJ0eVJlY3RzW2ldKTsKKworICAg
IG1fZGlydHlSZWN0cy5jbGVhcigpOworfQorCitGbG9hdFBvaW50IEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRvQmFzZShmbG9hdCYgcGFnZVNjYWxlKSBjb25z
dAoreworICAgIHBhZ2VTY2FsZSA9IDE7CisKKyAgICBGbG9hdFBvaW50IG9mZnNldDsKKyAgICBm
b3IgKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGN1cnJMYXllciA9IHRoaXM7IGN1cnJMYXllcjsgY3Vy
ckxheWVyID0gY3VyckxheWVyLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoY3VyckxheWVyLT5h
cHBsaWVzUGFnZVNjYWxlKCkpIHsKKyAgICAgICAgICAgIGlmIChjdXJyTGF5ZXItPmNsaWVudCgp
KQorICAgICAgICAgICAgICAgIHBhZ2VTY2FsZSA9IGN1cnJMYXllci0+cGFnZVNjYWxlRmFjdG9y
KCk7CisgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgICAgICB9CisKKyAgICAgICAgb2Zm
c2V0ICs9IGN1cnJMYXllci0+cG9zaXRpb24oKTsKKyAgICB9CisKKyAgICByZXR1cm4gRmxvYXRQ
b2ludCgpOworfQorCisvLyBjYWxsZWQgZnJvbSB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpmbHVz
aENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBUcmFu
c2Zvcm1TdGF0ZSBzdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6VW5hcHBseUludmVyc2VUcmFuc2Zvcm1E
aXJlY3Rpb24sIEZsb2F0UXVhZChjbGlwUmVjdCkpOworICAgIHJlY3Vyc2l2ZUNvbW1pdENoYW5n
ZXMoc3RhdGUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZWN1cnNpdmVDb21t
aXRDaGFuZ2VzKGNvbnN0IFRyYW5zZm9ybVN0YXRlJiBzdGF0ZSwgZmxvYXQgcGFnZVNjYWxlRmFj
dG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlLCBib29sIGFmZmVj
dGVkQnlQYWdlU2NhbGUpCit7CisgICAgLy8gRklYTUU6IFNhdmUgdGhlIHN0YXRlIGJlZm9yZSBz
ZW5kaW5nIGRvd24gdG8ga2lkcyBhbmQgcmVzdG9yZSBpdCBhZnRlcgorICAgIFRyYW5zZm9ybVN0
YXRlIGxvY2FsU3RhdGUgPSBzdGF0ZTsKKworICAgIGlmIChhcHBsaWVzUGFnZVNjYWxlKCkpIHsK
KyAgICAgICAgcGFnZVNjYWxlRmFjdG9yID0gdGhpcy0+cGFnZVNjYWxlRmFjdG9yKCk7CisgICAg
ICAgIGFmZmVjdGVkQnlQYWdlU2NhbGUgPSB0cnVlOworICAgIH0KKworICAgIC8vIEFjY3VtdWxh
dGUgYW4gb2Zmc2V0IGZyb20gdGhlIGFuY2VzdHJhbCBwaXhlbC1hbGlnbmVkIGxheWVyLgorICAg
IEZsb2F0UG9pbnQgYmFzZVJlbGF0aXZlUG9zaXRpb24gPSBwb3NpdGlvblJlbGF0aXZlVG9CYXNl
OworICAgIGlmIChhZmZlY3RlZEJ5UGFnZVNjYWxlKQorICAgICAgICBiYXNlUmVsYXRpdmVQb3Np
dGlvbiArPSBtX3Bvc2l0aW9uOworCisgICAgY29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5
ZXJzKHBhZ2VTY2FsZUZhY3RvciwgYmFzZVJlbGF0aXZlUG9zaXRpb24pOworCisgICAgY29uc3Qg
VmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRMYXllcnMgPSBjaGlsZHJlbigpOworICAgIHNp
emVfdCBudW1DaGlsZHJlbiA9IGNoaWxkTGF5ZXJzLnNpemUoKTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgeworICAgICAgICBHcmFwaGljc0xheWVyQ2x1
dHRlciogY3VyQ2hpbGQgPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2x1dHRlcio+KGNoaWxk
TGF5ZXJzW2ldKTsKKyAgICAgICAgY3VyQ2hpbGQtPnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMobG9j
YWxTdGF0ZSwgcGFnZVNjYWxlRmFjdG9yLCBiYXNlUmVsYXRpdmVQb3NpdGlvbiwgYWZmZWN0ZWRC
eVBhZ2VTY2FsZSk7CisgICAgfQorCisgICAgY29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJsYXll
cnMoKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6Zmx1c2hDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpCit7CisgICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yOworICAg
IEZsb2F0UG9pbnQgb2Zmc2V0ID0gY29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UocGFnZVNj
YWxlRmFjdG9yKTsKKyAgICBjb21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMocGFnZVNj
YWxlRmFjdG9yLCBvZmZzZXQpOworICAgIGNvbW1pdExheWVyQ2hhbmdlc0FmdGVyU3VibGF5ZXJz
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbW1pdExheWVyQ2hhbmdlc0Fm
dGVyU3VibGF5ZXJzKCkKK3sKKyAgICBpZiAoIW1fdW5jb21taXR0ZWRDaGFuZ2VzKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3VuY29tbWl0dGVkQ2hhbmdlcyA9IE5vQ2hhbmdlOworfQordm9p
ZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6bm90ZVN1YmxheWVyc0NoYW5nZWQoKQoreworICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChDaGlsZHJlbkNoYW5nZWQpOworfQorCit2b2lkIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoTGF5ZXJDaGFuZ2VGbGFn
cyBmbGFncykKK3sKKyAgICBpZiAoIW1fdW5jb21taXR0ZWRDaGFuZ2VzICYmIG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsgLy8gY2FsbCBSZW5k
ZXJMYXllckJhY2tpbmc6Om5vdGlmeUZsdXNoUmVxdWlyZWQKKworICAgIG1fdW5jb21taXR0ZWRD
aGFuZ2VzIHw9IGZsYWdzOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpjb21taXRM
YXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQoreworICAgIGlmICghbV91bmNvbW1p
dHRlZENoYW5nZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3VuY29tbWl0dGVkQ2hh
bmdlcyAmIE5hbWVDaGFuZ2VkKQorICAgICAgICB1cGRhdGVMYXllck5hbWVzKCk7CisKKyAgICBp
ZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBDaGlsZHJlbkNoYW5nZWQpCisgICAgICAgIHVwZGF0
ZVN1YmxheWVyTGlzdCgpOworCisgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgR2VvbWV0
cnlDaGFuZ2VkKQorICAgICAgICB1cGRhdGVHZW9tZXRyeShwYWdlU2NhbGVGYWN0b3IsIHBvc2l0
aW9uUmVsYXRpdmVUb0Jhc2UpOworCisgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgVHJh
bnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CisKKyAgICBpZiAobV91
bmNvbW1pdHRlZENoYW5nZXMgJiBEcmF3c0NvbnRlbnRDaGFuZ2VkKQorICAgICAgICB1cGRhdGVM
YXllckRyYXdzQ29udGVudChwYWdlU2NhbGVGYWN0b3IsIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2Up
OworCisgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgRGlydHlSZWN0c0NoYW5nZWQpCisg
ICAgICAgIHJlcGFpbnRMYXllckRpcnR5UmVjdHMoKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVy
Q2x1dHRlcjo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9h
dFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQoreworICAgIEZsb2F0UG9pbnQgc2NhbGVk
UG9zaXRpb247CisgICAgRmxvYXRQb2ludDNEIHNjYWxlZEFuY2hvclBvaW50OworICAgIEZsb2F0
U2l6ZSBzY2FsZWRTaXplOworCisgICAgLy8gRklYTUU6IE5lZWQgdG8gc3VwcG9ydCBzY2FsaW5n
CisgICAgc2NhbGVkUG9zaXRpb24gPSBtX3Bvc2l0aW9uOworICAgIHNjYWxlZEFuY2hvclBvaW50
ID0gbV9hbmNob3JQb2ludDsKKyAgICBzY2FsZWRTaXplID0gbV9zaXplOworCisgICAgRmxvYXRS
ZWN0IGFkanVzdGVkQm91bmRzKG1fYm91bmRzT3JpZ2luICwgc2NhbGVkU2l6ZSk7CisgICAgRmxv
YXRQb2ludCBhZGp1c3RlZFBvc2l0aW9uKHNjYWxlZFBvc2l0aW9uLngoKSArIHNjYWxlZEFuY2hv
clBvaW50LngoKSAqIHNjYWxlZFNpemUud2lkdGgoKSwgc2NhbGVkUG9zaXRpb24ueSgpICsgc2Nh
bGVkQW5jaG9yUG9pbnQueSgpICogc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBjbHV0dGVy
X2FjdG9yX3NldF9zaXplKENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSksIGFkanVzdGVkQm91
bmRzLndpZHRoKCksIGFkanVzdGVkQm91bmRzLmhlaWdodCgpKTsKKyAgICBjbHV0dGVyX2FjdG9y
X3NldF9wb3NpdGlvbihDTFVUVEVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkpLCBhZGp1c3RlZFBvc2l0
aW9uLngoKSwgYWRqdXN0ZWRQb3NpdGlvbi55KCkpOworICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNl
dEFuY2hvclBvaW50KG1fbGF5ZXIuZ2V0KCksIHNjYWxlZEFuY2hvclBvaW50LngoKSwgc2NhbGVk
QW5jaG9yUG9pbnQueSgpLCBzY2FsZWRBbmNob3JQb2ludC56KCkpOworfQorCisvLyBFYWNoIEdy
YXBoaWNzTGF5ZXIgaGFzIHRoZSBjb3JyZXNwb25kaW5nIGxheWVyIGluIHRoZSBwbGF0Zm9ybSBw
b3J0LgorLy8gU28gd2hlbmV2ZXIgdGhlIGxpc3Qgb2YgY2hpbGQgbGF5ZXIgY2hhbmdlcywgdGhl
IGxpc3Qgb2YgR3JhcGhpY3NMYXllckFjdG9yIHNob3VsZCBiZSB1cGRhdGVkIGFjY29yZGluZ2x5
Lgordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlU3VibGF5ZXJMaXN0KCkKK3sKKyAg
ICBHcmFwaGljc0xheWVyQWN0b3JMaXN0IG5ld1N1YmxheWVyczsKKyAgICBjb25zdCBWZWN0b3I8
R3JhcGhpY3NMYXllcio+JiBjaGlsZExheWVycyA9IGNoaWxkcmVuKCk7CisKKyAgICBpZiAoY2hp
bGRMYXllcnMuc2l6ZSgpID4gMCkgeworICAgICAgICBzaXplX3QgbnVtQ2hpbGRyZW4gPSBjaGls
ZExheWVycy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hpbGRy
ZW47ICsraSkgeworICAgICAgICAgICAgR3JhcGhpY3NMYXllckNsdXR0ZXIqIGN1ckNoaWxkID0g
c3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNsdXR0ZXIqPihjaGlsZExheWVyc1tpXSk7CisgICAg
ICAgICAgICBHcmFwaGljc0xheWVyQWN0b3IqIGNoaWxkTGF5ZXIgPSBjdXJDaGlsZC0+bGF5ZXJG
b3JTdXBlcmxheWVyKCk7CisgICAgICAgICAgICBnX2Fzc2VydChHUkFQSElDU19MQVlFUl9JU19B
Q1RPUihjaGlsZExheWVyKSk7CisgICAgICAgICAgICBuZXdTdWJsYXllcnMuYXBwZW5kKGNoaWxk
TGF5ZXIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdT
dWJsYXllcnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIENsdXR0ZXJBY3RvciogbGF5ZXJB
Y3RvciA9IENMVVRURVJfQUNUT1IobmV3U3VibGF5ZXJzW2ldLmdldCgpKTsKKyAgICAgICAgICAg
IENsdXR0ZXJBY3RvciogcGFyZW50QWN0b3IgPSBjbHV0dGVyX2FjdG9yX2dldF9wYXJlbnQobGF5
ZXJBY3Rvcik7CisgICAgICAgICAgICBpZiAocGFyZW50QWN0b3IpCisgICAgICAgICAgICAgICAg
Y2x1dHRlcl9jb250YWluZXJfcmVtb3ZlX2FjdG9yKENMVVRURVJfQ09OVEFJTkVSKHBhcmVudEFj
dG9yKSwgbGF5ZXJBY3Rvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBncmFwaGljc0xheWVy
QWN0b3JTZXRTdWJsYXllcnMobV9sYXllci5nZXQoKSwgbmV3U3VibGF5ZXJzKTsKK30KKwordm9p
ZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlTGF5ZXJOYW1lcygpCit7CisgICAgY2x1dHRl
cl9hY3Rvcl9zZXRfbmFtZShDTFVUVEVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkpLCBuYW1lKCkudXRm
OCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZVRyYW5z
Zm9ybSgpCit7CisgICAgQ29nbE1hdHJpeCBtYXRyaXggPSBtX3RyYW5zZm9ybTsKKyAgICBncmFw
aGljc0xheWVyQWN0b3JTZXRUcmFuc2Zvcm0ocHJpbWFyeUxheWVyKCksICZtYXRyaXgpOworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVMYXllckRyYXdzQ29udGVudChmbG9h
dCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jh
c2UpCit7CisgICAgaWYgKG1fZHJhd3NDb250ZW50KSB7CisgICAgICAgIC8vIEZJWE1FOiBJdCBu
ZWVkcyB0byBwYWludCBjb250ZW50IGluc2lkZSBhIGxheWVyLgorICAgICAgICBncmFwaGljc0xh
eWVyQWN0b3JTZXREcmF3c0NvbnRlbnQobV9sYXllci5nZXQoKSwgVFJVRSk7CisgICAgICAgIHNl
dE5lZWRzRGlzcGxheSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3Rv
clNldERyYXdzQ29udGVudChtX2xheWVyLmdldCgpLCBGQUxTRSk7CisgICAgICAgIGdyYXBoaWNz
TGF5ZXJBY3RvclNldFN1cmZhY2UobV9sYXllci5nZXQoKSwgMCk7CisgICAgfQorCisgICAgdXBk
YXRlRGVidWdJbmRpY2F0b3JzKCk7Cit9CisKK0dyYXBoaWNzTGF5ZXJBY3RvciogR3JhcGhpY3NM
YXllckNsdXR0ZXI6OmxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGF5ZXIuZ2V0KCk7Cit9CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmgKaW5k
ZXggM2UxNDJlNDg3ZGU1MGVjZjhmZWQxNDFkNDU2NjU0NjRkNDc0MzkyOS4uNjM5OWFjNGQ4MzQw
Y2RmOWZjZjE1ZjhlZDA1YjI4MDI4NDljN2MzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0
ZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIENvbGxhYm9yYSBM
dGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsMjAxMiBDb2xsYWJvcmEgTHRkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwyMyArMzEsMTExIEBACiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2lu
Y2x1ZGUgIkltYWdlU291cmNlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGll
bnQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiAjaW5jbHVkZSA8Y2x1dHRlci9j
bHV0dGVyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCit0eXBlZGVmIHN0
cnVjdCBfR3JhcGhpY3NMYXllckFjdG9yIEdyYXBoaWNzTGF5ZXJBY3RvcjsKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0xheWVyQ2x1dHRlciA6IHB1YmxpYyBHcmFwaGlj
c0xheWVyIHsKK2NsYXNzIFRyYW5zZm9ybVN0YXRlOworCit0eXBlZGVmIFZlY3RvcjxHUmVmUHRy
PEdyYXBoaWNzTGF5ZXJBY3Rvcj4gPiBHcmFwaGljc0xheWVyQWN0b3JMaXN0OworCitjbGFzcyBH
cmFwaGljc0xheWVyQ2x1dHRlciA6IHB1YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMgUGxhdGZv
cm1DbHV0dGVyTGF5ZXJDbGllbnQgewogcHVibGljOgorICAgIGVudW0gTGF5ZXJUeXBlIHsgTGF5
ZXJUeXBlTGF5ZXIsIExheWVyVHlwZVdlYkxheWVyLCBMYXllclR5cGVWaWRlb0xheWVyLCBMYXll
clR5cGVUcmFuc2Zvcm1MYXllciwgTGF5ZXJUeXBlUm9vdExheWVyLCBMYXllclR5cGVDdXN0b20g
fTsKKwogICAgIEdyYXBoaWNzTGF5ZXJDbHV0dGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKICAg
ICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyQ2x1dHRlcigpOwogCiAgICAgdmlydHVhbCBDbHV0dGVy
QWN0b3IqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQo
R3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhp
Y3NMYXllciosIGludCBpbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQWJvdmUoR3Jh
cGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpOworICAgIHZpcnR1YWwgdm9pZCBh
ZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOworICAgIHZpcnR1YWwgYm9vbCByZXBs
YWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxk
KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5
ZXIqPiYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoR3JhcGhpY3NMYXllciopOworCisg
ICAgdmlydHVhbCB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJik7CisgICAgdmlydHVhbCB2b2lkIHNl
dFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShj
b25zdCBGbG9hdFNpemUmKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBT
dHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorICAgIHZp
cnR1YWwgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0Jik7CisgICAg
dmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKwor
ICAgIHZvaWQgcmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhjb25zdCBUcmFuc2Zvcm1TdGF0ZSYsIGZs
b2F0IHBhZ2VTY2FsZUZhY3RvciA9IDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRp
dmVUb0Jhc2UgPSBGbG9hdFBvaW50KCksIGJvb2wgYWZmZWN0ZWRCeVBhZ2VTY2FsZSA9IGZhbHNl
KTsKKwogcHJpdmF0ZToKLSAgICBHUmVmUHRyPENsdXR0ZXJBY3Rvcj4gbV9sYXllcjsKKyAgICBG
bG9hdFBvaW50IGNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKGZsb2F0JiBwYWdlU2NhbGUp
IGNvbnN0OworICAgIHZvaWQgY29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKGZsb2F0
IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFz
ZSk7CisgICAgdm9pZCBjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycygpOworCisgICAg
dmlydHVhbCB2b2lkIHBsYXRmb3JtQ2x1dHRlckxheWVyQW5pbWF0aW9uU3RhcnRlZChkb3VibGUg
YmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DbHV0dGVyTGF5ZXJQYWludENv
bnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOworCisgICAgR3Jh
cGhpY3NMYXllckFjdG9yKiBwcmltYXJ5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyLmdl
dCgpOyB9CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllckZvclN1cGVybGF5ZXIoKSBjb25z
dDsKKyAgICBlbnVtIExheWVyQ2hhbmdlIHsKKyAgICAgICAgTm9DaGFuZ2UgPSAwLAorICAgICAg
ICBOYW1lQ2hhbmdlZCA9IDEgPDwgMSwKKyAgICAgICAgQ2hpbGRyZW5DaGFuZ2VkID0gMSA8PCAy
LCAvLyBhbHNvIHVzZWQgZm9yIGNvbnRlbnQgbGF5ZXIsIGFuZCBwcmVzZXJ2ZXMtM2QsIGFuZCBz
aXplIGlmIHRpbGluZyBjaGFuZ2VzPworICAgICAgICBHZW9tZXRyeUNoYW5nZWQgPSAxIDw8IDMs
CisgICAgICAgIFRyYW5zZm9ybUNoYW5nZWQgPSAxIDw8IDQsCisgICAgICAgIENoaWxkcmVuVHJh
bnNmb3JtQ2hhbmdlZCA9IDEgPDwgNSwKKyAgICAgICAgUHJlc2VydmVzM0RDaGFuZ2VkID0gMSA8
PCA2LAorICAgICAgICBNYXNrc1RvQm91bmRzQ2hhbmdlZCA9IDEgPDwgNywKKyAgICAgICAgRHJh
d3NDb250ZW50Q2hhbmdlZCA9IDEgPDwgOCwgLy8gbmVlZCB0aGlzPworICAgICAgICBCYWNrZ3Jv
dW5kQ29sb3JDaGFuZ2VkID0gMSA8PCA5LAorICAgICAgICBDb250ZW50c09wYXF1ZUNoYW5nZWQg
PSAxIDw8IDEwLAorICAgICAgICBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2VkID0gMSA8PCAxMSwK
KyAgICAgICAgT3BhY2l0eUNoYW5nZWQgPSAxIDw8IDEyLAorICAgICAgICBBbmltYXRpb25DaGFu
Z2VkID0gMSA8PCAxMywKKyAgICAgICAgRGlydHlSZWN0c0NoYW5nZWQgPSAxIDw8IDE0LAorICAg
ICAgICBDb250ZW50c0ltYWdlQ2hhbmdlZCA9IDEgPDwgMTUsCisgICAgICAgIENvbnRlbnRzTWVk
aWFMYXllckNoYW5nZWQgPSAxIDw8IDE2LAorICAgICAgICBDb250ZW50c0NhbnZhc0xheWVyQ2hh
bmdlZCA9IDEgPDwgMTcsCisgICAgICAgIENvbnRlbnRzUmVjdENoYW5nZWQgPSAxIDw8IDE4LAor
ICAgICAgICBNYXNrTGF5ZXJDaGFuZ2VkID0gMSA8PCAxOSwKKyAgICAgICAgUmVwbGljYXRlZExh
eWVyQ2hhbmdlZCA9IDEgPDwgMjAsCisgICAgICAgIENvbnRlbnRzTmVlZHNEaXNwbGF5ID0gMSA8
PCAyMSwKKyAgICAgICAgQWNjZWxlcmF0ZXNEcmF3aW5nQ2hhbmdlZCA9IDEgPDwgMjIsCisgICAg
ICAgIENvbnRlbnRzU2NhbGVDaGFuZ2VkID0gMSA8PCAyMworICAgIH07CisKKyAgICB0eXBlZGVm
IHVuc2lnbmVkIExheWVyQ2hhbmdlRmxhZ3M7CisgICAgdm9pZCBub3RlTGF5ZXJQcm9wZXJ0eUNo
YW5nZWQoTGF5ZXJDaGFuZ2VGbGFncyk7CisgICAgdm9pZCBub3RlU3VibGF5ZXJzQ2hhbmdlZCgp
OworCisgICAgdm9pZCB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICB2b2lkIHVwZGF0
ZUxheWVyTmFtZXMoKTsKKyAgICB2b2lkIHVwZGF0ZVN1YmxheWVyTGlzdCgpOworICAgIHZvaWQg
dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGl4ZWxBbGlnbm1lbnRTY2FsZSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CisgICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm0oKTsK
KyAgICB2b2lkIHVwZGF0ZUxheWVyRHJhd3NDb250ZW50KGZsb2F0IHBpeGVsQWxpZ25tZW50U2Nh
bGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOworCisgICAgdm9p
ZCByZXBhaW50TGF5ZXJEaXJ0eVJlY3RzKCk7CisKKyAgICBHUmVmUHRyPEdyYXBoaWNzTGF5ZXJB
Y3Rvcj4gbV9sYXllcjsKKworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fZGlydHlSZWN0czsKKyAg
ICBMYXllckNoYW5nZUZsYWdzIG1fdW5jb21taXR0ZWRDaGFuZ2VzOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="195423"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178812</attachid>
            <date>2012-12-11 08:35:20 -0800</date>
            <delta_ts>2012-12-11 09:35:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92045-20121211173226.patch</filename>
            <type>text/plain</type>
            <size>23161</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTA2MzBhY2U0ZTljOTlh
NmFjOGM1ZDM4NWU5NmMwZWQxODA4N2I4MS4uOTZlMDY0MzUxYjIyZGFkYTc3Nzg0ODdjMzI2MDQ1
NWY3YzY1Nzk1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYzIEBACiAyMDEyLTEyLTA5ICBKb29u
ZSBIdXIgIDxqb29uZS5odXJAaW50ZWwuY29tPiwgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3Vz
dGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jb20+CiAKKyAgICAgICAgW0dUS10gVXBkYXRlIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYSBTaWx2
YS4KKworICAgICAgICBBZGQgbW9yZSBtZXRob2RzIHRvIEdyYXBoaWNzTGF5ZXJDbHV0dGVyIGlu
IG9yZGVyIHRvIHJ1biBDU1MgM0QgdHJhbnNmb3JtcyAKKyAgICAgICAgYnkgdXNpbmcgR3JhcGhp
Y3NMYXllckFjdG9yLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyB3aWxsIGJlIGNvdmVy
ZWQgYnkgcGl4ZWwgdGVzdHMgZm9yIFF0IGFuZCBHVEsrIGFjY2VsZXJhdGVkCisgICAgICAgIGNv
bXBvc2l0aW5nIGFuZCAzRCB0cmFuc2Zvcm1zLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpHcmFwaGljc0xheWVyQ2x1
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjppZGxlRGVzdHJveSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6fkdyYXBoaWNzTGF5ZXJDbHV0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXROYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpwbGF0Zm9ybUxheWVyKTogUmV0dXJucyB0aGUgcGxh
dGZvcm0gbGF5ZXIoQ2x1dHRlckFjb3RyKS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjpzZXROZWVkc0Rpc3BsYXkpOiBVcGRhdGUgdGhlIGRpc3BsYXkuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KTog
VXBkYXRlIHBhcnQgb2YgdGhlIERpc3BsYXkuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6c2V0QW5jaG9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsdXR0ZXI6OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OnNldERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1
dHRlcjo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVy
OjpzZXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6
YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmFkZENo
aWxkQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6YWRk
Q2hpbGRCZWxvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6YWRk
Q2hpbGRBYm92ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6cmVw
bGFjZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZW1v
dmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpw
bGF0Zm9ybUNsdXR0ZXJMYXllclBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsdXR0ZXI6OnBsYXRmb3JtQ2x1dHRlckxheWVyQW5pbWF0aW9uU3RhcnRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6cmVwYWludExheWVyRGly
dHlSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6Y29tcHV0
ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNsdXR0ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSk6IFN5bmNocm9uaXplIHRoZSBjb3JyZXNw
b25kaW5nIEFjdG9ycyB3aXRoIHRoZSBjdXJyZW50IAorICAgICAgICBjb21wb3NpdGluZyBzdGF0
ZXMgb2YgdGhpcyBHcmFwaGljc0xheWVyIGFuZCBpdHMgY2hpbGQgbGF5ZXJzLiAKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpmbHVzaENvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KTogQ29tbWl0IGJhdGNoZWQgY2hhbmdlcyBub24tcmVjdXJz
aXZlbHkuIAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbW1pdExh
eWVyQ2hhbmdlc0FmdGVyU3VibGF5ZXJzKTogUmVzZXQgbGF5ZXIgY2hhbmdlcyBhZnRlciB3ZSBy
ZWN1cnNlIG9uIGNoaWxkcmVuLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6Om5vdGVTdWJsYXllcnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjpub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyk6
IENvbW1pdCBsYXllciBjaGFuZ2VzIGJlZm9yZSB3ZSByZWN1cnNlIG9uIGNoaWxkcmVuLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZUdlb21ldHJ5KTogVXBk
YXRlZCB0aGUgcG9zaXRpb24gYW5kIHNpemUgb2YgdGhlIEFjdG9yLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZVN1YmxheWVyTGlzdCk6IFVwZGF0ZWQgdGhl
IGxpc3Qgb2YgY2hpbGQgQWN0b3JzLiAKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
bHV0dGVyOjp1cGRhdGVMYXllck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjp1cGRhdGVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsdXR0ZXI6OnVwZGF0ZUxheWVyRHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpsYXllckZvclN1cGVybGF5ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnByaW1h
cnlMYXllcik6CisgICAgICAgIChHcmFwaGljc0xheWVyQ2x1dHRlcik6CisKKzIwMTItMTItMDkg
IEpvb25lIEh1ciAgPGpvb25lLmh1ckBpbnRlbC5jb20+LCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEg
IDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvbT4KKwogICAgICAgICBbR1RLXSBBZGQgR3Jh
cGhpY3NMYXllckFjdG9yCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MTk0MAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwCmluZGV4IDEw
NmJlNzg2ODZhNWI0MmY3Njg2N2M4ZjY3YjA4MWJhOGZjNjBjZTQuLjgzMTcxNjFiOGE4ZDE2N2Jk
NGJkNTA4ODlmMTBiM2MxNTU0Y2Q0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIu
Y3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ29sbGFib3JhIEx0
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBDb2xsYWJvcmEgTHRkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMSArMzEsMTggQEAKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyQ2x1dHRlci5oIgogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NMYXllckFjdG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckZhY3Rv
cnkuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJv
LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorLy8gVGhpcyBpcyB0aGUgaG9vayBmb3IgV2ViQ29yZSBjb21wb3NpdG9yIHRvIGtu
b3cgdGhhdCB0aGUgd2ViS2l0IGNsdXR0ZXIgcG9ydCBpbXBsZW1lbnRzCisvLyBjb21wb3NpdGlu
ZyB3aXRoIEdyYXBoaWNzTGF5ZXJDbHV0dGVyLgogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBH
cmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckZhY3RvcnkqIGZhY3RvcnksIEdyYXBo
aWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICBpZiAoIWZhY3RvcnkpCkBAIC01MCwzMyAr
NTgsMzkwIEBAIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRl
KEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIAogR3JhcGhpY3NMYXllckNsdXR0ZXI6Okdy
YXBoaWNzTGF5ZXJDbHV0dGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdy
YXBoaWNzTGF5ZXIoY2xpZW50KQorICAgICwgbV91bmNvbW1pdHRlZENoYW5nZXMoMCkKIHsKICAg
ICAvLyBDbHV0dGVyUmVjdGFuZ2xlIHdpbGwgYmUgdXNlZCB0byBzaG93IHRoZSBkZWJ1ZyBib3Jk
ZXIuCi0gICAgbV9sYXllciA9IGFkb3B0R1JlZihjbHV0dGVyX3JlY3RhbmdsZV9uZXcoKSk7Cisg
ICAgbV9sYXllciA9IGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dpdGhDbGllbnQoTGF5ZXJUeXBlV2Vi
TGF5ZXIsIHRoaXMpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gaWRsZURlc3Ryb3koZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBHUmVmUHRyPENsdXR0ZXJBY3Rvcj4gYWN0b3IgPSBhZG9wdEdSZWYoQ0xV
VFRFUl9BQ1RPUihkYXRhKSk7CisgICAgQ2x1dHRlckFjdG9yKiBwYXJlbnQgPSBjbHV0dGVyX2Fj
dG9yX2dldF9wYXJlbnQoYWN0b3IuZ2V0KCkpOworCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSBj
aGlsZCBhY3RvcnMgbWFudWFsbHkgYmVjYXVzZSB0aGUgY29udGFpbmVyIG9mIENsdXR0ZXIgCisg
ICAgLy8gc2VlbXMgdG8gaGF2ZSBhIGJ1ZyB0byByZW1vdmUgaXRzIGNoaWxkIGFjdG9ycyB3aGVu
IGl0IGlzIHJlbW92ZWQuIAorICAgIGlmIChHUkFQSElDU19MQVlFUl9JU19BQ1RPUihHUkFQSElD
U19MQVlFUl9BQ1RPUihhY3Rvci5nZXQoKSkpKQorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JS
ZW1vdmVBbGwoR1JBUEhJQ1NfTEFZRVJfQUNUT1IoYWN0b3IuZ2V0KCkpKTsKKworICAgIGlmIChw
YXJlbnQpCisgICAgICAgIGNsdXR0ZXJfY29udGFpbmVyX3JlbW92ZV9hY3RvcihDTFVUVEVSX0NP
TlRBSU5FUihwYXJlbnQpLCBhY3Rvci5nZXQoKSk7CisKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxk
IGFzc2VydCB0aGF0IHRoZSBhY3RvcidzIHJlZiBjb3VudCBpcyAxIGhlcmUsIGJ1dCBzb21lCisg
ICAgLy8gb2YgdGhlbSBhcmUgZ2V0dGluZyBoZXJlIHdpdGggMiEKKyAgICAvLyBBU1NFUlQoKEdf
T0JKRUNUKGFjdG9yLmdldCgpKSktPnJlZl9jb3VudCA9PSAxKTsKKworICAgIHJldHVybiBGQUxT
RTsKIH0KIAogR3JhcGhpY3NMYXllckNsdXR0ZXI6On5HcmFwaGljc0xheWVyQ2x1dHRlcigpCiB7
Ci0gICAgd2lsbEJlRGVzdHJveWVkKCk7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXJBY3RvckdldExh
eWVyVHlwZShtX2xheWVyLmdldCgpKSA9PSBHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBl
Um9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBkZXN0cm95IHRoZSBhY3Rv
cnMgb24gYW4gaWRsZSBzbyB0aGF0IHRoZSBtYWluIGxvb3AgY2FuIHJ1biBlbm91Z2ggdG8KKyAg
ICAvLyByZXBhaW50IHRoZSBiYWNrZ3JvdW5kIHRoYXQgd2lsbCByZXBsYWNlIHRoZSBhY3Rvci4K
KyAgICBpZiAobV9sYXllcikgeworICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRDbGllbnQo
bV9sYXllci5nZXQoKSwgMCk7CisgICAgICAgIGdfaWRsZV9hZGQoaWRsZURlc3Ryb3ksIG1fbGF5
ZXIubGVha1JlZigpKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNl
dE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFN0cmluZyBsb25nTmFtZSA9IFN0cmlu
Zzo6Zm9ybWF0KCJBY3RvciglcCkgR3JhcGhpY3NMYXllciglcCkgIiwgbV9sYXllci5nZXQoKSwg
dGhpcykgKyBuYW1lOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE5hbWUobG9uZ05hbWUpOworICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChOYW1lQ2hhbmdlZCk7CiB9CiAKIENsdXR0ZXJBY3Rv
ciogR3JhcGhpY3NMYXllckNsdXR0ZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIHJl
dHVybiBtX2xheWVyLmdldCgpOworICAgIHJldHVybiBDTFVUVEVSX0FDVE9SKG1fbGF5ZXIuZ2V0
KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXROZWVkc0Rpc3BsYXkoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgYWRkUmVwYWludFJlY3QoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgbV9zaXplKSk7CisgICAgRmxvYXRSZWN0IGh1Z2VSZWN0KEZsb2F0UG9pbnQo
KSwgbV9zaXplKTsKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoaHVnZVJlY3QpOworfQorCit2
b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxv
YXRSZWN0JiByKQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEZsb2F0UmVjdCByZWN0KHIpOworICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyhGbG9h
dFBvaW50KCksIG1fc2l6ZSk7CisgICAgcmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZHMpOworICAg
IGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3Qgc2l6ZV90
IG1heERpcnR5UmVjdHMgPSAzMjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kaXJ0
eVJlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2RpcnR5UmVjdHNbaV0uY29udGFp
bnMocmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fZGlydHlS
ZWN0cy5zaXplKCkgPCBtYXhEaXJ0eVJlY3RzKQorICAgICAgICBtX2RpcnR5UmVjdHMuYXBwZW5k
KHJlY3QpOworICAgIGVsc2UKKyAgICAgICAgbV9kaXJ0eVJlY3RzWzBdLnVuaXRlKHJlY3QpOwor
CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKERpcnR5UmVjdHNDaGFuZ2VkKTsKK30KKwor
dm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2lu
dDNEJiBwb2ludCkKK3sKKyAgICBpZiAocG9pbnQgPT0gbV9hbmNob3JQb2ludCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocG9pbnQpOworICAg
IG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChHZW9tZXRyeUNoYW5nZWQpOworfQorCit2b2lkIEdy
YXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
K3sKKyAgICBpZiAocG9pbnQgPT0gbV9wb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
R3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocG9pbnQpOworICAgIG5vdGVMYXllclByb3BlcnR5
Q2hhbmdlZChHZW9tZXRyeUNoYW5nZWQpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVy
OjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSBtX3Np
emUpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7
CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKEdlb21ldHJ5Q2hhbmdlZCk7Cit9Cit2b2lk
IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHQpCit7CisgICAgaWYgKHQgPT0gbV90cmFuc2Zvcm0pCisgICAgICAgIHJldHVybjsK
KworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh0KTsKKyAgICBub3RlTGF5ZXJQcm9w
ZXJ0eUNoYW5nZWQoVHJhbnNmb3JtQ2hhbmdlZCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNs
dXR0ZXI6OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKK3sKKyAgICBpZiAoZHJh
d3NDb250ZW50ID09IG1fZHJhd3NDb250ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFw
aGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoZHJhd3NDb250ZW50KTsKKyAgICBub3RlTGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoRHJhd3NDb250ZW50Q2hhbmdlZCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NM
YXllckNsdXR0ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXRQYXJlbnQoR3JhcGhpY3NMYXllciogY2hp
bGRMYXllcikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIGFkZFJlcGFpbnRSZWN0KHJl
Y3QpOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UGFyZW50KGNoaWxkTGF5ZXIpOworfQorCiti
b29sIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhp
Y3NMYXllcio+JiBjaGlsZHJlbikKK3sKKyAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9IEdyYXBo
aWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKKyAgICBpZiAoY2hpbGRyZW5DaGFuZ2Vk
KQorICAgICAgICBub3RlU3VibGF5ZXJzQ2hhbmdlZCgpOworCisgICAgcmV0dXJuIGNoaWxkcmVu
Q2hhbmdlZDsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6YWRkQ2hpbGQoR3JhcGhp
Y3NMYXllciogY2hpbGRMYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChjaGls
ZExheWVyKTsKKyAgICBub3RlU3VibGF5ZXJzQ2hhbmdlZCgpOworfQorCit2b2lkIEdyYXBoaWNz
TGF5ZXJDbHV0dGVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwg
aW50IGluZGV4KQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChjaGlsZExh
eWVyLCBpbmRleCk7CisgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyQ2x1dHRlcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBjaGlsZExheWVy
LCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
QmVsb3coY2hpbGRMYXllciwgc2libGluZyk7CisgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsK
K30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xh
eWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkQWJvdmUoY2hpbGRMYXllciwgc2libGluZyk7CisgICAgbm90ZVN1Ymxh
eWVyc0NoYW5nZWQoKTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6cmVwbGFjZUNo
aWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKK3sK
KyAgICBpZiAoR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCkp
IHsKKyAgICAgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRl
cjo6cmVtb3ZlRnJvbVBhcmVudCgpCit7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBzdGF0
aWNfY2FzdDxHcmFwaGljc0xheWVyQ2x1dHRlcio+KG1fcGFyZW50KS0+bm90ZVN1YmxheWVyc0No
YW5nZWQoKTsKKyAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnBsYXRmb3JtQ2x1dHRlckxheWVyUGFpbnRDb250ZW50
cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNsaXApCit7CisgICAg
cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgY2xpcCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NMYXllckNsdXR0ZXI6OnBsYXRmb3JtQ2x1dHRlckxheWVyQW5pbWF0aW9uU3RhcnRlZChk
b3VibGUgc3RhcnRUaW1lKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQt
Pm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgc3RhcnRUaW1lKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyQ2x1dHRlcjo6cmVwYWludExheWVyRGlydHlSZWN0cygpCit7CisgICAgaWYgKCFt
X2RpcnR5UmVjdHMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZGlydHlSZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAgZ3JhcGhpY3NMYXll
ckFjdG9ySW52YWxpZGF0ZVJlY3RhbmdsZShtX2xheWVyLmdldCgpLCBtX2RpcnR5UmVjdHNbaV0p
OworCisgICAgbV9kaXJ0eVJlY3RzLmNsZWFyKCk7Cit9CisKK0Zsb2F0UG9pbnQgR3JhcGhpY3NM
YXllckNsdXR0ZXI6OmNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKGZsb2F0JiBwYWdlU2Nh
bGUpIGNvbnN0Cit7CisgICAgcGFnZVNjYWxlID0gMTsKKworICAgIEZsb2F0UG9pbnQgb2Zmc2V0
OworICAgIGZvciAoY29uc3QgR3JhcGhpY3NMYXllciogY3VyckxheWVyID0gdGhpczsgY3Vyckxh
eWVyOyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChjdXJy
TGF5ZXItPmFwcGxpZXNQYWdlU2NhbGUoKSkgeworICAgICAgICAgICAgaWYgKGN1cnJMYXllci0+
Y2xpZW50KCkpCisgICAgICAgICAgICAgICAgcGFnZVNjYWxlID0gY3VyckxheWVyLT5wYWdlU2Nh
bGVGYWN0b3IoKTsKKyAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgIH0KKworICAg
ICAgICBvZmZzZXQgKz0gY3VyckxheWVyLT5wb3NpdGlvbigpOworICAgIH0KKworICAgIHJldHVy
biBGbG9hdFBvaW50KCk7Cit9CisKKy8vIGNhbGxlZCBmcm9tIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0
ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQorewor
ICAgIFRyYW5zZm9ybVN0YXRlIHN0YXRlKFRyYW5zZm9ybVN0YXRlOjpVbmFwcGx5SW52ZXJzZVRy
YW5zZm9ybURpcmVjdGlvbiwgRmxvYXRRdWFkKGNsaXBSZWN0KSk7CisgICAgcmVjdXJzaXZlQ29t
bWl0Q2hhbmdlcyhzdGF0ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnJlY3Vy
c2l2ZUNvbW1pdENoYW5nZXMoY29uc3QgVHJhbnNmb3JtU3RhdGUmIHN0YXRlLCBmbG9hdCBwYWdl
U2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIGJv
b2wgYWZmZWN0ZWRCeVBhZ2VTY2FsZSkKK3sKKyAgICAvLyBGSVhNRTogU2F2ZSB0aGUgc3RhdGUg
YmVmb3JlIHNlbmRpbmcgZG93biB0byBraWRzIGFuZCByZXN0b3JlIGl0IGFmdGVyCisgICAgVHJh
bnNmb3JtU3RhdGUgbG9jYWxTdGF0ZSA9IHN0YXRlOworCisgICAgaWYgKGFwcGxpZXNQYWdlU2Nh
bGUoKSkgeworICAgICAgICBwYWdlU2NhbGVGYWN0b3IgPSB0aGlzLT5wYWdlU2NhbGVGYWN0b3Io
KTsKKyAgICAgICAgYWZmZWN0ZWRCeVBhZ2VTY2FsZSA9IHRydWU7CisgICAgfQorCisgICAgLy8g
QWNjdW11bGF0ZSBhbiBvZmZzZXQgZnJvbSB0aGUgYW5jZXN0cmFsIHBpeGVsLWFsaWduZWQgbGF5
ZXIuCisgICAgRmxvYXRQb2ludCBiYXNlUmVsYXRpdmVQb3NpdGlvbiA9IHBvc2l0aW9uUmVsYXRp
dmVUb0Jhc2U7CisgICAgaWYgKGFmZmVjdGVkQnlQYWdlU2NhbGUpCisgICAgICAgIGJhc2VSZWxh
dGl2ZVBvc2l0aW9uICs9IG1fcG9zaXRpb247CisKKyAgICBjb21taXRMYXllckNoYW5nZXNCZWZv
cmVTdWJsYXllcnMocGFnZVNjYWxlRmFjdG9yLCBiYXNlUmVsYXRpdmVQb3NpdGlvbik7CisKKyAg
ICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExheWVycyA9IGNoaWxkcmVuKCk7
CisgICAgc2l6ZV90IG51bUNoaWxkcmVuID0gY2hpbGRMYXllcnMuc2l6ZSgpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgKytpKSB7CisgICAgICAgIEdyYXBoaWNz
TGF5ZXJDbHV0dGVyKiBjdXJDaGlsZCA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDbHV0dGVy
Kj4oY2hpbGRMYXllcnNbaV0pOworICAgICAgICBjdXJDaGlsZC0+cmVjdXJzaXZlQ29tbWl0Q2hh
bmdlcyhsb2NhbFN0YXRlLCBwYWdlU2NhbGVGYWN0b3IsIGJhc2VSZWxhdGl2ZVBvc2l0aW9uLCBh
ZmZlY3RlZEJ5UGFnZVNjYWxlKTsKKyAgICB9CisKKyAgICBjb21taXRMYXllckNoYW5nZXNBZnRl
clN1YmxheWVycygpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpmbHVzaENvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKK3sKKyAgICBmbG9hdCBwYWdlU2NhbGVGYWN0
b3I7CisgICAgRmxvYXRQb2ludCBvZmZzZXQgPSBjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRvQmFz
ZShwYWdlU2NhbGVGYWN0b3IpOworICAgIGNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVy
cyhwYWdlU2NhbGVGYWN0b3IsIG9mZnNldCk7CisgICAgY29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJT
dWJsYXllcnMoKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6Y29tbWl0TGF5ZXJD
aGFuZ2VzQWZ0ZXJTdWJsYXllcnMoKQoreworICAgIGlmICghbV91bmNvbW1pdHRlZENoYW5nZXMp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fdW5jb21taXR0ZWRDaGFuZ2VzID0gTm9DaGFuZ2U7
Cit9Cit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpub3RlU3VibGF5ZXJzQ2hhbmdlZCgpCit7
CisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKENoaWxkcmVuQ2hhbmdlZCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6Om5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChMYXllckNo
YW5nZUZsYWdzIGZsYWdzKQoreworICAgIGlmICghbV91bmNvbW1pdHRlZENoYW5nZXMgJiYgbV9j
bGllbnQpCisgICAgICAgIG1fY2xpZW50LT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOyAvLyBj
YWxsIFJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5Rmx1c2hSZXF1aXJlZAorCisgICAgbV91bmNv
bW1pdHRlZENoYW5nZXMgfD0gZmxhZ3M7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6
OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyhmbG9hdCBwYWdlU2NhbGVGYWN0b3Is
IGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpCit7CisgICAgaWYgKCFt
X3VuY29tbWl0dGVkQ2hhbmdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fdW5jb21t
aXR0ZWRDaGFuZ2VzICYgTmFtZUNoYW5nZWQpCisgICAgICAgIHVwZGF0ZUxheWVyTmFtZXMoKTsK
KworICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIENoaWxkcmVuQ2hhbmdlZCkKKyAgICAg
ICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CisKKyAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMg
JiBHZW9tZXRyeUNoYW5nZWQpCisgICAgICAgIHVwZGF0ZUdlb21ldHJ5KHBhZ2VTY2FsZUZhY3Rv
ciwgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CisKKyAgICBpZiAobV91bmNvbW1pdHRlZENoYW5n
ZXMgJiBUcmFuc2Zvcm1DaGFuZ2VkKQorICAgICAgICB1cGRhdGVUcmFuc2Zvcm0oKTsKKworICAg
IGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIERyYXdzQ29udGVudENoYW5nZWQpCisgICAgICAg
IHVwZGF0ZUxheWVyRHJhd3NDb250ZW50KHBhZ2VTY2FsZUZhY3RvciwgcG9zaXRpb25SZWxhdGl2
ZVRvQmFzZSk7CisKKyAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBEaXJ0eVJlY3RzQ2hh
bmdlZCkKKyAgICAgICAgcmVwYWludExheWVyRGlydHlSZWN0cygpOworfQorCit2b2lkIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpCit7CisgICAgRmxvYXRQb2lu
dCBzY2FsZWRQb3NpdGlvbjsKKyAgICBGbG9hdFBvaW50M0Qgc2NhbGVkQW5jaG9yUG9pbnQ7Cisg
ICAgRmxvYXRTaXplIHNjYWxlZFNpemU7CisKKyAgICAvLyBGSVhNRTogTmVlZCB0byBzdXBwb3J0
IHNjYWxpbmcKKyAgICBzY2FsZWRQb3NpdGlvbiA9IG1fcG9zaXRpb247CisgICAgc2NhbGVkQW5j
aG9yUG9pbnQgPSBtX2FuY2hvclBvaW50OworICAgIHNjYWxlZFNpemUgPSBtX3NpemU7CisKKyAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRCb3VuZHMobV9ib3VuZHNPcmlnaW4gLCBzY2FsZWRTaXplKTsK
KyAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9zaXRpb24oc2NhbGVkUG9zaXRpb24ueCgpICsgc2Nh
bGVkQW5jaG9yUG9pbnQueCgpICogc2NhbGVkU2l6ZS53aWR0aCgpLCBzY2FsZWRQb3NpdGlvbi55
KCkgKyBzY2FsZWRBbmNob3JQb2ludC55KCkgKiBzY2FsZWRTaXplLmhlaWdodCgpKTsKKworICAg
IGNsdXR0ZXJfYWN0b3Jfc2V0X3NpemUoQ0xVVFRFUl9BQ1RPUihtX2xheWVyLmdldCgpKSwgYWRq
dXN0ZWRCb3VuZHMud2lkdGgoKSwgYWRqdXN0ZWRCb3VuZHMuaGVpZ2h0KCkpOworICAgIGNsdXR0
ZXJfYWN0b3Jfc2V0X3Bvc2l0aW9uKENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSksIGFkanVz
dGVkUG9zaXRpb24ueCgpLCBhZGp1c3RlZFBvc2l0aW9uLnkoKSk7CisgICAgZ3JhcGhpY3NMYXll
ckFjdG9yU2V0QW5jaG9yUG9pbnQobV9sYXllci5nZXQoKSwgc2NhbGVkQW5jaG9yUG9pbnQueCgp
LCBzY2FsZWRBbmNob3JQb2ludC55KCksIHNjYWxlZEFuY2hvclBvaW50LnooKSk7Cit9CisKKy8v
IEVhY2ggR3JhcGhpY3NMYXllciBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgbGF5ZXIgaW4gdGhlIHBs
YXRmb3JtIHBvcnQuCisvLyBTbyB3aGVuZXZlciB0aGUgbGlzdCBvZiBjaGlsZCBsYXllciBjaGFu
Z2VzLCB0aGUgbGlzdCBvZiBHcmFwaGljc0xheWVyQWN0b3Igc2hvdWxkIGJlIHVwZGF0ZWQgYWNj
b3JkaW5nbHkuCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVTdWJsYXllckxpc3Qo
KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3Rvckxpc3QgbmV3U3VibGF5ZXJzOworICAgIGNvbnN0
IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGF5ZXJzID0gY2hpbGRyZW4oKTsKKworICAg
IGlmIChjaGlsZExheWVycy5zaXplKCkgPiAwKSB7CisgICAgICAgIHNpemVfdCBudW1DaGlsZHJl
biA9IGNoaWxkTGF5ZXJzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1DaGlsZHJlbjsgKytpKSB7CisgICAgICAgICAgICBHcmFwaGljc0xheWVyQ2x1dHRlciogY3Vy
Q2hpbGQgPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2x1dHRlcio+KGNoaWxkTGF5ZXJzW2ld
KTsKKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogY2hpbGRMYXllciA9IGN1ckNoaWxk
LT5sYXllckZvclN1cGVybGF5ZXIoKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KEdSQVBISUNTX0xB
WUVSX0lTX0FDVE9SKGNoaWxkTGF5ZXIpKTsKKyAgICAgICAgICAgIG5ld1N1YmxheWVycy5hcHBl
bmQoY2hpbGRMYXllcik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG5ld1N1YmxheWVycy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQ2x1dHRlckFjdG9y
KiBsYXllckFjdG9yID0gQ0xVVFRFUl9BQ1RPUihuZXdTdWJsYXllcnNbaV0uZ2V0KCkpOworICAg
ICAgICAgICAgQ2x1dHRlckFjdG9yKiBwYXJlbnRBY3RvciA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3Bh
cmVudChsYXllckFjdG9yKTsKKyAgICAgICAgICAgIGlmIChwYXJlbnRBY3RvcikKKyAgICAgICAg
ICAgICAgICBjbHV0dGVyX2NvbnRhaW5lcl9yZW1vdmVfYWN0b3IoQ0xVVFRFUl9DT05UQUlORVIo
cGFyZW50QWN0b3IpLCBsYXllckFjdG9yKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdyYXBo
aWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyhtX2xheWVyLmdldCgpLCBuZXdTdWJsYXllcnMpOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVMYXllck5hbWVzKCkKK3sKKyAg
ICBjbHV0dGVyX2FjdG9yX3NldF9uYW1lKENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSksIG5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBk
YXRlVHJhbnNmb3JtKCkKK3sKKyAgICBDb2dsTWF0cml4IG1hdHJpeCA9IG1fdHJhbnNmb3JtOwor
ICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zZm9ybShwcmltYXJ5TGF5ZXIoKSwgJm1hdHJp
eCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZUxheWVyRHJhd3NDb250
ZW50KGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxh
dGl2ZVRvQmFzZSkKK3sKKyAgICBpZiAobV9kcmF3c0NvbnRlbnQpIHsKKyAgICAgICAgZ3JhcGhp
Y3NMYXllckFjdG9yU2V0RHJhd3NDb250ZW50KG1fbGF5ZXIuZ2V0KCksIFRSVUUpOworICAgICAg
ICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBncmFwaGljc0xheWVy
QWN0b3JTZXREcmF3c0NvbnRlbnQobV9sYXllci5nZXQoKSwgRkFMU0UpOworICAgICAgICBncmFw
aGljc0xheWVyQWN0b3JTZXRTdXJmYWNlKG1fbGF5ZXIuZ2V0KCksIDApOworICAgIH0KKworICAg
IHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOworfQorCitHcmFwaGljc0xheWVyQWN0b3IqIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpsYXllckZvclN1cGVybGF5ZXIoKSBjb25zdAoreworICAgIHJldHVy
biBtX2xheWVyLmdldCgpOworfQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5o
CmluZGV4IDNlMTQyZTQ4N2RlNTBlY2Y4ZmVkMTQxZDQ1NjY1NDY0ZDQ3NDM5MjkuLmRmNjA4Njg3
NWY1ZDM3YjM3ODgxYmZmNDIxNDEzMGNiNDAyMDc2MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJD
bHV0dGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBDb2xsYWJv
cmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIENvbGxhYm9yYSBMdGQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDIzICszMSwxMTEgQEAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVy
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgorI2luY2x1ZGUgIkltYWdlLmgi
CisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNsdXR0ZXJMYXll
ckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKICNpbmNsdWRlIDxjbHV0
dGVyL2NsdXR0ZXIuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKK3R5cGVk
ZWYgc3RydWN0IF9HcmFwaGljc0xheWVyQWN0b3IgR3JhcGhpY3NMYXllckFjdG9yOworCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdyYXBoaWNzTGF5ZXJDbHV0dGVyIDogcHVibGljIEdy
YXBoaWNzTGF5ZXIgeworY2xhc3MgVHJhbnNmb3JtU3RhdGU7CisKK3R5cGVkZWYgVmVjdG9yPEdS
ZWZQdHI8R3JhcGhpY3NMYXllckFjdG9yPiA+IEdyYXBoaWNzTGF5ZXJBY3Rvckxpc3Q7CisKK2Ns
YXNzIEdyYXBoaWNzTGF5ZXJDbHV0dGVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIsIHB1YmxpYyBQ
bGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCB7CiBwdWJsaWM6CisgICAgZW51bSBMYXllclR5cGUg
eyBMYXllclR5cGVMYXllciwgTGF5ZXJUeXBlV2ViTGF5ZXIsIExheWVyVHlwZVZpZGVvTGF5ZXIs
IExheWVyVHlwZVRyYW5zZm9ybUxheWVyLCBMYXllclR5cGVSb290TGF5ZXIsIExheWVyVHlwZUN1
c3RvbSB9OworCiAgICAgR3JhcGhpY3NMYXllckNsdXR0ZXIoR3JhcGhpY3NMYXllckNsaWVudCop
OwogICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJDbHV0dGVyKCk7CiAKICAgICB2aXJ0dWFsIENs
dXR0ZXJBY3RvciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGRD
aGlsZChHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQXRJbmRleChH
cmFwaGljc0xheWVyKiwgaW50IGluZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBYm92
ZShHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciogc2libGluZyk7CisgICAgdmlydHVhbCB2
b2lkIGFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcp
OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CisgICAgdmlydHVhbCBib29s
IHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3
Q2hpbGQpOworICAgIHZpcnR1YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhp
Y3NMYXllcio+Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChHcmFwaGljc0xheWVyKik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYpOworCisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNv
bnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogCisg
ICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OworCisgICAgdm9pZCByZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IFRyYW5zZm9ybVN0YXRl
JiwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yID0gMSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25S
ZWxhdGl2ZVRvQmFzZSA9IEZsb2F0UG9pbnQoKSwgYm9vbCBhZmZlY3RlZEJ5UGFnZVNjYWxlID0g
ZmFsc2UpOworCiBwcml2YXRlOgotICAgIEdSZWZQdHI8Q2x1dHRlckFjdG9yPiBtX2xheWVyOwor
ICAgIEZsb2F0UG9pbnQgY29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UoZmxvYXQmIHBhZ2VT
Y2FsZSkgY29uc3Q7CisgICAgdm9pZCBjb21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMo
ZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZl
VG9CYXNlKTsKKyAgICB2b2lkIGNvbW1pdExheWVyQ2hhbmdlc0FmdGVyU3VibGF5ZXJzKCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DbHV0dGVyTGF5ZXJBbmltYXRpb25TdGFydGVkKGRv
dWJsZSBiZWdpblRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNsdXR0ZXJMYXllclBh
aW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCk7CisKKyAg
ICBHcmFwaGljc0xheWVyQWN0b3IqIHByaW1hcnlMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5
ZXIuZ2V0KCk7IH0KKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyRm9yU3VwZXJsYXllcigp
IGNvbnN0OworICAgIGVudW0gTGF5ZXJDaGFuZ2UgeworICAgICAgICBOb0NoYW5nZSA9IDAsCisg
ICAgICAgIE5hbWVDaGFuZ2VkID0gMSA8PCAxLAorICAgICAgICBDaGlsZHJlbkNoYW5nZWQgPSAx
IDw8IDIsIC8vIGFsc28gdXNlZCBmb3IgY29udGVudCBsYXllciwgYW5kIHByZXNlcnZlcy0zZCwg
YW5kIHNpemUgaWYgdGlsaW5nIGNoYW5nZXM/CisgICAgICAgIEdlb21ldHJ5Q2hhbmdlZCA9IDEg
PDwgMywKKyAgICAgICAgVHJhbnNmb3JtQ2hhbmdlZCA9IDEgPDwgNCwKKyAgICAgICAgQ2hpbGRy
ZW5UcmFuc2Zvcm1DaGFuZ2VkID0gMSA8PCA1LAorICAgICAgICBQcmVzZXJ2ZXMzRENoYW5nZWQg
PSAxIDw8IDYsCisgICAgICAgIE1hc2tzVG9Cb3VuZHNDaGFuZ2VkID0gMSA8PCA3LAorICAgICAg
ICBEcmF3c0NvbnRlbnRDaGFuZ2VkID0gMSA8PCA4LCAvLyBuZWVkIHRoaXM/CisgICAgICAgIEJh
Y2tncm91bmRDb2xvckNoYW5nZWQgPSAxIDw8IDksCisgICAgICAgIENvbnRlbnRzT3BhcXVlQ2hh
bmdlZCA9IDEgPDwgMTAsCisgICAgICAgIEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZWQgPSAxIDw8
IDExLAorICAgICAgICBPcGFjaXR5Q2hhbmdlZCA9IDEgPDwgMTIsCisgICAgICAgIEFuaW1hdGlv
bkNoYW5nZWQgPSAxIDw8IDEzLAorICAgICAgICBEaXJ0eVJlY3RzQ2hhbmdlZCA9IDEgPDwgMTQs
CisgICAgICAgIENvbnRlbnRzSW1hZ2VDaGFuZ2VkID0gMSA8PCAxNSwKKyAgICAgICAgQ29udGVu
dHNNZWRpYUxheWVyQ2hhbmdlZCA9IDEgPDwgMTYsCisgICAgICAgIENvbnRlbnRzQ2FudmFzTGF5
ZXJDaGFuZ2VkID0gMSA8PCAxNywKKyAgICAgICAgQ29udGVudHNSZWN0Q2hhbmdlZCA9IDEgPDwg
MTgsCisgICAgICAgIE1hc2tMYXllckNoYW5nZWQgPSAxIDw8IDE5LAorICAgICAgICBSZXBsaWNh
dGVkTGF5ZXJDaGFuZ2VkID0gMSA8PCAyMCwKKyAgICAgICAgQ29udGVudHNOZWVkc0Rpc3BsYXkg
PSAxIDw8IDIxLAorICAgICAgICBBY2NlbGVyYXRlc0RyYXdpbmdDaGFuZ2VkID0gMSA8PCAyMiwK
KyAgICAgICAgQ29udGVudHNTY2FsZUNoYW5nZWQgPSAxIDw8IDIzCisgICAgfTsKKworICAgIHR5
cGVkZWYgdW5zaWduZWQgTGF5ZXJDaGFuZ2VGbGFnczsKKyAgICB2b2lkIG5vdGVMYXllclByb3Bl
cnR5Q2hhbmdlZChMYXllckNoYW5nZUZsYWdzKTsKKyAgICB2b2lkIG5vdGVTdWJsYXllcnNDaGFu
Z2VkKCk7CisKKyAgICB2b2lkIHVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpOworICAgIHZvaWQg
dXBkYXRlTGF5ZXJOYW1lcygpOworICAgIHZvaWQgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CisgICAg
dm9pZCB1cGRhdGVHZW9tZXRyeShmbG9hdCBwaXhlbEFsaWdubWVudFNjYWxlLCBjb25zdCBGbG9h
dFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKKyAgICB2b2lkIHVwZGF0ZVRyYW5zZm9y
bSgpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQoZmxvYXQgcGl4ZWxBbGlnbm1l
bnRTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk7CisKKyAg
ICB2b2lkIHJlcGFpbnRMYXllckRpcnR5UmVjdHMoKTsKKworICAgIEdSZWZQdHI8R3JhcGhpY3NM
YXllckFjdG9yPiBtX2xheWVyOworCisgICAgVmVjdG9yPEZsb2F0UmVjdD4gbV9kaXJ0eVJlY3Rz
OworICAgIExheWVyQ2hhbmdlRmxhZ3MgbV91bmNvbW1pdHRlZENoYW5nZXM7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>