<?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>43942</bug_id>
          
          <creation_ts>2010-08-12 16:47:29 -0700</creation_ts>
          <short_desc>Textures and renderbuffers should be detached first before deletion if they are attached to framebuffers</short_desc>
          <delta_ts>2010-09-27 15:45:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>43820</dependson>
          <blocked>46667</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>kbr</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>264083</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-12 16:47:29 -0700</bug_when>
    <thetext>We implement the delayed delete for shaders and programs.  We should do the same for textures and renderbuffers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276849</commentid>
    <comment_count>1</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-09 16:49:51 -0700</bug_when>
    <thetext>According to GLES2 spec, textures and renderbuffers should be detached first before deletion if they are attached to the currently-bound framebuffer; for any other framebuffers, the detachment is the responsibility of the application.

I just sent out an email to the public_webgl email list, suggesting that we detach before delete no matter a framebuffer is bound or not.  Let&apos;s wait until we hear some feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279069</commentid>
    <comment_count>2</comment_count>
      <attachid>67585</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-14 12:10:21 -0700</bug_when>
    <thetext>Created attachment 67585
patch

The test will be uploaded to khronos after review (I also sent it to gman@google to review the test).

This patch fixes some bugs in object deletion behavior.  As for textures and renderbuffers, we only remove the attachment from the currently-bound framebuffer.  This will cause data inconsistency when we delete a texture/rbo that&apos;s bound to a non-currently-bound fbo and later query the currently bound object name of that fbo.  I guess we&apos;ll have to live with this bug.  At least the buggy behavior will be the same for webgl and gles 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279087</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-14 12:38:16 -0700</bug_when>
    <thetext>After the discussion on the public_webgl mailing list and side discussions with TransGaming about the behavior of object deletion when the object is still attached to another one (for example, the case where a texture is deleted, but is still the color attachment of a framebuffer), I think that the behavior should be slightly different. Consider the case where texture T is attached to framebuffer F, deleteTexture is called on T, and then the name of the color attachment of F is queried. Because T was attached to F at the time it was deleted, the texture object isn&apos;t actually deleted, but its name is immediately marked unused. Calls which generate new texture names might return this name.

I think the behavior should be that as soon as the texture is deleted, the WebGL implementation will no longer return its associated WebGLTexture* from any query calls, instead returning NULL. The entry in the internal table mapping that name to the WebGLTexture* needs to be either removed or somehow marked as invalid. Any subsequent creation operation which causes that name to be reused should just overwrite the entry in the table, regardless of whether the orphaned object is still alive. We should not track multiple versions of the same name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279103</commentid>
    <comment_count>4</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-14 12:57:22 -0700</bug_when>
    <thetext>The current behavior is this:  if a texture T is attached to framebuffer F (F is not currently bound) and T is deleted, now if query the attached object name of F, if the original name of T is not reused yet, null is returned; if the original name of T is reused, the new texture using the name is returned.  The latter case is buggy, but GLES 2 will behave the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279108</commentid>
    <comment_count>5</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-14 12:59:10 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; After the discussion on the public_webgl mailing list and side discussions with TransGaming about the behavior of object deletion when the object is still attached to another one (for example, the case where a texture is deleted, but is still the color attachment of a framebuffer), I think that the behavior should be slightly different. Consider the case where texture T is attached to framebuffer F, deleteTexture is called on T, and then the name of the color attachment of F is queried. Because T was attached to F at the time it was deleted, the texture object isn&apos;t actually deleted, but its name is immediately marked unused. Calls which generate new texture names might return this name.
&gt; 
&gt; I think the behavior should be that as soon as the texture is deleted, the WebGL implementation will no longer return its associated WebGLTexture* from any query calls, instead returning NULL. The entry in the internal table mapping that name to the WebGLTexture* needs to be either removed or somehow marked as invalid. Any subsequent creation operation which causes that name to be reused should just overwrite the entry in the table, regardless of whether the orphaned object is still alive. We should not track multiple versions of the same name.

Forget to mention, the texture name is always removed immediately upon deleteTexture call no matter what, so there will be no situation for multiple versions of the same name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284918</commentid>
    <comment_count>6</comment_count>
      <attachid>67585</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-24 19:18:37 -0700</bug_when>
    <thetext>Comment on attachment 67585
patch

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

I think the code looks generally good. r- for a documentation issue as well as one potential code cleanup I&apos;d like you to think about. Also, please check in the new test to the Khronos conformance suite.

&gt; WebCore/html/canvas/WebGLObject.h:66
&gt;          if (!m_attachmentCount &amp;&amp; m_deleted)

The test of m_deleted seems to be no longer necessary since it&apos;s being tested in deleteObjectImpl.

&gt; WebCore/html/canvas/WebGLObject.h:73
&gt;      virtual void deleteObjectImpl(Platform3DObject) = 0;

Please document that this may be called multiple times for the same object, and that isDeleted() needs to be tested in implementations when deciding whether to delete the OpenGL resource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285686</commentid>
    <comment_count>7</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-27 12:54:25 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 67585 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=67585&amp;action=review
&gt; 
&gt; I think the code looks generally good. r- for a documentation issue as well as one potential code cleanup I&apos;d like you to think about. Also, please check in the new test to the Khronos conformance suite.
&gt; 
&gt; &gt; WebCore/html/canvas/WebGLObject.h:66
&gt; &gt;          if (!m_attachmentCount &amp;&amp; m_deleted)
&gt; 
&gt; The test of m_deleted seems to be no longer necessary since it&apos;s being tested in deleteObjectImpl.

Per our off-line discussion, m_deleted will be left here for readability because detach and delete are two different events.

&gt; 
&gt; &gt; WebCore/html/canvas/WebGLObject.h:73
&gt; &gt;      virtual void deleteObjectImpl(Platform3DObject) = 0;
&gt; 
&gt; Please document that this may be called multiple times for the same object, and that isDeleted() needs to be tested in implementations when deciding whether to delete the OpenGL resource.

Will add.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285687</commentid>
    <comment_count>8</comment_count>
      <attachid>68944</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-27 12:55:07 -0700</bug_when>
    <thetext>Created attachment 68944
revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285689</commentid>
    <comment_count>9</comment_count>
      <attachid>68946</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-27 12:58:44 -0700</bug_when>
    <thetext>Created attachment 68946
revised patch: fix a bug in the comments.

The test has been committed into Khronos already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285742</commentid>
    <comment_count>10</comment_count>
      <attachid>68946</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-27 14:19:46 -0700</bug_when>
    <thetext>Comment on attachment 68946
revised patch: fix a bug in the comments.

Looks good. Thanks for persevering on this fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285748</commentid>
    <comment_count>11</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-27 14:28:16 -0700</bug_when>
    <thetext>Committed r68424: &lt;http://trac.webkit.org/changeset/68424&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67585</attachid>
            <date>2010-09-14 12:10:21 -0700</date>
            <delta_ts>2010-09-27 12:55:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>delete.patch</filename>
            <type>text/plain</type>
            <size>22614</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzQ4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDktMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0dXJl
cyBhbmQgcmVuZGVyYnVmZmVycyBzaG91bGQgYmUgZGV0YWNoZWQgZmlyc3QgYmVmb3JlIGRlbGV0
aW9uIGlmIHRoZXkgYXJlIGF0dGFjaGVkIHRvIGZyYW1lYnVmZmVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5NDIKKworICAgICAgICBUZXN0OiBm
YXN0L2NhbnZhcy93ZWJnbC9vYmplY3QtZGVsZXRpb24tYmVoYXZpb3VyLmh0bWwKKworICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
QnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKTogRGVsZXRlIHRoZSBvYmplY3Qgb25seSBvbmNlLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwOiBVc2UgUmVmUHRyIGZv
ciBhdHRhY2htZW50IFdlYkdMT2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVi
dWZmZXI6OldlYkdMRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1
ZmZlcjo6cmVtb3ZlQXR0YWNobWVudCk6IFJlbW92ZSBhbiBhdHRhY2htZW50IGRhdGEgcmVmLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6b25BdHRhY2hlZE9iamVjdENoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZlckZv
cm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5k
ZXJidWZmZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmg6IERl
Y2xhcmUgcmVtb3ZlQXR0YWNobWVudCgpLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpzZXRPYmplY3QpOiByZXNl
dCBkZWxldGUgZmxhZy4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xPYmplY3Q6Om9uRGV0YWNoZWQpOiBGaXggYSBidWcuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6aXNEZWxldGVkKTogRXhwb3NlIHRoZSBkZWxldGUg
ZmxhZy4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKTogRGV0YWNoIHNoYWRlcnMg
d2hlbiBkZWxldGluZyBhIHByb2dyYW0uCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJidWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJidWZmZXI6OmRlbGV0
ZU9iamVjdEltcGwpOiBEZWxldGUgdGhlIG9iamVjdCBvbmx5IG9uY2UuCisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIpOiBCaW5kIHRvIGludGVybmFs
IGZibyB3aGVuIGRlbGV0aW5nIHRoZSBjdXJyZW50bHktYm91bmQgZmJvLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIpOiBSZW1vdmUg
cmVuZGVyYnVmZmVyIGZyb20gY3VycmVudGx5LWJvdW5kIGZibyB1cG9uIGRlbGV0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKTogUmVt
b3ZlIHRleHR1cmUgZnJvbSBjdXJyZW50bHktYm91bmQgZmJvIHVwb24gZGVsZXRpb24uCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVzZVByb2dyYW0pOiBGaXggYSBj
b25kaXRpb24uCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xTaGFkZXI6OmRlbGV0ZU9iamVjdEltcGwpOiBEZWxldGUgdGhlIG9i
amVjdCBvbmx5IG9uY2UuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6ZGVsZXRlT2JqZWN0SW1wbCk6IERpdHRv
LgorCiAyMDEwLTA5LTE0ICBFdmFuIE1hcnRpbiAgPGV2YW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xC
dWZmZXIuY3BwCShyZXZpc2lvbiA2NzQ4MSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xC
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw4IEBAIFdlYkdMQnVmZmVyOjpX
ZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0MKIAogdm9pZCBXZWJHTEJ1ZmZlcjo6ZGVsZXRlT2Jq
ZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKLSAgICBjb250ZXh0KCktPmdyYXBo
aWNzQ29udGV4dDNEKCktPmRlbGV0ZUJ1ZmZlcihvYmplY3QpOworICAgIGlmICghaXNEZWxldGVk
KCkpCisgICAgICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlQnVmZmVy
KG9iamVjdCk7CiB9CiAKIGJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBs
KEFycmF5QnVmZmVyKiBhcnJheSwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxl
bmd0aCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2
aXNpb24gNjc0ODEpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAsNiBAQCBQYXNzUmVmUHRyPFdlYkdMRnJhbWVi
dWZmZXI+IFdlYkdMRnJhbWViCiAKIFdlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCiAgICAgOiBXZWJHTE9iamVjdChjdHgpCi0gICAg
LCBtX2NvbG9yQXR0YWNobWVudCgwKQotICAgICwgbV9kZXB0aEF0dGFjaG1lbnQoMCkKLSAgICAs
IG1fc3RlbmNpbEF0dGFjaG1lbnQoMCkKLSAgICAsIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCgw
KQogewogICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0
ZUZyYW1lYnVmZmVyKCkpOwogfQpAQCAtNzMsNiArNjksMjMgQEAgdm9pZCBXZWJHTEZyYW1lYnVm
ZmVyOjpzZXRBdHRhY2htZW50KHVucwogICAgIGluaXRpYWxpemVSZW5kZXJidWZmZXJzKCk7CiB9
CiAKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudChXZWJHTE9iamVjdCog
YXR0YWNobWVudCkKK3sKKyAgICBpZiAoIW9iamVjdCgpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKGF0dGFjaG1lbnQgPT0gbV9jb2xvckF0dGFjaG1lbnQuZ2V0KCkpCisgICAgICAgIG1fY29s
b3JBdHRhY2htZW50ID0gMDsKKyAgICBlbHNlIGlmIChhdHRhY2htZW50ID09IG1fZGVwdGhBdHRh
Y2htZW50LmdldCgpKQorICAgICAgICBtX2RlcHRoQXR0YWNobWVudCA9IDA7CisgICAgZWxzZSBp
ZiAoYXR0YWNobWVudCA9PSBtX3N0ZW5jaWxBdHRhY2htZW50LmdldCgpKQorICAgICAgICBtX3N0
ZW5jaWxBdHRhY2htZW50ID0gMDsKKyAgICBlbHNlIGlmIChhdHRhY2htZW50ID09IG1fZGVwdGhT
dGVuY2lsQXR0YWNobWVudC5nZXQoKSkKKyAgICAgICAgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50
ID0gMDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybjsKKyAgICBpbml0aWFsaXplUmVuZGVyYnVm
ZmVycygpOworfQorCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6Om9uQmluZCgpCiB7CiAgICAgaW5p
dGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKQEAgLTgzLDggKzk2LDggQEAgdm9pZCBXZWJHTEZyYW1l
YnVmZmVyOjpvbkF0dGFjaGVkT2JqZWN0QwogICAgIC8vIEN1cnJlbnRseSBvYmplY3QgPT0gMCBp
cyBub3QgY29uc2lkZXJlZCwgYnV0IHRoaXMgbWlnaHQgY2hhbmdlIGlmIHRoZQogICAgIC8vIGxp
ZmVzcGFuIG9mIFdlYkdMT2JqZWN0IGNoYW5nZXMuCiAgICAgaWYgKG9iamVjdAotICAgICAgICAm
JiAob2JqZWN0ID09IG1fY29sb3JBdHRhY2htZW50IHx8IG9iamVjdCA9PSBtX2RlcHRoQXR0YWNo
bWVudAotICAgICAgICAgICAgfHwgb2JqZWN0ID09IG1fc3RlbmNpbEF0dGFjaG1lbnQgfHwgb2Jq
ZWN0ID09IG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCkpCisgICAgICAgICYmIChvYmplY3QgPT0g
bV9jb2xvckF0dGFjaG1lbnQuZ2V0KCkgfHwgb2JqZWN0ID09IG1fZGVwdGhBdHRhY2htZW50Lmdl
dCgpCisgICAgICAgICAgICB8fCBvYmplY3QgPT0gbV9zdGVuY2lsQXR0YWNobWVudC5nZXQoKSB8
fCBvYmplY3QgPT0gbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpKSkKICAgICAgICAgaW5p
dGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKIH0KIApAQCAtOTIsNyArMTA1LDcgQEAgdW5zaWduZWQg
bG9uZyBXZWJHTEZyYW1lYnVmZmVyOjpnZXRDb2xvcgogewogICAgIGlmIChvYmplY3QoKSAmJiBt
X2NvbG9yQXR0YWNobWVudCAmJiBtX2NvbG9yQXR0YWNobWVudC0+b2JqZWN0KCkpIHsKICAgICAg
ICAgaWYgKG1fY29sb3JBdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpKSB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGZvcm1hdCA9IChyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVm
ZmVyKj4obV9jb2xvckF0dGFjaG1lbnQpKS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgZm9ybWF0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJi
dWZmZXIqPihtX2NvbG9yQXR0YWNobWVudC5nZXQoKSkpLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwog
ICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICAgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE0OgogICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
NV9BMToKQEAgLTEwMSwxNCArMTE0LDE5IEBAIHVuc2lnbmVkIGxvbmcgV2ViR0xGcmFtZWJ1ZmZl
cjo6Z2V0Q29sb3IKICAgICAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChtX2NvbG9yQXR0YWNobWVudC0+
aXNUZXh0dXJlKCkpCi0gICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xU
ZXh0dXJlKj4obV9jb2xvckF0dGFjaG1lbnQpKS0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7CisgICAg
ICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xUZXh0dXJlKj4obV9jb2xvckF0
dGFjaG1lbnQuZ2V0KCkpKS0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7CiAgICAgfQogICAgIHJldHVy
biAwOwogfQogCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZv
cm0zRE9iamVjdCBvYmplY3QpCiB7Ci0gICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgp
LT5kZWxldGVGcmFtZWJ1ZmZlcihvYmplY3QpOworICAgIGlmICghaXNEZWxldGVkKCkpCisgICAg
ICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlRnJhbWVidWZmZXIob2Jq
ZWN0KTsKKyAgICBtX2NvbG9yQXR0YWNobWVudCA9IDA7CisgICAgbV9kZXB0aEF0dGFjaG1lbnQg
PSAwOworICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQgPSAwOworICAgIG1fZGVwdGhTdGVuY2lsQXR0
YWNobWVudCA9IDA7CiB9CiAKIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aXNVbmluaXRpYWxpemVk
KFdlYkdMT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKQEAgLTEzMSwxOSArMTQ5LDE5IEBAIHZvaWQg
V2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRlcmIKICAgICAgICAgcmV0dXJuOwogICAg
IGJvb2wgaW5pdENvbG9yID0gZmFsc2UsIGluaXREZXB0aCA9IGZhbHNlLCBpbml0U3RlbmNpbCA9
IGZhbHNlOwogICAgIHVuc2lnbmVkIGxvbmcgbWFzayA9IDA7Ci0gICAgaWYgKGlzVW5pbml0aWFs
aXplZChtX2NvbG9yQXR0YWNobWVudCkpIHsKKyAgICBpZiAoaXNVbmluaXRpYWxpemVkKG1fY29s
b3JBdHRhY2htZW50LmdldCgpKSkgewogICAgICAgICBpbml0Q29sb3IgPSB0cnVlOwogICAgICAg
ICBtYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwogICAgIH0KLSAg
ICBpZiAoaXNVbmluaXRpYWxpemVkKG1fZGVwdGhBdHRhY2htZW50KSkgeworICAgIGlmIChpc1Vu
aW5pdGlhbGl6ZWQobV9kZXB0aEF0dGFjaG1lbnQuZ2V0KCkpKSB7CiAgICAgICAgIGluaXREZXB0
aCA9IHRydWU7CiAgICAgICAgIG1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZF
Ul9CSVQ7CiAgICAgfQotICAgIGlmIChpc1VuaW5pdGlhbGl6ZWQobV9zdGVuY2lsQXR0YWNobWVu
dCkpIHsKKyAgICBpZiAoaXNVbmluaXRpYWxpemVkKG1fc3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkp
KSB7CiAgICAgICAgIGluaXRTdGVuY2lsID0gdHJ1ZTsKICAgICAgICAgbWFzayB8PSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwogICAgIH0KLSAgICBpZiAoaXNVbmluaXRp
YWxpemVkKG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCkpIHsKKyAgICBpZiAoaXNVbmluaXRpYWxp
emVkKG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC5nZXQoKSkpIHsKICAgICAgICAgaW5pdERlcHRo
ID0gdHJ1ZTsKICAgICAgICAgaW5pdFN0ZW5jaWwgPSB0cnVlOwogICAgICAgICBtYXNrIHw9IChH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0JVRkZFUl9CSVQpOwpAQCAtMjA5LDE0ICsyMjcsMTQgQEAgdm9pZCBXZWJHTEZyYW1l
YnVmZmVyOjppbml0aWFsaXplUmVuZGVyYgogICAgICAgICBnM2QtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkRJVEhFUik7CiAKICAgICBpZiAoaW5pdENvbG9yKQotICAgICAgICBzZXRJbml0
aWFsaXplZChtX2NvbG9yQXR0YWNobWVudCk7CisgICAgICAgIHNldEluaXRpYWxpemVkKG1fY29s
b3JBdHRhY2htZW50LmdldCgpKTsKICAgICBpZiAoaW5pdERlcHRoICYmIGluaXRTdGVuY2lsICYm
IG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCkKLSAgICAgICAgc2V0SW5pdGlhbGl6ZWQobV9kZXB0
aFN0ZW5jaWxBdHRhY2htZW50KTsKKyAgICAgICAgc2V0SW5pdGlhbGl6ZWQobV9kZXB0aFN0ZW5j
aWxBdHRhY2htZW50LmdldCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKGluaXREZXB0aCkK
LSAgICAgICAgICAgIHNldEluaXRpYWxpemVkKG1fZGVwdGhBdHRhY2htZW50KTsKKyAgICAgICAg
ICAgIHNldEluaXRpYWxpemVkKG1fZGVwdGhBdHRhY2htZW50LmdldCgpKTsKICAgICAgICAgaWYg
KGluaXRTdGVuY2lsKQotICAgICAgICAgICAgc2V0SW5pdGlhbGl6ZWQobV9zdGVuY2lsQXR0YWNo
bWVudCk7CisgICAgICAgICAgICBzZXRJbml0aWFsaXplZChtX3N0ZW5jaWxBdHRhY2htZW50Lmdl
dCgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5oCShyZXZpc2lvbiA2NzQ4MSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIHB1YmxpYzoKICAgICBib29s
IGlzRGVwdGhTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9kZXB0aFN0ZW5jaWxB
dHRhY2htZW50ICYmIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b2JqZWN0KCkpOyB9CiAKICAg
ICB2b2lkIHNldEF0dGFjaG1lbnQodW5zaWduZWQgbG9uZywgV2ViR0xPYmplY3QqKTsKKyAgICAv
LyBJZiBhbiBvYmplY3QgaXMgYXR0YWNoZWQgdG8gdGhlIGZyYW1lYnVmZmVyLCByZW1vdmUgaXQu
CisgICAgdm9pZCByZW1vdmVBdHRhY2htZW50KFdlYkdMT2JqZWN0Kik7CiAKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCByaWdodCBhZnRlciBhIGZyYW1lYnVmZmVyIGlzIGJvdW5kLgog
ICAgIC8vIEJlY2F1c2UgcmVuZGVyYnVmZmVycyBhbmQgdGV4dHVyZXMgYXR0YWNoZWQgdG8gdGhl
IGZyYW1lYnVmZmVyIG1pZ2h0CkBAIC03MSwxMiArNzMsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHNldEluaXRpYWxpemVkKFdlYkdMT2JqZWN0Kik7CiAgICAgdm9pZCBpbml0aWFsaXplUmVuZGVy
YnVmZmVycygpOwogCi0gICAgLy8gVGhlc2Ugb2JqZWN0cyBhcmUga2VwdCBhbGl2ZSBieSB0aGUg
Z2xvYmFsIHRhYmxlIGluCi0gICAgLy8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LgotICAgIFdlYkdM
T2JqZWN0KiBtX2NvbG9yQXR0YWNobWVudDsKLSAgICBXZWJHTE9iamVjdCogbV9kZXB0aEF0dGFj
aG1lbnQ7Ci0gICAgV2ViR0xPYmplY3QqIG1fc3RlbmNpbEF0dGFjaG1lbnQ7Ci0gICAgV2ViR0xP
YmplY3QqIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudDsKKyAgICBSZWZQdHI8V2ViR0xPYmplY3Q+
IG1fY29sb3JBdHRhY2htZW50OworICAgIFJlZlB0cjxXZWJHTE9iamVjdD4gbV9kZXB0aEF0dGFj
aG1lbnQ7CisgICAgUmVmUHRyPFdlYkdMT2JqZWN0PiBtX3N0ZW5jaWxBdHRhY2htZW50OworICAg
IFJlZlB0cjxXZWJHTE9iamVjdD4gbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAJ
KHJldmlzaW9uIDY3NDgxKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAgdm9pZCBXZWJHTE9iamVjdDo6c2V0T2Jq
ZWN0KFBsYXRmb3JtM0RPYgogICAgICAgICAKICAgICBkZWxldGVPYmplY3QoKTsKICAgICBtX29i
amVjdCA9IG9iamVjdDsKKyAgICBtX2RlbGV0ZWQgPSBmYWxzZTsKIH0KIAogdm9pZCBXZWJHTE9i
amVjdDo6ZGVsZXRlT2JqZWN0KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgJKHJl
dmlzaW9uIDY3NDgxKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCwxMyArNjQsMTQgQEAgcHVibGljOgogICAgICAgICBpZiAobV9hdHRh
Y2htZW50Q291bnQpCiAgICAgICAgICAgICAtLW1fYXR0YWNobWVudENvdW50OwogICAgICAgICBp
ZiAoIW1fYXR0YWNobWVudENvdW50ICYmIG1fZGVsZXRlZCkKLSAgICAgICAgICAgIG1fb2JqZWN0
ID0gMDsKKyAgICAgICAgICAgIGRlbGV0ZU9iamVjdCgpOwogICAgIH0KICAgICB1bnNpZ25lZCBn
ZXRBdHRhY2htZW50Q291bnQoKSB7IHJldHVybiBtX2F0dGFjaG1lbnRDb3VudDsgfQogCiBwcm90
ZWN0ZWQ6CiAgICAgV2ViR0xPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIGJv
b2wgaXNEZWxldGVkKCkgeyByZXR1cm4gbV9kZWxldGVkOyB9CiAKIHByaXZhdGU6CiAgICAgUGxh
dGZvcm0zRE9iamVjdCBtX29iamVjdDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5jcHAJKHJldmlzaW9uIDY3NDgxKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dy
YW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMiArNDcsMTcgQEAgV2ViR0xQcm9ncmFtOjpX
ZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbgogCiB2b2lkIFdlYkdMUHJvZ3JhbTo6ZGVsZXRlT2Jq
ZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iaikKIHsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNz
Q29udGV4dDNEKCktPmRlbGV0ZVByb2dyYW0ob2JqKTsKLSAgICBpZiAoIW9iamVjdCgpKSB7Ci0g
ICAgICAgIGlmIChtX3ZlcnRleFNoYWRlcikKKyAgICBpZiAoIWlzRGVsZXRlZCgpKQorICAgICAg
ICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVByb2dyYW0ob2JqKTsKKyAg
ICBpZiAoIWdldEF0dGFjaG1lbnRDb3VudCgpKSB7CisgICAgICAgIGlmIChtX3ZlcnRleFNoYWRl
cikgewogICAgICAgICAgICAgbV92ZXJ0ZXhTaGFkZXItPm9uRGV0YWNoZWQoKTsKLSAgICAgICAg
aWYgKG1fZnJhZ21lbnRTaGFkZXIpCisgICAgICAgICAgICBtX3ZlcnRleFNoYWRlciA9IDA7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG1fZnJhZ21lbnRTaGFkZXIpIHsKICAgICAgICAgICAgIG1f
ZnJhZ21lbnRTaGFkZXItPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgICAgIG1fZnJhZ21lbnRTaGFk
ZXIgPSAwOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyYnVmZmVyLmNwcAkocmV2aXNpb24gNjc0ODEpCisrKyBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
OCBAQCBXZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViCiAKIHZvaWQgV2Vi
R0xSZW5kZXJidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvYmplY3Qp
CiB7Ci0gICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVSZW5kZXJidWZm
ZXIob2JqZWN0KTsKKyAgICBpZiAoIWlzRGVsZXRlZCgpKQorICAgICAgICBjb250ZXh0KCktPmdy
YXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVJlbmRlcmJ1ZmZlcihvYmplY3QpOwogfQogCiB9Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShy
ZXZpc2lvbiA2NzQ4MSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM1LDcgKzYzNSwxMSBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWViCiB7CiAgICAgaWYgKCFmcmFtZWJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuOwotICAgIAorICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX2ZyYW1lYnVmZmVy
QmluZGluZykgeworICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7CisgICAgICAgIC8v
IEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBiaW5kIGJhY2sgdG8gaW50ZXJu
YWwgZmJvLgorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgIH0KICAgICBmcmFtZWJ1ZmZlci0+ZGVsZXRlT2Jq
ZWN0KCk7CiB9CiAKQEAgLTY1NiwxMCArNjYwLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVSZW5kZXIKIHsKICAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKICAgICAgICAgcmV0
dXJuOwotICAgIAorICAgIGlmIChyZW5kZXJidWZmZXIgPT0gbV9yZW5kZXJidWZmZXJCaW5kaW5n
KQorICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSAwOwogICAgIHJlbmRlcmJ1ZmZlci0+
ZGVsZXRlT2JqZWN0KCk7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BdHRhY2hlZE9iamVjdENoYW5nZShyZW5kZXJidWZmZXIp
OworICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudChyZW5kZXJi
dWZmZXIpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlU2hhZGVyKFdl
YkdMU2hhZGVyKiBzaGFkZXIpCkBAIC02NzcsNyArNjgyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZVRleHR1cgogICAgIAogICAgIHRleHR1cmUtPmRlbGV0ZU9iamVjdCgp
OwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9uQXR0YWNoZWRPYmplY3RDaGFuZ2UodGV4dHVyZSk7CisgICAgICAgIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50KHRleHR1cmUpOwogfQogCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYykKQEAgLTI3MDMs
NyArMjcwOCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKFcKICAg
ICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoKTsKICAgICAgICAgbV9jdXJy
ZW50UHJvZ3JhbSA9IHByb2dyYW07CiAgICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShvYmpl
Y3RPclplcm8ocHJvZ3JhbSkpOwotICAgICAgICBpZiAocHJvZ3JhbSkKKyAgICAgICAgaWYgKHBy
b2dyYW0gJiYgcHJvZ3JhbS0+b2JqZWN0KCkpCiAgICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFj
aGVkKCk7CiAgICAgfQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAkocmV2aXNpb24gNjc0ODEpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyAr
NDcsOCBAQCBXZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDCiAKIHZvaWQg
V2ViR0xTaGFkZXI6OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiB7
Ci0gICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVTaGFkZXIob2JqZWN0
KTsKKyAgICBpZiAoIWlzRGVsZXRlZCgpKQorICAgICAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmRlbGV0ZVNoYWRlcihvYmplY3QpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiA2NzQ4MSkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCiAKKyNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVy
LmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTIwMSw3ICsyMDIsOCBAQCBib29sIFdlYkdMVGV4dHVyZTo6bmVlZFRvVXNlQmxh
Y2tUZXh0dXJlCiAKIHZvaWQgV2ViR0xUZXh0dXJlOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3Jt
M0RPYmplY3Qgb2JqZWN0KQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
ZGVsZXRlVGV4dHVyZShvYmplY3QpOworICAgIGlmICghaXNEZWxldGVkKCkpCisgICAgICAgIGNv
bnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlVGV4dHVyZShvYmplY3QpOwogfQog
CiBpbnQgV2ViR0xUZXh0dXJlOjptYXBUYXJnZXRUb0luZGV4KHVuc2lnbmVkIGxvbmcgdGFyZ2V0
KQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gNjc0ODIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOS0xNCAgWmhlbnlhbyBNbyAgPHpt
b0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRleHR1cmVzIGFuZCByZW5kZXJidWZmZXJzIHNob3VsZCBiZSBkZXRhY2hlZCBmaXJz
dCBiZWZvcmUgZGVsZXRpb24gaWYgdGhleSBhcmUgYXR0YWNoZWQgdG8gZnJhbWVidWZmZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzk0MgorCisg
ICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvb2JqZWN0LWRlbGV0aW9uLWJlaGF2aW91ci1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL29iamVjdC1kZWxl
dGlvbi1iZWhhdmlvdXIuaHRtbDogQWRkZWQuCisKIDIwMTAtMDktMTQgIFRvbnkgQ2hhbmcgIDx0
b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZW1vdmUgdGVzdHMgdGhh
dCBhcmUgbm93IHBhc3NpbmcgYWZ0ZXIgTm9lbCBHb3Jkb24ncwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvb2JqZWN0LWRlbGV0aW9uLWJlaGF2aW91ci1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvb2JqZWN0LWRlbGV0
aW9uLWJlaGF2aW91ci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9vYmplY3QtZGVsZXRpb24tYmVoYXZpb3VyLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorVGVzdHMgZGVsZXRpb24gYmVoYXZpb3IgZm9y
IHRleHR1cmUsIHJlbmRlcmJ1ZmZlciwgc2hhZGVyLCBhbmQgcHJvZ3JhbQorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworc2hhZGVyIGFuZCBwcm9ncmFtIGRlbGV0aW9uCitQQVNTIHZl
cnRleCBzaGFkZXIgbG9hZGVkCitQQVNTIGZyYWdtZW50IHNoYWRlciBsb2FkZWQKK1BBU1MgZ2wu
YXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcikgd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUi4KK1BBU1MgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKSB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgorUEFTUyBnbC5saW5rUHJvZ3JhbShwcm9ncmFt
KSB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgorUEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1l
dGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0cnVlCitQQVNTIGdsLnVzZVByb2dyYW0o
cHJvZ3JhbSkgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KK1BBU1MgZ2wuZGVsZXRlU2hh
ZGVyKHZlcnRleFNoYWRlcikgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KK1BBU1MgZ2wu
aXNTaGFkZXIodmVydGV4U2hhZGVyKSBpcyB0cnVlCitQQVNTIGdsLmdldFNoYWRlclBhcmFtZXRl
cih2ZXJ0ZXhTaGFkZXIsIGdsLkRFTEVURV9TVEFUVVMpIGlzIHRydWUKK1BBU1MgZ2wuZGV0YWNo
U2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcikgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
Ui4KK1BBU1MgZ2wuaXNTaGFkZXIodmVydGV4U2hhZGVyKSBpcyBmYWxzZQorUEFTUyBnbC5kZWxl
dGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCitQ
QVNTIGdsLmlzU2hhZGVyKGZyYWdtZW50U2hhZGVyKSBpcyB0cnVlCitQQVNTIGdsLmdldFNoYWRl
clBhcmFtZXRlcihmcmFnbWVudFNoYWRlciwgZ2wuREVMRVRFX1NUQVRVUykgaXMgdHJ1ZQorUEFT
UyBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Iu
CitQQVNTIGdsLmlzUHJvZ3JhbShwcm9ncmFtKSBpcyB0cnVlCitQQVNTIGdsLmdldFByb2dyYW1Q
YXJhbWV0ZXIocHJvZ3JhbSwgZ2wuREVMRVRFX1NUQVRVUykgaXMgdHJ1ZQorUEFTUyBnbC51c2VQ
cm9ncmFtKG51bGwpIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCitQQVNTIGdsLmlzUHJv
Z3JhbShwcm9ncmFtKSBpcyBmYWxzZQorUEFTUyBnbC5pc1NoYWRlcihmcmFnbWVudFNoYWRlcikg
aXMgZmFsc2UKKwordGV4dHVyZSBkZWxldGlvbgorUEFTUyBnbC5iaW5kRnJhbWVidWZmZXIoZ2wu
RlJBTUVCVUZGRVIsIGZibykgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KK1BBU1MgZ2wu
YmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KSB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SLgorUEFTUyBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09M
T1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRleCwgMCkgd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUi4KK1BBU1MgZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKGds
LkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfTkFNRSkgaXMgdGV4CitQQVNTIGdsLmRlbGV0ZVRleHR1cmUodGV4KSB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgorUEFTUyBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FKSBpcyBudWxsCitQQVNTIGdsLmlzVGV4dHVy
ZSh0ZXgpIGlzIGZhbHNlCisKK3JlbmRlcmJ1ZmZlciBkZWxldGlvbgorUEFTUyBnbC5iaW5kUmVu
ZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgcmJvKSB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SLgorUEFTUyBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wu
Q09MT1JfQVRUQUNITUVOVDAsIGdsLlJFTkRFUkJVRkZFUiwgcmJvKSB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SLgorUEFTUyBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIo
Z2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX09CSkVDVF9OQU1FKSBpcyByYm8KK1BBU1MgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJi
bykgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KK1BBU1MgZ2wuZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwg
Z2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSkgaXMgbnVsbAorUEFTUyBnbC5p
c1JlbmRlcmJ1ZmZlcihyYm8pIGlzIGZhbHNlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvb2JqZWN0LWRlbGV0aW9uLWJlaGF2aW91ci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL29iamVjdC1kZWxldGlvbi1iZWhhdmlvdXIuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29iamVjdC1kZWxldGlv
bi1iZWhhdmlvdXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0
cyBkZWxldGlvbiBiZWhhdmlvciBmb3IgdGV4dHVyZSwgcmVuZGVyYnVmZmVyLCBzaGFkZXIsIGFu
ZCBwcm9ncmFtIik7CisKK3ZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsKK3ZhciBnbCA9IHd0dS5j
cmVhdGUzRENvbnRleHQoKTsKK3ZhciBzaG91bGRHZW5lcmF0ZUdMRXJyb3IgPSB3dHUuc2hvdWxk
R2VuZXJhdGVHTEVycm9yOworCitkZWJ1ZygiIik7CitkZWJ1Zygic2hhZGVyIGFuZCBwcm9ncmFt
IGRlbGV0aW9uIik7CisKK3ZhciB2ZXJ0ZXhTaGFkZXIgPSB3dHUubG9hZFN0YW5kYXJkVmVydGV4
U2hhZGVyKGdsKTsKK2Fzc2VydE1zZyh2ZXJ0ZXhTaGFkZXIsICJ2ZXJ0ZXggc2hhZGVyIGxvYWRl
ZCIpOwordmFyIGZyYWdtZW50U2hhZGVyID0gd3R1LmxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVy
KGdsKTsKK2Fzc2VydE1zZyhmcmFnbWVudFNoYWRlciwgImZyYWdtZW50IHNoYWRlciBsb2FkZWQi
KTsKKwordmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CitzaG91bGRHZW5lcmF0ZUdM
RXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNo
YWRlcikiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihnbCwgZ2wuTk9fRVJST1IsICJnbC5hdHRh
Y2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpIik7CitzaG91bGRHZW5lcmF0ZUdMRXJy
b3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSkiKTsKK3Nob3VsZEJl
VHJ1ZSgiZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykiKTsK
K3Nob3VsZEdlbmVyYXRlR0xFcnJvcihnbCwgZ2wuTk9fRVJST1IsICJnbC51c2VQcm9ncmFtKHBy
b2dyYW0pIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wuZGVs
ZXRlU2hhZGVyKHZlcnRleFNoYWRlcikiKTsKK3Nob3VsZEJlVHJ1ZSgiZ2wuaXNTaGFkZXIodmVy
dGV4U2hhZGVyKSIpOworc2hvdWxkQmVUcnVlKCJnbC5nZXRTaGFkZXJQYXJhbWV0ZXIodmVydGV4
U2hhZGVyLCBnbC5ERUxFVEVfU1RBVFVTKSIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGdsLCBn
bC5OT19FUlJPUiwgImdsLmRldGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpIik7Citz
aG91bGRCZUZhbHNlKCJnbC5pc1NoYWRlcih2ZXJ0ZXhTaGFkZXIpIik7CitzaG91bGRHZW5lcmF0
ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wuZGVsZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVy
KSIpOworc2hvdWxkQmVUcnVlKCJnbC5pc1NoYWRlcihmcmFnbWVudFNoYWRlcikiKTsKK3Nob3Vs
ZEJlVHJ1ZSgiZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZyYWdtZW50U2hhZGVyLCBnbC5ERUxFVEVf
U1RBVFVTKSIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGdsLCBnbC5OT19FUlJPUiwgImdsLmRl
bGV0ZVByb2dyYW0ocHJvZ3JhbSkiKTsKK3Nob3VsZEJlVHJ1ZSgiZ2wuaXNQcm9ncmFtKHByb2dy
YW0pIik7CitzaG91bGRCZVRydWUoImdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wu
REVMRVRFX1NUQVRVUykiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihnbCwgZ2wuTk9fRVJST1Is
ICJnbC51c2VQcm9ncmFtKG51bGwpIik7CitzaG91bGRCZUZhbHNlKCJnbC5pc1Byb2dyYW0ocHJv
Z3JhbSkiKTsKK3Nob3VsZEJlRmFsc2UoImdsLmlzU2hhZGVyKGZyYWdtZW50U2hhZGVyKSIpOwor
CitkZWJ1ZygiIik7CitkZWJ1ZygidGV4dHVyZSBkZWxldGlvbiIpOworCit2YXIgZmJvID0gZ2wu
Y3JlYXRlRnJhbWVidWZmZXIoKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihnbCwgZ2wuTk9fRVJS
T1IsICJnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZibykiKTsKKwordmFyIHRl
eCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihnbCwgZ2wuTk9f
RVJST1IsICJnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpIik7CitzaG91bGRHZW5l
cmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wu
RlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5URVhUVVJFXzJELCB0ZXgsIDAp
Iik7CitzaG91bGRCZSgiZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZS
QU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9PQkpFQ1RfTkFNRSkiLCAidGV4Iik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5P
X0VSUk9SLCAiZ2wuZGVsZXRlVGV4dHVyZSh0ZXgpIik7CisvLyBEZWxldGluZyBhIHRleHR1cmUg
Ym91bmQgdG8gdGhlIGN1cnJlbnRseS1ib3VuZCBmYm8gaXMgdGhlIHNhbWUgYXMKKy8vIGRldGFj
aGluZyB0aGUgdGV4dHVlIGZyb20gZmJvIGZpcnN0LCB0aGVuIGRlbGV0ZSB0aGUgdGV4dHVyZS4K
K3Nob3VsZEJlTnVsbCgiZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZS
QU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9PQkpFQ1RfTkFNRSkiKTsKK3Nob3VsZEJlRmFsc2UoImdsLmlzVGV4dHVyZSh0ZXgpIik7CisK
K2RlYnVnKCIiKTsKK2RlYnVnKCJyZW5kZXJidWZmZXIgZGVsZXRpb24iKTsKKwordmFyIHJibyA9
IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGdsLCBnbC5O
T19FUlJPUiwgImdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCByYm8pIik7Citz
aG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wuZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5SRU5ERVJC
VUZGRVIsIHJibykiKTsKK3Nob3VsZEJlKCJnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FKSIsICJyYm8iKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJv
cihnbCwgZ2wuTk9fRVJST1IsICJnbC5kZWxldGVSZW5kZXJidWZmZXIocmJvKSIpOworLy8gRGVs
ZXRpbmcgYSByZW5kZXJidWZmZXIgYm91bmQgdG8gdGhlIGN1cnJlbnRseS1ib3VuZCBmYm8gaXMg
dGhlIHNhbWUgYXMKKy8vIGRldGFjaGluZyB0aGUgcmVuZGVyYnVmZmVyIGZyb20gZmJvIGZpcnN0
LCB0aGVuIGRlbGV0ZSB0aGUgcmVuZGVyYnVmZmVyLgorc2hvdWxkQmVOdWxsKCJnbC5nZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFD
SE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FKSIpOworc2hvdWxk
QmVGYWxzZSgiZ2wuaXNSZW5kZXJidWZmZXIocmJvKSIpOworCitzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="56922"
          type_id="1"
          status="-"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="56923"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68944</attachid>
            <date>2010-09-27 12:55:07 -0700</date>
            <delta_ts>2010-09-27 12:58:44 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>delete.patch</filename>
            <type>text/plain</type>
            <size>23493</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODQxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDktMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0dXJl
cyBhbmQgcmVuZGVyYnVmZmVycyBzaG91bGQgYmUgZGV0YWNoZWQgZmlyc3QgYmVmb3JlIGRlbGV0
aW9uIGlmIHRoZXkgYXJlIGF0dGFjaGVkIHRvIGZyYW1lYnVmZmVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5NDIKKworICAgICAgICBUZXN0OiBm
YXN0L2NhbnZhcy93ZWJnbC9vYmplY3QtZGVsZXRpb24tYmVoYXZpb3VyLmh0bWwKKworICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
QnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKTogRGVsZXRlIHRoZSBvYmplY3Qgb25seSBvbmNlLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwOiBVc2UgUmVmUHRyIGZv
ciBhdHRhY2htZW50IFdlYkdMT2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVi
dWZmZXI6OldlYkdMRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1
ZmZlcjo6cmVtb3ZlQXR0YWNobWVudCk6IFJlbW92ZSBhbiBhdHRhY2htZW50IGRhdGEgcmVmLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6b25BdHRhY2hlZE9iamVjdENoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZlckZv
cm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5k
ZXJidWZmZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmg6IERl
Y2xhcmUgcmVtb3ZlQXR0YWNobWVudCgpLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpzZXRPYmplY3QpOiBNYWtl
IGl0IHByb3RlY3RlZCBhbmQgY2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gaW5pdGlhbGl6aW5nLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTE9iamVjdDo6b25EZXRhY2hlZCk6IEZpeCBhIGJ1Zy4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMT2JqZWN0Ojppc0RlbGV0ZWQpOiBFeHBvc2UgdGhlIGRlbGV0ZSBmbGFnLgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFBy
b2dyYW06OmRlbGV0ZU9iamVjdEltcGwpOiBEZXRhY2ggc2hhZGVycyB3aGVuIGRlbGV0aW5nIGEg
cHJvZ3JhbS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbCk6IERl
bGV0ZSB0aGUgb2JqZWN0IG9ubHkgb25jZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcik6IEJpbmQgdG8gaW50ZXJuYWwgZmJvIHdoZW4gZGVsZXRp
bmcgdGhlIGN1cnJlbnRseS1ib3VuZCBmYm8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IFJlbW92ZSByZW5kZXJidWZmZXIgZnJv
bSBjdXJyZW50bHktYm91bmQgZmJvIHVwb24gZGVsZXRpb24uCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRleHR1cmUpOiBSZW1vdmUgdGV4dHVyZSBmcm9t
IGN1cnJlbnRseS1ib3VuZCBmYm8gdXBvbiBkZWxldGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbSk6IEZpeCBhIGNvbmRpdGlvbi4KKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFNoYWRlcjo6ZGVsZXRlT2JqZWN0SW1wbCk6IERlbGV0ZSB0aGUgb2JqZWN0IG9ubHkgb25jZS4K
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xUZXh0dXJlOjpkZWxldGVPYmplY3RJbXBsKTogRGl0dG8uCisKIDIwMTAtMDktMjcg
IE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IENocmlzIEZsZWl6YWNoLgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZl
ci5jcHAJKHJldmlzaW9uIDY4NDAxKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDggQEAgV2ViR0xCdWZmZXI6OldlYkdM
QnVmZmVyKFdlYkdMUmVuZGVyaW5nQwogCiB2b2lkIFdlYkdMQnVmZmVyOjpkZWxldGVPYmplY3RJ
bXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3ND
b250ZXh0M0QoKS0+ZGVsZXRlQnVmZmVyKG9iamVjdCk7CisgICAgaWYgKCFpc0RlbGV0ZWQoKSkK
KyAgICAgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVCdWZmZXIob2Jq
ZWN0KTsKIH0KIAogYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0YUltcGwoQXJy
YXlCdWZmZXIqIGFycmF5LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3Ro
KQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZpc2lv
biA2ODQwMSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDEwICs0MCw2IEBAIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZl
cj4gV2ViR0xGcmFtZWIKIAogV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xGcmFtZWJ1ZmZlcihXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKICAgICA6IFdlYkdMT2JqZWN0KGN0eCkKLSAgICAsIG1f
Y29sb3JBdHRhY2htZW50KDApCi0gICAgLCBtX2RlcHRoQXR0YWNobWVudCgwKQotICAgICwgbV9z
dGVuY2lsQXR0YWNobWVudCgwKQotICAgICwgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50KDApCiB7
CiAgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlRnJh
bWVidWZmZXIoKSk7CiB9CkBAIC03Myw2ICs2OSwyMyBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6
OnNldEF0dGFjaG1lbnQodW5zCiAgICAgaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKIH0KIAor
dm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50KFdlYkdMT2JqZWN0KiBhdHRh
Y2htZW50KQoreworICAgIGlmICghb2JqZWN0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
YXR0YWNobWVudCA9PSBtX2NvbG9yQXR0YWNobWVudC5nZXQoKSkKKyAgICAgICAgbV9jb2xvckF0
dGFjaG1lbnQgPSAwOworICAgIGVsc2UgaWYgKGF0dGFjaG1lbnQgPT0gbV9kZXB0aEF0dGFjaG1l
bnQuZ2V0KCkpCisgICAgICAgIG1fZGVwdGhBdHRhY2htZW50ID0gMDsKKyAgICBlbHNlIGlmIChh
dHRhY2htZW50ID09IG1fc3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpCisgICAgICAgIG1fc3RlbmNp
bEF0dGFjaG1lbnQgPSAwOworICAgIGVsc2UgaWYgKGF0dGFjaG1lbnQgPT0gbV9kZXB0aFN0ZW5j
aWxBdHRhY2htZW50LmdldCgpKQorICAgICAgICBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSAw
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworICAgIGluaXRpYWxpemVSZW5kZXJidWZmZXJz
KCk7Cit9CisKIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6b25CaW5kKCkKIHsKICAgICBpbml0aWFs
aXplUmVuZGVyYnVmZmVycygpOwpAQCAtODMsOCArOTYsOCBAQCB2b2lkIFdlYkdMRnJhbWVidWZm
ZXI6Om9uQXR0YWNoZWRPYmplY3RDCiAgICAgLy8gQ3VycmVudGx5IG9iamVjdCA9PSAwIGlzIG5v
dCBjb25zaWRlcmVkLCBidXQgdGhpcyBtaWdodCBjaGFuZ2UgaWYgdGhlCiAgICAgLy8gbGlmZXNw
YW4gb2YgV2ViR0xPYmplY3QgY2hhbmdlcy4KICAgICBpZiAob2JqZWN0Ci0gICAgICAgICYmIChv
YmplY3QgPT0gbV9jb2xvckF0dGFjaG1lbnQgfHwgb2JqZWN0ID09IG1fZGVwdGhBdHRhY2htZW50
Ci0gICAgICAgICAgICB8fCBvYmplY3QgPT0gbV9zdGVuY2lsQXR0YWNobWVudCB8fCBvYmplY3Qg
PT0gbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50KSkKKyAgICAgICAgJiYgKG9iamVjdCA9PSBtX2Nv
bG9yQXR0YWNobWVudC5nZXQoKSB8fCBvYmplY3QgPT0gbV9kZXB0aEF0dGFjaG1lbnQuZ2V0KCkK
KyAgICAgICAgICAgIHx8IG9iamVjdCA9PSBtX3N0ZW5jaWxBdHRhY2htZW50LmdldCgpIHx8IG9i
amVjdCA9PSBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpKQogICAgICAgICBpbml0aWFs
aXplUmVuZGVyYnVmZmVycygpOwogfQogCkBAIC05Miw3ICsxMDUsNyBAQCB1bnNpZ25lZCBsb25n
IFdlYkdMRnJhbWVidWZmZXI6OmdldENvbG9yCiB7CiAgICAgaWYgKG9iamVjdCgpICYmIG1fY29s
b3JBdHRhY2htZW50ICYmIG1fY29sb3JBdHRhY2htZW50LT5vYmplY3QoKSkgewogICAgICAgICBp
ZiAobV9jb2xvckF0dGFjaG1lbnQtPmlzUmVuZGVyYnVmZmVyKCkpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgZm9ybWF0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIq
PihtX2NvbG9yQXR0YWNobWVudCkpLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAg
dW5zaWduZWQgbG9uZyBmb3JtYXQgPSAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZl
cio+KG1fY29sb3JBdHRhY2htZW50LmdldCgpKSktPmdldEludGVybmFsRm9ybWF0KCk7CiAgICAg
ICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTQ6CiAgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0Ex
OgpAQCAtMTAxLDE0ICsxMTQsMTkgQEAgdW5zaWduZWQgbG9uZyBXZWJHTEZyYW1lYnVmZmVyOjpn
ZXRDb2xvcgogICAgICAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG1fY29sb3JBdHRhY2htZW50LT5pc1Rl
eHR1cmUoKSkKLSAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1
cmUqPihtX2NvbG9yQXR0YWNobWVudCkpLT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKKyAgICAgICAg
ICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihtX2NvbG9yQXR0YWNo
bWVudC5nZXQoKSkpLT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKICAgICB9CiAgICAgcmV0dXJuIDA7
CiB9CiAKIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNE
T2JqZWN0IG9iamVjdCkKIHsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRl
bGV0ZUZyYW1lYnVmZmVyKG9iamVjdCk7CisgICAgaWYgKCFpc0RlbGV0ZWQoKSkKKyAgICAgICAg
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVGcmFtZWJ1ZmZlcihvYmplY3Qp
OworICAgIG1fY29sb3JBdHRhY2htZW50ID0gMDsKKyAgICBtX2RlcHRoQXR0YWNobWVudCA9IDA7
CisgICAgbV9zdGVuY2lsQXR0YWNobWVudCA9IDA7CisgICAgbV9kZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID0gMDsKIH0KIAogYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppc1VuaW5pdGlhbGl6ZWQoV2Vi
R0xPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQpAQCAtMTMxLDE5ICsxNDksMTkgQEAgdm9pZCBXZWJH
TEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVyYgogICAgICAgICByZXR1cm47CiAgICAgYm9v
bCBpbml0Q29sb3IgPSBmYWxzZSwgaW5pdERlcHRoID0gZmFsc2UsIGluaXRTdGVuY2lsID0gZmFs
c2U7CiAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gMDsKLSAgICBpZiAoaXNVbmluaXRpYWxpemVk
KG1fY29sb3JBdHRhY2htZW50KSkgeworICAgIGlmIChpc1VuaW5pdGlhbGl6ZWQobV9jb2xvckF0
dGFjaG1lbnQuZ2V0KCkpKSB7CiAgICAgICAgIGluaXRDb2xvciA9IHRydWU7CiAgICAgICAgIG1h
c2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7CiAgICAgfQotICAgIGlm
IChpc1VuaW5pdGlhbGl6ZWQobV9kZXB0aEF0dGFjaG1lbnQpKSB7CisgICAgaWYgKGlzVW5pbml0
aWFsaXplZChtX2RlcHRoQXR0YWNobWVudC5nZXQoKSkpIHsKICAgICAgICAgaW5pdERlcHRoID0g
dHJ1ZTsKICAgICAgICAgbWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJ
VDsKICAgICB9Ci0gICAgaWYgKGlzVW5pbml0aWFsaXplZChtX3N0ZW5jaWxBdHRhY2htZW50KSkg
eworICAgIGlmIChpc1VuaW5pdGlhbGl6ZWQobV9zdGVuY2lsQXR0YWNobWVudC5nZXQoKSkpIHsK
ICAgICAgICAgaW5pdFN0ZW5jaWwgPSB0cnVlOwogICAgICAgICBtYXNrIHw9IEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CiAgICAgfQotICAgIGlmIChpc1VuaW5pdGlhbGl6
ZWQobV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50KSkgeworICAgIGlmIChpc1VuaW5pdGlhbGl6ZWQo
bV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpKSkgewogICAgICAgICBpbml0RGVwdGggPSB0
cnVlOwogICAgICAgICBpbml0U3RlbmNpbCA9IHRydWU7CiAgICAgICAgIG1hc2sgfD0gKEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQlVGRkVSX0JJVCk7CkBAIC0yMDksMTQgKzIyNywxNCBAQCB2b2lkIFdlYkdMRnJhbWVidWZm
ZXI6OmluaXRpYWxpemVSZW5kZXJiCiAgICAgICAgIGczZC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6RElUSEVSKTsKIAogICAgIGlmIChpbml0Q29sb3IpCi0gICAgICAgIHNldEluaXRpYWxp
emVkKG1fY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgc2V0SW5pdGlhbGl6ZWQobV9jb2xvckF0
dGFjaG1lbnQuZ2V0KCkpOwogICAgIGlmIChpbml0RGVwdGggJiYgaW5pdFN0ZW5jaWwgJiYgbV9k
ZXB0aFN0ZW5jaWxBdHRhY2htZW50KQotICAgICAgICBzZXRJbml0aWFsaXplZChtX2RlcHRoU3Rl
bmNpbEF0dGFjaG1lbnQpOworICAgICAgICBzZXRJbml0aWFsaXplZChtX2RlcHRoU3RlbmNpbEF0
dGFjaG1lbnQuZ2V0KCkpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoaW5pdERlcHRoKQotICAg
ICAgICAgICAgc2V0SW5pdGlhbGl6ZWQobV9kZXB0aEF0dGFjaG1lbnQpOworICAgICAgICAgICAg
c2V0SW5pdGlhbGl6ZWQobV9kZXB0aEF0dGFjaG1lbnQuZ2V0KCkpOwogICAgICAgICBpZiAoaW5p
dFN0ZW5jaWwpCi0gICAgICAgICAgICBzZXRJbml0aWFsaXplZChtX3N0ZW5jaWxBdHRhY2htZW50
KTsKKyAgICAgICAgICAgIHNldEluaXRpYWxpemVkKG1fc3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkp
OwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJ
KHJldmlzaW9uIDY4NDAxKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNE
ZXB0aFN0ZW5jaWxBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIChtX2RlcHRoU3RlbmNpbEF0dGFj
aG1lbnQgJiYgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSk7IH0KIAogICAgIHZv
aWQgc2V0QXR0YWNobWVudCh1bnNpZ25lZCBsb25nLCBXZWJHTE9iamVjdCopOworICAgIC8vIElm
IGFuIG9iamVjdCBpcyBhdHRhY2hlZCB0byB0aGUgZnJhbWVidWZmZXIsIHJlbW92ZSBpdC4KKyAg
ICB2b2lkIHJlbW92ZUF0dGFjaG1lbnQoV2ViR0xPYmplY3QqKTsKIAogICAgIC8vIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIHJpZ2h0IGFmdGVyIGEgZnJhbWVidWZmZXIgaXMgYm91bmQuCiAgICAg
Ly8gQmVjYXVzZSByZW5kZXJidWZmZXJzIGFuZCB0ZXh0dXJlcyBhdHRhY2hlZCB0byB0aGUgZnJh
bWVidWZmZXIgbWlnaHQKQEAgLTcxLDEyICs3MywxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0
SW5pdGlhbGl6ZWQoV2ViR0xPYmplY3QqKTsKICAgICB2b2lkIGluaXRpYWxpemVSZW5kZXJidWZm
ZXJzKCk7CiAKLSAgICAvLyBUaGVzZSBvYmplY3RzIGFyZSBrZXB0IGFsaXZlIGJ5IHRoZSBnbG9i
YWwgdGFibGUgaW4KLSAgICAvLyBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCi0gICAgV2ViR0xPYmpl
Y3QqIG1fY29sb3JBdHRhY2htZW50OwotICAgIFdlYkdMT2JqZWN0KiBtX2RlcHRoQXR0YWNobWVu
dDsKLSAgICBXZWJHTE9iamVjdCogbV9zdGVuY2lsQXR0YWNobWVudDsKLSAgICBXZWJHTE9iamVj
dCogbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50OworICAgIFJlZlB0cjxXZWJHTE9iamVjdD4gbV9j
b2xvckF0dGFjaG1lbnQ7CisgICAgUmVmUHRyPFdlYkdMT2JqZWN0PiBtX2RlcHRoQXR0YWNobWVu
dDsKKyAgICBSZWZQdHI8V2ViR0xPYmplY3Q+IG1fc3RlbmNpbEF0dGFjaG1lbnQ7CisgICAgUmVm
UHRyPFdlYkdMT2JqZWN0PiBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQ7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAkocmV2
aXNpb24gNjg0MDEpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksMTAgKzQ5LDEwIEBAIFdlYkdMT2JqZWN0Ojp+V2ViR0xPYmplY3Qo
KQogCiB2b2lkIFdlYkdMT2JqZWN0OjpzZXRPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3Qp
CiB7Ci0gICAgaWYgKG9iamVjdCA9PSBtX29iamVjdCkKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICBkZWxldGVPYmplY3QoKTsKKyAgICAvLyBzZXRPYmplY3Qgc2hvdWxkIGJlIG9ubHkg
Y2FsbGVkIG9uY2UgcmlnaHQgYWZ0ZXIgY3JlYXRpbmcgYSBXZWJHTE9iamVjdC4KKyAgICAvLyBv
YmplY3Q9PTAgJiYgbV9kZWxldGVkPT1mYWxzZSBpbmRpY2F0aW5nIGFuIHVuaW5pdGlhbGl6ZWQg
c3RhdGU7CisgICAgLy8gZm9yIGEgZGVsZXRlZCBvYmplY3QsIG9iamVjdD09MCBidXQgbV9kZWxl
dGVkPT10cnVlLgorICAgIEFTU0VSVCghbV9vYmplY3QgJiYgIW1fZGVsZXRlZCk7CiAgICAgbV9v
YmplY3QgPSBvYmplY3Q7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgJKHJl
dmlzaW9uIDY4NDAxKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTE9i
amVjdCgpOwogCiAgICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QoKSBjb25zdCB7IHJldHVybiBt
X29iamVjdDsgfQotICAgIHZvaWQgc2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZv
aWQgZGVsZXRlT2JqZWN0KCk7CiAKICAgICB2b2lkIGRldGFjaENvbnRleHQoKQpAQCAtNjQsMTMg
KzYzLDIyIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1fYXR0YWNobWVudENvdW50KQogICAgICAg
ICAgICAgLS1tX2F0dGFjaG1lbnRDb3VudDsKICAgICAgICAgaWYgKCFtX2F0dGFjaG1lbnRDb3Vu
dCAmJiBtX2RlbGV0ZWQpCi0gICAgICAgICAgICBtX29iamVjdCA9IDA7CisgICAgICAgICAgICBk
ZWxldGVPYmplY3QoKTsKICAgICB9CiAgICAgdW5zaWduZWQgZ2V0QXR0YWNobWVudENvdW50KCkg
eyByZXR1cm4gbV9hdHRhY2htZW50Q291bnQ7IH0KIAogcHJvdGVjdGVkOgogICAgIFdlYkdMT2Jq
ZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworCisgICAgLy8gc2V0T2JqZWN0IHNob3VsZCBi
ZSBvbmx5IGNhbGxlZCBvbmNlIHJpZ2h0IGFmdGVyIGNyZWF0aW5nIGEgV2ViR0xPYmplY3QuCisg
ICAgdm9pZCBzZXRPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CisKKyAgICAvLyBkZWxldGVPYmpl
Y3RJbXBsKCkgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWUgb2JqZWN0
OworICAgIC8vIGlzRGVsZXRlZCgpIG5lZWRzIHRvIGJlIHRlc3RlZCBpbiBpbXBsZW1lbnRhdGlv
bnMgd2hlbiBkZWNpZGluZyB3aGV0aGVyCisgICAgLy8gdG8gZGVsZXRlIHRoZSBPcGVuR0wgcmVz
b3VyY2UuCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVj
dCkgPSAwOworICAgIGJvb2wgaXNEZWxldGVkKCkgeyByZXR1cm4gbV9kZWxldGVkOyB9CisgICAg
dm9pZCBzZXREZXRlbGVkKCkgeyBtX2RlbGV0ZWQgPSB0cnVlOyB9CiAKIHByaXZhdGU6CiAgICAg
UGxhdGZvcm0zRE9iamVjdCBtX29iamVjdDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xQcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJv
Z3JhbS5jcHAJKHJldmlzaW9uIDY4NDAxKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFBy
b2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMiArNDcsMTcgQEAgV2ViR0xQcm9ncmFt
OjpXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbgogCiB2b2lkIFdlYkdMUHJvZ3JhbTo6ZGVsZXRl
T2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iaikKIHsKLSAgICBjb250ZXh0KCktPmdyYXBo
aWNzQ29udGV4dDNEKCktPmRlbGV0ZVByb2dyYW0ob2JqKTsKLSAgICBpZiAoIW9iamVjdCgpKSB7
Ci0gICAgICAgIGlmIChtX3ZlcnRleFNoYWRlcikKKyAgICBpZiAoIWlzRGVsZXRlZCgpKQorICAg
ICAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVByb2dyYW0ob2JqKTsK
KyAgICBpZiAoIWdldEF0dGFjaG1lbnRDb3VudCgpKSB7CisgICAgICAgIGlmIChtX3ZlcnRleFNo
YWRlcikgewogICAgICAgICAgICAgbV92ZXJ0ZXhTaGFkZXItPm9uRGV0YWNoZWQoKTsKLSAgICAg
ICAgaWYgKG1fZnJhZ21lbnRTaGFkZXIpCisgICAgICAgICAgICBtX3ZlcnRleFNoYWRlciA9IDA7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fZnJhZ21lbnRTaGFkZXIpIHsKICAgICAgICAgICAg
IG1fZnJhZ21lbnRTaGFkZXItPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgICAgIG1fZnJhZ21lbnRT
aGFkZXIgPSAwOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAkocmV2aXNpb24gNjg0MDEpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyAr
NDgsOCBAQCBXZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViCiAKIHZvaWQg
V2ViR0xSZW5kZXJidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvYmpl
Y3QpCiB7Ci0gICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVSZW5kZXJi
dWZmZXIob2JqZWN0KTsKKyAgICBpZiAoIWlzRGVsZXRlZCgpKQorICAgICAgICBjb250ZXh0KCkt
PmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVJlbmRlcmJ1ZmZlcihvYmplY3QpOwogfQogCiB9
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
CShyZXZpc2lvbiA2ODQwMSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM1LDcgKzYzNSwxMSBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWViCiB7CiAgICAgaWYgKCFmcmFtZWJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwotICAgIAorICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX2ZyYW1lYnVm
ZmVyQmluZGluZykgeworICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7CisgICAgICAg
IC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBiaW5kIGJhY2sgdG8gaW50
ZXJuYWwgZmJvLgorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworICAgIH0KICAgICBmcmFtZWJ1ZmZlci0+ZGVsZXRl
T2JqZWN0KCk7CiB9CiAKQEAgLTY1NiwxMCArNjYwLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVSZW5kZXIKIHsKICAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKICAgICAgICAg
cmV0dXJuOwotICAgIAorICAgIGlmIChyZW5kZXJidWZmZXIgPT0gbV9yZW5kZXJidWZmZXJCaW5k
aW5nKQorICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSAwOwogICAgIHJlbmRlcmJ1ZmZl
ci0+ZGVsZXRlT2JqZWN0KCk7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAg
ICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BdHRhY2hlZE9iamVjdENoYW5nZShyZW5kZXJidWZm
ZXIpOworICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudChyZW5k
ZXJidWZmZXIpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlU2hhZGVy
KFdlYkdMU2hhZGVyKiBzaGFkZXIpCkBAIC02NzcsNyArNjgyLDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRlbGV0ZVRleHR1cgogICAgIAogICAgIHRleHR1cmUtPmRlbGV0ZU9iamVj
dCgpOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9uQXR0YWNoZWRPYmplY3RDaGFuZ2UodGV4dHVyZSk7CisgICAgICAgIG1fZnJh
bWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50KHRleHR1cmUpOwogfQogCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYykKQEAgLTI3
MTYsNyArMjcyMSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKFcK
ICAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoKTsKICAgICAgICAgbV9j
dXJyZW50UHJvZ3JhbSA9IHByb2dyYW07CiAgICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShv
YmplY3RPclplcm8ocHJvZ3JhbSkpOwotICAgICAgICBpZiAocHJvZ3JhbSkKKyAgICAgICAgaWYg
KHByb2dyYW0gJiYgcHJvZ3JhbS0+b2JqZWN0KCkpCiAgICAgICAgICAgICBwcm9ncmFtLT5vbkF0
dGFjaGVkKCk7CiAgICAgfQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAkocmV2aXNpb24gNjg0MDEpCisrKyBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsOCBAQCBXZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDCiAKIHZv
aWQgV2ViR0xTaGFkZXI6OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvYmplY3Qp
CiB7Ci0gICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVTaGFkZXIob2Jq
ZWN0KTsKKyAgICBpZiAoIWlzRGVsZXRlZCgpKQorICAgICAgICBjb250ZXh0KCktPmdyYXBoaWNz
Q29udGV4dDNEKCktPmRlbGV0ZVNoYWRlcihvYmplY3QpOwogfQogCiB9CkluZGV4OiBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiA2ODQwMSkKKysrIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogCiAjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCiAKKyNpbmNsdWRlICJXZWJHTEZyYW1lYnVm
ZmVyLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTIwMSw3ICsyMDIsOCBAQCBib29sIFdlYkdMVGV4dHVyZTo6bmVlZFRvVXNl
QmxhY2tUZXh0dXJlCiAKIHZvaWQgV2ViR0xUZXh0dXJlOjpkZWxldGVPYmplY3RJbXBsKFBsYXRm
b3JtM0RPYmplY3Qgb2JqZWN0KQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+ZGVsZXRlVGV4dHVyZShvYmplY3QpOworICAgIGlmICghaXNEZWxldGVkKCkpCisgICAgICAg
IGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlVGV4dHVyZShvYmplY3QpOwog
fQogCiBpbnQgV2ViR0xUZXh0dXJlOjptYXBUYXJnZXRUb0luZGV4KHVuc2lnbmVkIGxvbmcgdGFy
Z2V0KQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjg0MTUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOS0xNCAgWmhlbnlhbyBNbyAg
PHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRleHR1cmVzIGFuZCByZW5kZXJidWZmZXJzIHNob3VsZCBiZSBkZXRhY2hlZCBm
aXJzdCBiZWZvcmUgZGVsZXRpb24gaWYgdGhleSBhcmUgYXR0YWNoZWQgdG8gZnJhbWVidWZmZXJz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzk0Mgor
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvb2JqZWN0LWRlbGV0aW9uLWJlaGF2aW91ci1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL29iamVjdC1k
ZWxldGlvbi1iZWhhdmlvdXIuaHRtbDogQWRkZWQuCisKIDIwMTAtMDktMjcgIEFiaGlzaGVrIEFy
eWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5
YXR0LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvb2JqZWN0LWRlbGV0aW9u
LWJlaGF2aW91ci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvb2JqZWN0LWRlbGV0aW9uLWJlaGF2aW91ci1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9vYmplY3QtZGVsZXRpb24t
YmVoYXZpb3VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorVGVz
dHMgZGVsZXRpb24gYmVoYXZpb3IgZm9yIHRleHR1cmUsIHJlbmRlcmJ1ZmZlciwgc2hhZGVyLCBh
bmQgcHJvZ3JhbQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworc2hhZGVyIGFuZCBw
cm9ncmFtIGRlbGV0aW9uCitQQVNTIHZlcnRleCBzaGFkZXIgbG9hZGVkCitQQVNTIGZyYWdtZW50
IHNoYWRlciBsb2FkZWQKK1BBU1MgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRl
cikgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KK1BBU1MgZ2wuYXR0YWNoU2hhZGVyKHBy
b2dyYW0sIGZyYWdtZW50U2hhZGVyKSB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgorUEFT
UyBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKSB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgor
UEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0
cnVlCitQQVNTIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSkgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUi4KK1BBU1MgZ2wuZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcikgd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUi4KK1BBU1MgZ2wuaXNTaGFkZXIodmVydGV4U2hhZGVyKSBpcyB0cnVlCitQ
QVNTIGdsLmdldFNoYWRlclBhcmFtZXRlcih2ZXJ0ZXhTaGFkZXIsIGdsLkRFTEVURV9TVEFUVVMp
IGlzIHRydWUKK1BBU1MgZ2wuZGV0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcikgd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KK1BBU1MgZ2wuaXNTaGFkZXIodmVydGV4U2hhZGVy
KSBpcyBmYWxzZQorUEFTUyBnbC5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IuCitQQVNTIGdsLmlzU2hhZGVyKGZyYWdtZW50U2hhZGVyKSBp
cyB0cnVlCitQQVNTIGdsLmdldFNoYWRlclBhcmFtZXRlcihmcmFnbWVudFNoYWRlciwgZ2wuREVM
RVRFX1NUQVRVUykgaXMgdHJ1ZQorUEFTUyBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCitQQVNTIGdsLmlzUHJvZ3JhbShwcm9ncmFtKSBpcyB0
cnVlCitQQVNTIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuREVMRVRFX1NUQVRV
UykgaXMgdHJ1ZQorUEFTUyBnbC51c2VQcm9ncmFtKG51bGwpIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IuCitQQVNTIGdsLmlzUHJvZ3JhbShwcm9ncmFtKSBpcyBmYWxzZQorUEFTUyBnbC5p
c1NoYWRlcihmcmFnbWVudFNoYWRlcikgaXMgZmFsc2UKKwordGV4dHVyZSBkZWxldGlvbgorUEFT
UyBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZibykgd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUi4KK1BBU1MgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KSB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgorUEFTUyBnbC5mcmFtZWJ1ZmZlclRleHR1cmUy
RChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRl
eCwgMCkgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KK1BBU1MgZ2wuZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5U
MCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSkgaXMgdGV4CitQQVNTIGds
LmRlbGV0ZVRleHR1cmUodGV4KSB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgorUEFTUyBn
bC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNP
TE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FKSBp
cyBudWxsCitQQVNTIGdsLmlzVGV4dHVyZSh0ZXgpIGlzIGZhbHNlCisKK3JlbmRlcmJ1ZmZlciBk
ZWxldGlvbgorUEFTUyBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgcmJvKSB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgorUEFTUyBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlJFTkRFUkJVRkZF
UiwgcmJvKSB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgorUEFTUyBnbC5nZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1F
TlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FKSBpcyByYm8KK1BBU1Mg
Z2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJibykgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4K
K1BBU1MgZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVS
LCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
TkFNRSkgaXMgbnVsbAorUEFTUyBnbC5pc1JlbmRlcmJ1ZmZlcihyYm8pIGlzIGZhbHNlCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvb2JqZWN0LWRlbGV0aW9uLWJlaGF2aW91ci5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29iamVjdC1kZWxl
dGlvbi1iZWhhdmlvdXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL29iamVjdC1kZWxldGlvbi1iZWhhdmlvdXIuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw4MiBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3dlYmdsLXRlc3QtdXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2
IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNj
cmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyBkZWxldGlvbiBiZWhhdmlvciBmb3IgdGV4dHVyZSwg
cmVuZGVyYnVmZmVyLCBzaGFkZXIsIGFuZCBwcm9ncmFtIik7CisKK3ZhciB3dHUgPSBXZWJHTFRl
c3RVdGlsczsKK3ZhciBnbCA9IHd0dS5jcmVhdGUzRENvbnRleHQoKTsKK3ZhciBzaG91bGRHZW5l
cmF0ZUdMRXJyb3IgPSB3dHUuc2hvdWxkR2VuZXJhdGVHTEVycm9yOworCitkZWJ1ZygiIik7Citk
ZWJ1Zygic2hhZGVyIGFuZCBwcm9ncmFtIGRlbGV0aW9uIik7CisKK3ZhciB2ZXJ0ZXhTaGFkZXIg
PSB3dHUubG9hZFN0YW5kYXJkVmVydGV4U2hhZGVyKGdsKTsKK2Fzc2VydE1zZyh2ZXJ0ZXhTaGFk
ZXIsICJ2ZXJ0ZXggc2hhZGVyIGxvYWRlZCIpOwordmFyIGZyYWdtZW50U2hhZGVyID0gd3R1Lmxv
YWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyKGdsKTsKK2Fzc2VydE1zZyhmcmFnbWVudFNoYWRlciwg
ImZyYWdtZW50IHNoYWRlciBsb2FkZWQiKTsKKwordmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9n
cmFtKCk7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wuYXR0YWNo
U2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcikiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihn
bCwgZ2wuTk9fRVJST1IsICJnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIp
Iik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wubGlua1Byb2dy
YW0ocHJvZ3JhbSkiKTsKK3Nob3VsZEJlVHJ1ZSgiZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9n
cmFtLCBnbC5MSU5LX1NUQVRVUykiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihnbCwgZ2wuTk9f
RVJST1IsICJnbC51c2VQcm9ncmFtKHByb2dyYW0pIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3Io
Z2wsIGdsLk5PX0VSUk9SLCAiZ2wuZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcikiKTsKK3Nob3Vs
ZEJlVHJ1ZSgiZ2wuaXNTaGFkZXIodmVydGV4U2hhZGVyKSIpOworc2hvdWxkQmVUcnVlKCJnbC5n
ZXRTaGFkZXJQYXJhbWV0ZXIodmVydGV4U2hhZGVyLCBnbC5ERUxFVEVfU1RBVFVTKSIpOworc2hv
dWxkR2VuZXJhdGVHTEVycm9yKGdsLCBnbC5OT19FUlJPUiwgImdsLmRldGFjaFNoYWRlcihwcm9n
cmFtLCB2ZXJ0ZXhTaGFkZXIpIik7CitzaG91bGRCZUZhbHNlKCJnbC5pc1NoYWRlcih2ZXJ0ZXhT
aGFkZXIpIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wuZGVs
ZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVyKSIpOworc2hvdWxkQmVUcnVlKCJnbC5pc1NoYWRlcihm
cmFnbWVudFNoYWRlcikiKTsKK3Nob3VsZEJlVHJ1ZSgiZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZy
YWdtZW50U2hhZGVyLCBnbC5ERUxFVEVfU1RBVFVTKSIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9y
KGdsLCBnbC5OT19FUlJPUiwgImdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSkiKTsKK3Nob3VsZEJl
VHJ1ZSgiZ2wuaXNQcm9ncmFtKHByb2dyYW0pIik7CitzaG91bGRCZVRydWUoImdsLmdldFByb2dy
YW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuREVMRVRFX1NUQVRVUykiKTsKK3Nob3VsZEdlbmVyYXRl
R0xFcnJvcihnbCwgZ2wuTk9fRVJST1IsICJnbC51c2VQcm9ncmFtKG51bGwpIik7CitzaG91bGRC
ZUZhbHNlKCJnbC5pc1Byb2dyYW0ocHJvZ3JhbSkiKTsKK3Nob3VsZEJlRmFsc2UoImdsLmlzU2hh
ZGVyKGZyYWdtZW50U2hhZGVyKSIpOworCitkZWJ1ZygiIik7CitkZWJ1ZygidGV4dHVyZSBkZWxl
dGlvbiIpOworCit2YXIgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKK3Nob3VsZEdlbmVy
YXRlR0xFcnJvcihnbCwgZ2wuTk9fRVJST1IsICJnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVC
VUZGRVIsIGZibykiKTsKKwordmFyIHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKK3Nob3VsZEdl
bmVyYXRlR0xFcnJvcihnbCwgZ2wuTk9fRVJST1IsICJnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJF
XzJELCB0ZXgpIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wu
ZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQw
LCBnbC5URVhUVVJFXzJELCB0ZXgsIDApIik7CitzaG91bGRCZSgiZ2wuZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwg
Z2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSkiLCAidGV4Iik7CitzaG91bGRH
ZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wuZGVsZXRlVGV4dHVyZSh0ZXgpIik7
CisvLyBEZWxldGluZyBhIHRleHR1cmUgYm91bmQgdG8gdGhlIGN1cnJlbnRseS1ib3VuZCBmYm8g
aXMgdGhlIHNhbWUgYXMKKy8vIGRldGFjaGluZyB0aGUgdGV4dHVlIGZyb20gZmJvIGZpcnN0LCB0
aGVuIGRlbGV0ZSB0aGUgdGV4dHVyZS4KK3Nob3VsZEJlTnVsbCgiZ2wuZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwg
Z2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSkiKTsKK3Nob3VsZEJlRmFsc2Uo
ImdsLmlzVGV4dHVyZSh0ZXgpIik7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJyZW5kZXJidWZmZXIg
ZGVsZXRpb24iKTsKKwordmFyIHJibyA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworc2hvdWxk
R2VuZXJhdGVHTEVycm9yKGdsLCBnbC5OT19FUlJPUiwgImdsLmJpbmRSZW5kZXJidWZmZXIoZ2wu
UkVOREVSQlVGRkVSLCByYm8pIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VS
Uk9SLCAiZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9S
X0FUVEFDSE1FTlQwLCBnbC5SRU5ERVJCVUZGRVIsIHJibykiKTsKK3Nob3VsZEJlKCJnbC5nZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FU
VEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FKSIsICJyYm8i
KTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihnbCwgZ2wuTk9fRVJST1IsICJnbC5kZWxldGVSZW5k
ZXJidWZmZXIocmJvKSIpOworLy8gRGVsZXRpbmcgYSByZW5kZXJidWZmZXIgYm91bmQgdG8gdGhl
IGN1cnJlbnRseS1ib3VuZCBmYm8gaXMgdGhlIHNhbWUgYXMKKy8vIGRldGFjaGluZyB0aGUgcmVu
ZGVyYnVmZmVyIGZyb20gZmJvIGZpcnN0LCB0aGVuIGRlbGV0ZSB0aGUgcmVuZGVyYnVmZmVyLgor
c2hvdWxkQmVOdWxsKCJnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJB
TUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X09CSkVDVF9OQU1FKSIpOworc2hvdWxkQmVGYWxzZSgiZ2wuaXNSZW5kZXJidWZmZXIocmJvKSIp
OworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4K
</data>
<flag name="commit-queue"
          id="58545"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68946</attachid>
            <date>2010-09-27 12:58:44 -0700</date>
            <delta_ts>2010-09-27 14:19:46 -0700</delta_ts>
            <desc>revised patch: fix a bug in the comments.</desc>
            <filename>delete.patch</filename>
            <type>text/plain</type>
            <size>23350</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODQxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDktMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0dXJl
cyBhbmQgcmVuZGVyYnVmZmVycyBzaG91bGQgYmUgZGV0YWNoZWQgZmlyc3QgYmVmb3JlIGRlbGV0
aW9uIGlmIHRoZXkgYXJlIGF0dGFjaGVkIHRvIGZyYW1lYnVmZmVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5NDIKKworICAgICAgICBUZXN0OiBm
YXN0L2NhbnZhcy93ZWJnbC9vYmplY3QtZGVsZXRpb24tYmVoYXZpb3VyLmh0bWwKKworICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
QnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKTogRGVsZXRlIHRoZSBvYmplY3Qgb25seSBvbmNlLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwOiBVc2UgUmVmUHRyIGZv
ciBhdHRhY2htZW50IFdlYkdMT2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVi
dWZmZXI6OldlYkdMRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1
ZmZlcjo6cmVtb3ZlQXR0YWNobWVudCk6IFJlbW92ZSBhbiBhdHRhY2htZW50IGRhdGEgcmVmLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6b25BdHRhY2hlZE9iamVjdENoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZlckZv
cm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5k
ZXJidWZmZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmg6IERl
Y2xhcmUgcmVtb3ZlQXR0YWNobWVudCgpLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpzZXRPYmplY3QpOiBNYWtl
IGl0IHByb3RlY3RlZCBhbmQgY2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gaW5pdGlhbGl6aW5nLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTE9iamVjdDo6b25EZXRhY2hlZCk6IEZpeCBhIGJ1Zy4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMT2JqZWN0Ojppc0RlbGV0ZWQpOiBFeHBvc2UgdGhlIGRlbGV0ZSBmbGFnLgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFBy
b2dyYW06OmRlbGV0ZU9iamVjdEltcGwpOiBEZXRhY2ggc2hhZGVycyB3aGVuIGRlbGV0aW5nIGEg
cHJvZ3JhbS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbCk6IERl
bGV0ZSB0aGUgb2JqZWN0IG9ubHkgb25jZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcik6IEJpbmQgdG8gaW50ZXJuYWwgZmJvIHdoZW4gZGVsZXRp
bmcgdGhlIGN1cnJlbnRseS1ib3VuZCBmYm8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6IFJlbW92ZSByZW5kZXJidWZmZXIgZnJv
bSBjdXJyZW50bHktYm91bmQgZmJvIHVwb24gZGVsZXRpb24uCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRleHR1cmUpOiBSZW1vdmUgdGV4dHVyZSBmcm9t
IGN1cnJlbnRseS1ib3VuZCBmYm8gdXBvbiBkZWxldGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbSk6IEZpeCBhIGNvbmRpdGlvbi4KKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFNoYWRlcjo6ZGVsZXRlT2JqZWN0SW1wbCk6IERlbGV0ZSB0aGUgb2JqZWN0IG9ubHkgb25jZS4K
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xUZXh0dXJlOjpkZWxldGVPYmplY3RJbXBsKTogRGl0dG8uCisKIDIwMTAtMDktMjcg
IE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IENocmlzIEZsZWl6YWNoLgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZl
ci5jcHAJKHJldmlzaW9uIDY4NDAxKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDggQEAgV2ViR0xCdWZmZXI6OldlYkdM
QnVmZmVyKFdlYkdMUmVuZGVyaW5nQwogCiB2b2lkIFdlYkdMQnVmZmVyOjpkZWxldGVPYmplY3RJ
bXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3ND
b250ZXh0M0QoKS0+ZGVsZXRlQnVmZmVyKG9iamVjdCk7CisgICAgaWYgKCFpc0RlbGV0ZWQoKSkK
KyAgICAgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVCdWZmZXIob2Jq
ZWN0KTsKIH0KIAogYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0YUltcGwoQXJy
YXlCdWZmZXIqIGFycmF5LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3Ro
KQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZpc2lv
biA2ODQwMSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDEwICs0MCw2IEBAIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZl
cj4gV2ViR0xGcmFtZWIKIAogV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xGcmFtZWJ1ZmZlcihXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKICAgICA6IFdlYkdMT2JqZWN0KGN0eCkKLSAgICAsIG1f
Y29sb3JBdHRhY2htZW50KDApCi0gICAgLCBtX2RlcHRoQXR0YWNobWVudCgwKQotICAgICwgbV9z
dGVuY2lsQXR0YWNobWVudCgwKQotICAgICwgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50KDApCiB7
CiAgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlRnJh
bWVidWZmZXIoKSk7CiB9CkBAIC03Myw2ICs2OSwyMyBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6
OnNldEF0dGFjaG1lbnQodW5zCiAgICAgaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKIH0KIAor
dm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50KFdlYkdMT2JqZWN0KiBhdHRh
Y2htZW50KQoreworICAgIGlmICghb2JqZWN0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
YXR0YWNobWVudCA9PSBtX2NvbG9yQXR0YWNobWVudC5nZXQoKSkKKyAgICAgICAgbV9jb2xvckF0
dGFjaG1lbnQgPSAwOworICAgIGVsc2UgaWYgKGF0dGFjaG1lbnQgPT0gbV9kZXB0aEF0dGFjaG1l
bnQuZ2V0KCkpCisgICAgICAgIG1fZGVwdGhBdHRhY2htZW50ID0gMDsKKyAgICBlbHNlIGlmIChh
dHRhY2htZW50ID09IG1fc3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpCisgICAgICAgIG1fc3RlbmNp
bEF0dGFjaG1lbnQgPSAwOworICAgIGVsc2UgaWYgKGF0dGFjaG1lbnQgPT0gbV9kZXB0aFN0ZW5j
aWxBdHRhY2htZW50LmdldCgpKQorICAgICAgICBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSAw
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworICAgIGluaXRpYWxpemVSZW5kZXJidWZmZXJz
KCk7Cit9CisKIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6b25CaW5kKCkKIHsKICAgICBpbml0aWFs
aXplUmVuZGVyYnVmZmVycygpOwpAQCAtODMsOCArOTYsOCBAQCB2b2lkIFdlYkdMRnJhbWVidWZm
ZXI6Om9uQXR0YWNoZWRPYmplY3RDCiAgICAgLy8gQ3VycmVudGx5IG9iamVjdCA9PSAwIGlzIG5v
dCBjb25zaWRlcmVkLCBidXQgdGhpcyBtaWdodCBjaGFuZ2UgaWYgdGhlCiAgICAgLy8gbGlmZXNw
YW4gb2YgV2ViR0xPYmplY3QgY2hhbmdlcy4KICAgICBpZiAob2JqZWN0Ci0gICAgICAgICYmIChv
YmplY3QgPT0gbV9jb2xvckF0dGFjaG1lbnQgfHwgb2JqZWN0ID09IG1fZGVwdGhBdHRhY2htZW50
Ci0gICAgICAgICAgICB8fCBvYmplY3QgPT0gbV9zdGVuY2lsQXR0YWNobWVudCB8fCBvYmplY3Qg
PT0gbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50KSkKKyAgICAgICAgJiYgKG9iamVjdCA9PSBtX2Nv
bG9yQXR0YWNobWVudC5nZXQoKSB8fCBvYmplY3QgPT0gbV9kZXB0aEF0dGFjaG1lbnQuZ2V0KCkK
KyAgICAgICAgICAgIHx8IG9iamVjdCA9PSBtX3N0ZW5jaWxBdHRhY2htZW50LmdldCgpIHx8IG9i
amVjdCA9PSBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpKQogICAgICAgICBpbml0aWFs
aXplUmVuZGVyYnVmZmVycygpOwogfQogCkBAIC05Miw3ICsxMDUsNyBAQCB1bnNpZ25lZCBsb25n
IFdlYkdMRnJhbWVidWZmZXI6OmdldENvbG9yCiB7CiAgICAgaWYgKG9iamVjdCgpICYmIG1fY29s
b3JBdHRhY2htZW50ICYmIG1fY29sb3JBdHRhY2htZW50LT5vYmplY3QoKSkgewogICAgICAgICBp
ZiAobV9jb2xvckF0dGFjaG1lbnQtPmlzUmVuZGVyYnVmZmVyKCkpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgZm9ybWF0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIq
PihtX2NvbG9yQXR0YWNobWVudCkpLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAg
dW5zaWduZWQgbG9uZyBmb3JtYXQgPSAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZl
cio+KG1fY29sb3JBdHRhY2htZW50LmdldCgpKSktPmdldEludGVybmFsRm9ybWF0KCk7CiAgICAg
ICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTQ6CiAgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0Ex
OgpAQCAtMTAxLDE0ICsxMTQsMTkgQEAgdW5zaWduZWQgbG9uZyBXZWJHTEZyYW1lYnVmZmVyOjpn
ZXRDb2xvcgogICAgICAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG1fY29sb3JBdHRhY2htZW50LT5pc1Rl
eHR1cmUoKSkKLSAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1
cmUqPihtX2NvbG9yQXR0YWNobWVudCkpLT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKKyAgICAgICAg
ICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihtX2NvbG9yQXR0YWNo
bWVudC5nZXQoKSkpLT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKICAgICB9CiAgICAgcmV0dXJuIDA7
CiB9CiAKIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNE
T2JqZWN0IG9iamVjdCkKIHsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRl
bGV0ZUZyYW1lYnVmZmVyKG9iamVjdCk7CisgICAgaWYgKCFpc0RlbGV0ZWQoKSkKKyAgICAgICAg
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVGcmFtZWJ1ZmZlcihvYmplY3Qp
OworICAgIG1fY29sb3JBdHRhY2htZW50ID0gMDsKKyAgICBtX2RlcHRoQXR0YWNobWVudCA9IDA7
CisgICAgbV9zdGVuY2lsQXR0YWNobWVudCA9IDA7CisgICAgbV9kZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID0gMDsKIH0KIAogYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppc1VuaW5pdGlhbGl6ZWQoV2Vi
R0xPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQpAQCAtMTMxLDE5ICsxNDksMTkgQEAgdm9pZCBXZWJH
TEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVyYgogICAgICAgICByZXR1cm47CiAgICAgYm9v
bCBpbml0Q29sb3IgPSBmYWxzZSwgaW5pdERlcHRoID0gZmFsc2UsIGluaXRTdGVuY2lsID0gZmFs
c2U7CiAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gMDsKLSAgICBpZiAoaXNVbmluaXRpYWxpemVk
KG1fY29sb3JBdHRhY2htZW50KSkgeworICAgIGlmIChpc1VuaW5pdGlhbGl6ZWQobV9jb2xvckF0
dGFjaG1lbnQuZ2V0KCkpKSB7CiAgICAgICAgIGluaXRDb2xvciA9IHRydWU7CiAgICAgICAgIG1h
c2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7CiAgICAgfQotICAgIGlm
IChpc1VuaW5pdGlhbGl6ZWQobV9kZXB0aEF0dGFjaG1lbnQpKSB7CisgICAgaWYgKGlzVW5pbml0
aWFsaXplZChtX2RlcHRoQXR0YWNobWVudC5nZXQoKSkpIHsKICAgICAgICAgaW5pdERlcHRoID0g
dHJ1ZTsKICAgICAgICAgbWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJ
VDsKICAgICB9Ci0gICAgaWYgKGlzVW5pbml0aWFsaXplZChtX3N0ZW5jaWxBdHRhY2htZW50KSkg
eworICAgIGlmIChpc1VuaW5pdGlhbGl6ZWQobV9zdGVuY2lsQXR0YWNobWVudC5nZXQoKSkpIHsK
ICAgICAgICAgaW5pdFN0ZW5jaWwgPSB0cnVlOwogICAgICAgICBtYXNrIHw9IEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CiAgICAgfQotICAgIGlmIChpc1VuaW5pdGlhbGl6
ZWQobV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50KSkgeworICAgIGlmIChpc1VuaW5pdGlhbGl6ZWQo
bV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpKSkgewogICAgICAgICBpbml0RGVwdGggPSB0
cnVlOwogICAgICAgICBpbml0U3RlbmNpbCA9IHRydWU7CiAgICAgICAgIG1hc2sgfD0gKEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQlVGRkVSX0JJVCk7CkBAIC0yMDksMTQgKzIyNywxNCBAQCB2b2lkIFdlYkdMRnJhbWVidWZm
ZXI6OmluaXRpYWxpemVSZW5kZXJiCiAgICAgICAgIGczZC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6RElUSEVSKTsKIAogICAgIGlmIChpbml0Q29sb3IpCi0gICAgICAgIHNldEluaXRpYWxp
emVkKG1fY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgc2V0SW5pdGlhbGl6ZWQobV9jb2xvckF0
dGFjaG1lbnQuZ2V0KCkpOwogICAgIGlmIChpbml0RGVwdGggJiYgaW5pdFN0ZW5jaWwgJiYgbV9k
ZXB0aFN0ZW5jaWxBdHRhY2htZW50KQotICAgICAgICBzZXRJbml0aWFsaXplZChtX2RlcHRoU3Rl
bmNpbEF0dGFjaG1lbnQpOworICAgICAgICBzZXRJbml0aWFsaXplZChtX2RlcHRoU3RlbmNpbEF0
dGFjaG1lbnQuZ2V0KCkpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoaW5pdERlcHRoKQotICAg
ICAgICAgICAgc2V0SW5pdGlhbGl6ZWQobV9kZXB0aEF0dGFjaG1lbnQpOworICAgICAgICAgICAg
c2V0SW5pdGlhbGl6ZWQobV9kZXB0aEF0dGFjaG1lbnQuZ2V0KCkpOwogICAgICAgICBpZiAoaW5p
dFN0ZW5jaWwpCi0gICAgICAgICAgICBzZXRJbml0aWFsaXplZChtX3N0ZW5jaWxBdHRhY2htZW50
KTsKKyAgICAgICAgICAgIHNldEluaXRpYWxpemVkKG1fc3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkp
OwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJ
KHJldmlzaW9uIDY4NDAxKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNE
ZXB0aFN0ZW5jaWxBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIChtX2RlcHRoU3RlbmNpbEF0dGFj
aG1lbnQgJiYgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSk7IH0KIAogICAgIHZv
aWQgc2V0QXR0YWNobWVudCh1bnNpZ25lZCBsb25nLCBXZWJHTE9iamVjdCopOworICAgIC8vIElm
IGFuIG9iamVjdCBpcyBhdHRhY2hlZCB0byB0aGUgZnJhbWVidWZmZXIsIHJlbW92ZSBpdC4KKyAg
ICB2b2lkIHJlbW92ZUF0dGFjaG1lbnQoV2ViR0xPYmplY3QqKTsKIAogICAgIC8vIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIHJpZ2h0IGFmdGVyIGEgZnJhbWVidWZmZXIgaXMgYm91bmQuCiAgICAg
Ly8gQmVjYXVzZSByZW5kZXJidWZmZXJzIGFuZCB0ZXh0dXJlcyBhdHRhY2hlZCB0byB0aGUgZnJh
bWVidWZmZXIgbWlnaHQKQEAgLTcxLDEyICs3MywxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0
SW5pdGlhbGl6ZWQoV2ViR0xPYmplY3QqKTsKICAgICB2b2lkIGluaXRpYWxpemVSZW5kZXJidWZm
ZXJzKCk7CiAKLSAgICAvLyBUaGVzZSBvYmplY3RzIGFyZSBrZXB0IGFsaXZlIGJ5IHRoZSBnbG9i
YWwgdGFibGUgaW4KLSAgICAvLyBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCi0gICAgV2ViR0xPYmpl
Y3QqIG1fY29sb3JBdHRhY2htZW50OwotICAgIFdlYkdMT2JqZWN0KiBtX2RlcHRoQXR0YWNobWVu
dDsKLSAgICBXZWJHTE9iamVjdCogbV9zdGVuY2lsQXR0YWNobWVudDsKLSAgICBXZWJHTE9iamVj
dCogbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50OworICAgIFJlZlB0cjxXZWJHTE9iamVjdD4gbV9j
b2xvckF0dGFjaG1lbnQ7CisgICAgUmVmUHRyPFdlYkdMT2JqZWN0PiBtX2RlcHRoQXR0YWNobWVu
dDsKKyAgICBSZWZQdHI8V2ViR0xPYmplY3Q+IG1fc3RlbmNpbEF0dGFjaG1lbnQ7CisgICAgUmVm
UHRyPFdlYkdMT2JqZWN0PiBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQ7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAkocmV2
aXNpb24gNjg0MDEpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksMTAgKzQ5LDggQEAgV2ViR0xPYmplY3Q6On5XZWJHTE9iamVjdCgp
CiAKIHZvaWQgV2ViR0xPYmplY3Q6OnNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkK
IHsKLSAgICBpZiAob2JqZWN0ID09IG1fb2JqZWN0KQotICAgICAgICByZXR1cm47Ci0gICAgICAg
IAotICAgIGRlbGV0ZU9iamVjdCgpOworICAgIC8vIG9iamVjdD09MCAmJiBtX2RlbGV0ZWQ9PWZh
bHNlIGluZGljYXRpbmcgYW4gdW5pbml0aWFsaXplZCBzdGF0ZTsKKyAgICBBU1NFUlQoIW1fb2Jq
ZWN0ICYmICFtX2RlbGV0ZWQpOwogICAgIG1fb2JqZWN0ID0gb2JqZWN0OwogfQogCkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCShyZXZpc2lvbiA2ODQwMSkKKysrIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xPYmplY3QoKTsKIAogICAgIFBsYXRmb3JtM0RPYmpl
Y3Qgb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KLSAgICB2b2lkIHNldE9iamVj
dChQbGF0Zm9ybTNET2JqZWN0KTsKICAgICB2b2lkIGRlbGV0ZU9iamVjdCgpOwogCiAgICAgdm9p
ZCBkZXRhY2hDb250ZXh0KCkKQEAgLTY0LDEzICs2MywyMiBAQCBwdWJsaWM6CiAgICAgICAgIGlm
IChtX2F0dGFjaG1lbnRDb3VudCkKICAgICAgICAgICAgIC0tbV9hdHRhY2htZW50Q291bnQ7CiAg
ICAgICAgIGlmICghbV9hdHRhY2htZW50Q291bnQgJiYgbV9kZWxldGVkKQotICAgICAgICAgICAg
bV9vYmplY3QgPSAwOworICAgICAgICAgICAgZGVsZXRlT2JqZWN0KCk7CiAgICAgfQogICAgIHVu
c2lnbmVkIGdldEF0dGFjaG1lbnRDb3VudCgpIHsgcmV0dXJuIG1fYXR0YWNobWVudENvdW50OyB9
CiAKIHByb3RlY3RlZDoKICAgICBXZWJHTE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KworICAgIC8vIHNldE9iamVjdCBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSByaWdodCBhZnRl
ciBjcmVhdGluZyBhIFdlYkdMT2JqZWN0LgorICAgIHZvaWQgc2V0T2JqZWN0KFBsYXRmb3JtM0RP
YmplY3QpOworCisgICAgLy8gZGVsZXRlT2JqZWN0SW1wbCgpIG1heSBiZSBjYWxsZWQgbXVsdGlw
bGUgdGltZXMgZm9yIHRoZSBzYW1lIG9iamVjdDsKKyAgICAvLyBpc0RlbGV0ZWQoKSBuZWVkcyB0
byBiZSB0ZXN0ZWQgaW4gaW1wbGVtZW50YXRpb25zIHdoZW4gZGVjaWRpbmcgd2hldGhlcgorICAg
IC8vIHRvIGRlbGV0ZSB0aGUgT3BlbkdMIHJlc291cmNlLgogICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICBib29sIGlzRGVsZXRlZCgp
IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQorICAgIHZvaWQgc2V0RGV0ZWxlZCgpIHsgbV9kZWxldGVk
ID0gdHJ1ZTsgfQogCiBwcml2YXRlOgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9vYmplY3Q7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZpc2lvbiA2ODQwMSkKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsMTIgKzQ3LDE3IEBAIFdlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW4K
IAogdm9pZCBXZWJHTFByb2dyYW06OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBv
YmopCiB7Ci0gICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVQcm9ncmFt
KG9iaik7Ci0gICAgaWYgKCFvYmplY3QoKSkgewotICAgICAgICBpZiAobV92ZXJ0ZXhTaGFkZXIp
CisgICAgaWYgKCFpc0RlbGV0ZWQoKSkKKyAgICAgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRl
eHQzRCgpLT5kZWxldGVQcm9ncmFtKG9iaik7CisgICAgaWYgKCFnZXRBdHRhY2htZW50Q291bnQo
KSkgeworICAgICAgICBpZiAobV92ZXJ0ZXhTaGFkZXIpIHsKICAgICAgICAgICAgIG1fdmVydGV4
U2hhZGVyLT5vbkRldGFjaGVkKCk7Ci0gICAgICAgIGlmIChtX2ZyYWdtZW50U2hhZGVyKQorICAg
ICAgICAgICAgbV92ZXJ0ZXhTaGFkZXIgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChtX2Zy
YWdtZW50U2hhZGVyKSB7CiAgICAgICAgICAgICBtX2ZyYWdtZW50U2hhZGVyLT5vbkRldGFjaGVk
KCk7CisgICAgICAgICAgICBtX2ZyYWdtZW50U2hhZGVyID0gMDsKKyAgICAgICAgfQogICAgIH0K
IH0KIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAJKHJl
dmlzaW9uIDY4NDAxKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDggQEAgV2ViR0xSZW5kZXJidWZmZXI6Oldl
YkdMUmVuZGVyYnVmZmVyKFdlYgogCiB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyOjpkZWxldGVPYmpl
Y3RJbXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhp
Y3NDb250ZXh0M0QoKS0+ZGVsZXRlUmVuZGVyYnVmZmVyKG9iamVjdCk7CisgICAgaWYgKCFpc0Rl
bGV0ZWQoKSkKKyAgICAgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVS
ZW5kZXJidWZmZXIob2JqZWN0KTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNjg0MDEpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzNSw3ICs2MzUsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUZyYW1l
YgogewogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAgICAKKyAgICBp
ZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKKyAgICAgICAgbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgPSAwOworICAgICAgICAvLyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVm
ZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGludGVybmFsIGZiby4KKyAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAg
ICB9CiAgICAgZnJhbWVidWZmZXItPmRlbGV0ZU9iamVjdCgpOwogfQogCkBAIC02NTYsMTAgKzY2
MCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUmVuZGVyCiB7CiAgICAg
aWYgKCFyZW5kZXJidWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAgICAKKyAgICBpZiAocmVuZGVy
YnVmZmVyID09IG1fcmVuZGVyYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9yZW5kZXJidWZmZXJC
aW5kaW5nID0gMDsKICAgICByZW5kZXJidWZmZXItPmRlbGV0ZU9iamVjdCgpOwogICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQXR0
YWNoZWRPYmplY3RDaGFuZ2UocmVuZGVyYnVmZmVyKTsKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPnJlbW92ZUF0dGFjaG1lbnQocmVuZGVyYnVmZmVyKTsKIH0KIAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQpAQCAtNjc3
LDcgKzY4Miw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXIKICAg
ICAKICAgICB0ZXh0dXJlLT5kZWxldGVPYmplY3QoKTsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0Q2hh
bmdlKHRleHR1cmUpOworICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNo
bWVudCh0ZXh0dXJlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVu
Yyh1bnNpZ25lZCBsb25nIGZ1bmMpCkBAIC0yNzE2LDcgKzI3MjEsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXCiAgICAgICAgICAgICBtX2N1cnJlbnRQcm9ncmFt
LT5vbkRldGFjaGVkKCk7CiAgICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwogICAg
ICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLSAgICAg
ICAgaWYgKHByb2dyYW0pCisgICAgICAgIGlmIChwcm9ncmFtICYmIHByb2dyYW0tPm9iamVjdCgp
KQogICAgICAgICAgICAgcHJvZ3JhbS0+b25BdHRhY2hlZCgpOwogICAgIH0KICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFNoYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRl
ci5jcHAJKHJldmlzaW9uIDY4NDAxKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDggQEAgV2ViR0xTaGFkZXI6OldlYkdM
U2hhZGVyKFdlYkdMUmVuZGVyaW5nQwogCiB2b2lkIFdlYkdMU2hhZGVyOjpkZWxldGVPYmplY3RJ
bXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3ND
b250ZXh0M0QoKS0+ZGVsZXRlU2hhZGVyKG9iamVjdCk7CisgICAgaWYgKCFpc0RlbGV0ZWQoKSkK
KyAgICAgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVTaGFkZXIob2Jq
ZWN0KTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAkocmV2
aXNpb24gNjg0MDEpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5o
IgogCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMDEsNyArMjAyLDggQEAg
Ym9vbCBXZWJHTFRleHR1cmU6Om5lZWRUb1VzZUJsYWNrVGV4dHVyZQogCiB2b2lkIFdlYkdMVGV4
dHVyZTo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKLSAgICBj
b250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVRleHR1cmUob2JqZWN0KTsKKyAg
ICBpZiAoIWlzRGVsZXRlZCgpKQorICAgICAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNE
KCktPmRlbGV0ZVRleHR1cmUob2JqZWN0KTsKIH0KIAogaW50IFdlYkdMVGV4dHVyZTo6bWFwVGFy
Z2V0VG9JbmRleCh1bnNpZ25lZCBsb25nIHRhcmdldCkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY4NDE1
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTAtMDktMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0dXJlcyBhbmQgcmVuZGVy
YnVmZmVycyBzaG91bGQgYmUgZGV0YWNoZWQgZmlyc3QgYmVmb3JlIGRlbGV0aW9uIGlmIHRoZXkg
YXJlIGF0dGFjaGVkIHRvIGZyYW1lYnVmZmVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5NDIKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmds
L29iamVjdC1kZWxldGlvbi1iZWhhdmlvdXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2NhbnZhcy93ZWJnbC9vYmplY3QtZGVsZXRpb24tYmVoYXZpb3VyLmh0bWw6IEFkZGVk
LgorCiAyMDEwLTA5LTI3ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL29iamVjdC1kZWxldGlvbi1iZWhhdmlvdXItZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29iamVjdC1kZWxldGlvbi1i
ZWhhdmlvdXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvb2JqZWN0LWRlbGV0aW9uLWJlaGF2aW91ci1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDggQEAKK1Rlc3RzIGRlbGV0aW9uIGJlaGF2aW9yIGZvciB0ZXh0
dXJlLCByZW5kZXJidWZmZXIsIHNoYWRlciwgYW5kIHByb2dyYW0KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK3NoYWRlciBhbmQgcHJvZ3JhbSBkZWxldGlvbgorUEFTUyB2ZXJ0ZXgg
c2hhZGVyIGxvYWRlZAorUEFTUyBmcmFnbWVudCBzaGFkZXIgbG9hZGVkCitQQVNTIGdsLmF0dGFj
aFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IuCitQQVNTIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcmFnbWVudFNoYWRlcikgd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KK1BBU1MgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSkgd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4KK1BBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihw
cm9ncmFtLCBnbC5MSU5LX1NUQVRVUykgaXMgdHJ1ZQorUEFTUyBnbC51c2VQcm9ncmFtKHByb2dy
YW0pIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCitQQVNTIGdsLmRlbGV0ZVNoYWRlcih2
ZXJ0ZXhTaGFkZXIpIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCitQQVNTIGdsLmlzU2hh
ZGVyKHZlcnRleFNoYWRlcikgaXMgdHJ1ZQorUEFTUyBnbC5nZXRTaGFkZXJQYXJhbWV0ZXIodmVy
dGV4U2hhZGVyLCBnbC5ERUxFVEVfU1RBVFVTKSBpcyB0cnVlCitQQVNTIGdsLmRldGFjaFNoYWRl
cihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCitQ
QVNTIGdsLmlzU2hhZGVyKHZlcnRleFNoYWRlcikgaXMgZmFsc2UKK1BBU1MgZ2wuZGVsZXRlU2hh
ZGVyKGZyYWdtZW50U2hhZGVyKSB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgorUEFTUyBn
bC5pc1NoYWRlcihmcmFnbWVudFNoYWRlcikgaXMgdHJ1ZQorUEFTUyBnbC5nZXRTaGFkZXJQYXJh
bWV0ZXIoZnJhZ21lbnRTaGFkZXIsIGdsLkRFTEVURV9TVEFUVVMpIGlzIHRydWUKK1BBU1MgZ2wu
ZGVsZXRlUHJvZ3JhbShwcm9ncmFtKSB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgorUEFT
UyBnbC5pc1Byb2dyYW0ocHJvZ3JhbSkgaXMgdHJ1ZQorUEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1l
dGVyKHByb2dyYW0sIGdsLkRFTEVURV9TVEFUVVMpIGlzIHRydWUKK1BBU1MgZ2wudXNlUHJvZ3Jh
bShudWxsKSB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SLgorUEFTUyBnbC5pc1Byb2dyYW0o
cHJvZ3JhbSkgaXMgZmFsc2UKK1BBU1MgZ2wuaXNTaGFkZXIoZnJhZ21lbnRTaGFkZXIpIGlzIGZh
bHNlCisKK3RleHR1cmUgZGVsZXRpb24KK1BBU1MgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1F
QlVGRkVSLCBmYm8pIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCitQQVNTIGdsLmJpbmRU
ZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCkgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4K
K1BBU1MgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FU
VEFDSE1FTlQwLCBnbC5URVhUVVJFXzJELCB0ZXgsIDApIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IuCitQQVNTIGdsLmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFN
RUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
T0JKRUNUX05BTUUpIGlzIHRleAorUEFTUyBnbC5kZWxldGVUZXh0dXJlKHRleCkgd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUi4KK1BBU1MgZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSkgaXMgbnVsbAorUEFTUyBnbC5pc1RleHR1cmUodGV4
KSBpcyBmYWxzZQorCityZW5kZXJidWZmZXIgZGVsZXRpb24KK1BBU1MgZ2wuYmluZFJlbmRlcmJ1
ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHJibykgd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUi4K
K1BBU1MgZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9S
X0FUVEFDSE1FTlQwLCBnbC5SRU5ERVJCVUZGRVIsIHJibykgd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUi4KK1BBU1MgZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZS
QU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9PQkpFQ1RfTkFNRSkgaXMgcmJvCitQQVNTIGdsLmRlbGV0ZVJlbmRlcmJ1ZmZlcihyYm8pIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IuCitQQVNTIGdsLmdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUpIGlzIG51bGwKK1BBU1MgZ2wuaXNSZW5k
ZXJidWZmZXIocmJvKSBpcyBmYWxzZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29i
amVjdC1kZWxldGlvbi1iZWhhdmlvdXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9vYmplY3QtZGVsZXRpb24tYmVoYXZpb3VyLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9vYmplY3QtZGVsZXRpb24tYmVo
YXZpb3VyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKzxodG1sPgorPGhlYWQ+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgZGVs
ZXRpb24gYmVoYXZpb3IgZm9yIHRleHR1cmUsIHJlbmRlcmJ1ZmZlciwgc2hhZGVyLCBhbmQgcHJv
Z3JhbSIpOworCit2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7Cit2YXIgZ2wgPSB3dHUuY3JlYXRl
M0RDb250ZXh0KCk7Cit2YXIgc2hvdWxkR2VuZXJhdGVHTEVycm9yID0gd3R1LnNob3VsZEdlbmVy
YXRlR0xFcnJvcjsKKworZGVidWcoIiIpOworZGVidWcoInNoYWRlciBhbmQgcHJvZ3JhbSBkZWxl
dGlvbiIpOworCit2YXIgdmVydGV4U2hhZGVyID0gd3R1LmxvYWRTdGFuZGFyZFZlcnRleFNoYWRl
cihnbCk7Cithc3NlcnRNc2codmVydGV4U2hhZGVyLCAidmVydGV4IHNoYWRlciBsb2FkZWQiKTsK
K3ZhciBmcmFnbWVudFNoYWRlciA9IHd0dS5sb2FkU3RhbmRhcmRGcmFnbWVudFNoYWRlcihnbCk7
Cithc3NlcnRNc2coZnJhZ21lbnRTaGFkZXIsICJmcmFnbWVudCBzaGFkZXIgbG9hZGVkIik7CisK
K3ZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworc2hvdWxkR2VuZXJhdGVHTEVycm9y
KGdsLCBnbC5OT19FUlJPUiwgImdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIp
Iik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wuYXR0YWNoU2hh
ZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKSIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGds
LCBnbC5OT19FUlJPUiwgImdsLmxpbmtQcm9ncmFtKHByb2dyYW0pIik7CitzaG91bGRCZVRydWUo
ImdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpIik7CitzaG91
bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wudXNlUHJvZ3JhbShwcm9ncmFt
KSIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGdsLCBnbC5OT19FUlJPUiwgImdsLmRlbGV0ZVNo
YWRlcih2ZXJ0ZXhTaGFkZXIpIik7CitzaG91bGRCZVRydWUoImdsLmlzU2hhZGVyKHZlcnRleFNo
YWRlcikiKTsKK3Nob3VsZEJlVHJ1ZSgiZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHZlcnRleFNoYWRl
ciwgZ2wuREVMRVRFX1NUQVRVUykiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihnbCwgZ2wuTk9f
RVJST1IsICJnbC5kZXRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKSIpOworc2hvdWxk
QmVGYWxzZSgiZ2wuaXNTaGFkZXIodmVydGV4U2hhZGVyKSIpOworc2hvdWxkR2VuZXJhdGVHTEVy
cm9yKGdsLCBnbC5OT19FUlJPUiwgImdsLmRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcikiKTsK
K3Nob3VsZEJlVHJ1ZSgiZ2wuaXNTaGFkZXIoZnJhZ21lbnRTaGFkZXIpIik7CitzaG91bGRCZVRy
dWUoImdsLmdldFNoYWRlclBhcmFtZXRlcihmcmFnbWVudFNoYWRlciwgZ2wuREVMRVRFX1NUQVRV
UykiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihnbCwgZ2wuTk9fRVJST1IsICJnbC5kZWxldGVQ
cm9ncmFtKHByb2dyYW0pIik7CitzaG91bGRCZVRydWUoImdsLmlzUHJvZ3JhbShwcm9ncmFtKSIp
Oworc2hvdWxkQmVUcnVlKCJnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkRFTEVU
RV9TVEFUVVMpIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wu
dXNlUHJvZ3JhbShudWxsKSIpOworc2hvdWxkQmVGYWxzZSgiZ2wuaXNQcm9ncmFtKHByb2dyYW0p
Iik7CitzaG91bGRCZUZhbHNlKCJnbC5pc1NoYWRlcihmcmFnbWVudFNoYWRlcikiKTsKKworZGVi
dWcoIiIpOworZGVidWcoInRleHR1cmUgZGVsZXRpb24iKTsKKwordmFyIGZibyA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCk7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9SLCAi
Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmYm8pIik7CisKK3ZhciB0ZXggPSBn
bC5jcmVhdGVUZXh0dXJlKCk7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2wsIGdsLk5PX0VSUk9S
LCAiZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KSIpOworc2hvdWxkR2VuZXJhdGVH
TEVycm9yKGdsLCBnbC5OT19FUlJPUiwgImdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1F
QlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGV4LCAwKSIpOwor
c2hvdWxkQmUoImdsLmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJV
RkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX05BTUUpIiwgInRleCIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGdsLCBnbC5OT19FUlJP
UiwgImdsLmRlbGV0ZVRleHR1cmUodGV4KSIpOworLy8gRGVsZXRpbmcgYSB0ZXh0dXJlIGJvdW5k
IHRvIHRoZSBjdXJyZW50bHktYm91bmQgZmJvIGlzIHRoZSBzYW1lIGFzCisvLyBkZXRhY2hpbmcg
dGhlIHRleHR1ZSBmcm9tIGZibyBmaXJzdCwgdGhlbiBkZWxldGUgdGhlIHRleHR1cmUuCitzaG91
bGRCZU51bGwoImdsLmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJV
RkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX05BTUUpIik7CitzaG91bGRCZUZhbHNlKCJnbC5pc1RleHR1cmUodGV4KSIpOworCitkZWJ1
ZygiIik7CitkZWJ1ZygicmVuZGVyYnVmZmVyIGRlbGV0aW9uIik7CisKK3ZhciByYm8gPSBnbC5j
cmVhdGVSZW5kZXJidWZmZXIoKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihnbCwgZ2wuTk9fRVJS
T1IsICJnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgcmJvKSIpOworc2hvdWxk
R2VuZXJhdGVHTEVycm9yKGdsLCBnbC5OT19FUlJPUiwgImdsLmZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuUkVOREVSQlVGRkVS
LCByYm8pIik7CitzaG91bGRCZSgiZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
KGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfTkFNRSkiLCAicmJvIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoZ2ws
IGdsLk5PX0VSUk9SLCAiZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJibykiKTsKKy8vIERlbGV0aW5n
IGEgcmVuZGVyYnVmZmVyIGJvdW5kIHRvIHRoZSBjdXJyZW50bHktYm91bmQgZmJvIGlzIHRoZSBz
YW1lIGFzCisvLyBkZXRhY2hpbmcgdGhlIHJlbmRlcmJ1ZmZlciBmcm9tIGZibyBmaXJzdCwgdGhl
biBkZWxldGUgdGhlIHJlbmRlcmJ1ZmZlci4KK3Nob3VsZEJlTnVsbCgiZ2wuZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5U
MCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSkiKTsKK3Nob3VsZEJlRmFs
c2UoImdsLmlzUmVuZGVyYnVmZmVyKHJibykiKTsKKworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="58547"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="58548"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
      

    </bug>

</bugzilla>