<?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>211528</bug_id>
          
          <creation_ts>2020-05-06 13:27:47 -0700</creation_ts>
          <short_desc>[Conditional=] not working for operations in WebGLRenderingContextBase.idl</short_desc>
          <delta_ts>2020-05-07 11:13:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1649769</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-06 13:27:47 -0700</bug_when>
    <thetext>In https://bugs.webkit.org/show_bug.cgi?id=211506 I&apos;m adding a new method to the IDL with a Conditional. However the generated JSWebGLRenderingContext.cpp (note that WebGLRenderingContext inherits from WebGLRenderingContexBase) only has the ENABLE(WEBGL) guard in the method which comes from the value of Conditional in the interface definition in WebGLRenderingContextBase.idl.

The new method is not the problem. I&apos;ve verified that any Conditional specified in any attribute/operation in that IDL file is either ignored or overwritten by the conditional in the interface definition.

I&apos;ve also verified that this does not happen on other IDL files which do already define per-operation conditionals in IDL interfaces with no implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649784</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-06 14:00:10 -0700</bug_when>
    <thetext>Seems likely the perl script just doesn’t have the support for the multiple layers of conditional. Won’t be super-hard to fix, I don’t think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649785</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-06 14:01:58 -0700</bug_when>
    <thetext>Maybe you can reproduce with a test case in the bindings tests directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649975</commentid>
    <comment_count>3</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-06 23:50:39 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #1)
&gt; Seems likely the perl script just doesn’t have the support for the multiple
&gt; layers of conditional. Won’t be super-hard to fix, I don’t think.

That&apos;s what I thought in the beginning but it just works fine with other IDL files as mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650026</commentid>
    <comment_count>4</comment_count>
      <attachid>398718</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-07 02:55:44 -0700</bug_when>
    <thetext>Created attachment 398718
Minimal test case

This pretty reduced test case reproduces exactly what I&apos;m seeing. Using generate-bindings.pl and the supplemental file attached generates JSTestOperationConditional.* files where the conditionalOperation() is guarded by Condition1 instead of Condition2.

The command I used to generate the bindings is:
Source/WebCore/bindings/scripts/generate-bindings.pl --generator JS --outputDir . --idlAttributesFile Source/WebCore/bindings/scripts/IDLAttributes.json --supplementalDependencyFile supplemental  Source/WebCore/bindings/scripts/test/TestOperationConditional.idl Source/WebCore/bindings/scripts/test/TestOperationBase.idl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650028</commentid>
    <comment_count>5</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-07 03:35:13 -0700</bug_when>
    <thetext>OK I think I found a way to &quot;fix&quot; it. I am not not an expert on bindings generators so I am not sure whether what I am doing is an unsupported configuration, a limitation of the generator or just a bug in the IDL.

So if I remove the Conditional in the Base interface then everything works fine. The TestOperationConditional is properly generated. The Condition1 guards all the code (as if it were specified in the base class and Condition2 guards the method that specified its own conditional.

Using the same fix for 211506 (i.e. removing Conditional=WEBGL from WebGLRenderingContextBase.idl) makes the build succeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650035</commentid>
    <comment_count>6</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-07 04:07:09 -0700</bug_when>
    <thetext>(In reply to Sergio Villar Senin from comment #5)
&gt; OK I think I found a way to &quot;fix&quot; it. I am not not an expert on bindings
&gt; generators so I am not sure whether what I am doing is an unsupported
&gt; configuration, a limitation of the generator or just a bug in the IDL.
&gt; 
&gt; So if I remove the Conditional in the Base interface then everything works
&gt; fine. The TestOperationConditional is properly generated. The Condition1
&gt; guards all the code (as if it were specified in the base class and
&gt; Condition2 guards the method that specified its own conditional.
&gt; 
&gt; Using the same fix for 211506 (i.e. removing Conditional=WEBGL from
&gt; WebGLRenderingContextBase.idl) makes the build succeed.

After checking the WebGL example again I think that Darin is right. The generator is working fine as it&apos;s guarding the base class methods with the base class conditional (while the whole file is guarded by the derived interface conditional). The problem is that the generator should also add the operation specific conditional for the operation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650064</commentid>
    <comment_count>7</comment_count>
      <attachid>398730</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-07 06:34:10 -0700</bug_when>
    <thetext>Created attachment 398730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650231</commentid>
    <comment_count>8</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-07 11:12:53 -0700</bug_when>
    <thetext>Committed r261317: &lt;https://trac.webkit.org/changeset/261317&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650232</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-07 11:13:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/62984434&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398718</attachid>
            <date>2020-05-07 02:55:44 -0700</date>
            <delta_ts>2020-05-07 06:33:44 -0700</delta_ts>
            <desc>Minimal test case</desc>
            <filename>test-case.patch</filename>
            <type>text/plain</type>
            <size>1187</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T3Bl
cmF0aW9uQmFzZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dE9wZXJhdGlvbkJhc2UuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4xMDYzM2NkYjJlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T3BlcmF0aW9uQmFzZS5pZGwKQEAgLTAsMCArMSw3IEBACitbCisg
ICAgQ29uZGl0aW9uYWw9Q29uZGl0aW9uMSwKKyAgICBOb0ludGVyZmFjZU9iamVjdCwKK10gaW50
ZXJmYWNlIFRlc3RPcGVyYXRpb25CYXNlIHsKKyAgICB2b2lkIG5vbkNvbmRpdGlvbmFsT3BlcmF0
aW9uKCk7CisgICAgW0NvbmRpdGlvbmFsPUNvbmRpdGlvbjJdIHZvaWQgY29uZGl0aW9uYWxPcGVy
YXRpb24oKTsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaWRsCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41MTY5ZTRjOTAxZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T3BlcmF0aW9uQ29u
ZGl0aW9uYWwuaWRsCkBAIC0wLDAgKzEsNiBAQAorWworICAgIENvbmRpdGlvbmFsPUNvbmRpdGlv
bjEsCitdIGludGVyZmFjZSBUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwgeworfTsKKworVGVzdE9w
ZXJhdGlvbiBpbXBsZW1lbnRzIFRlc3RPcGVyYXRpb25CYXNlOwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N1cHBsZW1lbnRhbCBiL3N1cHBsZW1lbnRhbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDQ5NWFkY2M5OGMKLS0tIC9kZXYvbnVs
bAorKysgYi9zdXBwbGVtZW50YWwKQEAgLTAsMCArMSBAQAorU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5pZGwgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPcGVyYXRpb25CYXNlLmlkbAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398730</attachid>
            <date>2020-05-07 06:34:10 -0700</date>
            <delta_ts>2020-05-07 08:00:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211528-20200507153408.patch</filename>
            <type>text/plain</type>
            <size>42477</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxMjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzU3YmVmNjEzYzkxYWVm
NDk3MjViNWI2ZmU0YzIwMjZjMjBiMjZlNy4uZTA4NjYyZjY1OWFmODg0MWZlNWViYzA0YTNjMmI3
MmEzMTA4ZjE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIwLTA1LTA3ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtDb25kaXRp
b25hbD1dIG5vdCB3b3JraW5nIGZvciBvcGVyYXRpb25zIGluIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaWRsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTE1MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXaGVuIGFuIElETCBpbnRlcmZhY2UgdW5kZXIgYSBnaXZlbiBDb25kaXRpb24gZGVmaW5lZCBh
biBvcGVyYXRpb24gd2l0aAorICAgICAgICBhbm90aGVyIENvbmRpdGlvbiB0aGUgZ2VuZXJhdGVk
IHNvdXJjZSBmaWxlIHNob3VsZCBndWFyZCB0aGUgb3BlcmF0aW9uCisgICAgICAgIHdpdGggYm90
aCB0aGUgQ29uZGl0aW9uIGZyb20gdGhlIGludGVyZmFjZSBhbmQgdGhlIG9uZSBmcm9tIHRoZQor
ICAgICAgICBvcGVyYXRpb24uIFRoaXMgd2FzIHdvcmtpbmcgZmluZSBmb3Igc29sZSBpbnRlcmZh
Y2VzIGJ1dCBub3QgZm9yIHRob3NlCisgICAgICAgIHdobyB3ZXJlIGluaGVyaXRpbmcgZnJvbSBh
IGJhc2Ugb25lLCBpLmUuLCBpdCB3YXMgbm90IHdvcmtpbmcgZm9yCisgICAgICAgIHN1cHBsZW1l
bnRhbCBpbnRlcmZhY2VzLgorCisgICAgICAgIEFkZGVkIGEgbmV3IG1pbmltYWxpc3RpYyBiaW5k
aW5nIHRlc3Qgc2hvd2Nhc2luZyB0aGUgcHJvYmxlbS4KKworICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKFByb2Nlc3NTdXBwbGVtZW50YWxEZXBl
bmRlbmNpZXMpOiBBZGQgQ29uZGl0aW9uYWxzIGZyb20gYm90aCBpbnRlcmZhY2UgYW5kIG9wZXJh
dGlvbi4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RPcGVyYXRp
b25Db25kaXRpb25hbENvbnN0cnVjdG9yR2V0dGVyKTogVXBkYXRlZCByZXN1bHQuCisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxDb25z
dHJ1Y3Rvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3JTZXR0ZXIpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPcGVyYXRpb25Db25kaXRpb25h
bENvbnN0cnVjdG9yKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9wZXJhdGlvbkJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29u
ZGl0aW9uYWwuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RP
cGVyYXRpb25CYXNlLmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5pZGw6IEFkZGVkLgorCiAyMDIwLTA1LTA2ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXZWJYUl0g
SW1wbGVtZW50IHNpbXVsYXRlVXNlckFjdGl2YXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCmluZGV4IDMxN2U0OWEwZWJmYjc4ODI3
ZDlkYWYxNTQ2OGZjMmZhOTg5MzJmNTMuLjE3NTQxYmI0ODNkMDlmMDE0OGZjYzQ2YjA2MzgwZDUx
NzkxMjQyNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvci5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3IucG0KQEAgLTMwMyw3ICszMDMsMTEgQEAgc3ViIFByb2Nlc3NTdXBwbGVtZW50YWxE
ZXBlbmRlbmNpZXMKIAogICAgICAgICAgICAgICAgICMgQWRkIGludGVyZmFjZS13aWRlIGV4dGVu
ZGVkIGF0dHJpYnV0ZXMgdG8gZWFjaCBtZXRob2QuCiAgICAgICAgICAgICAgICAgZm9yZWFjaCBt
eSAkZXh0ZW5kZWRBdHRyaWJ1dGVOYW1lIChrZXlzICV7JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzfSkgewotICAgICAgICAgICAgICAgICAgICAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnskZXh0ZW5kZWRBdHRyaWJ1dGVOYW1lfSA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9OworICAgICAgICAgICAgICAgICAgICBp
ZiAoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57JGV4dGVuZGVkQXR0cmlidXRlTmFt
ZX0gJiYgJGV4dGVuZGVkQXR0cmlidXRlTmFtZSBlcSAiQ29uZGl0aW9uYWwiKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnskZXh0ZW5k
ZWRBdHRyaWJ1dGVOYW1lfSA9ICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyRleHRl
bmRlZEF0dHJpYnV0ZU5hbWV9IC4gJyYnIC4gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57JGV4dGVuZGVkQXR0cmlidXRlTmFtZX07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnskZXh0ZW5kZWRBdHRyaWJ1dGVOYW1lfSA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9OworICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHB1c2goQHskdGFyZ2V0RGF0YU5vZGUtPm9w
ZXJhdGlvbnN9LCAkb3BlcmF0aW9uKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9i
amVjdC5jcHAKaW5kZXggYWNkNjlhMGJmMDVmYTYyNGMxNDgwOWNkZmViNzA0NTVkZDRiZjZjOS4u
MzQ3OWE1OTAxMTM2NjU5ODNmN2IyZTAzZDg4MzE3MTI2M2E2NjJlYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEds
b2JhbE9iamVjdC5jcHAKQEAgLTExMSw2ICsxMTEsMTAgQEAKICNpbmNsdWRlICJKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKENvbmRp
dGlvbkRlcml2ZWQpCisjaW5jbHVkZSAiSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaCIKKyNl
bmRpZgorCiAjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCiAjaW5jbHVkZSAiSlNUZXN0Q2Fs
bGJhY2tJbnRlcmZhY2UuaCIKICNlbmRpZgpAQCAtMjQ4LDYgKzI1MiwxMCBAQCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc0NvbgogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRP
dmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworI2lmIEVOQUJMRShDb25kaXRpb25E
ZXJpdmVkKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisjZW5kaWYKIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAtMjk3LDEyICszMDUsMTIgQEAgdXNpbmcgSlNUZXN0R2xv
YmFsT2JqZWN0Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxK
U1Rlc3RHbG8KIAogLyogSGFzaCB0YWJsZSAqLwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IENvbXBh
Y3RIYXNoSW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleFsyNjZdID0geworc3RhdGlj
IGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5k
ZXhbMjY3XSA9IHsKICAgICB7IC0xLCAtMSB9LAogICAgIHsgMzYsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IDAsIC0xIH0sCi0gICAgeyA0LCAyNjIgfSwKKyAgICB7IDQsIDI2MyB9LAog
ICAgIHsgNDAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzEx
LDcgKzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RH
bG9iYWxPYmplY3RUYWJsZUluZGV4WzI2Nl0gPSB7CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1MCwgLTEgfSwKKyAgICB7IDUxLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAt
MzE5LDcgKzMyNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rl
c3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2Nl0gPSB7CiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2MiwgLTEgfSwKKyAgICB7IDYzLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApA
QCAtMzM5LDcgKzM0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBK
U1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2Nl0gPSB7CiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2NSwgLTEgfSwKKyAgICB7IDY2
LCAtMSB9LAogICAgIHsgOSwgMjU4IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LApAQCAtMzQ5LDcgKzM1Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRl
eCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2Nl0gPSB7CiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgMzQsIC0xIH0sCi0gICAgeyAxNiwgMjYzIH0sCisgICAg
eyAxNiwgMjY0IH0sCiAgICAgeyA2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKQEAgLTM2OCw3ICszNzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNo
SW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleFsyNjZdID0gewogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTgsIDI2NCB9LAor
ICAgIHsgMTgsIDI2NSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LApAQCAtMzgzLDcgKzM5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2Nl0gPSB7CiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1NiwgLTEg
fSwKKyAgICB7IDU3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LApAQCAtMzkyLDcgKzQwMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29t
cGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2Nl0gPSB7CiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IDIwLCAyNTYgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTcs
IC0xIH0sCisgICAgeyA1OCwgLTEgfSwKICAgICB7IDE1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKQEAgLTQwOSw3ICs0MTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0
IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleFsyNjZdID0gewog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsg
NDYsIC0xIH0sCisgICAgeyA0NywgLTEgfSwKICAgICB7IDIxLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAyLCAtMSB9LApAQCAtNDIzLDcgKzQzMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1
Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2Nl0gPSB7
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAg
eyA1NCwgLTEgfSwKKyAgICB7IDU1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNDM4LDcgKzQ0Niw3IEBAIHN0YXRpYyBjb25zdCBz
dHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2Nl0g
PSB7CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyA0OSwgLTEgfSwKKyAgICB7IDUwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAx
MCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNDU2LDEyICs0NjQsMTIgQEAgc3RhdGljIGNv
bnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXhb
MjY2XSA9IHsKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKLSAgICB7IDYzLCAtMSB9LAorICAgIHsgNjQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAyOCwgLTEgfSwKLSAgICB7IDI1
LCAyNjEgfSwKKyAgICB7IDI1LCAyNjIgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQ3Myw3ICs0ODEsNyBAQCBzdGF0aWMgY29uc3Qgc3Ry
dWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleFsyNjZdID0g
ewogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAxMiwgMjU3IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAg
ICB7IDU4LCAtMSB9LAorICAgIHsgNTksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC00ODIsMTcgKzQ5MCwxNyBAQCBzdGF0aWMgY29u
c3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleFsy
NjZdID0gewogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAotICAgIHsgMjksIDI2NSB9LAorICAgIHsgMjksIDI2NiB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAxMywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjEsIC0xIH0sCisgICAgeyA2
MiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NCwgLTEgfSwKKyAg
ICB7IDQ1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LApAQCAtNTA1LDcgKzUxMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhh
c2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2Nl0gPSB7CiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1MiwgLTEgfSwK
KyAgICB7IDUzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LApAQCAtNTI3LDEwICs1MzUsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21w
YWN0SGFzaEluZGV4IEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXhbMjY2XSA9IHsKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ1LCAt
MSB9LAorICAgIHsgNDQsIDI2MSB9LAogICAgIHsgNywgMjYwIH0sCiAgICAgeyAtMSwgLTEgfSwK
LSAgICB7IDU5LCAtMSB9LAorICAgIHsgNjAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IDQzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC01NDcsMTAgKzU1NSwxMCBAQCBzdGF0aWMg
Y29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRl
eFsyNjZdID0gewogICAgIHsgLTEsIC0xIH0sCiAgICAgeyA0MSwgLTEgfSwKICAgICB7IDMsIC0x
IH0sCi0gICAgeyA0NywgLTEgfSwKLSAgICB7IC0xLCAtMSB9LAogICAgIHsgNDgsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKKyAgICB7IDQ5LCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC01NTksMTEgKzU2
NywxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFs
T2JqZWN0VGFibGVJbmRleFsyNjZdID0gewogICAgIHsgMzUsIC0xIH0sCiAgICAgeyAzNywgLTEg
fSwKICAgICB7IDM5LCAtMSB9LAotICAgIHsgNTEsIC0xIH0sCi0gICAgeyA1MywgLTEgfSwKLSAg
ICB7IDU1LCAtMSB9LAotICAgIHsgNjAsIC0xIH0sCi0gICAgeyA2NCwgLTEgfSwKKyAgICB7IDQ2
LCAtMSB9LAorICAgIHsgNTIsIC0xIH0sCisgICAgeyA1NCwgLTEgfSwKKyAgICB7IDU2LCAtMSB9
LAorICAgIHsgNjEsIC0xIH0sCisgICAgeyA2NSwgLTEgfSwKIH07CiAKIApAQCAtNjI1LDYgKzYz
NCwxMSBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2xvYmFsT2JqZWN0VGFi
bGVWYWx1ZXNbXSA9CiAgICAgeyAiVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMi
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xv
dDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRo
T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvciksIChpbnRwdHJf
dCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVj
dG9yKSB9IH0sCiAgICAgeyAiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
QW5kT3ZlcnJpZGVCdWlsdGlucyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVj
dG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKSB9IH0sCisjaWYgRU5BQkxFKENv
bmRpdGlvbkRlcml2ZWQpCisgICAgeyAiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxDb25zdHJ1Y3Rvciks
IChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVjdG9yKSB9
IH0sCisjZWxzZQorICAgIHsgMCwgMCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCisjZW5kaWYK
ICAgICB7ICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFs
T2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IpIH0gfSwKICAgICB7
ICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1
Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJUZXN0T3ZlcnJpZGVCdWlsdGlucyIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvciks
IChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpIH0gfSwK
QEAgLTY1Myw3ICs2NjcsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2xv
YmFsT2JqZWN0VGFibGVWYWx1ZXNbXSA9CiAgICAgeyAicmVndWxhck9wZXJhdGlvbiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0
R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYXRpb24pLCAoaW50cHRyX3Qp
ICgxKSB9IH0sCiB9OwogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEdsb2JhbE9iamVj
dFRhYmxlID0geyA2NiwgMjU1LCB0cnVlLCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmluZm8oKSwgSlNU
ZXN0R2xvYmFsT2JqZWN0VGFibGVWYWx1ZXMsIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXgg
fTsKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGUgPSB7IDY3
LCAyNTUsIHRydWUsIEpTVGVzdEdsb2JhbE9iamVjdDo6aW5mbygpLCBKU1Rlc3RHbG9iYWxPYmpl
Y3RUYWJsZVZhbHVlcywgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleCB9OwogLyogSGFzaCB0
YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9CkBAIC0yMDA1LDYgKzIw
MTksMzcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWwKICAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0
b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
IlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRp
bnMiKTsKIH0KIAorI2lmIEVOQUJMRShDb25kaXRpb25EZXJpdmVkKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVj
dG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE9wZXJh
dGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsIik7Cit9CisK
KyNlbmRpZgorCisjaWYgRU5BQkxFKENvbmRpdGlvbkRlcml2ZWQpCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0
b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVk0mIHZt
ID0gdGhyb3dTY29wZS52bSgpOworICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgorICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0T3BlcmF0aW9u
Q29uZGl0aW9uYWwiKSwgc3RybGVuKCJUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwiKSksIHZhbHVl
KTsKK30KKworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RPcGVyYXRpb25D
b25kaXRpb25hbCIpOworfQorCisjZW5kaWYKKwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk4
NWNhMThkZWQ4ZThiN2U3NTA5MTA3MDkxYmZmNjgxZWU2MzFmZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25C
YXNlLmNwcApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBq
dXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IEpTVGVzdE9wZXJhdGlvbkJhc2UuaCBhbmQK
KyAgICBKU1Rlc3RPcGVyYXRpb25CYXNlLmNwcCBhcmUgY3JlYXRlZCBmb3IgVGVzdE9wZXJhdGlv
bkJhc2UuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0
cnlpbmcgdG8gZ2VuZXJhdGUgSlNUZXN0T3BlcmF0aW9uQmFzZS5oIGFuZAorICAgIEpTVGVzdE9w
ZXJhdGlvbkJhc2UuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJp
ZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkJhc2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
OTg1Y2ExOGRlZDhlOGI3ZTc1MDkxMDcwOTFiZmY2ODFlZTYzMWZkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlv
bkJhc2UuaApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBq
dXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IEpTVGVzdE9wZXJhdGlvbkJhc2UuaCBhbmQK
KyAgICBKU1Rlc3RPcGVyYXRpb25CYXNlLmNwcCBhcmUgY3JlYXRlZCBmb3IgVGVzdE9wZXJhdGlv
bkJhc2UuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0
cnlpbmcgdG8gZ2VuZXJhdGUgSlNUZXN0T3BlcmF0aW9uQmFzZS5oIGFuZAorICAgIEpTVGVzdE9w
ZXJhdGlvbkJhc2UuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJp
ZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xMzI0ODVmOWQ5ZjNiYmUwMTYyYzZiYTRlOWIxYTc3ODVkYWVmNzIy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmNwcApAQCAtMCwwICsxLDMzMSBAQAorLyoK
KyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
Q29uZGl0aW9uRGVyaXZlZCkKKworI2luY2x1ZGUgIkpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
LmgiCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01Jc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0
cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuaCIKKyNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBl
ckNhY2hlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlv
blByb3RvdHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwu
aD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCisvLyBG
dW5jdGlvbnMKKworI2lmIEVOQUJMRShDb25kaXRpb25CYXNlKQorSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsUHJvdG90eXBlRnVuY3Rp
b25Ob25Db25kaXRpb25hbE9wZXJhdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxs
RnJhbWUqKTsKKyNlbmRpZgorI2lmIEVOQUJMRShDb25kaXRpb25CYXNlKSAmJiBFTkFCTEUoQ29u
ZGl0aW9uT3BlcmF0aW9uKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9wZXJhdGlvbkNvbmRpdGlvbmFsUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE9wZXJhdGlv
bihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKKyNlbmRpZgorCisvLyBB
dHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbENv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxQcm90
b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3RP
cGVyYXRpb25Db25kaXRpb25hbFByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHsKKyAgICAgICAgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxQ
cm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbFByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CisgICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsK
KyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWxQcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2U7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxQcm90b3R5cGUsIEpT
VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsUHJvdG90eXBlOjpCYXNlKTsKKwordXNpbmcgSlNUZXN0
T3BlcmF0aW9uQ29uZGl0aW9uYWxDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlPEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsPjsKKwordGVtcGxhdGU8PiBKU1Zh
bHVlIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmplY3QuZnVu
Y3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OnByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwg
anNOb250cml2aWFsU3RyaW5nKHZtLCAiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsIl9zKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpz
TnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8g
SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE9w
ZXJhdGlvbkNvbmRpdGlvbmFsIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVjdG9yKSB9
OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hU
YWJsZVZhbHVlIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsUHJvdG90eXBlVGFibGVWYWx1ZXNb
XSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9wZXJhdGlvbkNvbmRp
dGlvbmFsQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xv
dDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVjdG9y
KSB9IH0sCisjaWYgRU5BQkxFKENvbmRpdGlvbkJhc2UpCisgICAgeyAibm9uQ29uZGl0aW9uYWxP
cGVyYXRpb24iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsUHJvdG90eXBlRnVuY3Rpb25Ob25D
b25kaXRpb25hbE9wZXJhdGlvbiksIChpbnRwdHJfdCkgKDApIH0gfSwKKyNlbHNlCisgICAgeyAw
LCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKKyNlbmRpZgorI2lmIEVOQUJMRShDb25kaXRp
b25CYXNlKSAmJiBFTkFCTEUoQ29uZGl0aW9uT3BlcmF0aW9uKQorICAgIHsgImNvbmRpdGlvbmFs
T3BlcmF0aW9uIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2
ZUZ1bmN0aW9uPihqc1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbFByb3RvdHlwZUZ1bmN0aW9uQ29u
ZGl0aW9uYWxPcGVyYXRpb24pLCAoaW50cHRyX3QpICgwKSB9IH0sCisjZWxzZQorICAgIHsgMCwg
MCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCisjZW5kaWYKK307CisKK2NvbnN0IENsYXNzSW5m
byBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbFByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE9w
ZXJhdGlvbkNvbmRpdGlvbmFsIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbFByb3RvdHlwZSkgfTsK
Kwordm9pZCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0
YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjppbmZvKCksIEpT
VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAg
ICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpzX2luZm8gPSB7ICJUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWwiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsKSB9OworCitKU1Rlc3RPcGVy
YXRpb25Db25kaXRpb25hbDo6SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWw+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0T3BlcmF0aW9u
Q29uZGl0aW9uYWw+KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQorewor
fQorCit2b2lkIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0
cyh2bSwgaW5mbygpKSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0
aXZlRE9NT2JqZWN0LCBUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw+Ojp2YWx1ZSwgIkludGVyZmFj
ZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxlbWVu
dGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIpOworCit9CisKK0pTT2Jq
ZWN0KiBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWxQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNU
ZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2Jq
ZWN0KiBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBl
PEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNW
YWx1ZSBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBj
b25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01D
b25zdHJ1Y3RvcjxKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVjdG9yPih2bSwgKmpz
Q2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lk
IEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQor
eworICAgIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5K
U1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6fkpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsKCk7
Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsKiBJRExP
cGVyYXRpb248SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw+OjpjYXN0KEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1
cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbCo+KEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWxQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChV
TkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQorCiti
b29sIHNldEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPcGVyYXRp
b25Db25kaXRpb25hbFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICBy
ZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVj
dG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKKyNpZiBFTkFCTEUoQ29u
ZGl0aW9uQmFzZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPcGVy
YXRpb25Db25kaXRpb25hbFByb3RvdHlwZUZ1bmN0aW9uTm9uQ29uZGl0aW9uYWxPcGVyYXRpb25C
b2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPcGVyYXRpb25Db25k
aXRpb25hbD46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgaW1wbC5ub25Db25k
aXRpb25hbE9wZXJhdGlvbigpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T3BlcmF0aW9u
Q29uZGl0aW9uYWxQcm90b3R5cGVGdW5jdGlvbk5vbkNvbmRpdGlvbmFsT3BlcmF0aW9uKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sK
KyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsPjo6Y2Fs
bDxqc1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbFByb3RvdHlwZUZ1bmN0aW9uTm9uQ29uZGl0aW9u
YWxPcGVyYXRpb25Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm5vbkNv
bmRpdGlvbmFsT3BlcmF0aW9uIik7Cit9CisKKyNlbmRpZgorCisjaWYgRU5BQkxFKENvbmRpdGlv
bkJhc2UpICYmIEVOQUJMRShDb25kaXRpb25PcGVyYXRpb24pCitzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxQcm90b3R5cGVGdW5jdGlv
bkNvbmRpdGlvbmFsT3BlcmF0aW9uQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIGltcGwuY29uZGl0aW9uYWxPcGVyYXRpb24oKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25h
bE9wZXJhdGlvbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPcGVyYXRpb25D
b25kaXRpb25hbD46OmNhbGw8anNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxQcm90b3R5cGVGdW5j
dGlvbkNvbmRpdGlvbmFsT3BlcmF0aW9uQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICJjb25kaXRpb25hbE9wZXJhdGlvbiIpOworfQorCisjZW5kaWYKKworSlNDOjpJc29T
dWJzcGFjZSogSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKK3sKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5z
dWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RPcGVyYXRpb25Db25kaXRpb25hbC5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHNwYWNlOworICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw+IHx8ICFKU1Rlc3RPcGVyYXRpb25Db25kaXRp
b25hbDo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25h
bD4pCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0u
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3RPcGVyYXRpb25Db25k
aXRpb25hbCk7CisgICAgZWxzZQorICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPcGVy
YXRpb25Db25kaXRpb25hbCA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9J
TklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsKTsKKyAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9w
ZXJhdGlvbkNvbmRpdGlvbmFsLmdldCgpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQorICAgIGlmICgmSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICBj
bGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JF
X1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIHJldHVybiBzcGFjZTsKK30K
Kwordm9pZCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBj
ZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwqPihjZWxsKTsKKyAgICBhbmFseXplci5z
ZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKKyAg
ICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICBhbmFs
eXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6YW5hbHl6ZUhlYXAo
Y2VsbCwgYW5hbHl6ZXIpOworfQorCitib29sIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24p
Cit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3Ip
OworICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbE93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3RP
cGVyYXRpb25Db25kaXRpb25hbCA9IHN0YXRpY19jYXN0PEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlv
bmFsKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8mIHdvcmxkID0gKnN0YXRp
Y19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdv
cmxkLCAmanNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwtPndyYXBwZWQoKSwganNUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWwpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lm
IFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJD
IiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsQFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0
ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUyNFRlc3RPcGVyYXRpb25Db25kaXRpb25hbEVbXTsgfQor
I2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWw+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVH
UklUWSkKKyAgICBjb25zdCB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gZ2V0VlRhYmxlUG9p
bnRlcihpbXBsLnB0cigpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRW
VGFibGVQb2ludGVyID0gX19pZGVudGlmaWVyKCI/P183VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
QFdlYkNvcmVAQDZCQCIpOworI2Vsc2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIg
PSAmX1pUVk43V2ViQ29yZTI0VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsRVsyXTsKKyNlbmRpZgor
CisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwgZG9lcyBub3Qg
aGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0
aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19wb2x5bW9ycGhpYzxUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWw+Ojp2YWx1ZSwgIlRlc3RPcGVyYXRpb25Db25kaXRpb25hbCBpcyBub3QgcG9seW1vcnBoaWMi
KTsKKworICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEg
dXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3RPcGVyYXRpb25Db25kaXRpb25hbCBo
YXMgc3ViY2xhc3Nlcy4gSWYgVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsIGhhcyBzdWJjbGFzc2Vz
IHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBU
ZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5p
bmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0
byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFs
VlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0
dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsPihnbG9iYWxPYmplY3Qs
IFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwmIGltcGwpCit7CisgICAgcmV0dXJuIHdyYXAobGV4
aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdE9wZXJhdGlv
bkNvbmRpdGlvbmFsKiBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6dG9XcmFwcGVkKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsKj4odm0sIHZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb25EZXJpdmVkKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZDg2ZWFhZDkwYzY0MDI2YjE0
MTcyNGRjNDE2NzlhY2UxMjc0YTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmgKQEAg
LTAsMCArMSw5NyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShDb25kaXRpb25EZXJpdmVkKQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgi
CisjaW5jbHVkZSAiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmgiCisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWwgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3RPcGVyYXRpb25Db25k
aXRpb25hbD4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8VGVzdE9w
ZXJhdGlvbkNvbmRpdGlvbmFsPjsKKyAgICBzdGF0aWMgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWwqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWY8VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsPiYmIGltcGwpCisgICAg
eworICAgICAgICBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbCogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbD4oZ2xvYmFsT2Jq
ZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbChzdHJ1Y3R1cmUsICpn
bG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9i
YWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWwqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Z2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBp
ZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvcklt
cGwodm0pOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBK
U0M6OkhlYXBBbmFseXplciYpOworcHJvdGVjdGVkOgorICAgIEpTVGVzdE9wZXJhdGlvbkNvbmRp
dGlvbmFsKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE9wZXJh
dGlvbkNvbmRpdGlvbmFsPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYp
OworfTsKKworY2xhc3MgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxPd25lciA6IHB1YmxpYyBK
U0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopOworICAgIHZpcnR1YWwgdm9pZCBm
aW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisK
K2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3Js
ZCYsIFRlc3RPcGVyYXRpb25Db25kaXRpb25hbCopCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsT3duZXI+IG93bmVyOworICAgIHJldHVybiAm
b3duZXIuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RPcGVyYXRpb25D
b25kaXRpb25hbCogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGFibGVPYmpl
Y3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUds
b2JhbE9iamVjdCosIFRlc3RPcGVyYXRpb25Db25kaXRpb25hbCYpOworaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RPcGVyYXRpb25Db25kaXRpb25hbCogaW1w
bCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE9wZXJh
dGlvbkNvbmRpdGlvbmFsPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsPiYmIGlt
cGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0K
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RPcGVy
YXRpb25Db25kaXRpb25hbD4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdE9wZXJh
dGlvbkNvbmRpdGlvbmFsOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWwqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKENvbmRpdGlvbkRlcml2ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9wZXJhdGlvbkJhc2UuaWRsIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPcGVyYXRpb25CYXNlLmlkbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43Y2U0ZjFjMDk2OGIwNjMxZjdiMGI3MWNlMzFkYjQ2M2UzOGRlZTk0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPcGVyYXRp
b25CYXNlLmlkbApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEln
YWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBUaGlzIElETCBmaWxlIGlzIGZvciB0ZXN0aW5nIHRoZSBi
aW5kaW5ncyBjb2RlIGdlbmVyYXRvciBhbmQgZm9yIHRyYWNraW5nCisvLyBjaGFuZ2VzIGluIGl0
cyBvdXRwdXQuCisKK1sKKyAgICBDb25kaXRpb25hbD1Db25kaXRpb25CYXNlLAorICAgIE5vSW50
ZXJmYWNlT2JqZWN0LAorXSBpbnRlcmZhY2UgVGVzdE9wZXJhdGlvbkJhc2UgeworICAgIHZvaWQg
bm9uQ29uZGl0aW9uYWxPcGVyYXRpb24oKTsKKyAgICBbQ29uZGl0aW9uYWw9Q29uZGl0aW9uT3Bl
cmF0aW9uXSB2b2lkIGNvbmRpdGlvbmFsT3BlcmF0aW9uKCk7Cit9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPcGVyYXRpb25Db25kaXRpb25h
bC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9wZXJhdGlv
bkNvbmRpdGlvbmFsLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDgzOTQ5ODM5NGJiYzJiNmMyNGNmZmJlMzFi
OTg0ZWI2Mzc4YzE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5pZGwKQEAgLTAsMCArMSwzNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGhp
cyBJREwgZmlsZSBpcyBmb3IgdGVzdGluZyB0aGUgYmluZGluZ3MgY29kZSBnZW5lcmF0b3IgYW5k
IGZvciB0cmFja2luZworLy8gY2hhbmdlcyBpbiBpdHMgb3V0cHV0LgorCitbCisgICAgQ29uZGl0
aW9uYWw9Q29uZGl0aW9uRGVyaXZlZCwKK10gaW50ZXJmYWNlIFRlc3RPcGVyYXRpb25Db25kaXRp
b25hbCB7Cit9OworCitUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwgaW1wbGVtZW50cyBUZXN0T3Bl
cmF0aW9uQmFzZTsK
</data>
<flag name="review"
          id="414124"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>