<?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>105271</bug_id>
          
          <creation_ts>2012-12-18 02:38:26 -0800</creation_ts>
          <short_desc>[JSC] Refactoring CodeGeneratorJS.pm to simplify adding support for overloaded constructors</short_desc>
          <delta_ts>2012-12-18 04:08:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>103226</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tommy Widenflycht">tommyw</reporter>
          <assigned_to name="Tommy Widenflycht">tommyw</assigned_to>
          <cc>abarth</cc>
    
    <cc>ggaren</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>793495</commentid>
    <comment_count>0</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-12-18 02:38:26 -0800</bug_when>
    <thetext>[JSC] Refactoring CodeGeneratorJS.pm to simplify adding support for overloaded constructors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793499</commentid>
    <comment_count>1</comment_count>
      <attachid>179911</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-12-18 02:44:34 -0800</bug_when>
    <thetext>Created attachment 179911
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793501</commentid>
    <comment_count>2</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-12-18 02:46:19 -0800</bug_when>
    <thetext>This patch splits the very large function that generates constructor code into a few smaller ones. No changes in actual generated code but some functions in the generated bindings code moves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793506</commentid>
    <comment_count>3</comment_count>
      <attachid>179911</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-12-18 02:57:38 -0800</bug_when>
    <thetext>Comment on attachment 179911
Patch

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

Looks OK. Added minor comments.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3728
&gt; +    if (IsConstructable($interface) &amp;&amp; !IsCustomConstructable($interface)) {

Why is this check needed? It looks like we don&apos;t have this check now. If this check is really needed, it would make more sense to check it inside GenerateConstructorDefinition(), because GenerateConstructorDefinition() already has checks about it.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3899
&gt; +sub GenerateConstructorSupportDefinitions

Maybe GenerateConstructorHelperMethods() is a better name?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3993
&gt; +sub IsCustomConstructable

Let&apos;s rename to HasCustomConstructor() to keep the name consistent between JSC and V8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793517</commentid>
    <comment_count>4</comment_count>
      <attachid>179916</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-12-18 03:45:39 -0800</bug_when>
    <thetext>Created attachment 179916
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793519</commentid>
    <comment_count>5</comment_count>
      <attachid>179911</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-12-18 03:47:00 -0800</bug_when>
    <thetext>Comment on attachment 179911
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3728
&gt;&gt; +    if (IsConstructable($interface) &amp;&amp; !IsCustomConstructable($interface)) {
&gt; 
&gt; Why is this check needed? It looks like we don&apos;t have this check now. If this check is really needed, it would make more sense to check it inside GenerateConstructorDefinition(), because GenerateConstructorDefinition() already has checks about it.

Removed check.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3899
&gt;&gt; +sub GenerateConstructorSupportDefinitions
&gt; 
&gt; Maybe GenerateConstructorHelperMethods() is a better name?

Done.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3993
&gt;&gt; +sub IsCustomConstructable
&gt; 
&gt; Let&apos;s rename to HasCustomConstructor() to keep the name consistent between JSC and V8.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793523</commentid>
    <comment_count>6</comment_count>
      <attachid>179916</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-12-18 03:48:22 -0800</bug_when>
    <thetext>Comment on attachment 179916
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793536</commentid>
    <comment_count>7</comment_count>
      <attachid>179916</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 04:08:50 -0800</bug_when>
    <thetext>Comment on attachment 179916
Patch

Clearing flags on attachment: 179916

Committed r138008: &lt;http://trac.webkit.org/changeset/138008&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793537</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 04:08:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179911</attachid>
            <date>2012-12-18 02:44:34 -0800</date>
            <delta_ts>2012-12-18 03:47:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105271-20121218114151.patch</filename>
            <type>text/plain</type>
            <size>44254</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTg2NGM1MGY0NzE2NGMy
Mjk3YTI0OGMxM2NiMTU5ZjU0Y2ViMDIwYy4uZDIyNGIyZjMzZDRlNTAxNDk5NWVkNTY0MzExM2M0
Zjk1NGIxZWFiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTEyLTE4ICBUb21t
eSBXaWRlbmZseWNodCAgPHRvbW15d0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0pTQ10gUmVm
YWN0b3JpbmcgQ29kZUdlbmVyYXRvckpTLnBtIHRvIHNpbXBsaWZ5IGFkZGluZyBzdXBwb3J0IGZv
ciBvdmVybG9hZGVkIGNvbnN0cnVjdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MjcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBzcGxpdHMgdGhlIHZlcnkgbGFyZ2UgZnVuY3Rp
b24gdGhhdCBnZW5lcmF0ZXMgY29uc3RydWN0b3IgY29kZSBpbnRvIGEgZmV3IHNtYWxsZXIgb25l
cy4KKyAgICAgICAgTm8gY2hhbmdlcyBpbiBhY3R1YWwgZ2VuZXJhdGVkIGNvZGUgYnV0IHNvbWUg
ZnVuY3Rpb25zIGluIHRoZSBnZW5lcmF0ZWQgYmluZGluZ3MgY29kZSBtb3Zlcy4KKworICAgICAg
ICBFeGlzdGluZyB0ZXN0cyBjb3ZlciBwYXRjaC4KKworICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6
CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbnMpOgorICAgICAgICAoR2Vu
ZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3Rv
clN1cHBvcnREZWZpbml0aW9ucyk6CisgICAgICAgIChJc0N1c3RvbUNvbnN0cnVjdGFibGUpOgor
ICAgICAgICAoSXNDb25zdHJ1Y3RhYmxlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNGbG9hdDY0QXJy
YXlDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNGbG9hdDY0QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2
NEFycmF5OjppbmRleFNldHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OkpTVGVzdEV2ZW50
Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENv
bnN0cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5h
bWVkQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ck5hbWVkQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
b2RlQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T2JqKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMTItMTggIEV1Z2VuZSBLbHl1Y2huaWtv
diAgPGV1c3Rhc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTmV0d29y
azogZGlzcGxheSBKYXZhU2NyaXB0IHN0YWNrIGluIGNhc2Ugb2Ygc2NyaXB0IGluaXRpYXRvci4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KaW5kZXggMTBlOTBjNDA4ZGI2YWU2MDEwZjFhZjg5OGQ5YmJkZGY5NjNkNzc0OS4uMGZiYWVk
MGFlYjVhMDY5MmRkMTI2Y2VmM2Q2NGY2ZTliM2M4NDcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTE1MjgsOSArMTUy
OCw5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb21waWxlVGltZUNoZWNrRm9yRW51bXNJZk5l
ZWRlZCgkaW50ZXJmYWNlKSk7CiAKICAgICAgICAgbXkgJHByb3RvQ2xhc3NOYW1lID0gIiR7Y2xh
c3NOYW1lfVByb3RvdHlwZSI7Ci0gICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9u
KFxAaW1wbENvbnRlbnQsICRjbGFzc05hbWUsICRwcm90b0NsYXNzTmFtZSwgJGludGVyZmFjZU5h
bWUsICR2aXNpYmxlSW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZSk7CisgICAgICAgIEdlbmVyYXRl
Q29uc3RydWN0b3JEZWZpbml0aW9ucyhcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAkcHJvdG9D
bGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkdmlzaWJsZUludGVyZmFjZU5hbWUsICRpbnRlcmZh
Y2UpOwogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVk
Q29uc3RydWN0b3IifSkgewotICAgICAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRp
b24oXEBpbXBsQ29udGVudCwgJGNsYXNzTmFtZSwgJHByb3RvQ2xhc3NOYW1lLCAkaW50ZXJmYWNl
TmFtZSwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3Ii
fSwgJGludGVyZmFjZSwgIkdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yIik7CisgICAgICAgICAg
ICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbnMoXEBpbXBsQ29udGVudCwgJGNsYXNzTmFt
ZSwgJHByb3RvQ2xhc3NOYW1lLCAkaW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSwgJGludGVyZmFjZSwgIkdlbmVyYXRpbmdO
YW1lZENvbnN0cnVjdG9yIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM3MTEsMTAgKzM3MTEs
OSBAQCBFTkQKICAgICB9CiB9CiAKLXN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbgor
c3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9ucwogewogICAgIG15ICRvdXRwdXRBcnJh
eSA9IHNoaWZ0OwotCiAgICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OwogICAgIG15ICRwcm90b0Ns
YXNzTmFtZSA9IHNoaWZ0OwogICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7CkBAIC0zNzI2
LDc4ICszNzI1LDI1IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbgogICAgICMg
Rm9yIG5vdyBtaW1pYyB0aGUgb2xkIGJlaGF2aW91ciBieSBvbmx5IGdlbmVyYXRpbmcgY29kZSBm
b3IgdGhlIGxhc3QgIkNvbnN0cnVjdG9yIiBhdHRyaWJ1dGUuCiAgICAgbXkgJGZ1bmN0aW9uID0g
QHskaW50ZXJmYWNlLT5jb25zdHJ1Y3RvcnN9Wy0xXTsKIAotICAgIG15ICRjb25zdHJ1Y3RvckNs
YXNzTmFtZSA9ICRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvciA/ICIke2NsYXNzTmFtZX1OYW1l
ZENvbnN0cnVjdG9yIiA6ICIke2NsYXNzTmFtZX1Db25zdHJ1Y3RvciI7Ci0gICAgbXkgJG51bWJl
ck9mQ29uc3RydWN0b3JQYXJhbWV0ZXJzID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkNvbnN0cnVjdG9yUGFyYW1ldGVycyJ9OwotICAgIGlmICghZGVmaW5lZCAkbnVtYmVyT2ZD
b25zdHJ1Y3RvclBhcmFtZXRlcnMpIHsKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0Nv
bnN0cnVjdG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIkV2ZW50IikpIHsKLSAgICAgICAgICAgICRu
dW1iZXJPZkNvbnN0cnVjdG9yUGFyYW1ldGVycyA9IDI7Ci0gICAgICAgIH0gZWxzaWYgKCRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9KSB7Ci0gICAgICAgICAg
ICAkbnVtYmVyT2ZDb25zdHJ1Y3RvclBhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVy
c307Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVj
dG9yKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNvbnN0IENsYXNzSW5mbyAke2Nv
bnN0cnVjdG9yQ2xhc3NOYW1lfTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUludGVyZmFjZU5hbWV9
Q29uc3RydWN0b3JcIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRSgk
Y29uc3RydWN0b3JDbGFzc05hbWUpIH07XG5cbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0oU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsK
LSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIDogRE9NQ29uc3RydWN0b3JXaXRoRG9j
dW1lbnQoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpXG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAie1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJKU05vU3RhdGljVGFibGVzIn0pIHsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
InN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGdldCR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUo
RXhlY1N0YXRlKiBleGVjKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gZ2V0SGFz
aFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT5nbG9iYWxEYXRhKCksICYke2NvbnN0cnVjdG9yQ2xh
c3NOYW1lfVRhYmxlKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxu
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNvbnN0IENsYXNzSW5mbyAk
e2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUludGVyZmFjZU5h
bWV9Q29uc3RydWN0b3JcIiwgJkJhc2U6OnNfaW5mbywgMCwgZ2V0JHtjb25zdHJ1Y3RvckNsYXNz
TmFtZX1UYWJsZSwgQ1JFQVRFX01FVEhPRF9UQUJMRSgkY29uc3RydWN0b3JDbGFzc05hbWUpIH07
XG5cbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiY29uc3QgQ2xhc3NJbmZvICR7Y29uc3RydWN0b3JDbGFzc05hbWV9OjpzX2luZm8gPSB7IFwi
JHt2aXNpYmxlSW50ZXJmYWNlTmFtZX1Db25zdHJ1Y3RvclwiLCAmQmFzZTo6c19pbmZvLCAmJHtj
b25zdHJ1Y3RvckNsYXNzTmFtZX1UYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRSgkY29uc3Ry
dWN0b3JDbGFzc05hbWUpIH07XG5cbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OiR7Y29uc3RydWN0b3JDbGFzc05h
bWV9KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KVxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICA6IERPTUNvbnN0cnVjdG9y
T2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KVxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIntcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwot
ICAgIH0KLQotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjb25zdHJ1Y3RvckNsYXNz
TmFtZX06OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdClcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAg
IGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewotICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTtc
biIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZ2xv
YmFsT2JqZWN0LT5wcm90b3R5cGUoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTtcbiIpOwotICAg
IH0gZWxzaWYgKCRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvcikgewotICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTtcbiIp
OwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZzX2lu
Zm8pKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgJHtjbGFz
c05hbWV9UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpO1xuIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4iKTsKLSAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsICR7cHJvdG9DbGFzc05hbWV9OjpzZWxmKGV4ZWMs
IGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7XG4iKTsKKyAgICBpZiAoSXND
b25zdHJ1Y3RhYmxlKCRpbnRlcmZhY2UpICYmICFJc0N1c3RvbUNvbnN0cnVjdGFibGUoJGludGVy
ZmFjZSkpIHsKKyAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24oJG91dHB1dEFy
cmF5LCAkY2xhc3NOYW1lLCAkcHJvdG9DbGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkdmlzaWJs
ZUludGVyZmFjZU5hbWUsICRpbnRlcmZhY2UsICRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3Rvciwg
JGZ1bmN0aW9uKTsKICAgICB9Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVt
YmVyKCR7bnVtYmVyT2ZDb25zdHJ1Y3RvclBhcmFtZXRlcnN9KSwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlIHwgRG9udEVudW0pO1xuIikgaWYgZGVmaW5lZCAkbnVtYmVyT2ZDb25zdHJ1Y3RvclBhcmFt
ZXRlcnM7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKLQotICAgIGlmICghJGdl
bmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSB7Ci0gICAgICAgIG15ICRoYXNTdGF0aWNGdW5jdGlv
bnMgPSAwOwotICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskaW50ZXJmYWNlLT5mdW5j
dGlvbnN9KSB7Ci0gICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5pc1N0YXRpYykgewotICAgICAg
ICAgICAgICAgICRoYXNTdGF0aWNGdW5jdGlvbnMgPSAxOwotICAgICAgICAgICAgICAgIGxhc3Q7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICBteSAka2luZCA9ICRoYXNTdGF0
aWNGdW5jdGlvbnMgPyAiUHJvcGVydHkiIDogIlZhbHVlIjsKKyAgICBHZW5lcmF0ZUNvbnN0cnVj
dG9yU3VwcG9ydERlZmluaXRpb25zKCRvdXRwdXRBcnJheSwgJGNsYXNzTmFtZSwgJHByb3RvQ2xh
c3NOYW1lLCAkaW50ZXJmYWNlTmFtZSwgJHZpc2libGVJbnRlcmZhY2VOYW1lLCAkaW50ZXJmYWNl
LCAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IsICRmdW5jdGlvbik7Cit9CiAKLSAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiYm9vbCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Z2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKLSAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAie1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1
cm4gZ2V0U3RhdGljJHtraW5kfVNsb3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0sIEpTRE9NV3Jh
cHBlcj4oZXhlYywgIiAuIGNvbnN0cnVjdG9ySGFzaFRhYmxlQWNjZXNzb3IoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMifSwgJGNvbnN0cnVjdG9yQ2xh
c3NOYW1lKSAuICIsIGpzQ2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KGNlbGwpLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpO1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxu
Iik7CitzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24KK3sKKyAgICBteSAkb3V0cHV0
QXJyYXkgPSBzaGlmdDsKKyAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7CisgICAgbXkgJHByb3Rv
Q2xhc3NOYW1lID0gc2hpZnQ7CisgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBt
eSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNlID0gc2hp
ZnQ7CisgICAgbXkgJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yID0gc2hpZnQ7CisgICAgbXkg
JGZ1bmN0aW9uID0gc2hpZnQ7CiAKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9vbCAk
e2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKVxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIntcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIGdl
dFN0YXRpYyR7a2luZH1EZXNjcmlwdG9yPCR7Y29uc3RydWN0b3JDbGFzc05hbWV9LCBKU0RPTVdy
YXBwZXI+KGV4ZWMsICIgLiBjb25zdHJ1Y3Rvckhhc2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVzIn0sICRjb25zdHJ1Y3RvckNs
YXNzTmFtZSkgLiAiLCBqc0Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihvYmplY3QpLCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIn1cblxuIik7Ci0gICAgfQorICAgIG15ICRjb25zdHJ1Y3RvckNsYXNzTmFtZSA9ICRnZW5l
cmF0aW5nTmFtZWRDb25zdHJ1Y3RvciA/ICIke2NsYXNzTmFtZX1OYW1lZENvbnN0cnVjdG9yIiA6
ICIke2NsYXNzTmFtZX1Db25zdHJ1Y3RvciI7CiAKICAgICBpZiAoSXNDb25zdHJ1Y3RhYmxlKCRp
bnRlcmZhY2UpKSB7CiAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRl
bXBsYXRlKCRpbnRlcmZhY2UsICJFdmVudCIpKSB7CkBAIC0zODkxLDcgKzM4MzcsNiBAQCBFTkQK
ICAgICAgICAgfSBlbHNpZiAoISgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlND
dXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21Db25zdHJ1Y3RvciJ9KSAmJiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJOYW1lZENvbnN0cnVjdG9yIn0gfHwgJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSkgewog
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Y29uc3RydWN0JHtjbGFzc05hbWV9KEV4ZWNT
dGF0ZSogZXhlYylcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7
Ci0KICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAke2NvbnN0cnVjdG9yQ2xh
c3NOYW1lfSogY2FzdGVkVGhpcyA9IGpzQ2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KGV4
ZWMtPmNhbGxlZSgpKTtcbiIpOwogCiAgICAgICAgICAgICBteSBAY29uc3RydWN0b3JBcmdMaXN0
OwpAQCAtMzk0OCw3ICszODkzLDkzIEBAIEVORAogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpO1xuIik7CiAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwogICAgICAgICB9CisgICAgfQorfQorCitz
dWIgR2VuZXJhdGVDb25zdHJ1Y3RvclN1cHBvcnREZWZpbml0aW9ucworeworICAgIG15ICRvdXRw
dXRBcnJheSA9IHNoaWZ0OworICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKKyAgICBteSAkcHJv
dG9DbGFzc05hbWUgPSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAg
IG15ICR2aXNpYmxlSW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRpbnRlcmZhY2UgPSBz
aGlmdDsKKyAgICBteSAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IgPSBzaGlmdDsKKyAgICBt
eSAkZnVuY3Rpb24gPSBzaGlmdDsKKworICAgIG15ICRjb25zdHJ1Y3RvckNsYXNzTmFtZSA9ICRn
ZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvciA/ICIke2NsYXNzTmFtZX1OYW1lZENvbnN0cnVjdG9y
IiA6ICIke2NsYXNzTmFtZX1Db25zdHJ1Y3RvciI7CisgICAgbXkgJG51bWJlck9mQ29uc3RydWN0
b3JQYXJhbWV0ZXJzID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVj
dG9yUGFyYW1ldGVycyJ9OworICAgIGlmICghZGVmaW5lZCAkbnVtYmVyT2ZDb25zdHJ1Y3RvclBh
cmFtZXRlcnMpIHsKKyAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVGVt
cGxhdGUoJGludGVyZmFjZSwgIkV2ZW50IikpIHsKKyAgICAgICAgICAgICRudW1iZXJPZkNvbnN0
cnVjdG9yUGFyYW1ldGVycyA9IDI7CisgICAgICAgIH0gZWxzaWYgKCRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICAkbnVtYmVyT2ZD
b25zdHJ1Y3RvclBhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSB7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNvbnN0IENsYXNzSW5mbyAke2NvbnN0cnVjdG9yQ2xh
c3NOYW1lfTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUludGVyZmFjZU5hbWV9Q29uc3RydWN0b3Jc
IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRSgkY29uc3RydWN0b3JD
bGFzc05hbWUpIH07XG5cbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIke2NvbnN0
cnVjdG9yQ2xhc3NOYW1lfTo6JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0oU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIDogRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQoc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xu
Iik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGlj
VGFibGVzIn0pIHsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInN0YXRpYyBjb25z
dCBIYXNoVGFibGUqIGdldCR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUoRXhlY1N0YXRlKiBl
eGVjKVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gZ2V0SGFzaFRhYmxlRm9yR2xv
YmFsRGF0YShleGVjLT5nbG9iYWxEYXRhKCksICYke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfVRhYmxl
KTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNvbnN0IENsYXNzSW5mbyAke2NvbnN0cnVjdG9y
Q2xhc3NOYW1lfTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUludGVyZmFjZU5hbWV9Q29uc3RydWN0
b3JcIiwgJkJhc2U6OnNfaW5mbywgMCwgZ2V0JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX1UYWJsZSwg
Q1JFQVRFX01FVEhPRF9UQUJMRSgkY29uc3RydWN0b3JDbGFzc05hbWUpIH07XG5cbiIpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiY29uc3QgQ2xh
c3NJbmZvICR7Y29uc3RydWN0b3JDbGFzc05hbWV9OjpzX2luZm8gPSB7IFwiJHt2aXNpYmxlSW50
ZXJmYWNlTmFtZX1Db25zdHJ1Y3RvclwiLCAmQmFzZTo6c19pbmZvLCAmJHtjb25zdHJ1Y3RvckNs
YXNzTmFtZX1UYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRSgkY29uc3RydWN0b3JDbGFzc05h
bWUpIH07XG5cbiIpOworICAgICAgICB9CisKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OiR7Y29uc3RydWN0b3JDbGFzc05hbWV9KFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntc
bn1cblxuIik7CisgICAgfQorCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAidm9pZCAke2NvbnN0
cnVjdG9yQ2xhc3NOYW1lfTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
e1xuIik7CisgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CisgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9i
YWxEYXRhKCkpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJv
dG90eXBlLCBnbG9iYWxPYmplY3QtPnByb3RvdHlwZSgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
O1xuIik7CisgICAgfSBlbHNpZiAoJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSB7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlQoaW5o
ZXJpdHMoJnNfaW5mbykpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBw
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlLCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9u
ZSk7XG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTtcbiIpOworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTtcbiIpOwor
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgJHtwcm90b0NsYXNzTmFtZX06
OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTtcbiIpOwor
ICAgIH0KKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoJHtudW1iZXJP
ZkNvbnN0cnVjdG9yUGFyYW1ldGVyc30pLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51
bSk7XG4iKSBpZiBkZWZpbmVkICRudW1iZXJPZkNvbnN0cnVjdG9yUGFyYW1ldGVyczsKKyAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOworCisgICAgaWYgKCEkZ2VuZXJhdGluZ05hbWVk
Q29uc3RydWN0b3IpIHsKKyAgICAgICAgbXkgJGhhc1N0YXRpY0Z1bmN0aW9ucyA9IDA7CisgICAg
ICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRpbnRlcmZhY2UtPmZ1bmN0aW9uc30pIHsKKyAg
ICAgICAgICAgIGlmICgkZnVuY3Rpb24tPmlzU3RhdGljKSB7CisgICAgICAgICAgICAgICAgJGhh
c1N0YXRpY0Z1bmN0aW9ucyA9IDE7CisgICAgICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIG15ICRraW5kID0gJGhhc1N0YXRpY0Z1bmN0aW9ucyA/
ICJQcm9wZXJ0eSIgOiAiVmFsdWUiOwogCisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJv
b2wgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIGdldFN0YXRpYyR7a2luZH1TbG90
PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9LCBKU0RPTVdyYXBwZXI+KGV4ZWMsICIgLiBjb25zdHJ1
Y3Rvckhhc2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJK
U05vU3RhdGljVGFibGVzIn0sICRjb25zdHJ1Y3RvckNsYXNzTmFtZSkgLiAiLCBqc0Nhc3Q8JHtj
b25zdHJ1Y3RvckNsYXNzTmFtZX0qPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTtcbiIpOwor
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOworCisgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgImJvb2wgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcbiIpOworICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHJldHVybiBnZXRTdGF0aWMke2tpbmR9RGVzY3JpcHRvcjwke2NvbnN0cnVjdG9y
Q2xhc3NOYW1lfSwgSlNET01XcmFwcGVyPihleGVjLCAiIC4gY29uc3RydWN0b3JIYXNoVGFibGVB
Y2Nlc3NvcigkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxl
cyJ9LCAkY29uc3RydWN0b3JDbGFzc05hbWUpIC4gIiwganNDYXN0PCR7Y29uc3RydWN0b3JDbGFz
c05hbWV9Kj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOworICAgIH0KKworICAgIGlmIChJc0NvbnN0
cnVjdGFibGUoJGludGVyZmFjZSkpIHsKICAgICAgICAgaWYgKCEkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRnZW5lcmF0aW5nTmFtZWRDb25z
dHJ1Y3RvcikgewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiQ29uc3RydWN0VHlw
ZSAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25z
dHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKVxuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJ7XG4iKTsKQEAgLTM5NTksMTEgKzM5OTAsMTggQEAgRU5ECiAgICAgfQogfQogCitz
dWIgSXNDdXN0b21Db25zdHJ1Y3RhYmxlCit7CisgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0Owor
CisgICAgcmV0dXJuICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25z
dHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNv
bnN0cnVjdG9yIn07Cit9CisKIHN1YiBJc0NvbnN0cnVjdGFibGUKIHsKICAgICBteSAkaW50ZXJm
YWNlID0gc2hpZnQ7CiAKLSAgICByZXR1cm4gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkpTQ3VzdG9tQ29uc3RydWN0b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ29uc3RydWN0b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
TmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
b25zdHJ1Y3RvclRlbXBsYXRlIn07CisgICAgcmV0dXJuIElzQ3VzdG9tQ29uc3RydWN0YWJsZSgk
aW50ZXJmYWNlKSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0
b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3Rv
ciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclRlbXBs
YXRlIn07CiB9CiAKIDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFycmF5LmNwcAppbmRleCBlYjgzMzkwZmI5MWYyYWI2
YzE0ZmY1MjJiYWU1ZWU4NGU3YWIyZjFiLi41Mzk4NDg0MThlNGNmNzFkOGU2ODg1YWUyNTA5NTNk
MmUzM2Y0MjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5jcHAKQEAgLTUzLDYgKzUzLDI2IEBAIHN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yVGFibGVWYWx1
ZXNbXSA9CiB9OwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTRmxvYXQ2NEFycmF5Q29uc3Ry
dWN0b3JUYWJsZSA9IHsgMSwgMCwgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvclRhYmxlVmFsdWVz
LCAwIH07CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRmxvYXQ2NEFycmF5Q29uc3Ry
dWN0b3I6OmNvbnN0cnVjdEpTRmxvYXQ2NEFycmF5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBK
U0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTRmxvYXQ2
NEFycmF5Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAgUmVmUHRyPEZsb2F0NjRB
cnJheT4gYXJyYXkgPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXc8RmxvYXQ2NEFycmF5LCBkb3Vi
bGU+KGV4ZWMpOworICAgIGlmICghYXJyYXkuZ2V0KCkpCisgICAgICAgIC8vIEV4Y2VwdGlvbiBo
YXMgYWxyZWFkeSBiZWVuIHRocm93bi4KKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVj
LCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0KCkpKSk7Cit9CisKK0pT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBGbG9hdDY0QXJyYXkqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gdG9KU0Fy
cmF5QnVmZmVyVmlldzxKU0Zsb2F0NjRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3Qp
OworfQorCit2b2lkIEpTRmxvYXQ2NEFycmF5OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpbXBsKCkt
PnNldChpbmRleCwgdmFsdWUudG9OdW1iZXIoZXhlYykpOworfQorCiBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlKiBnZXRKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yVGFibGUoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIHJldHVybiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKGV4ZWMtPmdsb2JhbERh
dGEoKSwgJkpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3JUYWJsZSk7CkBAIC04MywyNiArMTAzLDYg
QEAgYm9vbCBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1MKICAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNj
cmlwdG9yPEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgZ2V0
SlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCBqc0Nhc3Q8SlNGbG9hdDY0QXJy
YXlDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0SlNGbG9hdDY0QXJyYXkoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTRmxvYXQ2
NEFycmF5Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXlD
b25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICBSZWZQdHI8RmxvYXQ2NEFycmF5PiBh
cnJheSA9IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlldzxGbG9hdDY0QXJyYXksIGRvdWJsZT4oZXhl
Yyk7Ci0gICAgaWYgKCFhcnJheS5nZXQoKSkKLSAgICAgICAgLy8gRXhjZXB0aW9uIGhhcyBhbHJl
YWR5IGJlZW4gdGhyb3duLgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29u
c3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBhcnJheS5nZXQoKSkpKTsKLX0KLQotSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEZsb2F0NjRBcnJheSogb2JqZWN0KQotewotICAgIHJldHVybiB0b0pTQXJyYXlCdWZm
ZXJWaWV3PEpTRmxvYXQ2NEFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7Ci19Ci0K
LXZvaWQgSlNGbG9hdDY0QXJyYXk6OmluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGltcGwoKS0+c2V0KGlu
ZGV4LCB2YWx1ZS50b051bWJlcihleGVjKSk7Ci19Ci0KIENvbnN0cnVjdFR5cGUgSlNGbG9hdDY0
QXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRh
JiBjb25zdHJ1Y3REYXRhKQogewogICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0g
Y29uc3RydWN0SlNGbG9hdDY0QXJyYXk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5j
cHAKaW5kZXggMjNjMjVhNWY2YmIyYzI0ZGNiOWJhYjZkZWI5NWM3MTQzNGM3NTM2Yi4uMDNlYzIz
MGE1NmVhMzM3YTFjMGRkZTViODVlMzM5NDhmNzMxM2M4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcApAQCAtNTEsMzEgKzUxLDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlVmFsdWVzW10gPQog
fTsKIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3JUYWJsZSA9IHsgMSwgMCwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yVGFi
bGVWYWx1ZXMsIDAgfTsKLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29u
c3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IiLCAm
QmFzZTo6c19pbmZvLCAmSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yVGFibGUsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9
OwotCi1KU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OkpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3JDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKLSAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0KQotewotfQotCi12b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxl
dGUgfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSB8IERvbnRFbnVtKTsKLX0KLQotYm9vbCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVy
biBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yLCBK
U0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JUYWJs
ZSwganNDYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcio+KGNlbGwpLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1ib29sIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0
RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rlc3RF
dmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JUYWJsZSwganNDYXN0PEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3JDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19
Ci0KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RFdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0
b3IgPSBqc0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2Fs
bGVlKCkpOwpAQCAtMTE0LDYgKzg5LDMxIEBAIGJvb2wgZmlsbFRlc3RFdmVudENvbnN0cnVjdG9y
SW5pdChUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQmIGV2ZW50SW5pdCwgSlNEaWN0aW9uCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3Ii
LCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yVGFibGUs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
KSB9OworCitKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OkpTVGVzdEV2ZW50Q29u
c3RydWN0b3JDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0KQoreworfQorCit2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERh
dGEoKSk7CisgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICBwdXREaXJlY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERl
bGV0ZSB8IERvbnRFbnVtKTsKK30KKworYm9vbCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3I6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJl
dHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
LCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JU
YWJsZSwganNDYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcio+KGNlbGwpLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25z
dHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JUYWJsZSwganNDYXN0PEpTVGVzdEV2ZW50Q29u
c3RydWN0b3JDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7
Cit9CisKIENvbnN0cnVjdFR5cGUgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpn
ZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiB7
CiAgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAppbmRleCBiMmEwNmYwNDA4YWZmNWRj
ZTZjYmMwYjYwMzExMmIzOTY2N2EwM2IzLi5hZDg5YmU0NjU3MjljZDExMGI3NTg4MWMzNGFiNTZi
NjRlNzNlNTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcApAQCAtMTAwLDYgKzEwMCwyOSBAQCBD
T01QSUxFX0FTU0VSVCgxID09IFRlc3RTdXBwbGVtZW50YWw6OlNVUFBMRU1FTlRBTENPTlNUQU5U
MSwgVGVzdEludGVyZmFjZUVudW1TVQogQ09NUElMRV9BU1NFUlQoMiA9PSBUZXN0U3VwcGxlbWVu
dGFsOjpDT05TVF9JTVBMLCBUZXN0SW50ZXJmYWNlRW51bUNPTlNUX0lNUExJc1dyb25nVXNlRG9O
b3RDaGVja0NvbnN0YW50cyk7CiAjZW5kaWYKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0SW50ZXJmYWNlKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciogY2FzdGVk
VGhpcyA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgp
KTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Cisg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgY29uc3QgU3RyaW5nJiBzdHIxKE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8g
U3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRl
ZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIGNvbnN0IFN0cmluZyYgc3RyMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAx
LCBEZWZhdWx0SXNVbmRlZmluZWQpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0ID0gY2FzdGVkVGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVSZWZlcmVuY2VFcnJvcihleGVjLCAiVGVzdEludGVyZmFjZSBjb25zdHJ1Y3RvciBhc3NvY2lh
dGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIikpOworICAgIFJlZlB0cjxUZXN0SW50ZXJmYWNl
PiBvYmplY3QgPSBUZXN0SW50ZXJmYWNlOjpjcmVhdGUoY29udGV4dCwgc3RyMSwgc3RyMiwgZWMp
OworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOworfQorCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciIs
ICZCYXNlOjpzX2luZm8sICZKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKSB9OwogCiBKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcjo6SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0xMjUsMjkg
KzE0OCw2IEBAIGJvb2wgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjCiAgICAgcmV0dXJuIGdldFN0YXRpY1By
b3BlcnR5RGVzY3JpcHRvcjxKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciwgSlNET01XcmFwcGVy
PihleGVjLCAmSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZSwganNDYXN0PEpTVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3Rvcjo6Y29uc3RydWN0SlNUZXN0SW50ZXJmYWNlKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBK
U1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgY29uc3QgU3RyaW5nJiBzdHIxKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGNvbnN0IFN0cmluZyYgc3Ry
MihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLmlz
RW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVm
YXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gY2FzdGVk
VGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAi
VGVzdEludGVyZmFjZSBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxh
YmxlIikpOwotICAgIFJlZlB0cjxUZXN0SW50ZXJmYWNlPiBvYmplY3QgPSBUZXN0SW50ZXJmYWNl
OjpjcmVhdGUoY29udGV4dCwgc3RyMSwgc3RyMiwgZWMpOwotICAgIGlmIChlYykgewotICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmpl
Y3QodG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkp
OwotfQotCiBDb25zdHJ1Y3RUeXBlIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiB7CiAgICAg
Y29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RKU1Rlc3RJbnRlcmZhY2U7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYjUyMDFmMzU1MDJmNmNk
YTAxNmVmYjYxZDM0NGU0ZGY4MTI1M2FhOS4uNGE4OGY1YTFlYjE2ZmM4ODQ2YmI3OTNhM2NlYzFi
NjJhYTdkMDFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApAQCAtNzIs
MjAgKzcyLDYgQEAgYm9vbCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWMKICAgICByZXR1cm4gZ2V0U3RhdGlj
VmFsdWVEZXNjcmlwdG9yPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciwgSlNET01X
cmFwcGVyPihleGVjLCAmSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yVGFibGUsIGpz
Q2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkF1ZGlvQ29uc3RydWN0b3IiLCAm
QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JOYW1lZENvbnN0cnVjdG9yKSB9OwotCi1KU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRD
b25zdHJ1Y3Rvcjo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBE
T01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0K
LQotdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQot
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7Ci0gICAgQVNTRVJUKGlu
aGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90
eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOwotfQotCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpj
b25zdHJ1Y3RKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvciogY2FzdGVkVGhpcyA9IGpzQ2Fz
dDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgp
KTsKQEAgLTEwOSw2ICs5NSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKUwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCitjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkF1ZGlvQ29uc3RydWN0
b3IiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKSB9OworCitKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
TmFtZWRDb25zdHJ1Y3Rvcjo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3Io
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisg
ICAgOiBET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkK
K3sKK30KKwordm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7CisgICAgQVNT
RVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOworfQorCiBDb25zdHJ1
Y3RUeXBlIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1
Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiB7CiAgICAgY29u
c3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vZGUuY3BwCmluZGV4IGRhMjRhNGRlMTdjYWY5NTVkN2ZhZTcxMWY5YTEyNDUwOTUw
N2M5NjAuLjFmZTdmNjY3MTE5Y2VkODRmNjJlNjU0MzVjNmI1YzM2ZDFjZmMzZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9k
ZS5jcHAKQEAgLTQ4LDYgKzQ4LDEzIEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3ROb2RlQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KIH07CiAKIHN0YXRpYyBjb25zdCBIYXNo
VGFibGUgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdE5vZGVDb25z
dHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpT
VGVzdE5vZGVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0Tm9kZShFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVz
dE5vZGVDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBSZWZQdHI8VGVzdE5vZGU+
IG9iamVjdCA9IFRlc3ROb2RlOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGFzT2JqZWN0KHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5n
ZXQoKSkpKTsKK30KKwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6c19p
bmZvID0geyAiVGVzdE5vZGVDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3ROb2Rl
Q29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlQ29uc3Ry
dWN0b3IpIH07CiAKIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6SlNUZXN0Tm9kZUNvbnN0cnVjdG9y
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpA
QCAtNzMsMTMgKzgwLDYgQEAgYm9vbCBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUKICAgICByZXR1cm4gZ2V0
U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpTVGVzdE5vZGVDb25zdHJ1Y3RvciwgSlNET01XcmFwcGVy
PihleGVjLCAmSlNUZXN0Tm9kZUNvbnN0cnVjdG9yVGFibGUsIGpzQ2FzdDxKU1Rlc3ROb2RlQ29u
c3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0
SlNUZXN0Tm9kZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNUZXN0Tm9kZUNvbnN0cnVjdG9y
KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxl
ZSgpKTsKLSAgICBSZWZQdHI8VGVzdE5vZGU+IG9iamVjdCA9IFRlc3ROb2RlOjpjcmVhdGUoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5nZXQoKSkpKTsKLX0KLQogQ29uc3RydWN0VHlwZSBK
U1Rlc3ROb2RlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSkKIHsKICAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlv
biA9IGNvbnN0cnVjdEpTVGVzdE5vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGVlNjg3OWVmMmI3MjU3ZGEx
ZmFiZDUzYTg2ZGFkM2Y4MjQ0MmViZTQuLjYyNWYzNDhhOTY1NDZiNDY2ZDc3ZGQ2ODEyZDBiY2Q5
OTRjNjRiYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0xOTksNiArMTk5LDE4IEBAIENPTVBJTEVfQVNTRVJU
KDBYMjAgPT0gVGVzdE9iajo6Q09OU1RfVkFMVUVfMTMsIFRlc3RPYmpFbnVtQ09OU1RfVkFMVUVf
MTNJc1dyb25nCiBDT01QSUxFX0FTU0VSVCgweDFhYmMgPT0gVGVzdE9iajo6Q09OU1RfVkFMVUVf
MTQsIFRlc3RPYmpFbnVtQ09OU1RfVkFMVUVfMTRJc1dyb25nVXNlRG9Ob3RDaGVja0NvbnN0YW50
cyk7CiBDT01QSUxFX0FTU0VSVCgxNSA9PSBUZXN0T2JqOjpDT05TVF9JTVBMLCBUZXN0T2JqRW51
bUNPTlNUX0lNUExJc1dyb25nVXNlRG9Ob3RDaGVja0NvbnN0YW50cyk7CiAKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE9i
aihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNUZXN0T2JqQ29uc3RydWN0b3IqIGNhc3RlZFRo
aXMgPSBqc0Nhc3Q8SlNUZXN0T2JqQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPD0gMCB8fCAhZXhlYy0+YXJndW1lbnQoMCkuaXNGdW5jdGlv
bigpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBSZWZQdHI8
VGVzdENhbGxiYWNrPiB0ZXN0Q2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2Jq
ZWN0KGV4ZWMtPmFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAg
IFJlZlB0cjxUZXN0T2JqPiBvYmplY3QgPSBUZXN0T2JqOjpjcmVhdGUodGVzdENhbGxiYWNrKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5nZXQoKSkpKTsKK30KKwogY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdE9iakNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0T2JqZWN0Q29uc3RydWN0b3Ii
LCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0T2JqQ29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1Rlc3RPYmpDb25zdHJ1Y3RvcikgfTsKIAogSlNUZXN0T2JqQ29uc3RydWN0
b3I6OkpTVGVzdE9iakNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtMjI0LDE4ICsyMzYsNiBAQCBib29sIEpTVGVzdE9i
akNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKgogICAgIHJldHVybiBnZXRTdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3I8SlNUZXN0
T2JqQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdE9iakNvbnN0cnVjdG9y
VGFibGUsIGpzQ2FzdDxKU1Rlc3RPYmpDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0
T2JqQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE9iaihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgSlNUZXN0T2JqQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqQ29u
c3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA8IDEpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0g
MCB8fCAhZXhlYy0+YXJndW1lbnQoMCkuaXNGdW5jdGlvbigpKQotICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiB0ZXN0Q2FsbGJh
Y2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwotICAgIFJlZlB0cjxUZXN0T2JqPiBvYmplY3Qg
PSBUZXN0T2JqOjpjcmVhdGUodGVzdENhbGxiYWNrKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGFzT2JqZWN0KHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIG9iamVj
dC5nZXQoKSkpKTsKLX0KLQogQ29uc3RydWN0VHlwZSBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQogewog
ICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0SlNUZXN0T2JqOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCmluZGV4IDUyZDJl
YTg1MDBmMGQxZmM0MmMwODE5NTRkNjhmMjAwOGFjYjQ2ZTQuLjUxOTM1ODViNWIxNDc3Mzk2NWFh
MDhjNzM3Y2Y1NjAzNjFkMjQ2YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycy5jcHAKQEAgLTQ4LDYgKzQ4LDE4IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JUYWJsZVZhbHVlc1td
CiB9OwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNDb25zdHJ1Y3RvclRhYmxlID0geyAxLCAwLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Q29uc3RydWN0b3JUYWJsZVZhbHVlcywgMCB9OworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7Cisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGNv
bnN0IFN0cmluZyYgc3RyaW5nKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1
bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJlZlB0cjxUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycz4gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShz
dHJpbmcpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOworfQorCiBjb25zdCBD
bGFzc0luZm8gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpzX2luZm8g
PSB7ICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5m
bywgJkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvclRhYmxlLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcikg
fTsKIAogSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC03MywxOCArODUsNiBAQCBib29sIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KgogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JUYWJsZSwganNDYXN0PEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwotICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBjb25zdCBTdHJp
bmcmIHN0cmluZyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRl
ZmluZWQpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhl
YywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoc3RyaW5nKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5nZXQoKSkpKTsKLX0KLQogQ29uc3RydWN0VHlwZSBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEo
SlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKIHsKICAgICBjb25zdHJ1Y3RE
YXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuY3BwCmluZGV4IDk1NzMzNTFkNzAwYjQzODQ5MGEzNDI0MjRhYTU2MjViZWIxNjcwOGEu
LjM2NTZlZTcyMGNlOGI2OTUzZmIwN2IxNmU0ODNhOWJkYTNhODYzZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC02
MSw2ICs2MSwyNCBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZQogfTsKIAogc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rv
clRhYmxlID0geyAxLCAwLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25z
dHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKiBjYXN0
ZWRUaGlzID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0
cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBjb25zdCBTdHJpbmcmIGhlbGxvKE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gU3Ry
aW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmlu
ZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoZXhlYywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVs
dElzVW5kZWZpbmVkKSwgMCwgMCkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBBcnJheSog
dHJhbnNmZXJMaXN0KHRvQXJyYXkoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMiwgRGVm
YXVsdElzVW5kZWZpbmVkKSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBSZWZQdHI8VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gb2JqZWN0ID0gVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlKGhlbGxvLCBkYXRhLCB0cmFuc2Zlckxpc3QpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOworfQorCiBjb25zdCBDbGFzc0luZm8g
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OnNfaW5mbyA9
IHsgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciIsICZCYXNl
OjpzX2luZm8sICZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rv
clRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNvbnN0cnVjdG9yKSB9OwogCiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcjo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCkBAIC04NiwyNCArMTA0LDYgQEAgYm9vbCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKICAg
ICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlLCBqc0Nhc3Q8SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1
Y3RKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKiBj
YXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNv
bnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAyKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBjb25zdCBTdHJpbmcmIGhlbGxvKE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8g
U3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRl
ZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUoZXhlYywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVm
YXVsdElzVW5kZWZpbmVkKSwgMCwgMCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBBcnJh
eSogdHJhbnNmZXJMaXN0KHRvQXJyYXkoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMiwg
RGVmYXVsdElzVW5kZWZpbmVkKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBSZWZQdHI8
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gb2JqZWN0ID0gVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlKGhlbGxvLCBkYXRhLCB0cmFuc2Zlckxpc3Qp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwotfQotCiBDb25zdHJ1Y3RUeXBl
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiB7CiAgICAg
Y29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179916</attachid>
            <date>2012-12-18 03:45:39 -0800</date>
            <delta_ts>2012-12-18 04:08:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105271-20121218124255.patch</filename>
            <type>text/plain</type>
            <size>44457</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTg2NGM1MGY0NzE2NGMy
Mjk3YTI0OGMxM2NiMTU5ZjU0Y2ViMDIwYy4uZDIyNGIyZjMzZDRlNTAxNDk5NWVkNTY0MzExM2M0
Zjk1NGIxZWFiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTEyLTE4ICBUb21t
eSBXaWRlbmZseWNodCAgPHRvbW15d0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0pTQ10gUmVm
YWN0b3JpbmcgQ29kZUdlbmVyYXRvckpTLnBtIHRvIHNpbXBsaWZ5IGFkZGluZyBzdXBwb3J0IGZv
ciBvdmVybG9hZGVkIGNvbnN0cnVjdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MjcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBzcGxpdHMgdGhlIHZlcnkgbGFyZ2UgZnVuY3Rp
b24gdGhhdCBnZW5lcmF0ZXMgY29uc3RydWN0b3IgY29kZSBpbnRvIGEgZmV3IHNtYWxsZXIgb25l
cy4KKyAgICAgICAgTm8gY2hhbmdlcyBpbiBhY3R1YWwgZ2VuZXJhdGVkIGNvZGUgYnV0IHNvbWUg
ZnVuY3Rpb25zIGluIHRoZSBnZW5lcmF0ZWQgYmluZGluZ3MgY29kZSBtb3Zlcy4KKworICAgICAg
ICBFeGlzdGluZyB0ZXN0cyBjb3ZlciBwYXRjaC4KKworICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6
CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbnMpOgorICAgICAgICAoR2Vu
ZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3Rv
clN1cHBvcnREZWZpbml0aW9ucyk6CisgICAgICAgIChJc0N1c3RvbUNvbnN0cnVjdGFibGUpOgor
ICAgICAgICAoSXNDb25zdHJ1Y3RhYmxlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNGbG9hdDY0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNGbG9hdDY0QXJy
YXlDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNGbG9hdDY0QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRmxvYXQ2
NEFycmF5OjppbmRleFNldHRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OkpTVGVzdEV2ZW50
Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENv
bnN0cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5h
bWVkQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ck5hbWVkQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
b2RlQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T2JqKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMTItMTggIEV1Z2VuZSBLbHl1Y2huaWtv
diAgPGV1c3Rhc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTmV0d29y
azogZGlzcGxheSBKYXZhU2NyaXB0IHN0YWNrIGluIGNhc2Ugb2Ygc2NyaXB0IGluaXRpYXRvci4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KaW5kZXggMTBlOTBjNDA4ZGI2YWU2MDEwZjFhZjg5OGQ5YmJkZGY5NjNkNzc0OS4uNDA3MmVl
NWJlZjc3MjNkMzc2Y2ZmM2Y2Mzk0MjIyYzIxNzBhYTU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTE1MjgsOSArMTUy
OCw5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb21waWxlVGltZUNoZWNrRm9yRW51bXNJZk5l
ZWRlZCgkaW50ZXJmYWNlKSk7CiAKICAgICAgICAgbXkgJHByb3RvQ2xhc3NOYW1lID0gIiR7Y2xh
c3NOYW1lfVByb3RvdHlwZSI7Ci0gICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9u
KFxAaW1wbENvbnRlbnQsICRjbGFzc05hbWUsICRwcm90b0NsYXNzTmFtZSwgJGludGVyZmFjZU5h
bWUsICR2aXNpYmxlSW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZSk7CisgICAgICAgIEdlbmVyYXRl
Q29uc3RydWN0b3JEZWZpbml0aW9ucyhcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAkcHJvdG9D
bGFzc05hbWUsICRpbnRlcmZhY2VOYW1lLCAkdmlzaWJsZUludGVyZmFjZU5hbWUsICRpbnRlcmZh
Y2UpOwogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVk
Q29uc3RydWN0b3IifSkgewotICAgICAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRp
b24oXEBpbXBsQ29udGVudCwgJGNsYXNzTmFtZSwgJHByb3RvQ2xhc3NOYW1lLCAkaW50ZXJmYWNl
TmFtZSwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3Ii
fSwgJGludGVyZmFjZSwgIkdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yIik7CisgICAgICAgICAg
ICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbnMoXEBpbXBsQ29udGVudCwgJGNsYXNzTmFt
ZSwgJHByb3RvQ2xhc3NOYW1lLCAkaW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSwgJGludGVyZmFjZSwgIkdlbmVyYXRpbmdO
YW1lZENvbnN0cnVjdG9yIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM3MTEsMTAgKzM3MTEs
OSBAQCBFTkQKICAgICB9CiB9CiAKLXN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbgor
c3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9ucwogewogICAgIG15ICRvdXRwdXRBcnJh
eSA9IHNoaWZ0OwotCiAgICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OwogICAgIG15ICRwcm90b0Ns
YXNzTmFtZSA9IHNoaWZ0OwogICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7CkBAIC0zNzI2
LDc4ICszNzI1LDIyIEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbgogICAgICMg
Rm9yIG5vdyBtaW1pYyB0aGUgb2xkIGJlaGF2aW91ciBieSBvbmx5IGdlbmVyYXRpbmcgY29kZSBm
b3IgdGhlIGxhc3QgIkNvbnN0cnVjdG9yIiBhdHRyaWJ1dGUuCiAgICAgbXkgJGZ1bmN0aW9uID0g
QHskaW50ZXJmYWNlLT5jb25zdHJ1Y3RvcnN9Wy0xXTsKIAotICAgIG15ICRjb25zdHJ1Y3RvckNs
YXNzTmFtZSA9ICRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvciA/ICIke2NsYXNzTmFtZX1OYW1l
ZENvbnN0cnVjdG9yIiA6ICIke2NsYXNzTmFtZX1Db25zdHJ1Y3RvciI7Ci0gICAgbXkgJG51bWJl
ck9mQ29uc3RydWN0b3JQYXJhbWV0ZXJzID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkNvbnN0cnVjdG9yUGFyYW1ldGVycyJ9OwotICAgIGlmICghZGVmaW5lZCAkbnVtYmVyT2ZD
b25zdHJ1Y3RvclBhcmFtZXRlcnMpIHsKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0Nv
bnN0cnVjdG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIkV2ZW50IikpIHsKLSAgICAgICAgICAgICRu
dW1iZXJPZkNvbnN0cnVjdG9yUGFyYW1ldGVycyA9IDI7Ci0gICAgICAgIH0gZWxzaWYgKCRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9KSB7Ci0gICAgICAgICAg
ICAkbnVtYmVyT2ZDb25zdHJ1Y3RvclBhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVy
c307Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVj
dG9yKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNvbnN0IENsYXNzSW5mbyAke2Nv
bnN0cnVjdG9yQ2xhc3NOYW1lfTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUludGVyZmFjZU5hbWV9
Q29uc3RydWN0b3JcIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRSgk
Y29uc3RydWN0b3JDbGFzc05hbWUpIH07XG5cbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0oU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsK
LSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIDogRE9NQ29uc3RydWN0b3JXaXRoRG9j
dW1lbnQoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpXG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAie1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJKU05vU3RhdGljVGFibGVzIn0pIHsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
InN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGdldCR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUo
RXhlY1N0YXRlKiBleGVjKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gZ2V0SGFz
aFRhYmxlRm9yR2xvYmFsRGF0YShleGVjLT5nbG9iYWxEYXRhKCksICYke2NvbnN0cnVjdG9yQ2xh
c3NOYW1lfVRhYmxlKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxu
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNvbnN0IENsYXNzSW5mbyAk
e2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUludGVyZmFjZU5h
bWV9Q29uc3RydWN0b3JcIiwgJkJhc2U6OnNfaW5mbywgMCwgZ2V0JHtjb25zdHJ1Y3RvckNsYXNz
TmFtZX1UYWJsZSwgQ1JFQVRFX01FVEhPRF9UQUJMRSgkY29uc3RydWN0b3JDbGFzc05hbWUpIH07
XG5cbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiY29uc3QgQ2xhc3NJbmZvICR7Y29uc3RydWN0b3JDbGFzc05hbWV9OjpzX2luZm8gPSB7IFwi
JHt2aXNpYmxlSW50ZXJmYWNlTmFtZX1Db25zdHJ1Y3RvclwiLCAmQmFzZTo6c19pbmZvLCAmJHtj
b25zdHJ1Y3RvckNsYXNzTmFtZX1UYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRSgkY29uc3Ry
dWN0b3JDbGFzc05hbWUpIH07XG5cbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OiR7Y29uc3RydWN0b3JDbGFzc05h
bWV9KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KVxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICA6IERPTUNvbnN0cnVjdG9y
T2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KVxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIntcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwot
ICAgIH0KLQotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjb25zdHJ1Y3RvckNsYXNz
TmFtZX06OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdClcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAg
IGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewotICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTtc
biIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZ2xv
YmFsT2JqZWN0LT5wcm90b3R5cGUoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTtcbiIpOwotICAg
IH0gZWxzaWYgKCRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvcikgewotICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTtcbiIp
OwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZzX2lu
Zm8pKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgJHtjbGFz
c05hbWV9UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpO1xuIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4iKTsKLSAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsICR7cHJvdG9DbGFzc05hbWV9OjpzZWxmKGV4ZWMs
IGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7XG4iKTsKLSAgICB9Ci0gICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKCR7bnVtYmVyT2ZDb25zdHJ1Y3Rv
clBhcmFtZXRlcnN9KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pO1xuIikgaWYg
ZGVmaW5lZCAkbnVtYmVyT2ZDb25zdHJ1Y3RvclBhcmFtZXRlcnM7Ci0gICAgcHVzaChAJG91dHB1
dEFycmF5LCAifVxuXG4iKTsKLQotICAgIGlmICghJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9y
KSB7Ci0gICAgICAgIG15ICRoYXNTdGF0aWNGdW5jdGlvbnMgPSAwOwotICAgICAgICBmb3JlYWNo
IG15ICRmdW5jdGlvbiAoQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KSB7Ci0gICAgICAgICAgICBp
ZiAoJGZ1bmN0aW9uLT5pc1N0YXRpYykgewotICAgICAgICAgICAgICAgICRoYXNTdGF0aWNGdW5j
dGlvbnMgPSAxOwotICAgICAgICAgICAgICAgIGxhc3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBteSAka2luZCA9ICRoYXNTdGF0aWNGdW5jdGlvbnMgPyAiUHJvcGVydHki
IDogIlZhbHVlIjsKKyAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbigkb3V0cHV0QXJy
YXksICRjbGFzc05hbWUsICRwcm90b0NsYXNzTmFtZSwgJGludGVyZmFjZU5hbWUsICR2aXNpYmxl
SW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZSwgJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yLCAk
ZnVuY3Rpb24pOworICAgIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzKCRvdXRwdXRB
cnJheSwgJGNsYXNzTmFtZSwgJHByb3RvQ2xhc3NOYW1lLCAkaW50ZXJmYWNlTmFtZSwgJHZpc2li
bGVJbnRlcmZhY2VOYW1lLCAkaW50ZXJmYWNlLCAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3Is
ICRmdW5jdGlvbik7Cit9CiAKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9vbCAke2Nv
bnN0cnVjdG9yQ2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpXG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7Ci0gICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gZ2V0U3RhdGljJHtraW5kfVNsb3Q8JHtjb25z
dHJ1Y3RvckNsYXNzTmFtZX0sIEpTRE9NV3JhcHBlcj4oZXhlYywgIiAuIGNvbnN0cnVjdG9ySGFz
aFRhYmxlQWNjZXNzb3IoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9TdGF0
aWNUYWJsZXMifSwgJGNvbnN0cnVjdG9yQ2xhc3NOYW1lKSAuICIsIGpzQ2FzdDwke2NvbnN0cnVj
dG9yQ2xhc3NOYW1lfSo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xuIik7Ci0gICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CitzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRl
ZmluaXRpb24KK3sKKyAgICBteSAkb3V0cHV0QXJyYXkgPSBzaGlmdDsKKyAgICBteSAkY2xhc3NO
YW1lID0gc2hpZnQ7CisgICAgbXkgJHByb3RvQ2xhc3NOYW1lID0gc2hpZnQ7CisgICAgbXkgJGlu
dGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBteSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSBzaGlm
dDsKKyAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CisgICAgbXkgJGdlbmVyYXRpbmdOYW1lZENv
bnN0cnVjdG9yID0gc2hpZnQ7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CiAKLSAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiYm9vbCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKVxu
Iik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgcmV0dXJuIGdldFN0YXRpYyR7a2luZH1EZXNjcmlwdG9yPCR7Y29u
c3RydWN0b3JDbGFzc05hbWV9LCBKU0RPTVdyYXBwZXI+KGV4ZWMsICIgLiBjb25zdHJ1Y3Rvckhh
c2hUYWJsZUFjY2Vzc29yKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3Rh
dGljVGFibGVzIn0sICRjb25zdHJ1Y3RvckNsYXNzTmFtZSkgLiAiLCBqc0Nhc3Q8JHtjb25zdHJ1
Y3RvckNsYXNzTmFtZX0qPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuIik7
Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0gICAgfQorICAgIG15ICRj
b25zdHJ1Y3RvckNsYXNzTmFtZSA9ICRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvciA/ICIke2Ns
YXNzTmFtZX1OYW1lZENvbnN0cnVjdG9yIiA6ICIke2NsYXNzTmFtZX1Db25zdHJ1Y3RvciI7CiAK
ICAgICBpZiAoSXNDb25zdHJ1Y3RhYmxlKCRpbnRlcmZhY2UpKSB7CiAgICAgICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZhY2UsICJFdmVudCIpKSB7
CkBAIC0zODg4LDEwICszODMxLDkgQEAgRU5ECiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGltcGwoKS0+c2V0KGluZGV4LCB2YWx1ZS50b051bWJlcihleGVjKSk7XG4i
KTsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwogICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2lmICghKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pICYmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSB8fCAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0
b3IpKSB7CisgICAgICAgIH0gZWxzaWYgKCFIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNl
KSAmJiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9y
In0gfHwgJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSkgewogICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdG9y
Q2xhc3NOYW1lfTo6Y29uc3RydWN0JHtjbGFzc05hbWV9KEV4ZWNTdGF0ZSogZXhlYylcbiIpOwog
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7Ci0KICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSogY2FzdGVkVGhp
cyA9IGpzQ2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KGV4ZWMtPmNhbGxlZSgpKTtcbiIp
OwogCiAgICAgICAgICAgICBteSBAY29uc3RydWN0b3JBcmdMaXN0OwpAQCAtMzk0OCw3ICszODkw
LDkzIEBAIEVORAogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgb2JqZWN0LmdldCgpKSkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICJ9XG5cbiIpOwogICAgICAgICB9CisgICAgfQorfQorCitzdWIgR2VuZXJhdGVDb25zdHJ1
Y3RvckhlbHBlck1ldGhvZHMKK3sKKyAgICBteSAkb3V0cHV0QXJyYXkgPSBzaGlmdDsKKyAgICBt
eSAkY2xhc3NOYW1lID0gc2hpZnQ7CisgICAgbXkgJHByb3RvQ2xhc3NOYW1lID0gc2hpZnQ7Cisg
ICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBteSAkdmlzaWJsZUludGVyZmFjZU5h
bWUgPSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CisgICAgbXkgJGdlbmVyYXRp
bmdOYW1lZENvbnN0cnVjdG9yID0gc2hpZnQ7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CisK
KyAgICBteSAkY29uc3RydWN0b3JDbGFzc05hbWUgPSAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0
b3IgPyAiJHtjbGFzc05hbWV9TmFtZWRDb25zdHJ1Y3RvciIgOiAiJHtjbGFzc05hbWV9Q29uc3Ry
dWN0b3IiOworICAgIG15ICRudW1iZXJPZkNvbnN0cnVjdG9yUGFyYW1ldGVycyA9ICRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclBhcmFtZXRlcnMifTsKKyAgICBp
ZiAoIWRlZmluZWQgJG51bWJlck9mQ29uc3RydWN0b3JQYXJhbWV0ZXJzKSB7CisgICAgICAgIGlm
ICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZhY2UsICJFdmVu
dCIpKSB7CisgICAgICAgICAgICAkbnVtYmVyT2ZDb25zdHJ1Y3RvclBhcmFtZXRlcnMgPSAyOwor
ICAgICAgICB9IGVsc2lmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3Ry
dWN0b3IifSkgeworICAgICAgICAgICAgJG51bWJlck9mQ29uc3RydWN0b3JQYXJhbWV0ZXJzID0g
QHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRn
ZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvcikgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJjb25zdCBDbGFzc0luZm8gJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OnNfaW5mbyA9IHsgXCIk
e3Zpc2libGVJbnRlcmZhY2VOYW1lfUNvbnN0cnVjdG9yXCIsICZCYXNlOjpzX2luZm8sIDAsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoJGNvbnN0cnVjdG9yQ2xhc3NOYW1lKSB9O1xuXG4iKTsKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OiR7Y29u
c3RydWN0b3JDbGFzc05hbWV9KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICA6
IERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KVxuIik7
CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICJ9XG5cbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9KSB7CisgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBnZXQke2NvbnN0
cnVjdG9yQ2xhc3NOYW1lfVRhYmxlKEV4ZWNTdGF0ZSogZXhlYylcbiIpOworICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgcmV0dXJuIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0
YSgpLCAmJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX1UYWJsZSk7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICJjb25zdCBDbGFzc0luZm8gJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OnNfaW5mbyA9IHsg
XCIke3Zpc2libGVJbnRlcmZhY2VOYW1lfUNvbnN0cnVjdG9yXCIsICZCYXNlOjpzX2luZm8sIDAs
IGdldCR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUoJGNv
bnN0cnVjdG9yQ2xhc3NOYW1lKSB9O1xuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNvbnN0IENsYXNzSW5mbyAke2NvbnN0cnVjdG9yQ2xh
c3NOYW1lfTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUludGVyZmFjZU5hbWV9Q29uc3RydWN0b3Jc
IiwgJkJhc2U6OnNfaW5mbywgJiR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoJGNvbnN0cnVjdG9yQ2xhc3NOYW1lKSB9O1xuXG4iKTsKKyAgICAgICAg
fQogCisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiR7Y29uc3RydWN0b3JDbGFzc05hbWV9
Ojoke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdClcbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG59XG5cbiIpOworICAgIH0KKworICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmZpbmlz
aENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dClcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgIGlmICgkaW50ZXJm
YWNlTmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTtcbiIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTtcbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0LT5w
cm90b3R5cGUoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTtcbiIpOworICAgIH0gZWxzaWYgKCRn
ZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvcikgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTtcbiIpOworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTtcbiIpOwor
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgJHtjbGFzc05hbWV9UHJvdG90
eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpO1xuIik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4
ZWMtPmdsb2JhbERhdGEoKSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsICR7cHJvdG9DbGFzc05hbWV9OjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVj
dCksIERvbnREZWxldGUgfCBSZWFkT25seSk7XG4iKTsKKyAgICB9CisgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKCR7bnVtYmVyT2ZDb25zdHJ1Y3RvclBhcmFtZXRlcnN9
KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pO1xuIikgaWYgZGVmaW5lZCAkbnVt
YmVyT2ZDb25zdHJ1Y3RvclBhcmFtZXRlcnM7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxu
XG4iKTsKKworICAgIGlmICghJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSB7CisgICAgICAg
IG15ICRoYXNTdGF0aWNGdW5jdGlvbnMgPSAwOworICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlv
biAoQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgICAgICBpZiAoJGZ1bmN0aW9u
LT5pc1N0YXRpYykgeworICAgICAgICAgICAgICAgICRoYXNTdGF0aWNGdW5jdGlvbnMgPSAxOwor
ICAgICAgICAgICAgICAgIGxhc3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBteSAka2luZCA9ICRoYXNTdGF0aWNGdW5jdGlvbnMgPyAiUHJvcGVydHkiIDogIlZhbHVlIjsK
KworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7Y29uc3RydWN0b3JDbGFzc05h
bWV9OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIHJldHVybiBnZXRTdGF0aWMke2tpbmR9U2xvdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1l
fSwgSlNET01XcmFwcGVyPihleGVjLCAiIC4gY29uc3RydWN0b3JIYXNoVGFibGVBY2Nlc3Nvcigk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNOb1N0YXRpY1RhYmxlcyJ9LCAkY29u
c3RydWN0b3JDbGFzc05hbWUpIC4gIiwganNDYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4o
Y2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAifVxuXG4iKTsKKworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7Y29u
c3RydWN0b3JDbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAie1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gZ2V0U3Rh
dGljJHtraW5kfURlc2NyaXB0b3I8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0sIEpTRE9NV3JhcHBl
cj4oZXhlYywgIiAuIGNvbnN0cnVjdG9ySGFzaFRhYmxlQWNjZXNzb3IoJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkpTTm9TdGF0aWNUYWJsZXMifSwgJGNvbnN0cnVjdG9yQ2xhc3NO
YW1lKSAuICIsIGpzQ2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KG9iamVjdCksIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
fVxuXG4iKTsKKyAgICB9CisKKyAgICBpZiAoSXNDb25zdHJ1Y3RhYmxlKCRpbnRlcmZhY2UpKSB7
CiAgICAgICAgIGlmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29u
c3RydWN0b3IifSB8fCAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpIHsKICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIkNvbnN0cnVjdFR5cGUgJHtjb25zdHJ1Y3RvckNsYXNzTmFt
ZX06OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSlcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CkBAIC0zOTU5
LDExICszOTg3LDE4IEBAIEVORAogICAgIH0KIH0KIAorc3ViIEhhc0N1c3RvbUNvbnN0cnVjdG9y
Cit7CisgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworCisgICAgcmV0dXJuICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn07Cit9CisKIHN1YiBJ
c0NvbnN0cnVjdGFibGUKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CiAKLSAgICByZXR1
cm4gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0g
fHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tQ29uc3RydWN0b3Ii
fSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSB8fCAk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclRlbXBsYXRlIn07Cisg
ICAgcmV0dXJuIEhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpIHx8ICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yVGVtcGxhdGUifTsKIH0KIAogMTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJh
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNGbG9hdDY0
QXJyYXkuY3BwCmluZGV4IGViODMzOTBmYjkxZjJhYjZjMTRmZjUyMmJhZTVlZTg0ZTdhYjJmMWIu
LjUzOTg0ODQxOGU0Y2Y3MWQ4ZTY4ODVhZTI1MDk1M2QyZTMzZjQyMDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0Zsb2F0NjRBcnJheS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRmxvYXQ2NEFy
cmF5LmNwcApAQCAtNTMsNiArNTMsMjYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
RmxvYXQ2NEFycmF5Q29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KIH07CiAKIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvclRhYmxlID0geyAxLCAwLCBKU0Zs
b2F0NjRBcnJheUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNGbG9hdDY0
QXJyYXkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3Iq
IGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcio+KGV4ZWMt
PmNhbGxlZSgpKTsKKyAgICBSZWZQdHI8RmxvYXQ2NEFycmF5PiBhcnJheSA9IGNvbnN0cnVjdEFy
cmF5QnVmZmVyVmlldzxGbG9hdDY0QXJyYXksIGRvdWJsZT4oZXhlYyk7CisgICAgaWYgKCFhcnJh
eS5nZXQoKSkKKyAgICAgICAgLy8gRXhjZXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gdGhyb3duLgor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9i
amVjdCgpLCBhcnJheS5nZXQoKSkpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEZsb2F0NjRBcnJh
eSogb2JqZWN0KQoreworICAgIHJldHVybiB0b0pTQXJyYXlCdWZmZXJWaWV3PEpTRmxvYXQ2NEFy
cmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7Cit9CisKK3ZvaWQgSlNGbG9hdDY0QXJy
YXk6OmluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlND
OjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGltcGwoKS0+c2V0KGluZGV4LCB2YWx1ZS50b051bWJl
cihleGVjKSk7Cit9CisKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGdldEpTRmxvYXQ2NEFycmF5
Q29uc3RydWN0b3JUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIGdldEhhc2hU
YWJsZUZvckdsb2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCAmSlNGbG9hdDY0QXJyYXlDb25z
dHJ1Y3RvclRhYmxlKTsKQEAgLTgzLDI2ICsxMDMsNiBAQCBib29sIEpTRmxvYXQ2NEFycmF5Q29u
c3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVj
UwogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNGbG9hdDY0QXJyYXlDb25z
dHJ1Y3RvciwgSlNET01XcmFwcGVyPihleGVjLCBnZXRKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9y
VGFibGUoZXhlYyksIGpzQ2FzdDxKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yKj4ob2JqZWN0KSwg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU0Zsb2F0NjRBcnJheShF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvcioganNDb25z
dHJ1Y3RvciA9IGpzQ2FzdDxKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVl
KCkpOwotICAgIFJlZlB0cjxGbG9hdDY0QXJyYXk+IGFycmF5ID0gY29uc3RydWN0QXJyYXlCdWZm
ZXJWaWV3PEZsb2F0NjRBcnJheSwgZG91YmxlPihleGVjKTsKLSAgICBpZiAoIWFycmF5LmdldCgp
KQotICAgICAgICAvLyBFeGNlcHRpb24gaGFzIGFscmVhZHkgYmVlbiB0aHJvd24uCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCks
IGFycmF5LmdldCgpKSkpOwotfQotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRmxvYXQ2NEFycmF5KiBvYmpl
Y3QpCi17Ci0gICAgcmV0dXJuIHRvSlNBcnJheUJ1ZmZlclZpZXc8SlNGbG9hdDY0QXJyYXk+KGV4
ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKLX0KLQotdm9pZCBKU0Zsb2F0NjRBcnJheTo6aW5k
ZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgaW1wbCgpLT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMp
KTsKLX0KLQogQ29uc3RydWN0VHlwZSBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiB7CiAgICAg
Y29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RKU0Zsb2F0NjRBcnJheTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCAyM2MyNWE1ZjZiYjJjMjRk
Y2I5YmFiNmRlYjk1YzcxNDM0Yzc1MzZiLi4wM2VjMjMwYTU2ZWEzMzdhMWMwZGRlNWI4NWUzMzk0
OGY3MzEzYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC01MSwz
MSArNTEsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXZlbnRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9CiB9OwogCiBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlID0geyAxLCAwLCBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgMCB9OwotY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yQ29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH07Ci0KLUpTVGVzdEV2ZW50Q29uc3RydWN0
b3JDb25zdHJ1Y3Rvcjo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIDogRE9N
Q29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLXZvaWQg
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6OnNl
bGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBq
c051bWJlcigyKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwotfQotCi1ib29s
IEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlLCBqc0Nhc3Q8SlNUZXN0RXZlbnRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLWJv
b2wgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0dXJu
IGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rv
clRhYmxlLCBqc0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKj4ob2JqZWN0
KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVz
dEV2ZW50Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVGVzdEV2ZW50Q29u
c3RydWN0b3JDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1Rlc3RFdmVudENv
bnN0cnVjdG9yQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CkBAIC0xMTQsNiArODksMzEg
QEAgYm9vbCBmaWxsVGVzdEV2ZW50Q29uc3RydWN0b3JJbml0KFRlc3RFdmVudENvbnN0cnVjdG9y
SW5pdCYgZXZlbnRJbml0LCBKU0RpY3Rpb24KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAi
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RF
dmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH07CisKK0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3JDb25zdHJ1Y3Rvcjo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDog
RE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK3Zv
aWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBBU1NFUlQoaW5oZXJp
dHMoJnNfaW5mbykpOworICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGU6
OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBw
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
LCBqc051bWJlcigyKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworfQorCiti
b29sIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxK
U1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpT
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclRhYmxlLCBqc0Nhc3Q8SlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisK
K2Jvb2wgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0
dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3RvclRhYmxlLCBqc0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKj4ob2Jq
ZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwogQ29uc3RydWN0VHlwZSBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwg
Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKIHsKICAgICBjb25zdHJ1Y3REYXRhLm5hdGl2
ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEpTVGVzdEV2ZW50Q29uc3RydWN0b3I7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRl
cmZhY2UuY3BwCmluZGV4IGIyYTA2ZjA0MDhhZmY1ZGNlNmNiYzBiNjAzMTEyYjM5NjY3YTAzYjMu
LmFkODliZTQ2NTcyOWNkMTEwYjc1ODgxYzM0YWI1NmI2NGU3M2U1NmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRl
cmZhY2UuY3BwCkBAIC0xMDAsNiArMTAwLDI5IEBAIENPTVBJTEVfQVNTRVJUKDEgPT0gVGVzdFN1
cHBsZW1lbnRhbDo6U1VQUExFTUVOVEFMQ09OU1RBTlQxLCBUZXN0SW50ZXJmYWNlRW51bVNVCiBD
T01QSUxFX0FTU0VSVCgyID09IFRlc3RTdXBwbGVtZW50YWw6OkNPTlNUX0lNUEwsIFRlc3RJbnRl
cmZhY2VFbnVtQ09OU1RfSU1QTElzV3JvbmdVc2VEb05vdENoZWNrQ29uc3RhbnRzKTsKICNlbmRp
ZgogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU1Rlc3RJbnRlcmZhY2UoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBjb25zdCBTdHJpbmcmIHN0cjEoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwg
RGVmYXVsdElzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHIy
KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNF
bXB0eSgpID8gU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZh
dWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBjYXN0ZWRU
aGlzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJU
ZXN0SW50ZXJmYWNlIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFi
bGUiKSk7CisgICAgUmVmUHRyPFRlc3RJbnRlcmZhY2U+IG9iamVjdCA9IFRlc3RJbnRlcmZhY2U6
OmNyZWF0ZShjb250ZXh0LCBzdHIxLCBzdHIyLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVj
dCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7
Cit9CisKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6c19pbmZv
ID0geyAiVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3IpIH07CiAKIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTEyNSwyOSArMTQ4LDYgQEAgYm9vbCBKU1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWMKICAgICByZXR1cm4gZ2V0U3RhdGljUHJvcGVydHlEZXNjcmlwdG9yPEpTVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvclRhYmxlLCBqc0Nhc3Q8SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IqPihvYmpl
Y3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RJbnRl
cmZhY2UoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKj4oZXhlYy0+
Y2FsbGVlKCkpOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBjb25zdCBTdHJpbmcmIHN0cjEo
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS5pc0Vt
cHR5KCkgPyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1
bHRJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHIyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBjYXN0ZWRUaGlzLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJUZXN0SW50ZXJmYWNlIGNvbnN0cnVjdG9y
IGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7Ci0gICAgUmVmUHRyPFRlc3RJ
bnRlcmZhY2U+IG9iamVjdCA9IFRlc3RJbnRlcmZhY2U6OmNyZWF0ZShjb250ZXh0LCBzdHIxLCBz
dHIyLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7Ci19Ci0KIENvbnN0cnVjdFR5cGUgSlNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3Ry
dWN0RGF0YSYgY29uc3RydWN0RGF0YSkKIHsKICAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5j
dGlvbiA9IGNvbnN0cnVjdEpTVGVzdEludGVyZmFjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0
cnVjdG9yLmNwcAppbmRleCBiNTIwMWYzNTUwMmY2Y2RhMDE2ZWZiNjFkMzQ0ZTRkZjgxMjUzYWE5
Li40YTg4ZjVhMWViMTZmYzg4NDZiYjc5M2EzY2VjMWI2MmFhN2QwMWUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC03MiwyMCArNzIsNiBAQCBib29sIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2Jq
ZWN0KiBvYmplYwogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yQ29uc3RydWN0b3JUYWJsZSwganNDYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAK
LWNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6
c19pbmZvID0geyAiQXVkaW9Db25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IpIH07
Ci0KLUpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICA6IERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotewotfQotCi12b2lkIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JOYW1lZENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsT2JqZWN0KTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgIHB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2Jq
ZWN0KSwgTm9uZSk7Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1l
ZENvbnN0cnVjdG9yKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JO
YW1lZENvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwpAQCAtMTA5LDYgKzk1LDIwIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29u
c3RydWN0b3I6OmNvbnN0cnVjdEpTCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVj
dCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7
CiB9CiAKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiQXVkaW9Db25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0
b3IpIH07CisKK0pTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yV2l0aERv
Y3VtZW50KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQoreworfQorCit2b2lkIEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwor
ICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5w
cm90b3R5cGUsIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xv
YmFsT2JqZWN0KSwgTm9uZSk7Cit9CisKIENvbnN0cnVjdFR5cGUgSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSkKIHsKICAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlv
biA9IGNvbnN0cnVjdEpTVGVzdE5hbWVkQ29uc3RydWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKaW5kZXggZGEy
NGE0ZGUxN2NhZjk1NWQ3ZmFlNzExZjlhMTI0NTA5NTA3Yzk2MC4uMWZlN2Y2NjcxMTljZWQ4NGY2
MmU2NTQzNWM2YjVjMzZkMWNmYzNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtNDgsNiArNDgsMTMgQEAg
c3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5vZGVDb25zdHJ1Y3RvclRhYmxlVmFs
dWVzW10gPQogfTsKIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3ROb2RlQ29uc3RydWN0
b3JUYWJsZSA9IHsgMSwgMCwgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpjb25z
dHJ1Y3RKU1Rlc3ROb2RlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1Rlc3ROb2RlQ29uc3Ry
dWN0b3IqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKj4oZXhlYy0+
Y2FsbGVlKCkpOworICAgIFJlZlB0cjxUZXN0Tm9kZT4gb2JqZWN0ID0gVGVzdE5vZGU6OmNyZWF0
ZSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOworfQorCiBjb25zdCBDbGFz
c0luZm8gSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0Tm9kZUNvbnN0cnVj
dG9yIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdE5vZGVDb25zdHJ1Y3RvclRhYmxlLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5vZGVDb25zdHJ1Y3RvcikgfTsKIAogSlNUZXN0Tm9kZUNv
bnN0cnVjdG9yOjpKU1Rlc3ROb2RlQ29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC03MywxMyArODAsNiBAQCBib29sIEpT
VGVzdE5vZGVDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZQogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNU
ZXN0Tm9kZUNvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZKU1Rlc3ROb2RlQ29uc3Ry
dWN0b3JUYWJsZSwganNDYXN0PEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3ROb2RlKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBKU1Rlc3ROb2RlQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNU
ZXN0Tm9kZUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwotICAgIFJlZlB0cjxUZXN0Tm9k
ZT4gb2JqZWN0ID0gVGVzdE5vZGU6OmNyZWF0ZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0
LmdldCgpKSkpOwotfQotCiBDb25zdHJ1Y3RUeXBlIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQogewog
ICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0SlNUZXN0Tm9kZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKaW5kZXggZWU2ODc5ZWYyYjcyNTdkYTFmYWJkNTNhODZkYWQzZjgyNDQyZWJlNC4u
NjI1ZjM0OGE5NjU0NmI0NjZkNzdkZDY4MTJkMGJjZDk5NGM2NGJiOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAg
LTE5OSw2ICsxOTksMTggQEAgQ09NUElMRV9BU1NFUlQoMFgyMCA9PSBUZXN0T2JqOjpDT05TVF9W
QUxVRV8xMywgVGVzdE9iakVudW1DT05TVF9WQUxVRV8xM0lzV3JvbmcKIENPTVBJTEVfQVNTRVJU
KDB4MWFiYyA9PSBUZXN0T2JqOjpDT05TVF9WQUxVRV8xNCwgVGVzdE9iakVudW1DT05TVF9WQUxV
RV8xNElzV3JvbmdVc2VEb05vdENoZWNrQ29uc3RhbnRzKTsKIENPTVBJTEVfQVNTRVJUKDE1ID09
IFRlc3RPYmo6OkNPTlNUX0lNUEwsIFRlc3RPYmpFbnVtQ09OU1RfSU1QTElzV3JvbmdVc2VEb05v
dENoZWNrQ29uc3RhbnRzKTsKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RP
YmpDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T2JqKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBKU1Rlc3RPYmpDb25zdHJ1Y3RvciogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmpDb25z
dHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAw
IHx8ICFleGVjLT5hcmd1bWVudCgwKS5pc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IHRlc3RDYWxsYmFj
ayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CisgICAgUmVmUHRyPFRlc3RPYmo+IG9iamVjdCA9
IFRlc3RPYmo6OmNyZWF0ZSh0ZXN0Q2FsbGJhY2spOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0
LmdldCgpKSkpOworfQorCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0T2JqQ29uc3RydWN0b3I6OnNf
aW5mbyA9IHsgIlRlc3RPYmplY3RDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RP
YmpDb25zdHJ1Y3RvclRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE9iakNvbnN0
cnVjdG9yKSB9OwogCiBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6SlNUZXN0T2JqQ29uc3RydWN0b3Io
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBA
IC0yMjQsMTggKzIzNiw2IEBAIGJvb2wgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGdl
dFN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcjxKU1Rlc3RPYmpDb25zdHJ1Y3RvciwgSlNET01XcmFw
cGVyPihleGVjLCAmSlNUZXN0T2JqQ29uc3RydWN0b3JUYWJsZSwganNDYXN0PEpTVGVzdE9iakNv
bnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0
SlNUZXN0T2JqKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1Rlc3RPYmpDb25zdHJ1Y3Rvciog
Y2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmpDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgp
KTsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAwIHx8ICFleGVjLT5hcmd1bWVudCgwKS5p
c0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAg
IFJlZlB0cjxUZXN0Q2FsbGJhY2s+IHRlc3RDYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVh
dGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSk7Ci0gICAgUmVmUHRyPFRlc3RPYmo+IG9iamVjdCA9IFRlc3RPYmo6OmNyZWF0ZSh0ZXN0Q2Fs
bGJhY2spOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwotfQotCiBDb25zdHJ1
Y3RUeXBlIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENv
bnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiB7CiAgICAgY29uc3RydWN0RGF0YS5uYXRpdmUu
ZnVuY3Rpb24gPSBjb25zdHJ1Y3RKU1Rlc3RPYmo7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5jcHAKaW5kZXggNTJkMmVhODUwMGYwZDFmYzQyYzA4MTk1NGQ2OGYy
MDA4YWNiNDZlNC4uNTE5MzU4NWI1YjE0NzczOTY1YWEwOGM3MzdjZjU2MDM2MWQyNDZiNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcApAQCAtNDgsNiAr
NDgsMTggQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNDb25zdHJ1Y3RvclRhYmxlVmFsdWVzW10KIH07CiAKIHN0YXRpYyBjb25zdCBIYXNo
VGFibGUgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yVGFibGUgPSB7IDEs
IDAsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAw
IH07CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0
cnVjdG9yKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnND
b25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoTUFZQkVf
TUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS5pc0VtcHR5KCkg
PyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1Vu
ZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiBvYmplY3QgPSBUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKHN0cmluZyk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBvYmplY3QuZ2V0KCkpKSk7Cit9CisKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NvbnN0cnVjdG9yVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKSB9OwogCiBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzQ29uc3RydWN0b3I6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1
Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKQEAgLTczLDE4ICs4NSw2IEBAIGJvb2wgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqCiAgICAgcmV0dXJu
IGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNDb25zdHJ1Y3RvclRhYmxlLCBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoRXhlY1N0YXRl
KiBleGVjKQotewotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvciog
Y2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0
b3IqPihleGVjLT5jYWxsZWUoKSk7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwotICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gU3RyaW5n
KCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IFJlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gb2JqZWN0ID0gVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShzdHJpbmcpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0
LmdldCgpKSkpOwotfQotCiBDb25zdHJ1Y3RUeXBlIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBj
b25zdHJ1Y3REYXRhKQogewogICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29u
c3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggOTU3MzM1MWQ3
MDBiNDM4NDkwYTM0MjQyNGFhNTYyNWJlYjE2NzA4YS4uMzY1NmVlNzIwY2U4YjY5NTNmYjA3YjE2
ZTQ4M2E5YmRhM2E4NjNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTYxLDYgKzYxLDI0IEBAIHN0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25z
dHJ1Y3RvclRhYmxlCiB9OwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAg
IGNvbnN0IFN0cmluZyYgaGVsbG8oTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVm
YXVsdElzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gZGF0YShTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBNQVlCRV9N
SVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLCAwLCAwKSk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIEFycmF5KiB0cmFuc2Zlckxpc3QodG9BcnJheShNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAyLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIFJlZlB0cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlPiBvYmplY3QgPSBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVh
dGUoaGVsbG8sIGRhdGEsIHRyYW5zZmVyTGlzdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShhc09iamVjdCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3Qu
Z2V0KCkpKSk7Cit9CisKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGUsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IpIH07
CiAKIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTg2LDI0ICsxMDQs
NiBAQCBib29sIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9y
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSgogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURl
c2NyaXB0b3I8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3Is
IEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNvbnN0cnVjdG9yVGFibGUsIGpzQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUo
KSk7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCi0gICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
ICAgIGNvbnN0IFN0cmluZyYgaGVsbG8oTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwg
RGVmYXVsdElzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gZGF0YShTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpLCAwLCAwKSk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEFycmF5KiB0cmFuc2Zlckxpc3QodG9BcnJheShN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAyLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFJlZlB0cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlPiBvYmplY3QgPSBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpj
cmVhdGUoaGVsbG8sIGRhdGEsIHRyYW5zZmVyTGlzdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmpl
Y3QuZ2V0KCkpKSk7Ci19Ci0KIENvbnN0cnVjdFR5cGUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3Ry
dWN0RGF0YSYgY29uc3RydWN0RGF0YSkKIHsKICAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5j
dGlvbiA9IGNvbnN0cnVjdEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>