<?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>105847</bug_id>
          
          <creation_ts>2012-12-28 21:07:06 -0800</creation_ts>
          <short_desc>[Texmap] Rename TextureMapperShaderManager.* TextureMapperShaderProgram.*</short_desc>
          <delta_ts>2013-04-05 07:55:46 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>107691</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>798036</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-28 21:07:06 -0800</bug_when>
    <thetext>[Texmap] Rename TextureMapperShaderManager.* TextureMapperShaderProgram.*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798040</commentid>
    <comment_count>1</comment_count>
      <attachid>180914</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-28 21:13:20 -0800</bug_when>
    <thetext>Created attachment 180914
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798043</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-28 21:16:12 -0800</bug_when>
    <thetext>Attachment 180914 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/texmap/TextureMapperShaderProgram.cpp:125:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798051</commentid>
    <comment_count>3</comment_count>
      <attachid>180917</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-28 21:27:36 -0800</bug_when>
    <thetext>Created attachment 180917
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811043</commentid>
    <comment_count>4</comment_count>
      <attachid>183545</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-18 14:29:00 -0800</bug_when>
    <thetext>Created attachment 183545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811052</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-18 14:34:12 -0800</bug_when>
    <thetext>Attachment 183545 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/texmap/TextureMapperShaderProgram.cpp:125:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811334</commentid>
    <comment_count>6</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-19 00:09:40 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Attachment 183545 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderProgram.cpp:125:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
&gt; Total errors found: 1 in 7 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

False positive. Already filed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813078</commentid>
    <comment_count>7</comment_count>
      <attachid>183545</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-22 09:12:43 -0800</bug_when>
    <thetext>Comment on attachment 183545
Patch

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

r+ given you add a comment in the changelog:

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:96
&gt; -        TextureMapperShaderManager textureMapperShaderManager;
&gt; +        PassRefPtr&lt;TextureMapperShaderProgram&gt; getShaderProgram(TextureMapperShaderProgram::Options options)
&gt; +        {
&gt; +            HashMap&lt;TextureMapperShaderProgram::Options, RefPtr&lt;TextureMapperShaderProgram&gt; &gt;::iterator it = m_programs.find(options);
&gt; +            if (it != m_programs.end())
&gt; +                return it-&gt;value;
&gt; +
&gt; +            RefPtr&lt;TextureMapperShaderProgram&gt; program = TextureMapperShaderProgram::create(m_context, options);
&gt; +            m_programs.add(options, program);
&gt; +            return program;

this looks like more than refactorings, should be described shortly in the changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813923</commentid>
    <comment_count>8</comment_count>
      <attachid>184164</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-23 00:02:46 -0800</bug_when>
    <thetext>Created attachment 184164
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813943</commentid>
    <comment_count>9</comment_count>
      <attachid>184164</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-23 00:33:36 -0800</bug_when>
    <thetext>Comment on attachment 184164
Patch for landing

Clearing flags on attachment: 184164

Committed r140518: &lt;http://trac.webkit.org/changeset/140518&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813944</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-23 00:33:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814195</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-23 07:37:12 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 107691</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180914</attachid>
            <date>2012-12-28 21:13:20 -0800</date>
            <delta_ts>2012-12-28 21:27:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105847-20121228211034.patch</filename>
            <type>text/plain</type>
            <size>57766</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTU2M2M5NTMzNGU3YmY1
OTg5ZjM2MTk4YWE4YTkyNGU4ZmZhODY2OC4uN2Q0MWQwYTNmNjY3ZjIxYjc1NjliYmQ4MGVjYmQ2
YmE2YmJkZDNmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTEyLTI4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gUmVuYW1l
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLiogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0u
KgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODQ3
CisKKyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgY29udGFpbnMgdmVyeSBsaXR0
bGUgIm1hbmFnZXIiIGNvZGUuCisgICAgICAgIE1vdmVkIHRoZSBtYXAgb2Ygc2hhZGVycyB0byBU
ZXh0dXJlTWFwcGVyR0wsIGFuZCByZW5hbWVkIHRoZSBmaWxlcyBjb250YWluaW5nCisgICAgICAg
IHRoZSBzaGFkZXIgaW1wbGVtZW50YXRpb24gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3Bw
fGguCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIC0gcmVuYW1lcy9yZWZhY3RvcnMgb25seS4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVGFy
Z2V0LnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdM
RGF0YTo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChTaGFyZWRHTERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFyZWRHTERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpvcHRpb25zRm9yRmlsdGVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmRyYXdGaWx0ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OmJlZ2luQ2xpcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBvc2l0aW5nTG9nRW5hYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OnNldE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6cHJvZ3JhbUlEKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpjb250ZXh0KToKKwogMjAxMi0xMi0yNyAgTm8nYW0gUm9zZW50aGFs
ICA8bm9hbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtUZXhtYXBdIFVzZSBhIHRyYW5zZm9ybSB1
bmlmb3JtIGluc3RlYWQgb2YgdV9mbGlwL3VfdGV4dHVyZVNpemUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IDJmNzRkODhmY2IyMWQyNzQxMDE0ZDU0NWM3MzQ2ZDY4MjM3ZTI4NWYu
Ljg3NThlZGMwZTU4MTVlZGZiN2M0OTg1NWQ0NzNkOTliYWE1ZDM5YmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtNjM5Nyw4ICs2Mzk3LDggQEAgaWYgVVNFX1RFWFRVUkVfTUFQ
UEVSX0NBSVJPCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlLy9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3RleG1hcC9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtVGV4
dHVyZU1hcHBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlLy9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1Db21waWxlZFByb2dyYW0uaCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZQppbmRleCBlN2U0NjljOTI1YmRlM2I1YzhlNTZhZGY0MmE4ZjEyYzUwMWVm
Zjk2Li5jMzNlZDZmOGY2Yjg2NjIyMmE2ODlmMGFkMzg0NDQ2NjcwY2I2Zjc5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZQpAQCAtMjg4LDcgKzI4OCw3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBI
SUNTKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJm
YWNlR0xYLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2lu
ZG93UmVzb3VyY2VzLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKICAgICApCiAKICAgICBpZiAoV1RGX1VTRV9F
R0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQppbmRleCAwYjc2ODUzYzNiZmM3OTBmODA2MDgyMjZiZDQ4OThiN2M0ZmQz
ZGMxLi44NThiMWQ4MzQyZWZhMTRhMjRhZWQ4YjUwOGUxOTQ3MWU3YzIzNGQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkKQEAgLTQwMTIsNyArNDAxMiw3IEBAIHVzZT8oM0RfR1JBUEhJQ1MpIHsKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oCiAKICAgICBTT1VSQ0VT
ICs9IFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwIFwK
QEAgLTQwMjUsNyArNDAyNSw3IEBAIHVzZT8oM0RfR1JBUEhJQ1MpIHsKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgXAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIFwKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAor
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0uY3BwCiAKICAgICBJTkNMVURFUEFUSCArPSAkJFBXRC9wbGF0Zm9ybS9ncmFwaGljcy9ncHUK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCBmYTQzN2QzNzEwYjg3OTg5NWVjNTMzMzFiNzhk
M2FlMTk1OGQ0ZGQwLi5jYmEwZTYwM2ZlYzhkNTNmMTdhYTM3ZjE0OGJmN2Y1YzU0ZjMzN2NmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkltYWdl
LmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgpAQCAtODUs
MTAgKzg1LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hh
cmVkR0xEYXRhKGNvbnRleHQpKTsKICAgICAgICAgfQogCi0gICAgICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOworICAgICAgICBQYXNzUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlvbnMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEhhc2hNYXA8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMsIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gPjo6aXRlcmF0b3IgaXQgPSBtX3Byb2dyYW1zLmZp
bmQob3B0aW9ucyk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbV9wcm9ncmFtcy5lbmQoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworCisgICAgICAgICAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6Y3JlYXRlKG1fY29udGV4dCwgb3B0aW9ucyk7CisgICAgICAgICAgICBtX3Byb2dyYW1z
LmFkZChvcHRpb25zLCBwcm9ncmFtKTsKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtOworICAg
ICAgICB9CisKKyAgICAgICAgSGFzaE1hcDxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3B0
aW9ucywgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiA+IG1fcHJvZ3JhbXM7Cisg
ICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogCiAgICAgICAgIGV4
cGxpY2l0IFNoYXJlZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICAgICAg
ICAgIDogdGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoY29udGV4dCkKKyAgICAgICAgICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGdsQ29udGV4dERhdGFN
YXAoKS5hZGQoY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpLCB0aGlzKTsKICAg
ICAgICAgfQpAQCAtMjk4LDcgKzMxMCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9y
ZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgsIGNvbnN0IEZsb2F0UmVjCiAgICAg
aWYgKGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFt
ID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNo
YWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlkQ29sb3IpOworICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpT
b2xpZENvbG9yKTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFt
SUQoKSk7CiAKICAgICBmbG9hdCByLCBnLCBiLCBhOwpAQCAtMzk4LDE1ICs0MTAsMTUgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwg
RmxhZ3MgZmxhZ3MsIGNvbnN0IEkKICAgICAgICAgJiYgZXhwb3NlZEVkZ2VzID09IEFsbEVkZ2Vz
CiAgICAgICAgICYmICFtb2RlbFZpZXdNYXRyaXgubWFwUXVhZCh0YXJnZXRSZWN0KS5pc1JlY3Rp
bGluZWFyKCk7CiAKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRp
b25zID0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmU7CisgICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpUZXh0dXJlOwogICAgIGlmIChtYXNrZWQpCi0gICAgICAgIG9wdGlvbnMgfD0gVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2s7CisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06Ok1hc2s7CiAgICAgaWYgKHVzZVJlY3QpCi0gICAgICAgIG9w
dGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3Q7CisgICAgICAgIG9wdGlv
bnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlJlY3Q7CiAgICAgaWYgKG9wYWNpdHkg
PCAxKQotICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFj
aXR5OworICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcGFj
aXR5OwogICAgIGlmICh1c2VBbnRpYWxpYXNpbmcpIHsKLSAgICAgICAgb3B0aW9ucyB8PSBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzaW5nOworICAgICAgICBvcHRpb25zIHw9
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpBbnRpYWxpYXNpbmc7CiAgICAgICAgIGZsYWdz
IHw9IFNob3VsZEFudGlhbGlhczsKICAgICB9CiAKQEAgLTQxNCwyMCArNDI2LDIwIEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZs
YWdzIGZsYWdzLCBjb25zdCBJCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwogCiAgICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwotICAgIHByb2dyYW0g
PSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hh
ZGVyUHJvZ3JhbShvcHRpb25zKTsKKyAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgp
LmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9n
cmFtKHByb2dyYW0uZ2V0KCksIHRleHR1cmUsIGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVj
dCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSk7CiB9CiAKIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAg
ICBGbGFncyBmbGFncyA9IDA7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlv
bnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9yOworICAg
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6U29saWRDb2xvcjsKICAgICBpZiAoIW1hdHJpeC5tYXBRdWFkKHJl
Y3QpLmlzUmVjdGlsaW5lYXIoKSkgewotICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpBbnRpYWxpYXNpbmc7CisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06OkFudGlhbGlhc2luZzsKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxk
QmxlbmQgfCBTaG91bGRBbnRpYWxpYXM7CiAgICAgfQogCi0gICAgUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CisgICAgUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0
YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dy
YW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCiAgICAgZmxvYXQgciwgZywgYiwgYTsKQEAgLTY5
MSwzMCArNzAzLDMwIEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWFn
ZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvCiAKICNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCiAKLXN0YXRpYyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9ucyBv
cHRpb25zRm9yRmlsdGVyVHlwZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwg
dW5zaWduZWQgcGFzcykKK3N0YXRpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3B0aW9u
cyBvcHRpb25zRm9yRmlsdGVyVHlwZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlw
ZSwgdW5zaWduZWQgcGFzcykKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6R3JheXNjYWxl
RmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1
cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6R3JheXNjYWxlRmlsdGVyOwogICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNlcGlh
RmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1
cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6U2VwaWFGaWx0ZXI7CiAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2F0dXJh
dGVGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4
dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTYXR1cmF0ZUZpbHRlcjsKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
Okh1ZVJvdGF0ZUZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Okh1ZVJvdGF0ZUZpbHRl
cjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgICAgICByZXR1cm4gVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6SW52ZXJ0RmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6SW52ZXJ0RmlsdGVy
OwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgICAgICByZXR1cm4g
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6QnJpZ2h0bmVzc0ZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OkJyaWdo
dG5lc3NGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgICAg
ICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6Q29udHJhc3RGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
OjpDb250cmFzdEZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAg
ICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHlGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpPcGFjaXR5RmlsdGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAg
ICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkJsdXJGaWx0ZXI7CisgICAg
ICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Qmx1ckZpbHRlcjsKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIHJldHVybiBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6QWxwaGFCbHVyCi0gICAgICAgICAgICB8IChwYXNzID8gVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkNvbnRlbnRUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlNvbGlkQ29sb3I6IDApOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06OkFscGhhQmx1cgorICAgICAgICAgICAgfCAocGFzcyA/IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtOjpDb250ZW50VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpTb2xpZENvbG9yOiAwKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC04OTcsOCArOTA5LDggQEAgYm9vbCBU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdVc2luZ0N1c3RvbUZpbHRlcihCaXRtYXBUZXh0dXJlJiB0YXJn
ZXQsIGNvbnN0IEJpdG1hcFQKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQoY29u
c3QgQml0bWFwVGV4dHVyZSYgc2FtcGxlciwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRl
eHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykKIHsKICAgICAv
LyBGb3Igc3RhbmRhcmQgZmlsdGVycywgd2UgYWx3YXlzIGRyYXcgdGhlIHdob2xlIHRleHR1cmUg
d2l0aG91dCB0cmFuc2Zvcm1hdGlvbnMuCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
Ok9wdGlvbnMgb3B0aW9ucyA9IG9wdGlvbnNGb3JGaWx0ZXJUeXBlKGZpbHRlci5nZXRPcGVyYXRp
b25UeXBlKCksIHBhc3MpOwotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
cHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpPcHRpb25zIG9wdGlvbnMgPSBvcHRpb25zRm9yRmlsdGVyVHlwZShmaWx0ZXIuZ2V0T3Bl
cmF0aW9uVHlwZSgpLCBwYXNzKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRp
b25zKTsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKICAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShw
cm9ncmFtLmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIuY29udGVudFNpemUoKSwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oY29udGVudFRleHR1cmUpLmlkKCkpOwpAQCAt
MTA5Nyw3ICsxMTA5LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KIAogICAgIGRhdGEoKS5p
bml0aWFsaXplU3RlbmNpbCgpOwogCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlk
Q29sb3IpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9
IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpTb2xpZENvbG9yKTsKIAogICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHBy
b2dyYW0tPnByb2dyYW1JRCgpKTsKICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYxZDcz
MDNjYWNkMGI5NDZkYTE0OWY1YTUzMzY2NWZjNWM5OTMwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNDEyICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgotIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUgIkxlbmd0aEZ1bmN0
aW9ucy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wu
aCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotI2RlZmluZSBTVFJJ
TkdJRlkoLi4uKSAjX19WQV9BUkdTX18KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
aW5saW5lIGJvb2wgY29tcG9zaXRpbmdMb2dFbmFibGVkKCkKLXsKLSNpZiAhTE9HX0RJU0FCTEVE
Ci0gICAgcmV0dXJuIExvZ0NvbXBvc2l0aW5nLnN0YXRlID09IFdURkxvZ0NoYW5uZWxPbjsKLSNl
bHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHZlcnRleCwgY29uc3QgU3RyaW5nJiBmcmFn
bWVudCkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotewotICAgIG1fdmVydGV4U2hhZGVyID0g
bV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIp
OwotICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJj
ZShtX3ZlcnRleFNoYWRlciwgdmVydGV4KTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSht
X2ZyYWdtZW50U2hhZGVyLCBmcmFnbWVudCk7Ci0gICAgbV9pZCA9IG1fY29udGV4dC0+Y3JlYXRl
UHJvZ3JhbSgpOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7
Ci0gICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIG1f
Y29udGV4dC0+YXR0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRl
eHQtPmF0dGFjaFNoYWRlcihtX2lkLCBtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQt
PmxpbmtQcm9ncmFtKG1faWQpOwotCi0gICAgaWYgKCFjb21wb3NpdGluZ0xvZ0VuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBs
b2cgPSBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cobV92ZXJ0ZXhTaGFkZXIpOwotICAgIExP
RyhDb21wb3NpdGluZywgIlZlcnRleCBzaGFkZXIgbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRh
KCkpOwotICAgIGxvZyA9IG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhtX2ZyYWdtZW50U2hh
ZGVyKTsKLSAgICBMT0coQ29tcG9zaXRpbmcsICJGcmFnbWVudCBzaGFkZXIgbG9nOiAlc1xuIiwg
bG9nLnV0ZjgoKS5kYXRhKCkpOwotICAgIGxvZyA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9M
b2cobV9pZCk7Ci0gICAgTE9HKENvbXBvc2l0aW5nLCAiUHJvZ3JhbSBsb2c6ICVzXG4iLCBsb2cu
dXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnNl
dE1hdHJpeChHQzNEdWludCBsb2NhdGlvbiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dHJpeCkKLXsKLSAgICBHQzNEZmxvYXQgbWF0cml4QXNGbG9hdHNbXSA9IHsKLSAgICAgICAgbWF0
cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAotICAg
ICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0
KCksCi0gICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1h
dHJpeC5tMzQoKSwKLSAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5t
NDMoKSwgbWF0cml4Lm00NCgpCi0gICAgfTsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgMSwgZmFsc2UsIG1hdHJpeEFzRmxvYXRzKTsKLX0KLQotR0MzRHVpbnQg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgVmFyaWFibGVUeXBlIHR5cGUpCi17Ci0gICAgSGFzaE1hcDxBdG9taWNTdHJpbmcs
IEdDM0R1aW50Pjo6aXRlcmF0b3IgaXQgPSBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpOwotICAgIGlm
IChpdCAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKLQot
ICAgIEdDM0R1aW50IGxvY2F0aW9uID0gMDsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNl
IFVuaWZvcm1WYXJpYWJsZToKLSAgICAgICAgbG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZv
cm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBdHRyaWJW
YXJpYWJsZToKLSAgICAgICAgbG9jYXRpb24gPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9u
KG1faWQsIG5hbWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV92YXJpYWJs
ZXMuYWRkKG5hbWUsIGxvY2F0aW9uKTsKLSAgICByZXR1cm4gbG9jYXRpb247Ci19Ci0KLVRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQotewot
ICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEID0gbV9pZDsKLSAgICBpZiAoIXByb2dyYW1J
RCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIocHJvZ3Jh
bUlELCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV92ZXJ0
ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV9mcmFn
bWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRl
cik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKHByb2dyYW1JRCk7Ci19Ci0KLSNkZWZp
bmUgR0xTTF9ESVJFQ1RJVkUoLi4uKSAiIyIjX19WQV9BUkdTX18iXG4iCi1zdGF0aWMgY29uc3Qg
Y2hhciogdmVydGV4VGVtcGxhdGUgPQotICAgIFNUUklOR0lGWSgKLSAgICAgICAgYXR0cmlidXRl
IHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHVuaWZvcm0gbWF0NCB1X21vZGVsVmlld01hdHJpeDsK
LSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfcHJvamVjdGlvbk1hdHJpeDsKLSAgICAgICAgdW5pZm9y
bSBtYXQ0IHVfdGV4dHVyZVNwYWNlTWF0cml4OwotCi0gICAgICAgIHZhcnlpbmcgdmVjMiB2X3Rl
eENvb3JkOwotICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgIHZh
cnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7Ci0KLSAgICAgICAgdm9pZCBub29wKHZlYzIpIHsgfQot
Ci0gICAgICAgIHZlYzQgdG9WaWV3cG9ydFNwYWNlKHZlYzIgcG9zKSB7IHJldHVybiB2ZWM0KHBv
cywgMC4sIDEuKSAqIHVfbW9kZWxWaWV3TWF0cml4OyB9Ci0KLSAgICAgICAgLy8gVGhpcyBmdW5j
dGlvbiByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSBnZXQgZWRnZSB0cmlhbmdsZXMg
d2l0aCBjb250cm9sIHBvaW50cywKLSAgICAgICAgLy8gYSBjb250cm9sIHBvaW50IGJlaW5nIHRo
ZSBuZWFyZXN0IHBvaW50IHRvIHRoZSBjb29yZGluYXRlIHRoYXQgaXMgb24gdGhlIGVkZ2UuCi0g
ICAgICAgIHZvaWQgYXBwbHlBbnRpYWxpYXNpbmcoaW5vdXQgdmVjMiBwb3NpdGlvbikKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gV2UgY291bnQgb24gdGhlIGZhY3QgdGhhdCBxdWFkIHBhc3Nl
ZCBpbiBpcyBhbHdheXMgYSB1bml0IHJlY3QsCi0gICAgICAgICAgICAvLyBhbmQgdGhlIHRyYW5z
Zm9ybWF0aW9uIG1hdHJpeCBhcHBsaWVzIHRoZSByZWFsIHJlY3QuCi0gICAgICAgICAgICBjb25z
dCB2ZWMyIGNlbnRlciA9IHZlYzIoMC41LCAwLjUpOwotICAgICAgICAgICAgY29uc3QgZmxvYXQg
YW50aWFsaWFzSW5mbGF0aW9uRGlzdGFuY2UgPSAxLjsKLQotICAgICAgICAgICAgLy8gV2UgcGFz
cyB0aGUgY29udHJvbCBwb2ludCBhcyB0aGUgencgY29vcmRpbmF0ZXMgb2YgdGhlIHZlcnRleC4K
LSAgICAgICAgICAgIC8vIFRoZSBjb250cm9sIHBvaW50IGlzIHRoZSBwb2ludCBvbiB0aGUgZWRn
ZSBjbG9zZXN0IHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICAgICAgICAgICAgLy8gVGhlIGNv
bnRyb2wgcG9pbnQgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBhbnRpYWxpYXMgdmFsdWUuCi0gICAg
ICAgICAgICB2ZWMyIGNvbnRyb2xQb2ludCA9IGFfdmVydGV4Lnp3OwotCi0gICAgICAgICAgICAv
LyBGaXJzdCB3ZSBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGluIHZpZXdwb3J0IHNwYWNlLgotICAg
ICAgICAgICAgdmVjNCBjZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSB0b1ZpZXdwb3J0U3Bh
Y2UoY2VudGVyKTsKLSAgICAgICAgICAgIHZlYzQgY29udHJvbFBvaW50SW5WaWV3cG9ydENvb3Jk
aW5hdGVzID0gdG9WaWV3cG9ydFNwYWNlKGNvbnRyb2xQb2ludCk7Ci0gICAgICAgICAgICBmbG9h
dCB2aWV3cG9ydFNwYWNlRGlzdGFuY2UgPSBkaXN0YW5jZShjZW50ZXJJblZpZXdwb3J0Q29vcmRp
bmF0ZXMsIGNvbnRyb2xQb2ludEluVmlld3BvcnRDb29yZGluYXRlcyk7Ci0KLSAgICAgICAgICAg
IC8vIFdlIGFkZCB0aGUgaW5mbGF0aW9uIGRpc3RhbmNlIHRvIHRoZSBjb21wdXRlZCBkaXN0YW5j
ZSwgYW5kIGNvbXB1dGUgdGhlIHJhdGlvLgotICAgICAgICAgICAgZmxvYXQgaW5mbGF0aW9uUmF0
aW8gPSAodmlld3BvcnRTcGFjZURpc3RhbmNlICsgYW50aWFsaWFzSW5mbGF0aW9uRGlzdGFuY2Up
IC8gdmlld3BvcnRTcGFjZURpc3RhbmNlOwotCi0gICAgICAgICAgICAvLyB2X2FudGlhbGlhcyBu
ZWVkcyB0byBiZSAwIGZvciB0aGUgb3V0ZXIgZWRnZSBhbmQgMS4gZm9yIHRoZSBpbm5lciBlZGdl
LgotICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbnRyb2xQb2ludCBpcyBlcXVhbCB0byB0aGUg
cG9zaXRpb24gaW4gdGhlIGVkZ2UgdmVydGljZXMsIHRoZSB2YWx1ZSBpcyBhbHdheXMgMCBmb3Ig
dGhvc2UuCi0gICAgICAgICAgICAvLyBGb3IgdGhlIGNlbnRlciBwb2ludCwgdGhlIGRpc3RhbmNl
IGlzIGFsd2F5cyAwLjUsIHNvIHdlIG5vcm1hbGl6ZSB0byAxLiBieSBtdWx0aXBseWluZyBieSAy
LgotICAgICAgICAgICAgLy8gQnkgbXVsdHBseWluZyBieSBpbmZsYXRpb25SYXRpbyBhbmQgZGl2
aWRpbmcgYnkgKGluZmxhdGlvblJhdGlvIC0gMSksCi0gICAgICAgICAgICAvLyBXZSBtYWtlIHN1
cmUgdGhhdCB0aGUgdmFyeWluZyBpbnRlcnBvbGF0ZXMgYmV0d2VlbiAwIChvdXRlciBlZGdlKSwg
MSAoaW5uZXIgZWRnZSkgYW5kIG4gPiAxIChjZW50ZXIpLgotICAgICAgICAgICAgdl9hbnRpYWxp
YXMgPSBkaXN0YW5jZShjb250cm9sUG9pbnQsIHBvc2l0aW9uKSAqIDIuICogaW5mbGF0aW9uUmF0
aW8gLyAoaW5mbGF0aW9uUmF0aW8gLSAxLik7Ci0KLSAgICAgICAgICAgIC8vIE5vdyBpbmZsYXRl
IHRoZSBhY3R1YWwgcG9zaXRpb24uIEJ5IHVzaW5nIHRoaXMgZm9ybXVsYSBpbnN0ZWFkIG9mIGlu
ZmxhdGluZyBwb3NpdGlvbiBkaXJlY3RseSwKLSAgICAgICAgICAgIC8vIHdlIGVuc3VyZSB0aGF0
IHRoZSBjZW50ZXIgdmVydGV4IGlzIG5ldmVyIGluZmxhdGVkLgotICAgICAgICAgICAgcG9zaXRp
b24gPSBjZW50ZXIgKyAocG9zaXRpb24gLSBjZW50ZXIpICogaW5mbGF0aW9uUmF0aW87Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAg
dmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4Lnh5OwotICAgICAgICAgICAgYXBwbHlBbnRpYWxpYXNp
bmdJZk5lZWRlZChwb3NpdGlvbik7Ci0KLSAgICAgICAgICAgIC8vIFRoZSB0ZXh0dXJlIHBvc2l0
aW9uIG5lZWRzIHRvIGJlIGNsYW1wZWQgdG8gMC4uMSBiZWZvcmUgdGhlIHRleHR1cmUgbWF0cml4
IGlzIGFwcGxpZWQuCi0gICAgICAgICAgICB2ZWM0IGNsYW1wZWRQb3NpdGlvbiA9IGNsYW1wKHZl
YzQocG9zaXRpb24sIDAuLCAxLiksIDAuLCAxLik7Ci0gICAgICAgICAgICB2X3RleENvb3JkID0g
KHVfdGV4dHVyZVNwYWNlTWF0cml4ICogY2xhbXBlZFBvc2l0aW9uKS54eTsKLQotICAgICAgICAg
ICAgdl9tYXNrVGV4Q29vcmQgPSBwb3NpdGlvbjsKLSAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0g
dV9wcm9qZWN0aW9uTWF0cml4ICogdV9tb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAw
LiwgMS4pOwotICAgICAgICB9Ci0gICAgKTsKLQotI2RlZmluZSBSRUNUX1RFWFRVUkVfRElSRUNU
SVZFIFwKLSAgICBHTFNMX0RJUkVDVElWRShpZmRlZiBFTkFCTEVfUmVjdCkgXAotICAgICAgICBH
TFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlclR5cGUgc2FtcGxlcjJEUmVjdCkgXAotICAgICAg
ICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlckZ1bmN0aW9uIHRleHR1cmUyRFJlY3QpIFwK
LSAgICBHTFNMX0RJUkVDVElWRShlbHNlKSBcCi0gICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmlu
ZSBTYW1wbGVyVHlwZSBzYW1wbGVyMkQpIFwKLSAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5l
IFNhbXBsZXJGdW5jdGlvbiB0ZXh0dXJlMkQpIFwKLSAgICBHTFNMX0RJUkVDVElWRShlbmRpZikK
LQotI2RlZmluZSBFTkFCTEVfQVBQTElFUihOYW1lKSAiI2RlZmluZSBFTkFCTEVfIiNOYW1lIlxu
I2RlZmluZSBhcHBseSIjTmFtZSJJZk5lZWRlZCBhcHBseSIjTmFtZSJcbiIKLSNkZWZpbmUgRElT
QUJMRV9BUFBMSUVSKE5hbWUpICIjZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIG5vb3BcbiIK
LSNkZWZpbmUgQkxVUl9DT05TVEFOVFMgXAotICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVT
U0lBTl9LRVJORUxfSEFMRl9XSURUSCAxMSkgXAotICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBH
QVVTU0lBTl9LRVJORUxfU1RFUCAwLjIpCi0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50
VGVtcGxhdGUgPQotICAgIFJFQ1RfVEVYVFVSRV9ESVJFQ1RJVkUKLSAgICBCTFVSX0NPTlNUQU5U
UwotICAgIFNUUklOR0lGWSgKLSAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAg
ICAgIHVuaWZvcm0gU2FtcGxlclR5cGUgc19zYW1wbGVyOwotICAgICAgICB1bmlmb3JtIHNhbXBs
ZXIyRCBzX21hc2s7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfY29udGVudFRleHR1cmU7
Ci0gICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGZsb2F0
IHZfYW50aWFsaWFzOwotICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAg
dmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmls
dGVyQW1vdW50OwotICAgICAgICB1bmlmb3JtIHZlYzIgdV9ibHVyUmFkaXVzOwotICAgICAgICB1
bmlmb3JtIHZlYzIgdV9zaGFkb3dPZmZzZXQ7Ci0gICAgICAgIHVuaWZvcm0gdmVjNCB1X2NvbG9y
OwotICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVM
X0hBTEZfV0lEVEhdOwotCi0gICAgICAgIHZvaWQgbm9vcChpbm91dCB2ZWM0IGR1bW15UGFyYW1l
dGVyKSB7IH0KLQotICAgICAgICBmbG9hdCBhbnRpYWxpYXMoKSB7IHJldHVybiBzbW9vdGhzdGVw
KHZfYW50aWFsaWFzLCAwLiwgMS4pOyB9Ci0KLSAgICAgICAgdm9pZCBhcHBseVRleHR1cmUoaW5v
dXQgdmVjNCBjb2xvcikgeyBjb2xvciA9IFNhbXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIHZfdGV4
Q29vcmQpOyB9Ci0gICAgICAgIHZvaWQgYXBwbHlPcGFjaXR5KGlub3V0IHZlYzQgY29sb3IpIHsg
Y29sb3IgKj0gdV9vcGFjaXR5OyB9Ci0gICAgICAgIHZvaWQgYXBwbHlBbnRpYWxpYXNpbmcoaW5v
dXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSBhbnRpYWxpYXMoKTsgfQotICAgICAgICB2b2lkIGFw
cGx5TWFzayhpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHRleHR1cmUyRChzX21hc2ssIHZf
bWFza1RleENvb3JkKS5hOyB9Ci0KLSAgICAgICAgdm9pZCBhcHBseUdyYXlzY2FsZUZpbHRlcihp
bm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSAx
LjAgLSB1X2ZpbHRlckFtb3VudDsKLSAgICAgICAgICAgIGNvbG9yID0gdmVjNCgoMC4yMTI2ICsg
MC43ODc0ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAq
IGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAg
ICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAr
IDAuMjg0OCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkg
KiBjb2xvci5iLAotICAgICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICog
Y29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIg
KyAwLjkyNzggKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICBjb2xvci5hKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYXBwbHlTZXBpYUZpbHRlcihpbm91dCB2ZWM0IGNv
bG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2ZpbHRl
ckFtb3VudDsKLSAgICAgICAgICAgIGNvbG9yID0gdmVjNCgoMC4zOTMgKyAwLjYwNyAqIGFtb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91bnQpICogY29sb3IuZyArICgwLjE4
OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgKDAuMzQ5IC0g
MC4zNDkgKiBhbW91bnQpICogY29sb3IuciArICgwLjY4NiArIDAuMzE0ICogYW1vdW50KSAqIGNv
bG9yLmcgKyAoMC4xNjggLSAwLjE2OCAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAg
ICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC41MzQgLSAwLjUzNCAq
IGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44NjkgKiBhbW91bnQpICogY29sb3IuYiwK
LSAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYXBw
bHlTYXR1cmF0ZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb2xvciA9IHZlYzQoKDAuMjEzICsgMC43ODcgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5y
ICsgKDAuNzE1IC0gMC43MTUgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0g
MC4wNzIgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICgwLjIx
MyAtIDAuMjEzICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuciArICgwLjcxNSArIDAuMjg1ICog
dV9maWx0ZXJBbW91bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcyICogdV9maWx0ZXJBbW91
bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIxMyAqIHVfZmlsdGVy
QW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfZmlsdGVyQW1vdW50KSAqIGNv
bG9yLmcgKyAoMC4wNzIgKyAwLjkyOCAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsCi0gICAg
ICAgICAgICAgICAgY29sb3IuYSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFwcGx5SHVl
Um90YXRlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZs
b2F0IHBpID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKLSAgICAgICAgICAgIGZsb2F0IGMgPSBj
b3ModV9maWx0ZXJBbW91bnQgKiBwaSAvIDE4MC4wKTsKLSAgICAgICAgICAgIGZsb2F0IHMgPSBz
aW4odV9maWx0ZXJBbW91bnQgKiBwaSAvIDE4MC4wKTsKLSAgICAgICAgICAgIGNvbG9yID0gdmVj
NChjb2xvci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSArIGNvbG9yLmcgKiAo
MC43MTUgLSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAw
LjA3MiArIHMgKiAwLjkyOCksCi0gICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMg
KiAwLjIxMyArIHMgKiAwLjE0MykgKyBjb2xvci5nICogKDAuNzE1ICsgYyAqIDAuMjg1ICsgcyAq
IDAuMTQwKSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgLSBzICogMC4yODMpLAotICAg
ICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgLSBzICogMC43ODcpICsg
IGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgKyBzICogMC43MTUpICsgY29sb3IuYiAqICgw
LjA3MiArIGMgKiAwLjkyOCArIHMgKiAwLjA3MiksCi0gICAgICAgICAgICAgICAgY29sb3IuYSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBpbnZlcnQoZmxvYXQgbikgeyByZXR1cm4gKDEu
MCAtIG4pICogdV9maWx0ZXJBbW91bnQgKyBuICogKDEuMCAtIHVfZmlsdGVyQW1vdW50KTsgfQot
ICAgICAgICB2b2lkIGFwcGx5SW52ZXJ0RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbG9yID0gdmVjNChpbnZlcnQoY29sb3IuciksIGludmVydChjb2xv
ci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgYXBwbHlCcmlnaHRuZXNzRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbG9yID0gdmVjNChjb2xvci5yZ2IgKiAoMS4wICsgdV9maWx0ZXJBbW91bnQp
LCBjb2xvci5hKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGNvbnRyYXN0KGZsb2F0IG4p
IHsgcmV0dXJuIChuIC0gMC41KSAqIHVfZmlsdGVyQW1vdW50ICsgMC41OyB9Ci0gICAgICAgIHZv
aWQgYXBwbHlDb250cmFzdEZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb2xvciA9IHZlYzQoY29udHJhc3QoY29sb3IuciksIGNvbnRyYXN0KGNvbG9yLmcp
LCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IGFwcGx5T3BhY2l0eUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb2xvciA9IHZlYzQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVf
ZmlsdGVyQW1vdW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZlYzQgc2FtcGxlQ29sb3JBdFJh
ZGl1cyhmbG9hdCByYWRpdXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2
X3RleENvb3JkICsgcmFkaXVzICogdV9ibHVyUmFkaXVzOwotICAgICAgICAgICAgcmV0dXJuIFNh
bXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIGNvb3JkKSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBj
b29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7Ci0gICAgICAgIH0K
LQotICAgICAgICBmbG9hdCBzYW1wbGVBbHBoYUF0UmFkaXVzKGZsb2F0IHJhZGl1cykKLSAgICAg
ICAgewotICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgLSB1X3NoYWRvd09mZnNl
dCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsKLSAgICAgICAgICAgIHJldHVybiBTYW1wbGVyRnVu
Y3Rpb24oc19zYW1wbGVyLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55
ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIGFwcGx5Qmx1ckZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB2ZWM0IHRvdGFsID0gc2FtcGxlQ29sb3JBdFJhZGl1cygwLikgKiB1X2dhdXNz
aWFuS2VybmVsWzBdOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9L
RVJORUxfSEFMRl9XSURUSDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxl
Q29sb3JBdFJhZGl1cyhmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3Np
YW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQ29sb3JBdFJhZGl1
cyhmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5l
bFtpXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29sb3IgPSB0b3RhbDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgYXBwbHlBbHBoYUJsdXIoaW5vdXQgdmVjNCBjb2xvcikKLSAg
ICAgICAgewotICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYUF0UmFkaXVzKDAu
KSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8
IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAgICAgICB0b3Rh
bCArPSBzYW1wbGVBbHBoYUF0UmFkaXVzKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVAp
ICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVB
bHBoYUF0UmFkaXVzKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dh
dXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb2xvciAqPSB0
b3RhbDsKLSAgICAgICAgfQotCi0gICAgICAgIHZlYzQgc291cmNlT3Zlcih2ZWM0IHNyYywgdmVj
NCBkc3QpIHsgcmV0dXJuIHNyYyArIGRzdCAqICgxLiAtIGRzdC5hKTsgfQotCi0gICAgICAgIHZv
aWQgYXBwbHlDb250ZW50VGV4dHVyZShpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB2ZWM0IGNvbnRlbnRDb2xvciA9IHRleHR1cmUyRChzX2NvbnRlbnRUZXh0dXJlLCB2
X3RleENvb3JkKTsKLSAgICAgICAgICAgIGNvbG9yID0gc291cmNlT3Zlcihjb250ZW50Q29sb3Is
IGNvbG9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYXBwbHlTb2xpZENvbG9yKGlub3V0
IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdV9jb2xvcjsgfQotCi0gICAgICAgIHZvaWQgbWFpbih2
b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICB2ZWM0IGNvbG9yID0gdmVjNCgxLiwgMS4sIDEu
LCAxLik7Ci0gICAgICAgICAgICBhcHBseVRleHR1cmVJZk5lZWRlZChjb2xvcik7Ci0gICAgICAg
ICAgICBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZChjb2xvcik7Ci0gICAgICAgICAgICBhcHBseUFu
dGlhbGlhc2luZ0lmTmVlZGVkKGNvbG9yKTsKLSAgICAgICAgICAgIGFwcGx5TWFza0lmTmVlZGVk
KGNvbG9yKTsKLSAgICAgICAgICAgIGFwcGx5T3BhY2l0eUlmTmVlZGVkKGNvbG9yKTsKLSAgICAg
ICAgICAgIGFwcGx5R3JheXNjYWxlRmlsdGVySWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAg
YXBwbHlTZXBpYUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKLSAgICAgICAgICAgIGFwcGx5U2F0dXJh
dGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7Ci0gICAgICAgICAgICBhcHBseUh1ZVJvdGF0ZUZpbHRl
cklmTmVlZGVkKGNvbG9yKTsKLSAgICAgICAgICAgIGFwcGx5SW52ZXJ0RmlsdGVySWZOZWVkZWQo
Y29sb3IpOwotICAgICAgICAgICAgYXBwbHlCcmlnaHRuZXNzRmlsdGVySWZOZWVkZWQoY29sb3Ip
OwotICAgICAgICAgICAgYXBwbHlDb250cmFzdEZpbHRlcklmTmVlZGVkKGNvbG9yKTsKLSAgICAg
ICAgICAgIGFwcGx5T3BhY2l0eUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKLSAgICAgICAgICAgIGFw
cGx5Qmx1ckZpbHRlcklmTmVlZGVkKGNvbG9yKTsKLSAgICAgICAgICAgIGFwcGx5QWxwaGFCbHVy
SWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAgYXBwbHlDb250ZW50VGV4dHVyZUlmTmVlZGVk
KGNvbG9yKTsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOwotICAgICAgICB9Ci0g
ICAgKTsKLQotCi1zdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMsIFN0cmluZyYgdmVydGV4U291cmNlLCBTdHJpbmcmIGZy
YWdtZW50U291cmNlKQotewotCi0gICAgU3RyaW5nQnVpbGRlciBzaGFkZXJCdWlsZGVyOwotI2Rl
ZmluZSBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQXBwbGllcikgXAotICAgIHNoYWRlckJ1aWxk
ZXIuYXBwZW5kKFwKLSAgICAgICAgKG9wdGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6QXBwbGllcikgPyBFTkFCTEVfQVBQTElFUihBcHBsaWVyKSA6IERJU0FCTEVfQVBQTElFUihB
cHBsaWVyKSkKLQotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKTsKLSAgICBT
RVRfQVBQTElFUl9GUk9NX09QVElPTlMoUmVjdCk7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKFNvbGlkQ29sb3IpOwotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KTsK
LSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoTWFzayk7Ci0gICAgU0VUX0FQUExJRVJfRlJP
TV9PUFRJT05TKEFudGlhbGlhc2luZyk7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdy
YXlzY2FsZUZpbHRlcik7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNlcGlhRmlsdGVy
KTsKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2F0dXJhdGVGaWx0ZXIpOwotICAgIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhIdWVSb3RhdGVGaWx0ZXIpOwotICAgIFNFVF9BUFBMSUVS
X0ZST01fT1BUSU9OUyhCcmlnaHRuZXNzRmlsdGVyKTsKLSAgICBTRVRfQVBQTElFUl9GUk9NX09Q
VElPTlMoQ29udHJhc3RGaWx0ZXIpOwotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZl
cnRGaWx0ZXIpOwotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5RmlsdGVyKTsK
LSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQmx1ckZpbHRlcik7Ci0gICAgU0VUX0FQUExJ
RVJfRlJPTV9PUFRJT05TKEFscGhhQmx1cik7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05T
KENvbnRlbnRUZXh0dXJlKTsKLSAgICBTdHJpbmdCdWlsZGVyIHZlcnRleEJ1aWxkZXI7Ci0gICAg
dmVydGV4QnVpbGRlci5hcHBlbmQoc2hhZGVyQnVpbGRlci50b1N0cmluZygpKTsKLSAgICB2ZXJ0
ZXhCdWlsZGVyLmFwcGVuZCh2ZXJ0ZXhUZW1wbGF0ZSk7Ci0gICAgc2hhZGVyQnVpbGRlci5hcHBl
bmQoZnJhZ21lbnRUZW1wbGF0ZSk7Ci0gICAgdmVydGV4U291cmNlID0gdmVydGV4QnVpbGRlci50
b1N0cmluZygpOwotICAgIGZyYWdtZW50U291cmNlID0gc2hhZGVyQnVpbGRlci50b1N0cmluZygp
OwotfQotCi1UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4
dCkKLXsKLX0KLQotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcigpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKE9wdGlvbnMg
b3B0aW9ucykKLXsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3Byb2dyYW1zLmZpbmQob3B0aW9ucyk7Ci0gICAgaWYgKGl0ICE9IG1fcHJvZ3JhbXMu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+dmFsdWU7Ci0KLSAgICBTdHJpbmcgdmVydGV4U2hh
ZGVyOwotICAgIFN0cmluZyBmcmFnbWVudFNoYWRlcjsKLSAgICBnZXRTaGFkZXJTcGVjKG9wdGlv
bnMsIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOwotICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpj
cmVhdGUobV9jb250ZXh0LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyKTsKLSAgICBtX3By
b2dyYW1zLmFkZChvcHRpb25zLCBwcm9ncmFtKTsKLSAgICByZXR1cm4gcHJvZ3JhbTsKLX0KLX07
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYxNzQ5ODNkZGM1ZTY2NDE3OThkODk5ZDY5YzRkZWVm
YWU1NmZmNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotIENvcHlyaWdo
dCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LSBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLQotIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2lmbmRlZiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcl9oCi0jZGVmaW5lIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyX2gKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0jZGVmaW5lIFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxF
KEFjY2Vzc29yLCBOYW1lLCBUeXBlKSBHQzNEdWludCBBY2Nlc3NvciMjTG9jYXRpb24oKSB7IHN0
YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgbmFtZShOYW1lKTsgcmV0dXJuIGdldExvY2F0aW9uKG5h
bWUsIFR5cGUpOyB9Ci0jZGVmaW5lIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oQWNjZXNzb3IpIFRF
WE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCAidV8iI0FjY2Vzc29yLCBVbmlmb3JtVmFy
aWFibGUpCi0jZGVmaW5lIFRFWE1BUF9ERUNMQVJFX0FUVFJJQlVURShBY2Nlc3NvcikgVEVYTUFQ
X0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsICJhXyIjQWNjZXNzb3IsIEF0dHJpYlZhcmlhYmxl
KQotI2RlZmluZSBURVhNQVBfREVDTEFSRV9TQU1QTEVSKEFjY2Vzc29yKSBURVhNQVBfREVDTEFS
RV9WQVJJQUJMRShBY2Nlc3NvciwgInNfIiNBY2Nlc3NvciwgVW5pZm9ybVZhcmlhYmxlKQotCi1j
bGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiB7Ci1wdWJsaWM6Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtSUQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdmVydGV4LCBjb25zdCBTdHJpbmcm
IGZyYWdtZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXgsIGZyYWdtZW50KSk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsKLQotICAgIFRFWE1BUF9E
RUNMQVJFX0FUVFJJQlVURSh2ZXJ0ZXgpCi0KLSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG1v
ZGVsVmlld01hdHJpeCkKLSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHByb2plY3Rpb25NYXRy
aXgpCi0gICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STSh0ZXh0dXJlU3BhY2VNYXRyaXgpCi0gICAg
VEVYTUFQX0RFQ0xBUkVfVU5JRk9STShvcGFjaXR5KQotICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZP
Uk0oY29sb3IpCi0gICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShleHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2UpCi0gICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihzYW1wbGVyKQotICAgIFRF
WE1BUF9ERUNMQVJFX1NBTVBMRVIobWFzaykKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAg
ICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGZpbHRlckFtb3VudCkKLSAgICBURVhNQVBfREVDTEFS
RV9VTklGT1JNKGdhdXNzaWFuS2VybmVsKQotICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oYmx1
clJhZGl1cykKLSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHNoYWRvd09mZnNldCkKLSAgICBU
RVhNQVBfREVDTEFSRV9TQU1QTEVSKGNvbnRlbnRUZXh0dXJlKQotI2VuZGlmCi0KLSAgICB2b2lk
IHNldE1hdHJpeChHQzNEdWludCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLQotcHJp
dmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhT
aGFkZXI7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOwotCi0gICAgZW51
bSBWYXJpYWJsZVR5cGUgeyBVbmlmb3JtVmFyaWFibGUsIEF0dHJpYlZhcmlhYmxlIH07Ci0gICAg
R0MzRHVpbnQgZ2V0TG9jYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiwgVmFyaWFibGVUeXBlKTsK
LQotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwotICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV9pZDsKLSAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgR0MzRHVpbnQ+IG1fdmFy
aWFibGVzOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgewotcHVibGlj
OgotICAgIGVudW0gT3B0aW9uIHsKLSAgICAgICAgVGV4dHVyZSAgICAgICAgICA9IDFMIDw8IDAs
Ci0gICAgICAgIFJlY3QgICAgICAgICAgICAgPSAxTCA8PCAxLAotICAgICAgICBTb2xpZENvbG9y
ICAgICAgID0gMUwgPDwgMiwKLSAgICAgICAgT3BhY2l0eSAgICAgICAgICA9IDFMIDw8IDMsCi0g
ICAgICAgIE1hc2sgICAgICAgICAgICAgPSAxTCA8PCA0LAotICAgICAgICBBbnRpYWxpYXNpbmcg
ICAgID0gMUwgPDwgNSwKLSAgICAgICAgR3JheXNjYWxlRmlsdGVyICA9IDFMIDw8IDYsCi0gICAg
ICAgIFNlcGlhRmlsdGVyICAgICAgPSAxTCA8PCA3LAotICAgICAgICBTYXR1cmF0ZUZpbHRlciAg
ID0gMUwgPDwgOCwKLSAgICAgICAgSHVlUm90YXRlRmlsdGVyICA9IDFMIDw8IDksCi0gICAgICAg
IEJyaWdodG5lc3NGaWx0ZXIgPSAxTCA8PCAxMCwKLSAgICAgICAgQ29udHJhc3RGaWx0ZXIgICA9
IDFMIDw8IDExLAotICAgICAgICBJbnZlcnRGaWx0ZXIgICAgID0gMUwgPDwgMTIsCi0gICAgICAg
IE9wYWNpdHlGaWx0ZXIgICAgPSAxTCA8PCAxMywKLSAgICAgICAgQmx1ckZpbHRlciAgICAgICA9
IDFMIDw8IDE0LAotICAgICAgICBBbHBoYUJsdXIgICAgICAgID0gMUwgPDwgMTUsCi0gICAgICAg
IENvbnRlbnRUZXh0dXJlICAgPSAxTCA8PCAxNgotICAgIH07Ci0KLSAgICB0eXBlZGVmIHVuc2ln
bmVkIE9wdGlvbnM7Ci0KLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpIHsgfQotICAg
IGV4cGxpY2l0IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKik7
Ci0gICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKLQotICAgIFBhc3NS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGdldFNoYWRlclByb2dyYW0oT3B0aW9u
cyk7Ci0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPE9wdGlvbnMsIFJlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsK
LSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcCBtX3Byb2dyYW1zOwotICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwotfTsKLQotfQotI2VuZGlmCi0KLSNlbmRp
ZiAvLyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNmYzNjJhMjMyZTM0ODJlZjZkYjg3MzZi
MDdhN2JhMGY2MjI2NmYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcApAQCAtMCww
ICsxLDM5MCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwu
CisgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25z
LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgor
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCisjZGVmaW5lIFNUUklOR0lG
WSguLi4pICNfX1ZBX0FSR1NfXworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBjb21wb3NpdGluZ0xvZ0VuYWJsZWQoKQoreworI2lmICFMT0dfRElTQUJMRUQKKyAg
ICByZXR1cm4gTG9nQ29tcG9zaXRpbmcuc3RhdGUgPT0gV1RGTG9nQ2hhbm5lbE9uOworI2Vsc2UK
KyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdmVydGV4LCBjb25zdCBTdHJpbmcmIGZyYWdtZW50
KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCit7CisgICAgbV92ZXJ0ZXhTaGFkZXIgPSBtX2Nv
bnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7Cisg
ICAgbV9mcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1f
dmVydGV4U2hhZGVyLCB2ZXJ0ZXgpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fZnJh
Z21lbnRTaGFkZXIsIGZyYWdtZW50KTsKKyAgICBtX2lkID0gbV9jb250ZXh0LT5jcmVhdGVQcm9n
cmFtKCk7CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAg
ICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250
ZXh0LT5hdHRhY2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+
YXR0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+bGlu
a1Byb2dyYW0obV9pZCk7CisKKyAgICBpZiAoIWNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNz
Q29udGV4dDNEOjpOT19FUlJPUikKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGxvZyA9
IG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhtX3ZlcnRleFNoYWRlcik7CisgICAgTE9HKENv
bXBvc2l0aW5nLCAiVmVydGV4IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7
CisgICAgbG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG1fZnJhZ21lbnRTaGFkZXIp
OworICAgIExPRyhDb21wb3NpdGluZywgIkZyYWdtZW50IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cu
dXRmOCgpLmRhdGEoKSk7CisgICAgbG9nID0gbV9jb250ZXh0LT5nZXRQcm9ncmFtSW5mb0xvZyht
X2lkKTsKKyAgICBMT0coQ29tcG9zaXRpbmcsICJQcm9ncmFtIGxvZzogJXNcbiIsIGxvZy51dGY4
KCkuZGF0YSgpKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6c2V0TWF0
cml4KEdDM0R1aW50IGxvY2F0aW9uLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
KQoreworICAgIEdDM0RmbG9hdCBtYXRyaXhBc0Zsb2F0c1tdID0geworICAgICAgICBtYXRyaXgu
bTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0KCksCisgICAgICAg
IG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1hdHJpeC5tMjQoKSwK
KyAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4
Lm0zNCgpLAorICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00Mygp
LCBtYXRyaXgubTQ0KCkKKyAgICB9OworCisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2
KGxvY2F0aW9uLCAxLCBmYWxzZSwgbWF0cml4QXNGbG9hdHMpOworfQorCitHQzNEdWludCBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBWYXJpYWJsZVR5cGUgdHlwZSkKK3sKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgR0Mz
RHVpbnQ+OjppdGVyYXRvciBpdCA9IG1fdmFyaWFibGVzLmZpbmQobmFtZSk7CisgICAgaWYgKGl0
ICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnZhbHVlOworCisgICAg
R0MzRHVpbnQgbG9jYXRpb24gPSAwOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVW5p
Zm9ybVZhcmlhYmxlOgorICAgICAgICBsb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxv
Y2F0aW9uKG1faWQsIG5hbWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF0dHJpYlZhcmlh
YmxlOgorICAgICAgICBsb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24obV9p
ZCwgbmFtZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX3ZhcmlhYmxlcy5h
ZGQobmFtZSwgbG9jYXRpb24pOworICAgIHJldHVybiBsb2NhdGlvbjsKK30KKworVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCit7CisgICAg
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtSUQgPSBtX2lkOworICAgIGlmICghcHJvZ3JhbUlEKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQs
IG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNo
YWRlcik7CisgICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50
U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsK
KyAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKK30KKworI2RlZmluZSBH
TFNMX0RJUkVDVElWRSguLi4pICIjIiNfX1ZBX0FSR1NfXyJcbiIKK3N0YXRpYyBjb25zdCBjaGFy
KiB2ZXJ0ZXhUZW1wbGF0ZSA9CisgICAgU1RSSU5HSUZZKAorICAgICAgICBhdHRyaWJ1dGUgdmVj
NCBhX3ZlcnRleDsKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3TWF0cml4OworICAg
ICAgICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OworICAgICAgICB1bmlmb3JtIG1h
dDQgdV90ZXh0dXJlU3BhY2VNYXRyaXg7CisKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29v
cmQ7CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29yZDsKKyAgICAgICAgdmFyeWlu
ZyBmbG9hdCB2X2FudGlhbGlhczsKKworICAgICAgICB2b2lkIG5vb3AodmVjMikgeyB9CisKKyAg
ICAgICAgdmVjNCB0b1ZpZXdwb3J0U3BhY2UodmVjMiBwb3MpIHsgcmV0dXJuIHZlYzQocG9zLCAw
LiwgMS4pICogdV9tb2RlbFZpZXdNYXRyaXg7IH0KKworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9u
IHJlbGllcyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHdlIGdldCBlZGdlIHRyaWFuZ2xlcyB3aXRo
IGNvbnRyb2wgcG9pbnRzLAorICAgICAgICAvLyBhIGNvbnRyb2wgcG9pbnQgYmVpbmcgdGhlIG5l
YXJlc3QgcG9pbnQgdG8gdGhlIGNvb3JkaW5hdGUgdGhhdCBpcyBvbiB0aGUgZWRnZS4KKyAgICAg
ICAgdm9pZCBhcHBseUFudGlhbGlhc2luZyhpbm91dCB2ZWMyIHBvc2l0aW9uKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBXZSBjb3VudCBvbiB0aGUgZmFjdCB0aGF0IHF1YWQgcGFzc2VkIGlu
IGlzIGFsd2F5cyBhIHVuaXQgcmVjdCwKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgdHJhbnNmb3Jt
YXRpb24gbWF0cml4IGFwcGxpZXMgdGhlIHJlYWwgcmVjdC4KKyAgICAgICAgICAgIGNvbnN0IHZl
YzIgY2VudGVyID0gdmVjMigwLjUsIDAuNSk7CisgICAgICAgICAgICBjb25zdCBmbG9hdCBhbnRp
YWxpYXNJbmZsYXRpb25EaXN0YW5jZSA9IDEuOworCisgICAgICAgICAgICAvLyBXZSBwYXNzIHRo
ZSBjb250cm9sIHBvaW50IGFzIHRoZSB6dyBjb29yZGluYXRlcyBvZiB0aGUgdmVydGV4LgorICAg
ICAgICAgICAgLy8gVGhlIGNvbnRyb2wgcG9pbnQgaXMgdGhlIHBvaW50IG9uIHRoZSBlZGdlIGNs
b3Nlc3QgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgICAgICAvLyBUaGUgY29udHJv
bCBwb2ludCBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIGFudGlhbGlhcyB2YWx1ZS4KKyAgICAgICAg
ICAgIHZlYzIgY29udHJvbFBvaW50ID0gYV92ZXJ0ZXguenc7CisKKyAgICAgICAgICAgIC8vIEZp
cnN0IHdlIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgaW4gdmlld3BvcnQgc3BhY2UuCisgICAgICAg
ICAgICB2ZWM0IGNlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHRvVmlld3BvcnRTcGFjZShj
ZW50ZXIpOworICAgICAgICAgICAgdmVjNCBjb250cm9sUG9pbnRJblZpZXdwb3J0Q29vcmRpbmF0
ZXMgPSB0b1ZpZXdwb3J0U3BhY2UoY29udHJvbFBvaW50KTsKKyAgICAgICAgICAgIGZsb2F0IHZp
ZXdwb3J0U3BhY2VEaXN0YW5jZSA9IGRpc3RhbmNlKGNlbnRlckluVmlld3BvcnRDb29yZGluYXRl
cywgY29udHJvbFBvaW50SW5WaWV3cG9ydENvb3JkaW5hdGVzKTsKKworICAgICAgICAgICAgLy8g
V2UgYWRkIHRoZSBpbmZsYXRpb24gZGlzdGFuY2UgdG8gdGhlIGNvbXB1dGVkIGRpc3RhbmNlLCBh
bmQgY29tcHV0ZSB0aGUgcmF0aW8uCisgICAgICAgICAgICBmbG9hdCBpbmZsYXRpb25SYXRpbyA9
ICh2aWV3cG9ydFNwYWNlRGlzdGFuY2UgKyBhbnRpYWxpYXNJbmZsYXRpb25EaXN0YW5jZSkgLyB2
aWV3cG9ydFNwYWNlRGlzdGFuY2U7CisKKyAgICAgICAgICAgIC8vIHZfYW50aWFsaWFzIG5lZWRz
IHRvIGJlIDAgZm9yIHRoZSBvdXRlciBlZGdlIGFuZCAxLiBmb3IgdGhlIGlubmVyIGVkZ2UuCisg
ICAgICAgICAgICAvLyBTaW5jZSB0aGUgY29udHJvbFBvaW50IGlzIGVxdWFsIHRvIHRoZSBwb3Np
dGlvbiBpbiB0aGUgZWRnZSB2ZXJ0aWNlcywgdGhlIHZhbHVlIGlzIGFsd2F5cyAwIGZvciB0aG9z
ZS4KKyAgICAgICAgICAgIC8vIEZvciB0aGUgY2VudGVyIHBvaW50LCB0aGUgZGlzdGFuY2UgaXMg
YWx3YXlzIDAuNSwgc28gd2Ugbm9ybWFsaXplIHRvIDEuIGJ5IG11bHRpcGx5aW5nIGJ5IDIuCisg
ICAgICAgICAgICAvLyBCeSBtdWx0cGx5aW5nIGJ5IGluZmxhdGlvblJhdGlvIGFuZCBkaXZpZGlu
ZyBieSAoaW5mbGF0aW9uUmF0aW8gLSAxKSwKKyAgICAgICAgICAgIC8vIFdlIG1ha2Ugc3VyZSB0
aGF0IHRoZSB2YXJ5aW5nIGludGVycG9sYXRlcyBiZXR3ZWVuIDAgKG91dGVyIGVkZ2UpLCAxIChp
bm5lciBlZGdlKSBhbmQgbiA+IDEgKGNlbnRlcikuCisgICAgICAgICAgICB2X2FudGlhbGlhcyA9
IGRpc3RhbmNlKGNvbnRyb2xQb2ludCwgcG9zaXRpb24pICogMi4gKiBpbmZsYXRpb25SYXRpbyAv
IChpbmZsYXRpb25SYXRpbyAtIDEuKTsKKworICAgICAgICAgICAgLy8gTm93IGluZmxhdGUgdGhl
IGFjdHVhbCBwb3NpdGlvbi4gQnkgdXNpbmcgdGhpcyBmb3JtdWxhIGluc3RlYWQgb2YgaW5mbGF0
aW5nIHBvc2l0aW9uIGRpcmVjdGx5LAorICAgICAgICAgICAgLy8gd2UgZW5zdXJlIHRoYXQgdGhl
IGNlbnRlciB2ZXJ0ZXggaXMgbmV2ZXIgaW5mbGF0ZWQuCisgICAgICAgICAgICBwb3NpdGlvbiA9
IGNlbnRlciArIChwb3NpdGlvbiAtIGNlbnRlcikgKiBpbmZsYXRpb25SYXRpbzsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWMy
IHBvc2l0aW9uID0gYV92ZXJ0ZXgueHk7CisgICAgICAgICAgICBhcHBseUFudGlhbGlhc2luZ0lm
TmVlZGVkKHBvc2l0aW9uKTsKKworICAgICAgICAgICAgLy8gVGhlIHRleHR1cmUgcG9zaXRpb24g
bmVlZHMgdG8gYmUgY2xhbXBlZCB0byAwLi4xIGJlZm9yZSB0aGUgdGV4dHVyZSBtYXRyaXggaXMg
YXBwbGllZC4KKyAgICAgICAgICAgIHZlYzQgY2xhbXBlZFBvc2l0aW9uID0gY2xhbXAodmVjNChw
b3NpdGlvbiwgMC4sIDEuKSwgMC4sIDEuKTsKKyAgICAgICAgICAgIHZfdGV4Q29vcmQgPSAodV90
ZXh0dXJlU3BhY2VNYXRyaXggKiBjbGFtcGVkUG9zaXRpb24pLnh5OworCisgICAgICAgICAgICB2
X21hc2tUZXhDb29yZCA9IHBvc2l0aW9uOworICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3By
b2plY3Rpb25NYXRyaXggKiB1X21vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDAuLCAx
Lik7CisgICAgICAgIH0KKyAgICApOworCisjZGVmaW5lIFJFQ1RfVEVYVFVSRV9ESVJFQ1RJVkUg
XAorICAgIEdMU0xfRElSRUNUSVZFKGlmZGVmIEVOQUJMRV9SZWN0KSBcCisgICAgICAgIEdMU0xf
RElSRUNUSVZFKGRlZmluZSBTYW1wbGVyVHlwZSBzYW1wbGVyMkRSZWN0KSBcCisgICAgICAgIEdM
U0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyRnVuY3Rpb24gdGV4dHVyZTJEUmVjdCkgXAorICAg
IEdMU0xfRElSRUNUSVZFKGVsc2UpIFwKKyAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNh
bXBsZXJUeXBlIHNhbXBsZXIyRCkgXAorICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2Ft
cGxlckZ1bmN0aW9uIHRleHR1cmUyRCkgXAorICAgIEdMU0xfRElSRUNUSVZFKGVuZGlmKQorCisj
ZGVmaW5lIEVOQUJMRV9BUFBMSUVSKE5hbWUpICIjZGVmaW5lIEVOQUJMRV8iI05hbWUiXG4jZGVm
aW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIGFwcGx5IiNOYW1lIlxuIgorI2RlZmluZSBESVNBQkxF
X0FQUExJRVIoTmFtZSkgIiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgbm9vcFxuIgorI2Rl
ZmluZSBCTFVSX0NPTlNUQU5UUyBcCisgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIEdBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRIIDExKSBcCisgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIEdBVVNT
SUFOX0tFUk5FTF9TVEVQIDAuMikKKworCitzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1w
bGF0ZSA9CisgICAgUkVDVF9URVhUVVJFX0RJUkVDVElWRQorICAgIEJMVVJfQ09OU1RBTlRTCisg
ICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAg
dW5pZm9ybSBTYW1wbGVyVHlwZSBzX3NhbXBsZXI7CisgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJE
IHNfbWFzazsKKyAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19jb250ZW50VGV4dHVyZTsKKyAg
ICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7CisgICAgICAgIHZhcnlpbmcgZmxvYXQgdl9h
bnRpYWxpYXM7CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOworICAgICAgICB2YXJ5
aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9maWx0ZXJB
bW91bnQ7CisgICAgICAgIHVuaWZvcm0gdmVjMiB1X2JsdXJSYWRpdXM7CisgICAgICAgIHVuaWZv
cm0gdmVjMiB1X3NoYWRvd09mZnNldDsKKyAgICAgICAgdW5pZm9ybSB2ZWM0IHVfY29sb3I7Cisg
ICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFM
Rl9XSURUSF07CisKKyAgICAgICAgdm9pZCBub29wKGlub3V0IHZlYzQgZHVtbXlQYXJhbWV0ZXIp
IHsgfQorCisgICAgICAgIGZsb2F0IGFudGlhbGlhcygpIHsgcmV0dXJuIHNtb290aHN0ZXAodl9h
bnRpYWxpYXMsIDAuLCAxLik7IH0KKworICAgICAgICB2b2lkIGFwcGx5VGV4dHVyZShpbm91dCB2
ZWM0IGNvbG9yKSB7IGNvbG9yID0gU2FtcGxlckZ1bmN0aW9uKHNfc2FtcGxlciwgdl90ZXhDb29y
ZCk7IH0KKyAgICAgICAgdm9pZCBhcHBseU9wYWNpdHkoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xv
ciAqPSB1X29wYWNpdHk7IH0KKyAgICAgICAgdm9pZCBhcHBseUFudGlhbGlhc2luZyhpbm91dCB2
ZWM0IGNvbG9yKSB7IGNvbG9yICo9IGFudGlhbGlhcygpOyB9CisgICAgICAgIHZvaWQgYXBwbHlN
YXNrKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdGV4dHVyZTJEKHNfbWFzaywgdl9tYXNr
VGV4Q29vcmQpLmE7IH0KKworICAgICAgICB2b2lkIGFwcGx5R3JheXNjYWxlRmlsdGVyKGlub3V0
IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IDEuMCAt
IHVfZmlsdGVyQW1vdW50OworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KCgwLjIxMjYgKyAwLjc4
NzQgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQpICogY29s
b3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAg
ICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyICsgMC4y
ODQ4ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNv
bG9yLmIsCisgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xv
ci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiArIDAu
OTI3OCAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseVNlcGlhRmlsdGVyKGlub3V0IHZlYzQgY29sb3Ip
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfZmlsdGVyQW1v
dW50OworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KCgwLjM5MyArIDAuNjA3ICogYW1vdW50KSAq
IGNvbG9yLnIgKyAoMC43NjkgLSAwLjc2OSAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTg5IC0g
MC4xODkgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAoMC4zNDkgLSAwLjM0
OSAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNjg2ICsgMC4zMTQgKiBhbW91bnQpICogY29sb3Iu
ZyArICgwLjE2OCAtIDAuMTY4ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAg
KDAuMjcyIC0gMC4yNzIgKiBhbW91bnQpICogY29sb3IuciArICgwLjUzNCAtIDAuNTM0ICogYW1v
dW50KSAqIGNvbG9yLmcgKyAoMC4xMzEgKyAwLjg2OSAqIGFtb3VudCkgKiBjb2xvci5iLAorICAg
ICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseVNh
dHVyYXRlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bG9yID0gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLnIgKyAo
MC43MTUgLSAwLjcxNSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3
MiAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgKDAuMjEzIC0g
MC4yMTMgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1ICsgMC4yODUgKiB1X2Zp
bHRlckFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2ZpbHRlckFtb3VudCkg
KiBjb2xvci5iLAorICAgICAgICAgICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9maWx0ZXJBbW91
bnQpICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0ZXJBbW91bnQpICogY29sb3Iu
ZyArICgwLjA3MiArIDAuOTI4ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuYiwKKyAgICAgICAg
ICAgICAgICBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXBwbHlIdWVSb3Rh
dGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQg
cGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2OworICAgICAgICAgICAgZmxvYXQgYyA9IGNvcyh1
X2ZpbHRlckFtb3VudCAqIHBpIC8gMTgwLjApOworICAgICAgICAgICAgZmxvYXQgcyA9IHNpbih1
X2ZpbHRlckFtb3VudCAqIHBpIC8gMTgwLjApOworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGNv
bG9yLnIgKiAoMC4yMTMgKyBjICogMC43ODcgLSBzICogMC4yMTMpICsgY29sb3IuZyAqICgwLjcx
NSAtIGMgKiAwLjcxNSAtIHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcy
ICsgcyAqIDAuOTI4KSwKKyAgICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAu
MjEzICsgcyAqIDAuMTQzKSArIGNvbG9yLmcgKiAoMC43MTUgKyBjICogMC4yODUgKyBzICogMC4x
NDApICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiAtIHMgKiAwLjI4MyksCisgICAgICAg
ICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyAtIHMgKiAwLjc4NykgKyAgY29s
b3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSArIHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcy
ICsgYyAqIDAuOTI4ICsgcyAqIDAuMDcyKSwKKyAgICAgICAgICAgICAgICBjb2xvci5hKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZsb2F0IGludmVydChmbG9hdCBuKSB7IHJldHVybiAoMS4wIC0g
bikgKiB1X2ZpbHRlckFtb3VudCArIG4gKiAoMS4wIC0gdV9maWx0ZXJBbW91bnQpOyB9CisgICAg
ICAgIHZvaWQgYXBwbHlJbnZlcnRGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgewor
ICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGludmVydChjb2xvci5yKSwgaW52ZXJ0KGNvbG9yLmcp
LCBpbnZlcnQoY29sb3IuYiksIGNvbG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBh
cHBseUJyaWdodG5lc3NGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAg
ICAgICAgY29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqICgxLjAgKyB1X2ZpbHRlckFtb3VudCksIGNv
bG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgY29udHJhc3QoZmxvYXQgbikgeyBy
ZXR1cm4gKG4gLSAwLjUpICogdV9maWx0ZXJBbW91bnQgKyAwLjU7IH0KKyAgICAgICAgdm9pZCBh
cHBseUNvbnRyYXN0RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbG9yID0gdmVjNChjb250cmFzdChjb2xvci5yKSwgY29udHJhc3QoY29sb3IuZyksIGNv
bnRyYXN0KGNvbG9yLmIpLCBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXBw
bHlPcGFjaXR5RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbG9yID0gdmVjNChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hICogdV9maWx0
ZXJBbW91bnQpOworICAgICAgICB9CisKKyAgICAgICAgdmVjNCBzYW1wbGVDb2xvckF0UmFkaXVz
KGZsb2F0IHJhZGl1cykKKyAgICAgICAgeworICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4
Q29vcmQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7CisgICAgICAgICAgICByZXR1cm4gU2FtcGxl
ckZ1bmN0aW9uKHNfc2FtcGxlciwgY29vcmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3Jk
LnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZsb2F0IHNhbXBsZUFscGhhQXRSYWRpdXMoZmxvYXQgcmFkaXVzKQorICAgICAgICB7
CisgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAtIHVfc2hhZG93T2Zmc2V0ICsg
cmFkaXVzICogdV9ibHVyUmFkaXVzOworICAgICAgICAgICAgcmV0dXJuIFNhbXBsZXJGdW5jdGlv
bihzX3NhbXBsZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAw
LiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgYXBwbHlCbHVyRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHZlYzQgdG90YWwgPSBzYW1wbGVDb2xvckF0UmFkaXVzKDAuKSAqIHVfZ2F1c3NpYW5L
ZXJuZWxbMF07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5F
TF9IQUxGX1dJRFRIOyBpKyspIHsKKyAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVDb2xv
ckF0UmFkaXVzKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktl
cm5lbFtpXTsKKyAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVDb2xvckF0UmFkaXVzKGZs
b2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ld
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb2xvciA9IHRvdGFsOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBhcHBseUFscGhhQmx1cihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAg
ICB7CisgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhQXRSYWRpdXMoMC4pICog
dV9nYXVzc2lhbktlcm5lbFswXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FV
U1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgeworICAgICAgICAgICAgICAgIHRvdGFsICs9
IHNhbXBsZUFscGhhQXRSYWRpdXMoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1
X2dhdXNzaWFuS2VybmVsW2ldOworICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhh
QXRSYWRpdXMoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3Np
YW5LZXJuZWxbaV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbG9yICo9IHRvdGFs
OworICAgICAgICB9CisKKyAgICAgICAgdmVjNCBzb3VyY2VPdmVyKHZlYzQgc3JjLCB2ZWM0IGRz
dCkgeyByZXR1cm4gc3JjICsgZHN0ICogKDEuIC0gZHN0LmEpOyB9CisKKyAgICAgICAgdm9pZCBh
cHBseUNvbnRlbnRUZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHZlYzQgY29udGVudENvbG9yID0gdGV4dHVyZTJEKHNfY29udGVudFRleHR1cmUsIHZfdGV4
Q29vcmQpOworICAgICAgICAgICAgY29sb3IgPSBzb3VyY2VPdmVyKGNvbnRlbnRDb2xvciwgY29s
b3IpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseVNvbGlkQ29sb3IoaW5vdXQgdmVj
NCBjb2xvcikgeyBjb2xvciAqPSB1X2NvbG9yOyB9CisKKyAgICAgICAgdm9pZCBtYWluKHZvaWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzQgY29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEu
KTsKKyAgICAgICAgICAgIGFwcGx5VGV4dHVyZUlmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAg
IGFwcGx5U29saWRDb2xvcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5QW50aWFs
aWFzaW5nSWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlNYXNrSWZOZWVkZWQoY29s
b3IpOworICAgICAgICAgICAgYXBwbHlPcGFjaXR5SWZOZWVkZWQoY29sb3IpOworICAgICAgICAg
ICAgYXBwbHlHcmF5c2NhbGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBs
eVNlcGlhRmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlTYXR1cmF0ZUZp
bHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5SHVlUm90YXRlRmlsdGVySWZO
ZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlJbnZlcnRGaWx0ZXJJZk5lZWRlZChjb2xv
cik7CisgICAgICAgICAgICBhcHBseUJyaWdodG5lc3NGaWx0ZXJJZk5lZWRlZChjb2xvcik7Cisg
ICAgICAgICAgICBhcHBseUNvbnRyYXN0RmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAg
ICAgYXBwbHlPcGFjaXR5RmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlC
bHVyRmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlBbHBoYUJsdXJJZk5l
ZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseUNvbnRlbnRUZXh0dXJlSWZOZWVkZWQoY29s
b3IpOworICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7CisgICAgICAgIH0KKyAgICAp
OworCitQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRl
eHQsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlvbnMpCit7CisgICAg
U3RyaW5nQnVpbGRlciBzaGFkZXJCdWlsZGVyOworI2RlZmluZSBTRVRfQVBQTElFUl9GUk9NX09Q
VElPTlMoQXBwbGllcikgXAorICAgIHNoYWRlckJ1aWxkZXIuYXBwZW5kKFwKKyAgICAgICAgKG9w
dGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6QXBwbGllcikgPyBFTkFCTEVfQVBQ
TElFUihBcHBsaWVyKSA6IERJU0FCTEVfQVBQTElFUihBcHBsaWVyKSkKKworICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhUZXh0dXJlKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMo
UmVjdCk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNvbGlkQ29sb3IpOworICAgIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09Q
VElPTlMoTWFzayk7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFudGlhbGlhc2luZyk7
CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRlcik7CisgICAgU0VU
X0FQUExJRVJfRlJPTV9PUFRJT05TKFNlcGlhRmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9N
X09QVElPTlMoU2F0dXJhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhI
dWVSb3RhdGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhCcmlnaHRuZXNz
RmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udHJhc3RGaWx0ZXIpOwor
ICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpOworICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5RmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09Q
VElPTlMoQmx1ckZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFscGhhQmx1
cik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRlbnRUZXh0dXJlKTsKKyAgICBT
dHJpbmdCdWlsZGVyIHZlcnRleEJ1aWxkZXI7CisgICAgdmVydGV4QnVpbGRlci5hcHBlbmQoc2hh
ZGVyQnVpbGRlci50b1N0cmluZygpKTsKKyAgICB2ZXJ0ZXhCdWlsZGVyLmFwcGVuZCh2ZXJ0ZXhU
ZW1wbGF0ZSk7CisgICAgc2hhZGVyQnVpbGRlci5hcHBlbmQoZnJhZ21lbnRUZW1wbGF0ZSk7CisK
KyAgICBTdHJpbmcgdmVydGV4U291cmNlID0gdmVydGV4QnVpbGRlci50b1N0cmluZygpOworICAg
IFN0cmluZyBmcmFnbWVudFNvdXJjZSA9IHNoYWRlckJ1aWxkZXIudG9TdHJpbmcoKTsKKworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwg
dmVydGV4U291cmNlLCBmcmFnbWVudFNvdXJjZSkpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDM3ZTdkNjlkOWE4Nzc0
ZjFkMzA2MWE3NzkzMWEyYzAzYzlkYzE0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5o
CkBAIC0wLDAgKzEsMTA0IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbV9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtX2gKKwor
I2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisjZGVmaW5lIFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCBOYW1lLCBUeXBlKSBH
QzNEdWludCBBY2Nlc3NvciMjTG9jYXRpb24oKSB7IHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcg
bmFtZShOYW1lKTsgcmV0dXJuIGdldExvY2F0aW9uKG5hbWUsIFR5cGUpOyB9CisjZGVmaW5lIFRF
WE1BUF9ERUNMQVJFX1VOSUZPUk0oQWNjZXNzb3IpIFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFj
Y2Vzc29yLCAidV8iI0FjY2Vzc29yLCBVbmlmb3JtVmFyaWFibGUpCisjZGVmaW5lIFRFWE1BUF9E
RUNMQVJFX0FUVFJJQlVURShBY2Nlc3NvcikgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNz
b3IsICJhXyIjQWNjZXNzb3IsIEF0dHJpYlZhcmlhYmxlKQorI2RlZmluZSBURVhNQVBfREVDTEFS
RV9TQU1QTEVSKEFjY2Vzc29yKSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgInNf
IiNBY2Nlc3NvciwgVW5pZm9ybVZhcmlhYmxlKQorCitjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiB7
CitwdWJsaWM6CisgICAgZW51bSBPcHRpb24geworICAgICAgICBUZXh0dXJlICAgICAgICAgID0g
MUwgPDwgMCwKKyAgICAgICAgUmVjdCAgICAgICAgICAgICA9IDFMIDw8IDEsCisgICAgICAgIFNv
bGlkQ29sb3IgICAgICAgPSAxTCA8PCAyLAorICAgICAgICBPcGFjaXR5ICAgICAgICAgID0gMUwg
PDwgMywKKyAgICAgICAgTWFzayAgICAgICAgICAgICA9IDFMIDw8IDQsCisgICAgICAgIEFudGlh
bGlhc2luZyAgICAgPSAxTCA8PCA1LAorICAgICAgICBHcmF5c2NhbGVGaWx0ZXIgID0gMUwgPDwg
NiwKKyAgICAgICAgU2VwaWFGaWx0ZXIgICAgICA9IDFMIDw8IDcsCisgICAgICAgIFNhdHVyYXRl
RmlsdGVyICAgPSAxTCA8PCA4LAorICAgICAgICBIdWVSb3RhdGVGaWx0ZXIgID0gMUwgPDwgOSwK
KyAgICAgICAgQnJpZ2h0bmVzc0ZpbHRlciA9IDFMIDw8IDEwLAorICAgICAgICBDb250cmFzdEZp
bHRlciAgID0gMUwgPDwgMTEsCisgICAgICAgIEludmVydEZpbHRlciAgICAgPSAxTCA8PCAxMiwK
KyAgICAgICAgT3BhY2l0eUZpbHRlciAgICA9IDFMIDw8IDEzLAorICAgICAgICBCbHVyRmlsdGVy
ICAgICAgID0gMUwgPDwgMTQsCisgICAgICAgIEFscGhhQmx1ciAgICAgICAgPSAxTCA8PCAxNSwK
KyAgICAgICAgQ29udGVudFRleHR1cmUgICA9IDFMIDw8IDE2CisgICAgfTsKKworICAgIHR5cGVk
ZWYgdW5zaWduZWQgT3B0aW9uczsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIE9w
dGlvbnMpOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7CisgICAg
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtSUQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0K
KworICAgIFRFWE1BUF9ERUNMQVJFX0FUVFJJQlVURSh2ZXJ0ZXgpCisKKyAgICBURVhNQVBfREVD
TEFSRV9VTklGT1JNKG1vZGVsVmlld01hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JN
KHByb2plY3Rpb25NYXRyaXgpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STSh0ZXh0dXJlU3Bh
Y2VNYXRyaXgpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShvcGFjaXR5KQorICAgIFRFWE1B
UF9ERUNMQVJFX1VOSUZPUk0oY29sb3IpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShleHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UpCisgICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihz
YW1wbGVyKQorICAgIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIobWFzaykKKworI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGZpbHRlckFtb3VudCkKKyAg
ICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGdhdXNzaWFuS2VybmVsKQorICAgIFRFWE1BUF9ERUNM
QVJFX1VOSUZPUk0oYmx1clJhZGl1cykKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHNoYWRv
d09mZnNldCkKKyAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKGNvbnRlbnRUZXh0dXJlKQorI2Vu
ZGlmCisKKyAgICB2b2lkIHNldE1hdHJpeChHQzNEdWludCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmKTsKKworcHJpdmF0ZToKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFBsYXRmb3JtM0RP
YmplY3QgbV92ZXJ0ZXhTaGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hh
ZGVyOworCisgICAgZW51bSBWYXJpYWJsZVR5cGUgeyBVbmlmb3JtVmFyaWFibGUsIEF0dHJpYlZh
cmlhYmxlIH07CisgICAgR0MzRHVpbnQgZ2V0TG9jYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiwg
VmFyaWFibGVUeXBlKTsKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0
OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywg
R0MzRHVpbnQ+IG1fdmFyaWFibGVzOworfTsKKworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180917</attachid>
            <date>2012-12-28 21:27:36 -0800</date>
            <delta_ts>2013-01-18 14:28:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105847-20121228212447.patch</filename>
            <type>text/plain</type>
            <size>57858</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDE5ZDE2YjQ1ZTkxMDMz
OTZlYmU0OWNmZDc5MzdiYTkzZjlkZDA3Mi4uM2I0ODhlMDgyYTkwN2U1ZjlmY2Q4MzM2YWFhZTVj
NTVlNmQyMjMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ1IEBACiAyMDEyLTEyLTI4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgW1RleG1hcF0gUmVuYW1l
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLiogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0u
KgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODQ3
CisKKyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgY29udGFpbnMgdmVyeSBsaXR0
bGUgIm1hbmFnZXIiIGNvZGUuCisgICAgICAgIE1vdmVkIHRoZSBtYXAgb2Ygc2hhZGVycyB0byBU
ZXh0dXJlTWFwcGVyR0wsIGFuZCByZW5hbWVkIHRoZSBmaWxlcyBjb250YWluaW5nCisgICAgICAg
IHRoZSBzaGFkZXIgaW1wbGVtZW50YXRpb24gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3Bw
fGguCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIC0gcmVuYW1lcy9yZWZhY3RvcnMgb25seS4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVGFy
Z2V0LnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdM
RGF0YTo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChTaGFyZWRHTERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFyZWRHTERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpvcHRpb25zRm9yRmlsdGVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmRyYXdGaWx0ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OmJlZ2luQ2xpcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBvc2l0aW5nTG9nRW5hYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OnNldE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6cHJvZ3JhbUlEKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpjb250ZXh0KToKKworMjAxMi0xMi0yOCAgTm8nYW0gUm9zZW50aGFs
ICA8bm9hbUB3ZWJraXQub3JnPgorCiAgICAgICAgIFJFR1JFU1NJT046IHIxMzg1NTUgYXNzZXJ0
cyBvbiBMaW51eCBFRkwvUXQgZGVidWcgYnVpbGRzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4NDgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KaW5kZXggMmY3NGQ4OGZjYjIxZDI3NDEwMTRkNTQ1YzczNDZkNjgyMzdlMjg1Zi4uODc1OGVk
YzBlNTgxNWVkZmI3YzQ5ODU1ZDQ3M2Q5OWJhYTVkMzliZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC02Mzk3LDggKzYzOTcsOCBAQCBpZiBVU0VfVEVYVFVSRV9NQVBQRVJfQ0FJ
Uk8KIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvdGV4bWFwL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW1UZXh0dXJlTWFw
cGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvdGV4
bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUNvbXBpbGVkUHJvZ3JhbS5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZs
LmNtYWtlCmluZGV4IGU3ZTQ2OWM5MjViZGUzYjVjOGU1NmFkZjQyYThmMTJjNTAxZWZmOTYuLmMz
M2VkNmY4ZjZiODY2MjIyYTY4OWYwYWQzODQ0NDY2NzBjYjZmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RWZsLmNtYWtlCkBAIC0yODgsNyArMjg4LDcgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFgu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNv
dXJjZXMuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtLmNwcAogICAgICkKIAogICAgIGlmIChXVEZfVVNFX0VHTCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCmluZGV4IDBiNzY4NTNjM2JmYzc5MGY4MDYwODIyNmJkNDg5OGI3YzRmZDNkYzEuLjg1
OGIxZDgzNDJlZmExNGEyNGFlZDhiNTA4ZTE5NDcxZTdjMjM0ZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAt
NDAxMiw3ICs0MDEyLDcgQEAgdXNlPygzRF9HUkFQSElDUykgewogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5oIFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgKIAogICAgIFNPVVJDRVMgKz0gXAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAgXApAQCAtNDAy
NSw3ICs0MDI1LDcgQEAgdXNlPygzRF9HUkFQSElDUykgewogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBcCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIFwKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgXAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAK
IAogICAgIElOQ0xVREVQQVRIICs9ICQkUFdEL3BsYXRmb3JtL2dyYXBoaWNzL2dwdQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCmluZGV4IGZhNDM3ZDM3MTBiODc5ODk1ZWM1MzMzMWI3OGQzYWUxOTU4
ZDRkZDAuLmNiYTBlNjAzZmVjOGQ1M2YxN2FhMzdmMTQ4YmY3ZjVjNTRmMzM3Y2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgot
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0uaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CkBAIC04NSwxMCArODUs
MjIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERh
dGEoY29udGV4dCkpOwogICAgICAgICB9CiAKLSAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIgdGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI7CisgICAgICAgIFBhc3NSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06Ok9wdGlvbnMgb3B0aW9ucykKKyAgICAgICAgeworICAgICAgICAgICAgSGFz
aE1hcDxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3B0aW9ucywgUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtPiA+OjppdGVyYXRvciBpdCA9IG1fcHJvZ3JhbXMuZmluZChvcHRp
b25zKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtX3Byb2dyYW1zLmVuZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBpdC0+dmFsdWU7CisKKyAgICAgICAgICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpj
cmVhdGUobV9jb250ZXh0LCBvcHRpb25zKTsKKyAgICAgICAgICAgIG1fcHJvZ3JhbXMuYWRkKG9w
dGlvbnMsIHByb2dyYW0pOworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW07CisgICAgICAgIH0K
KworICAgICAgICBIYXNoTWFwPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zLCBS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+ID4gbV9wcm9ncmFtczsKKyAgICAgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiAKICAgICAgICAgZXhwbGljaXQg
U2hhcmVkR0xEYXRhKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgICAgICAgICAgOiB0
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihjb250ZXh0KQorICAgICAgICAgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgZ2xDb250ZXh0RGF0YU1hcCgpLmFk
ZChjb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCksIHRoaXMpOwogICAgICAgICB9
CkBAIC0yOTgsNyArMzEwLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29u
c3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICBpZiAoY2xp
cFN0YWNrKCkuY3VycmVudCgpLnNjaXNzb3JCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJv
Z3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U29saWRDb2xvcik7CisgICAgUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0
YSgpLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29s
b3IpOwogICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsK
IAogICAgIGZsb2F0IHIsIGcsIGIsIGE7CkBAIC0zOTgsMTUgKzQxMCwxNSBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBGbGFncyBm
bGFncywgY29uc3QgSQogICAgICAgICAmJiBleHBvc2VkRWRnZXMgPT0gQWxsRWRnZXMKICAgICAg
ICAgJiYgIW1vZGVsVmlld01hdHJpeC5tYXBRdWFkKHRhcmdldFJlY3QpLmlzUmVjdGlsaW5lYXIo
KTsKIAotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZTsKKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OlRleHR1cmU7CiAgICAgaWYgKG1hc2tlZCkKLSAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6TWFzazsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6TWFzazsKICAgICBpZiAodXNlUmVjdCkKLSAgICAgICAgb3B0aW9ucyB8
PSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdDsKKyAgICAgICAgb3B0aW9ucyB8PSBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6UmVjdDsKICAgICBpZiAob3BhY2l0eSA8IDEpCi0g
ICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7Cisg
ICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wYWNpdHk7CiAg
ICAgaWYgKHVzZUFudGlhbGlhc2luZykgewotICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpBbnRpYWxpYXNpbmc7CisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06OkFudGlhbGlhc2luZzsKICAgICAgICAgZmxhZ3MgfD0gU2hv
dWxkQW50aWFsaWFzOwogICAgIH0KIApAQCAtNDE0LDIwICs0MjYsMjAgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgRmxhZ3MgZmxh
Z3MsIGNvbnN0IEkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKICAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07Ci0gICAgcHJvZ3JhbSA9IGRhdGEo
KS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9n
cmFtKG9wdGlvbnMpOworICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuZ2V0U2hh
ZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJv
Z3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2Rl
bFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIEZsYWdz
IGZsYWdzID0gMDsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRp
b25zID0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlkQ29sb3I7CisgICAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpTb2xpZENvbG9yOwogICAgIGlmICghbWF0cml4Lm1hcFF1YWQocmVjdCkuaXNS
ZWN0aWxpbmVhcigpKSB7Ci0gICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OkFudGlhbGlhc2luZzsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6QW50aWFsaWFzaW5nOwogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZCB8
IFNob3VsZEFudGlhbGlhczsKICAgICB9CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKKyAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuZ2V0
U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9n
cmFtLT5wcm9ncmFtSUQoKSk7CiAKICAgICBmbG9hdCByLCBnLCBiLCBhOwpAQCAtNjkxLDMwICs3
MDMsMzAgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFn
ZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY28KIAogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKIAotc3RhdGljIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnNG
b3JGaWx0ZXJUeXBlKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25l
ZCBwYXNzKQorc3RhdGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlv
bnNGb3JGaWx0ZXJUeXBlKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNp
Z25lZCBwYXNzKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpHUkFZU0NBTEU6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpHcmF5c2NhbGVGaWx0ZXI7
CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpHcmF5c2NhbGVGaWx0ZXI7CiAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlNFUElBOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2VwaWFGaWx0ZXI7
CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTZXBpYUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTYXR1cmF0ZUZpbHRl
cjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNhdHVyYXRlRmlsdGVyOwogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SHVlUm90
YXRlRmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRl
eHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6SHVlUm90YXRlRmlsdGVyOwogICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpJ
bnZlcnRGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpJbnZlcnRGaWx0ZXI7CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgICAgIHJldHVybiBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpCcmlnaHRuZXNzRmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6QnJpZ2h0bmVzc0Zp
bHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgICAgIHJldHVy
biBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpDb250cmFzdEZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OkNvbnRy
YXN0RmlsdGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICBy
ZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6T3BhY2l0eUZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9w
YWNpdHlGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIHJl
dHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcjsKKyAgICAgICAgcmV0
dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpCbHVyRmlsdGVyOwogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpBbHBoYUJsdXIKLSAgICAgICAgICAgIHwgKHBhc3MgPyBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6Q29udGVudFRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6U29saWRDb2xvcjogMCk7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6QWxwaGFCbHVyCisgICAgICAgICAgICB8IChwYXNzID8gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OkNvbnRlbnRUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OlNvbGlkQ29sb3I6IDApOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTg5Nyw4ICs5MDksOCBAQCBib29sIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1VzaW5nQ3VzdG9tRmlsdGVyKEJpdG1hcFRleHR1cmUmIHRhcmdldCwgY29u
c3QgQml0bWFwVAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25zdCBCaXRt
YXBUZXh0dXJlJiBzYW1wbGVyLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXIsIGludCBwYXNzKQogewogICAgIC8vIEZvciBz
dGFuZGFyZCBmaWx0ZXJzLCB3ZSBhbHdheXMgZHJhdyB0aGUgd2hvbGUgdGV4dHVyZSB3aXRob3V0
IHRyYW5zZm9ybWF0aW9ucy4KLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9u
cyBvcHRpb25zID0gb3B0aW9uc0ZvckZpbHRlclR5cGUoZmlsdGVyLmdldE9wZXJhdGlvblR5cGUo
KSwgcGFzcyk7Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFt
ID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNo
YWRlclByb2dyYW0ob3B0aW9ucyk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9w
dGlvbnMgb3B0aW9ucyA9IG9wdGlvbnNGb3JGaWx0ZXJUeXBlKGZpbHRlci5nZXRPcGVyYXRpb25U
eXBlKCksIHBhc3MpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJv
Z3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwog
ICAgIEFTU0VSVChwcm9ncmFtKTsKIAogICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFtKHByb2dyYW0u
Z2V0KCksIGZpbHRlciwgcGFzcywgc2FtcGxlci5jb250ZW50U2l6ZSgpLCBzdGF0aWNfY2FzdDxj
b25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250ZW50VGV4dHVyZSkuaWQoKSk7CkBAIC0xMDk3LDcg
KzExMDksNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogCiAgICAgZGF0YSgpLmluaXRpYWxp
emVTdGVuY2lsKCk7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHBy
b2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Z2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U29saWRDb2xvcik7
CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgp
LnNoYXJlZEdMRGF0YSgpLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OlNvbGlkQ29sb3IpOwogCiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbUlEKCkpOwogICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShw
cm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWYzNDNiNGE3ZjRj
NGQwMTk3MDNjZDI2NTMwMjI2MWI0ZGIxYTcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MTIg
KzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0g
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0jaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgi
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi0jZGVmaW5lIFNUUklOR0lGWSgu
Li4pICNfX1ZBX0FSR1NfXwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBjb21wb3NpdGluZ0xvZ0VuYWJsZWQoKQotewotI2lmICFMT0dfRElTQUJMRUQKLSAgICBy
ZXR1cm4gTG9nQ29tcG9zaXRpbmcuc3RhdGUgPT0gV1RGTG9nQ2hhbm5lbE9uOwotI2Vsc2UKLSAg
ICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdmVydGV4LCBjb25zdCBTdHJpbmcmIGZyYWdtZW50KQot
ICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi17Ci0gICAgbV92ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRl
eHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7Ci0gICAg
bV9mcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFHTUVOVF9TSEFERVIpOwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fdmVy
dGV4U2hhZGVyLCB2ZXJ0ZXgpOwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fZnJhZ21l
bnRTaGFkZXIsIGZyYWdtZW50KTsKLSAgICBtX2lkID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFt
KCk7Ci0gICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBt
X2NvbnRleHQtPmNvbXBpbGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0
LT5hdHRhY2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+YXR0
YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+bGlua1By
b2dyYW0obV9pZCk7Ci0KLSAgICBpZiAoIWNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpOT19FUlJPUikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGxvZyA9IG1f
Y29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhtX3ZlcnRleFNoYWRlcik7Ci0gICAgTE9HKENvbXBv
c2l0aW5nLCAiVmVydGV4IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgbG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG1fZnJhZ21lbnRTaGFkZXIpOwot
ICAgIExPRyhDb21wb3NpdGluZywgIkZyYWdtZW50IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cudXRm
OCgpLmRhdGEoKSk7Ci0gICAgbG9nID0gbV9jb250ZXh0LT5nZXRQcm9ncmFtSW5mb0xvZyhtX2lk
KTsKLSAgICBMT0coQ29tcG9zaXRpbmcsICJQcm9ncmFtIGxvZzogJXNcbiIsIGxvZy51dGY4KCku
ZGF0YSgpKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6c2V0TWF0cml4
KEdDM0R1aW50IGxvY2F0aW9uLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQot
ewotICAgIEdDM0RmbG9hdCBtYXRyaXhBc0Zsb2F0c1tdID0gewotICAgICAgICBtYXRyaXgubTEx
KCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0KCksCi0gICAgICAgIG1h
dHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1hdHJpeC5tMjQoKSwKLSAg
ICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0z
NCgpLAotICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBt
YXRyaXgubTQ0KCkKLSAgICB9OwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uLCAxLCBmYWxzZSwgbWF0cml4QXNGbG9hdHMpOwotfQotCi1HQzNEdWludCBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBWYXJpYWJsZVR5cGUgdHlwZSkKLXsKLSAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgR0MzRHVp
bnQ+OjppdGVyYXRvciBpdCA9IG1fdmFyaWFibGVzLmZpbmQobmFtZSk7Ci0gICAgaWYgKGl0ICE9
IG1fdmFyaWFibGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwotCi0gICAgR0Mz
RHVpbnQgbG9jYXRpb24gPSAwOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgVW5pZm9y
bVZhcmlhYmxlOgotICAgICAgICBsb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0
aW9uKG1faWQsIG5hbWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEF0dHJpYlZhcmlhYmxl
OgotICAgICAgICBsb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24obV9pZCwg
bmFtZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX3ZhcmlhYmxlcy5hZGQo
bmFtZSwgbG9jYXRpb24pOwotICAgIHJldHVybiBsb2NhdGlvbjsKLX0KLQotVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCi17Ci0gICAgUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtSUQgPSBtX2lkOwotICAgIGlmICghcHJvZ3JhbUlEKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1f
dmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRl
cik7Ci0gICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hh
ZGVyKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKLSAg
ICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKLX0KLQotI2RlZmluZSBHTFNM
X0RJUkVDVElWRSguLi4pICIjIiNfX1ZBX0FSR1NfXyJcbiIKLXN0YXRpYyBjb25zdCBjaGFyKiB2
ZXJ0ZXhUZW1wbGF0ZSA9Ci0gICAgU1RSSU5HSUZZKAotICAgICAgICBhdHRyaWJ1dGUgdmVjNCBh
X3ZlcnRleDsKLSAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3TWF0cml4OwotICAgICAg
ICB1bmlmb3JtIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OwotICAgICAgICB1bmlmb3JtIG1hdDQg
dV90ZXh0dXJlU3BhY2VNYXRyaXg7Ci0KLSAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7
Ci0gICAgICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29yZDsKLSAgICAgICAgdmFyeWluZyBm
bG9hdCB2X2FudGlhbGlhczsKLQotICAgICAgICB2b2lkIG5vb3AoaW5vdXQgdmVjMiBkdW1teVBh
cmFtZXRlcikgeyB9Ci0KLSAgICAgICAgdmVjNCB0b1ZpZXdwb3J0U3BhY2UodmVjMiBwb3MpIHsg
cmV0dXJuIHZlYzQocG9zLCAwLiwgMS4pICogdV9tb2RlbFZpZXdNYXRyaXg7IH0KLQotICAgICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHdlIGdldCBl
ZGdlIHRyaWFuZ2xlcyB3aXRoIGNvbnRyb2wgcG9pbnRzLAotICAgICAgICAvLyBhIGNvbnRyb2wg
cG9pbnQgYmVpbmcgdGhlIG5lYXJlc3QgcG9pbnQgdG8gdGhlIGNvb3JkaW5hdGUgdGhhdCBpcyBv
biB0aGUgZWRnZS4KLSAgICAgICAgdm9pZCBhcHBseUFudGlhbGlhc2luZyhpbm91dCB2ZWMyIHBv
c2l0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXZSBjb3VudCBvbiB0aGUgZmFjdCB0
aGF0IHF1YWQgcGFzc2VkIGluIGlzIGFsd2F5cyBhIHVuaXQgcmVjdCwKLSAgICAgICAgICAgIC8v
IGFuZCB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGFwcGxpZXMgdGhlIHJlYWwgcmVjdC4KLSAg
ICAgICAgICAgIGNvbnN0IHZlYzIgY2VudGVyID0gdmVjMigwLjUsIDAuNSk7Ci0gICAgICAgICAg
ICBjb25zdCBmbG9hdCBhbnRpYWxpYXNJbmZsYXRpb25EaXN0YW5jZSA9IDEuOwotCi0gICAgICAg
ICAgICAvLyBXZSBwYXNzIHRoZSBjb250cm9sIHBvaW50IGFzIHRoZSB6dyBjb29yZGluYXRlcyBv
ZiB0aGUgdmVydGV4LgotICAgICAgICAgICAgLy8gVGhlIGNvbnRyb2wgcG9pbnQgaXMgdGhlIHBv
aW50IG9uIHRoZSBlZGdlIGNsb3Nlc3QgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gICAgICAg
ICAgICAvLyBUaGUgY29udHJvbCBwb2ludCBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIGFudGlhbGlh
cyB2YWx1ZS4KLSAgICAgICAgICAgIHZlYzIgY29udHJvbFBvaW50ID0gYV92ZXJ0ZXguenc7Ci0K
LSAgICAgICAgICAgIC8vIEZpcnN0IHdlIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgaW4gdmlld3Bv
cnQgc3BhY2UuCi0gICAgICAgICAgICB2ZWM0IGNlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9
IHRvVmlld3BvcnRTcGFjZShjZW50ZXIpOwotICAgICAgICAgICAgdmVjNCBjb250cm9sUG9pbnRJ
blZpZXdwb3J0Q29vcmRpbmF0ZXMgPSB0b1ZpZXdwb3J0U3BhY2UoY29udHJvbFBvaW50KTsKLSAg
ICAgICAgICAgIGZsb2F0IHZpZXdwb3J0U3BhY2VEaXN0YW5jZSA9IGRpc3RhbmNlKGNlbnRlcklu
Vmlld3BvcnRDb29yZGluYXRlcywgY29udHJvbFBvaW50SW5WaWV3cG9ydENvb3JkaW5hdGVzKTsK
LQotICAgICAgICAgICAgLy8gV2UgYWRkIHRoZSBpbmZsYXRpb24gZGlzdGFuY2UgdG8gdGhlIGNv
bXB1dGVkIGRpc3RhbmNlLCBhbmQgY29tcHV0ZSB0aGUgcmF0aW8uCi0gICAgICAgICAgICBmbG9h
dCBpbmZsYXRpb25SYXRpbyA9ICh2aWV3cG9ydFNwYWNlRGlzdGFuY2UgKyBhbnRpYWxpYXNJbmZs
YXRpb25EaXN0YW5jZSkgLyB2aWV3cG9ydFNwYWNlRGlzdGFuY2U7Ci0KLSAgICAgICAgICAgIC8v
IHZfYW50aWFsaWFzIG5lZWRzIHRvIGJlIDAgZm9yIHRoZSBvdXRlciBlZGdlIGFuZCAxLiBmb3Ig
dGhlIGlubmVyIGVkZ2UuCi0gICAgICAgICAgICAvLyBTaW5jZSB0aGUgY29udHJvbFBvaW50IGlz
IGVxdWFsIHRvIHRoZSBwb3NpdGlvbiBpbiB0aGUgZWRnZSB2ZXJ0aWNlcywgdGhlIHZhbHVlIGlz
IGFsd2F5cyAwIGZvciB0aG9zZS4KLSAgICAgICAgICAgIC8vIEZvciB0aGUgY2VudGVyIHBvaW50
LCB0aGUgZGlzdGFuY2UgaXMgYWx3YXlzIDAuNSwgc28gd2Ugbm9ybWFsaXplIHRvIDEuIGJ5IG11
bHRpcGx5aW5nIGJ5IDIuCi0gICAgICAgICAgICAvLyBCeSBtdWx0cGx5aW5nIGJ5IGluZmxhdGlv
blJhdGlvIGFuZCBkaXZpZGluZyBieSAoaW5mbGF0aW9uUmF0aW8gLSAxKSwKLSAgICAgICAgICAg
IC8vIFdlIG1ha2Ugc3VyZSB0aGF0IHRoZSB2YXJ5aW5nIGludGVycG9sYXRlcyBiZXR3ZWVuIDAg
KG91dGVyIGVkZ2UpLCAxIChpbm5lciBlZGdlKSBhbmQgbiA+IDEgKGNlbnRlcikuCi0gICAgICAg
ICAgICB2X2FudGlhbGlhcyA9IGRpc3RhbmNlKGNvbnRyb2xQb2ludCwgcG9zaXRpb24pICogMi4g
KiBpbmZsYXRpb25SYXRpbyAvIChpbmZsYXRpb25SYXRpbyAtIDEuKTsKLQotICAgICAgICAgICAg
Ly8gTm93IGluZmxhdGUgdGhlIGFjdHVhbCBwb3NpdGlvbi4gQnkgdXNpbmcgdGhpcyBmb3JtdWxh
IGluc3RlYWQgb2YgaW5mbGF0aW5nIHBvc2l0aW9uIGRpcmVjdGx5LAotICAgICAgICAgICAgLy8g
d2UgZW5zdXJlIHRoYXQgdGhlIGNlbnRlciB2ZXJ0ZXggaXMgbmV2ZXIgaW5mbGF0ZWQuCi0gICAg
ICAgICAgICBwb3NpdGlvbiA9IGNlbnRlciArIChwb3NpdGlvbiAtIGNlbnRlcikgKiBpbmZsYXRp
b25SYXRpbzsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7
Ci0gICAgICAgICAgICB2ZWMyIHBvc2l0aW9uID0gYV92ZXJ0ZXgueHk7Ci0gICAgICAgICAgICBh
cHBseUFudGlhbGlhc2luZ0lmTmVlZGVkKHBvc2l0aW9uKTsKLQotICAgICAgICAgICAgLy8gVGhl
IHRleHR1cmUgcG9zaXRpb24gbmVlZHMgdG8gYmUgY2xhbXBlZCB0byAwLi4xIGJlZm9yZSB0aGUg
dGV4dHVyZSBtYXRyaXggaXMgYXBwbGllZC4KLSAgICAgICAgICAgIHZlYzQgY2xhbXBlZFBvc2l0
aW9uID0gY2xhbXAodmVjNChwb3NpdGlvbiwgMC4sIDEuKSwgMC4sIDEuKTsKLSAgICAgICAgICAg
IHZfdGV4Q29vcmQgPSAodV90ZXh0dXJlU3BhY2VNYXRyaXggKiBjbGFtcGVkUG9zaXRpb24pLnh5
OwotCi0gICAgICAgICAgICB2X21hc2tUZXhDb29yZCA9IHBvc2l0aW9uOwotICAgICAgICAgICAg
Z2xfUG9zaXRpb24gPSB1X3Byb2plY3Rpb25NYXRyaXggKiB1X21vZGVsVmlld01hdHJpeCAqIHZl
YzQocG9zaXRpb24sIDAuLCAxLik7Ci0gICAgICAgIH0KLSAgICApOwotCi0jZGVmaW5lIFJFQ1Rf
VEVYVFVSRV9ESVJFQ1RJVkUgXAotICAgIEdMU0xfRElSRUNUSVZFKGlmZGVmIEVOQUJMRV9SZWN0
KSBcCi0gICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyVHlwZSBzYW1wbGVyMkRS
ZWN0KSBcCi0gICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyRnVuY3Rpb24gdGV4
dHVyZTJEUmVjdCkgXAotICAgIEdMU0xfRElSRUNUSVZFKGVsc2UpIFwKLSAgICAgICAgR0xTTF9E
SVJFQ1RJVkUoZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIyRCkgXAotICAgICAgICBHTFNMX0RJ
UkVDVElWRShkZWZpbmUgU2FtcGxlckZ1bmN0aW9uIHRleHR1cmUyRCkgXAotICAgIEdMU0xfRElS
RUNUSVZFKGVuZGlmKQotCi0jZGVmaW5lIEVOQUJMRV9BUFBMSUVSKE5hbWUpICIjZGVmaW5lIEVO
QUJMRV8iI05hbWUiXG4jZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIGFwcGx5IiNOYW1lIlxu
IgotI2RlZmluZSBESVNBQkxFX0FQUExJRVIoTmFtZSkgIiNkZWZpbmUgYXBwbHkiI05hbWUiSWZO
ZWVkZWQgbm9vcFxuIgotI2RlZmluZSBCTFVSX0NPTlNUQU5UUyBcCi0gICAgR0xTTF9ESVJFQ1RJ
VkUoZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIIDExKSBcCi0gICAgR0xTTF9ESVJF
Q1RJVkUoZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMikKLQotCi1zdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9Ci0gICAgUkVDVF9URVhUVVJFX0RJUkVDVElWRQotICAg
IEJMVVJfQ09OU1RBTlRTCi0gICAgU1RSSU5HSUZZKAotICAgICAgICBwcmVjaXNpb24gbWVkaXVt
cCBmbG9hdDsKLSAgICAgICAgdW5pZm9ybSBTYW1wbGVyVHlwZSBzX3NhbXBsZXI7Ci0gICAgICAg
IHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFzazsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19j
b250ZW50VGV4dHVyZTsKLSAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAg
IHZhcnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7Ci0gICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENv
b3JkOwotICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgIHVuaWZv
cm0gZmxvYXQgdV9maWx0ZXJBbW91bnQ7Ci0gICAgICAgIHVuaWZvcm0gdmVjMiB1X2JsdXJSYWRp
dXM7Ci0gICAgICAgIHVuaWZvcm0gdmVjMiB1X3NoYWRvd09mZnNldDsKLSAgICAgICAgdW5pZm9y
bSB2ZWM0IHVfY29sb3I7Ci0gICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtH
QVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07Ci0KLSAgICAgICAgdm9pZCBub29wKGlub3V0IHZl
YzQgZHVtbXlQYXJhbWV0ZXIpIHsgfQotCi0gICAgICAgIGZsb2F0IGFudGlhbGlhcygpIHsgcmV0
dXJuIHNtb290aHN0ZXAodl9hbnRpYWxpYXMsIDAuLCAxLik7IH0KLQotICAgICAgICB2b2lkIGFw
cGx5VGV4dHVyZShpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yID0gU2FtcGxlckZ1bmN0aW9uKHNf
c2FtcGxlciwgdl90ZXhDb29yZCk7IH0KLSAgICAgICAgdm9pZCBhcHBseU9wYWNpdHkoaW5vdXQg
dmVjNCBjb2xvcikgeyBjb2xvciAqPSB1X29wYWNpdHk7IH0KLSAgICAgICAgdm9pZCBhcHBseUFu
dGlhbGlhc2luZyhpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IGFudGlhbGlhcygpOyB9Ci0g
ICAgICAgIHZvaWQgYXBwbHlNYXNrKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdGV4dHVy
ZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpLmE7IH0KLQotICAgICAgICB2b2lkIGFwcGx5R3Jh
eXNjYWxlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZs
b2F0IGFtb3VudCA9IDEuMCAtIHVfZmlsdGVyQW1vdW50OwotICAgICAgICAgICAgY29sb3IgPSB2
ZWM0KCgwLjIxMjYgKyAwLjc4NzQgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcx
NTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29s
b3IuYiwKLSAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9y
LnIgKyAoMC43MTUyICsgMC4yODQ4ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4w
NzIyICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEy
NiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xv
ci5nICsgKDAuMDcyMiArIDAuOTI3OCAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAg
ICAgIGNvbG9yLmEpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhcHBseVNlcGlhRmlsdGVy
KGlub3V0IHZlYzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IDEuMCAtIHVfZmlsdGVyQW1vdW50OwotICAgICAgICAgICAgY29sb3IgPSB2ZWM0KCgwLjM5MyAr
IDAuNjA3ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43NjkgLSAwLjc2OSAqIGFtb3VudCkgKiBj
b2xvci5nICsgKDAuMTg5IC0gMC4xODkgKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAg
ICAgICAoMC4zNDkgLSAwLjM0OSAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNjg2ICsgMC4zMTQg
KiBhbW91bnQpICogY29sb3IuZyArICgwLjE2OCAtIDAuMTY4ICogYW1vdW50KSAqIGNvbG9yLmIs
Ci0gICAgICAgICAgICAgICAgKDAuMjcyIC0gMC4yNzIgKiBhbW91bnQpICogY29sb3IuciArICgw
LjUzNCAtIDAuNTM0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xMzEgKyAwLjg2OSAqIGFtb3Vu
dCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgIGNvbG9yLmEpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBhcHBseVNhdHVyYXRlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbG9yID0gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfZmlsdGVyQW1v
dW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9y
LmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAg
ICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAu
NzE1ICsgMC4yODUgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIg
KiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICgwLjIxMyAtIDAu
MjEzICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0
ZXJBbW91bnQpICogY29sb3IuZyArICgwLjA3MiArIDAuOTI4ICogdV9maWx0ZXJBbW91bnQpICog
Y29sb3IuYiwKLSAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgYXBwbHlIdWVSb3RhdGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKLSAgICAgICAgewot
ICAgICAgICAgICAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2OwotICAgICAgICAg
ICAgZmxvYXQgYyA9IGNvcyh1X2ZpbHRlckFtb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAgICAg
ICAgZmxvYXQgcyA9IHNpbih1X2ZpbHRlckFtb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAgICAg
ICAgY29sb3IgPSB2ZWM0KGNvbG9yLnIgKiAoMC4yMTMgKyBjICogMC43ODcgLSBzICogMC4yMTMp
ICsgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSAtIHMgKiAwLjcxNSkgKyBjb2xvci5iICog
KDAuMDcyIC0gYyAqIDAuMDcyICsgcyAqIDAuOTI4KSwKLSAgICAgICAgICAgICAgICBjb2xvci5y
ICogKDAuMjEzIC0gYyAqIDAuMjEzICsgcyAqIDAuMTQzKSArIGNvbG9yLmcgKiAoMC43MTUgKyBj
ICogMC4yODUgKyBzICogMC4xNDApICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiAtIHMg
KiAwLjI4MyksCi0gICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyAt
IHMgKiAwLjc4NykgKyAgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSArIHMgKiAwLjcxNSkg
KyBjb2xvci5iICogKDAuMDcyICsgYyAqIDAuOTI4ICsgcyAqIDAuMDcyKSwKLSAgICAgICAgICAg
ICAgICBjb2xvci5hKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGludmVydChmbG9hdCBu
KSB7IHJldHVybiAoMS4wIC0gbikgKiB1X2ZpbHRlckFtb3VudCArIG4gKiAoMS4wIC0gdV9maWx0
ZXJBbW91bnQpOyB9Ci0gICAgICAgIHZvaWQgYXBwbHlJbnZlcnRGaWx0ZXIoaW5vdXQgdmVjNCBj
b2xvcikKLSAgICAgICAgewotICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGludmVydChjb2xvci5y
KSwgaW52ZXJ0KGNvbG9yLmcpLCBpbnZlcnQoY29sb3IuYiksIGNvbG9yLmEpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBhcHBseUJyaWdodG5lc3NGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikK
LSAgICAgICAgewotICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqICgxLjAgKyB1
X2ZpbHRlckFtb3VudCksIGNvbG9yLmEpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgY29u
dHJhc3QoZmxvYXQgbikgeyByZXR1cm4gKG4gLSAwLjUpICogdV9maWx0ZXJBbW91bnQgKyAwLjU7
IH0KLSAgICAgICAgdm9pZCBhcHBseUNvbnRyYXN0RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbG9yID0gdmVjNChjb250cmFzdChjb2xvci5yKSwgY29u
dHJhc3QoY29sb3IuZyksIGNvbnRyYXN0KGNvbG9yLmIpLCBjb2xvci5hKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgYXBwbHlPcGFjaXR5RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbG9yID0gdmVjNChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5i
LCBjb2xvci5hICogdV9maWx0ZXJBbW91bnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmVjNCBz
YW1wbGVDb2xvckF0UmFkaXVzKGZsb2F0IHJhZGl1cykKLSAgICAgICAgewotICAgICAgICAgICAg
dmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7Ci0gICAgICAg
ICAgICByZXR1cm4gU2FtcGxlckZ1bmN0aW9uKHNfc2FtcGxlciwgY29vcmQpICogZmxvYXQoY29v
cmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEu
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IHNhbXBsZUFscGhhQXRSYWRpdXMoZmxvYXQg
cmFkaXVzKQotICAgICAgICB7Ci0gICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAt
IHVfc2hhZG93T2Zmc2V0ICsgcmFkaXVzICogdV9ibHVyUmFkaXVzOwotICAgICAgICAgICAgcmV0
dXJuIFNhbXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+
IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgYXBwbHlCbHVyRmlsdGVyKGlub3V0IHZlYzQgY29sb3Ip
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZlYzQgdG90YWwgPSBzYW1wbGVDb2xvckF0UmFkaXVz
KDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMTsg
aSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAgICAgICB0
b3RhbCArPSBzYW1wbGVDb2xvckF0UmFkaXVzKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NU
RVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1w
bGVDb2xvckF0UmFkaXVzKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1
X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb2xvciA9
IHRvdGFsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhcHBseUFscGhhQmx1cihpbm91dCB2
ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFs
cGhhQXRSYWRpdXMoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewotICAgICAg
ICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhQXRSYWRpdXMoZmxvYXQoaSkgKiBHQVVTU0lB
Tl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgIHRv
dGFsICs9IHNhbXBsZUFscGhhQXRSYWRpdXMoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5F
TF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGNvbG9yICo9IHRvdGFsOwotICAgICAgICB9Ci0KLSAgICAgICAgdmVjNCBzb3VyY2VPdmVy
KHZlYzQgc3JjLCB2ZWM0IGRzdCkgeyByZXR1cm4gc3JjICsgZHN0ICogKDEuIC0gZHN0LmEpOyB9
Ci0KLSAgICAgICAgdm9pZCBhcHBseUNvbnRlbnRUZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHZlYzQgY29udGVudENvbG9yID0gdGV4dHVyZTJEKHNfY29u
dGVudFRleHR1cmUsIHZfdGV4Q29vcmQpOwotICAgICAgICAgICAgY29sb3IgPSBzb3VyY2VPdmVy
KGNvbnRlbnRDb2xvciwgY29sb3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhcHBseVNv
bGlkQ29sb3IoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB1X2NvbG9yOyB9Ci0KLSAgICAg
ICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZlYzQgY29sb3IgPSB2
ZWM0KDEuLCAxLiwgMS4sIDEuKTsKLSAgICAgICAgICAgIGFwcGx5VGV4dHVyZUlmTmVlZGVkKGNv
bG9yKTsKLSAgICAgICAgICAgIGFwcGx5U29saWRDb2xvcklmTmVlZGVkKGNvbG9yKTsKLSAgICAg
ICAgICAgIGFwcGx5QW50aWFsaWFzaW5nSWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAgYXBw
bHlNYXNrSWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAgYXBwbHlPcGFjaXR5SWZOZWVkZWQo
Y29sb3IpOwotICAgICAgICAgICAgYXBwbHlHcmF5c2NhbGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7
Ci0gICAgICAgICAgICBhcHBseVNlcGlhRmlsdGVySWZOZWVkZWQoY29sb3IpOwotICAgICAgICAg
ICAgYXBwbHlTYXR1cmF0ZUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKLSAgICAgICAgICAgIGFwcGx5
SHVlUm90YXRlRmlsdGVySWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAgYXBwbHlJbnZlcnRG
aWx0ZXJJZk5lZWRlZChjb2xvcik7Ci0gICAgICAgICAgICBhcHBseUJyaWdodG5lc3NGaWx0ZXJJ
Zk5lZWRlZChjb2xvcik7Ci0gICAgICAgICAgICBhcHBseUNvbnRyYXN0RmlsdGVySWZOZWVkZWQo
Y29sb3IpOwotICAgICAgICAgICAgYXBwbHlPcGFjaXR5RmlsdGVySWZOZWVkZWQoY29sb3IpOwot
ICAgICAgICAgICAgYXBwbHlCbHVyRmlsdGVySWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAg
YXBwbHlBbHBoYUJsdXJJZk5lZWRlZChjb2xvcik7Ci0gICAgICAgICAgICBhcHBseUNvbnRlbnRU
ZXh0dXJlSWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7
Ci0gICAgICAgIH0KLSAgICApOwotCi0KLXN0YXRpYyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucywgU3RyaW5nJiB2ZXJ0ZXhTb3Vy
Y2UsIFN0cmluZyYgZnJhZ21lbnRTb3VyY2UpCi17Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHNoYWRl
ckJ1aWxkZXI7Ci0jZGVmaW5lIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBcCi0g
ICAgc2hhZGVyQnVpbGRlci5hcHBlbmQoXAotICAgICAgICAob3B0aW9ucyAmIFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpBcHBsaWVyKSA/IEVOQUJMRV9BUFBMSUVSKEFwcGxpZXIpIDogRElT
QUJMRV9BUFBMSUVSKEFwcGxpZXIpKQotCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFRl
eHR1cmUpOwotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhSZWN0KTsKLSAgICBTRVRfQVBQ
TElFUl9GUk9NX09QVElPTlMoU29saWRDb2xvcik7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKE9wYWNpdHkpOwotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhNYXNrKTsKLSAgICBT
RVRfQVBQTElFUl9GUk9NX09QVElPTlMoQW50aWFsaWFzaW5nKTsKLSAgICBTRVRfQVBQTElFUl9G
Uk9NX09QVElPTlMoR3JheXNjYWxlRmlsdGVyKTsKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElP
TlMoU2VwaWFGaWx0ZXIpOwotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTYXR1cmF0ZUZp
bHRlcik7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEh1ZVJvdGF0ZUZpbHRlcik7Ci0g
ICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJyaWdodG5lc3NGaWx0ZXIpOwotICAgIFNFVF9B
UFBMSUVSX0ZST01fT1BUSU9OUyhDb250cmFzdEZpbHRlcik7Ci0gICAgU0VUX0FQUExJRVJfRlJP
TV9PUFRJT05TKEludmVydEZpbHRlcik7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9w
YWNpdHlGaWx0ZXIpOwotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhCbHVyRmlsdGVyKTsK
LSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQWxwaGFCbHVyKTsKLSAgICBTRVRfQVBQTElF
Ul9GUk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpOwotICAgIFN0cmluZ0J1aWxkZXIgdmVydGV4
QnVpbGRlcjsKLSAgICB2ZXJ0ZXhCdWlsZGVyLmFwcGVuZChzaGFkZXJCdWlsZGVyLnRvU3RyaW5n
KCkpOwotICAgIHZlcnRleEJ1aWxkZXIuYXBwZW5kKHZlcnRleFRlbXBsYXRlKTsKLSAgICBzaGFk
ZXJCdWlsZGVyLmFwcGVuZChmcmFnbWVudFRlbXBsYXRlKTsKLSAgICB2ZXJ0ZXhTb3VyY2UgPSB2
ZXJ0ZXhCdWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgZnJhZ21lbnRTb3VyY2UgPSBzaGFkZXJCdWls
ZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLVRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IG1f
Y29udGV4dChjb250ZXh0KQotewotfQotCi1UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkKLXsKLX0KLQotUGFzc1JlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclBy
b2dyYW0oT3B0aW9ucyBvcHRpb25zKQotewotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
TWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZ3JhbXMuZmluZChvcHRpb25zKTsKLSAgICBpZiAoaXQg
IT0gbV9wcm9ncmFtcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKLQotICAgIFN0
cmluZyB2ZXJ0ZXhTaGFkZXI7Ci0gICAgU3RyaW5nIGZyYWdtZW50U2hhZGVyOwotICAgIGdldFNo
YWRlclNwZWMob3B0aW9ucywgdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OmNyZWF0ZShtX2NvbnRleHQsIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFk
ZXIpOwotICAgIG1fcHJvZ3JhbXMuYWRkKG9wdGlvbnMsIHByb2dyYW0pOwotICAgIHJldHVybiBw
cm9ncmFtOwotfQotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjE3NDk4M2RkYzVlNjY0MTc5
OGQ4OTlkNjljNGRlZWZhZTU2ZmY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAK
LS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotCi0gVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gKLSNk
ZWZpbmUgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaAotCi0jaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckdMLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSNkZWZpbmUgVEVYTUFQX0RF
Q0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsIE5hbWUsIFR5cGUpIEdDM0R1aW50IEFjY2Vzc29yIyNM
b2NhdGlvbigpIHsgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lKE5hbWUpOyByZXR1cm4g
Z2V0TG9jYXRpb24obmFtZSwgVHlwZSk7IH0KLSNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfVU5JRk9S
TShBY2Nlc3NvcikgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsICJ1XyIjQWNjZXNz
b3IsIFVuaWZvcm1WYXJpYWJsZSkKLSNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKEFj
Y2Vzc29yKSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgImFfIiNBY2Nlc3Nvciwg
QXR0cmliVmFyaWFibGUpCi0jZGVmaW5lIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoQWNjZXNzb3Ip
IFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCAic18iI0FjY2Vzc29yLCBVbmlmb3Jt
VmFyaWFibGUpCi0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIDogcHVibGljIFJl
ZkNvdW50ZWQ8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHsKLXB1YmxpYzoKLSAgICBQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW1JRCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBjcmVhdGUoUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXgs
IGNvbnN0IFN0cmluZyYgZnJhZ21lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleCwgZnJhZ21lbnQp
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwot
Ci0gICAgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKHZlcnRleCkKLQotICAgIFRFWE1BUF9ERUNM
QVJFX1VOSUZPUk0obW9kZWxWaWV3TWF0cml4KQotICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0o
cHJvamVjdGlvbk1hdHJpeCkKLSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHRleHR1cmVTcGFj
ZU1hdHJpeCkKLSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG9wYWNpdHkpCi0gICAgVEVYTUFQ
X0RFQ0xBUkVfVU5JRk9STShjb2xvcikKLSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGV4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZSkKLSAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKHNh
bXBsZXIpCi0gICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihtYXNrKQotCi0jaWYgRU5BQkxFKENT
U19GSUxURVJTKQotICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZmlsdGVyQW1vdW50KQotICAg
IFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZ2F1c3NpYW5LZXJuZWwpCi0gICAgVEVYTUFQX0RFQ0xB
UkVfVU5JRk9STShibHVyUmFkaXVzKQotICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oc2hhZG93
T2Zmc2V0KQotICAgIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoY29udGVudFRleHR1cmUpCi0jZW5k
aWYKLQotICAgIHZvaWQgc2V0TWF0cml4KEdDM0R1aW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYpOwotCi1wcml2YXRlOgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBjb25zdCBTdHJpbmcmIHZlcnRleFNoYWRlclNvdXJj
ZSwgY29uc3QgU3RyaW5nJiBmcmFnbWVudFNoYWRlclNvdXJjZSk7Ci0gICAgUGxhdGZvcm0zRE9i
amVjdCBtX3ZlcnRleFNoYWRlcjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFk
ZXI7Ci0KLSAgICBlbnVtIFZhcmlhYmxlVHlwZSB7IFVuaWZvcm1WYXJpYWJsZSwgQXR0cmliVmFy
aWFibGUgfTsKLSAgICBHQzNEdWludCBnZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmLCBW
YXJpYWJsZVR5cGUpOwotCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7
Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOwotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBH
QzNEdWludD4gbV92YXJpYWJsZXM7Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBPcHRpb24gewotICAgICAgICBUZXh0dXJlICAgICAg
ICAgID0gMUwgPDwgMCwKLSAgICAgICAgUmVjdCAgICAgICAgICAgICA9IDFMIDw8IDEsCi0gICAg
ICAgIFNvbGlkQ29sb3IgICAgICAgPSAxTCA8PCAyLAotICAgICAgICBPcGFjaXR5ICAgICAgICAg
ID0gMUwgPDwgMywKLSAgICAgICAgTWFzayAgICAgICAgICAgICA9IDFMIDw8IDQsCi0gICAgICAg
IEFudGlhbGlhc2luZyAgICAgPSAxTCA8PCA1LAotICAgICAgICBHcmF5c2NhbGVGaWx0ZXIgID0g
MUwgPDwgNiwKLSAgICAgICAgU2VwaWFGaWx0ZXIgICAgICA9IDFMIDw8IDcsCi0gICAgICAgIFNh
dHVyYXRlRmlsdGVyICAgPSAxTCA8PCA4LAotICAgICAgICBIdWVSb3RhdGVGaWx0ZXIgID0gMUwg
PDwgOSwKLSAgICAgICAgQnJpZ2h0bmVzc0ZpbHRlciA9IDFMIDw8IDEwLAotICAgICAgICBDb250
cmFzdEZpbHRlciAgID0gMUwgPDwgMTEsCi0gICAgICAgIEludmVydEZpbHRlciAgICAgPSAxTCA8
PCAxMiwKLSAgICAgICAgT3BhY2l0eUZpbHRlciAgICA9IDFMIDw8IDEzLAotICAgICAgICBCbHVy
RmlsdGVyICAgICAgID0gMUwgPDwgMTQsCi0gICAgICAgIEFscGhhQmx1ciAgICAgICAgPSAxTCA8
PCAxNSwKLSAgICAgICAgQ29udGVudFRleHR1cmUgICA9IDFMIDw8IDE2Ci0gICAgfTsKLQotICAg
IHR5cGVkZWYgdW5zaWduZWQgT3B0aW9uczsKLQotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyKCkgeyB9Ci0gICAgZXhwbGljaXQgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhp
Y3NDb250ZXh0M0QqKTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigp
OwotCi0gICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gZ2V0U2hhZGVy
UHJvZ3JhbShPcHRpb25zKTsKLQotcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8T3B0aW9u
cywgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiA+IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtTWFwOwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fcHJvZ3Jh
bXM7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7Ci19OwotCi19Ci0j
ZW5kaWYKLQotI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMGMyYjAyYzJl
NDczMjkyNzUzY2MzM2YzNzI1NGIwN2M2ODk3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0uY3BwCkBAIC0wLDAgKzEsMzkwIEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyBDb3B5cmlnaHQgKEMpIDIw
MTIgSWdhbGlhIFMuTC4KKyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgiCisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJM
ZW5ndGhGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckdMLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNk
ZWZpbmUgU1RSSU5HSUZZKC4uLikgI19fVkFfQVJHU19fCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGlubGluZSBib29sIGNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpCit7CisjaWYgIUxP
R19ESVNBQkxFRAorICAgIHJldHVybiBMb2dDb21wb3NpdGluZy5zdGF0ZSA9PSBXVEZMb2dDaGFu
bmVsT247CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXgsIGNvbnN0IFN0
cmluZyYgZnJhZ21lbnQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKK3sKKyAgICBtX3ZlcnRl
eFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJU
RVhfU0hBREVSKTsKKyAgICBtX2ZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFk
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgbV9jb250ZXh0LT5z
aGFkZXJTb3VyY2UobV92ZXJ0ZXhTaGFkZXIsIHZlcnRleCk7CisgICAgbV9jb250ZXh0LT5zaGFk
ZXJTb3VyY2UobV9mcmFnbWVudFNoYWRlciwgZnJhZ21lbnQpOworICAgIG1faWQgPSBtX2NvbnRl
eHQtPmNyZWF0ZVByb2dyYW0oKTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIobV92ZXJ0
ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVy
KTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7Cisg
ICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7CisgICAg
bV9jb250ZXh0LT5saW5rUHJvZ3JhbShtX2lkKTsKKworICAgIGlmICghY29tcG9zaXRpbmdMb2dF
bmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9y
KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgICAgICByZXR1cm47CisKKyAg
ICBTdHJpbmcgbG9nID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG1fdmVydGV4U2hhZGVy
KTsKKyAgICBMT0coQ29tcG9zaXRpbmcsICJWZXJ0ZXggc2hhZGVyIGxvZzogJXNcbiIsIGxvZy51
dGY4KCkuZGF0YSgpKTsKKyAgICBsb2cgPSBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cobV9m
cmFnbWVudFNoYWRlcik7CisgICAgTE9HKENvbXBvc2l0aW5nLCAiRnJhZ21lbnQgc2hhZGVyIGxv
ZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgpKTsKKyAgICBsb2cgPSBtX2NvbnRleHQtPmdldFBy
b2dyYW1JbmZvTG9nKG1faWQpOworICAgIExPRyhDb21wb3NpdGluZywgIlByb2dyYW0gbG9nOiAl
c1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpzZXRNYXRyaXgoR0MzRHVpbnQgbG9jYXRpb24sIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgpCit7CisgICAgR0MzRGZsb2F0IG1hdHJpeEFzRmxvYXRzW10gPSB7Cisg
ICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5t
MTQoKSwKKyAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwg
bWF0cml4Lm0yNCgpLAorICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4
Lm0zMygpLCBtYXRyaXgubTM0KCksCisgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00Migp
LCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQorICAgIH07CisKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIDEsIGZhbHNlLCBtYXRyaXhBc0Zsb2F0cyk7Cit9CisK
K0dDM0R1aW50IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlvbihjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIFZhcmlhYmxlVHlwZSB0eXBlKQoreworICAgIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBHQzNEdWludD46Oml0ZXJhdG9yIGl0ID0gbV92YXJpYWJsZXMuZmluZChuYW1l
KTsKKyAgICBpZiAoaXQgIT0gbV92YXJpYWJsZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+
dmFsdWU7CisKKyAgICBHQzNEdWludCBsb2NhdGlvbiA9IDA7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBVbmlmb3JtVmFyaWFibGU6CisgICAgICAgIGxvY2F0aW9uID0gbV9jb250ZXh0
LT5nZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQXR0cmliVmFyaWFibGU6CisgICAgICAgIGxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRBdHRy
aWJMb2NhdGlvbihtX2lkLCBuYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IG1fdmFyaWFibGVzLmFkZChuYW1lLCBsb2NhdGlvbik7CisgICAgcmV0dXJuIGxvY2F0aW9uOwor
fQorCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKCkKK3sKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1faWQ7CisgICAgaWYg
KCFwcm9ncmFtSUQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hh
ZGVyKHByb2dyYW1JRCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hh
ZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFt
SUQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJh
Z21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwor
fQorCisjZGVmaW5lIEdMU0xfRElSRUNUSVZFKC4uLikgIiMiI19fVkFfQVJHU19fIlxuIgorc3Rh
dGljIGNvbnN0IGNoYXIqIHZlcnRleFRlbXBsYXRlID0KKyAgICBTVFJJTkdJRlkoCisgICAgICAg
IGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworICAgICAgICB1bmlmb3JtIG1hdDQgdV9tb2RlbFZp
ZXdNYXRyaXg7CisgICAgICAgIHVuaWZvcm0gbWF0NCB1X3Byb2plY3Rpb25NYXRyaXg7CisgICAg
ICAgIHVuaWZvcm0gbWF0NCB1X3RleHR1cmVTcGFjZU1hdHJpeDsKKworICAgICAgICB2YXJ5aW5n
IHZlYzIgdl90ZXhDb29yZDsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwor
ICAgICAgICB2YXJ5aW5nIGZsb2F0IHZfYW50aWFsaWFzOworCisgICAgICAgIHZvaWQgbm9vcChp
bm91dCB2ZWMyIGR1bW15UGFyYW1ldGVyKSB7IH0KKworICAgICAgICB2ZWM0IHRvVmlld3BvcnRT
cGFjZSh2ZWMyIHBvcykgeyByZXR1cm4gdmVjNChwb3MsIDAuLCAxLikgKiB1X21vZGVsVmlld01h
dHJpeDsgfQorCisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBhc3N1bXB0
aW9uIHRoYXQgd2UgZ2V0IGVkZ2UgdHJpYW5nbGVzIHdpdGggY29udHJvbCBwb2ludHMsCisgICAg
ICAgIC8vIGEgY29udHJvbCBwb2ludCBiZWluZyB0aGUgbmVhcmVzdCBwb2ludCB0byB0aGUgY29v
cmRpbmF0ZSB0aGF0IGlzIG9uIHRoZSBlZGdlLgorICAgICAgICB2b2lkIGFwcGx5QW50aWFsaWFz
aW5nKGlub3V0IHZlYzIgcG9zaXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGNv
dW50IG9uIHRoZSBmYWN0IHRoYXQgcXVhZCBwYXNzZWQgaW4gaXMgYWx3YXlzIGEgdW5pdCByZWN0
LAorICAgICAgICAgICAgLy8gYW5kIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggYXBwbGllcyB0
aGUgcmVhbCByZWN0LgorICAgICAgICAgICAgY29uc3QgdmVjMiBjZW50ZXIgPSB2ZWMyKDAuNSwg
MC41KTsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IGFudGlhbGlhc0luZmxhdGlvbkRpc3RhbmNl
ID0gMS47CisKKyAgICAgICAgICAgIC8vIFdlIHBhc3MgdGhlIGNvbnRyb2wgcG9pbnQgYXMgdGhl
IHp3IGNvb3JkaW5hdGVzIG9mIHRoZSB2ZXJ0ZXguCisgICAgICAgICAgICAvLyBUaGUgY29udHJv
bCBwb2ludCBpcyB0aGUgcG9pbnQgb24gdGhlIGVkZ2UgY2xvc2VzdCB0byB0aGUgY3VycmVudCBw
b3NpdGlvbi4KKyAgICAgICAgICAgIC8vIFRoZSBjb250cm9sIHBvaW50IGlzIHVzZWQgdG8gY29t
cHV0ZSB0aGUgYW50aWFsaWFzIHZhbHVlLgorICAgICAgICAgICAgdmVjMiBjb250cm9sUG9pbnQg
PSBhX3ZlcnRleC56dzsKKworICAgICAgICAgICAgLy8gRmlyc3Qgd2UgY2FsY3VsYXRlIHRoZSBk
aXN0YW5jZSBpbiB2aWV3cG9ydCBzcGFjZS4KKyAgICAgICAgICAgIHZlYzQgY2VudGVySW5WaWV3
cG9ydENvb3JkaW5hdGVzID0gdG9WaWV3cG9ydFNwYWNlKGNlbnRlcik7CisgICAgICAgICAgICB2
ZWM0IGNvbnRyb2xQb2ludEluVmlld3BvcnRDb29yZGluYXRlcyA9IHRvVmlld3BvcnRTcGFjZShj
b250cm9sUG9pbnQpOworICAgICAgICAgICAgZmxvYXQgdmlld3BvcnRTcGFjZURpc3RhbmNlID0g
ZGlzdGFuY2UoY2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzLCBjb250cm9sUG9pbnRJblZpZXdw
b3J0Q29vcmRpbmF0ZXMpOworCisgICAgICAgICAgICAvLyBXZSBhZGQgdGhlIGluZmxhdGlvbiBk
aXN0YW5jZSB0byB0aGUgY29tcHV0ZWQgZGlzdGFuY2UsIGFuZCBjb21wdXRlIHRoZSByYXRpby4K
KyAgICAgICAgICAgIGZsb2F0IGluZmxhdGlvblJhdGlvID0gKHZpZXdwb3J0U3BhY2VEaXN0YW5j
ZSArIGFudGlhbGlhc0luZmxhdGlvbkRpc3RhbmNlKSAvIHZpZXdwb3J0U3BhY2VEaXN0YW5jZTsK
KworICAgICAgICAgICAgLy8gdl9hbnRpYWxpYXMgbmVlZHMgdG8gYmUgMCBmb3IgdGhlIG91dGVy
IGVkZ2UgYW5kIDEuIGZvciB0aGUgaW5uZXIgZWRnZS4KKyAgICAgICAgICAgIC8vIFNpbmNlIHRo
ZSBjb250cm9sUG9pbnQgaXMgZXF1YWwgdG8gdGhlIHBvc2l0aW9uIGluIHRoZSBlZGdlIHZlcnRp
Y2VzLCB0aGUgdmFsdWUgaXMgYWx3YXlzIDAgZm9yIHRob3NlLgorICAgICAgICAgICAgLy8gRm9y
IHRoZSBjZW50ZXIgcG9pbnQsIHRoZSBkaXN0YW5jZSBpcyBhbHdheXMgMC41LCBzbyB3ZSBub3Jt
YWxpemUgdG8gMS4gYnkgbXVsdGlwbHlpbmcgYnkgMi4KKyAgICAgICAgICAgIC8vIEJ5IG11bHRw
bHlpbmcgYnkgaW5mbGF0aW9uUmF0aW8gYW5kIGRpdmlkaW5nIGJ5IChpbmZsYXRpb25SYXRpbyAt
IDEpLAorICAgICAgICAgICAgLy8gV2UgbWFrZSBzdXJlIHRoYXQgdGhlIHZhcnlpbmcgaW50ZXJw
b2xhdGVzIGJldHdlZW4gMCAob3V0ZXIgZWRnZSksIDEgKGlubmVyIGVkZ2UpIGFuZCBuID4gMSAo
Y2VudGVyKS4KKyAgICAgICAgICAgIHZfYW50aWFsaWFzID0gZGlzdGFuY2UoY29udHJvbFBvaW50
LCBwb3NpdGlvbikgKiAyLiAqIGluZmxhdGlvblJhdGlvIC8gKGluZmxhdGlvblJhdGlvIC0gMS4p
OworCisgICAgICAgICAgICAvLyBOb3cgaW5mbGF0ZSB0aGUgYWN0dWFsIHBvc2l0aW9uLiBCeSB1
c2luZyB0aGlzIGZvcm11bGEgaW5zdGVhZCBvZiBpbmZsYXRpbmcgcG9zaXRpb24gZGlyZWN0bHks
CisgICAgICAgICAgICAvLyB3ZSBlbnN1cmUgdGhhdCB0aGUgY2VudGVyIHZlcnRleCBpcyBuZXZl
ciBpbmZsYXRlZC4KKyAgICAgICAgICAgIHBvc2l0aW9uID0gY2VudGVyICsgKHBvc2l0aW9uIC0g
Y2VudGVyKSAqIGluZmxhdGlvblJhdGlvOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBtYWlu
KHZvaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzIgcG9zaXRpb24gPSBhX3ZlcnRleC54
eTsKKyAgICAgICAgICAgIGFwcGx5QW50aWFsaWFzaW5nSWZOZWVkZWQocG9zaXRpb24pOworCisg
ICAgICAgICAgICAvLyBUaGUgdGV4dHVyZSBwb3NpdGlvbiBuZWVkcyB0byBiZSBjbGFtcGVkIHRv
IDAuLjEgYmVmb3JlIHRoZSB0ZXh0dXJlIG1hdHJpeCBpcyBhcHBsaWVkLgorICAgICAgICAgICAg
dmVjNCBjbGFtcGVkUG9zaXRpb24gPSBjbGFtcCh2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pLCAwLiwg
MS4pOworICAgICAgICAgICAgdl90ZXhDb29yZCA9ICh1X3RleHR1cmVTcGFjZU1hdHJpeCAqIGNs
YW1wZWRQb3NpdGlvbikueHk7CisKKyAgICAgICAgICAgIHZfbWFza1RleENvb3JkID0gcG9zaXRp
b247CisgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfcHJvamVjdGlvbk1hdHJpeCAqIHVfbW9k
ZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKKyAgICAgICAgfQorICAgICk7
CisKKyNkZWZpbmUgUkVDVF9URVhUVVJFX0RJUkVDVElWRSBcCisgICAgR0xTTF9ESVJFQ1RJVkUo
aWZkZWYgRU5BQkxFX1JlY3QpIFwKKyAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNhbXBs
ZXJUeXBlIHNhbXBsZXIyRFJlY3QpIFwKKyAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNh
bXBsZXJGdW5jdGlvbiB0ZXh0dXJlMkRSZWN0KSBcCisgICAgR0xTTF9ESVJFQ1RJVkUoZWxzZSkg
XAorICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlclR5cGUgc2FtcGxlcjJEKSBc
CisgICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyRnVuY3Rpb24gdGV4dHVyZTJE
KSBcCisgICAgR0xTTF9ESVJFQ1RJVkUoZW5kaWYpCisKKyNkZWZpbmUgRU5BQkxFX0FQUExJRVIo
TmFtZSkgIiNkZWZpbmUgRU5BQkxFXyIjTmFtZSJcbiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVk
ZWQgYXBwbHkiI05hbWUiXG4iCisjZGVmaW5lIERJU0FCTEVfQVBQTElFUihOYW1lKSAiI2RlZmlu
ZSBhcHBseSIjTmFtZSJJZk5lZWRlZCBub29wXG4iCisjZGVmaW5lIEJMVVJfQ09OU1RBTlRTIFwK
KyAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEggMTEp
IFwKKyAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yKQor
CisKK3N0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlID0KKyAgICBSRUNUX1RFWFRV
UkVfRElSRUNUSVZFCisgICAgQkxVUl9DT05TVEFOVFMKKyAgICBTVFJJTkdJRlkoCisgICAgICAg
IHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworICAgICAgICB1bmlmb3JtIFNhbXBsZXJUeXBlIHNf
c2FtcGxlcjsKKyAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19tYXNrOworICAgICAgICB1bmlm
b3JtIHNhbXBsZXIyRCBzX2NvbnRlbnRUZXh0dXJlOworICAgICAgICB1bmlmb3JtIGZsb2F0IHVf
b3BhY2l0eTsKKyAgICAgICAgdmFyeWluZyBmbG9hdCB2X2FudGlhbGlhczsKKyAgICAgICAgdmFy
eWluZyB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29y
ZDsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2ZpbHRlckFtb3VudDsKKyAgICAgICAgdW5pZm9y
bSB2ZWMyIHVfYmx1clJhZGl1czsKKyAgICAgICAgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0
OworICAgICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1
X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKKworICAgICAgICB2
b2lkIG5vb3AoaW5vdXQgdmVjNCBkdW1teVBhcmFtZXRlcikgeyB9CisKKyAgICAgICAgZmxvYXQg
YW50aWFsaWFzKCkgeyByZXR1cm4gc21vb3Roc3RlcCh2X2FudGlhbGlhcywgMC4sIDEuKTsgfQor
CisgICAgICAgIHZvaWQgYXBwbHlUZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSBT
YW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCB2X3RleENvb3JkKTsgfQorICAgICAgICB2b2lkIGFw
cGx5T3BhY2l0eShpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHVfb3BhY2l0eTsgfQorICAg
ICAgICB2b2lkIGFwcGx5QW50aWFsaWFzaW5nKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0g
YW50aWFsaWFzKCk7IH0KKyAgICAgICAgdm9pZCBhcHBseU1hc2soaW5vdXQgdmVjNCBjb2xvcikg
eyBjb2xvciAqPSB0ZXh0dXJlMkQoc19tYXNrLCB2X21hc2tUZXhDb29yZCkuYTsgfQorCisgICAg
ICAgIHZvaWQgYXBwbHlHcmF5c2NhbGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAg
eworICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9maWx0ZXJBbW91bnQ7CisgICAg
ICAgICAgICBjb2xvciA9IHZlYzQoKDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5y
ICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcy
MiAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYg
KiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgKyAwLjI4NDggKiBhbW91bnQpICogY29sb3Iu
ZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAg
ICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUy
ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyICsgMC45Mjc4ICogYW1vdW50KSAqIGNvbG9y
LmIsCisgICAgICAgICAgICAgICAgY29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGFwcGx5U2VwaWFGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAg
ICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9maWx0ZXJBbW91bnQ7CisgICAgICAgICAgICBjb2xv
ciA9IHZlYzQoKDAuMzkzICsgMC42MDcgKiBhbW91bnQpICogY29sb3IuciArICgwLjc2OSAtIDAu
NzY5ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xODkgLSAwLjE4OSAqIGFtb3VudCkgKiBjb2xv
ci5iLAorICAgICAgICAgICAgICAgICgwLjM0OSAtIDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIg
KyAoMC42ODYgKyAwLjMxNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBh
bW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAoMC4yNzIgLSAwLjI3MiAqIGFtb3Vu
dCkgKiBjb2xvci5yICsgKDAuNTM0IC0gMC41MzQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjEz
MSArIDAuODY5ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgY29sb3IuYSk7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5U2F0dXJhdGVGaWx0ZXIoaW5vdXQgdmVj
NCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KCgwLjIxMyArIDAu
Nzg3ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0
ZXJBbW91bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcyICogdV9maWx0ZXJBbW91bnQpICog
Y29sb3IuYiwKKyAgICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIxMyAqIHVfZmlsdGVyQW1vdW50
KSAqIGNvbG9yLnIgKyAoMC43MTUgKyAwLjI4NSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmcg
KyAoMC4wNzIgLSAwLjA3MiAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAg
ICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1
IC0gMC43MTUgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyICsgMC45MjggKiB1
X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseUh1ZVJvdGF0ZUZpbHRlcihpbm91dCB2ZWM0IGNv
bG9yKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5Nzkz
MjM4NDY7CisgICAgICAgICAgICBmbG9hdCBjID0gY29zKHVfZmlsdGVyQW1vdW50ICogcGkgLyAx
ODAuMCk7CisgICAgICAgICAgICBmbG9hdCBzID0gc2luKHVfZmlsdGVyQW1vdW50ICogcGkgLyAx
ODAuMCk7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoY29sb3IuciAqICgwLjIxMyArIGMgKiAw
Ljc4NyAtIHMgKiAwLjIxMykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1IC0gcyAqIDAu
NzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICogMC45MjgpLAorICAgICAg
ICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgKyBzICogMC4xNDMpICsgY29s
b3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSArIHMgKiAwLjE0MCkgKyBjb2xvci5iICogKDAuMDcy
IC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwKKyAgICAgICAgICAgICAgICBjb2xvci5yICogKDAu
MjEzIC0gYyAqIDAuMjEzIC0gcyAqIDAuNzg3KSArICBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAu
NzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgKyBjICogMC45MjggKyBzICogMC4w
NzIpLAorICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgZmxv
YXQgaW52ZXJ0KGZsb2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfZmlsdGVyQW1vdW50ICsg
biAqICgxLjAgLSB1X2ZpbHRlckFtb3VudCk7IH0KKyAgICAgICAgdm9pZCBhcHBseUludmVydEZp
bHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBjb2xvciA9IHZl
YzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZlcnQoY29sb3IuZyksIGludmVydChjb2xvci5iKSwgY29s
b3IuYSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcihp
bm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoY29s
b3IucmdiICogKDEuMCArIHVfZmlsdGVyQW1vdW50KSwgY29sb3IuYSk7CisgICAgICAgIH0KKwor
ICAgICAgICBmbG9hdCBjb250cmFzdChmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2Zp
bHRlckFtb3VudCArIDAuNTsgfQorICAgICAgICB2b2lkIGFwcGx5Q29udHJhc3RGaWx0ZXIoaW5v
dXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGNvbnRy
YXN0KGNvbG9yLnIpLCBjb250cmFzdChjb2xvci5nKSwgY29udHJhc3QoY29sb3IuYiksIGNvbG9y
LmEpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseU9wYWNpdHlGaWx0ZXIoaW5vdXQg
dmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGNvbG9yLnIs
IGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgKiB1X2ZpbHRlckFtb3VudCk7CisgICAgICAgIH0K
KworICAgICAgICB2ZWM0IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQgcmFkaXVzKQorICAgICAg
ICB7CisgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1
clJhZGl1czsKKyAgICAgICAgICAgIHJldHVybiBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCBj
b29yZCkgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAx
LiAmJiBjb29yZC55IDwgMS4pOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgc2FtcGxlQWxw
aGFBdFJhZGl1cyhmbG9hdCByYWRpdXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzIgY29v
cmQgPSB2X3RleENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7
CisgICAgICAgICAgICByZXR1cm4gU2FtcGxlckZ1bmN0aW9uKHNfc2FtcGxlciwgY29vcmQpLmEg
KiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBj
b29yZC55IDwgMS4pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseUJsdXJGaWx0ZXIo
aW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgdmVjNCB0b3RhbCA9IHNh
bXBsZUNvbG9yQXRSYWRpdXMoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewor
ICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQoaSkgKiBH
QVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOworICAgICAgICAgICAg
ICAgIHRvdGFsICs9IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFO
X0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGNvbG9yID0gdG90YWw7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5
QWxwaGFCbHVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0
IHRvdGFsID0gc2FtcGxlQWxwaGFBdFJhZGl1cygwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURU
SDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGFBdFJhZGl1cyhm
bG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Cisg
ICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdCgtMSAqIGkp
ICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29sb3IgKj0gdG90YWw7CisgICAgICAgIH0KKworICAgICAg
ICB2ZWM0IHNvdXJjZU92ZXIodmVjNCBzcmMsIHZlYzQgZHN0KSB7IHJldHVybiBzcmMgKyBkc3Qg
KiAoMS4gLSBkc3QuYSk7IH0KKworICAgICAgICB2b2lkIGFwcGx5Q29udGVudFRleHR1cmUoaW5v
dXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgdmVjNCBjb250ZW50Q29sb3Ig
PSB0ZXh0dXJlMkQoc19jb250ZW50VGV4dHVyZSwgdl90ZXhDb29yZCk7CisgICAgICAgICAgICBj
b2xvciA9IHNvdXJjZU92ZXIoY29udGVudENvbG9yLCBjb2xvcik7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGFwcGx5U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHVf
Y29sb3I7IH0KKworICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdmVjNCBjb2xvciA9IHZlYzQoMS4sIDEuLCAxLiwgMS4pOworICAgICAgICAgICAgYXBwbHlU
ZXh0dXJlSWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlTb2xpZENvbG9ySWZOZWVk
ZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlBbnRpYWxpYXNpbmdJZk5lZWRlZChjb2xvcik7
CisgICAgICAgICAgICBhcHBseU1hc2tJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBs
eU9wYWNpdHlJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseUdyYXlzY2FsZUZpbHRl
cklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5U2VwaWFGaWx0ZXJJZk5lZWRlZChj
b2xvcik7CisgICAgICAgICAgICBhcHBseVNhdHVyYXRlRmlsdGVySWZOZWVkZWQoY29sb3IpOwor
ICAgICAgICAgICAgYXBwbHlIdWVSb3RhdGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAg
ICAgICBhcHBseUludmVydEZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5
QnJpZ2h0bmVzc0ZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5Q29udHJh
c3RGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseU9wYWNpdHlGaWx0ZXJJ
Zk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseUJsdXJGaWx0ZXJJZk5lZWRlZChjb2xv
cik7CisgICAgICAgICAgICBhcHBseUFscGhhQmx1cklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAg
ICAgIGFwcGx5Q29udGVudFRleHR1cmVJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBnbF9G
cmFnQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgfQorICAgICk7CisKK1Bhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUo
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06Ok9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHNoYWRlckJ1
aWxkZXI7CisjZGVmaW5lIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBcCisgICAg
c2hhZGVyQnVpbGRlci5hcHBlbmQoXAorICAgICAgICAob3B0aW9ucyAmIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpBcHBsaWVyKSA/IEVOQUJMRV9BUFBMSUVSKEFwcGxpZXIpIDogRElTQUJM
RV9BUFBMSUVSKEFwcGxpZXIpKQorCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFRleHR1
cmUpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhSZWN0KTsKKyAgICBTRVRfQVBQTElF
Ul9GUk9NX09QVElPTlMoU29saWRDb2xvcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05T
KE9wYWNpdHkpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhNYXNrKTsKKyAgICBTRVRf
QVBQTElFUl9GUk9NX09QVElPTlMoQW50aWFsaWFzaW5nKTsKKyAgICBTRVRfQVBQTElFUl9GUk9N
X09QVElPTlMoR3JheXNjYWxlRmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMo
U2VwaWFGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTYXR1cmF0ZUZpbHRl
cik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEh1ZVJvdGF0ZUZpbHRlcik7CisgICAg
U0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJyaWdodG5lc3NGaWx0ZXIpOworICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhDb250cmFzdEZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9P
UFRJT05TKEludmVydEZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9wYWNp
dHlGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhCbHVyRmlsdGVyKTsKKyAg
ICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQWxwaGFCbHVyKTsKKyAgICBTRVRfQVBQTElFUl9G
Uk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpOworICAgIFN0cmluZ0J1aWxkZXIgdmVydGV4QnVp
bGRlcjsKKyAgICB2ZXJ0ZXhCdWlsZGVyLmFwcGVuZChzaGFkZXJCdWlsZGVyLnRvU3RyaW5nKCkp
OworICAgIHZlcnRleEJ1aWxkZXIuYXBwZW5kKHZlcnRleFRlbXBsYXRlKTsKKyAgICBzaGFkZXJC
dWlsZGVyLmFwcGVuZChmcmFnbWVudFRlbXBsYXRlKTsKKworICAgIFN0cmluZyB2ZXJ0ZXhTb3Vy
Y2UgPSB2ZXJ0ZXhCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgU3RyaW5nIGZyYWdtZW50U291cmNl
ID0gc2hhZGVyQnVpbGRlci50b1N0cmluZygpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTb3VyY2UsIGZyYWdtZW50
U291cmNlKSk7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wMzdlN2Q2OWQ5YTg3NzRmMWQzMDYxYTc3OTMxYTJjMDNjOWRj
MTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8q
CisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorCisgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtX2gKKyNkZWZp
bmUgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1faAorCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVS
KQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckdMLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNT
dHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyNkZWZpbmUgVEVYTUFQX0RFQ0xB
UkVfVkFSSUFCTEUoQWNjZXNzb3IsIE5hbWUsIFR5cGUpIEdDM0R1aW50IEFjY2Vzc29yIyNMb2Nh
dGlvbigpIHsgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lKE5hbWUpOyByZXR1cm4gZ2V0
TG9jYXRpb24obmFtZSwgVHlwZSk7IH0KKyNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShB
Y2Nlc3NvcikgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsICJ1XyIjQWNjZXNzb3Is
IFVuaWZvcm1WYXJpYWJsZSkKKyNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKEFjY2Vz
c29yKSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgImFfIiNBY2Nlc3NvciwgQXR0
cmliVmFyaWFibGUpCisjZGVmaW5lIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoQWNjZXNzb3IpIFRF
WE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCAic18iI0FjY2Vzc29yLCBVbmlmb3JtVmFy
aWFibGUpCisKK2NsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIDogcHVibGljIFJlZkNv
dW50ZWQ8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHsKK3B1YmxpYzoKKyAgICBlbnVtIE9w
dGlvbiB7CisgICAgICAgIFRleHR1cmUgICAgICAgICAgPSAxTCA8PCAwLAorICAgICAgICBSZWN0
ICAgICAgICAgICAgID0gMUwgPDwgMSwKKyAgICAgICAgU29saWRDb2xvciAgICAgICA9IDFMIDw8
IDIsCisgICAgICAgIE9wYWNpdHkgICAgICAgICAgPSAxTCA8PCAzLAorICAgICAgICBNYXNrICAg
ICAgICAgICAgID0gMUwgPDwgNCwKKyAgICAgICAgQW50aWFsaWFzaW5nICAgICA9IDFMIDw8IDUs
CisgICAgICAgIEdyYXlzY2FsZUZpbHRlciAgPSAxTCA8PCA2LAorICAgICAgICBTZXBpYUZpbHRl
ciAgICAgID0gMUwgPDwgNywKKyAgICAgICAgU2F0dXJhdGVGaWx0ZXIgICA9IDFMIDw8IDgsCisg
ICAgICAgIEh1ZVJvdGF0ZUZpbHRlciAgPSAxTCA8PCA5LAorICAgICAgICBCcmlnaHRuZXNzRmls
dGVyID0gMUwgPDwgMTAsCisgICAgICAgIENvbnRyYXN0RmlsdGVyICAgPSAxTCA8PCAxMSwKKyAg
ICAgICAgSW52ZXJ0RmlsdGVyICAgICA9IDFMIDw8IDEyLAorICAgICAgICBPcGFjaXR5RmlsdGVy
ICAgID0gMUwgPDwgMTMsCisgICAgICAgIEJsdXJGaWx0ZXIgICAgICAgPSAxTCA8PCAxNCwKKyAg
ICAgICAgQWxwaGFCbHVyICAgICAgICA9IDFMIDw8IDE1LAorICAgICAgICBDb250ZW50VGV4dHVy
ZSAgID0gMUwgPDwgMTYKKyAgICB9OworCisgICAgdHlwZWRlZiB1bnNpZ25lZCBPcHRpb25zOwor
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGNyZWF0
ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgT3B0aW9ucyk7CisgICAgdmlydHVhbCB+
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW1JRCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorCisgICAgVEVYTUFQX0RFQ0xBUkVf
QVRUUklCVVRFKHZlcnRleCkKKworICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0obW9kZWxWaWV3
TWF0cml4KQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0ocHJvamVjdGlvbk1hdHJpeCkKKyAg
ICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHRleHR1cmVTcGFjZU1hdHJpeCkKKyAgICBURVhNQVBf
REVDTEFSRV9VTklGT1JNKG9wYWNpdHkpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShjb2xv
cikKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5T
cGFjZSkKKyAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKHNhbXBsZXIpCisgICAgVEVYTUFQX0RF
Q0xBUkVfU0FNUExFUihtYXNrKQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIFRFWE1B
UF9ERUNMQVJFX1VOSUZPUk0oZmlsdGVyQW1vdW50KQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZP
Uk0oZ2F1c3NpYW5LZXJuZWwpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShibHVyUmFkaXVz
KQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oc2hhZG93T2Zmc2V0KQorICAgIFRFWE1BUF9E
RUNMQVJFX1NBTVBMRVIoY29udGVudFRleHR1cmUpCisjZW5kaWYKKworICAgIHZvaWQgc2V0TWF0
cml4KEdDM0R1aW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworCitwcml2YXRlOgor
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+LCBjb25zdCBTdHJpbmcmIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgU3RyaW5nJiBmcmFn
bWVudFNoYWRlclNvdXJjZSk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRlcjsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7CisKKyAgICBlbnVtIFZhcmlh
YmxlVHlwZSB7IFVuaWZvcm1WYXJpYWJsZSwgQXR0cmliVmFyaWFibGUgfTsKKyAgICBHQzNEdWlu
dCBnZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmLCBWYXJpYWJsZVR5cGUpOworCisgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBtX2lkOworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD4gbV92YXJpYWJsZXM7
Cit9OworCit9CisjZW5kaWYKKworI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183545</attachid>
            <date>2013-01-18 14:29:00 -0800</date>
            <delta_ts>2013-01-23 00:02:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105847-20130118232558.patch</filename>
            <type>text/plain</type>
            <size>57780</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzE4NWZjNDQ5ZWQ5N2Iw
YTQ3MDU5MjEyMjZiYTNhYTBlMTg5MjA4MS4uNTllNjQwYTlmN2RhOGQ5ZmU4OTgzOTRmNzQ5MmNl
MjZlZWEwYzFhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTEyLTI4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gUmVuYW1l
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLiogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0u
KgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODQ3
CisKKyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgY29udGFpbnMgdmVyeSBsaXR0
bGUgIm1hbmFnZXIiIGNvZGUuCisgICAgICAgIE1vdmVkIHRoZSBtYXAgb2Ygc2hhZGVycyB0byBU
ZXh0dXJlTWFwcGVyR0wsIGFuZCByZW5hbWVkIHRoZSBmaWxlcyBjb250YWluaW5nCisgICAgICAg
IHRoZSBzaGFkZXIgaW1wbGVtZW50YXRpb24gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3Bw
fGguCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIC0gcmVuYW1lcy9yZWZhY3RvcnMgb25seS4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVGFy
Z2V0LnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdM
RGF0YTo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChTaGFyZWRHTERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFyZWRHTERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpvcHRpb25zRm9yRmlsdGVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmRyYXdGaWx0ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OmJlZ2luQ2xpcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBvc2l0aW5nTG9nRW5hYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OnNldE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6Z2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6cHJvZ3JhbUlEKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpjb250ZXh0KToKKwogMjAxMy0wMS0xOCAgR2VvZmZyZXkgR2FyZW4g
IDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYWsgR0MgbWFwcyBzaG91bGQgYmUgZWFz
aWVyIHRvIHVzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggOWRjZGYwMzhmMjgw
MTM4YmVkNTNkMDcwNTI3NGYzYTk5NGYzNjA3MS4uNzExYTZiYjVmODA1NzY0YzM0MzNmODgzOGYx
NzgwNTdjNTFiYWQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC02NDIwLDgg
KzY0MjAsOCBAQCBpZiBVU0VfVEVYVFVSRV9NQVBQRVJfQ0FJUk8KIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvdGV4bWFwL0N1
c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW1UZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0
Zm9ybUNvbXBpbGVkUHJvZ3JhbS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyVHJhbnNmb3JtLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGE2YmJhMGZl
ZGIzZTIyZjJhZDg5MDA5ODFhMGNjYzUzMzYxZGZiYjQuLmY1MTc5YzYwMTVjMWUwMzBjZTU3NDQx
ZTI2OGNiY2IwOTAwMmI5NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZs
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0zMTcsNyAr
MzE3LDcgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNw
cAogICAgICkKIAogICAgIGlmIChXVEZfVVNFX0VHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGEwZDYwNjFm
MmIzNDJlNzgxYjg5NjI3Mjk5ODBhYzRmNjY2NTg1OTUuLjFiNzNhMGZjNDQ3ZDRkNzBkNzRkMmM5
MWE4M2I3NWIxZDcyYjgwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
KysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtNDA0NSw3ICs0MDQ1LDcgQEAgdXNl
PygzRF9HUkFQSElDUykgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0
YS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5o
IFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtLmgKIAogICAgIFNPVVJDRVMgKz0gXAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAgXApAQCAtNDA1OCw3ICs0MDU4LDcgQEAgdXNlPygz
RF9HUkFQSElDUykgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dDNEUXQuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKIAogICAgIElOQ0xVREVQQVRIICs9
ICQkUFdEL3BsYXRmb3JtL2dyYXBoaWNzL2dwdQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4
IGI4MjkxOGVjMDJhZWJmYzgyMjNmMjM4NDI1NmJlMzljM2Q3OTk0YmUuLmE5MDExODg4YTJiMTk5
YTNkZmZiZGUyOTYyMTRkYWRmZTZlOTc2NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0y
Nyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlv
bnMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0u
aCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL093bkFycmF5UHRyLmg+CkBAIC04NSwxMCArODUsMjIgQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERhdGEoY29udGV4dCkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgdGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI7CisgICAgICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IGdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMg
b3B0aW9ucykKKyAgICAgICAgeworICAgICAgICAgICAgSGFzaE1hcDxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6T3B0aW9ucywgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiA+
OjppdGVyYXRvciBpdCA9IG1fcHJvZ3JhbXMuZmluZChvcHRpb25zKTsKKyAgICAgICAgICAgIGlm
IChpdCAhPSBtX3Byb2dyYW1zLmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBpdC0+dmFs
dWU7CisKKyAgICAgICAgICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJv
Z3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCBvcHRp
b25zKTsKKyAgICAgICAgICAgIG1fcHJvZ3JhbXMuYWRkKG9wdGlvbnMsIHByb2dyYW0pOworICAg
ICAgICAgICAgcmV0dXJuIHByb2dyYW07CisgICAgICAgIH0KKworICAgICAgICBIYXNoTWFwPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zLCBSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0+ID4gbV9wcm9ncmFtczsKKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBtX2NvbnRleHQ7CiAKICAgICAgICAgZXhwbGljaXQgU2hhcmVkR0xEYXRhKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQotICAgICAgICAgICAgOiB0ZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcihjb250ZXh0KQorICAgICAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAgICAg
ewogICAgICAgICAgICAgZ2xDb250ZXh0RGF0YU1hcCgpLmFkZChjb250ZXh0LT5wbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEKCksIHRoaXMpOwogICAgICAgICB9CkBAIC0yOTgsNyArMzEwLDcgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9h
dCB3aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICBpZiAoY2xpcFN0YWNrKCkuY3VycmVudCgpLnNj
aXNzb3JCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6U29saWRDb2xvcik7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmdldFNoYWRlclByb2dyYW0o
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29sb3IpOwogICAgIG1fY29udGV4dDNE
LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAogICAgIGZsb2F0IHIsIGcsIGIs
IGE7CkBAIC0zOTgsMTUgKzQxMCwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSQogICAgICAg
ICAmJiBleHBvc2VkRWRnZXMgPT0gQWxsRWRnZXMKICAgICAgICAgJiYgIW1vZGVsVmlld01hdHJp
eC5tYXBRdWFkKHRhcmdldFJlY3QpLmlzUmVjdGlsaW5lYXIoKTsKIAotICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6VGV4dHVyZTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3B0aW9ucyBv
cHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmU7CiAgICAgaWYgKG1h
c2tlZCkKLSAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFz
azsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6TWFzazsK
ICAgICBpZiAodXNlUmVjdCkKLSAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6UmVjdDsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6UmVjdDsKICAgICBpZiAob3BhY2l0eSA8IDEpCi0gICAgICAgIG9wdGlvbnMgfD0gVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7CisgICAgICAgIG9wdGlvbnMgfD0gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wYWNpdHk7CiAgICAgaWYgKHVzZUFudGlhbGlhc2lu
ZykgewotICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBbnRp
YWxpYXNpbmc7CisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OkFudGlhbGlhc2luZzsKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQW50aWFsaWFzOwogICAgIH0K
IApAQCAtNDE0LDIwICs0MjYsMjAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
KFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEkKICAgICAgICAg
ZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+IHByb2dyYW07Ci0gICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOworICAgIHBy
b2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsK
ICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwg
ZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHks
IG1hc2tUZXh0dXJlKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9y
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIEZsYWdzIGZsYWdzID0gMDsKLSAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlNvbGlkQ29sb3I7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTb2xpZENvbG9y
OwogICAgIGlmICghbWF0cml4Lm1hcFF1YWQocmVjdCkuaXNSZWN0aWxpbmVhcigpKSB7Ci0gICAg
ICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFudGlhbGlhc2luZzsK
KyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6QW50aWFsaWFz
aW5nOwogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZCB8IFNob3VsZEFudGlhbGlhczsKICAg
ICB9CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBk
YXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVy
UHJvZ3JhbShvcHRpb25zKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+
IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25z
KTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAK
ICAgICBmbG9hdCByLCBnLCBiLCBhOwpAQCAtNjkzLDMwICs3MDUsMzAgQEAgdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFy
Z2V0UmVjdCwgY28KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKIAotc3RhdGljIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnNGb3JGaWx0ZXJUeXBlKEZpbHRlck9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQorc3RhdGljIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlvbnNGb3JGaWx0ZXJUeXBlKEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQogewogICAgIHN3
aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAg
ICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpHcmF5c2NhbGVGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpHcmF5c2NhbGVGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgot
ICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2VwaWFGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpTZXBpYUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0g
ICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTYXR1cmF0ZUZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OlNhdHVyYXRlRmlsdGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9U
QVRFOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmUg
fCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SHVlUm90YXRlRmlsdGVyOworICAgICAgICBy
ZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6SHVlUm90YXRlRmlsdGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpJTlZFUlQ6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4
dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpJbnZlcnRGaWx0ZXI7CisgICAgICAg
IHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpJbnZlcnRGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkJSSUdIVE5FU1M6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNzRmlsdGVyOwor
ICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmUgfCBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6QnJpZ2h0bmVzc0ZpbHRlcjsKICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpDb250cmFzdEZp
bHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJl
IHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OkNvbnRyYXN0RmlsdGVyOwogICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0
eUZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0
dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wYWNpdHlGaWx0ZXI7CiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpCbHVyRmlsdGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NI
QURPVzoKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBbHBoYUJs
dXIKLSAgICAgICAgICAgIHwgKHBhc3MgPyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Q29u
dGVudFRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U29saWRDb2xvcjogMCk7
CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6QWxwaGFCbHVyCisg
ICAgICAgICAgICB8IChwYXNzID8gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OkNvbnRlbnRU
ZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29sb3I6IDApOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4g
MDsKQEAgLTkxMCw4ICs5MjIsOCBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1VzaW5nQ3Vz
dG9tRmlsdGVyKEJpdG1hcFRleHR1cmUmIHRhcmdldCwgY29uc3QgQml0bWFwVAogdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBzYW1wbGVyLCBj
b25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9u
JiBmaWx0ZXIsIGludCBwYXNzKQogewogICAgIC8vIEZvciBzdGFuZGFyZCBmaWx0ZXJzLCB3ZSBh
bHdheXMgZHJhdyB0aGUgd2hvbGUgdGV4dHVyZSB3aXRob3V0IHRyYW5zZm9ybWF0aW9ucy4KLSAg
ICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zID0gb3B0aW9uc0Zv
ckZpbHRlclR5cGUoZmlsdGVyLmdldE9wZXJhdGlvblR5cGUoKSwgcGFzcyk7Ci0gICAgUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0
YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7
CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMgb3B0aW9ucyA9IG9wdGlv
bnNGb3JGaWx0ZXJUeXBlKGZpbHRlci5nZXRPcGVyYXRpb25UeXBlKCksIHBhc3MpOworICAgIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRH
TERhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogICAgIEFTU0VSVChwcm9ncmFtKTsK
IAogICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFtKHByb2dyYW0uZ2V0KCksIGZpbHRlciwgcGFzcywg
c2FtcGxlci5jb250ZW50U2l6ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wm
Pihjb250ZW50VGV4dHVyZSkuaWQoKSk7CkBAIC0xMTEwLDcgKzExMjIsNyBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXgsIGNvbgogCiAgICAgZGF0YSgpLmluaXRpYWxpemVTdGVuY2lsKCk7CiAKLSAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U29saWRDb2xvcik7CisgICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmdldFNo
YWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29sb3IpOwogCiAg
ICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogICAgIG1f
Y29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlv
bigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWYzNDNiNGE3ZjRjNGQwMTk3MDNjZDI2NTMwMjI2MWI0
ZGIxYTcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MTIgKzAsMCBAQAotLyoKLSBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0gQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9N
QVBQRVIpCi0jaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5o
IgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgotCi0jZGVmaW5lIFNUUklOR0lGWSguLi4pICNfX1ZBX0FSR1NfXwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wb3NpdGluZ0xvZ0Vu
YWJsZWQoKQotewotI2lmICFMT0dfRElTQUJMRUQKLSAgICByZXR1cm4gTG9nQ29tcG9zaXRpbmcu
c3RhdGUgPT0gV1RGTG9nQ2hhbm5lbE9uOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5k
aWYKLX0KLQotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgdmVydGV4LCBjb25zdCBTdHJpbmcmIGZyYWdtZW50KQotICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCi17Ci0gICAgbV92ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7Ci0gICAgbV9mcmFnbWVudFNoYWRlciA9IG1f
Y29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIp
OwotICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fdmVydGV4U2hhZGVyLCB2ZXJ0ZXgpOwot
ICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG1fZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50KTsK
LSAgICBtX2lkID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7Ci0gICAgbV9jb250ZXh0LT5j
b21waWxlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFk
ZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV9pZCwg
bV92ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG1faWQsIG1fZnJh
Z21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0obV9pZCk7Ci0KLSAgICBp
ZiAoIWNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGxvZyA9IG1fY29udGV4dC0+Z2V0U2hhZGVySW5m
b0xvZyhtX3ZlcnRleFNoYWRlcik7Ci0gICAgTE9HKENvbXBvc2l0aW5nLCAiVmVydGV4IHNoYWRl
ciBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7Ci0gICAgbG9nID0gbV9jb250ZXh0LT5n
ZXRTaGFkZXJJbmZvTG9nKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIExPRyhDb21wb3NpdGluZywg
IkZyYWdtZW50IHNoYWRlciBsb2c6ICVzXG4iLCBsb2cudXRmOCgpLmRhdGEoKSk7Ci0gICAgbG9n
ID0gbV9jb250ZXh0LT5nZXRQcm9ncmFtSW5mb0xvZyhtX2lkKTsKLSAgICBMT0coQ29tcG9zaXRp
bmcsICJQcm9ncmFtIGxvZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6c2V0TWF0cml4KEdDM0R1aW50IGxvY2F0aW9uLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQotewotICAgIEdDM0RmbG9hdCBtYXRy
aXhBc0Zsb2F0c1tdID0gewotICAgICAgICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0
cml4Lm0xMygpLCBtYXRyaXgubTE0KCksCi0gICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0y
MigpLCBtYXRyaXgubTIzKCksIG1hdHJpeC5tMjQoKSwKLSAgICAgICAgbWF0cml4Lm0zMSgpLCBt
YXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgpLAotICAgICAgICBtYXRyaXgu
bTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKLSAgICB9Owot
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCAxLCBmYWxzZSwgbWF0
cml4QXNGbG9hdHMpOwotfQotCi1HQzNEdWludCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
Z2V0TG9jYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWYXJpYWJsZVR5cGUgdHlwZSkK
LXsKLSAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgR0MzRHVpbnQ+OjppdGVyYXRvciBpdCA9IG1f
dmFyaWFibGVzLmZpbmQobmFtZSk7Ci0gICAgaWYgKGl0ICE9IG1fdmFyaWFibGVzLmVuZCgpKQot
ICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwotCi0gICAgR0MzRHVpbnQgbG9jYXRpb24gPSAwOwot
ICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgVW5pZm9ybVZhcmlhYmxlOgotICAgICAgICBs
b2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEF0dHJpYlZhcmlhYmxlOgotICAgICAgICBsb2NhdGlvbiA9
IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24obV9pZCwgbmFtZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBtX3ZhcmlhYmxlcy5hZGQobmFtZSwgbG9jYXRpb24pOwotICAg
IHJldHVybiBsb2NhdGlvbjsKLX0KLQotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCi17Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
SUQgPSBtX2lkOwotICAgIGlmICghcHJvZ3JhbUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2NvbnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBt
X2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5k
ZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQt
PmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVBy
b2dyYW0ocHJvZ3JhbUlEKTsKLX0KLQotI2RlZmluZSBHTFNMX0RJUkVDVElWRSguLi4pICIjIiNf
X1ZBX0FSR1NfXyJcbiIKLXN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhUZW1wbGF0ZSA9Ci0gICAg
U1RSSU5HSUZZKAotICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKLSAgICAgICAgdW5p
Zm9ybSBtYXQ0IHVfbW9kZWxWaWV3TWF0cml4OwotICAgICAgICB1bmlmb3JtIG1hdDQgdV9wcm9q
ZWN0aW9uTWF0cml4OwotICAgICAgICB1bmlmb3JtIG1hdDQgdV90ZXh0dXJlU3BhY2VNYXRyaXg7
Ci0KLSAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgIHZhcnlpbmcgdmVj
MiB2X21hc2tUZXhDb29yZDsKLSAgICAgICAgdmFyeWluZyBmbG9hdCB2X2FudGlhbGlhczsKLQot
ICAgICAgICB2b2lkIG5vb3AoaW5vdXQgdmVjMiBkdW1teVBhcmFtZXRlcikgeyB9Ci0KLSAgICAg
ICAgdmVjNCB0b1ZpZXdwb3J0U3BhY2UodmVjMiBwb3MpIHsgcmV0dXJuIHZlYzQocG9zLCAwLiwg
MS4pICogdV9tb2RlbFZpZXdNYXRyaXg7IH0KLQotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJl
bGllcyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHdlIGdldCBlZGdlIHRyaWFuZ2xlcyB3aXRoIGNv
bnRyb2wgcG9pbnRzLAotICAgICAgICAvLyBhIGNvbnRyb2wgcG9pbnQgYmVpbmcgdGhlIG5lYXJl
c3QgcG9pbnQgdG8gdGhlIGNvb3JkaW5hdGUgdGhhdCBpcyBvbiB0aGUgZWRnZS4KLSAgICAgICAg
dm9pZCBhcHBseUFudGlhbGlhc2luZyhpbm91dCB2ZWMyIHBvc2l0aW9uKQotICAgICAgICB7Ci0g
ICAgICAgICAgICAvLyBXZSBjb3VudCBvbiB0aGUgZmFjdCB0aGF0IHF1YWQgcGFzc2VkIGluIGlz
IGFsd2F5cyBhIHVuaXQgcmVjdCwKLSAgICAgICAgICAgIC8vIGFuZCB0aGUgdHJhbnNmb3JtYXRp
b24gbWF0cml4IGFwcGxpZXMgdGhlIHJlYWwgcmVjdC4KLSAgICAgICAgICAgIGNvbnN0IHZlYzIg
Y2VudGVyID0gdmVjMigwLjUsIDAuNSk7Ci0gICAgICAgICAgICBjb25zdCBmbG9hdCBhbnRpYWxp
YXNJbmZsYXRpb25EaXN0YW5jZSA9IDEuOwotCi0gICAgICAgICAgICAvLyBXZSBwYXNzIHRoZSBj
b250cm9sIHBvaW50IGFzIHRoZSB6dyBjb29yZGluYXRlcyBvZiB0aGUgdmVydGV4LgotICAgICAg
ICAgICAgLy8gVGhlIGNvbnRyb2wgcG9pbnQgaXMgdGhlIHBvaW50IG9uIHRoZSBlZGdlIGNsb3Nl
c3QgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gICAgICAgICAgICAvLyBUaGUgY29udHJvbCBw
b2ludCBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIGFudGlhbGlhcyB2YWx1ZS4KLSAgICAgICAgICAg
IHZlYzIgY29udHJvbFBvaW50ID0gYV92ZXJ0ZXguenc7Ci0KLSAgICAgICAgICAgIC8vIEZpcnN0
IHdlIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgaW4gdmlld3BvcnQgc3BhY2UuCi0gICAgICAgICAg
ICB2ZWM0IGNlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHRvVmlld3BvcnRTcGFjZShjZW50
ZXIpOwotICAgICAgICAgICAgdmVjNCBjb250cm9sUG9pbnRJblZpZXdwb3J0Q29vcmRpbmF0ZXMg
PSB0b1ZpZXdwb3J0U3BhY2UoY29udHJvbFBvaW50KTsKLSAgICAgICAgICAgIGZsb2F0IHZpZXdw
b3J0U3BhY2VEaXN0YW5jZSA9IGRpc3RhbmNlKGNlbnRlckluVmlld3BvcnRDb29yZGluYXRlcywg
Y29udHJvbFBvaW50SW5WaWV3cG9ydENvb3JkaW5hdGVzKTsKLQotICAgICAgICAgICAgLy8gV2Ug
YWRkIHRoZSBpbmZsYXRpb24gZGlzdGFuY2UgdG8gdGhlIGNvbXB1dGVkIGRpc3RhbmNlLCBhbmQg
Y29tcHV0ZSB0aGUgcmF0aW8uCi0gICAgICAgICAgICBmbG9hdCBpbmZsYXRpb25SYXRpbyA9ICh2
aWV3cG9ydFNwYWNlRGlzdGFuY2UgKyBhbnRpYWxpYXNJbmZsYXRpb25EaXN0YW5jZSkgLyB2aWV3
cG9ydFNwYWNlRGlzdGFuY2U7Ci0KLSAgICAgICAgICAgIC8vIHZfYW50aWFsaWFzIG5lZWRzIHRv
IGJlIDAgZm9yIHRoZSBvdXRlciBlZGdlIGFuZCAxLiBmb3IgdGhlIGlubmVyIGVkZ2UuCi0gICAg
ICAgICAgICAvLyBTaW5jZSB0aGUgY29udHJvbFBvaW50IGlzIGVxdWFsIHRvIHRoZSBwb3NpdGlv
biBpbiB0aGUgZWRnZSB2ZXJ0aWNlcywgdGhlIHZhbHVlIGlzIGFsd2F5cyAwIGZvciB0aG9zZS4K
LSAgICAgICAgICAgIC8vIEZvciB0aGUgY2VudGVyIHBvaW50LCB0aGUgZGlzdGFuY2UgaXMgYWx3
YXlzIDAuNSwgc28gd2Ugbm9ybWFsaXplIHRvIDEuIGJ5IG11bHRpcGx5aW5nIGJ5IDIuCi0gICAg
ICAgICAgICAvLyBCeSBtdWx0cGx5aW5nIGJ5IGluZmxhdGlvblJhdGlvIGFuZCBkaXZpZGluZyBi
eSAoaW5mbGF0aW9uUmF0aW8gLSAxKSwKLSAgICAgICAgICAgIC8vIFdlIG1ha2Ugc3VyZSB0aGF0
IHRoZSB2YXJ5aW5nIGludGVycG9sYXRlcyBiZXR3ZWVuIDAgKG91dGVyIGVkZ2UpLCAxIChpbm5l
ciBlZGdlKSBhbmQgbiA+IDEgKGNlbnRlcikuCi0gICAgICAgICAgICB2X2FudGlhbGlhcyA9IGRp
c3RhbmNlKGNvbnRyb2xQb2ludCwgcG9zaXRpb24pICogMi4gKiBpbmZsYXRpb25SYXRpbyAvIChp
bmZsYXRpb25SYXRpbyAtIDEuKTsKLQotICAgICAgICAgICAgLy8gTm93IGluZmxhdGUgdGhlIGFj
dHVhbCBwb3NpdGlvbi4gQnkgdXNpbmcgdGhpcyBmb3JtdWxhIGluc3RlYWQgb2YgaW5mbGF0aW5n
IHBvc2l0aW9uIGRpcmVjdGx5LAotICAgICAgICAgICAgLy8gd2UgZW5zdXJlIHRoYXQgdGhlIGNl
bnRlciB2ZXJ0ZXggaXMgbmV2ZXIgaW5mbGF0ZWQuCi0gICAgICAgICAgICBwb3NpdGlvbiA9IGNl
bnRlciArIChwb3NpdGlvbiAtIGNlbnRlcikgKiBpbmZsYXRpb25SYXRpbzsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICB2ZWMyIHBv
c2l0aW9uID0gYV92ZXJ0ZXgueHk7Ci0gICAgICAgICAgICBhcHBseUFudGlhbGlhc2luZ0lmTmVl
ZGVkKHBvc2l0aW9uKTsKLQotICAgICAgICAgICAgLy8gVGhlIHRleHR1cmUgcG9zaXRpb24gbmVl
ZHMgdG8gYmUgY2xhbXBlZCB0byAwLi4xIGJlZm9yZSB0aGUgdGV4dHVyZSBtYXRyaXggaXMgYXBw
bGllZC4KLSAgICAgICAgICAgIHZlYzQgY2xhbXBlZFBvc2l0aW9uID0gY2xhbXAodmVjNChwb3Np
dGlvbiwgMC4sIDEuKSwgMC4sIDEuKTsKLSAgICAgICAgICAgIHZfdGV4Q29vcmQgPSAodV90ZXh0
dXJlU3BhY2VNYXRyaXggKiBjbGFtcGVkUG9zaXRpb24pLnh5OwotCi0gICAgICAgICAgICB2X21h
c2tUZXhDb29yZCA9IHBvc2l0aW9uOwotICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2pl
Y3Rpb25NYXRyaXggKiB1X21vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDAuLCAxLik7
Ci0gICAgICAgIH0KLSAgICApOwotCi0jZGVmaW5lIFJFQ1RfVEVYVFVSRV9ESVJFQ1RJVkUgXAot
ICAgIEdMU0xfRElSRUNUSVZFKGlmZGVmIEVOQUJMRV9SZWN0KSBcCi0gICAgICAgIEdMU0xfRElS
RUNUSVZFKGRlZmluZSBTYW1wbGVyVHlwZSBzYW1wbGVyMkRSZWN0KSBcCi0gICAgICAgIEdMU0xf
RElSRUNUSVZFKGRlZmluZSBTYW1wbGVyRnVuY3Rpb24gdGV4dHVyZTJEUmVjdCkgXAotICAgIEdM
U0xfRElSRUNUSVZFKGVsc2UpIFwKLSAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNhbXBs
ZXJUeXBlIHNhbXBsZXIyRCkgXAotICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxl
ckZ1bmN0aW9uIHRleHR1cmUyRCkgXAotICAgIEdMU0xfRElSRUNUSVZFKGVuZGlmKQotCi0jZGVm
aW5lIEVOQUJMRV9BUFBMSUVSKE5hbWUpICIjZGVmaW5lIEVOQUJMRV8iI05hbWUiXG4jZGVmaW5l
IGFwcGx5IiNOYW1lIklmTmVlZGVkIGFwcGx5IiNOYW1lIlxuIgotI2RlZmluZSBESVNBQkxFX0FQ
UExJRVIoTmFtZSkgIiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgbm9vcFxuIgotI2RlZmlu
ZSBCTFVSX0NPTlNUQU5UUyBcCi0gICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIEdBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRIIDExKSBcCi0gICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIEdBVVNTSUFO
X0tFUk5FTF9TVEVQIDAuMikKLQotCi1zdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0
ZSA9Ci0gICAgUkVDVF9URVhUVVJFX0RJUkVDVElWRQotICAgIEJMVVJfQ09OU1RBTlRTCi0gICAg
U1RSSU5HSUZZKAotICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgdW5p
Zm9ybSBTYW1wbGVyVHlwZSBzX3NhbXBsZXI7Ci0gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNf
bWFzazsKLSAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19jb250ZW50VGV4dHVyZTsKLSAgICAg
ICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcgZmxvYXQgdl9hbnRp
YWxpYXM7Ci0gICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwotICAgICAgICB2YXJ5aW5n
IHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgIHVuaWZvcm0gZmxvYXQgdV9maWx0ZXJBbW91
bnQ7Ci0gICAgICAgIHVuaWZvcm0gdmVjMiB1X2JsdXJSYWRpdXM7Ci0gICAgICAgIHVuaWZvcm0g
dmVjMiB1X3NoYWRvd09mZnNldDsKLSAgICAgICAgdW5pZm9ybSB2ZWM0IHVfY29sb3I7Ci0gICAg
ICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9X
SURUSF07Ci0KLSAgICAgICAgdm9pZCBub29wKGlub3V0IHZlYzQgZHVtbXlQYXJhbWV0ZXIpIHsg
fQotCi0gICAgICAgIGZsb2F0IGFudGlhbGlhcygpIHsgcmV0dXJuIHNtb290aHN0ZXAodl9hbnRp
YWxpYXMsIDAuLCAxLik7IH0KLQotICAgICAgICB2b2lkIGFwcGx5VGV4dHVyZShpbm91dCB2ZWM0
IGNvbG9yKSB7IGNvbG9yID0gU2FtcGxlckZ1bmN0aW9uKHNfc2FtcGxlciwgdl90ZXhDb29yZCk7
IH0KLSAgICAgICAgdm9pZCBhcHBseU9wYWNpdHkoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAq
PSB1X29wYWNpdHk7IH0KLSAgICAgICAgdm9pZCBhcHBseUFudGlhbGlhc2luZyhpbm91dCB2ZWM0
IGNvbG9yKSB7IGNvbG9yICo9IGFudGlhbGlhcygpOyB9Ci0gICAgICAgIHZvaWQgYXBwbHlNYXNr
KGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdGV4dHVyZTJEKHNfbWFzaywgdl9tYXNrVGV4
Q29vcmQpLmE7IH0KLQotICAgICAgICB2b2lkIGFwcGx5R3JheXNjYWxlRmlsdGVyKGlub3V0IHZl
YzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVf
ZmlsdGVyQW1vdW50OwotICAgICAgICAgICAgY29sb3IgPSB2ZWM0KCgwLjIxMjYgKyAwLjc4NzQg
KiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQpICogY29sb3Iu
ZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAg
ICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyICsgMC4yODQ4
ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9y
LmIsCi0gICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5y
ICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiArIDAuOTI3
OCAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgIGNvbG9yLmEpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBhcHBseVNlcGlhRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfZmlsdGVyQW1vdW50
OwotICAgICAgICAgICAgY29sb3IgPSB2ZWM0KCgwLjM5MyArIDAuNjA3ICogYW1vdW50KSAqIGNv
bG9yLnIgKyAoMC43NjkgLSAwLjc2OSAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTg5IC0gMC4x
ODkgKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAoMC4zNDkgLSAwLjM0OSAq
IGFtb3VudCkgKiBjb2xvci5yICsgKDAuNjg2ICsgMC4zMTQgKiBhbW91bnQpICogY29sb3IuZyAr
ICgwLjE2OCAtIDAuMTY4ICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgKDAu
MjcyIC0gMC4yNzIgKiBhbW91bnQpICogY29sb3IuciArICgwLjUzNCAtIDAuNTM0ICogYW1vdW50
KSAqIGNvbG9yLmcgKyAoMC4xMzEgKyAwLjg2OSAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAg
ICAgICAgICAgIGNvbG9yLmEpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhcHBseVNhdHVy
YXRlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbG9y
ID0gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLnIgKyAoMC43
MTUgLSAwLjcxNSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAq
IHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4y
MTMgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1ICsgMC4yODUgKiB1X2ZpbHRl
ckFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2ZpbHRlckFtb3VudCkgKiBj
b2xvci5iLAotICAgICAgICAgICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9maWx0ZXJBbW91bnQp
ICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuZyAr
ICgwLjA3MiArIDAuOTI4ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAg
ICAgICBjb2xvci5hKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYXBwbHlIdWVSb3RhdGVG
aWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKLSAgICAgICAgewotICAgICAgICAgICAgZmxvYXQgcGkg
PSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2OwotICAgICAgICAgICAgZmxvYXQgYyA9IGNvcyh1X2Zp
bHRlckFtb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAgICAgICAgZmxvYXQgcyA9IHNpbih1X2Zp
bHRlckFtb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGNvbG9y
LnIgKiAoMC4yMTMgKyBjICogMC43ODcgLSBzICogMC4yMTMpICsgY29sb3IuZyAqICgwLjcxNSAt
IGMgKiAwLjcxNSAtIHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcyICsg
cyAqIDAuOTI4KSwKLSAgICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEz
ICsgcyAqIDAuMTQzKSArIGNvbG9yLmcgKiAoMC43MTUgKyBjICogMC4yODUgKyBzICogMC4xNDAp
ICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiAtIHMgKiAwLjI4MyksCi0gICAgICAgICAg
ICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyAtIHMgKiAwLjc4NykgKyAgY29sb3Iu
ZyAqICgwLjcxNSAtIGMgKiAwLjcxNSArIHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyICsg
YyAqIDAuOTI4ICsgcyAqIDAuMDcyKSwKLSAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZsb2F0IGludmVydChmbG9hdCBuKSB7IHJldHVybiAoMS4wIC0gbikg
KiB1X2ZpbHRlckFtb3VudCArIG4gKiAoMS4wIC0gdV9maWx0ZXJBbW91bnQpOyB9Ci0gICAgICAg
IHZvaWQgYXBwbHlJbnZlcnRGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKLSAgICAgICAgewotICAg
ICAgICAgICAgY29sb3IgPSB2ZWM0KGludmVydChjb2xvci5yKSwgaW52ZXJ0KGNvbG9yLmcpLCBp
bnZlcnQoY29sb3IuYiksIGNvbG9yLmEpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhcHBs
eUJyaWdodG5lc3NGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKLSAgICAgICAgewotICAgICAgICAg
ICAgY29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqICgxLjAgKyB1X2ZpbHRlckFtb3VudCksIGNvbG9y
LmEpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgY29udHJhc3QoZmxvYXQgbikgeyByZXR1
cm4gKG4gLSAwLjUpICogdV9maWx0ZXJBbW91bnQgKyAwLjU7IH0KLSAgICAgICAgdm9pZCBhcHBs
eUNvbnRyYXN0RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvbG9yID0gdmVjNChjb250cmFzdChjb2xvci5yKSwgY29udHJhc3QoY29sb3IuZyksIGNvbnRy
YXN0KGNvbG9yLmIpLCBjb2xvci5hKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYXBwbHlP
cGFjaXR5RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bG9yID0gdmVjNChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hICogdV9maWx0ZXJB
bW91bnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmVjNCBzYW1wbGVDb2xvckF0UmFkaXVzKGZs
b2F0IHJhZGl1cykKLSAgICAgICAgewotICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29v
cmQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7Ci0gICAgICAgICAgICByZXR1cm4gU2FtcGxlckZ1
bmN0aW9uKHNfc2FtcGxlciwgY29vcmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkg
PiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZsb2F0IHNhbXBsZUFscGhhQXRSYWRpdXMoZmxvYXQgcmFkaXVzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAtIHVfc2hhZG93T2Zmc2V0ICsgcmFk
aXVzICogdV9ibHVyUmFkaXVzOwotICAgICAgICAgICAgcmV0dXJuIFNhbXBsZXJGdW5jdGlvbihz
X3NhbXBsZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAm
JiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgYXBwbHlCbHVyRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHZlYzQgdG90YWwgPSBzYW1wbGVDb2xvckF0UmFkaXVzKDAuKSAqIHVfZ2F1c3NpYW5LZXJu
ZWxbMF07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9I
QUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVDb2xvckF0
UmFkaXVzKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5l
bFtpXTsKLSAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVDb2xvckF0UmFkaXVzKGZsb2F0
KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb2xvciA9IHRvdGFsOwotICAgICAgICB9Ci0K
LSAgICAgICAgdm9pZCBhcHBseUFscGhhQmx1cihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7
Ci0gICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhQXRSYWRpdXMoMC4pICogdV9n
YXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJ
QU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewotICAgICAgICAgICAgICAgIHRvdGFsICs9IHNh
bXBsZUFscGhhQXRSYWRpdXMoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dh
dXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhQXRS
YWRpdXMoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5L
ZXJuZWxbaV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbG9yICo9IHRvdGFsOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdmVjNCBzb3VyY2VPdmVyKHZlYzQgc3JjLCB2ZWM0IGRzdCkg
eyByZXR1cm4gc3JjICsgZHN0ICogKDEuIC0gZHN0LmEpOyB9Ci0KLSAgICAgICAgdm9pZCBhcHBs
eUNvbnRlbnRUZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHZlYzQgY29udGVudENvbG9yID0gdGV4dHVyZTJEKHNfY29udGVudFRleHR1cmUsIHZfdGV4Q29v
cmQpOwotICAgICAgICAgICAgY29sb3IgPSBzb3VyY2VPdmVyKGNvbnRlbnRDb2xvciwgY29sb3Ip
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhcHBseVNvbGlkQ29sb3IoaW5vdXQgdmVjNCBj
b2xvcikgeyBjb2xvciAqPSB1X2NvbG9yOyB9Ci0KLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHZlYzQgY29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKTsK
LSAgICAgICAgICAgIGFwcGx5VGV4dHVyZUlmTmVlZGVkKGNvbG9yKTsKLSAgICAgICAgICAgIGFw
cGx5U29saWRDb2xvcklmTmVlZGVkKGNvbG9yKTsKLSAgICAgICAgICAgIGFwcGx5QW50aWFsaWFz
aW5nSWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAgYXBwbHlNYXNrSWZOZWVkZWQoY29sb3Ip
OwotICAgICAgICAgICAgYXBwbHlPcGFjaXR5SWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAg
YXBwbHlHcmF5c2NhbGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7Ci0gICAgICAgICAgICBhcHBseVNl
cGlhRmlsdGVySWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAgYXBwbHlTYXR1cmF0ZUZpbHRl
cklmTmVlZGVkKGNvbG9yKTsKLSAgICAgICAgICAgIGFwcGx5SHVlUm90YXRlRmlsdGVySWZOZWVk
ZWQoY29sb3IpOwotICAgICAgICAgICAgYXBwbHlJbnZlcnRGaWx0ZXJJZk5lZWRlZChjb2xvcik7
Ci0gICAgICAgICAgICBhcHBseUJyaWdodG5lc3NGaWx0ZXJJZk5lZWRlZChjb2xvcik7Ci0gICAg
ICAgICAgICBhcHBseUNvbnRyYXN0RmlsdGVySWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAg
YXBwbHlPcGFjaXR5RmlsdGVySWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAgYXBwbHlCbHVy
RmlsdGVySWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAgYXBwbHlBbHBoYUJsdXJJZk5lZWRl
ZChjb2xvcik7Ci0gICAgICAgICAgICBhcHBseUNvbnRlbnRUZXh0dXJlSWZOZWVkZWQoY29sb3Ip
OwotICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7Ci0gICAgICAgIH0KLSAgICApOwot
Ci0KLXN0YXRpYyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
Ok9wdGlvbnMgb3B0aW9ucywgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRT
b3VyY2UpCi17Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHNoYWRlckJ1aWxkZXI7Ci0jZGVmaW5lIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBcCi0gICAgc2hhZGVyQnVpbGRlci5hcHBl
bmQoXAotICAgICAgICAob3B0aW9ucyAmIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBcHBs
aWVyKSA/IEVOQUJMRV9BUFBMSUVSKEFwcGxpZXIpIDogRElTQUJMRV9BUFBMSUVSKEFwcGxpZXIp
KQotCi0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFRleHR1cmUpOwotICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhSZWN0KTsKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU29s
aWRDb2xvcik7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9wYWNpdHkpOwotICAgIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhNYXNrKTsKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElP
TlMoQW50aWFsaWFzaW5nKTsKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoR3JheXNjYWxl
RmlsdGVyKTsKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2VwaWFGaWx0ZXIpOwotICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTYXR1cmF0ZUZpbHRlcik7Ci0gICAgU0VUX0FQUExJ
RVJfRlJPTV9PUFRJT05TKEh1ZVJvdGF0ZUZpbHRlcik7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9P
UFRJT05TKEJyaWdodG5lc3NGaWx0ZXIpOwotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhD
b250cmFzdEZpbHRlcik7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEludmVydEZpbHRl
cik7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9wYWNpdHlGaWx0ZXIpOwotICAgIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhCbHVyRmlsdGVyKTsKLSAgICBTRVRfQVBQTElFUl9GUk9N
X09QVElPTlMoQWxwaGFCbHVyKTsKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udGVu
dFRleHR1cmUpOwotICAgIFN0cmluZ0J1aWxkZXIgdmVydGV4QnVpbGRlcjsKLSAgICB2ZXJ0ZXhC
dWlsZGVyLmFwcGVuZChzaGFkZXJCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIHZlcnRleEJ1aWxk
ZXIuYXBwZW5kKHZlcnRleFRlbXBsYXRlKTsKLSAgICBzaGFkZXJCdWlsZGVyLmFwcGVuZChmcmFn
bWVudFRlbXBsYXRlKTsKLSAgICB2ZXJ0ZXhTb3VyY2UgPSB2ZXJ0ZXhCdWlsZGVyLnRvU3RyaW5n
KCk7Ci0gICAgZnJhZ21lbnRTb3VyY2UgPSBzaGFkZXJCdWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0K
LVRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotewot
fQotCi1UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyKCkKLXsKLX0KLQotUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0oT3B0aW9ucyBvcHRpb25z
KQotewotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOjppdGVyYXRvciBpdCA9IG1f
cHJvZ3JhbXMuZmluZChvcHRpb25zKTsKLSAgICBpZiAoaXQgIT0gbV9wcm9ncmFtcy5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKLQotICAgIFN0cmluZyB2ZXJ0ZXhTaGFkZXI7Ci0g
ICAgU3RyaW5nIGZyYWdtZW50U2hhZGVyOwotICAgIGdldFNoYWRlclNwZWMob3B0aW9ucywgdmVy
dGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZSht
X2NvbnRleHQsIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fcHJvZ3JhbXMu
YWRkKG9wdGlvbnMsIHByb2dyYW0pOwotICAgIHJldHVybiBwcm9ncmFtOwotfQotfTsKLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmZjE3NDk4M2RkYzVlNjY0MTc5OGQ4OTlkNjljNGRlZWZhZTU2ZmY2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAy
MDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
Ci0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZu
ZGVmIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gKLSNkZWZpbmUgVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXJfaAotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLSNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNz
b3IsIE5hbWUsIFR5cGUpIEdDM0R1aW50IEFjY2Vzc29yIyNMb2NhdGlvbigpIHsgc3RhdGljIGNv
bnN0IEF0b21pY1N0cmluZyBuYW1lKE5hbWUpOyByZXR1cm4gZ2V0TG9jYXRpb24obmFtZSwgVHlw
ZSk7IH0KLSNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShBY2Nlc3NvcikgVEVYTUFQX0RF
Q0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsICJ1XyIjQWNjZXNzb3IsIFVuaWZvcm1WYXJpYWJsZSkK
LSNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKEFjY2Vzc29yKSBURVhNQVBfREVDTEFS
RV9WQVJJQUJMRShBY2Nlc3NvciwgImFfIiNBY2Nlc3NvciwgQXR0cmliVmFyaWFibGUpCi0jZGVm
aW5lIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoQWNjZXNzb3IpIFRFWE1BUF9ERUNMQVJFX1ZBUklB
QkxFKEFjY2Vzc29yLCAic18iI0FjY2Vzc29yLCBVbmlmb3JtVmFyaWFibGUpCi0KLWNsYXNzIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0+IHsKLXB1YmxpYzoKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1J
RCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXgsIGNvbnN0IFN0cmluZyYgZnJhZ21l
bnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleCwgZnJhZ21lbnQpKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwotCi0gICAgVEVYTUFQX0RFQ0xBUkVf
QVRUUklCVVRFKHZlcnRleCkKLQotICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0obW9kZWxWaWV3
TWF0cml4KQotICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0ocHJvamVjdGlvbk1hdHJpeCkKLSAg
ICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHRleHR1cmVTcGFjZU1hdHJpeCkKLSAgICBURVhNQVBf
REVDTEFSRV9VTklGT1JNKG9wYWNpdHkpCi0gICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShjb2xv
cikKLSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5T
cGFjZSkKLSAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKHNhbXBsZXIpCi0gICAgVEVYTUFQX0RF
Q0xBUkVfU0FNUExFUihtYXNrKQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIFRFWE1B
UF9ERUNMQVJFX1VOSUZPUk0oZmlsdGVyQW1vdW50KQotICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZP
Uk0oZ2F1c3NpYW5LZXJuZWwpCi0gICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShibHVyUmFkaXVz
KQotICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oc2hhZG93T2Zmc2V0KQotICAgIFRFWE1BUF9E
RUNMQVJFX1NBTVBMRVIoY29udGVudFRleHR1cmUpCi0jZW5kaWYKLQotICAgIHZvaWQgc2V0TWF0
cml4KEdDM0R1aW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotCi1wcml2YXRlOgot
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+LCBjb25zdCBTdHJpbmcmIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgU3RyaW5nJiBmcmFn
bWVudFNoYWRlclNvdXJjZSk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRlcjsK
LSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7Ci0KLSAgICBlbnVtIFZhcmlh
YmxlVHlwZSB7IFVuaWZvcm1WYXJpYWJsZSwgQXR0cmliVmFyaWFibGUgfTsKLSAgICBHQzNEdWlu
dCBnZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmLCBWYXJpYWJsZVR5cGUpOwotCi0gICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7Ci0gICAgUGxhdGZvcm0zRE9iamVj
dCBtX2lkOwotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD4gbV92YXJpYWJsZXM7
Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSBPcHRpb24gewotICAgICAgICBUZXh0dXJlICAgICAgICAgID0gMUwgPDwgMCwKLSAgICAg
ICAgUmVjdCAgICAgICAgICAgICA9IDFMIDw8IDEsCi0gICAgICAgIFNvbGlkQ29sb3IgICAgICAg
PSAxTCA8PCAyLAotICAgICAgICBPcGFjaXR5ICAgICAgICAgID0gMUwgPDwgMywKLSAgICAgICAg
TWFzayAgICAgICAgICAgICA9IDFMIDw8IDQsCi0gICAgICAgIEFudGlhbGlhc2luZyAgICAgPSAx
TCA8PCA1LAotICAgICAgICBHcmF5c2NhbGVGaWx0ZXIgID0gMUwgPDwgNiwKLSAgICAgICAgU2Vw
aWFGaWx0ZXIgICAgICA9IDFMIDw8IDcsCi0gICAgICAgIFNhdHVyYXRlRmlsdGVyICAgPSAxTCA8
PCA4LAotICAgICAgICBIdWVSb3RhdGVGaWx0ZXIgID0gMUwgPDwgOSwKLSAgICAgICAgQnJpZ2h0
bmVzc0ZpbHRlciA9IDFMIDw8IDEwLAotICAgICAgICBDb250cmFzdEZpbHRlciAgID0gMUwgPDwg
MTEsCi0gICAgICAgIEludmVydEZpbHRlciAgICAgPSAxTCA8PCAxMiwKLSAgICAgICAgT3BhY2l0
eUZpbHRlciAgICA9IDFMIDw8IDEzLAotICAgICAgICBCbHVyRmlsdGVyICAgICAgID0gMUwgPDwg
MTQsCi0gICAgICAgIEFscGhhQmx1ciAgICAgICAgPSAxTCA8PCAxNSwKLSAgICAgICAgQ29udGVu
dFRleHR1cmUgICA9IDFMIDw8IDE2Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgdW5zaWduZWQgT3B0
aW9uczsKLQotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkgeyB9Ci0gICAgZXhwbGlj
aXQgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqKTsKLSAgICB2
aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOwotCi0gICAgUGFzc1JlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gZ2V0U2hhZGVyUHJvZ3JhbShPcHRpb25zKTsKLQot
cHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8T3B0aW9ucywgUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwotICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fcHJvZ3JhbXM7Ci0gICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7Ci19OwotCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8vIFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMGMyYjAyYzJlNDczMjkyNzUzY2MzM2YzNzI1NGIw
N2M2ODk3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3BwCkBAIC0wLDAgKzEsMzkw
IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNkZWZpbmUgU1RSSU5HSUZZKC4uLikg
I19fVkFfQVJHU19fCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBib29s
IGNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpCit7CisjaWYgIUxPR19ESVNBQkxFRAorICAgIHJldHVy
biBMb2dDb21wb3NpdGluZy5zdGF0ZSA9PSBXVEZMb2dDaGFubmVsT247CisjZWxzZQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXgsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQpCisgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKK3sKKyAgICBtX3ZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+
Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICBtX2Zy
YWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQUdNRU5UX1NIQURFUik7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UobV92ZXJ0ZXhT
aGFkZXIsIHZlcnRleCk7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UobV9mcmFnbWVudFNo
YWRlciwgZnJhZ21lbnQpOworICAgIG1faWQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsK
KyAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29u
dGV4dC0+Y29tcGlsZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmF0
dGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5hdHRhY2hT
aGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5saW5rUHJvZ3Jh
bShtX2lkKTsKKworICAgIGlmICghY29tcG9zaXRpbmdMb2dFbmFibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PX0VSUk9SKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbG9nID0gbV9jb250
ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG1fdmVydGV4U2hhZGVyKTsKKyAgICBMT0coQ29tcG9zaXRp
bmcsICJWZXJ0ZXggc2hhZGVyIGxvZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgpKTsKKyAgICBs
b2cgPSBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cobV9mcmFnbWVudFNoYWRlcik7CisgICAg
TE9HKENvbXBvc2l0aW5nLCAiRnJhZ21lbnQgc2hhZGVyIGxvZzogJXNcbiIsIGxvZy51dGY4KCku
ZGF0YSgpKTsKKyAgICBsb2cgPSBtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG1faWQpOwor
ICAgIExPRyhDb21wb3NpdGluZywgIlByb2dyYW0gbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgoR0Mz
RHVpbnQgbG9jYXRpb24sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7Cisg
ICAgR0MzRGZsb2F0IG1hdHJpeEFzRmxvYXRzW10gPSB7CisgICAgICAgIG1hdHJpeC5tMTEoKSwg
bWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKKyAgICAgICAgbWF0cml4
Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAorICAgICAg
ICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCks
CisgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJp
eC5tNDQoKQorICAgIH07CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIDEsIGZhbHNlLCBtYXRyaXhBc0Zsb2F0cyk7Cit9CisKK0dDM0R1aW50IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZh
cmlhYmxlVHlwZSB0eXBlKQoreworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD46
Oml0ZXJhdG9yIGl0ID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKKyAgICBpZiAoaXQgIT0gbV92
YXJpYWJsZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CisKKyAgICBHQzNEdWlu
dCBsb2NhdGlvbiA9IDA7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBVbmlmb3JtVmFy
aWFibGU6CisgICAgICAgIGxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24o
bV9pZCwgbmFtZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXR0cmliVmFyaWFibGU6Cisg
ICAgICAgIGxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihtX2lkLCBuYW1l
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fdmFyaWFibGVzLmFkZChuYW1l
LCBsb2NhdGlvbik7CisgICAgcmV0dXJuIGxvY2F0aW9uOworfQorCitUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKK3sKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW1JRCA9IG1faWQ7CisgICAgaWYgKCFwcm9ncmFtSUQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0
ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsK
KyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIp
OworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1f
Y29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOworfQorCisjZGVmaW5lIEdMU0xfRElS
RUNUSVZFKC4uLikgIiMiI19fVkFfQVJHU19fIlxuIgorc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRl
eFRlbXBsYXRlID0KKyAgICBTVFJJTkdJRlkoCisgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVy
dGV4OworICAgICAgICB1bmlmb3JtIG1hdDQgdV9tb2RlbFZpZXdNYXRyaXg7CisgICAgICAgIHVu
aWZvcm0gbWF0NCB1X3Byb2plY3Rpb25NYXRyaXg7CisgICAgICAgIHVuaWZvcm0gbWF0NCB1X3Rl
eHR1cmVTcGFjZU1hdHJpeDsKKworICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKKyAg
ICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOworICAgICAgICB2YXJ5aW5nIGZsb2F0
IHZfYW50aWFsaWFzOworCisgICAgICAgIHZvaWQgbm9vcChpbm91dCB2ZWMyIGR1bW15UGFyYW1l
dGVyKSB7IH0KKworICAgICAgICB2ZWM0IHRvVmlld3BvcnRTcGFjZSh2ZWMyIHBvcykgeyByZXR1
cm4gdmVjNChwb3MsIDAuLCAxLikgKiB1X21vZGVsVmlld01hdHJpeDsgfQorCisgICAgICAgIC8v
IFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgd2UgZ2V0IGVkZ2Ug
dHJpYW5nbGVzIHdpdGggY29udHJvbCBwb2ludHMsCisgICAgICAgIC8vIGEgY29udHJvbCBwb2lu
dCBiZWluZyB0aGUgbmVhcmVzdCBwb2ludCB0byB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG9uIHRo
ZSBlZGdlLgorICAgICAgICB2b2lkIGFwcGx5QW50aWFsaWFzaW5nKGlub3V0IHZlYzIgcG9zaXRp
b24pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGNvdW50IG9uIHRoZSBmYWN0IHRoYXQg
cXVhZCBwYXNzZWQgaW4gaXMgYWx3YXlzIGEgdW5pdCByZWN0LAorICAgICAgICAgICAgLy8gYW5k
IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggYXBwbGllcyB0aGUgcmVhbCByZWN0LgorICAgICAg
ICAgICAgY29uc3QgdmVjMiBjZW50ZXIgPSB2ZWMyKDAuNSwgMC41KTsKKyAgICAgICAgICAgIGNv
bnN0IGZsb2F0IGFudGlhbGlhc0luZmxhdGlvbkRpc3RhbmNlID0gMS47CisKKyAgICAgICAgICAg
IC8vIFdlIHBhc3MgdGhlIGNvbnRyb2wgcG9pbnQgYXMgdGhlIHp3IGNvb3JkaW5hdGVzIG9mIHRo
ZSB2ZXJ0ZXguCisgICAgICAgICAgICAvLyBUaGUgY29udHJvbCBwb2ludCBpcyB0aGUgcG9pbnQg
b24gdGhlIGVkZ2UgY2xvc2VzdCB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICAgICAg
IC8vIFRoZSBjb250cm9sIHBvaW50IGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYW50aWFsaWFzIHZh
bHVlLgorICAgICAgICAgICAgdmVjMiBjb250cm9sUG9pbnQgPSBhX3ZlcnRleC56dzsKKworICAg
ICAgICAgICAgLy8gRmlyc3Qgd2UgY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBpbiB2aWV3cG9ydCBz
cGFjZS4KKyAgICAgICAgICAgIHZlYzQgY2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gdG9W
aWV3cG9ydFNwYWNlKGNlbnRlcik7CisgICAgICAgICAgICB2ZWM0IGNvbnRyb2xQb2ludEluVmll
d3BvcnRDb29yZGluYXRlcyA9IHRvVmlld3BvcnRTcGFjZShjb250cm9sUG9pbnQpOworICAgICAg
ICAgICAgZmxvYXQgdmlld3BvcnRTcGFjZURpc3RhbmNlID0gZGlzdGFuY2UoY2VudGVySW5WaWV3
cG9ydENvb3JkaW5hdGVzLCBjb250cm9sUG9pbnRJblZpZXdwb3J0Q29vcmRpbmF0ZXMpOworCisg
ICAgICAgICAgICAvLyBXZSBhZGQgdGhlIGluZmxhdGlvbiBkaXN0YW5jZSB0byB0aGUgY29tcHV0
ZWQgZGlzdGFuY2UsIGFuZCBjb21wdXRlIHRoZSByYXRpby4KKyAgICAgICAgICAgIGZsb2F0IGlu
ZmxhdGlvblJhdGlvID0gKHZpZXdwb3J0U3BhY2VEaXN0YW5jZSArIGFudGlhbGlhc0luZmxhdGlv
bkRpc3RhbmNlKSAvIHZpZXdwb3J0U3BhY2VEaXN0YW5jZTsKKworICAgICAgICAgICAgLy8gdl9h
bnRpYWxpYXMgbmVlZHMgdG8gYmUgMCBmb3IgdGhlIG91dGVyIGVkZ2UgYW5kIDEuIGZvciB0aGUg
aW5uZXIgZWRnZS4KKyAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBjb250cm9sUG9pbnQgaXMgZXF1
YWwgdG8gdGhlIHBvc2l0aW9uIGluIHRoZSBlZGdlIHZlcnRpY2VzLCB0aGUgdmFsdWUgaXMgYWx3
YXlzIDAgZm9yIHRob3NlLgorICAgICAgICAgICAgLy8gRm9yIHRoZSBjZW50ZXIgcG9pbnQsIHRo
ZSBkaXN0YW5jZSBpcyBhbHdheXMgMC41LCBzbyB3ZSBub3JtYWxpemUgdG8gMS4gYnkgbXVsdGlw
bHlpbmcgYnkgMi4KKyAgICAgICAgICAgIC8vIEJ5IG11bHRwbHlpbmcgYnkgaW5mbGF0aW9uUmF0
aW8gYW5kIGRpdmlkaW5nIGJ5IChpbmZsYXRpb25SYXRpbyAtIDEpLAorICAgICAgICAgICAgLy8g
V2UgbWFrZSBzdXJlIHRoYXQgdGhlIHZhcnlpbmcgaW50ZXJwb2xhdGVzIGJldHdlZW4gMCAob3V0
ZXIgZWRnZSksIDEgKGlubmVyIGVkZ2UpIGFuZCBuID4gMSAoY2VudGVyKS4KKyAgICAgICAgICAg
IHZfYW50aWFsaWFzID0gZGlzdGFuY2UoY29udHJvbFBvaW50LCBwb3NpdGlvbikgKiAyLiAqIGlu
ZmxhdGlvblJhdGlvIC8gKGluZmxhdGlvblJhdGlvIC0gMS4pOworCisgICAgICAgICAgICAvLyBO
b3cgaW5mbGF0ZSB0aGUgYWN0dWFsIHBvc2l0aW9uLiBCeSB1c2luZyB0aGlzIGZvcm11bGEgaW5z
dGVhZCBvZiBpbmZsYXRpbmcgcG9zaXRpb24gZGlyZWN0bHksCisgICAgICAgICAgICAvLyB3ZSBl
bnN1cmUgdGhhdCB0aGUgY2VudGVyIHZlcnRleCBpcyBuZXZlciBpbmZsYXRlZC4KKyAgICAgICAg
ICAgIHBvc2l0aW9uID0gY2VudGVyICsgKHBvc2l0aW9uIC0gY2VudGVyKSAqIGluZmxhdGlvblJh
dGlvOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHZlYzIgcG9zaXRpb24gPSBhX3ZlcnRleC54eTsKKyAgICAgICAgICAgIGFwcGx5
QW50aWFsaWFzaW5nSWZOZWVkZWQocG9zaXRpb24pOworCisgICAgICAgICAgICAvLyBUaGUgdGV4
dHVyZSBwb3NpdGlvbiBuZWVkcyB0byBiZSBjbGFtcGVkIHRvIDAuLjEgYmVmb3JlIHRoZSB0ZXh0
dXJlIG1hdHJpeCBpcyBhcHBsaWVkLgorICAgICAgICAgICAgdmVjNCBjbGFtcGVkUG9zaXRpb24g
PSBjbGFtcCh2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pLCAwLiwgMS4pOworICAgICAgICAgICAgdl90
ZXhDb29yZCA9ICh1X3RleHR1cmVTcGFjZU1hdHJpeCAqIGNsYW1wZWRQb3NpdGlvbikueHk7CisK
KyAgICAgICAgICAgIHZfbWFza1RleENvb3JkID0gcG9zaXRpb247CisgICAgICAgICAgICBnbF9Q
b3NpdGlvbiA9IHVfcHJvamVjdGlvbk1hdHJpeCAqIHVfbW9kZWxWaWV3TWF0cml4ICogdmVjNChw
b3NpdGlvbiwgMC4sIDEuKTsKKyAgICAgICAgfQorICAgICk7CisKKyNkZWZpbmUgUkVDVF9URVhU
VVJFX0RJUkVDVElWRSBcCisgICAgR0xTTF9ESVJFQ1RJVkUoaWZkZWYgRU5BQkxFX1JlY3QpIFwK
KyAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIyRFJlY3Qp
IFwKKyAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNhbXBsZXJGdW5jdGlvbiB0ZXh0dXJl
MkRSZWN0KSBcCisgICAgR0xTTF9ESVJFQ1RJVkUoZWxzZSkgXAorICAgICAgICBHTFNMX0RJUkVD
VElWRShkZWZpbmUgU2FtcGxlclR5cGUgc2FtcGxlcjJEKSBcCisgICAgICAgIEdMU0xfRElSRUNU
SVZFKGRlZmluZSBTYW1wbGVyRnVuY3Rpb24gdGV4dHVyZTJEKSBcCisgICAgR0xTTF9ESVJFQ1RJ
VkUoZW5kaWYpCisKKyNkZWZpbmUgRU5BQkxFX0FQUExJRVIoTmFtZSkgIiNkZWZpbmUgRU5BQkxF
XyIjTmFtZSJcbiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgYXBwbHkiI05hbWUiXG4iCisj
ZGVmaW5lIERJU0FCTEVfQVBQTElFUihOYW1lKSAiI2RlZmluZSBhcHBseSIjTmFtZSJJZk5lZWRl
ZCBub29wXG4iCisjZGVmaW5lIEJMVVJfQ09OU1RBTlRTIFwKKyAgICBHTFNMX0RJUkVDVElWRShk
ZWZpbmUgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEggMTEpIFwKKyAgICBHTFNMX0RJUkVDVElW
RShkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yKQorCisKK3N0YXRpYyBjb25zdCBjaGFy
KiBmcmFnbWVudFRlbXBsYXRlID0KKyAgICBSRUNUX1RFWFRVUkVfRElSRUNUSVZFCisgICAgQkxV
Ul9DT05TVEFOVFMKKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OworICAgICAgICB1bmlmb3JtIFNhbXBsZXJUeXBlIHNfc2FtcGxlcjsKKyAgICAgICAgdW5p
Zm9ybSBzYW1wbGVyMkQgc19tYXNrOworICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX2NvbnRl
bnRUZXh0dXJlOworICAgICAgICB1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTsKKyAgICAgICAgdmFy
eWluZyBmbG9hdCB2X2FudGlhbGlhczsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7
CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29yZDsKKyAgICAgICAgdW5pZm9ybSBm
bG9hdCB1X2ZpbHRlckFtb3VudDsKKyAgICAgICAgdW5pZm9ybSB2ZWMyIHVfYmx1clJhZGl1czsK
KyAgICAgICAgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OworICAgICAgICB1bmlmb3JtIHZl
YzQgdV9jb2xvcjsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNT
SUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKKworICAgICAgICB2b2lkIG5vb3AoaW5vdXQgdmVjNCBk
dW1teVBhcmFtZXRlcikgeyB9CisKKyAgICAgICAgZmxvYXQgYW50aWFsaWFzKCkgeyByZXR1cm4g
c21vb3Roc3RlcCh2X2FudGlhbGlhcywgMC4sIDEuKTsgfQorCisgICAgICAgIHZvaWQgYXBwbHlU
ZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSBTYW1wbGVyRnVuY3Rpb24oc19zYW1w
bGVyLCB2X3RleENvb3JkKTsgfQorICAgICAgICB2b2lkIGFwcGx5T3BhY2l0eShpbm91dCB2ZWM0
IGNvbG9yKSB7IGNvbG9yICo9IHVfb3BhY2l0eTsgfQorICAgICAgICB2b2lkIGFwcGx5QW50aWFs
aWFzaW5nKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gYW50aWFsaWFzKCk7IH0KKyAgICAg
ICAgdm9pZCBhcHBseU1hc2soaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB0ZXh0dXJlMkQo
c19tYXNrLCB2X21hc2tUZXhDb29yZCkuYTsgfQorCisgICAgICAgIHZvaWQgYXBwbHlHcmF5c2Nh
bGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQg
YW1vdW50ID0gMS4wIC0gdV9maWx0ZXJBbW91bnQ7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQo
KDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAq
IGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5i
LAorICAgICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciAr
ICgwLjcxNTIgKyAwLjI4NDggKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIg
KiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICog
YW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcg
KyAoMC4wNzIyICsgMC45Mjc4ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAg
Y29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5U2VwaWFGaWx0ZXIoaW5v
dXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4w
IC0gdV9maWx0ZXJBbW91bnQ7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoKDAuMzkzICsgMC42
MDcgKiBhbW91bnQpICogY29sb3IuciArICgwLjc2OSAtIDAuNzY5ICogYW1vdW50KSAqIGNvbG9y
LmcgKyAoMC4xODkgLSAwLjE4OSAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAg
ICgwLjM0OSAtIDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMxNCAqIGFt
b3VudCkgKiBjb2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3IuYiwKKyAg
ICAgICAgICAgICAgICAoMC4yNzIgLSAwLjI3MiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNTM0
IC0gMC41MzQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjEzMSArIDAuODY5ICogYW1vdW50KSAq
IGNvbG9yLmIsCisgICAgICAgICAgICAgICAgY29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGFwcGx5U2F0dXJhdGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgewor
ICAgICAgICAgICAgY29sb3IgPSB2ZWM0KCgwLjIxMyArIDAuNzg3ICogdV9maWx0ZXJBbW91bnQp
ICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuZyAr
ICgwLjA3MiAtIDAuMDcyICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAg
ICAgICAoMC4yMTMgLSAwLjIxMyAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUg
KyAwLjI4NSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVf
ZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4yMTMg
KiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2ZpbHRlckFt
b3VudCkgKiBjb2xvci5nICsgKDAuMDcyICsgMC45MjggKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xv
ci5iLAorICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBhcHBseUh1ZVJvdGF0ZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAg
ICAgICAgICBmbG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7CisgICAgICAgICAgICBm
bG9hdCBjID0gY29zKHVfZmlsdGVyQW1vdW50ICogcGkgLyAxODAuMCk7CisgICAgICAgICAgICBm
bG9hdCBzID0gc2luKHVfZmlsdGVyQW1vdW50ICogcGkgLyAxODAuMCk7CisgICAgICAgICAgICBj
b2xvciA9IHZlYzQoY29sb3IuciAqICgwLjIxMyArIGMgKiAwLjc4NyAtIHMgKiAwLjIxMykgKyBj
b2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1IC0gcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4w
NzIgLSBjICogMC4wNzIgKyBzICogMC45MjgpLAorICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAo
MC4yMTMgLSBjICogMC4yMTMgKyBzICogMC4xNDMpICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAw
LjI4NSArIHMgKiAwLjE0MCkgKyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAu
MjgzKSwKKyAgICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAq
IDAuNzg3KSArICBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNv
bG9yLmIgKiAoMC4wNzIgKyBjICogMC45MjggKyBzICogMC4wNzIpLAorICAgICAgICAgICAgICAg
IGNvbG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgaW52ZXJ0KGZsb2F0IG4pIHsg
cmV0dXJuICgxLjAgLSBuKSAqIHVfZmlsdGVyQW1vdW50ICsgbiAqICgxLjAgLSB1X2ZpbHRlckFt
b3VudCk7IH0KKyAgICAgICAgdm9pZCBhcHBseUludmVydEZpbHRlcihpbm91dCB2ZWM0IGNvbG9y
KQorICAgICAgICB7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoaW52ZXJ0KGNvbG9yLnIpLCBp
bnZlcnQoY29sb3IuZyksIGludmVydChjb2xvci5iKSwgY29sb3IuYSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfZmls
dGVyQW1vdW50KSwgY29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBjb250cmFz
dChmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2ZpbHRlckFtb3VudCArIDAuNTsgfQor
ICAgICAgICB2b2lkIGFwcGx5Q29udHJhc3RGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAg
ICAgeworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGNvbnRyYXN0KGNvbG9yLnIpLCBjb250cmFz
dChjb2xvci5nKSwgY29udHJhc3QoY29sb3IuYiksIGNvbG9yLmEpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBhcHBseU9wYWNpdHlGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAg
eworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNv
bG9yLmEgKiB1X2ZpbHRlckFtb3VudCk7CisgICAgICAgIH0KKworICAgICAgICB2ZWM0IHNhbXBs
ZUNvbG9yQXRSYWRpdXMoZmxvYXQgcmFkaXVzKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWMy
IGNvb3JkID0gdl90ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsKKyAgICAgICAgICAg
IHJldHVybiBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCBjb29yZCkgKiBmbG9hdChjb29yZC54
ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwor
ICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdCByYWRp
dXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkIC0gdV9z
aGFkb3dPZmZzZXQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7CisgICAgICAgICAgICByZXR1cm4g
U2FtcGxlckZ1bmN0aW9uKHNfc2FtcGxlciwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4g
JiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBhcHBseUJsdXJGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAg
ICAgICAgeworICAgICAgICAgICAgdmVjNCB0b3RhbCA9IHNhbXBsZUNvbG9yQXRSYWRpdXMoMC4p
ICogdV9nYXVzc2lhbktlcm5lbFswXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwg
R0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgeworICAgICAgICAgICAgICAgIHRvdGFs
ICs9IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkg
KiB1X2dhdXNzaWFuS2VybmVsW2ldOworICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUNv
bG9yQXRSYWRpdXMoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1
c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbG9yID0gdG90
YWw7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5QWxwaGFCbHVyKGlub3V0IHZlYzQg
Y29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGFB
dFJhZGl1cygwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdChpKSAqIEdBVVNTSUFOX0tF
Uk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAgICAgdG90YWwg
Kz0gc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NU
RVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y29sb3IgKj0gdG90YWw7CisgICAgICAgIH0KKworICAgICAgICB2ZWM0IHNvdXJjZU92ZXIodmVj
NCBzcmMsIHZlYzQgZHN0KSB7IHJldHVybiBzcmMgKyBkc3QgKiAoMS4gLSBkc3QuYSk7IH0KKwor
ICAgICAgICB2b2lkIGFwcGx5Q29udGVudFRleHR1cmUoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAg
ICAgeworICAgICAgICAgICAgdmVjNCBjb250ZW50Q29sb3IgPSB0ZXh0dXJlMkQoc19jb250ZW50
VGV4dHVyZSwgdl90ZXhDb29yZCk7CisgICAgICAgICAgICBjb2xvciA9IHNvdXJjZU92ZXIoY29u
dGVudENvbG9yLCBjb2xvcik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5U29saWRD
b2xvcihpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHVfY29sb3I7IH0KKworICAgICAgICB2
b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmVjNCBjb2xvciA9IHZlYzQo
MS4sIDEuLCAxLiwgMS4pOworICAgICAgICAgICAgYXBwbHlUZXh0dXJlSWZOZWVkZWQoY29sb3Ip
OworICAgICAgICAgICAgYXBwbHlTb2xpZENvbG9ySWZOZWVkZWQoY29sb3IpOworICAgICAgICAg
ICAgYXBwbHlBbnRpYWxpYXNpbmdJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseU1h
c2tJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseU9wYWNpdHlJZk5lZWRlZChjb2xv
cik7CisgICAgICAgICAgICBhcHBseUdyYXlzY2FsZUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAg
ICAgICAgICAgIGFwcGx5U2VwaWFGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBh
cHBseVNhdHVyYXRlRmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlIdWVS
b3RhdGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseUludmVydEZpbHRl
cklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcklmTmVl
ZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5Q29udHJhc3RGaWx0ZXJJZk5lZWRlZChjb2xv
cik7CisgICAgICAgICAgICBhcHBseU9wYWNpdHlGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAg
ICAgICAgICBhcHBseUJsdXJGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBs
eUFscGhhQmx1cklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5Q29udGVudFRleHR1
cmVJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKKyAg
ICAgICAgfQorICAgICk7CisKK1Bhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMgb3B0
aW9ucykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHNoYWRlckJ1aWxkZXI7CisjZGVmaW5lIFNFVF9B
UFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBcCisgICAgc2hhZGVyQnVpbGRlci5hcHBlbmQo
XAorICAgICAgICAob3B0aW9ucyAmIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpBcHBsaWVy
KSA/IEVOQUJMRV9BUFBMSUVSKEFwcGxpZXIpIDogRElTQUJMRV9BUFBMSUVSKEFwcGxpZXIpKQor
CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFRleHR1cmUpOworICAgIFNFVF9BUFBMSUVS
X0ZST01fT1BUSU9OUyhSZWN0KTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU29saWRD
b2xvcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9wYWNpdHkpOworICAgIFNFVF9B
UFBMSUVSX0ZST01fT1BUSU9OUyhNYXNrKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMo
QW50aWFsaWFzaW5nKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoR3JheXNjYWxlRmls
dGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2VwaWFGaWx0ZXIpOworICAgIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTYXR1cmF0ZUZpbHRlcik7CisgICAgU0VUX0FQUExJRVJf
RlJPTV9PUFRJT05TKEh1ZVJvdGF0ZUZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKEJyaWdodG5lc3NGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhDb250
cmFzdEZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEludmVydEZpbHRlcik7
CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9wYWNpdHlGaWx0ZXIpOworICAgIFNFVF9B
UFBMSUVSX0ZST01fT1BUSU9OUyhCbHVyRmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09Q
VElPTlMoQWxwaGFCbHVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQ29udGVudFRl
eHR1cmUpOworICAgIFN0cmluZ0J1aWxkZXIgdmVydGV4QnVpbGRlcjsKKyAgICB2ZXJ0ZXhCdWls
ZGVyLmFwcGVuZChzaGFkZXJCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIHZlcnRleEJ1aWxkZXIu
YXBwZW5kKHZlcnRleFRlbXBsYXRlKTsKKyAgICBzaGFkZXJCdWlsZGVyLmFwcGVuZChmcmFnbWVu
dFRlbXBsYXRlKTsKKworICAgIFN0cmluZyB2ZXJ0ZXhTb3VyY2UgPSB2ZXJ0ZXhCdWlsZGVyLnRv
U3RyaW5nKCk7CisgICAgU3RyaW5nIGZyYWdtZW50U291cmNlID0gc2hhZGVyQnVpbGRlci50b1N0
cmluZygpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbShjb250ZXh0LCB2ZXJ0ZXhTb3VyY2UsIGZyYWdtZW50U291cmNlKSk7Cit9CisKK30KKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
MzdlN2Q2OWQ5YTg3NzRmMWQzMDYxYTc3OTMxYTJjMDNjOWRjMTQ2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtX2gKKyNkZWZpbmUgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1faAorCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKyNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfVkFSSUFCTEUoQWNjZXNzb3Is
IE5hbWUsIFR5cGUpIEdDM0R1aW50IEFjY2Vzc29yIyNMb2NhdGlvbigpIHsgc3RhdGljIGNvbnN0
IEF0b21pY1N0cmluZyBuYW1lKE5hbWUpOyByZXR1cm4gZ2V0TG9jYXRpb24obmFtZSwgVHlwZSk7
IH0KKyNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShBY2Nlc3NvcikgVEVYTUFQX0RFQ0xB
UkVfVkFSSUFCTEUoQWNjZXNzb3IsICJ1XyIjQWNjZXNzb3IsIFVuaWZvcm1WYXJpYWJsZSkKKyNk
ZWZpbmUgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKEFjY2Vzc29yKSBURVhNQVBfREVDTEFSRV9W
QVJJQUJMRShBY2Nlc3NvciwgImFfIiNBY2Nlc3NvciwgQXR0cmliVmFyaWFibGUpCisjZGVmaW5l
IFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoQWNjZXNzb3IpIFRFWE1BUF9ERUNMQVJFX1ZBUklBQkxF
KEFjY2Vzc29yLCAic18iI0FjY2Vzc29yLCBVbmlmb3JtVmFyaWFibGUpCisKK2NsYXNzIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0+IHsKK3B1YmxpYzoKKyAgICBlbnVtIE9wdGlvbiB7CisgICAgICAgIFRleHR1
cmUgICAgICAgICAgPSAxTCA8PCAwLAorICAgICAgICBSZWN0ICAgICAgICAgICAgID0gMUwgPDwg
MSwKKyAgICAgICAgU29saWRDb2xvciAgICAgICA9IDFMIDw8IDIsCisgICAgICAgIE9wYWNpdHkg
ICAgICAgICAgPSAxTCA8PCAzLAorICAgICAgICBNYXNrICAgICAgICAgICAgID0gMUwgPDwgNCwK
KyAgICAgICAgQW50aWFsaWFzaW5nICAgICA9IDFMIDw8IDUsCisgICAgICAgIEdyYXlzY2FsZUZp
bHRlciAgPSAxTCA8PCA2LAorICAgICAgICBTZXBpYUZpbHRlciAgICAgID0gMUwgPDwgNywKKyAg
ICAgICAgU2F0dXJhdGVGaWx0ZXIgICA9IDFMIDw8IDgsCisgICAgICAgIEh1ZVJvdGF0ZUZpbHRl
ciAgPSAxTCA8PCA5LAorICAgICAgICBCcmlnaHRuZXNzRmlsdGVyID0gMUwgPDwgMTAsCisgICAg
ICAgIENvbnRyYXN0RmlsdGVyICAgPSAxTCA8PCAxMSwKKyAgICAgICAgSW52ZXJ0RmlsdGVyICAg
ICA9IDFMIDw8IDEyLAorICAgICAgICBPcGFjaXR5RmlsdGVyICAgID0gMUwgPDwgMTMsCisgICAg
ICAgIEJsdXJGaWx0ZXIgICAgICAgPSAxTCA8PCAxNCwKKyAgICAgICAgQWxwaGFCbHVyICAgICAg
ICA9IDFMIDw8IDE1LAorICAgICAgICBDb250ZW50VGV4dHVyZSAgID0gMUwgPDwgMTYKKyAgICB9
OworCisgICAgdHlwZWRlZiB1bnNpZ25lZCBPcHRpb25zOworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiwgT3B0aW9ucyk7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0oKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCgpIGNvbnN0IHsgcmV0dXJu
IG1faWQ7IH0KKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29u
dGV4dC5nZXQoKTsgfQorCisgICAgVEVYTUFQX0RFQ0xBUkVfQVRUUklCVVRFKHZlcnRleCkKKwor
ICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0obW9kZWxWaWV3TWF0cml4KQorICAgIFRFWE1BUF9E
RUNMQVJFX1VOSUZPUk0ocHJvamVjdGlvbk1hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklG
T1JNKHRleHR1cmVTcGFjZU1hdHJpeCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKG9wYWNp
dHkpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShjb2xvcikKKyAgICBURVhNQVBfREVDTEFS
RV9VTklGT1JNKGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZSkKKyAgICBURVhNQVBfREVD
TEFSRV9TQU1QTEVSKHNhbXBsZXIpCisgICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihtYXNrKQor
CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZmls
dGVyQW1vdW50KQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZ2F1c3NpYW5LZXJuZWwpCisg
ICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShibHVyUmFkaXVzKQorICAgIFRFWE1BUF9ERUNMQVJF
X1VOSUZPUk0oc2hhZG93T2Zmc2V0KQorICAgIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoY29udGVu
dFRleHR1cmUpCisjZW5kaWYKKworICAgIHZvaWQgc2V0TWF0cml4KEdDM0R1aW50LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworCitwcml2YXRlOgorICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBjb25zdCBTdHJpbmcmIHZl
cnRleFNoYWRlclNvdXJjZSwgY29uc3QgU3RyaW5nJiBmcmFnbWVudFNoYWRlclNvdXJjZSk7Cisg
ICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fZnJhZ21lbnRTaGFkZXI7CisKKyAgICBlbnVtIFZhcmlhYmxlVHlwZSB7IFVuaWZvcm1WYXJp
YWJsZSwgQXR0cmliVmFyaWFibGUgfTsKKyAgICBHQzNEdWludCBnZXRMb2NhdGlvbihjb25zdCBB
dG9taWNTdHJpbmcmLCBWYXJpYWJsZVR5cGUpOworCisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBtX2NvbnRleHQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOworICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBHQzNEdWludD4gbV92YXJpYWJsZXM7Cit9OworCit9CisjZW5kaWYKKwor
I2VuZGlmIC8vIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184164</attachid>
            <date>2013-01-23 00:02:46 -0800</date>
            <delta_ts>2013-01-23 00:33:36 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-105847-20130123085414.patch</filename>
            <type>text/plain</type>
            <size>57905</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MzE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNkNDA5NzdmZWE4MmNl
MjJkZDFjZDU2NDEwNGRlYWZiYTI0ODMyNC4uYjMyZDAyM2Y5NGE2MmI4NDBiYTNiMTMwYmU5YmY0
MzYyYzE5YjE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTAxLTIyICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gUmVuYW1l
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLiogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0u
KgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1ODQ3
CisKKyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgY29udGFpbnMgdmVyeSBsaXR0
bGUgIm1hbmFnZXIiIGNvZGUuCisgICAgICAgIE1vdmVkIHRoZSBtYXAgb2Ygc2hhZGVycyB0byBU
ZXh0dXJlTWFwcGVyR0wsIGFuZCByZW5hbWVkIHRoZSBmaWxlcyBjb250YWluaW5nCisgICAgICAg
IHRoZSBzaGFkZXIgaW1wbGVtZW50YXRpb24gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3Bw
fGguCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIC0gcmVuYW1lcy9yZWZhY3RvcnMgb25seS4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERh
dGE6OlNoYXJlZEdMRGF0YTo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgICAgICAgICAgVGhp
cyBmdW5jdGlvbiBpcyBjb3BpZWQgZnJvbSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci4KKyAg
ICAgICAgKFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xE
YXRhOjpTaGFyZWRHTERhdGE6OlNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRy
YXdTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Om9wdGlvbnNGb3JGaWx0ZXJUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcG9zaXRpbmdMb2dFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6c2V0TWF0cml4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmguCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpwcm9ncmFtSUQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNvbnRleHQpOgor
CiAyMDEzLTAxLTEwICBEYXZpZCBGYXVyZSAgPGZhdXJlQGtkZS5vcmc+CiAKICAgICAgICAgUGx1
Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkIGFzc2VydHMgaWYgcGx1Z2luIGdvdCBs
b2FkZWQgYWdhaW4gbWVhbndoaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAy
MDI4ZDkwMDQ2OTZlNDJmYjUxNzI1YjRmMjJiYmUyYTk0ZmI1MGJhLi41YjdmNWQ5YTUwNzcyMzJi
MTllMjNiNDU4N2NlYWY0NjcxOTE4M2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
QEAgLTY0MTgsOCArNjQxOCw4IEBAIGlmIFVTRV9URVhUVVJFX01BUFBFUl9DQUlSTwogd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS8vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy90ZXhtYXAvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbVRleHR1cmVNYXBwZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS8vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtQ29tcGlsZWRQcm9ncmFtLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5k
ZXggYTZiYmEwZmVkYjNlMjJmMmFkODkwMDk4MWEwY2NjNTMzNjFkZmJiNC4uZjUxNzljNjAxNWMx
ZTAzMGNlNTc0NDFlMjY4Y2JjYjA5MDAyYjk2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UK
QEAgLTMxNyw3ICszMTcsNyBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0uY3BwCiAgICAgKQogCiAgICAgaWYgKFdURl9VU0VfRUdMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5k
ZXggYTI2NGY0M2VjY2NkZjQyZWU1MjkwY2RiMjQwYzIyZmMxYzBkMTI4ZC4uNDY3M2RjNjRiMjEw
ZThhN2U0ODllZjNkMjQzZDlkMjQ0YTU1YTZlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC00MDM1LDcgKzQw
MzUsNyBAQCB1c2U/KDNEX0dSQVBISUNTKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dw
dS9UaWxpbmdEYXRhLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmggXAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaAogCiAgICAgU09VUkNFUyArPSBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcCBcCkBAIC00MDQ4LDcgKzQwNDgs
NyBAQCB1c2U/KDNEX0dSQVBISUNTKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcAogCiAgICAgSU5D
TFVERVBBVEggKz0gJCRQV0QvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAKaW5kZXggOWYzZTgyMGE0NWQ1Nzg4MzRlNWNmMjhmNzZkYTZkYjk5ZGZmMWQ2YS4uZjc4
ZjE5MDJhZWM2N2ZmYWIxZWQ1Yzc1OGU4MDk3MjBmMWU4OGVhYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkxl
bmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KQEAgLTg1LDEwICs4NSwyMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdMRGF0YShjb250ZXh0
KSk7CiAgICAgICAgIH0KIAotICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB0ZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjsKKyAgICAgICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4gZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6T3B0aW9ucyBvcHRpb25zKQorICAgICAgICB7CisgICAgICAgICAgICBIYXNoTWFwPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zLCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0+ID46Oml0ZXJhdG9yIGl0ID0gbV9wcm9ncmFtcy5maW5kKG9wdGlvbnMpOworICAg
ICAgICAgICAgaWYgKGl0ICE9IG1fcHJvZ3JhbXMuZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGl0LT52YWx1ZTsKKworICAgICAgICAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZShtX2Nv
bnRleHQsIG9wdGlvbnMpOworICAgICAgICAgICAgbV9wcm9ncmFtcy5hZGQob3B0aW9ucywgcHJv
Z3JhbSk7CisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbTsKKyAgICAgICAgfQorCisgICAgICAg
IEhhc2hNYXA8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMsIFJlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gPiBtX3Byb2dyYW1zOworICAgICAgICBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIAogICAgICAgICBleHBsaWNpdCBTaGFyZWRHTERh
dGEoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgICAgICAgICA6IHRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyKGNvbnRleHQpCisgICAgICAgICAgICA6IG1fY29udGV4dChjb250ZXh0
KQogICAgICAgICB7CiAgICAgICAgICAgICBnbENvbnRleHREYXRhTWFwKCkuYWRkKGNvbnRleHQt
PnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSwgdGhpcyk7CiAgICAgICAgIH0KQEAgLTI5OCw3
ICszMTAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYg
Y29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlYwogICAgIGlmIChjbGlwU3RhY2soKS5j
dXJyZW50KCkuc2Npc3NvckJveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRH
TERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9yKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuZ2V0U2hh
ZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6U29saWRDb2xvcik7CiAgICAg
bV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCiAgICAgZmxv
YXQgciwgZywgYiwgYTsKQEAgLTM5OCwxNSArNDEwLDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25z
dCBJCiAgICAgICAgICYmIGV4cG9zZWRFZGdlcyA9PSBBbGxFZGdlcwogICAgICAgICAmJiAhbW9k
ZWxWaWV3TWF0cml4Lm1hcFF1YWQodGFyZ2V0UmVjdCkuaXNSZWN0aWxpbmVhcigpOwogCi0gICAg
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
OjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZTsK
ICAgICBpZiAobWFza2VkKQotICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpNYXNrOworICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpNYXNrOwogICAgIGlmICh1c2VSZWN0KQotICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0OworICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpSZWN0OwogICAgIGlmIChvcGFjaXR5IDwgMSkKLSAgICAgICAgb3B0
aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eTsKKyAgICAgICAgb3B0
aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3BhY2l0eTsKICAgICBpZiAodXNl
QW50aWFsaWFzaW5nKSB7Ci0gICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OkFudGlhbGlhc2luZzsKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6QW50aWFsaWFzaW5nOwogICAgICAgICBmbGFncyB8PSBTaG91bGRBbnRpYWxp
YXM7CiAgICAgfQogCkBAIC00MTQsMjAgKzQyNiwyMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3Qg
SQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKLSAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdM
RGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0ob3B0aW9u
cyk7CisgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5nZXRTaGFkZXJQcm9ncmFt
KG9wdGlvbnMpOwogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgp
LCB0ZXh0dXJlLCBmbGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJp
eCwgb3BhY2l0eSwgbWFza1RleHR1cmUpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1NvbGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgRmxhZ3MgZmxhZ3MgPSAw
OwotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U29saWRDb2xvcjsKKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OlNvbGlkQ29sb3I7CiAgICAgaWYgKCFtYXRyaXgubWFwUXVhZChyZWN0KS5pc1JlY3RpbGluZWFy
KCkpIHsKLSAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50
aWFsaWFzaW5nOworICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
OjpBbnRpYWxpYXNpbmc7CiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kIHwgU2hvdWxkQW50
aWFsaWFzOwogICAgIH0KIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
cHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5nZXRTaGFkZXJQcm9n
cmFtKG9wdGlvbnMpOwogICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dy
YW1JRCgpKTsKIAogICAgIGZsb2F0IHIsIGcsIGIsIGE7CkBAIC02OTMsMzAgKzcwNSwzMCBAQCB2
b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjbwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogCi1zdGF0
aWMgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9uc0ZvckZpbHRlclR5
cGUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCitz
dGF0aWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMgb3B0aW9uc0ZvckZpbHRl
clR5cGUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3Mp
CiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlT
Q0FMRToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJl
IHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcjsKKyAgICAgICAg
cmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06OkdyYXlzY2FsZUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0VQSUE6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4
dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTZXBpYUZpbHRlcjsKKyAgICAgICAg
cmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06OlNlcGlhRmlsdGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
QVRVUkFURToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0
dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNhdHVyYXRlRmlsdGVyOworICAgICAg
ICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmUgfCBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6U2F0dXJhdGVGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkhVRV9ST1RBVEU6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpIdWVSb3RhdGVGaWx0ZXI7
CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpIdWVSb3RhdGVGaWx0ZXI7CiAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmVydEZpbHRl
cjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OkludmVydEZpbHRlcjsKICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkJyaWdodG5l
c3NGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4
dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpCcmlnaHRuZXNzRmlsdGVyOwogICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICAgICAgcmV0dXJuIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OkNvbnRyYXN0RmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Q29udHJhc3RGaWx0ZXI7
CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIHJldHVybiBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpPcGFjaXR5RmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3BhY2l0eUZpbHRl
cjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgcmV0dXJuIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCbHVyRmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06OkJsdXJGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkRST1BfU0hBRE9XOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OkFscGhhQmx1cgotICAgICAgICAgICAgfCAocGFzcyA/IFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpDb250ZW50VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xp
ZENvbG9yOiAwKTsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpB
bHBoYUJsdXIKKyAgICAgICAgICAgIHwgKHBhc3MgPyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6Q29udGVudFRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6U29saWRDb2xv
cjogMCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybiAwOwpAQCAtODk5LDggKzkxMSw4IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpk
cmF3VXNpbmdDdXN0b21GaWx0ZXIoQml0bWFwVGV4dHVyZSYgdGFyZ2V0LCBjb25zdCBCaXRtYXBU
CiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUm
IHNhbXBsZXIsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb24mIGZpbHRlciwgaW50IHBhc3MpCiB7CiAgICAgLy8gRm9yIHN0YW5kYXJkIGZp
bHRlcnMsIHdlIGFsd2F5cyBkcmF3IHRoZSB3aG9sZSB0ZXh0dXJlIHdpdGhvdXQgdHJhbnNmb3Jt
YXRpb25zLgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMg
PSBvcHRpb25zRm9yRmlsdGVyVHlwZShmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgpLCBwYXNzKTsK
LSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCku
c2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3Jh
bShvcHRpb25zKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3B0aW9ucyBvcHRp
b25zID0gb3B0aW9uc0ZvckZpbHRlclR5cGUoZmlsdGVyLmdldE9wZXJhdGlvblR5cGUoKSwgcGFz
cyk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0
YSgpLnNoYXJlZEdMRGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAgQVNTRVJU
KHByb2dyYW0pOwogCiAgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgZmls
dGVyLCBwYXNzLCBzYW1wbGVyLmNvbnRlbnRTaXplKCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1h
cFRleHR1cmVHTCY+KGNvbnRlbnRUZXh0dXJlKS5pZCgpKTsKQEAgLTEwOTksNyArMTExMSw3IEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBkYXRhKCkuaW5pdGlhbGl6ZVN0ZW5jaWwo
KTsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRh
dGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQ
cm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9yKTsKKyAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6U29saWRD
b2xvcik7CiAKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQo
KSk7CiAgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZl
cnRleExvY2F0aW9uKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZjM0M2I0YTdmNGM0ZDAxOTcwM2Nk
MjY1MzAyMjYxYjRkYjFhNzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQxMiArMCwwIEBACi0v
KgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKLSNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0KLSNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNkZWZpbmUgU1RSSU5HSUZZKC4uLikgI19fVkFf
QVJHU19fCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBib29sIGNvbXBv
c2l0aW5nTG9nRW5hYmxlZCgpCi17Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIHJldHVybiBMb2dD
b21wb3NpdGluZy5zdGF0ZSA9PSBXVEZMb2dDaGFubmVsT247Ci0jZWxzZQotICAgIHJldHVybiBm
YWxzZTsKLSNlbmRpZgotfQotCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwg
Y29uc3QgU3RyaW5nJiB2ZXJ0ZXgsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQpCi0gICAgOiBtX2Nv
bnRleHQoY29udGV4dCkKLXsKLSAgICBtX3ZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRl
U2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKLSAgICBtX2ZyYWdtZW50
U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUik7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UobV92ZXJ0ZXhTaGFkZXIs
IHZlcnRleCk7Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UobV9mcmFnbWVudFNoYWRlciwg
ZnJhZ21lbnQpOwotICAgIG1faWQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAgICBt
X2NvbnRleHQtPmNvbXBpbGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+
Y29tcGlsZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmF0dGFjaFNo
YWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIo
bV9pZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShtX2lk
KTsKLQotICAgIGlmICghY29tcG9zaXRpbmdMb2dFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgbG9nID0gbV9jb250ZXh0LT5n
ZXRTaGFkZXJJbmZvTG9nKG1fdmVydGV4U2hhZGVyKTsKLSAgICBMT0coQ29tcG9zaXRpbmcsICJW
ZXJ0ZXggc2hhZGVyIGxvZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgpKTsKLSAgICBsb2cgPSBt
X2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgTE9HKENv
bXBvc2l0aW5nLCAiRnJhZ21lbnQgc2hhZGVyIGxvZzogJXNcbiIsIGxvZy51dGY4KCkuZGF0YSgp
KTsKLSAgICBsb2cgPSBtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG1faWQpOwotICAgIExP
RyhDb21wb3NpdGluZywgIlByb2dyYW0gbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOwot
fQotCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzZXRNYXRyaXgoR0MzRHVpbnQg
bG9jYXRpb24sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCi17Ci0gICAgR0Mz
RGZsb2F0IG1hdHJpeEFzRmxvYXRzW10gPSB7Ci0gICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4
Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKLSAgICAgICAgbWF0cml4Lm0yMSgp
LCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAotICAgICAgICBtYXRy
aXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCi0gICAg
ICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQo
KQotICAgIH07Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIDEs
IGZhbHNlLCBtYXRyaXhBc0Zsb2F0cyk7Ci19Ci0KLUdDM0R1aW50IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpnZXRMb2NhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZhcmlhYmxl
VHlwZSB0eXBlKQotewotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBHQzNEdWludD46Oml0ZXJh
dG9yIGl0ID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKLSAgICBpZiAoaXQgIT0gbV92YXJpYWJs
ZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+dmFsdWU7Ci0KLSAgICBHQzNEdWludCBsb2Nh
dGlvbiA9IDA7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBVbmlmb3JtVmFyaWFibGU6
Ci0gICAgICAgIGxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9pZCwg
bmFtZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXR0cmliVmFyaWFibGU6Ci0gICAgICAg
IGxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihtX2lkLCBuYW1lKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1fdmFyaWFibGVzLmFkZChuYW1lLCBsb2Nh
dGlvbik7Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwotfQotCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKLXsKLSAgICBQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW1JRCA9IG1faWQ7Ci0gICAgaWYgKCFwcm9ncmFtSUQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0ZXhTaGFk
ZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBt
X2NvbnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAg
IG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4
dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwotfQotCi0jZGVmaW5lIEdMU0xfRElSRUNUSVZF
KC4uLikgIiMiI19fVkFfQVJHU19fIlxuIgotc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFRlbXBs
YXRlID0KLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4Owot
ICAgICAgICB1bmlmb3JtIG1hdDQgdV9tb2RlbFZpZXdNYXRyaXg7Ci0gICAgICAgIHVuaWZvcm0g
bWF0NCB1X3Byb2plY3Rpb25NYXRyaXg7Ci0gICAgICAgIHVuaWZvcm0gbWF0NCB1X3RleHR1cmVT
cGFjZU1hdHJpeDsKLQotICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAg
dmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAgICB2YXJ5aW5nIGZsb2F0IHZfYW50
aWFsaWFzOwotCi0gICAgICAgIHZvaWQgbm9vcChpbm91dCB2ZWMyIGR1bW15UGFyYW1ldGVyKSB7
IH0KLQotICAgICAgICB2ZWM0IHRvVmlld3BvcnRTcGFjZSh2ZWMyIHBvcykgeyByZXR1cm4gdmVj
NChwb3MsIDAuLCAxLikgKiB1X21vZGVsVmlld01hdHJpeDsgfQotCi0gICAgICAgIC8vIFRoaXMg
ZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgd2UgZ2V0IGVkZ2UgdHJpYW5n
bGVzIHdpdGggY29udHJvbCBwb2ludHMsCi0gICAgICAgIC8vIGEgY29udHJvbCBwb2ludCBiZWlu
ZyB0aGUgbmVhcmVzdCBwb2ludCB0byB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG9uIHRoZSBlZGdl
LgotICAgICAgICB2b2lkIGFwcGx5QW50aWFsaWFzaW5nKGlub3V0IHZlYzIgcG9zaXRpb24pCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdlIGNvdW50IG9uIHRoZSBmYWN0IHRoYXQgcXVhZCBw
YXNzZWQgaW4gaXMgYWx3YXlzIGEgdW5pdCByZWN0LAotICAgICAgICAgICAgLy8gYW5kIHRoZSB0
cmFuc2Zvcm1hdGlvbiBtYXRyaXggYXBwbGllcyB0aGUgcmVhbCByZWN0LgotICAgICAgICAgICAg
Y29uc3QgdmVjMiBjZW50ZXIgPSB2ZWMyKDAuNSwgMC41KTsKLSAgICAgICAgICAgIGNvbnN0IGZs
b2F0IGFudGlhbGlhc0luZmxhdGlvbkRpc3RhbmNlID0gMS47Ci0KLSAgICAgICAgICAgIC8vIFdl
IHBhc3MgdGhlIGNvbnRyb2wgcG9pbnQgYXMgdGhlIHp3IGNvb3JkaW5hdGVzIG9mIHRoZSB2ZXJ0
ZXguCi0gICAgICAgICAgICAvLyBUaGUgY29udHJvbCBwb2ludCBpcyB0aGUgcG9pbnQgb24gdGhl
IGVkZ2UgY2xvc2VzdCB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAgICAgICAgICAgIC8vIFRo
ZSBjb250cm9sIHBvaW50IGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYW50aWFsaWFzIHZhbHVlLgot
ICAgICAgICAgICAgdmVjMiBjb250cm9sUG9pbnQgPSBhX3ZlcnRleC56dzsKLQotICAgICAgICAg
ICAgLy8gRmlyc3Qgd2UgY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBpbiB2aWV3cG9ydCBzcGFjZS4K
LSAgICAgICAgICAgIHZlYzQgY2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gdG9WaWV3cG9y
dFNwYWNlKGNlbnRlcik7Ci0gICAgICAgICAgICB2ZWM0IGNvbnRyb2xQb2ludEluVmlld3BvcnRD
b29yZGluYXRlcyA9IHRvVmlld3BvcnRTcGFjZShjb250cm9sUG9pbnQpOwotICAgICAgICAgICAg
ZmxvYXQgdmlld3BvcnRTcGFjZURpc3RhbmNlID0gZGlzdGFuY2UoY2VudGVySW5WaWV3cG9ydENv
b3JkaW5hdGVzLCBjb250cm9sUG9pbnRJblZpZXdwb3J0Q29vcmRpbmF0ZXMpOwotCi0gICAgICAg
ICAgICAvLyBXZSBhZGQgdGhlIGluZmxhdGlvbiBkaXN0YW5jZSB0byB0aGUgY29tcHV0ZWQgZGlz
dGFuY2UsIGFuZCBjb21wdXRlIHRoZSByYXRpby4KLSAgICAgICAgICAgIGZsb2F0IGluZmxhdGlv
blJhdGlvID0gKHZpZXdwb3J0U3BhY2VEaXN0YW5jZSArIGFudGlhbGlhc0luZmxhdGlvbkRpc3Rh
bmNlKSAvIHZpZXdwb3J0U3BhY2VEaXN0YW5jZTsKLQotICAgICAgICAgICAgLy8gdl9hbnRpYWxp
YXMgbmVlZHMgdG8gYmUgMCBmb3IgdGhlIG91dGVyIGVkZ2UgYW5kIDEuIGZvciB0aGUgaW5uZXIg
ZWRnZS4KLSAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBjb250cm9sUG9pbnQgaXMgZXF1YWwgdG8g
dGhlIHBvc2l0aW9uIGluIHRoZSBlZGdlIHZlcnRpY2VzLCB0aGUgdmFsdWUgaXMgYWx3YXlzIDAg
Zm9yIHRob3NlLgotICAgICAgICAgICAgLy8gRm9yIHRoZSBjZW50ZXIgcG9pbnQsIHRoZSBkaXN0
YW5jZSBpcyBhbHdheXMgMC41LCBzbyB3ZSBub3JtYWxpemUgdG8gMS4gYnkgbXVsdGlwbHlpbmcg
YnkgMi4KLSAgICAgICAgICAgIC8vIEJ5IG11bHRwbHlpbmcgYnkgaW5mbGF0aW9uUmF0aW8gYW5k
IGRpdmlkaW5nIGJ5IChpbmZsYXRpb25SYXRpbyAtIDEpLAotICAgICAgICAgICAgLy8gV2UgbWFr
ZSBzdXJlIHRoYXQgdGhlIHZhcnlpbmcgaW50ZXJwb2xhdGVzIGJldHdlZW4gMCAob3V0ZXIgZWRn
ZSksIDEgKGlubmVyIGVkZ2UpIGFuZCBuID4gMSAoY2VudGVyKS4KLSAgICAgICAgICAgIHZfYW50
aWFsaWFzID0gZGlzdGFuY2UoY29udHJvbFBvaW50LCBwb3NpdGlvbikgKiAyLiAqIGluZmxhdGlv
blJhdGlvIC8gKGluZmxhdGlvblJhdGlvIC0gMS4pOwotCi0gICAgICAgICAgICAvLyBOb3cgaW5m
bGF0ZSB0aGUgYWN0dWFsIHBvc2l0aW9uLiBCeSB1c2luZyB0aGlzIGZvcm11bGEgaW5zdGVhZCBv
ZiBpbmZsYXRpbmcgcG9zaXRpb24gZGlyZWN0bHksCi0gICAgICAgICAgICAvLyB3ZSBlbnN1cmUg
dGhhdCB0aGUgY2VudGVyIHZlcnRleCBpcyBuZXZlciBpbmZsYXRlZC4KLSAgICAgICAgICAgIHBv
c2l0aW9uID0gY2VudGVyICsgKHBvc2l0aW9uIC0gY2VudGVyKSAqIGluZmxhdGlvblJhdGlvOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHZlYzIgcG9zaXRpb24gPSBhX3ZlcnRleC54eTsKLSAgICAgICAgICAgIGFwcGx5QW50aWFs
aWFzaW5nSWZOZWVkZWQocG9zaXRpb24pOwotCi0gICAgICAgICAgICAvLyBUaGUgdGV4dHVyZSBw
b3NpdGlvbiBuZWVkcyB0byBiZSBjbGFtcGVkIHRvIDAuLjEgYmVmb3JlIHRoZSB0ZXh0dXJlIG1h
dHJpeCBpcyBhcHBsaWVkLgotICAgICAgICAgICAgdmVjNCBjbGFtcGVkUG9zaXRpb24gPSBjbGFt
cCh2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pLCAwLiwgMS4pOwotICAgICAgICAgICAgdl90ZXhDb29y
ZCA9ICh1X3RleHR1cmVTcGFjZU1hdHJpeCAqIGNsYW1wZWRQb3NpdGlvbikueHk7Ci0KLSAgICAg
ICAgICAgIHZfbWFza1RleENvb3JkID0gcG9zaXRpb247Ci0gICAgICAgICAgICBnbF9Qb3NpdGlv
biA9IHVfcHJvamVjdGlvbk1hdHJpeCAqIHVfbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlv
biwgMC4sIDEuKTsKLSAgICAgICAgfQotICAgICk7Ci0KLSNkZWZpbmUgUkVDVF9URVhUVVJFX0RJ
UkVDVElWRSBcCi0gICAgR0xTTF9ESVJFQ1RJVkUoaWZkZWYgRU5BQkxFX1JlY3QpIFwKLSAgICAg
ICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIyRFJlY3QpIFwKLSAg
ICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNhbXBsZXJGdW5jdGlvbiB0ZXh0dXJlMkRSZWN0
KSBcCi0gICAgR0xTTF9ESVJFQ1RJVkUoZWxzZSkgXAotICAgICAgICBHTFNMX0RJUkVDVElWRShk
ZWZpbmUgU2FtcGxlclR5cGUgc2FtcGxlcjJEKSBcCi0gICAgICAgIEdMU0xfRElSRUNUSVZFKGRl
ZmluZSBTYW1wbGVyRnVuY3Rpb24gdGV4dHVyZTJEKSBcCi0gICAgR0xTTF9ESVJFQ1RJVkUoZW5k
aWYpCi0KLSNkZWZpbmUgRU5BQkxFX0FQUExJRVIoTmFtZSkgIiNkZWZpbmUgRU5BQkxFXyIjTmFt
ZSJcbiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgYXBwbHkiI05hbWUiXG4iCi0jZGVmaW5l
IERJU0FCTEVfQVBQTElFUihOYW1lKSAiI2RlZmluZSBhcHBseSIjTmFtZSJJZk5lZWRlZCBub29w
XG4iCi0jZGVmaW5lIEJMVVJfQ09OU1RBTlRTIFwKLSAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUg
R0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEggMTEpIFwKLSAgICBHTFNMX0RJUkVDVElWRShkZWZp
bmUgR0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yKQotCi0KLXN0YXRpYyBjb25zdCBjaGFyKiBmcmFn
bWVudFRlbXBsYXRlID0KLSAgICBSRUNUX1RFWFRVUkVfRElSRUNUSVZFCi0gICAgQkxVUl9DT05T
VEFOVFMKLSAgICBTVFJJTkdJRlkoCi0gICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owot
ICAgICAgICB1bmlmb3JtIFNhbXBsZXJUeXBlIHNfc2FtcGxlcjsKLSAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkQgc19tYXNrOwotICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX2NvbnRlbnRUZXh0
dXJlOwotICAgICAgICB1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdmFyeWluZyBm
bG9hdCB2X2FudGlhbGlhczsKLSAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAg
ICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29yZDsKLSAgICAgICAgdW5pZm9ybSBmbG9hdCB1
X2ZpbHRlckFtb3VudDsKLSAgICAgICAgdW5pZm9ybSB2ZWMyIHVfYmx1clJhZGl1czsKLSAgICAg
ICAgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OwotICAgICAgICB1bmlmb3JtIHZlYzQgdV9j
b2xvcjsKLSAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRIXTsKLQotICAgICAgICB2b2lkIG5vb3AoaW5vdXQgdmVjNCBkdW1teVBh
cmFtZXRlcikgeyB9Ci0KLSAgICAgICAgZmxvYXQgYW50aWFsaWFzKCkgeyByZXR1cm4gc21vb3Ro
c3RlcCh2X2FudGlhbGlhcywgMC4sIDEuKTsgfQotCi0gICAgICAgIHZvaWQgYXBwbHlUZXh0dXJl
KGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCB2
X3RleENvb3JkKTsgfQotICAgICAgICB2b2lkIGFwcGx5T3BhY2l0eShpbm91dCB2ZWM0IGNvbG9y
KSB7IGNvbG9yICo9IHVfb3BhY2l0eTsgfQotICAgICAgICB2b2lkIGFwcGx5QW50aWFsaWFzaW5n
KGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gYW50aWFsaWFzKCk7IH0KLSAgICAgICAgdm9p
ZCBhcHBseU1hc2soaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB0ZXh0dXJlMkQoc19tYXNr
LCB2X21hc2tUZXhDb29yZCkuYTsgfQotCi0gICAgICAgIHZvaWQgYXBwbHlHcmF5c2NhbGVGaWx0
ZXIoaW5vdXQgdmVjNCBjb2xvcikKLSAgICAgICAgewotICAgICAgICAgICAgZmxvYXQgYW1vdW50
ID0gMS4wIC0gdV9maWx0ZXJBbW91bnQ7Ci0gICAgICAgICAgICBjb2xvciA9IHZlYzQoKDAuMjEy
NiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3Vu
dCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLAotICAg
ICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcx
NTIgKyAwLjI4NDggKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91
bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50
KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4w
NzIyICsgMC45Mjc4ICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgY29sb3Iu
YSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFwcGx5U2VwaWFGaWx0ZXIoaW5vdXQgdmVj
NCBjb2xvcikKLSAgICAgICAgewotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9m
aWx0ZXJBbW91bnQ7Ci0gICAgICAgICAgICBjb2xvciA9IHZlYzQoKDAuMzkzICsgMC42MDcgKiBh
bW91bnQpICogY29sb3IuciArICgwLjc2OSAtIDAuNzY5ICogYW1vdW50KSAqIGNvbG9yLmcgKyAo
MC4xODkgLSAwLjE4OSAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICgwLjM0
OSAtIDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMxNCAqIGFtb3VudCkg
KiBjb2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAgICAg
ICAgICAgICAoMC4yNzIgLSAwLjI3MiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNTM0IC0gMC41
MzQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjEzMSArIDAuODY5ICogYW1vdW50KSAqIGNvbG9y
LmIsCi0gICAgICAgICAgICAgICAgY29sb3IuYSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IGFwcGx5U2F0dXJhdGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKLSAgICAgICAgewotICAgICAg
ICAgICAgY29sb3IgPSB2ZWM0KCgwLjIxMyArIDAuNzg3ICogdV9maWx0ZXJBbW91bnQpICogY29s
b3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuZyArICgwLjA3
MiAtIDAuMDcyICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAo
MC4yMTMgLSAwLjIxMyAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgKyAwLjI4
NSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfZmlsdGVy
QW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2Zp
bHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2ZpbHRlckFtb3VudCkg
KiBjb2xvci5nICsgKDAuMDcyICsgMC45MjggKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLAot
ICAgICAgICAgICAgICAgIGNvbG9yLmEpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhcHBs
eUh1ZVJvdGF0ZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmbG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7Ci0gICAgICAgICAgICBmbG9hdCBj
ID0gY29zKHVfZmlsdGVyQW1vdW50ICogcGkgLyAxODAuMCk7Ci0gICAgICAgICAgICBmbG9hdCBz
ID0gc2luKHVfZmlsdGVyQW1vdW50ICogcGkgLyAxODAuMCk7Ci0gICAgICAgICAgICBjb2xvciA9
IHZlYzQoY29sb3IuciAqICgwLjIxMyArIGMgKiAwLjc4NyAtIHMgKiAwLjIxMykgKyBjb2xvci5n
ICogKDAuNzE1IC0gYyAqIDAuNzE1IC0gcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgLSBj
ICogMC4wNzIgKyBzICogMC45MjgpLAotICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMg
LSBjICogMC4yMTMgKyBzICogMC4xNDMpICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSAr
IHMgKiAwLjE0MCkgKyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwK
LSAgICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAqIDAuNzg3
KSArICBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIg
KiAoMC4wNzIgKyBjICogMC45MjggKyBzICogMC4wNzIpLAotICAgICAgICAgICAgICAgIGNvbG9y
LmEpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgaW52ZXJ0KGZsb2F0IG4pIHsgcmV0dXJu
ICgxLjAgLSBuKSAqIHVfZmlsdGVyQW1vdW50ICsgbiAqICgxLjAgLSB1X2ZpbHRlckFtb3VudCk7
IH0KLSAgICAgICAgdm9pZCBhcHBseUludmVydEZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb2xvciA9IHZlYzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZlcnQo
Y29sb3IuZyksIGludmVydChjb2xvci5iKSwgY29sb3IuYSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQotICAgICAgICB7
Ci0gICAgICAgICAgICBjb2xvciA9IHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfZmlsdGVyQW1v
dW50KSwgY29sb3IuYSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBjb250cmFzdChmbG9h
dCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2ZpbHRlckFtb3VudCArIDAuNTsgfQotICAgICAg
ICB2b2lkIGFwcGx5Q29udHJhc3RGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKLSAgICAgICAgewot
ICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGNvbnRyYXN0KGNvbG9yLnIpLCBjb250cmFzdChjb2xv
ci5nKSwgY29udHJhc3QoY29sb3IuYiksIGNvbG9yLmEpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBhcHBseU9wYWNpdHlGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKLSAgICAgICAgewotICAg
ICAgICAgICAgY29sb3IgPSB2ZWM0KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEg
KiB1X2ZpbHRlckFtb3VudCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2ZWM0IHNhbXBsZUNvbG9y
QXRSYWRpdXMoZmxvYXQgcmFkaXVzKQotICAgICAgICB7Ci0gICAgICAgICAgICB2ZWMyIGNvb3Jk
ID0gdl90ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsKLSAgICAgICAgICAgIHJldHVy
biBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCBjb29yZCkgKiBmbG9hdChjb29yZC54ID4gMC4g
JiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZmxvYXQgc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdCByYWRpdXMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkIC0gdV9zaGFkb3dP
ZmZzZXQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7Ci0gICAgICAgICAgICByZXR1cm4gU2FtcGxl
ckZ1bmN0aW9uKHNfc2FtcGxlciwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29v
cmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwotICAgICAgICB9Ci0K
LSAgICAgICAgdm9pZCBhcHBseUJsdXJGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKLSAgICAgICAg
ewotICAgICAgICAgICAgdmVjNCB0b3RhbCA9IHNhbXBsZUNvbG9yQXRSYWRpdXMoMC4pICogdV9n
YXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJ
QU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewotICAgICAgICAgICAgICAgIHRvdGFsICs9IHNh
bXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dh
dXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUNvbG9yQXRS
YWRpdXMoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5L
ZXJuZWxbaV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbG9yID0gdG90YWw7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkIGFwcGx5QWxwaGFCbHVyKGlub3V0IHZlYzQgY29sb3Ip
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGFBdFJhZGl1
cygwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7
IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
dG90YWwgKz0gc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9T
VEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAgICAgdG90YWwgKz0gc2Ft
cGxlQWxwaGFBdFJhZGl1cyhmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICog
dV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29sb3Ig
Kj0gdG90YWw7Ci0gICAgICAgIH0KLQotICAgICAgICB2ZWM0IHNvdXJjZU92ZXIodmVjNCBzcmMs
IHZlYzQgZHN0KSB7IHJldHVybiBzcmMgKyBkc3QgKiAoMS4gLSBkc3QuYSk7IH0KLQotICAgICAg
ICB2b2lkIGFwcGx5Q29udGVudFRleHR1cmUoaW5vdXQgdmVjNCBjb2xvcikKLSAgICAgICAgewot
ICAgICAgICAgICAgdmVjNCBjb250ZW50Q29sb3IgPSB0ZXh0dXJlMkQoc19jb250ZW50VGV4dHVy
ZSwgdl90ZXhDb29yZCk7Ci0gICAgICAgICAgICBjb2xvciA9IHNvdXJjZU92ZXIoY29udGVudENv
bG9yLCBjb2xvcik7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFwcGx5U29saWRDb2xvcihp
bm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHVfY29sb3I7IH0KLQotICAgICAgICB2b2lkIG1h
aW4odm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgdmVjNCBjb2xvciA9IHZlYzQoMS4sIDEu
LCAxLiwgMS4pOwotICAgICAgICAgICAgYXBwbHlUZXh0dXJlSWZOZWVkZWQoY29sb3IpOwotICAg
ICAgICAgICAgYXBwbHlTb2xpZENvbG9ySWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAgYXBw
bHlBbnRpYWxpYXNpbmdJZk5lZWRlZChjb2xvcik7Ci0gICAgICAgICAgICBhcHBseU1hc2tJZk5l
ZWRlZChjb2xvcik7Ci0gICAgICAgICAgICBhcHBseU9wYWNpdHlJZk5lZWRlZChjb2xvcik7Ci0g
ICAgICAgICAgICBhcHBseUdyYXlzY2FsZUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKLSAgICAgICAg
ICAgIGFwcGx5U2VwaWFGaWx0ZXJJZk5lZWRlZChjb2xvcik7Ci0gICAgICAgICAgICBhcHBseVNh
dHVyYXRlRmlsdGVySWZOZWVkZWQoY29sb3IpOwotICAgICAgICAgICAgYXBwbHlIdWVSb3RhdGVG
aWx0ZXJJZk5lZWRlZChjb2xvcik7Ci0gICAgICAgICAgICBhcHBseUludmVydEZpbHRlcklmTmVl
ZGVkKGNvbG9yKTsKLSAgICAgICAgICAgIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcklmTmVlZGVkKGNv
bG9yKTsKLSAgICAgICAgICAgIGFwcGx5Q29udHJhc3RGaWx0ZXJJZk5lZWRlZChjb2xvcik7Ci0g
ICAgICAgICAgICBhcHBseU9wYWNpdHlGaWx0ZXJJZk5lZWRlZChjb2xvcik7Ci0gICAgICAgICAg
ICBhcHBseUJsdXJGaWx0ZXJJZk5lZWRlZChjb2xvcik7Ci0gICAgICAgICAgICBhcHBseUFscGhh
Qmx1cklmTmVlZGVkKGNvbG9yKTsKLSAgICAgICAgICAgIGFwcGx5Q29udGVudFRleHR1cmVJZk5l
ZWRlZChjb2xvcik7Ci0gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKLSAgICAgICAg
fQotICAgICk7Ci0KLQotc3RhdGljIHZvaWQgZ2V0U2hhZGVyU3BlYyhUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zLCBTdHJpbmcmIHZlcnRleFNvdXJjZSwgU3RyaW5n
JiBmcmFnbWVudFNvdXJjZSkKLXsKLQotICAgIFN0cmluZ0J1aWxkZXIgc2hhZGVyQnVpbGRlcjsK
LSNkZWZpbmUgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFwcGxpZXIpIFwKLSAgICBzaGFkZXJC
dWlsZGVyLmFwcGVuZChcCi0gICAgICAgIChvcHRpb25zICYgVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OkFwcGxpZXIpID8gRU5BQkxFX0FQUExJRVIoQXBwbGllcikgOiBESVNBQkxFX0FQUExJ
RVIoQXBwbGllcikpCi0KLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoVGV4dHVyZSk7Ci0g
ICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFJlY3QpOwotICAgIFNFVF9BUFBMSUVSX0ZST01f
T1BUSU9OUyhTb2xpZENvbG9yKTsKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoT3BhY2l0
eSk7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE1hc2spOwotICAgIFNFVF9BUFBMSUVS
X0ZST01fT1BUSU9OUyhBbnRpYWxpYXNpbmcpOwotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9O
UyhHcmF5c2NhbGVGaWx0ZXIpOwotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTZXBpYUZp
bHRlcik7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNhdHVyYXRlRmlsdGVyKTsKLSAg
ICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoSHVlUm90YXRlRmlsdGVyKTsKLSAgICBTRVRfQVBQ
TElFUl9GUk9NX09QVElPTlMoQnJpZ2h0bmVzc0ZpbHRlcik7Ci0gICAgU0VUX0FQUExJRVJfRlJP
TV9PUFRJT05TKENvbnRyYXN0RmlsdGVyKTsKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMo
SW52ZXJ0RmlsdGVyKTsKLSAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoT3BhY2l0eUZpbHRl
cik7Ci0gICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJsdXJGaWx0ZXIpOwotICAgIFNFVF9B
UFBMSUVSX0ZST01fT1BUSU9OUyhBbHBoYUJsdXIpOwotICAgIFNFVF9BUFBMSUVSX0ZST01fT1BU
SU9OUyhDb250ZW50VGV4dHVyZSk7Ci0gICAgU3RyaW5nQnVpbGRlciB2ZXJ0ZXhCdWlsZGVyOwot
ICAgIHZlcnRleEJ1aWxkZXIuYXBwZW5kKHNoYWRlckJ1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAg
dmVydGV4QnVpbGRlci5hcHBlbmQodmVydGV4VGVtcGxhdGUpOwotICAgIHNoYWRlckJ1aWxkZXIu
YXBwZW5kKGZyYWdtZW50VGVtcGxhdGUpOwotICAgIHZlcnRleFNvdXJjZSA9IHZlcnRleEJ1aWxk
ZXIudG9TdHJpbmcoKTsKLSAgICBmcmFnbWVudFNvdXJjZSA9IHNoYWRlckJ1aWxkZXIudG9TdHJp
bmcoKTsKLX0KLQotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCi17Ci19Ci0KLVRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIoKQotewotfQotCi1QYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZ3JhbShPcHRp
b25zIG9wdGlvbnMpCi17Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA6Oml0ZXJh
dG9yIGl0ID0gbV9wcm9ncmFtcy5maW5kKG9wdGlvbnMpOwotICAgIGlmIChpdCAhPSBtX3Byb2dy
YW1zLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwotCi0gICAgU3RyaW5nIHZlcnRl
eFNoYWRlcjsKLSAgICBTdHJpbmcgZnJhZ21lbnRTaGFkZXI7Ci0gICAgZ2V0U2hhZGVyU3BlYyhv
cHRpb25zLCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyKTsKLSAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6Y3JlYXRlKG1fY29udGV4dCwgdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcik7Ci0gICAg
bV9wcm9ncmFtcy5hZGQob3B0aW9ucywgcHJvZ3JhbSk7Ci0gICAgcmV0dXJuIHByb2dyYW07Ci19
Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMTc0OTgzZGRjNWU2NjQxNzk4ZDg5OWQ2OWM0
ZGVlZmFlNTZmZjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSBDb3B5
cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCi0gQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0KLSBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpZm5kZWYgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaAotI2RlZmluZSBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcl9oCi0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIK
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hh
c2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotI2RlZmluZSBURVhNQVBfREVDTEFSRV9WQVJJ
QUJMRShBY2Nlc3NvciwgTmFtZSwgVHlwZSkgR0MzRHVpbnQgQWNjZXNzb3IjI0xvY2F0aW9uKCkg
eyBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIG5hbWUoTmFtZSk7IHJldHVybiBnZXRMb2NhdGlv
bihuYW1lLCBUeXBlKTsgfQotI2RlZmluZSBURVhNQVBfREVDTEFSRV9VTklGT1JNKEFjY2Vzc29y
KSBURVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgInVfIiNBY2Nlc3NvciwgVW5pZm9y
bVZhcmlhYmxlKQotI2RlZmluZSBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUoQWNjZXNzb3IpIFRF
WE1BUF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCAiYV8iI0FjY2Vzc29yLCBBdHRyaWJWYXJp
YWJsZSkKLSNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihBY2Nlc3NvcikgVEVYTUFQX0RF
Q0xBUkVfVkFSSUFCTEUoQWNjZXNzb3IsICJzXyIjQWNjZXNzb3IsIFVuaWZvcm1WYXJpYWJsZSkK
LQotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gewotcHVibGljOgotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbUlEKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHZlcnRleCwgY29uc3QgU3Ry
aW5nJiBmcmFnbWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4LCBmcmFnbWVudCkpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7Ci0KLSAgICBURVhN
QVBfREVDTEFSRV9BVFRSSUJVVEUodmVydGV4KQotCi0gICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9S
TShtb2RlbFZpZXdNYXRyaXgpCi0gICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShwcm9qZWN0aW9u
TWF0cml4KQotICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0odGV4dHVyZVNwYWNlTWF0cml4KQot
ICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0ob3BhY2l0eSkKLSAgICBURVhNQVBfREVDTEFSRV9V
TklGT1JNKGNvbG9yKQotICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZXhwYW5kZWRRdWFkRWRn
ZXNJblNjcmVlblNwYWNlKQotICAgIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoc2FtcGxlcikKLSAg
ICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKG1hc2spCi0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
Ci0gICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShmaWx0ZXJBbW91bnQpCi0gICAgVEVYTUFQX0RF
Q0xBUkVfVU5JRk9STShnYXVzc2lhbktlcm5lbCkKLSAgICBURVhNQVBfREVDTEFSRV9VTklGT1JN
KGJsdXJSYWRpdXMpCi0gICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShzaGFkb3dPZmZzZXQpCi0g
ICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihjb250ZW50VGV4dHVyZSkKLSNlbmRpZgotCi0gICAg
dm9pZCBzZXRNYXRyaXgoR0MzRHVpbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0K
LXByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4sIGNvbnN0IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBT
dHJpbmcmIGZyYWdtZW50U2hhZGVyU291cmNlKTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVy
dGV4U2hhZGVyOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRlcjsKLQotICAg
IGVudW0gVmFyaWFibGVUeXBlIHsgVW5pZm9ybVZhcmlhYmxlLCBBdHRyaWJWYXJpYWJsZSB9Owot
ICAgIEdDM0R1aW50IGdldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYsIFZhcmlhYmxlVHlw
ZSk7Ci0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKLSAgICBQbGF0
Zm9ybTNET2JqZWN0IG1faWQ7Ci0gICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEdDM0R1aW50PiBt
X3ZhcmlhYmxlczsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHsKLXB1
YmxpYzoKLSAgICBlbnVtIE9wdGlvbiB7Ci0gICAgICAgIFRleHR1cmUgICAgICAgICAgPSAxTCA8
PCAwLAotICAgICAgICBSZWN0ICAgICAgICAgICAgID0gMUwgPDwgMSwKLSAgICAgICAgU29saWRD
b2xvciAgICAgICA9IDFMIDw8IDIsCi0gICAgICAgIE9wYWNpdHkgICAgICAgICAgPSAxTCA8PCAz
LAotICAgICAgICBNYXNrICAgICAgICAgICAgID0gMUwgPDwgNCwKLSAgICAgICAgQW50aWFsaWFz
aW5nICAgICA9IDFMIDw8IDUsCi0gICAgICAgIEdyYXlzY2FsZUZpbHRlciAgPSAxTCA8PCA2LAot
ICAgICAgICBTZXBpYUZpbHRlciAgICAgID0gMUwgPDwgNywKLSAgICAgICAgU2F0dXJhdGVGaWx0
ZXIgICA9IDFMIDw8IDgsCi0gICAgICAgIEh1ZVJvdGF0ZUZpbHRlciAgPSAxTCA8PCA5LAotICAg
ICAgICBCcmlnaHRuZXNzRmlsdGVyID0gMUwgPDwgMTAsCi0gICAgICAgIENvbnRyYXN0RmlsdGVy
ICAgPSAxTCA8PCAxMSwKLSAgICAgICAgSW52ZXJ0RmlsdGVyICAgICA9IDFMIDw8IDEyLAotICAg
ICAgICBPcGFjaXR5RmlsdGVyICAgID0gMUwgPDwgMTMsCi0gICAgICAgIEJsdXJGaWx0ZXIgICAg
ICAgPSAxTCA8PCAxNCwKLSAgICAgICAgQWxwaGFCbHVyICAgICAgICA9IDFMIDw8IDE1LAotICAg
ICAgICBDb250ZW50VGV4dHVyZSAgID0gMUwgPDwgMTYKLSAgICB9OwotCi0gICAgdHlwZWRlZiB1
bnNpZ25lZCBPcHRpb25zOwotCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKSB7IH0K
LSAgICBleHBsaWNpdCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGljc0NvbnRleHQz
RCopOwotICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCk7Ci0KLSAgICBQ
YXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQcm9ncmFtKE9w
dGlvbnMpOwotCi1wcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxPcHRpb25zLCBSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1N
YXA7Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAgbV9wcm9ncmFtczsKLSAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKLX07Ci0KLX0KLSNlbmRpZgotCi0j
ZW5kaWYgLy8gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDMwYzJiMDJjMmU0NzMyOTI3NTNj
YzMzZjM3MjU0YjA3YzY4OTcwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKQEAg
LTAsMCArMSwzOTAgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgorIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgIkxlbmd0aEZ1bmN0
aW9ucy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wu
aCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworI2RlZmluZSBTVFJJ
TkdJRlkoLi4uKSAjX19WQV9BUkdTX18KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
aW5saW5lIGJvb2wgY29tcG9zaXRpbmdMb2dFbmFibGVkKCkKK3sKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgcmV0dXJuIExvZ0NvbXBvc2l0aW5nLnN0YXRlID09IFdURkxvZ0NoYW5uZWxPbjsKKyNl
bHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK1RleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHZlcnRleCwgY29uc3QgU3RyaW5nJiBmcmFn
bWVudCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQoreworICAgIG1fdmVydGV4U2hhZGVyID0g
bV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIp
OworICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJj
ZShtX3ZlcnRleFNoYWRlciwgdmVydGV4KTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSht
X2ZyYWdtZW50U2hhZGVyLCBmcmFnbWVudCk7CisgICAgbV9pZCA9IG1fY29udGV4dC0+Y3JlYXRl
UHJvZ3JhbSgpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7
CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1f
Y29udGV4dC0+YXR0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRl
eHQtPmF0dGFjaFNoYWRlcihtX2lkLCBtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQt
PmxpbmtQcm9ncmFtKG1faWQpOworCisgICAgaWYgKCFjb21wb3NpdGluZ0xvZ0VuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBs
b2cgPSBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cobV92ZXJ0ZXhTaGFkZXIpOworICAgIExP
RyhDb21wb3NpdGluZywgIlZlcnRleCBzaGFkZXIgbG9nOiAlc1xuIiwgbG9nLnV0ZjgoKS5kYXRh
KCkpOworICAgIGxvZyA9IG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhtX2ZyYWdtZW50U2hh
ZGVyKTsKKyAgICBMT0coQ29tcG9zaXRpbmcsICJGcmFnbWVudCBzaGFkZXIgbG9nOiAlc1xuIiwg
bG9nLnV0ZjgoKS5kYXRhKCkpOworICAgIGxvZyA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9M
b2cobV9pZCk7CisgICAgTE9HKENvbXBvc2l0aW5nLCAiUHJvZ3JhbSBsb2c6ICVzXG4iLCBsb2cu
dXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnNl
dE1hdHJpeChHQzNEdWludCBsb2NhdGlvbiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dHJpeCkKK3sKKyAgICBHQzNEZmxvYXQgbWF0cml4QXNGbG9hdHNbXSA9IHsKKyAgICAgICAgbWF0
cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAorICAg
ICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0
KCksCisgICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1h
dHJpeC5tMzQoKSwKKyAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5t
NDMoKSwgbWF0cml4Lm00NCgpCisgICAgfTsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgMSwgZmFsc2UsIG1hdHJpeEFzRmxvYXRzKTsKK30KKworR0MzRHVpbnQg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgVmFyaWFibGVUeXBlIHR5cGUpCit7CisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcs
IEdDM0R1aW50Pjo6aXRlcmF0b3IgaXQgPSBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpOworICAgIGlm
IChpdCAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKwor
ICAgIEdDM0R1aW50IGxvY2F0aW9uID0gMDsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IFVuaWZvcm1WYXJpYWJsZToKKyAgICAgICAgbG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZv
cm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHRyaWJW
YXJpYWJsZToKKyAgICAgICAgbG9jYXRpb24gPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9u
KG1faWQsIG5hbWUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV92YXJpYWJs
ZXMuYWRkKG5hbWUsIGxvY2F0aW9uKTsKKyAgICByZXR1cm4gbG9jYXRpb247Cit9CisKK1RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQorewor
ICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEID0gbV9pZDsKKyAgICBpZiAoIXByb2dyYW1J
RCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIocHJvZ3Jh
bUlELCBtX3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV92ZXJ0
ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV9mcmFn
bWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRl
cik7CisgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKHByb2dyYW1JRCk7Cit9CisKKyNkZWZp
bmUgR0xTTF9ESVJFQ1RJVkUoLi4uKSAiIyIjX19WQV9BUkdTX18iXG4iCitzdGF0aWMgY29uc3Qg
Y2hhciogdmVydGV4VGVtcGxhdGUgPQorICAgIFNUUklOR0lGWSgKKyAgICAgICAgYXR0cmlidXRl
IHZlYzQgYV92ZXJ0ZXg7CisgICAgICAgIHVuaWZvcm0gbWF0NCB1X21vZGVsVmlld01hdHJpeDsK
KyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfcHJvamVjdGlvbk1hdHJpeDsKKyAgICAgICAgdW5pZm9y
bSBtYXQ0IHVfdGV4dHVyZVNwYWNlTWF0cml4OworCisgICAgICAgIHZhcnlpbmcgdmVjMiB2X3Rl
eENvb3JkOworICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgIHZh
cnlpbmcgZmxvYXQgdl9hbnRpYWxpYXM7CisKKyAgICAgICAgdm9pZCBub29wKGlub3V0IHZlYzIg
ZHVtbXlQYXJhbWV0ZXIpIHsgfQorCisgICAgICAgIHZlYzQgdG9WaWV3cG9ydFNwYWNlKHZlYzIg
cG9zKSB7IHJldHVybiB2ZWM0KHBvcywgMC4sIDEuKSAqIHVfbW9kZWxWaWV3TWF0cml4OyB9CisK
KyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB3
ZSBnZXQgZWRnZSB0cmlhbmdsZXMgd2l0aCBjb250cm9sIHBvaW50cywKKyAgICAgICAgLy8gYSBj
b250cm9sIHBvaW50IGJlaW5nIHRoZSBuZWFyZXN0IHBvaW50IHRvIHRoZSBjb29yZGluYXRlIHRo
YXQgaXMgb24gdGhlIGVkZ2UuCisgICAgICAgIHZvaWQgYXBwbHlBbnRpYWxpYXNpbmcoaW5vdXQg
dmVjMiBwb3NpdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UgY291bnQgb24gdGhl
IGZhY3QgdGhhdCBxdWFkIHBhc3NlZCBpbiBpcyBhbHdheXMgYSB1bml0IHJlY3QsCisgICAgICAg
ICAgICAvLyBhbmQgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBhcHBsaWVzIHRoZSByZWFsIHJl
Y3QuCisgICAgICAgICAgICBjb25zdCB2ZWMyIGNlbnRlciA9IHZlYzIoMC41LCAwLjUpOworICAg
ICAgICAgICAgY29uc3QgZmxvYXQgYW50aWFsaWFzSW5mbGF0aW9uRGlzdGFuY2UgPSAxLjsKKwor
ICAgICAgICAgICAgLy8gV2UgcGFzcyB0aGUgY29udHJvbCBwb2ludCBhcyB0aGUgencgY29vcmRp
bmF0ZXMgb2YgdGhlIHZlcnRleC4KKyAgICAgICAgICAgIC8vIFRoZSBjb250cm9sIHBvaW50IGlz
IHRoZSBwb2ludCBvbiB0aGUgZWRnZSBjbG9zZXN0IHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLgor
ICAgICAgICAgICAgLy8gVGhlIGNvbnRyb2wgcG9pbnQgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBh
bnRpYWxpYXMgdmFsdWUuCisgICAgICAgICAgICB2ZWMyIGNvbnRyb2xQb2ludCA9IGFfdmVydGV4
Lnp3OworCisgICAgICAgICAgICAvLyBGaXJzdCB3ZSBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGlu
IHZpZXdwb3J0IHNwYWNlLgorICAgICAgICAgICAgdmVjNCBjZW50ZXJJblZpZXdwb3J0Q29vcmRp
bmF0ZXMgPSB0b1ZpZXdwb3J0U3BhY2UoY2VudGVyKTsKKyAgICAgICAgICAgIHZlYzQgY29udHJv
bFBvaW50SW5WaWV3cG9ydENvb3JkaW5hdGVzID0gdG9WaWV3cG9ydFNwYWNlKGNvbnRyb2xQb2lu
dCk7CisgICAgICAgICAgICBmbG9hdCB2aWV3cG9ydFNwYWNlRGlzdGFuY2UgPSBkaXN0YW5jZShj
ZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMsIGNvbnRyb2xQb2ludEluVmlld3BvcnRDb29yZGlu
YXRlcyk7CisKKyAgICAgICAgICAgIC8vIFdlIGFkZCB0aGUgaW5mbGF0aW9uIGRpc3RhbmNlIHRv
IHRoZSBjb21wdXRlZCBkaXN0YW5jZSwgYW5kIGNvbXB1dGUgdGhlIHJhdGlvLgorICAgICAgICAg
ICAgZmxvYXQgaW5mbGF0aW9uUmF0aW8gPSAodmlld3BvcnRTcGFjZURpc3RhbmNlICsgYW50aWFs
aWFzSW5mbGF0aW9uRGlzdGFuY2UpIC8gdmlld3BvcnRTcGFjZURpc3RhbmNlOworCisgICAgICAg
ICAgICAvLyB2X2FudGlhbGlhcyBuZWVkcyB0byBiZSAwIGZvciB0aGUgb3V0ZXIgZWRnZSBhbmQg
MS4gZm9yIHRoZSBpbm5lciBlZGdlLgorICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbnRyb2xQ
b2ludCBpcyBlcXVhbCB0byB0aGUgcG9zaXRpb24gaW4gdGhlIGVkZ2UgdmVydGljZXMsIHRoZSB2
YWx1ZSBpcyBhbHdheXMgMCBmb3IgdGhvc2UuCisgICAgICAgICAgICAvLyBGb3IgdGhlIGNlbnRl
ciBwb2ludCwgdGhlIGRpc3RhbmNlIGlzIGFsd2F5cyAwLjUsIHNvIHdlIG5vcm1hbGl6ZSB0byAx
LiBieSBtdWx0aXBseWluZyBieSAyLgorICAgICAgICAgICAgLy8gQnkgbXVsdHBseWluZyBieSBp
bmZsYXRpb25SYXRpbyBhbmQgZGl2aWRpbmcgYnkgKGluZmxhdGlvblJhdGlvIC0gMSksCisgICAg
ICAgICAgICAvLyBXZSBtYWtlIHN1cmUgdGhhdCB0aGUgdmFyeWluZyBpbnRlcnBvbGF0ZXMgYmV0
d2VlbiAwIChvdXRlciBlZGdlKSwgMSAoaW5uZXIgZWRnZSkgYW5kIG4gPiAxIChjZW50ZXIpLgor
ICAgICAgICAgICAgdl9hbnRpYWxpYXMgPSBkaXN0YW5jZShjb250cm9sUG9pbnQsIHBvc2l0aW9u
KSAqIDIuICogaW5mbGF0aW9uUmF0aW8gLyAoaW5mbGF0aW9uUmF0aW8gLSAxLik7CisKKyAgICAg
ICAgICAgIC8vIE5vdyBpbmZsYXRlIHRoZSBhY3R1YWwgcG9zaXRpb24uIEJ5IHVzaW5nIHRoaXMg
Zm9ybXVsYSBpbnN0ZWFkIG9mIGluZmxhdGluZyBwb3NpdGlvbiBkaXJlY3RseSwKKyAgICAgICAg
ICAgIC8vIHdlIGVuc3VyZSB0aGF0IHRoZSBjZW50ZXIgdmVydGV4IGlzIG5ldmVyIGluZmxhdGVk
LgorICAgICAgICAgICAgcG9zaXRpb24gPSBjZW50ZXIgKyAocG9zaXRpb24gLSBjZW50ZXIpICog
aW5mbGF0aW9uUmF0aW87CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4Lnh5OworICAgICAg
ICAgICAgYXBwbHlBbnRpYWxpYXNpbmdJZk5lZWRlZChwb3NpdGlvbik7CisKKyAgICAgICAgICAg
IC8vIFRoZSB0ZXh0dXJlIHBvc2l0aW9uIG5lZWRzIHRvIGJlIGNsYW1wZWQgdG8gMC4uMSBiZWZv
cmUgdGhlIHRleHR1cmUgbWF0cml4IGlzIGFwcGxpZWQuCisgICAgICAgICAgICB2ZWM0IGNsYW1w
ZWRQb3NpdGlvbiA9IGNsYW1wKHZlYzQocG9zaXRpb24sIDAuLCAxLiksIDAuLCAxLik7CisgICAg
ICAgICAgICB2X3RleENvb3JkID0gKHVfdGV4dHVyZVNwYWNlTWF0cml4ICogY2xhbXBlZFBvc2l0
aW9uKS54eTsKKworICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQgPSBwb3NpdGlvbjsKKyAgICAg
ICAgICAgIGdsX1Bvc2l0aW9uID0gdV9wcm9qZWN0aW9uTWF0cml4ICogdV9tb2RlbFZpZXdNYXRy
aXggKiB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOworICAgICAgICB9CisgICAgKTsKKworI2RlZmlu
ZSBSRUNUX1RFWFRVUkVfRElSRUNUSVZFIFwKKyAgICBHTFNMX0RJUkVDVElWRShpZmRlZiBFTkFC
TEVfUmVjdCkgXAorICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlclR5cGUgc2Ft
cGxlcjJEUmVjdCkgXAorICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlckZ1bmN0
aW9uIHRleHR1cmUyRFJlY3QpIFwKKyAgICBHTFNMX0RJUkVDVElWRShlbHNlKSBcCisgICAgICAg
IEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyVHlwZSBzYW1wbGVyMkQpIFwKKyAgICAgICAg
R0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNhbXBsZXJGdW5jdGlvbiB0ZXh0dXJlMkQpIFwKKyAgICBH
TFNMX0RJUkVDVElWRShlbmRpZikKKworI2RlZmluZSBFTkFCTEVfQVBQTElFUihOYW1lKSAiI2Rl
ZmluZSBFTkFCTEVfIiNOYW1lIlxuI2RlZmluZSBhcHBseSIjTmFtZSJJZk5lZWRlZCBhcHBseSIj
TmFtZSJcbiIKKyNkZWZpbmUgRElTQUJMRV9BUFBMSUVSKE5hbWUpICIjZGVmaW5lIGFwcGx5IiNO
YW1lIklmTmVlZGVkIG5vb3BcbiIKKyNkZWZpbmUgQkxVUl9DT05TVEFOVFMgXAorICAgIEdMU0xf
RElSRUNUSVZFKGRlZmluZSBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCAxMSkgXAorICAgIEdM
U0xfRElSRUNUSVZFKGRlZmluZSBHQVVTU0lBTl9LRVJORUxfU1RFUCAwLjIpCisKKworc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUgPQorICAgIFJFQ1RfVEVYVFVSRV9ESVJFQ1RJ
VkUKKyAgICBCTFVSX0NPTlNUQU5UUworICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7CisgICAgICAgIHVuaWZvcm0gU2FtcGxlclR5cGUgc19zYW1wbGVyOwor
ICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7CisgICAgICAgIHVuaWZvcm0gc2FtcGxl
cjJEIHNfY29udGVudFRleHR1cmU7CisgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5Owor
ICAgICAgICB2YXJ5aW5nIGZsb2F0IHZfYW50aWFsaWFzOworICAgICAgICB2YXJ5aW5nIHZlYzIg
dl90ZXhDb29yZDsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOworICAgICAg
ICB1bmlmb3JtIGZsb2F0IHVfZmlsdGVyQW1vdW50OworICAgICAgICB1bmlmb3JtIHZlYzIgdV9i
bHVyUmFkaXVzOworICAgICAgICB1bmlmb3JtIHZlYzIgdV9zaGFkb3dPZmZzZXQ7CisgICAgICAg
IHVuaWZvcm0gdmVjNCB1X2NvbG9yOworICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5L
ZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOworCisgICAgICAgIHZvaWQgbm9vcChp
bm91dCB2ZWM0IGR1bW15UGFyYW1ldGVyKSB7IH0KKworICAgICAgICBmbG9hdCBhbnRpYWxpYXMo
KSB7IHJldHVybiBzbW9vdGhzdGVwKHZfYW50aWFsaWFzLCAwLiwgMS4pOyB9CisKKyAgICAgICAg
dm9pZCBhcHBseVRleHR1cmUoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciA9IFNhbXBsZXJGdW5j
dGlvbihzX3NhbXBsZXIsIHZfdGV4Q29vcmQpOyB9CisgICAgICAgIHZvaWQgYXBwbHlPcGFjaXR5
KGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdV9vcGFjaXR5OyB9CisgICAgICAgIHZvaWQg
YXBwbHlBbnRpYWxpYXNpbmcoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSBhbnRpYWxpYXMo
KTsgfQorICAgICAgICB2b2lkIGFwcGx5TWFzayhpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9
IHRleHR1cmUyRChzX21hc2ssIHZfbWFza1RleENvb3JkKS5hOyB9CisKKyAgICAgICAgdm9pZCBh
cHBseUdyYXlzY2FsZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAg
ICAgICBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2ZpbHRlckFtb3VudDsKKyAgICAgICAgICAgIGNv
bG9yID0gdmVjNCgoMC4yMTI2ICsgMC43ODc0ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUy
IC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50
KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkg
KiBjb2xvci5yICsgKDAuNzE1MiArIDAuMjg0OCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcy
MiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICgwLjIxMjYg
LSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQp
ICogY29sb3IuZyArICgwLjA3MjIgKyAwLjkyNzggKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAg
ICAgICAgICAgICBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXBwbHlTZXBp
YUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCBh
bW91bnQgPSAxLjAgLSB1X2ZpbHRlckFtb3VudDsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNCgo
MC4zOTMgKyAwLjYwNyAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91
bnQpICogY29sb3IuZyArICgwLjE4OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAg
ICAgICAgICAgICAgKDAuMzQ5IC0gMC4zNDkgKiBhbW91bnQpICogY29sb3IuciArICgwLjY4NiAr
IDAuMzE0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xNjggLSAwLjE2OCAqIGFtb3VudCkgKiBj
b2xvci5iLAorICAgICAgICAgICAgICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNvbG9y
LnIgKyAoMC41MzQgLSAwLjUzNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44Njkg
KiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICBjb2xvci5hKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgYXBwbHlTYXR1cmF0ZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoKDAuMjEzICsgMC43ODcgKiB1X2Zp
bHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2ZpbHRlckFtb3VudCkg
KiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLAor
ICAgICAgICAgICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9maWx0ZXJBbW91bnQpICogY29sb3Iu
ciArICgwLjcxNSArIDAuMjg1ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuZyArICgwLjA3MiAt
IDAuMDcyICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAoMC4y
MTMgLSAwLjIxMyAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAq
IHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgKyAwLjkyOCAqIHVfZmlsdGVyQW1v
dW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgY29sb3IuYSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGFwcGx5SHVlUm90YXRlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZsb2F0IHBpID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKKyAg
ICAgICAgICAgIGZsb2F0IGMgPSBjb3ModV9maWx0ZXJBbW91bnQgKiBwaSAvIDE4MC4wKTsKKyAg
ICAgICAgICAgIGZsb2F0IHMgPSBzaW4odV9maWx0ZXJBbW91bnQgKiBwaSAvIDE4MC4wKTsKKyAg
ICAgICAgICAgIGNvbG9yID0gdmVjNChjb2xvci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAq
IDAuMjEzKSArIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29s
b3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiArIHMgKiAwLjkyOCksCisgICAgICAgICAgICAgICAg
Y29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyArIHMgKiAwLjE0MykgKyBjb2xvci5nICogKDAu
NzE1ICsgYyAqIDAuMjg1ICsgcyAqIDAuMTQwKSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4w
NzIgLSBzICogMC4yODMpLAorICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICog
MC4yMTMgLSBzICogMC43ODcpICsgIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgKyBzICog
MC43MTUpICsgY29sb3IuYiAqICgwLjA3MiArIGMgKiAwLjkyOCArIHMgKiAwLjA3MiksCisgICAg
ICAgICAgICAgICAgY29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBpbnZlcnQo
ZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9maWx0ZXJBbW91bnQgKyBuICogKDEuMCAt
IHVfZmlsdGVyQW1vdW50KTsgfQorICAgICAgICB2b2lkIGFwcGx5SW52ZXJ0RmlsdGVyKGlub3V0
IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNChpbnZlcnQo
Y29sb3IuciksIGludmVydChjb2xvci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgYXBwbHlCcmlnaHRuZXNzRmlsdGVyKGlub3V0IHZlYzQg
Y29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNChjb2xvci5yZ2IgKiAo
MS4wICsgdV9maWx0ZXJBbW91bnQpLCBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAgIGZs
b2F0IGNvbnRyYXN0KGZsb2F0IG4pIHsgcmV0dXJuIChuIC0gMC41KSAqIHVfZmlsdGVyQW1vdW50
ICsgMC41OyB9CisgICAgICAgIHZvaWQgYXBwbHlDb250cmFzdEZpbHRlcihpbm91dCB2ZWM0IGNv
bG9yKQorICAgICAgICB7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoY29udHJhc3QoY29sb3Iu
ciksIGNvbnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5T3BhY2l0eUZpbHRlcihpbm91dCB2ZWM0IGNvbG9y
KQorICAgICAgICB7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoY29sb3IuciwgY29sb3IuZywg
Y29sb3IuYiwgY29sb3IuYSAqIHVfZmlsdGVyQW1vdW50KTsKKyAgICAgICAgfQorCisgICAgICAg
IHZlYzQgc2FtcGxlQ29sb3JBdFJhZGl1cyhmbG9hdCByYWRpdXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkICsgcmFkaXVzICogdV9ibHVyUmFkaXVzOwor
ICAgICAgICAgICAgcmV0dXJuIFNhbXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIGNvb3JkKSAqIGZs
b2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3Jk
LnkgPCAxLik7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBzYW1wbGVBbHBoYUF0UmFkaXVz
KGZsb2F0IHJhZGl1cykKKyAgICAgICAgeworICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4
Q29vcmQgLSB1X3NoYWRvd09mZnNldCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsKKyAgICAgICAg
ICAgIHJldHVybiBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCBjb29yZCkuYSAqIGZsb2F0KGNv
b3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAx
Lik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5Qmx1ckZpbHRlcihpbm91dCB2ZWM0
IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWM0IHRvdGFsID0gc2FtcGxlQ29sb3JB
dFJhZGl1cygwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgdG90YWwgKz0gc2FtcGxlQ29sb3JBdFJhZGl1cyhmbG9hdChpKSAqIEdBVVNTSUFOX0tF
Uk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAgICAgdG90YWwg
Kz0gc2FtcGxlQ29sb3JBdFJhZGl1cyhmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NU
RVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y29sb3IgPSB0b3RhbDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXBwbHlBbHBoYUJsdXIo
aW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBz
YW1wbGVBbHBoYUF0UmFkaXVzKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07CisgICAgICAgICAg
ICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsK
KyAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYUF0UmFkaXVzKGZsb2F0KGkpICog
R0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAgICAg
ICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYUF0UmFkaXVzKGZsb2F0KC0xICogaSkgKiBHQVVTU0lB
Tl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBjb2xvciAqPSB0b3RhbDsKKyAgICAgICAgfQorCisgICAgICAgIHZlYzQgc291
cmNlT3Zlcih2ZWM0IHNyYywgdmVjNCBkc3QpIHsgcmV0dXJuIHNyYyArIGRzdCAqICgxLiAtIGRz
dC5hKTsgfQorCisgICAgICAgIHZvaWQgYXBwbHlDb250ZW50VGV4dHVyZShpbm91dCB2ZWM0IGNv
bG9yKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWM0IGNvbnRlbnRDb2xvciA9IHRleHR1cmUy
RChzX2NvbnRlbnRUZXh0dXJlLCB2X3RleENvb3JkKTsKKyAgICAgICAgICAgIGNvbG9yID0gc291
cmNlT3Zlcihjb250ZW50Q29sb3IsIGNvbG9yKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
YXBwbHlTb2xpZENvbG9yKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdV9jb2xvcjsgfQor
CisgICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWM0IGNv
bG9yID0gdmVjNCgxLiwgMS4sIDEuLCAxLik7CisgICAgICAgICAgICBhcHBseVRleHR1cmVJZk5l
ZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZChjb2xvcik7
CisgICAgICAgICAgICBhcHBseUFudGlhbGlhc2luZ0lmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAg
ICAgIGFwcGx5TWFza0lmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5T3BhY2l0eUlm
TmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5R3JheXNjYWxlRmlsdGVySWZOZWVkZWQo
Y29sb3IpOworICAgICAgICAgICAgYXBwbHlTZXBpYUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAg
ICAgICAgICAgIGFwcGx5U2F0dXJhdGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAg
ICBhcHBseUh1ZVJvdGF0ZUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5
SW52ZXJ0RmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlCcmlnaHRuZXNz
RmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlDb250cmFzdEZpbHRlcklm
TmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5T3BhY2l0eUZpbHRlcklmTmVlZGVkKGNv
bG9yKTsKKyAgICAgICAgICAgIGFwcGx5Qmx1ckZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAg
ICAgICAgIGFwcGx5QWxwaGFCbHVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlD
b250ZW50VGV4dHVyZUlmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9
IGNvbG9yOworICAgICAgICB9CisgICAgKTsKKworUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZShQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
T3B0aW9ucyBvcHRpb25zKQoreworICAgIFN0cmluZ0J1aWxkZXIgc2hhZGVyQnVpbGRlcjsKKyNk
ZWZpbmUgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFwcGxpZXIpIFwKKyAgICBzaGFkZXJCdWls
ZGVyLmFwcGVuZChcCisgICAgICAgIChvcHRpb25zICYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OkFwcGxpZXIpID8gRU5BQkxFX0FQUExJRVIoQXBwbGllcikgOiBESVNBQkxFX0FQUExJRVIo
QXBwbGllcikpCisKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoVGV4dHVyZSk7CisgICAg
U0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFJlY3QpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BU
SU9OUyhTb2xpZENvbG9yKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoT3BhY2l0eSk7
CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE1hc2spOworICAgIFNFVF9BUFBMSUVSX0ZS
T01fT1BUSU9OUyhBbnRpYWxpYXNpbmcpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhH
cmF5c2NhbGVGaWx0ZXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTZXBpYUZpbHRl
cik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNhdHVyYXRlRmlsdGVyKTsKKyAgICBT
RVRfQVBQTElFUl9GUk9NX09QVElPTlMoSHVlUm90YXRlRmlsdGVyKTsKKyAgICBTRVRfQVBQTElF
Ul9GUk9NX09QVElPTlMoQnJpZ2h0bmVzc0ZpbHRlcik7CisgICAgU0VUX0FQUExJRVJfRlJPTV9P
UFRJT05TKENvbnRyYXN0RmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoSW52
ZXJ0RmlsdGVyKTsKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoT3BhY2l0eUZpbHRlcik7
CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJsdXJGaWx0ZXIpOworICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhBbHBoYUJsdXIpOworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9O
UyhDb250ZW50VGV4dHVyZSk7CisgICAgU3RyaW5nQnVpbGRlciB2ZXJ0ZXhCdWlsZGVyOworICAg
IHZlcnRleEJ1aWxkZXIuYXBwZW5kKHNoYWRlckJ1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgdmVy
dGV4QnVpbGRlci5hcHBlbmQodmVydGV4VGVtcGxhdGUpOworICAgIHNoYWRlckJ1aWxkZXIuYXBw
ZW5kKGZyYWdtZW50VGVtcGxhdGUpOworCisgICAgU3RyaW5nIHZlcnRleFNvdXJjZSA9IHZlcnRl
eEJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgZnJhZ21lbnRTb3VyY2UgPSBzaGFkZXJC
dWlsZGVyLnRvU3RyaW5nKCk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNvdXJjZSwgZnJhZ21lbnRTb3VyY2UpKTsK
K30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAzN2U3ZDY5ZDlhODc3NGYxZDMwNjFhNzc5MzFhMmMwM2M5ZGMxNDYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0uaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1faAorI2RlZmluZSBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbV9oCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2gu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworI2RlZmluZSBURVhNQVBfREVDTEFSRV9WQVJJQUJM
RShBY2Nlc3NvciwgTmFtZSwgVHlwZSkgR0MzRHVpbnQgQWNjZXNzb3IjI0xvY2F0aW9uKCkgeyBz
dGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIG5hbWUoTmFtZSk7IHJldHVybiBnZXRMb2NhdGlvbihu
YW1lLCBUeXBlKTsgfQorI2RlZmluZSBURVhNQVBfREVDTEFSRV9VTklGT1JNKEFjY2Vzc29yKSBU
RVhNQVBfREVDTEFSRV9WQVJJQUJMRShBY2Nlc3NvciwgInVfIiNBY2Nlc3NvciwgVW5pZm9ybVZh
cmlhYmxlKQorI2RlZmluZSBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUoQWNjZXNzb3IpIFRFWE1B
UF9ERUNMQVJFX1ZBUklBQkxFKEFjY2Vzc29yLCAiYV8iI0FjY2Vzc29yLCBBdHRyaWJWYXJpYWJs
ZSkKKyNkZWZpbmUgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihBY2Nlc3NvcikgVEVYTUFQX0RFQ0xB
UkVfVkFSSUFCTEUoQWNjZXNzb3IsICJzXyIjQWNjZXNzb3IsIFVuaWZvcm1WYXJpYWJsZSkKKwor
Y2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4geworcHVibGljOgorICAgIGVudW0gT3B0aW9uIHsKKyAg
ICAgICAgVGV4dHVyZSAgICAgICAgICA9IDFMIDw8IDAsCisgICAgICAgIFJlY3QgICAgICAgICAg
ICAgPSAxTCA8PCAxLAorICAgICAgICBTb2xpZENvbG9yICAgICAgID0gMUwgPDwgMiwKKyAgICAg
ICAgT3BhY2l0eSAgICAgICAgICA9IDFMIDw8IDMsCisgICAgICAgIE1hc2sgICAgICAgICAgICAg
PSAxTCA8PCA0LAorICAgICAgICBBbnRpYWxpYXNpbmcgICAgID0gMUwgPDwgNSwKKyAgICAgICAg
R3JheXNjYWxlRmlsdGVyICA9IDFMIDw8IDYsCisgICAgICAgIFNlcGlhRmlsdGVyICAgICAgPSAx
TCA8PCA3LAorICAgICAgICBTYXR1cmF0ZUZpbHRlciAgID0gMUwgPDwgOCwKKyAgICAgICAgSHVl
Um90YXRlRmlsdGVyICA9IDFMIDw8IDksCisgICAgICAgIEJyaWdodG5lc3NGaWx0ZXIgPSAxTCA8
PCAxMCwKKyAgICAgICAgQ29udHJhc3RGaWx0ZXIgICA9IDFMIDw8IDExLAorICAgICAgICBJbnZl
cnRGaWx0ZXIgICAgID0gMUwgPDwgMTIsCisgICAgICAgIE9wYWNpdHlGaWx0ZXIgICAgPSAxTCA8
PCAxMywKKyAgICAgICAgQmx1ckZpbHRlciAgICAgICA9IDFMIDw8IDE0LAorICAgICAgICBBbHBo
YUJsdXIgICAgICAgID0gMUwgPDwgMTUsCisgICAgICAgIENvbnRlbnRUZXh0dXJlICAgPSAxTCA8
PCAxNgorICAgIH07CisKKyAgICB0eXBlZGVmIHVuc2lnbmVkIE9wdGlvbnM7CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gY3JlYXRlKFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBPcHRpb25zKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSgpOworICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEKCkgY29u
c3QgeyByZXR1cm4gbV9pZDsgfQorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgeyBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CisKKyAgICBURVhNQVBfREVDTEFSRV9BVFRSSUJVVEUo
dmVydGV4KQorCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShtb2RlbFZpZXdNYXRyaXgpCisg
ICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShwcm9qZWN0aW9uTWF0cml4KQorICAgIFRFWE1BUF9E
RUNMQVJFX1VOSUZPUk0odGV4dHVyZVNwYWNlTWF0cml4KQorICAgIFRFWE1BUF9ERUNMQVJFX1VO
SUZPUk0ob3BhY2l0eSkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGNvbG9yKQorICAgIFRF
WE1BUF9ERUNMQVJFX1VOSUZPUk0oZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlKQorICAg
IFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoc2FtcGxlcikKKyAgICBURVhNQVBfREVDTEFSRV9TQU1Q
TEVSKG1hc2spCisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgVEVYTUFQX0RFQ0xBUkVf
VU5JRk9STShmaWx0ZXJBbW91bnQpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShnYXVzc2lh
bktlcm5lbCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGJsdXJSYWRpdXMpCisgICAgVEVY
TUFQX0RFQ0xBUkVfVU5JRk9STShzaGFkb3dPZmZzZXQpCisgICAgVEVYTUFQX0RFQ0xBUkVfU0FN
UExFUihjb250ZW50VGV4dHVyZSkKKyNlbmRpZgorCisgICAgdm9pZCBzZXRNYXRyaXgoR0MzRHVp
bnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKK3ByaXZhdGU6CisgICAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIGNvbnN0
IFN0cmluZyYgdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBTdHJpbmcmIGZyYWdtZW50U2hhZGVy
U291cmNlKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOworICAgIFBsYXRm
b3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRlcjsKKworICAgIGVudW0gVmFyaWFibGVUeXBlIHsg
VW5pZm9ybVZhcmlhYmxlLCBBdHRyaWJWYXJpYWJsZSB9OworICAgIEdDM0R1aW50IGdldExvY2F0
aW9uKGNvbnN0IEF0b21pY1N0cmluZyYsIFZhcmlhYmxlVHlwZSk7CisKKyAgICBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7Cisg
ICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEdDM0R1aW50PiBtX3ZhcmlhYmxlczsKK307CisKK30K
KyNlbmRpZgorCisjZW5kaWYgLy8gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1faAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>