<?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>149556</bug_id>
          
          <creation_ts>2015-09-25 09:54:41 -0700</creation_ts>
          <short_desc>Improve binding of JSBuiltinConstructor classes</short_desc>
          <delta_ts>2015-09-29 10:49:57 -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>WebCore Misc.</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1128716</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-09-25 09:54:41 -0700</bug_when>
    <thetext>Following on bug 149522 discussion, we might want to improve the binding generator.

(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; &gt; &gt; Source/WebCore/bindings/js/JSDOMWrapper.h:54
&gt; &gt; &gt; &gt; &gt; +    virtual ~DummyDOMClass() { }
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Not sure why this is needed. Do we need the class to seem polymorphic for
&gt; &gt; &gt; &gt; some reason?
&gt; &gt; &gt; 
&gt; &gt; &gt; This is required by RefCounted IIRC.
&gt; &gt; 
&gt; &gt; RefCounted itself definitely does *not* require that the class be
&gt; &gt; polymorphic so it doesn’t require a virtual destructor.
&gt; &gt; 
&gt; &gt; We need to make the destructor virtual if we are going to deref or delete
&gt; &gt; these objects in a polymorphic way, using a pointer to a base class. I think
&gt; &gt; you could revisit this and make the class both &quot;final&quot; and not define a
&gt; &gt; virtual destructor.
&gt; 
&gt; Thanks for the information.
&gt; 
&gt; &gt; 
&gt; &gt; You also talked about cleaning things up further so the class isn’t needed
&gt; &gt; at all; if you do that this won’t matter at all.
&gt; &gt; 
&gt; &gt; If we do need to keep this class, then we can do another trick for better
&gt; &gt; efficiency:
&gt; &gt; 
&gt; &gt;     class $className {
&gt; &gt;     public:
&gt; &gt;         static Ref&lt;$className&gt; create() { return adoptRef(singleton());
&gt; &gt; }\n&quot;); 
&gt; &gt;         static void ref() { }
&gt; &gt;         static void deref() { }
&gt; &gt;     private:
&gt; &gt;         static $className&amp; singleton() { static NeverDestroyed&lt;$className&gt;
&gt; &gt; singleton; return singleton; }
&gt; &gt;     };
&gt; &gt; 
&gt; &gt; No memory allocation, no incrementing and decrementing reference counts.
&gt; 
&gt; Yes, that is one approach I thought of.
&gt; It requires bypassing JSDOMGlobalObject wrapper cache, which is another
&gt; efficiency bonus.
&gt; 
&gt; We may also want to use a single singleton for all builtin classes.
&gt; 
&gt; To go further, we may want to skip generation of some needless code (toJS,
&gt; releaseImpl...).
&gt; 
&gt; Choice may be guided by the added complexity to the binding generator.
&gt; I plan to take some time on this once the JS builtin architecture is ready
&gt; to implement ReadableStream and WritableStream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128806</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-09-25 15:48:44 -0700</bug_when>
    <thetext>&gt; It requires bypassing JSDOMGlobalObject wrapper cache, which is another
&gt; efficiency bonus.

My proposal above does not require bypassing the wrapper cache. The singleton wrapper will simply be found in the cache (many times over).

However, of course we can do further optimization to bypass the wrapper cache.

&gt; We may also want to use a single singleton for all builtin classes.

We may not need an object at all if we are changing things like the wrapper class. I think we should create a JavaScript object that doesn’t wrap a DOM object at all. And I’m not even sure it’s all that challenging to do that. I might take a crack at it.

&gt; To go further, we may want to skip generation of some needless code (toJS,
&gt; releaseImpl...).
&gt; 
&gt; Choice may be guided by the added complexity to the binding generator.
&gt; I plan to take some time on this once the JS builtin architecture is ready
&gt; to implement ReadableStream and WritableStream.

You may be misunderstanding.

My specific proposed change above is entirely local and doesn’t add any complexity to the bindings generator.

Your more ambitious project is different; that will require a change to the bindings generator, but even that probably does not require not a huge one!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128859</commentid>
    <comment_count>2</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-09-25 23:49:08 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; &gt; It requires bypassing JSDOMGlobalObject wrapper cache, which is another
&gt; &gt; efficiency bonus.
&gt; 
&gt; My proposal above does not require bypassing the wrapper cache. The
&gt; singleton wrapper will simply be found in the cache (many times over).

I may be missing something here.
My understanding is that, if using a singleton, toJS(XX::create()) will always return the same JSXX object. This is not what we want, we want a new object each time. 
Hence why I think we should bypass the cache and remove the generation of the toJS(XX) function. Once done, the singleton class might be made private to the JS class or applicable to all classes.

&gt; We may not need an object at all if we are changing things like the wrapper
&gt; class. I think we should create a JavaScript object that doesn’t wrap a DOM
&gt; object at all. And I’m not even sure it’s all that challenging to do that. I
&gt; might take a crack at it.

I agree, that is the idea behind removing toJS, releaseImpl and so on...
I haven&apos;t done the exercise so cannot comment on how much complexity it will add to the binding generator.

You are probably right about the limited complexity it will need.
But the binding generator seems already a bit messy to me.

Do not hesitate to move that forward directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128884</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-09-26 08:53:24 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; This is not what we want, we want a new object each time.

Why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128978</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-09-28 01:36:55 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; This is not what we want, we want a new object each time.
&gt; 
&gt; Why?

All other wrapper classes have that behavior.
I think (jsObject == toJS(toWrapped(jsObject))) is true for all classes for instance.
Breaking that behavior might not break any existing code but this looks misleading to me.

Removing generation of that code (toJS, toWrapped, Wrapper owner code) for JS builtin constructed classes makes sense to me, whether we keep a dummy DOM class or not.

With limited refactoring, this might be healthy for the binding generator code as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129123</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-09-28 17:14:42 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; This is not what we want, we want a new object each time.
&gt; &gt; 
&gt; &gt; Why?
&gt; 
&gt; All other wrapper classes have that behavior.
&gt; I think (jsObject == toJS(toWrapped(jsObject))) is true for all classes for
&gt; instance.
&gt; Breaking that behavior might not break any existing code but this looks
&gt; misleading to me.

Sure, slightly inelegant, but I’m almost certain it will work just fine.

&gt; Removing generation of that code (toJS, toWrapped, Wrapper owner code) for
&gt; JS builtin constructed classes makes sense to me, whether we keep a dummy
&gt; DOM class or not.
&gt; 
&gt; With limited refactoring, this might be healthy for the binding generator
&gt; code as well.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129195</commentid>
    <comment_count>6</comment_count>
      <attachid>262056</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-09-29 03:02:37 -0700</bug_when>
    <thetext>Created attachment 262056
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129196</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-29 03:05:00 -0700</bug_when>
    <thetext>Attachment 262056 did not pass style-queue:


ERROR: Source/WebCore/bindings/scripts/test/ObjC/DOMTestJSBuiltinConstructor.mm:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129226</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-09-29 05:15:46 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created attachment 262056 [details]
&gt; Patch

The handling of m_impl and related methods is not perfect.
It might be better to templatize it outside of the binding generator.
Maybe as a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129290</commentid>
    <comment_count>9</comment_count>
      <attachid>262056</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-29 10:49:54 -0700</bug_when>
    <thetext>Comment on attachment 262056
Patch

Clearing flags on attachment: 262056

Committed r190314: &lt;http://trac.webkit.org/changeset/190314&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129291</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-29 10:49:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262056</attachid>
            <date>2015-09-29 03:02:37 -0700</date>
            <delta_ts>2015-09-29 10:49:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149556-20150929070212.patch</filename>
            <type>text/plain</type>
            <size>60314</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTMwNjc1YzMwODFjOTk2
NjI0ZjRkMjg4MjM5YWNjYzlmMGMyNDk4YS4uYmIwZDVlZWQyZjBjZWZjMDc0OWQ3NzYxZTM4NzQ0
YjA1YTQxZTFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDk4IEBACiAyMDE1LTA5LTI5ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKKyAgICAgICAgSW1wcm92
ZSBiaW5kaW5nIG9mIEpTQnVpbHRpbkNvbnN0cnVjdG9yIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTU1NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEpTQnVpbHRpbkNvbnN0cnVjdG9yIGNs
YXNzZXMgbm8gbG9uZ2VyIG5lZWQgZGVmaW5pdGlvbiBvZiBhIERPTSBjbGFzcy4KKyAgICAgICAg
VGhlc2UgY2xhc3NlcyBubyBsb25nZXIgZ28gdGhyb3VnaCB0aGUgSlMgd3JhcHBlciBjYWNoZS4K
KyAgICAgICAgUmVtb3ZlZCBjb2RlIHJlbGF0ZWQgdG8gRE9NIGNsYXNzIGhhbmRsaW5nIChtX2lt
cGwsIHJlbGVhc2VJbXBsLCBXcmFwcGVyT3duZXIsIHRvSlMsIC4uLikKKyAgICAgICAgVXBkYXRl
ZCBjcmVhdGlvbiBjb2RlLgorCisgICAgICAgIFJlZmFjdG9yaW5nIG9mIHRoZSBiaW5kaW5nIGdl
bmVyYXRvciBjb2RlIHRvIHNpbXBsaWZ5IHdoZXRoZXIgZ2VuZXJhdGluZyBvciBub3Qgc29tZSBt
ZXRob2RzLgorCisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZSBvZiBET00gY2xhc3Mg
aW4gSlNYWC5jcHAgKGFscmVhZHkgZG9uZSBpbiBKU1hYLmgpCisKKyAgICAgICAgQWRkZWQgbmV3
IGJpbmRpbmcgdGVzdCB0byBjb3ZlciBKU0J1aWx0aW5Db25zdHJ1Y3RvciBrZXl3b3JkLgorCisg
ICAgICAgIENvdmVyZWQgYnkgYmluZGluZyB0ZXN0cy4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSlNCdWlsdGluKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTUNvbnN0cnVjdG9yT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOi4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAg
KE5lZWRzSW1wbGVtZW50YXRpb25DbGFzcyk6CisgICAgICAgIChTaG91bGRHZW5lcmF0ZVRvV3Jh
cHBlZCk6CisgICAgICAgIChTaG91bGRHZW5lcmF0ZVdyYXBwZXJPd25lckNvZGUpOgorICAgICAg
ICAoU2hvdWxkR2VuZXJhdGVUb0pTRGVjbGFyYXRpb24pOgorICAgICAgICAoU2hvdWxkR2VuZXJh
dGVUb0pTSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAg
ICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9y
RGVmaW5pdGlvbik6CisgICAgICAgIChDb21wdXRlRnVuY3Rpb25TcGVjaWFsKTouCisgICAgICAg
IChVc2VKU0J1aWx0aW5zKTouCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvcmUpOgorICAgICAgICAoV2ViS2l0
Ojp3cmFwVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2NsYXNzX2luaXQpOgorICAgICAgICAo
d2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfaW5pdCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUuaDogQWRkZWQuCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVj
dG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZTo6SlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3JQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjb25z
dHJ1Y3RKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmRlc3Ryb3kpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6On5KU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
OjpnZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5j
cHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYy5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHA6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oOiBB
ZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0SlNCdWls
dGluQ29uc3RydWN0b3IubW06IEFkZGVkLgorICAgICAgICAoLVtET01UZXN0SlNCdWlsdGluQ29u
c3RydWN0b3IgZGVhbGxvY10pOgorICAgICAgICAoLVtET01UZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IgZmluYWxpemVdKToKKyAgICAgICAgKGNvcmUpOgorICAgICAgICAoa2l0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JJ
bnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmlkbDogQWRkZWQuCisKKzIwMTUtMDktMjkgIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKwogICAgICAgICBBZGQgc3VwcG9ydCBm
b3IgV2ViSURMIEpTQnVpbHRpbiBhdHRyaWJ1dGVzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk1NTQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaAppbmRleCBlM2IzMjRmODUwMzZiYzM5MzhiNmFjNWI4NDZjZWYyMDRm
Mjc5MzQ4Li40ZjZmNmE2ZmUyNjMyMDA3YTgwNWE2MTgwOGI1MzM0Y2Q2MGNkZTBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaApAQCAtODUsMTUgKzg1LDYgQEAg
SlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yRG9jdW1lbnRVbmF2YWlsYWJsZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgY28KIFdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFs
dWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKIFdFQkNPUkVfRVhQT1JUIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKIAotdm9p
ZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBjcmVhdGVGcm9tSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U0Z1bmN0aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCi17Ci0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodG9KUygmc3Rh
dGUsICZnbG9iYWxPYmplY3QsIERPTUNsYXNzOjpjcmVhdGUoKSkpOwotICAgIGNhbGxGdW5jdGlv
bldpdGhDdXJyZW50QXJndW1lbnRzKHN0YXRlLCAqb2JqZWN0LCBpbml0aWFsaXplRnVuY3Rpb24p
OwotICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShvYmplY3QpOwotfQotCiAvLyBCYXNl
IGNsYXNzIGZvciBhbGwgY29uc3RydWN0b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgog
Y2xhc3MgRE9NQ29uc3RydWN0b3JPYmplY3QgOiBwdWJsaWMgSlNET01XcmFwcGVyIHsKIHB1Ymxp
YzoKQEAgLTE1OCw2ICsxNDksMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBp
bmxpbmUgSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mIHYKICAgICByZXR1
cm4gSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGFzT2JqZWN0KGdldERPTVN0cnVjdHVyZTxX
cmFwcGVyQ2xhc3M+KHZtLCBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOwogfQogCit2b2lkIGNhbGxGdW5jdGlvbldpdGhD
dXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU09iamVjdCYgdGhpc09iamVj
dCwgSlNDOjpKU0Z1bmN0aW9uJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQoreworICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQ2xhc3M6
OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFsT2JqZWN0LnZtKCksICZnbG9i
YWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFy
Z3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5pdGlhbGl6ZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4g
SlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKK30KKwogaW5saW5lIEpTQzo6V2Vha0hhbmRs
ZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1
ZmZlciopCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci5nZXQoKSktPndyYXBwZXJP
d25lcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQppbmRleCAxMTc2ZGU4NGVhYjExNTcxMjRkNDQ4M2RmMjFjN2ExYjc1MWU4ZmMz
Li42ZTBjMzFkNTBhZjU4MzM4YjAxYjA5ODdjMjgwYWZjMDliOTRjMzhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtNTA5
LDEwICs1MDksNDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25Db250ZW50SGVhZGVyCiAg
ICAgcmV0dXJuIEBpbXBsQ29udGVudEhlYWRlcjsKIH0KIAorc3ViIE5lZWRzSW1wbGVtZW50YXRp
b25DbGFzcworeworICAgIG15ICgkaW50ZXJmYWNlKSA9IEBfOworCisgICAgcmV0dXJuIDAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW5Db25zdHJ1Y3RvciJ9
KTsKKyAgICByZXR1cm4gMTsKK30KKworc3ViIFNob3VsZEdlbmVyYXRlVG9XcmFwcGVkCit7Cisg
ICAgbXkgKCRoYXNQYXJlbnQsICRpbnRlcmZhY2UpID0gQF87CisKKyAgICByZXR1cm4gMCBpZiBu
b3QgTmVlZHNJbXBsZW1lbnRhdGlvbkNsYXNzKCRpbnRlcmZhY2UpOworICAgIGlmICghJGhhc1Bh
cmVudCBvciAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNHZW5lcmF0ZVRvTmF0
aXZlT2JqZWN0In0pIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOwor
fQorCitzdWIgU2hvdWxkR2VuZXJhdGVXcmFwcGVyT3duZXJDb2RlCit7CisgICAgbXkgKCRoYXNQ
YXJlbnQsICRpbnRlcmZhY2UpID0gQF87CisKKyAgICByZXR1cm4gMCBpZiBub3QgTmVlZHNJbXBs
ZW1lbnRhdGlvbkNsYXNzKCRpbnRlcmZhY2UpOworICAgIGlmICghJGhhc1BhcmVudCB8fAorICAg
ICAgICBHZXRHZW5lcmF0ZUlzUmVhY2hhYmxlKCRpbnRlcmZhY2UpIHx8CisgICAgICAgIEdldEN1
c3RvbUlzUmVhY2hhYmxlKCRpbnRlcmZhY2UpIHx8CisgICAgICAgICRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUZpbmFsaXplIn0gfHwKKyAgICAgICAgJGNvZGVHZW5l
cmF0b3ItPkluaGVyaXRzRXh0ZW5kZWRBdHRyaWJ1dGUoJGludGVyZmFjZSwgIkFjdGl2ZURPTU9i
amVjdCIpKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwog
c3ViIFNob3VsZEdlbmVyYXRlVG9KU0RlY2xhcmF0aW9uCiB7CiAgICAgbXkgKCRoYXNQYXJlbnQs
ICRpbnRlcmZhY2UpID0gQF87CisKICAgICByZXR1cm4gMCBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IlN1cHByZXNzVG9KU09iamVjdCJ9KTsKKyAgICByZXR1cm4gMCBpZiBu
b3QgTmVlZHNJbXBsZW1lbnRhdGlvbkNsYXNzKCRpbnRlcmZhY2UpOwogICAgIHJldHVybiAwIGlm
ICRpbnRlcmZhY2UtPm5hbWUgZXEgIkFic3RyYWN0VmlldyI7CiAgICAgcmV0dXJuIDEgaWYgKCEk
aGFzUGFyZW50IG9yICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0dlbmVyYXRl
VG9KU09iamVjdCJ9IG9yICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21U
b0pTT2JqZWN0In0pOwogICAgIHJldHVybiAwOwpAQCAtNTIxLDkgKzU1Nyw5IEBAIHN1YiBTaG91
bGRHZW5lcmF0ZVRvSlNEZWNsYXJhdGlvbgogc3ViIFNob3VsZEdlbmVyYXRlVG9KU0ltcGxlbWVu
dGF0aW9uCiB7CiAgICAgbXkgKCRoYXNQYXJlbnQsICRpbnRlcmZhY2UpID0gQF87Ci0gICAgcmV0
dXJuIDAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJTdXBwcmVzc1RvSlNP
YmplY3QifSk7Ci0gICAgcmV0dXJuIDAgaWYgJGludGVyZmFjZS0+bmFtZSBlcSAiQWJzdHJhY3RW
aWV3IjsKLSAgICByZXR1cm4gMSBpZiAoKCEkaGFzUGFyZW50IG9yICRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJKU0dlbmVyYXRlVG9KU09iamVjdCJ9KSBhbmQgISRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Ub0pTT2JqZWN0In0pOworCisgICAgcmV0dXJu
IDAgaWYgbm90IFNob3VsZEdlbmVyYXRlVG9KU0RlY2xhcmF0aW9uKCRoYXNQYXJlbnQsICRpbnRl
cmZhY2UpOworICAgIHJldHVybiAxIGlmIG5vdCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ3VzdG9tVG9KU09iamVjdCJ9OwogICAgIHJldHVybiAwOwogfQogCkBAIC04NzIsOCAr
OTA4LDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICBteSAkZXhwb3J0TGFiZWwgPSBFeHBv
cnRMYWJlbEZvckNsYXNzKCRjbGFzc05hbWUpOwogCi0gICAgR2VuZXJhdGVEdW1teURPTUNsYXNz
Rm9ySlNCdWlsdGluKCRpbXBsVHlwZSkgaWYgVXNlRHVtbXlET01DbGFzcygkaW50ZXJmYWNlKTsK
LQogICAgICMgQ2xhc3MgZGVjbGFyYXRpb24KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xh
c3MgJGV4cG9ydExhYmVsJGNsYXNzTmFtZSA6IHB1YmxpYyAkcGFyZW50Q2xhc3NOYW1lIHtcbiIp
OwogCkBAIC05MDUsOCArOTM5LDE1IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dC0+dm0oKSk7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0
dXJuIHB0cjtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cblxuIik7
CisgICAgfSBlbHNpZiAoIU5lZWRzSW1wbGVtZW50YXRpb25DbGFzcygkaW50ZXJmYWNlKSkgewor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyAkY2xhc3NOYW1lKiBjcmVh
dGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdClcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOworICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICAkY2xhc3NOYW1lKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPCRjbGFzc05hbWU+KGdsb2JhbE9iamVjdC0+dm0o
KS5oZWFwKSkgJGNsYXNzTmFtZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7XG4iKTsKKyAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QtPnZtKCkpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
ICAgIHJldHVybiBwdHI7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9
XG5cbiIpOyAgCiAgICAgfSBlbHNlIHsKLSAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlSW5IZWFk
ZXIoJGltcGxUeXBlKSB1bmxlc3MgJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIHx8IFVz
ZUR1bW15RE9NQ2xhc3MoJGludGVyZmFjZSk7CisgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZUlu
SGVhZGVyKCRpbXBsVHlwZSkgdW5sZXNzICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZTsK
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgJGNsYXNzTmFtZSogY3Jl
YXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZjwkaW1wbFR5cGU+JiYgaW1wbClcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAg
ICAkY2xhc3NOYW1lKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPCRjbGFz
c05hbWU+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgJGNsYXNzTmFtZShzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCwgV1RGOjptb3ZlKGltcGwpKTtcbiIpOwpAQCAtOTI2LDcgKzk2Nyw3IEBAIHN1
YiBHZW5lcmF0ZUhlYWRlcgogICAgIH0KIAogICAgICMgSlNWYWx1ZSB0byBpbXBsZW1lbnRhdGlv
biB0eXBlCi0gICAgaWYgKCEkaGFzUGFyZW50IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QifSkgeworICAgIGlmIChTaG91bGRHZW5l
cmF0ZVRvV3JhcHBlZCgkaGFzUGFyZW50LCAkaW50ZXJmYWNlKSkgewogICAgICAgICBpZiAoJGlu
dGVyZmFjZU5hbWUgZXEgIk5vZGVGaWx0ZXIiKSB7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHN0YXRpYyBSZWZQdHI8Tm9kZUZpbHRlcj4gdG9XcmFwcGVkKEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpO1xuIik7CiAgICAgICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVx
ICJET01TdHJpbmdMaXN0IikgewpAQCAtMTE0NiwxNiArMTE4NywxOCBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgJGVuZEFwcGxlQ29weXJpZ2h0KSBp
ZiAkaW5BcHBsZUNvcHlyaWdodDsKICAgICB9CiAKLSAgICBpZiAoISRoYXNQYXJlbnQpIHsKLSAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkaW1wbFR5cGUmIGltcGwoKSBjb25zdCB7
IHJldHVybiAqbV9pbXBsOyB9XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICB2b2lkIHJlbGVhc2VJbXBsKCkgeyBzdGQ6OmV4Y2hhbmdlKG1faW1wbCwgbnVsbHB0ciktPmRl
cmVmKCk7IH1cblxuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwcml2YXRlOlxu
Iik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGltcGxUeXBlKiBtX2ltcGw7
XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRp
bnRlcmZhY2VOYW1lJiBpbXBsKCkgY29uc3RcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8JGludGVyZmFjZU5hbWUmPihCYXNlOjppbXBsKCkpO1xuIik7Ci0g
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuIik7CisgICAgaWYgKE5lZWRzSW1w
bGVtZW50YXRpb25DbGFzcygkaW50ZXJmYWNlKSkgeworICAgICAgICBpZiAoISRoYXNQYXJlbnQp
IHsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGltcGxUeXBlJiBpbXBs
KCkgY29uc3QgeyByZXR1cm4gKm1faW1wbDsgfVxuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHZvaWQgcmVsZWFzZUltcGwoKSB7IHN0ZDo6ZXhjaGFuZ2UobV9pbXBs
LCBudWxscHRyKS0+ZGVyZWYoKTsgfVxuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJwcml2YXRlOlxuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgICRpbXBsVHlwZSogbV9pbXBsO1xuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRpbnRlcmZhY2VOYW1lJiBpbXBsKCkgY29uc3Rc
biIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDwk
aW50ZXJmYWNlTmFtZSY+KEJhc2U6OmltcGwoKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAgIH0KICAgICB9CiAKICAgICAjIHN0cnVj
dHVyZSBmbGFncwpAQCAtMTE3NSw3ICsxMjE4LDkgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OlZNJiwgSlNDOjpT
dHJ1Y3R1cmUqLCBSZWY8JGltcGxUeXBlPiYmLCBKU0RPTVdpbmRvd1NoZWxsKik7XG4iKTsKICAg
ICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SW5oZXJpdHNJbnRlcmZhY2UoJGludGVyZmFjZSwg
Ildvcmtlckdsb2JhbFNjb3BlIikpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICAkY2xhc3NOYW1lKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZjwkaW1wbFR5cGU+JiYp
O1xuIik7Ci0gICAgfSBlbHNlIHsKKyAgICB9IGVsc2lmICghTmVlZHNJbXBsZW1lbnRhdGlvbkNs
YXNzKCRpbnRlcmZhY2UpKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNs
YXNzTmFtZShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7XG5cbiIpOworICAg
ICB9IGVsc2UgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUo
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjwkaW1wbFR5cGU+JiYpO1xu
XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mIHZtKVxuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
e1xuIik7CkBAIC0xMTk2LDExICsxMjQxLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAifTtcblxuIik7CiAKLSAgICBpZiAoISRoYXNQYXJlbnQgfHwK
LSAgICAgICAgR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkaW50ZXJmYWNlKSB8fAotICAgICAgICBH
ZXRDdXN0b21Jc1JlYWNoYWJsZSgkaW50ZXJmYWNlKSB8fAotICAgICAgICAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21GaW5hbGl6ZSJ9IHx8Ci0gICAgICAgICRjb2Rl
R2VuZXJhdG9yLT5Jbmhlcml0c0V4dGVuZGVkQXR0cmlidXRlKCRpbnRlcmZhY2UsICJBY3RpdmVE
T01PYmplY3QiKSkgeworICAgIGlmIChTaG91bGRHZW5lcmF0ZVdyYXBwZXJPd25lckNvZGUoJGhh
c1BhcmVudCwgJGludGVyZmFjZSkpIHsKICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIG5lICJO
b2RlIiAmJiAkY29kZUdlbmVyYXRvci0+SW5oZXJpdHNJbnRlcmZhY2UoJGludGVyZmFjZSwgIk5v
ZGUiKSkgewogICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJKU05vZGUuaCJ9ID0gMTsKICAg
ICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyBKUyR7aW50ZXJmYWNlTmFtZX1P
d25lciA6IHB1YmxpYyBKU05vZGVPd25lciB7XG4iKTsKQEAgLTE3NTUsNyArMTc5Niw2IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvUHJv
cGVydHlOYW1lQXJyYXkuaD4ifSA9IDEgaWYgJGluZGV4ZWRHZXR0ZXJGdW5jdGlvbjsKIAogICAg
IG15ICRpbXBsVHlwZSA9IEdldEltcGxDbGFzc05hbWUoJGludGVyZmFjZU5hbWUpOwotICAgIEFk
ZEluY2x1ZGVzRm9yVHlwZUluSW1wbCgkaW1wbFR5cGUpIGlmIG5vdCBVc2VEdW1teURPTUNsYXNz
KCRpbnRlcmZhY2UpOwogCiAgICAgQWRkSW5jbHVkZXNGb3JKU0J1aWx0aW5NZXRob2RzKCRpbnRl
cmZhY2UpOwogCkBAIC0yMTE4LDcgKzIxNTgsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHZt
LCBzdHJ1Y3R1cmUsIFdURjo6bW92ZShpbXBsKSlcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Ci0gICAg
fSBlbHNlIHsKKyAgICB9IGVsc2lmICghTmVlZHNJbXBsZW1lbnRhdGlvbkNsYXNzKCRpbnRlcmZh
Y2UpKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NO
YW1lKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFt
ZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkgeyB9XG5cbiIpOworICAgICB9ZWxzZSB7CiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8JGltcGxU
eXBlPiYmIGltcGwpXG4iKTsKICAgICAgICAgaWYgKCRoYXNQYXJlbnQpIHsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCwgV1RGOjptb3ZlKGltcGwpKVxuIik7CkBAIC0yMTU2LDcgKzIxOTksOSBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
JHtjbGFzc05hbWV9Ojp+JHtjbGFzc05hbWV9KClcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZWxlYXNlSW1w
bCgpO1xuIik7CisgICAgICAgIGlmIChOZWVkc0ltcGxlbWVudGF0aW9uQ2xhc3MoJGludGVyZmFj
ZSkpIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJlbGVhc2VJbXBsKCk7
XG4iKTsKKyAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAg
ICAgfQogCkBAIC0yOTg5LDggKzMwMzQsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCghJGhhc1BhcmVudCAmJiAhR2V0Q3VzdG9tSXNS
ZWFjaGFibGUoJGludGVyZmFjZSkpIHx8IEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGludGVyZmFj
ZSkgfHwgJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzRXh0ZW5kZWRBdHRyaWJ1dGUoJGludGVyZmFj
ZSwgIkFjdGl2ZURPTU9iamVjdCIpKSB7Ci0KKyAgICBpZiAoU2hvdWxkR2VuZXJhdGVXcmFwcGVy
T3duZXJDb2RlKCRoYXNQYXJlbnQsICRpbnRlcmZhY2UpICYmICFHZXRDdXN0b21Jc1JlYWNoYWJs
ZSgkaW50ZXJmYWNlKSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgSlMke2lu
dGVyZmFjZU5hbWV9T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgIyBBbGwgQWN0aXZl
RE9NT2JqZWN0cyBpbXBsZW1lbnQgaGFzUGVuZGluZ0FjdGl2aXR5KCksIGJ1dCBub3QgYWxsIG9m
IHRoZW0KQEAgLTMwNzMsMTEgKzMxMTcsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQogCi0gICAgaWYgKCEk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21GaW5hbGl6ZSJ9ICYmCi0g
ICAgICAgICghJGhhc1BhcmVudCB8fAotICAgICAgICAgR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgk
aW50ZXJmYWNlKSB8fAotICAgICAgICAgR2V0Q3VzdG9tSXNSZWFjaGFibGUoJGludGVyZmFjZSkg
fHwKLSAgICAgICAgICRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0V4dGVuZGVkQXR0cmlidXRlKCRp
bnRlcmZhY2UsICJBY3RpdmVET01PYmplY3QiKSkpIHsKKyAgICBpZiAoU2hvdWxkR2VuZXJhdGVX
cmFwcGVyT3duZXJDb2RlKCRoYXNQYXJlbnQsICRpbnRlcmZhY2UpICYmICEkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21GaW5hbGl6ZSJ9KSB7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAidm9pZCBKUyR7aW50ZXJmYWNlTmFtZX1Pd25lcjo6ZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpXG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byoganMke2ludGVyZmFjZU5hbWV9ID0ganNDYXN0PEpTJHtpbnRlcmZhY2VOYW1l
fSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTtcbiIpOwpAQCAtMzE3Myw3ICszMjEzLDcgQEAg
RU5ECiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CiAKLSAgICBp
ZiAoKCEkaGFzUGFyZW50IG9yICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0dl
bmVyYXRlVG9OYXRpdmVPYmplY3QifSkgYW5kICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSlNDdXN0b21Ub05hdGl2ZU9iamVjdCJ9KSB7CisgICAgaWYgKFNob3VsZEdlbmVyYXRl
VG9XcmFwcGVkKCRoYXNQYXJlbnQsICRpbnRlcmZhY2UpIGFuZCAhJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tVG9OYXRpdmVPYmplY3QifSkgewogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiRpbXBsVHlwZSogJHtjbGFzc05hbWV9Ojp0b1dyYXBwZWQoSlNDOjpK
U1ZhbHVlIHZhbHVlKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChhdXRvKiB3cmFwcGVyID0gIiAuIEdl
dENhc3RpbmdIZWxwZXJGb3JUaGlzT2JqZWN0KCRpbnRlcmZhY2UpIC4gIih2YWx1ZSkpXG4iKTsK
QEAgLTQ4MTQsNyArNDg1NCw3IEBAIEVORAogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAie1xuIik7CiAKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiBj
YXN0ZWRUaGlzID0ganNDYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oc3RhdGUtPmNhbGxl
ZSgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBj
cmVhdGVGcm9tSlNCdWlsdGluPCR7Y2xhc3NOYW1lfSwgJHtpbnRlcmZhY2VOYW1lfT4oKnN0YXRl
LCAqY2FzdGVkVGhpcy0+aW5pdGlhbGl6ZUZ1bmN0aW9uKCksICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1
cm4gY3JlYXRlSlNCdWlsdGluPCR7Y2xhc3NOYW1lfT4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+aW5p
dGlhbGl6ZUZ1bmN0aW9uKCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7XG4iKTsKIAog
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKICAgICAgICAgfSBlbHNp
ZiAoIUhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpICYmICghJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSB8fCAkZ2VuZXJhdGluZ05hbWVk
Q29uc3RydWN0b3IpKSB7CkBAIC01MTA1LDIyICs1MTQ1LDQgQEAgc3ViIEFkZEluY2x1ZGVzRm9y
SlNCdWlsdGluTWV0aG9kcygpCiAKIH0KIAotc3ViIFVzZUR1bW15RE9NQ2xhc3MoKQotewotICAg
IG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLQotICAgIHJldHVybiAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluQ29uc3RydWN0b3IifTsKLX0KLQotc3ViIEdlbmVyYXRl
RHVtbXlET01DbGFzc0ZvckpTQnVpbHRpbigpCi17Ci0gICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0
OwotCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRjbGFzc05hbWUgOiBwdWJsaWMg
UmVmQ291bnRlZDwkY2xhc3NOYW1lPiB7XG4iKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
cHVibGljOlxuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgUmVmPCRj
bGFzc05hbWU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCogbmV3ICRjbGFzc05hbWUpOyB9
XG4iKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgfiRjbGFzc05hbWUo
KSB7IH1cbiIpOwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKLX0KLQogMTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiYzZiMmQxNjEzOTkxYzZlZjA4ODNlZmM0YzY2NjU4ODZj
MDM3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCkBAIC0w
LDAgKzEsMTA0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgi
CisKKyNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJKU01haW5UaHJl
YWRFeGVjU3RhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgImdv
YmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0pTX0JVSUxU
SU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9KU19CVUlMVElOX0NPTlNUUlVDVE9SLCBXZWJL
aXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdl
YkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9N
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcioga2l0KFdlYkNvcmU6OlRlc3RKU0J1
aWx0aW5Db25zdHJ1Y3Rvciogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisg
ICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUihyZXQp
OworCisgICAgcmV0dXJuIHdyYXBUZXN0SlNCdWlsdGluQ29uc3RydWN0b3Iob2JqKTsKK30KKwor
V2ViQ29yZTo6VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBjb3JlKFdlYktpdERPTVRlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvciogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KFdFQktJVF9ET01fT0JK
RUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvciogd3JhcFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUihn
X29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwg
ImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IsIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yLCBXRUJLSVRfRE9NX1RZ
UEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfanNfYnVpbHRpbl9jb25z
dHJ1Y3Rvcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9KU19CVUlM
VElOX0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+
V2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSgpOworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rl
c3RfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0
UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfZG9tX3Rlc3RfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1
Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMp
OworCisgICAgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fVEVTVF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKG9iamVj
dCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RKU0J1
aWx0aW5Db25zdHJ1Y3Rvcio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3Qp
OworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgp
LCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3Ry
dWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3RfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jb25zdHJ1Y3Rv
cjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0
aW5fY29uc3RydWN0b3JfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2luaXQoV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
clByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9H
RVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RKU0J1aWx0
aW5Db25zdHJ1Y3RvclByaXZhdGUoKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTBiM2YzN2U4
ZDJhZGI3YTllYzFiM2RkYWMxMDJkZTFhNWQ1YWZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JfaAor
I2RlZmluZSBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JfaAorCisjaWZkZWYgV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiAgICAgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3RfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUihvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9K
U19CVUlMVElOX0NPTlNUUlVDVE9SLCBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3Ip
KQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9DTEFTUyhr
bGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfVEVTVF9KU19CVUlMVElOX0NPTlNUUlVDVE9SLCBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29u
c3RydWN0b3JDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0pTX0JVSUxUSU5fQ09O
U1RSVUNUT1Iob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUikpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfVEVTVF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0pTX0JV
SUxUSU5fQ09OU1RSVUNUT1IpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfSlNfQlVJTFRJTl9D
T05TVFJVQ1RPUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9KU19CVUlMVElOX0NPTlNUUlVDVE9SLCBXZWJLaXRE
T01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3Rh
bmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDbGFz
cyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3R5
cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3Jf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwMzlkYWE2MGFhMmE1NDFmNTRh
MGUxMjE3ODQ4NDcyN2JhNGExYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3JQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZV9oCisK
KyNpbmNsdWRlICJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiB3cmFwVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciopOworV2ViS2l0
RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yKik7CitXZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmUoV2Vi
S2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8qIFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCBlMDY3NDBhNTA5NjBlZTk3
YzM5OWM1ZGNhODVjMzVmNWZhMTZlZjM5Li45ZmYwOTMzZmI2MGFkNDI0ZjE0MzllYzQ1YTEwYmMx
MTM3MDU5OWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMjQsNyAr
MjQsNiBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKLSNpbmNsdWRlICJUZXN0QWN0aXZlRE9NT2JqZWN0
LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3Rvcldp
dGhOb0ludGVyZmFjZU9iamVjdC5jcHAKaW5kZXggMzhlMWVjMzE0YTY5NDRjYzY5OTI5MDhjZTNk
ZGZkMTM5MTUxOGMwZC4uMDMwMzBjMDU3MjNhOThjZDdiNzM0ZDdlZTVkNjQ3N2NmNWE4YjBhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JX
aXRoTm9JbnRlcmZhY2VPYmplY3QuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiSlNU
ZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaCIKIAogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIlRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0lu
dGVyZmFjZU9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCmluZGV4IDg5NjJm
MTMyZDk5YzNjYzEwNWM3MjhhMjZjNTAwZjZhMDE2YzIzYzYuLmI1ZTg1NGQ0YjEzMGQ3NWYyMzZi
Y2YwYzQ3YzRmYzJlOWEyZDg1NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
LmNwcApAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIlRlc3RDdXN0b21OYW1lZEdldHRlci5o
IgogI2luY2x1ZGUgInd0Zi90ZXh0L0F0b21pY1N0cmluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3IuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvci5jcHAKaW5kZXggZmI0ODMwZGQ5ZjljNzMzN2UwZGYzMDdlMDQ4YWE1Y2ZkNzEyYjQ3
ZC4uYjg3MGZkNTZjYWY5MjI5MDFhYTI4ODEzODA0MTZmZWI1ZTQ1MDkyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNEaWN0aW9uYXJ5LmgiCi0jaW5jbHVkZSAiVGVz
dEV2ZW50Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRh
cmdldC5jcHAKaW5kZXggMmMzNTlkMmQ1NWM3MTJkMjE4ZTQ4ZjE4ODY1NTQ2MGE2MDU3OGZkOC4u
YjEwYTY3MDhjZWJlMjZlYTg2MDZjZTY4ZWI1MTA3MjQ5YjY0M2E5ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZl
bnRUYXJnZXQuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVy
LmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIlRl
c3RFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgInd0Zi90ZXh0L0F0b21pY1N0cmluZy5oIgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFy
cmF5Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCmluZGV4IDc2MjdhNTMzYjQzZTIxMGNmYTUzOWU0
OWYzNjY4MzdmOTA1NmZjMTEuLjE1OWZjNzNhZGYyZjRhM2I3Njc1NDdkMjdhMjZjYzk2MTliMTU3
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAi
SlNUZXN0RXhjZXB0aW9uLmgiCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRl
ICJUZXN0RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9K
U1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlLmNwcAppbmRleCBiZDQ3Yzg0ZjlhMzdlNGYzZDQwMDYwNjMxZDc5ZjU1
ZmExZGE3ZjQ4Li5hYjgxMjcyZDczOTFiNGRiMjhhOTZkOTc1MGI3MzZmYTM0ZThlMzNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCkBAIC0yMiw3ICsyMiw2IEBA
CiAjaW5jbHVkZSAiSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgogCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaCIKICNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZh
Y2UuY3BwCmluZGV4IDY4ZjlhZjI1MzZlZTM0ZmQxM2NlMDg0MzUyY2QyZjRlYTI5YTJiZmUuLmYy
YTkzNDE1NjRiYmMwMDU3MTUyMDQxNWMxOTYxZmM4ZWI5MmEzYWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZh
Y2UuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiVGVzdEludGVyZmFjZS5oIgogI2lu
Y2x1ZGUgIlRlc3RPYmouaCIKICNpbmNsdWRlICJUZXN0U3VwcGxlbWVudGFsLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDRmOWNkNDMxYjk2YTM3YWViMTU0NWM1ZTg5NGQxM2QwMGI4NGVm
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwxNzQgQEAKKy8q
CisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitj
bGFzcyBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBl
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7
CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBK
U1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVj
dG9ySlNCdWlsdGluT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3JDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QqKTsKKwor
cHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QgQmFzZTsK
KyAgICBzdGF0aWMgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVy
biBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
KTsKKyAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpK
U0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKK307CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjb25z
dHJ1Y3RKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCit7
CisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKKyAgICByZXR1cm4gY3JlYXRlSlNCdWls
dGluPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPigqc3RhdGUsICpjYXN0ZWRUaGlzLT5pbml0
aWFsaXplRnVuY3Rpb24oKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKK30KKworY29u
c3QgQ2xhc3NJbmZvIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OnNfaW5m
byA9IHsgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0
cnVjdG9yKSB9OworCitKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogQmFzZShzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCkKK3sKK30KKwordm9pZCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhl
cml0cyhpbmZvKCkpKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmdldFByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yIikpKSwgUmVhZE9ubHkg
fCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBzZXRJbml0aWFsaXplRnVu
Y3Rpb24odm0sICpKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgdGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9ySW5pdGlhbGl6ZVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNv
ZGVHZW5lcmF0b3Iodm0pLCBnbG9iYWxPYmplY3QpKTsKK30KKworQ29uc3RydWN0VHlwZSBKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2Vs
bCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5u
YXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvcjsKKyAg
ICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3Rv
dHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3JQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIs
IERvbnRFbnVtIHwgUmVhZE9ubHksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JD
b25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KDApIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKwor
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKSB9OworCitKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBKU0RPTVdyYXBwZXIo
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QpIHsgfQorCitKU09iamVjdCogSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3I6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90
eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qt
Pm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordm9pZCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3Rvcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3I6On5KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvcigpOworfQorCitKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6fkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKCkKK3sKK30KKworRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCogYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1l
KQoreworICAgIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKj4oYmFz
ZVZhbHVlKTsKKyAgICBpZiAoIWRvbU9iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2Jh
bE9iamVjdCgpKSk7Cit9CisKK0pTVmFsdWUgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6Omdl
dENvbnN0cnVjdG9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25z
dHJ1Y3Rvcj4odm0sIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwor
fQorCit2b2lkIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KGNlbGwpOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2I4ZmVjYTYwMWM3ZGVmYThkYWIyMjc5
OWI3MjIwN2E1NTExYzRmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCkBAIC0wLDAg
KzEsNjIgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBKU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKKwor
I2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yIDogcHVibGljIEpTRE9NV3JhcHBlciB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBw
dHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShK
U0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBnZXRQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CisgICAgfkpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yKCk7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKworcHJvdGVjdGVkOgorICAgIEpTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworfTsK
KworCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggMWQwMmZlM2NlMDY0NTIwMGRlZmI0
MzIyMzdjMTA2MTg2ZjkzMWEwNy4uMzU3ZWRiYTNiMmIwMWZkMTBjYTA3MTFiMmI0MTQzY2QxODNi
NjljNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApA
QCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIKLSNp
bmNsdWRlICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3IuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENv
bnN0cnVjdG9yLmNwcAppbmRleCA0NTAwZmVkYzQ5Y2YzYzY4MzAyOTYzMDJhNDIzNTVjZWU1NThi
ZmQyLi5lZGVhZDY3MWU4NGQxOWJiN2JmNjM1ODAxZWYyOGIzMmYzZTE4YzkyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSAi
RE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiVGVzdE5hbWVkQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHAKaW5kZXggOGI5NWI1NDQ1ZWIxOTBiOTgxY2Y1NjgxMjExZTZhMWFlZjlj
NzM3My4uMGU5MGFkMDk1MDVlZGI5ZjI0MWNhYWI3Nzc3NTllOWZhNGUxNTVhMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2Rl
LmNwcApAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIlRlc3ROb2RlLmgiCiAjaW5jbHVkZSAi
VVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNT
dHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAppbmRleCBhZDNhYTEz
NzdkODVjOTE1YjJkMjJmZjU4N2Y1MmUyODc3NmZmMWM5Li5hZjJkYmJjOTRmZDgzOTU4ZDU2MTM2
ODllODhjMGZlOTZiODRjMDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3Bw
CkBAIC0yMyw3ICsyMyw2IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiVGVzdE5vbmRldGVybWluaXN0aWMuaCIKICNp
bmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMuY3BwCmluZGV4IDc1MzA4ODJlMzNhMTdkODgxNTRlYTM2NGExOTlmNGZiNDZlMWJkNjguLjY2
ZWYzZDUyMWIxZjgyYzZiYjk3N2M4ODUzYzJiZDliMjkyYTZmNzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaCIKICNp
bmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zl
cnJpZGVCdWlsdGlucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKaW5kZXggMjc0OGU2MjhjYTYyYzNmZGEwZjEy
MzIzYzM2OGM2MDdjODAxZWRmZi4uY2ExMGRmNmZmYTkxZDI5YTllMDgzMGM1N2U0YTg1NWFkN2Vh
ZjljMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcApAQCAtMjUsNyArMjUs
NiBAQAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2lu
Y2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJUZXN0T3ZlcnJpZGVCdWlsdGlucy5oIgogI2luY2x1
ZGUgInd0Zi90ZXh0L0F0b21pY1N0cmluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4K
ICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDZlOTU4YzlkM2RiZjRlYmQ4NGFl
YjlmODVkNzVhYjU2MTZhMDc5OWQuLjQ3ZmNhNDQ4ZDU4ZWZiOGZjNGMxNGFkYmRlZjllOGQ2MWIz
MDlhMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9y
dC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgiCi0jaW5jbHVkZSAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5o
IgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RUeXBlZGVmcy5jcHAKaW5kZXggNWI3ZmVhNTAzOTgxYmFkZjdmMjdkZGJlZTg5OWZi
ZDFkYWNhM2ExMy4uNzE3YTFmZjlmNDQ5NGY1N2Y2NWY2NWNjZTM1ODQzNGE5MjdjYjBkYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5
cGVkZWZzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0VHlwZWRlZnMuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiSlNUZXN0U3Vi
T2JqLmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnQuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKLSNpbmNsdWRlICJUZXN0VHlwZWRlZnMuaCIKICNpbmNsdWRlICJVUkwuaCIKICNp
bmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRy
aWJ1dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0
cmlidXRlLmNwcAppbmRleCA0NTI5ZjgyNTQ1ODRlM2E4YWYyNzFjZGRhNDRhY2FkZjQxZGI2MDIx
Li5kZGNmNzNmOWQxYTQxNGEzYjUxNWNmYTFiZjM2MmY1ZmI0NDk4YWM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5j
cHAKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIlVSTC5oIgotI2luY2x1ZGUgImF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmNwcAppbmRleCA3YjNm
MTRkZDczNWFlNjA0OGQ2NTQyNmM0MGZhNDI4OGY4ZDAzMjkyLi5kMDNlY2QxNjIyOGE2ZjQ5MGU4
M2Q1MDk4NTNmZTQ0MWViMGJhZmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAj
aW5jbHVkZSAiSlNyZWFkb25seS5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5j
bHVkZSAicmVhZG9ubHkuaCIKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM1MmRjNzJkMDIyNmZlMzFkMTEzYzRlODAzZWFiYWRjOTlkMmMzZGYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vpbmln
IDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbXBvcnQgPFdlYkNvcmUvRE9NT2JqZWN0Lmg+CisKK1dFQktJVF9DTEFT
U19BVkFJTEFCTEVfTUFDKDk4NzZfNSkKK1dFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgRE9NVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yIDogRE9NT2JqZWN0CitAZW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0SlNCdWlsdGluQ29u
c3RydWN0b3IubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2JiOWFiMjExNWVkNGQ0
MTc1MTUxMDA4NDJjNzdjNjNjYWUzZjI1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5tbQpAQCAtMCwwICsxLDgyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiRE9NSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiRE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmgiCisKKyNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9ySW50ZXJuYWwuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgi
CisjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbXBvcnQgIlRlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5oIgorI2ltcG9ydCAiVGhyZWFkQ2hlY2suaCIKKyNpbXBvcnQgIldlYkNv
cmVPYmpDRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgiCisjaW1w
b3J0IDx3dGYvR2V0UHRyLmg+CisKKyNkZWZpbmUgSU1QTCByZWludGVycHJldF9jYXN0PFdlYkNv
cmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KF9pbnRlcm5hbCkKKworQGltcGxlbWVudGF0
aW9uIERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvcgorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW0RPTVRlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvciBjbGFzc10sIHNlbGYpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoX2ludGVybmFsKQorICAgICAgICBJTVBMLT5kZXJlZigpOworICAgIFtzdXBlciBkZWFs
bG9jXTsKK30KKworLSAodm9pZClmaW5hbGl6ZQoreworICAgIGlmIChfaW50ZXJuYWwpCisgICAg
ICAgIElNUEwtPmRlcmVmKCk7CisgICAgW3N1cGVyIGZpbmFsaXplXTsKK30KKworQGVuZAorCitX
ZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmUoRE9NVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yICp3cmFwcGVyKQoreworICAgIHJldHVybiB3cmFwcGVyID8gcmVpbnRlcnByZXRf
Y2FzdDxXZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqPih3cmFwcGVyLT5faW50ZXJu
YWwpIDogMDsKK30KKworRE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yICpraXQoV2ViQ29yZTo6
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlVGhyZWFkVmlv
bGF0aW9uQ2hlY2tSb3VuZE9uZSgpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgaWYgKERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciAqd3JhcHBlciA9IGdldERP
TVdyYXBwZXIodmFsdWUpKQorICAgICAgICByZXR1cm4gW1t3cmFwcGVyIHJldGFpbl0gYXV0b3Jl
bGVhc2VdOworICAgIERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciAqd3JhcHBlciA9IFtbRE9N
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yIGFsbG9jXSBfaW5pdF07CisgICAgd3JhcHBlci0+X2lu
dGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KHZhbHVlKTsKKyAg
ICB2YWx1ZS0+cmVmKCk7CisgICAgYWRkRE9NV3JhcHBlcih3cmFwcGVyLCB2YWx1ZSk7CisgICAg
cmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckludGVybmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwMDhhZTAw
OGJjMmM1NDZmZGUwMGNiNmQ2ODNjN2RlMTIzNWIwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0SlNCdWlsdGluQ29u
c3RydWN0b3JJbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2Vi
Q29yZS9ET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOworfQorCitXRUJDT1JFX0VYUE9SVCBX
ZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmUoRE9NVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yICopOworV0VCQ09SRV9FWFBPUlQgRE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
ICpraXQoV2ViQ29yZTo6VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SlNCdWls
dGluQ29uc3RydWN0b3IuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhMWYxZGRmYTE1NmI0MTg2MmRlMDY2NTA3
ODg5Yzg4OWJjMGNhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmlkbApAQCAtMCwwICsxLDMz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMu
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
ICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworWworICAgIEpT
QnVpbHRpbkNvbnN0cnVjdG9yCitdIGludGVyZmFjZSBUZXN0SlNCdWlsdGluQ29uc3RydWN0b3Ig
eworfTsKKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>