<?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>16573</bug_id>
          
          <creation_ts>2007-12-21 23:53:15 -0800</creation_ts>
          <short_desc>Remove redundant calls to setPrototype in WebCore</short_desc>
          <delta_ts>2008-01-03 14:11:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>65057</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-21 23:53:15 -0800</bug_when>
    <thetext>The way prototypes are set in the JS bindings in WebCore is inefficient and can be improved by passing the prototype up the constructor chain.  Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65058</commentid>
    <comment_count>1</comment_count>
      <attachid>18057</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-21 23:53:53 -0800</bug_when>
    <thetext>Created attachment 18057
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65064</commentid>
    <comment_count>2</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-12-22 01:35:25 -0800</bug_when>
    <thetext>Actually, I think the way it was is a deliberate choice, because this way can introduce a GC hazard (you might end up triggering a garbage collection while an object is partially allocated). I&apos;m not sure if this is still a real problem or not. Possibly not, if the prorotype is known to exist already. Another possibility is to pass the prototype to the outermost constructor in the bindings code, so it can be definitely allocated before creating anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65065</commentid>
    <comment_count>3</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-12-22 01:35:40 -0800</bug_when>
    <thetext>I&apos;ll review in more detail tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65091</commentid>
    <comment_count>4</comment_count>
      <attachid>18057</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-22 16:41:42 -0800</bug_when>
    <thetext>Comment on attachment 18057
patch

Maciej r- this.  

&quot;I think this introduces a GC hazard. If getting the prototype during construction actually allocates it, then this could trigger a garbage collection while an object is half-constructed, which will crash. The current code is specifically designed to avoid this. You *could* get around this by always passing in the prototype as a constructor argument and making the generated code handle this. As long as it is allocated before you start constructing the wrapper, there is no GC hazard.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65962</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-01-01 16:40:18 -0800</bug_when>
    <thetext>I think that passing the prototype to the outermost constructor would be a neat solution.

To answer Maciej&apos;s implicit question, there *is* a GC hazard. If GC ran, the new object would be caught with its _prop and _proto data members uninitialized. When it tried to mark those members, the weasel would go pop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66100</commentid>
    <comment_count>6</comment_count>
      <attachid>18249</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-01-02 22:17:50 -0800</bug_when>
    <thetext>Created attachment 18249
take 2

This removes the GC hazard by constructing the prototype before the js object and passing it in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66101</commentid>
    <comment_count>7</comment_count>
      <attachid>18249</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-02 22:33:30 -0800</bug_when>
    <thetext>Comment on attachment 18249
take 2

I think the prototype parameter should be JSObject unless there&apos;s some reason it can be null in some cases. It can be more efficient to have the more-specific type, so I&apos;d prefer that all the prototype code use JSObject rather than JSValue.

+JSEventTargetNode::JSEventTargetNode(KJS::JSValue* prototype, Node* n)

You should not need an explicit KJS prefix here. Please leave them off except in header files or in places where they are necessary.

For JSHTMLAudioElementConstructor you passed the ExecState and set up the prototype inside the constructor, but for JSNamedNodesCollection, JSRGBColor, and Navigator you passed the prototype in instead. I&apos;m not sure why you did them differently, since in all cases it&apos;s the object prototype.

+JSObject* XSLTProcessorConstructorImp::construct(ExecState* exec, const List&amp; args)

Elsewhere we call these functions &quot;create&quot;, I think largely because we don&apos;t want to confuse them with constructors. Would you consider calling it create instead of construct?

Could the return type be JSXSLTProcessor* instead of JSObject*? In general types should always be as specific as possible unless there&apos;s a problem.

We really need to take these &quot;Imp&quot; suffixes off things! Can you add a lot more of them to do-webcore-rename?

+        DOMObject(JSValue* prototype)

This needs to be marked explicit because we don&apos;t want it to be invoked implicitly as a conversion (even though that seems unlikely).

+    private:
+        DOMObject();

What is this for? Does someone need to construct a DOMObject this way? Can you instead just omit this constructor?

If JSLocation&apos;s prototype is going to be null, then why change JSLocation so that you can pass the prototype in? You should have just left its constructor alone, I think.

r=me as is, because none of these problems are showstoppers

If you could take some of my requests/suggestions I&apos;d be happy to review again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66103</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-01-02 23:32:22 -0800</bug_when>
    <thetext>&gt; I think the prototype parameter should be JSObject unless there&apos;s some reason
&gt; it can be null in some cases. It can be more efficient to have the
&gt; more-specific type, so I&apos;d prefer that all the prototype code use JSObject
&gt; rather than JSValue.

I used JSValue because in one place (for the JSLocation object) we still use jsNull() as the prototype (thought this is a bug) and because the prototype ends up being converted to a JSValue when it is stored in _proto.  (Also, in a complete cop-out, Geoff told me too :) ).

&gt; +JSEventTargetNode::JSEventTargetNode(KJS::JSValue* prototype, Node* n)
&gt;
&gt; You should not need an explicit KJS prefix here. Please leave them off except
&gt; in header files or in places where they are necessary.

Fixed.

&gt; For JSHTMLAudioElementConstructor you passed the ExecState and set up the
&gt; prototype inside the constructor, but for JSNamedNodesCollection, JSRGBColor,
&gt; and Navigator you passed the prototype in instead. I&apos;m not sure why you did
&gt; them differently, since in all cases it&apos;s the object prototype.

I only changed the objects that represent real wrapped objects to take a prototype instead of an execState.   The objects excluded were Constructors, like JSHTMLAudioElementConstructor and prototypes themselves.  I tried to be consistent in this manner.

&gt; +JSObject* XSLTProcessorConstructorImp::construct(ExecState* exec, const List&amp;
&gt; args)
&gt;
&gt; Elsewhere we call these functions &quot;create&quot;, I think largely because we don&apos;t
&gt; want to confuse them with constructors. Would you consider calling it create
&gt; instead of construct?
&gt;
&gt; Could the return type be JSXSLTProcessor* instead of JSObject*? In general
&gt; types should always be as specific as possible unless there&apos;s a problem.

This is actually an implementation of the [[Construct]] internal property and is an implementation of the method defined in JSObject.  This cannot be changed.

&gt; We really need to take these &quot;Imp&quot; suffixes off things! Can you add a lot more
&gt; of them to do-webcore-rename?

Sure!

&gt; +        DOMObject(JSValue* prototype)
&gt;
&gt; This needs to be marked explicit because we don&apos;t want it to be invoked
&gt; implicitly as a conversion (even though that seems unlikely).

Fixed.

&gt; +    private:
&gt; +        DOMObject();
&gt;
&gt; What is this for? Does someone need to construct a DOMObject this way? Can you
&gt; instead just omit this constructor?

I added this to try and make it impossible to create a derived class that didn&apos;t pass a prototype.  Will this not work as intended?

&gt; If JSLocation&apos;s prototype is going to be null, then why change JSLocation so
&gt; that you can pass the prototype in? You should have just left its constructor
&gt; alone, I think.

I changed it to be uniform among the constructors and because I want to fix the bug shortly.

I don&apos;t think it is worth posting a new patch with just the 2 changes mentioned above, but I will wait for your response before going forward.  Thanks for the timely review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66135</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-01-03 09:49:53 -0800</bug_when>
    <thetext>&gt; I used JSValue because in one place (for the JSLocation object) we still use
&gt; jsNull() as the prototype (thought this is a bug) and because the prototype
&gt; ends up being converted to a JSValue when it is stored in _proto.  (Also, in a
&gt; complete cop-out, Geoff told me too :) ).

I agree with Darin: JSObject* is better.

As for JSLocation, we should just give it a real prototype. I think that will require a little security work, though. So, in the short term, you could just make JSLocation ignore the passed-in prototype and use jsNull() instead (with a comment).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66156</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-01-03 14:11:02 -0800</bug_when>
    <thetext>Landed in r29134.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18057</attachid>
            <date>2007-12-21 23:53:53 -0800</date>
            <delta_ts>2008-01-02 22:17:50 -0800</delta_ts>
            <desc>patch</desc>
            <filename>removeProto.diff</filename>
            <type>text/plain</type>
            <size>31778</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODk0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzMgQEAKKzIwMDctMTItMjEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzIHRo
ZSBwcm90b3R5cGUgb2YgV2ViQ29yZSBKUyBvYmplY3RzIHVwIHRoZSBjb25zdHJ1Y3RvciBjaGFp
bgorICAgICAgICByYXRoZXIgdGhhbiBleHBsaWNpdGx5IHNldHRpbmcgdXNpbmcgc2V0UHJvdG90
eXBlLiAgVGhpcyByZW1vdmVzIG1hbnkKKyAgICAgICAgcmVkdW5kYW50IHNldHRpbmdzIG9mIHRo
ZSBwcm90b3R5cGUgb24gY29uc3RydWN0aW9uLgorCisgICAgICAgIC0gSlMgb2JqZWN0cyB0aGF0
IGluaGVyaXQgZnJvbSBET01PYmplY3QsIHdoaWNoIGFsbCBiaW5kaW5ncyBvYmplY3RzCisgICAg
ICAgICAgKGV4Y2VwdCBXaW5kb3cpIGRvLCBub3cgY2FuJ3QgaW1wbGljaXRseSBoYXZlIGEganNO
dWxsIHByb3RvdHlwZSwgYnV0CisgICAgICAgICAgbXVzdCBleHBsaWNpdGx5IHBhc3MgaXQgdXAg
dGhlIGNvbnN0cnVjdGlvbiBjaGFpbi4KKyAgICAgICAgLSBBbGwgSlMgYmluZGluZ3MgY2xhc3Nl
cyBub3cgaGF2ZSB0d28gY29uc3RydWN0b3JzLiAgT25lIHRoYXQgaXMgcHVibGljIAorICAgICAg
ICAgIHRoYXQgdGFrZXMgYW4gRXhlY1N0YXRlLCB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBpbnN0
YW5jZSBvZiB0aGUgb2JqZWN0LCAKKyAgICAgICAgICBmcm9tIHdoaWNoIGl0IGNhbiBjcmVhdGUg
YSBwcm90b3R5cGUsIGFuZCBhbm90aGVyIG9uZSB0aGF0IGlzIHByb3RlY3RlZAorICAgICAgICAg
IGFuZCB0YWtlcyBhIEpTVmFsdWUsIHVzZWQgZm9yIHBhc3NpbmcgdGhlIHByb3RvdHlwZSB1cCBj
b25zdHJ1Y3RvciBjaGFpbi4KKyAgICAgICAgICAoTk9URTogdGhpcyBpcyBvbmx5IHRydWUgZm9y
IGJpbmRpbmcgb2JqZWN0cyB0aGVtc2VsdmVzLCBub3QgdGhlaXIgCisgICAgICAgICAgY29uc3Ry
dWN0b3Igb2JqZWN0cyBvciBwcm90b3R5cGVzKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlv
bkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NRXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OkpTRE9NRXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRO
b2RlOjpKU0V2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldE5vZGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxBdWRpb0VsZW1lbnRDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxBdWRpb0VsZW1lbnRDb25zdHJ1
Y3Rvcjo6SlNIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSFRNTElucHV0RWxlbWVudEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1M
SW5wdXRFbGVtZW50QmFzZTo6SlNIVE1MSW5wdXRFbGVtZW50QmFzZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3I6OkpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1
Y3Rvcik6CisgICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6SlNMb2NhdGlvbik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNMb2NhdGlvbi5oOgorICAgICAgICBDdXJyZW50bHksIG5vIEV4ZWNTdGF0ZSBp
cyBwYXNzZWQgdG8gdGhlIEpTTG9jYXRpb24gY29uc3RydWN0b3Igc28gdGhlIGRlZmF1bHQKKyAg
ICAgICAgb2JqZWN0IGNhbid0IGJlIHVzZWQgYXMgdGhlIHByb3RvdHlwZS4gIFRoaXMgcGF0Y2gg
ZG9lcyBub3QgY2hhbmdlIGFueSBmdW5jdGlvbmFsaXR5CisgICAgICAgIGJ5IGV4cGxpY2l0bHkg
cGFzc2luZyBqc051bGwoKSB0byB0aGUgcGFyZW50LCB3aGljaCB0aGUgb2xkIGNvZGUgZGlkIGlt
cGxpY2l0bHkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTmFtZWROb2Rlc0NvbGxlY3Rpb246OkpTTmFtZWRO
b2Rlc0NvbGxlY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxl
Y3Rpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAg
ICAgICAgKEtKUzo6SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wOjpKU1hNTEh0dHBSZXF1
ZXN0Q29uc3RydWN0b3JJbXApOgorICAgICAgICAoS0pTOjpKU1hNTEh0dHBSZXF1ZXN0OjpKU1hN
TEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Lmg6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKEtK
Uzo6SlNYU0xUUHJvY2Vzc29yOjpKU1hTTFRQcm9jZXNzb3IpOgorICAgICAgICAoS0pTOjpYU0xU
UHJvY2Vzc29yQ29uc3RydWN0b3JJbXA6OlhTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvckltcCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmg6CisgICAgICAgICogYmluZGlu
Z3MvanMva2pzX2JpbmRpbmcuaDoKKyAgICAgICAgKEtKUzo6RE9NT2JqZWN0OjpET01PYmplY3Qp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19jc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNSR0JDb2xvcjo6SlNSR0JDb2xvcik6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2Nzcy5o
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDbGlwYm9hcmQ6OkpTQ2xpcGJvYXJkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNf
ZXZlbnRzLmg6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2h0bWwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VDb25zdHJ1Y3RvckltcDo6SW1hZ2VDb25zdHJ1Y3RvckltcCk6CisgICAg
ICAgICogYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHA6CisgICAgICAgIChLSlM6Ok5hdmln
YXRvcjo6TmF2aWdhdG9yKToKKyAgICAgICAgKEtKUzo6UGx1Z2luQmFzZTo6UGx1Z2luQmFzZSk6
CisgICAgICAgICogYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL2tqc193aW5kb3cuY3BwOgorICAgICAgICAoS0pTOjpXaW5kb3c6OldpbmRvdyk6Cisg
ICAgICAgICogYmluZGluZ3MvanMva2pzX3dpbmRvdy5oOiBTd2l0Y2ggdGhlIG9yZGVyIG9mIGFy
Z3VtZW50cyBpbiB0aGUgY29uc3RydWN0b3IgdG8gbWF0Y2gKKyAgICAgICAgdGhlIHJlc3Qgb2Yg
dGhlIGJpbmRpbmdzLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtOgorCiAyMDA3LTEyLTIxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiwgQWRhbSBhbmQgU3RldmUuCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjg5NDcpCisrKyBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTEzOTQsNyArMTEzOTQsNiBAQAogCQkJCUIyMjI3N0FGMEQwMEJFREMwMDcxQjc4MiAvKiBK
U1NWR0xhenlFdmVudExpc3RlbmVyLmNwcCAqLywKIAkJCQlCMjIyNzdCMDBEMDBCRURDMDA3MUI3
ODIgLyogSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5oICovLAogCQkJCUIyMTEyN0E1MEIzMTg2Nzcw
MDA5QkU1MyAvKiBKU1NWR1BPRFR5cGVXcmFwcGVyLmggKi8sCi0JCQkJQjJEM0ZDODkwQzIyMTJD
QjAwQ0YzNjE4IC8qIEpTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAgKi8sCiAJCQkJOTNCNzBE
NDEwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTWE1MSHR0cFJlcXVlc3QuY3BwICovLAogCQkJCTkzQjcw
RDQyMDlFQjBDN0MwMDlEODQ2OCAvKiBKU1hNTEh0dHBSZXF1ZXN0LmggKi8sCiAJCQkJOTNCNzBE
NDUwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTWFNMVFByb2Nlc3Nvci5jcHAgKi8sCkBAIC0xMTQ2OSw2
ICsxMTQ2OCw5IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlCQzJFRDZCQjBDNkJEMkYwMDA5MjBC
RkYgLyogSlNBdHRyQ3VzdG9tLmNwcCAqLywKIAkJCQkxQTlFRjQ1NjBBMUI5NTdEMDAzMzJCNjMg
LyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwICovLAorCQkJCUJDNDZDMUVE
MEMwRERCREYwMDIwQ0ZDMyAvKiBKU0NTU1J1bGVDdXN0b20uY3BwICovLAorCQkJCUJDNTgyNUYy
MEMwQjg5MzgwMDUzRjFCNSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwICovLAor
CQkJCUJDMjBGQjdFMEMwRThFNkMwMEQxNDQ3RiAvKiBKU0NTU1ZhbHVlQ3VzdG9tLmNwcCAqLywK
IAkJCQk1MUVDOTI1QjBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxs
YmFjay5jcHAgKi8sCiAJCQkJNTFFQzkyNUMwQ0U5MERENDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FM
U3RhdGVtZW50Q2FsbGJhY2suaCAqLywKIAkJCQk1MUVDOTI1RDBDRTkwREQ0MDBGOTAzMDggLyog
SlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCAqLywKQEAgLTExNDc5LDkgKzEx
NDgxLDYgQEAKIAkJCQk1MUVDOTI2MjBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2suaCAqLywKIAkJCQkxQTM0MTdDODBDRUNGRjI1MDA0OUNCREUg
LyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwICovLAogCQkJCTFBMzQxN0M3MENFQ0ZGMjUwMDQ5
Q0JERSAvKiBKU0N1c3RvbVZvaWRDYWxsYmFjay5oICovLAotCQkJCUJDNDZDMUVEMEMwRERCREYw
MDIwQ0ZDMyAvKiBKU0NTU1J1bGVDdXN0b20uY3BwICovLAotCQkJCUJDNTgyNUYyMEMwQjg5Mzgw
MDUzRjFCNSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwICovLAotCQkJCUJDMjBG
QjdFMEMwRThFNkMwMEQxNDQ3RiAvKiBKU0NTU1ZhbHVlQ3VzdG9tLmNwcCAqLywKIAkJCQkxQUU4
MzA0MjBDQUIwRUQxMDAyMjM3QUUgLyogSlNEYXRhYmFzZUN1c3RvbS5jcHAgKi8sCiAJCQkJOTI5
MjY0NzYwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwICovLAogCQkJCUJD
RDlDMjVFMEMxN0FBNjcwMDVDOTBBMiAvKiBKU0RPTVdpbmRvd0N1c3RvbS5jcHAgKi8sCkBAIC0x
MTUxNSw2ICsxMTUxNCw3IEBACiAJCQkJQjJDOTZEOEMwQjNBRjJCNzAwNUU4MEVDIC8qIEpTU1ZH
UGF0aFNlZ0N1c3RvbS5jcHAgKi8sCiAJCQkJQjI5N0JDNkYwQjNDMTRDRjAwNDVBNTkwIC8qIEpT
U1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3BwICovLAogCQkJCTUxNkJCNzkxMENFOTFFNjgwMDUxMkY3
OSAvKiBKU1NWR1BvaW50TGlzdEN1c3RvbS5jcHAgKi8sCisJCQkJQjJEM0ZDODkwQzIyMTJDQjAw
Q0YzNjE4IC8qIEpTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAgKi8sCiAJCQkJNTE2QkI3OTIw
Q0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgKi8sCiAJCQkpOwogCQkJ
bmFtZSA9IEN1c3RvbTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25D
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4
Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjg5NDcpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NRXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw5ICs1Nyw5IEBAIGNvbnN0IENsYXNzSW5mbyBKU0RPTUV4Y2VwdGlvbkNvbnN0cnVjdG8KIEBl
bmQKICovCiAKLUpTRE9NRXhjZXB0aW9uQ29uc3RydWN0b3I6OkpTRE9NRXhjZXB0aW9uQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjKSAKK0pTRE9NRXhjZXB0aW9uQ29uc3RydWN0b3I6OkpTRE9N
RXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorICAgIDogS0pTOjpET01PYmpl
Y3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKIHsgCi0g
ICAgc2V0UHJvdG90eXBlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90
eXBlKCkpOwogfQogCiBib29sIEpTRE9NRXhjZXB0aW9uQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0Tm9kZS5jcHAJKHJldmlzaW9uIDI4OTQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDEzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEpTRXZlbnRUYXJnZXROb2Rl
OjpKU0V2ZW50VGFyZ2V0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG4pCi0gICAgOiBKU05v
ZGUoZXhlYywgbikKKyAgICA6IEpTTm9kZShKU0V2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZTo6c2Vs
ZihleGVjKSwgbikKK3sKK30KKworSlNFdmVudFRhcmdldE5vZGU6OkpTRXZlbnRUYXJnZXROb2Rl
KEtKUzo6SlNWYWx1ZSogcHJvdG90eXBlLCBOb2RlKiBuKQorICAgIDogSlNOb2RlKHByb3RvdHlw
ZSwgbikKIHsKLSAgICBzZXRQcm90b3R5cGUoSlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGU6OnNl
bGYoZXhlYykpOwogfQogCiBib29sIEpTRXZlbnRUYXJnZXROb2RlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2Rl
LmgJKHJldmlzaW9uIDI4OTQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgcHVibGljOgogICAgICAgICBKU0V2ZW50VGFyZ2V0Tm9kZShLSlM6OkV4ZWNTdGF0
ZSosIE5vZGUqKTsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgSlNFdmVudFRhcmdldE5vZGUo
S0pTOjpKU1ZhbHVlKiBwcm90b3R5cGUsIE5vZGUqKTsKKworICAgIHB1YmxpYzoKICAgICAgICAg
dm9pZCBzZXRMaXN0ZW5lcihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBLSlM6OkpTVmFsdWUqIGZ1bmMpIGNvbnN0OwogICAgICAgICBLSlM6OkpTVmFsdWUq
IGdldExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHB1c2hFdmVudEhhbmRsZXJTY29wZShLSlM6OkV4ZWNTdGF0ZSosIEtK
Uzo6U2NvcGVDaGFpbiYpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxB
dWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI4OTQ3KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogSlNIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3I6OkpTSFRN
TEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQqIGQpCi0g
ICAgOiBtX2RvYyhkKQorICAgIDogRE9NT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+b2JqZWN0UHJvdG90eXBlKCkpCisgICAgLCBtX2RvYyhkKQogewotICAgIHNldFByb3RvdHlw
ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsKICAgICBw
dXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRP
bmx5fERvbnREZWxldGV8RG9udEVudW0pOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTElucHV0RWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDI4OTQ3KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTgsMTAgKzU4LDEzIEBAIEpTVmFsdWUqIEpTSFRNTElucHV0RWxlbWVudEJhc2VGdW5j
dGlvblMKIGNvbnN0IENsYXNzSW5mbyBKU0hUTUxJbnB1dEVsZW1lbnRCYXNlOjppbmZvID0geyAi
SlNIVE1MSW5wdXRFbGVtZW50QmFzZSIsICZKU0hUTUxFbGVtZW50OjppbmZvLCAmSlNIVE1MSW5w
dXRFbGVtZW50QmFzZVRhYmxlIH07CiAKIEpTSFRNTElucHV0RWxlbWVudEJhc2U6OkpTSFRNTElu
cHV0RWxlbWVudEJhc2UoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1l
bnQ+IGUpCi0gICAgOiBKU0hUTUxFbGVtZW50KGV4ZWMsIGUuZ2V0KCkpCisgICAgOiBKU0hUTUxF
bGVtZW50KEpTSFRNTEVsZW1lbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIGUuZ2V0KCkpIC8vIFdl
IGRvbid0IHJlYWxseSBuZWVkIGEgcHJvdG90eXBlLCBqdXN0IHVzZSBvdXIgcGFyZW50IGNsYXNz
J3MgcHJvdG90eXBlCit7Cit9CisKK0pTSFRNTElucHV0RWxlbWVudEJhc2U6OkpTSFRNTElucHV0
RWxlbWVudEJhc2UoS0pTOjpKU1ZhbHVlKiBwcm90b3R5cGUsIFBhc3NSZWZQdHI8SFRNTElucHV0
RWxlbWVudD4gZSkKKyAgICA6IEpTSFRNTEVsZW1lbnQocHJvdG90eXBlLCBlLmdldCgpKQogewot
ICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGEgcHJvdG90eXBlLCBqdXN0IHVzZSBvdXIgcGFy
ZW50IGNsYXNzJ3MgcHJvdG90eXBlCi0gICAgc2V0UHJvdG90eXBlKEpTSFRNTEVsZW1lbnRQcm90
b3R5cGU6OnNlbGYoZXhlYykpOwogfQogCiBib29sIEpTSFRNTElucHV0RWxlbWVudEJhc2U6Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxJbnB1dEVsZW1lbnRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlLmgJKHJldmlzaW9uIDI4OTQ3KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBKU0hUTUxJbnB1dEVs
ZW1lbnRCYXNlIDogcHVibGljIEpTSFRNTEVsZW1lbnQgewogICAgIHB1YmxpYzoKICAgICAgICAg
SlNIVE1MSW5wdXRFbGVtZW50QmFzZShLSlM6OkV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8SFRNTElu
cHV0RWxlbWVudD4pOworICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgSlNIVE1MSW5wdXRF
bGVtZW50QmFzZShLSlM6OkpTVmFsdWUqIHByb3RvdHlwZSwgUGFzc1JlZlB0cjxIVE1MSW5wdXRF
bGVtZW50Pik7CisKKyAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OlBy
b3BlcnR5U2xvdCYpOwogICAgICAgICBLSlM6OkpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0
KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUqLCBpbnQgYXR0cik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlv
bkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyODk0NykKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2lu
ZyBuYW1lc3BhY2UgS0pTOwogCiBKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3I6OkpTSFRN
TE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIERvY3VtZW50KiBkKQot
ICAgIDogbV9kb2MoZCkKKyAgICA6IEtKUzo6RE9NT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpCisgICAgLCBtX2RvYyhkKQogewotICAgIHNldFBy
b3RvdHlwZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsK
ICAgICBwdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoNCks
IFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDI4OTQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAjaW5jbHVkZSAia2pz
X3dpbmRvdy5oIgorI2luY2x1ZGUgPGtqcy9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPGtq
cy9vYmplY3Rfb2JqZWN0Lmg+CiAKICNpbmNsdWRlICJKU0xvY2F0aW9uLmx1dC5oIgogCkBAIC01
Niw4ICs1OCwxNyBAQCBjb25zdCBDbGFzc0luZm8gSlNMb2NhdGlvbjo6aW5mbyA9IHsgIkxvCiBA
ZW5kCiAqLwogCisvLyBGSVhNRTogdGhpcyBzaG91bGQgdGFrZSBhbiBFeGVjU3RhdGUgc28gdGhh
dCB3ZSBjYW4gc2V0IHVwIGEgcHJvdG90eXBlIGxpa2UKKy8vIGFsbCB0aGUgb3RoZXIgSlMgY2xh
c3Nlcy4gCiBKU0xvY2F0aW9uOjpKU0xvY2F0aW9uKEZyYW1lKiBmcmFtZSkKLSAgICA6IG1fZnJh
bWUoZnJhbWUpCisgICAgOiBET01PYmplY3QoanNOdWxsKCkpCisgICAgLCBtX2ZyYW1lKGZyYW1l
KQoreworfQorCitKU0xvY2F0aW9uOjpKU0xvY2F0aW9uKEpTVmFsdWUqIHByb3RvdHlwZSwgRnJh
bWUqIGZyYW1lKQorICAgIDogRE9NT2JqZWN0KHByb3RvdHlwZSkKKyAgICAsIG1fZnJhbWUoZnJh
bWUpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbi5oCShyZXZpc2lvbiAyODk0
NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSlNMb2NhdGlv
biA6IHB1YmxpYyBLSlM6OkRPTU9iamVjdCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBLSlM6Oldp
bmRvdzsKICAgICBwdWJsaWM6CisgICAgICAgIEpTTG9jYXRpb24oRnJhbWUqKTsKKworICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgSlNMb2NhdGlvbihLSlM6OkpTVmFsdWUqIHByb3RveXBlLCBGcmFt
ZSopOworICAgIAorICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6UHJv
cGVydHlTbG90Jik7CiAgICAgICAgIEtKUzo6SlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQo
S0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OkpTVmFsdWUqLCBp
bnQgYXR0ciA9IEtKUzo6Tm9uZSk7CkBAIC00OSw4ICs1NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZvIGluZm87CiAKICAgICBwcml2
YXRlOgotICAgICAgICBKU0xvY2F0aW9uKEZyYW1lKik7Ci0KICAgICAgICAgRnJhbWUqIG1fZnJh
bWU7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xs
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rl
c0NvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAyODk0NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDE1
IEBAIGNvbnN0IENsYXNzSW5mbyBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjoKIC8vIGZvciBjb25z
dHJ1Y3RzIGxpa2UgZG9jdW1lbnQuZm9ybXMuPG5hbWU+WzFdLAogLy8gc28gaXQgc2hvdWxkbid0
IGJlIGEgcHJvYmxlbSB0aGF0IGl0J3Mgc3RvcmluZyBhbGwgdGhlIG5vZGVzICh3aXRoIHRoZSBz
YW1lIG5hbWUpLiAoRGF2aWQpCiBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpKU05hbWVkTm9kZXND
b2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBu
b2RlcykKLSAgICA6IG1fbm9kZXMobm9kZXMpCisgICAgOiBLSlM6OkRPTU9iamVjdChleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQorICAgICwgbV9ub2Rlcyhu
b2RlcykKK3sKK30KKworSlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6SlNOYW1lZE5vZGVzQ29sbGVj
dGlvbihLSlM6OkpTVmFsdWUqIHByb3RvdHlwZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+
JiBub2RlcykKKyAgICA6IEtKUzo6RE9NT2JqZWN0KHByb3RvdHlwZSkKKyAgICAsIG1fbm9kZXMo
bm9kZXMpCiB7Ci0gICAgc2V0UHJvdG90eXBlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
b2JqZWN0UHJvdG90eXBlKCkpOwogfQogCiBKU1ZhbHVlKiBKU05hbWVkTm9kZXNDb2xsZWN0aW9u
OjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3Qs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmgJ
KHJldmlzaW9uIDI4OTQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xs
ZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24oS0pTOjpF
eGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mKTsKIAorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbihLSlM6OkpTVmFsdWUqIHByb3RvdHlw
ZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+Jik7CisKKyAgICBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBL
SlM6OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHZpcnR1YWwg
Y29uc3QgS0pTOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9u
IDI4OTQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTksOSArNTksOSBAQCBLSlNfREVGSU5FX1BST1RPVFlQRShKU1hNTEh0
dHBSZXF1ZXN0UHJvCiBLSlNfSU1QTEVNRU5UX1BST1RPVFlQRSgiSlNYTUxIdHRwUmVxdWVzdCIs
IEpTWE1MSHR0cFJlcXVlc3RQcm90b3R5cGUpCiAKIEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rv
ckltcDo6SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSogZXhlYywgRG9j
dW1lbnQqIGQpCi0gICAgOiBkb2MoZCkKKyAgICA6IERPTU9iamVjdChleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQorICAgICwgZG9jKGQpCiB7Ci0gICAgc2V0
UHJvdG90eXBlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkp
OwogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1hNTEh0
dHBSZXF1ZXN0UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBOb25lKTsKIH0KIApAQCAtMTk2LDkgKzE5
NiwxNiBAQCB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6Om1hcmsoKQogCiAKIEpTWE1MSHR0cFJlcXVl
c3Q6OkpTWE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZCkKLSAgOiBt
X2ltcGwobmV3IFhNTEh0dHBSZXF1ZXN0KGQpKQorICAgIDogRE9NT2JqZWN0KEpTWE1MSHR0cFJl
cXVlc3RQcm90b3R5cGU6OnNlbGYoZXhlYykpCisgICAgLCBtX2ltcGwobmV3IFhNTEh0dHBSZXF1
ZXN0KGQpKQoreworICAgIFNjcmlwdEludGVycHJldGVyOjpwdXRET01PYmplY3QobV9pbXBsLmdl
dCgpLCB0aGlzKTsKK30KKworSlNYTUxIdHRwUmVxdWVzdDo6SlNYTUxIdHRwUmVxdWVzdChKU1Zh
bHVlKiBwcm90b3R5cGUsIERvY3VtZW50KiBkKQorICAgIDogRE9NT2JqZWN0KHByb3RvdHlwZSkK
KyAgICAsIG1faW1wbChuZXcgWE1MSHR0cFJlcXVlc3QoZCkpCiB7Ci0gICAgc2V0UHJvdG90eXBl
KEpTWE1MSHR0cFJlcXVlc3RQcm90b3R5cGU6OnNlbGYoZXhlYykpOwogICAgIFNjcmlwdEludGVy
cHJldGVyOjpwdXRET01PYmplY3QobV9pbXBsLmdldCgpLCB0aGlzKTsKIH0KIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDI4OTQ3KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDggKzM2LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogY2xhc3MgSlNYTUxIdHRwUmVxdWVzdENvbnN0
cnVjdG9ySW1wIDogcHVibGljIERPTU9iamVjdCB7CiBwdWJsaWM6CiAgICAgSlNYTUxIdHRwUmVx
dWVzdENvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSosIFdlYkNvcmU6OkRvY3VtZW50Kik7CisKICAg
ICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
SlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBjb25zdCBMaXN0Jik7CisKIHByaXZhdGU6
CiAgICAgUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiBkb2M7CiB9OwpAQCAtNDUsNyArNDcsMTMg
QEAgcHJpdmF0ZToKIGNsYXNzIEpTWE1MSHR0cFJlcXVlc3QgOiBwdWJsaWMgRE9NT2JqZWN0IHsK
IHB1YmxpYzoKICAgICBKU1hNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSosIFdlYkNvcmU6OkRvY3Vt
ZW50Kik7CisKK3Byb3RlY3RlZDoKKyAgICBKU1hNTEh0dHBSZXF1ZXN0KEpTVmFsdWUqIHByb3Rv
dHlwZSwgV2ViQ29yZTo6RG9jdW1lbnQqKTsKKworcHVibGljOgogICAgIH5KU1hNTEh0dHBSZXF1
ZXN0KCk7CisKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAg
ZW51bSB7IE9ubG9hZCwgT25yZWFkeXN0YXRlY2hhbmdlLCBSZWFkeVN0YXRlLCBSZXNwb25zZVRl
eHQsIFJlc3BvbnNlWE1MLCBTdGF0dXMsCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNM
VFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQ
cm9jZXNzb3IuY3BwCShyZXZpc2lvbiAyODk0NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNY
U0xUUHJvY2Vzc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsMTYgQEAgY29uc3Qg
Q2xhc3NJbmZvIEpTWFNMVFByb2Nlc3Nvcjo6aW5mbyA9IAogS0pTX0RFRklORV9QUk9UT1RZUEUo
WFNMVFByb2Nlc3NvclByb3RvdHlwZSkKIEtKU19JTVBMRU1FTlRfUFJPVE9UWVBFKCJYU0xUUHJv
Y2Vzc29yIiwgWFNMVFByb2Nlc3NvclByb3RvdHlwZSkKIAotSlNYU0xUUHJvY2Vzc29yOjpKU1hT
TFRQcm9jZXNzb3IoRXhlY1N0YXRlICpleGVjKSA6IG1faW1wbChuZXcgWFNMVFByb2Nlc3Nvcigp
KQorSlNYU0xUUHJvY2Vzc29yOjpKU1hTTFRQcm9jZXNzb3IoRXhlY1N0YXRlKiBleGVjKQorICAg
IDogRE9NT2JqZWN0KFhTTFRQcm9jZXNzb3JQcm90b3R5cGU6OnNlbGYoZXhlYykpCisgICAgLCBt
X2ltcGwobmV3IFhTTFRQcm9jZXNzb3IoKSkKK3sKK30KKworSlNYU0xUUHJvY2Vzc29yOjpKU1hT
TFRQcm9jZXNzb3IoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgIDogRE9NT2JqZWN0KHByb3RvdHlw
ZSkKKyAgICAsIG1faW1wbChuZXcgWFNMVFByb2Nlc3NvcigpKQogewotICAgIHNldFByb3RvdHlw
ZShYU0xUUHJvY2Vzc29yUHJvdG90eXBlOjpzZWxmKGV4ZWMpKTsKIH0KIAogSlNYU0xUUHJvY2Vz
c29yOjp+SlNYU0xUUHJvY2Vzc29yKCkKQEAgLTE4NSw4ICsxOTIsOCBAQCBKU1ZhbHVlKiBKU1hT
TFRQcm9jZXNzb3JQcm90b3R5cGVGdW5jdGlvCiB9CiAKIFhTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rv
ckltcDo6WFNMVFByb2Nlc3NvckNvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSAqZXhlYykKKyAgICA6
IERPTU9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgp
KQogewotICAgIHNldFByb3RvdHlwZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVj
dFByb3RvdHlwZSgpKTsKICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3Rv
dHlwZSwgWFNMVFByb2Nlc3NvclByb3RvdHlwZTo6c2VsZihleGVjKSwgTm9uZSk7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3IuaAkocmV2aXNpb24gMjg5NDcpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0MiwxMiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogY2xhc3MgSlNYU0xUUHJvY2Vzc29y
IDogcHVibGljIERPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgSlNYU0xUUHJvY2Vzc29yKEV4ZWNT
dGF0ZSAqZXhlYyk7CisgICAgSlNYU0xUUHJvY2Vzc29yKEV4ZWNTdGF0ZSopOworCitwcm90ZWN0
ZWQ6CisgICAgSlNYU0xUUHJvY2Vzc29yKEpTVmFsdWUqIHByb3RvdHlwZSk7CisKK3B1YmxpYzoK
ICAgICB+SlNYU0xUUHJvY2Vzc29yKCk7CiAgICAgCiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkBAIC01NSw3ICs2MCw4IEBA
IHByaXZhdGU6CiAKIGNsYXNzIFhTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvckltcCA6IHB1YmxpYyBE
T01PYmplY3QgewogcHVibGljOgotICAgIFhTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvckltcChFeGVj
U3RhdGUgKik7CisgICAgWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSopOwor
CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAgICAgdmlydHVhbCBKU09iamVjdCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgTGlzdCAmYXJncykgeyByZXR1cm4gbmV3IEpTWFNMVFByb2Nlc3NvcihleGVjKTsgfQog
fTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmgJKHJldmlzaW9uIDI4OTQ3KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwx
NSArNTUsMjAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICovCiAgICAgY2xhc3MgRE9NT2JqZWN0
IDogcHVibGljIEpTT2JqZWN0IHsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIERPTU9iamVjdCgp
CisgICAgICAgIERPTU9iamVjdChKU1ZhbHVlKiBwcm90b3R5cGUpCisgICAgICAgICAgICA6IEpT
T2JqZWN0KHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAgLy8gRE9NT2JqZWN0IGRl
c3RydWN0aW9uIGlzIG5vdCB0aHJlYWQtc2FmZSBiZWNhdXNlIERPTU9iamVjdHMgd3JhcCAKICAg
ICAgICAgICAgIC8vIHVuc2FmZSBXZWJDb3JlIERPTSBkYXRhIHN0cnVjdHVyZXMuCiAgICAgICAg
ICAgICBDb2xsZWN0b3I6OmNvbGxlY3RPbk1haW5UaHJlYWRPbmx5KHRoaXMpOwogICAgICAgICB9
CisKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHZpcnR1YWwgfkRPTU9iamVjdCgpOwogI2VuZGlm
CisKKyAgICBwcml2YXRlOgorICAgICAgICBET01PYmplY3QoKTsKICAgICB9OwogCiAgICAgY2xh
c3MgU2NyaXB0SW50ZXJwcmV0ZXIgOiBwdWJsaWMgSW50ZXJwcmV0ZXIgewpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ranNfY3NzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL2tqc19jc3MuY3BwCShyZXZpc2lvbiAyODk0NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
a2pzX2Nzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEwICs0NCwxNiBAQCBjb25zdCBDbGFz
c0luZm8gSlNSR0JDb2xvcjo6aW5mbyA9IHsgIlJHCiBAZW5kCiAqLwogCi1KU1JHQkNvbG9yOjpK
U1JHQkNvbG9yKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY29sb3IpIAotICAgIDogbV9jb2xv
cihjb2xvcikgCitKU1JHQkNvbG9yOjpKU1JHQkNvbG9yKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgY29sb3IpCisgICAgOiBET01PYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5v
YmplY3RQcm90b3R5cGUoKSkKKyAgICAsIG1fY29sb3IoY29sb3IpCiB7IAotICAgIHNldFByb3Rv
dHlwZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsKK30K
KworSlNSR0JDb2xvcjo6SlNSR0JDb2xvcihKU1ZhbHVlKiBwcm90b3R5cGUsIHVuc2lnbmVkIGNv
bG9yKQorICAgIDogRE9NT2JqZWN0KHByb3RvdHlwZSkKKyAgICAsIG1fY29sb3IoY29sb3IpCit7
CiB9CiAKIEpTUkdCQ29sb3I6On5KU1JHQkNvbG9yKCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMva2pzX2Nzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2Nzcy5o
CShyZXZpc2lvbiAyODk0NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2Nzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgSlNSR0JDb2xvciA6IHB1YmxpYyBLSlM6OkRPTU9iamVjdCB7CiAgICAgcHVibGljOgogICAg
ICAgICBKU1JHQkNvbG9yKEtKUzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgY29sb3IpOworCisgICAg
cHJvdGVjdGVkOgorICAgICAgICBKU1JHQkNvbG9yKEtKUzo6SlNWYWx1ZSogcHJvdG90eXBlLCB1
bnNpZ25lZCBjb2xvcik7CisgIAorICAgIHB1YmxpYzoKICAgICAgICAgfkpTUkdCQ29sb3IoKTsK
IAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEtKUzo6RXhlY1N0YXRl
KiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcAkocmV2aXNpb24gMjg5NDcpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL2tqc19ldmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsOSArMzY3LDE1
IEBAIEtKU19ERUZJTkVfUFJPVE9UWVBFKEpTQ2xpcGJvYXJkUHJvdG90eXAKIEtKU19JTVBMRU1F
TlRfUFJPVE9UWVBFKCJDbGlwYm9hcmQiLCBKU0NsaXBib2FyZFByb3RvdHlwZSkKIAogSlNDbGlw
Ym9hcmQ6OkpTQ2xpcGJvYXJkKEV4ZWNTdGF0ZSogZXhlYywgQ2xpcGJvYXJkKiBjbGlwYm9hcmQp
Ci0gICAgOiBtX2ltcGwoY2xpcGJvYXJkKQorICAgIDogRE9NT2JqZWN0KEpTQ2xpcGJvYXJkUHJv
dG90eXBlOjpzZWxmKGV4ZWMpKQorICAgICwgbV9pbXBsKGNsaXBib2FyZCkKK3sKK30KKworSlND
bGlwYm9hcmQ6OkpTQ2xpcGJvYXJkKEpTVmFsdWUqIHByb3RvdHlwZSwgQ2xpcGJvYXJkKiBjbGlw
Ym9hcmQpCisgICAgOiBET01PYmplY3QocHJvdG90eXBlKQorICAgICwgbV9pbXBsKGNsaXBib2Fy
ZCkKIHsKLSAgICBzZXRQcm90b3R5cGUoSlNDbGlwYm9hcmRQcm90b3R5cGU6OnNlbGYoZXhlYykp
OwogfQogCiBKU0NsaXBib2FyZDo6fkpTQ2xpcGJvYXJkKCkKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMva2pzX2V2ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pz
X2V2ZW50cy5oCShyZXZpc2lvbiAyODk0NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBKU0NsaXBib2FyZCA6IHB1YmxpYyBLSlM6OkRPTU9iamVjdCB7CiAg
ICAgcHVibGljOgogICAgICAgICBKU0NsaXBib2FyZChLSlM6OkV4ZWNTdGF0ZSosIENsaXBib2Fy
ZCopOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBKU0NsaXBib2FyZChLSlM6OkpTVmFsdWUq
IHByb3RvdHlwZSwgQ2xpcGJvYXJkKik7CisKKyAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwg
fkpTQ2xpcGJvYXJkKCk7CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xv
dChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6UHJvcGVydHlT
bG90Jik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmNwcAkocmV2aXNpb24gMjg5NDcpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
OSArMzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBJ
bWFnZUNvbnN0cnVjdG9ySW1wOjpJbWFnZUNvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSogZXhlYywg
RG9jdW1lbnQqIGRvYykKLSAgICA6IG1fZG9jKGRvYykKKyAgICA6IERPTU9iamVjdChleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQorICAgICwgbV9kb2MoZG9j
KQogewotICAgIHNldFByb3RvdHlwZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVj
dFByb3RvdHlwZSgpKTsKIH0KIAogSlNPYmplY3QqIEltYWdlQ29uc3RydWN0b3JJbXA6OmNvbnN0
cnVjdChFeGVjU3RhdGUqICBleGVjLCBjb25zdCBMaXN0JiBsaXN0KQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAyODk0NykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSwxMCArMTc1
LDE2IEBAIGNvbnN0IENsYXNzSW5mbyBOYXZpZ2F0b3I6OmluZm8gPSB7ICJOYXYKIEBlbmQKICov
CiAKLU5hdmlnYXRvcjo6TmF2aWdhdG9yKEV4ZWNTdGF0ZSAqZXhlYywgRnJhbWUgKmYpIAotICAg
IDogbV9mcmFtZShmKQorTmF2aWdhdG9yOjpOYXZpZ2F0b3IoRXhlY1N0YXRlKiBleGVjLCBGcmFt
ZSogZnJhbWUpCisgICAgOiBET01PYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5v
YmplY3RQcm90b3R5cGUoKSkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK05hdmlnYXRv
cjo6TmF2aWdhdG9yKEpTVmFsdWUqIHByb3RvdHlwZSwgRnJhbWUqIGZyYW1lKQorICAgIDogRE9N
T2JqZWN0KHByb3RvdHlwZSkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCiB7Ci0gICAgc2V0UHJvdG90
eXBlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOwogfQog
CiBib29sIE5hdmlnYXRvcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0yNDks
MTAgKzI1NSw5IEBAIHZvaWQgUGx1Z2luQmFzZTo6Y2FjaGVQbHVnaW5EYXRhSWZOZWNlc3MKICAg
ICB9CiB9CiAKLVBsdWdpbkJhc2U6OlBsdWdpbkJhc2UoRXhlY1N0YXRlICpleGVjKQorUGx1Z2lu
QmFzZTo6UGx1Z2luQmFzZShFeGVjU3RhdGUqIGV4ZWMpCisgICAgOiBET01PYmplY3QoZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKIHsKLSAgICBzZXRQcm90
b3R5cGUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7Ci0K
ICAgICBjYWNoZVBsdWdpbkRhdGFJZk5lY2Vzc2FyeSgpOwogICAgIG1fcGx1Z0luQ2FjaGVSZWZD
b3VudCsrOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmgJKHJldmlzaW9u
IDI4OTQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDEyIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIE5hdmln
YXRvciA6IHB1YmxpYyBET01PYmplY3QgewogICBwdWJsaWM6Ci0gICAgTmF2aWdhdG9yKEV4ZWNT
dGF0ZSAqZXhlYywgV2ViQ29yZTo6RnJhbWUgKnApOworICAgIE5hdmlnYXRvcihFeGVjU3RhdGUq
LCBXZWJDb3JlOjpGcmFtZSopOworCisgIHByb3RlY3RlZDoKKyAgICBOYXZpZ2F0b3IoSlNWYWx1
ZSogcHJvdG90eXBlLCBXZWJDb3JlOjpGcmFtZSopOworCisgIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwg
UHJvcGVydHlTbG90Jik7CiAgICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL2tqc193aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pz
X3dpbmRvdy5jcHAJKHJldmlzaW9uIDI4OTQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
d2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDcgKzIwMiw3IEBAIGNvbnN0IENsYXNz
SW5mbyBXaW5kb3c6OmluZm8gPSB7ICJXaW5kb3cKIEBlbmQKICovCiAKLVdpbmRvdzo6V2luZG93
KERPTVdpbmRvdyogd2luZG93LCBKU1ZhbHVlKiBwcm90b3R5cGUpCitXaW5kb3c6OldpbmRvdyhK
U1ZhbHVlKiBwcm90b3R5cGUsIERPTVdpbmRvdyogd2luZG93KQogICAgIDogSlNHbG9iYWxPYmpl
Y3QocHJvdG90eXBlKQogICAgICwgbV9pbXBsKHdpbmRvdykKICAgICAsIGQobmV3IFdpbmRvd1By
aXZhdGUpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuaAkocmV2aXNpb24gMjg5NDcpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NyArMzQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSlNFdmVudExpc3RlbmVy
OwogICAgIGNsYXNzIEpTTG9jYXRpb247CiAgICAgY2xhc3MgSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXI7Ci0gICAgY2xhc3MgTG9jYXRpb247CiAgICAgY2xhc3MgUGF1c2VkVGltZW91dHM7CiAg
ICAgY2xhc3MgU2NoZWR1bGVkQWN0aW9uOwogfQpAQCAtNDksMTEgKzQ4LDEwIEBAIG5hbWVzcGFj
ZSBLSlMgewogICAvLyBUaGlzIGlzIHRoZSBvbmx5IFdlYkNvcmUgSlMgYmluZGluZyB3aGljaCBk
b2VzIG5vdCBpbmhlcml0IGZyb20gRE9NT2JqZWN0CiAgIGNsYXNzIFdpbmRvdyA6IHB1YmxpYyBK
U0dsb2JhbE9iamVjdCB7CiAgICAgdHlwZWRlZiBKU0dsb2JhbE9iamVjdCBCYXNlOwotICAgIAot
ICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpKU0xvY2F0aW9uOworCiAgICAgZnJpZW5kIGNsYXNz
IFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjsKICAgcHJvdGVjdGVkOgotICAgIFdpbmRvdyhXZWJD
b3JlOjpET01XaW5kb3cqLCBKU1ZhbHVlKiBwcm90b3R5cGUpOworICAgIFdpbmRvdyhKU1ZhbHVl
KiBwcm90b3R5cGUsIFdlYkNvcmU6OkRPTVdpbmRvdyopOwogCiAgIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5XaW5kb3coKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkocmV2aXNpb24gMjg5NDcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsMTMgKzMxNSwxNCBAQCBz
dWIgR2VuZXJhdGVIZWFkZXIKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiRG9Ob3RDYWNoZSJ9KSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNs
YXNzTmFtZSgkcGFzc1R5cGUpO1xuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKElzU1ZH
VHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKEtKUzo6RXhlY1N0YXRlKiwg
JHBhc3NUeXBlLCBTVkdFbGVtZW50KiBjb250ZXh0KTtcbiIpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKEtKUzo6RXhl
Y1N0YXRlKiwgJHBhc3NUeXBlKTtcbiIpOwotICAgICAgICB9CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShLSlM6OkV4ZWNTdGF0ZSosICRwYXNzVHlwZSIgLiAo
SXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05hbWUpID8gIiwgU1ZH
RWxlbWVudCogY29udGV4dCIgOiAiIikgLiIpO1xuIik7CiAgICAgfQogCisgICAgIyBDb25zdHJ1
Y3RvciB1c2UgYnkgZGVyaXZlZCBjbGFzc2VzCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInBy
b3RlY3RlZDpcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShL
SlM6OkpTVmFsdWUqIHByb3RvdHlwZSwgJHBhc3NUeXBlIiAuIChJc1NWR1R5cGVOZWVkaW5nQ29u
dGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkgPyAiLCBTVkdFbGVtZW50KiBjb250ZXh0IiA6
ICIiKSAuIik7XG4iKTsKKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwdWJsaWM6XG4iKTsK
ICAgICAjIERlc3RydWN0b3IKICAgICBpZiAoISRoYXNQYXJlbnQgb3IgJGludGVyZmFjZU5hbWUg
ZXEgIkRvY3VtZW50IikgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1
YWwgfiRjbGFzc05hbWUoKTtcbiIpOwpAQCAtNzcxLDQyICs3NzIsMzkgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICBteSAkcG9kVHlwZSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IlBPRFR5cGUifTsKICAgICBteSAkcGFzc1R5cGUgPSAkcG9kVHlwZSA/ICJKU1NW
R1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPioiIDogIiRpbXBsQ2xhc3NOYW1lKiI7CiAKKyAgICBt
eSAkbmVlZHNTVkdDb250ZXh0ID0gSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGlt
cGxDbGFzc05hbWUpOworICAgIG15ICRwYXJlbnROZWVkc1NWR0NvbnRleHQgPSAoJG5lZWRzU1ZH
Q29udGV4dCBhbmQgJHBhcmVudENsYXNzTmFtZSA9fiAvU1ZHLyk7CisKICAgICAjIENvbnN0cnVj
dG9yCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2FjaGUi
fSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFt
ZSgkcGFzc1R5cGUgaW1wbClcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6
ICRwYXJlbnRDbGFzc05hbWUoaW1wbCwgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpzZWxmKCkpXG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKCR7
Y2xhc3NOYW1lfVByb3RvdHlwZTo6c2VsZigpLCBpbXBsKVxuIik7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgbXkgJG5lZWRzU1ZHQ29udGV4dCA9IElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0UGFyYW1l
dGVyKCRpbXBsQ2xhc3NOYW1lKTsKLSAgICAgICAgaWYgKCRuZWVkc1NWR0NvbnRleHQpIHsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKEV4
ZWNTdGF0ZSogZXhlYywgJHBhc3NUeXBlIGltcGwsIFNWR0VsZW1lbnQqIGNvbnRleHQpXG4iKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFz
c05hbWV9OjokY2xhc3NOYW1lKEV4ZWNTdGF0ZSogZXhlYywgJHBhc3NUeXBlIGltcGwpXG4iKTsK
LSAgICAgICAgfQotCisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9Ojok
Y2xhc3NOYW1lKEV4ZWNTdGF0ZSogZXhlYywgJHBhc3NUeXBlIGltcGwiIC4gKCRuZWVkc1NWR0Nv
bnRleHQgPyAiLCBTVkdFbGVtZW50KiBjb250ZXh0IiA6ICIiKSAuICIpXG4iKTsKICAgICAgICAg
aWYgKCRoYXNQYXJlbnQpIHsKLSAgICAgICAgICAgIGlmICgkbmVlZHNTVkdDb250ZXh0IGFuZCAk
cGFyZW50Q2xhc3NOYW1lID1+IC9TVkcvKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKGV4ZWMsIGltcGwsIGNvbnRleHQpXG4iKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKGV4ZWMsIGltcGwpXG4iKTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZSgk
e2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoZXhlYyksIGltcGwiIC4gKCRwYXJlbnROZWVkc1NW
R0NvbnRleHQgPyAiLCBjb250ZXh0IiA6ICIiKSAuICIpXG4iKTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmICgkbmVlZHNTVkdDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgOiBtX2NvbnRleHQoY29udGV4dClcbiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9pbXBsKGltcGwpXG4iKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
OiBtX2ltcGwoaW1wbClcbiIpOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKCR7Y2xhc3NOYW1l
fVByb3RvdHlwZTo6c2VsZihleGVjKSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgLCBtX2NvbnRleHQoY29udGV4dClcbiIpIGlmICRuZWVkc1NWR0NvbnRleHQ7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAsIG1faW1wbChpbXBsKVxuIik7CiAg
ICAgICAgIH0KICAgICB9Ci0KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKIAotICAgIGlmICghJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDYWNoZSJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHNldFByb3RvdHlwZSgke2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoZXhlYykpO1xu
Iik7CisgICAgIyBDb25zdHJ1Y3RvciB1c2UgYnkgZGVyaXZlZCBjbGFzc2VzCisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoSlNWYWx1ZSogcHJvdG90eXBl
LCAkcGFzc1R5cGUgaW1wbCIgLiAoJG5lZWRzU1ZHQ29udGV4dCA/ICIsIFNWR0VsZW1lbnQqIGNv
bnRleHQiIDogIiIpIC4gIilcbiIpOworICAgIGlmICgkaGFzUGFyZW50KSB7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShwcm90b3R5cGUsIGltcGwi
IC4gKCRwYXJlbnROZWVkc1NWR0NvbnRleHQgPyAiLCBjb250ZXh0IiA6ICIiKSAuICIpXG4iKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRD
bGFzc05hbWUocHJvdG90eXBlKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICwgbV9jb250ZXh0KGNvbnRleHQpXG4iKSBpZiAkbmVlZHNTVkdDb250ZXh0OworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAsIG1faW1wbChpbXBsKVxuIik7ICAKICAgICB9Ci0KKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKIAorCiAgICAgIyBEZXN0cnVjdG9yCiAgICAgaWYgKCEkaGFzUGFyZW50KSB7CiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9Ojp+JGNsYXNzTmFtZSgpXG4iKTsK
QEAgLTE3NDAsOCArMTczOCw4IEBAIG15ICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwogY2xhc3Mg
JHtjbGFzc05hbWV9Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKIHB1YmxpYzoKICAg
ICAke2NsYXNzTmFtZX1Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgICAgIDogRE9N
T2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpCiAg
ICAgewotICAgICAgICBzZXRQcm90b3R5cGUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5v
YmplY3RQcm90b3R5cGUoKSk7CiAgICAgICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkucHJvdG90eXBlLCAke3Byb3RvQ2xhc3NOYW1lfTo6c2VsZihleGVjKSwgTm9uZSk7CiAgICAg
fQogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwo=
</data>
<flag name="review"
          id="7834"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18249</attachid>
            <date>2008-01-02 22:17:50 -0800</date>
            <delta_ts>2008-01-02 22:33:30 -0800</delta_ts>
            <desc>take 2</desc>
            <filename>removeSetProto2.diff</filename>
            <type>text/plain</type>
            <size>58392</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTEwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTQgQEAKKzIwMDgtMDEtMDIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzIHRo
ZSBwcm90b3R5cGUgb2YgV2ViQ29yZSBKUyBvYmplY3RzIHVwIHRoZSBjb25zdHJ1Y3RvciBjaGFp
bgorICAgICAgICByYXRoZXIgdGhhbiBleHBsaWNpdGx5IHNldHRpbmcgdXNpbmcgc2V0UHJvdG90
eXBlLiAgVGhpcyByZW1vdmVzIG1hbnkKKyAgICAgICAgcmVkdW5kYW50IHNldHRpbmdzIG9mIHRo
ZSBwcm90b3R5cGUgb24gY29uc3RydWN0aW9uLiAgVG8gYXZvaWQgYSBDRyAKKyAgICAgICAgaGF6
YXJkLCB0aGUgcHJvdG90eXBlIG11c3QgYmUgY29uc3RydWN0ZWQgYmVmb3JlIGJlZm9yZSBjYWxs
aW5nIHRoZQorICAgICAgICBjb25zdHJ1Y3RvciBvZiB0aGUgSlMgb2JqZWN0LgorCisgICAgICAg
IC0gSlMgb2JqZWN0cyB0aGF0IGluaGVyaXQgZnJvbSBET01PYmplY3QsIHdoaWNoIGFsbCBiaW5k
aW5ncyBvYmplY3RzCisgICAgICAgICAgKGV4Y2VwdCBXaW5kb3cpIGRvLCBub3cgY2FuJ3QgaW1w
bGljaXRseSBoYXZlIGEganNOdWxsIHByb3RvdHlwZSwgYnV0CisgICAgICAgICAgbXVzdCBleHBs
aWNpdGx5IHBhc3MgaXQgdXAgdGhlIGNvbnN0cnVjdGlvbiBjaGFpbi4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVu
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFy
Z2V0Tm9kZTo6SlNFdmVudFRhcmdldE5vZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZl
bnRUYXJnZXROb2RlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlv
bi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQWxsQ29sbGVjdGlvbjo6SlNIVE1MQWxsQ29s
bGVjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQXVkaW9FbGVtZW50Q29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0
b3I6OkpTSFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldE5hbWVk
SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUpTSFRNTFdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEZvcm1FbGVtZW50OjpuYW1lR2V0
dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTElucHV0RWxlbWVudEJhc2U6OkpTSFRNTElucHV0RWxl
bWVudEJhc2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEJhc2Uu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yOjpK
U0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
TG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6SlNMb2NhdGlvbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOYW1l
ZE5vZGVzQ29sbGVjdGlvbjo6SlNOYW1lZE5vZGVzQ29sbGVjdGlvbik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTTm9kZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVKU1NWR1dyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUGF0
aFNlZ0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChL
SlM6OkpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcDo6SlNYTUxIdHRwUmVxdWVzdENvbnN0
cnVjdG9ySW1wKToKKyAgICAgICAgKEtKUzo6SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1w
Ojpjb25zdHJ1Y3QpOgorICAgICAgICAoS0pTOjpKU1hNTEh0dHBSZXF1ZXN0OjpKU1hNTEh0dHBS
ZXF1ZXN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Lmg6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKEtKUzo6SlNY
U0xUUHJvY2Vzc29yOjpKU1hTTFRQcm9jZXNzb3IpOgorICAgICAgICAoS0pTOjpYU0xUUHJvY2Vz
c29yQ29uc3RydWN0b3JJbXA6OlhTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvckltcCk6CisgICAgICAg
IChLSlM6OlhTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvckltcDo6aW1wbGVtZW50c0NvbnN0cnVjdCk6
CisgICAgICAgIChLSlM6OlhTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvckltcDo6Y29uc3RydWN0KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3IuaDoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9ranNfYmluZGluZy5oOgorICAgICAgICAoS0pTOjpET01PYmplY3Q6OkRPTU9iamVj
dCk6CisgICAgICAgIChLSlM6OmNhY2hlRE9NT2JqZWN0KToKKyAgICAgICAgKEtKUzo6Y2FjaGVT
VkdET01PYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19jc3MuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNSR0JDb2xvcjo6SlNSR0JDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRKU1JHQkNvbG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfY3NzLmg6CisgICAgICAg
ICogYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBi
b2FyZDo6SlNDbGlwYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICog
YmluZGluZ3MvanMva2pzX2V2ZW50cy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19odG1s
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQ29uc3RydWN0b3JJbXA6OkltYWdlQ29uc3Ry
dWN0b3JJbXApOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwOgorICAg
ICAgICAoS0pTOjpOYXZpZ2F0b3I6Ok5hdmlnYXRvcik6CisgICAgICAgIChLSlM6OlBsdWdpbkJh
c2U6OlBsdWdpbkJhc2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcDoKKyAgICAgICAgKEtKUzo6V2lu
ZG93OjpXaW5kb3cpOgorICAgICAgICAoS0pTOjpXaW5kb3c6OmxvY2F0aW9uKToKKyAgICAgICAg
KEtKUzo6V2luZG93OjpnZXRWYWx1ZVByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9r
anNfd2luZG93Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG06CisKIDIwMDgtMDEtMDIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE9saXZlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyOTA5MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU0OCw3ICsxMTU0
OCw2IEBACiAJCQkJQjIyMjc3QUYwRDAwQkVEQzAwNzFCNzgyIC8qIEpTU1ZHTGF6eUV2ZW50TGlz
dGVuZXIuY3BwICovLAogCQkJCUIyMjI3N0IwMEQwMEJFREMwMDcxQjc4MiAvKiBKU1NWR0xhenlF
dmVudExpc3RlbmVyLmggKi8sCiAJCQkJQjIxMTI3QTUwQjMxODY3NzAwMDlCRTUzIC8qIEpTU1ZH
UE9EVHlwZVdyYXBwZXIuaCAqLywKLQkJCQlCMkQzRkM4OTBDMjIxMkNCMDBDRjM2MTggLyogSlNT
VkdUcmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcCAqLywKIAkJCQk5M0I3MEQ0MTA5RUIwQzdDMDA5RDg0
NjggLyogSlNYTUxIdHRwUmVxdWVzdC5jcHAgKi8sCiAJCQkJOTNCNzBENDIwOUVCMEM3QzAwOUQ4
NDY4IC8qIEpTWE1MSHR0cFJlcXVlc3QuaCAqLywKIAkJCQk5M0I3MEQ0NTA5RUIwQzdDMDA5RDg0
NjggLyogSlNYU0xUUHJvY2Vzc29yLmNwcCAqLywKQEAgLTExNjIzLDYgKzExNjIyLDkgQEAKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCUJDMkVENkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0
b20uY3BwICovLAogCQkJCTFBOUVGNDU2MEExQjk1N0QwMDMzMkI2MyAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAgKi8sCisJCQkJQkM0NkMxRUQwQzBEREJERjAwMjBDRkMz
IC8qIEpTQ1NTUnVsZUN1c3RvbS5jcHAgKi8sCisJCQkJQkM1ODI1RjIwQzBCODkzODAwNTNGMUI1
IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgKi8sCisJCQkJQkMyMEZCN0UwQzBF
OEU2QzAwRDE0NDdGIC8qIEpTQ1NTVmFsdWVDdXN0b20uY3BwICovLAogCQkJCTUxRUM5MjVCMENF
OTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcCAqLywKIAkJ
CQk1MUVDOTI1QzBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFj
ay5oICovLAogCQkJCTUxRUM5MjVEMENFOTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2suY3BwICovLApAQCAtMTE2MzMsOSArMTE2MzUsNiBAQAogCQkJCTUx
RUM5MjYyMENFOTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjay5oICovLAogCQkJCTFBMzQxN0M4MENFQ0ZGMjUwMDQ5Q0JERSAvKiBKU0N1c3RvbVZvaWRD
YWxsYmFjay5jcHAgKi8sCiAJCQkJMUEzNDE3QzcwQ0VDRkYyNTAwNDlDQkRFIC8qIEpTQ3VzdG9t
Vm9pZENhbGxiYWNrLmggKi8sCi0JCQkJQkM0NkMxRUQwQzBEREJERjAwMjBDRkMzIC8qIEpTQ1NT
UnVsZUN1c3RvbS5jcHAgKi8sCi0JCQkJQkM1ODI1RjIwQzBCODkzODAwNTNGMUI1IC8qIEpTQ1NT
U3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgKi8sCi0JCQkJQkMyMEZCN0UwQzBFOEU2QzAwRDE0
NDdGIC8qIEpTQ1NTVmFsdWVDdXN0b20uY3BwICovLAogCQkJCTFBRTgzMDQyMENBQjBFRDEwMDIy
MzdBRSAvKiBKU0RhdGFiYXNlQ3VzdG9tLmNwcCAqLywKIAkJCQk5MjkyNjQ3NjBCNjFGQzcyMDBC
NDFEMzQgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgKi8sCiAJCQkJQkNEOUMyNUUwQzE3QUE2NzAw
NUM5MEEyIC8qIEpTRE9NV2luZG93Q3VzdG9tLmNwcCAqLywKQEAgLTExNjY5LDYgKzExNjY4LDcg
QEAKIAkJCQlCMkM5NkQ4QzBCM0FGMkI3MDA1RTgwRUMgLyogSlNTVkdQYXRoU2VnQ3VzdG9tLmNw
cCAqLywKIAkJCQlCMjk3QkM2RjBCM0MxNENGMDA0NUE1OTAgLyogSlNTVkdQYXRoU2VnTGlzdEN1
c3RvbS5jcHAgKi8sCiAJCQkJNTE2QkI3OTEwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTU1ZHUG9pbnRM
aXN0Q3VzdG9tLmNwcCAqLywKKwkJCQlCMkQzRkM4OTBDMjIxMkNCMDBDRjM2MTggLyogSlNTVkdU
cmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcCAqLywKIAkJCQk1MTZCQjc5MjBDRTkxRTY4MDA1MTJGNzkg
LyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0gQ3VzdG9tOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjkw
OTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDI1ICs1NSwyNSBAQCBLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3Rh
dGUqIGV4ZWMsCiAKICAgICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkgewogICAgICAgICBjYXNlIENT
U1J1bGU6OlNUWUxFX1JVTEU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgSlNDU1NTdHlsZVJ1bGUo
ZXhlYywgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSkpOworICAgICAgICAgICAgcmV0
ID0gbmV3IEpTQ1NTU3R5bGVSdWxlKEpTQ1NTUnVsZVByb3RvdHlwZTo6c2VsZihleGVjKSwgc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1NTUnVsZTo6TUVESUFfUlVMRToKLSAgICAgICAgICAgIHJldCA9IG5ldyBKU0NT
U01lZGlhUnVsZShleGVjLCBzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihydWxlKSk7CisgICAg
ICAgICAgICByZXQgPSBuZXcgSlNDU1NNZWRpYVJ1bGUoSlNDU1NNZWRpYVJ1bGVQcm90b3R5cGU6
OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KHJ1bGUpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1J1bGU6OkZPTlRfRkFDRV9SVUxFOgotICAgICAg
ICAgICAgcmV0ID0gbmV3IEpTQ1NTRm9udEZhY2VSdWxlKGV4ZWMsIHN0YXRpY19jYXN0PENTU0Zv
bnRGYWNlUnVsZSo+KHJ1bGUpKTsKKyAgICAgICAgICAgIHJldCA9IG5ldyBKU0NTU0ZvbnRGYWNl
UnVsZShKU0NTU0ZvbnRGYWNlUnVsZVByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8
Q1NTRm9udEZhY2VSdWxlKj4ocnVsZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ1NTUnVsZTo6UEFHRV9SVUxFOgotICAgICAgICAgICAgcmV0ID0gbmV3IEpTQ1NTUGFnZVJ1
bGUoZXhlYywgc3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGUqPihydWxlKSk7CisgICAgICAgICAgICBy
ZXQgPSBuZXcgSlNDU1NQYWdlUnVsZShKU0NTU1BhZ2VSdWxlUHJvdG90eXBlOjpzZWxmKGV4ZWMp
LCBzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+KHJ1bGUpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIENTU1J1bGU6OklNUE9SVF9SVUxFOgotICAgICAgICAgICAgcmV0ID0gbmV3
IEpTQ1NTSW1wb3J0UnVsZShleGVjLCBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVsZSkp
OworICAgICAgICAgICAgcmV0ID0gbmV3IEpTQ1NTSW1wb3J0UnVsZShKU0NTU0ltcG9ydFJ1bGVQ
cm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihydWxlKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NSdWxlOjpDSEFSU0VUX1JVTEU6
Ci0gICAgICAgICAgICByZXQgPSBuZXcgSlNDU1NDaGFyc2V0UnVsZShleGVjLCBzdGF0aWNfY2Fz
dDxDU1NDaGFyc2V0UnVsZSo+KHJ1bGUpKTsKKyAgICAgICAgICAgIHJldCA9IG5ldyBKU0NTU0No
YXJzZXRSdWxlKEpTQ1NTQ2hhcnNldFJ1bGVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19j
YXN0PENTU0NoYXJzZXRSdWxlKj4ocnVsZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXQgPSBuZXcgSlNDU1NSdWxlKGV4ZWMsIHJ1bGUpOwor
ICAgICAgICAgICAgcmV0ID0gbmV3IEpTQ1NTUnVsZShKU0NTU1J1bGVQcm90b3R5cGU6OnNlbGYo
ZXhlYyksIHJ1bGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI5MDkwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTMsMTcgKzUzLDE3IEBAIEtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSogZXhlYywK
ICAgICAgICAgcmV0dXJuIHJldDsKIAogICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAg
ICAgICAgcmV0ID0gbmV3IEpTQ1NTVmFsdWVMaXN0KGV4ZWMsIHN0YXRpY19jYXN0PENTU1ZhbHVl
TGlzdCo+KHZhbHVlKSk7CisgICAgICAgIHJldCA9IG5ldyBKU0NTU1ZhbHVlTGlzdChKU0NTU1Zh
bHVlTGlzdFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4o
dmFsdWUpKTsKICNpZiBFTkFCTEUoU1ZHKQogICAgIGVsc2UgaWYgKHZhbHVlLT5pc1NWR1BhaW50
KCkpCi0gICAgICAgIHJldCA9IG5ldyBKU1NWR1BhaW50KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1Bh
aW50Kj4odmFsdWUpKTsKKyAgICAgICAgcmV0ID0gbmV3IEpTU1ZHUGFpbnQoSlNTVkdQYWludFBy
b3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSkpOwogICAg
IGVsc2UgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgIHJldCA9IG5ldyBKU1NWR0Nv
bG9yKGV4ZWMsIHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpKTsKKyAgICAgICAgcmV0ID0g
bmV3IEpTU1ZHQ29sb3IoSlNTVkdDb2xvclByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nh
c3Q8U1ZHQ29sb3IqPih2YWx1ZSkpOwogI2VuZGlmCiAgICAgZWxzZSBpZiAodmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0ID0gbmV3IEpTQ1NTUHJpbWl0aXZlVmFsdWUoZXhl
Yywgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOworICAgICAgICByZXQg
PSBuZXcgSlNDU1NQcmltaXRpdmVWYWx1ZShKU0NTU1ByaW1pdGl2ZVZhbHVlUHJvdG90eXBlOjpz
ZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSk7CiAgICAg
ZWxzZQotICAgICAgICByZXQgPSBuZXcgSlNDU1NWYWx1ZShleGVjLCB2YWx1ZSk7CisgICAgICAg
IHJldCA9IG5ldyBKU0NTU1ZhbHVlKEpTQ1NTVmFsdWVQcm90b3R5cGU6OnNlbGYoZXhlYyksIHZh
bHVlKTsKIAogICAgIEtKUzo6U2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERPTU9iamVjdCh2YWx1ZSwg
cmV0KTsKICAgICByZXR1cm4gcmV0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3Vt
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAyOTA5MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
b2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC04NSwxMyArODUsMTMgQEAgSlNWYWx1ZSogdG9KUyhFeGVj
U3RhdGUqIGV4ZWMsIERvY3VtZW50KgogICAgICAgICByZXR1cm4gcmV0OwogCiAgICAgaWYgKGRv
Yy0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0ID0gbmV3IEpTSFRNTERvY3VtZW50KGV4
ZWMsIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRvYykpOworICAgICAgICByZXQgPSBuZXcg
SlNIVE1MRG9jdW1lbnQoSlNIVE1MRG9jdW1lbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRp
Y19jYXN0PEhUTUxEb2N1bWVudCo+KGRvYykpOwogI2lmIEVOQUJMRShTVkcpCiAgICAgZWxzZSBp
ZiAoZG9jLT5pc1NWR0RvY3VtZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyBKU1NWR0RvY3VtZW50
KGV4ZWMsIHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4oZG9jKSk7CisgICAgICAgIHJldCA9IG5l
dyBKU1NWR0RvY3VtZW50KEpTU1ZHRG9jdW1lbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRp
Y19jYXN0PFNWR0RvY3VtZW50Kj4oZG9jKSk7CiAjZW5kaWYKICAgICBlbHNlCi0gICAgICAgIHJl
dCA9IG5ldyBKU0RvY3VtZW50KGV4ZWMsIGRvYyk7CisgICAgICAgIHJldCA9IG5ldyBKU0RvY3Vt
ZW50KEpTRG9jdW1lbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIGRvYyk7CiAKICAgICAvLyBNYWtl
IHN1cmUgdGhlIGRvY3VtZW50IGlzIGtlcHQgYXJvdW5kIGJ5IHRoZSB3aW5kb3cgb2JqZWN0LCBh
bmQgd29ya3MgcmlnaHQgd2l0aCB0aGUKICAgICAvLyBiYWNrL2ZvcndhcmQgY2FjaGUuCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDI5MDkwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsMjUgKzczLDI1IEBAIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBFdmVudCogZXYK
ICAgICAgICAgcmV0dXJuIHJldDsKIAogICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkp
Ci0gICAgICAgIHJldCA9IG5ldyBKU0tleWJvYXJkRXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8S2V5
Ym9hcmRFdmVudCo+KGV2ZW50KSk7CisgICAgICAgIHJldCA9IG5ldyBKU0tleWJvYXJkRXZlbnQo
SlNLZXlib2FyZEV2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxLZXlib2Fy
ZEV2ZW50Kj4oZXZlbnQpKTsKICAgICBlbHNlIGlmIChldmVudC0+aXNUZXh0RXZlbnQoKSkKLSAg
ICAgICAgcmV0ID0gbmV3IEpTVGV4dEV2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PFRleHRFdmVudCo+
KGV2ZW50KSk7CisgICAgICAgIHJldCA9IG5ldyBKU1RleHRFdmVudChKU1RleHRFdmVudFByb3Rv
dHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZlbnQpKTsKICAgICBl
bHNlIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyBKU01vdXNl
RXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7CisgICAgICAgIHJl
dCA9IG5ldyBKU01vdXNlRXZlbnQoSlNNb3VzZUV2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBz
dGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKICAgICBlbHNlIGlmIChldmVudC0+aXNX
aGVlbEV2ZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyBKU1doZWVsRXZlbnQoZXhlYywgc3RhdGlj
X2Nhc3Q8V2hlZWxFdmVudCo+KGV2ZW50KSk7CisgICAgICAgIHJldCA9IG5ldyBKU1doZWVsRXZl
bnQoSlNXaGVlbEV2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxXaGVlbEV2
ZW50Kj4oZXZlbnQpKTsKICAgICBlbHNlIGlmIChldmVudC0+aXNVSUV2ZW50KCkpCi0gICAgICAg
IHJldCA9IG5ldyBKU1VJRXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8VUlFdmVudCo+KGV2ZW50KSk7
CisgICAgICAgIHJldCA9IG5ldyBKU1VJRXZlbnQoSlNVSUV2ZW50UHJvdG90eXBlOjpzZWxmKGV4
ZWMpLCBzdGF0aWNfY2FzdDxVSUV2ZW50Kj4oZXZlbnQpKTsKICAgICBlbHNlIGlmIChldmVudC0+
aXNNdXRhdGlvbkV2ZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyBKU011dGF0aW9uRXZlbnQoZXhl
Yywgc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVudCo+KGV2ZW50KSk7CisgICAgICAgIHJldCA9IG5l
dyBKU011dGF0aW9uRXZlbnQoSlNNdXRhdGlvbkV2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBz
dGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50Kj4oZXZlbnQpKTsKICAgICBlbHNlIGlmIChldmVudC0+
aXNPdmVyZmxvd0V2ZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyBKU092ZXJmbG93RXZlbnQoZXhl
Yywgc3RhdGljX2Nhc3Q8T3ZlcmZsb3dFdmVudCo+KGV2ZW50KSk7CisgICAgICAgIHJldCA9IG5l
dyBKU092ZXJmbG93RXZlbnQoSlNPdmVyZmxvd0V2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBz
dGF0aWNfY2FzdDxPdmVyZmxvd0V2ZW50Kj4oZXZlbnQpKTsKICAgICBlbHNlIGlmIChldmVudC0+
aXNNZXNzYWdlRXZlbnQoKSkKLSAgICAgICAgcmV0ID0gbmV3IEpTTWVzc2FnZUV2ZW50KGV4ZWMs
IHN0YXRpY19jYXN0PE1lc3NhZ2VFdmVudCo+KGV2ZW50KSk7CisgICAgICAgIHJldCA9IG5ldyBK
U01lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGlj
X2Nhc3Q8TWVzc2FnZUV2ZW50Kj4oZXZlbnQpKTsKICAgICBlbHNlIGlmIChldmVudC0+aXNQcm9n
cmVzc0V2ZW50KCkpCi0gICAgICAgIHJldCA9IG5ldyBKU1Byb2dyZXNzRXZlbnQoZXhlYywgc3Rh
dGljX2Nhc3Q8UHJvZ3Jlc3NFdmVudCo+KGV2ZW50KSk7CisgICAgICAgIHJldCA9IG5ldyBKU1By
b2dyZXNzRXZlbnQoSlNQcm9ncmVzc0V2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNf
Y2FzdDxQcm9ncmVzc0V2ZW50Kj4oZXZlbnQpKTsKICAgICBlbHNlCi0gICAgICAgIHJldCA9IG5l
dyBKU0V2ZW50KGV4ZWMsIGV2ZW50KTsKKyAgICAgICAgcmV0ID0gbmV3IEpTRXZlbnQoSlNFdmVu
dFByb3RvdHlwZTo6c2VsZihleGVjKSwgZXZlbnQpOwogCiAgICAgU2NyaXB0SW50ZXJwcmV0ZXI6
OnB1dERPTU9iamVjdChldmVudCwgcmV0KTsKICAgICByZXR1cm4gcmV0OwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9uIDI5MDkwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDEwICszMSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEtKUzsKIAotSlNFdmVudFRhcmdldE5vZGU6OkpTRXZlbnRUYXJnZXROb2RlKEV4ZWNTdGF0ZSog
ZXhlYywgTm9kZSogbikKLSAgICA6IEpTTm9kZShleGVjLCBuKQorSlNFdmVudFRhcmdldE5vZGU6
OkpTRXZlbnRUYXJnZXROb2RlKEtKUzo6SlNWYWx1ZSogcHJvdG90eXBlLCBOb2RlKiBuKQorICAg
IDogSlNOb2RlKHByb3RvdHlwZSwgbikKIHsKLSAgICBzZXRQcm90b3R5cGUoSlNFdmVudFRhcmdl
dE5vZGVQcm90b3R5cGU6OnNlbGYoZXhlYykpOwogfQogCiBib29sIEpTRXZlbnRUYXJnZXROb2Rl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudFRhcmdldE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXROb2RlLmgJKHJldmlzaW9uIDI5MDkwKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEpTRXZlbnRUYXJnZXROb2RlIDogcHVi
bGljIEpTTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBKU0V2ZW50VGFyZ2V0Tm9kZShLSlM6
OkV4ZWNTdGF0ZSosIE5vZGUqKTsKKyAgICAgICAgSlNFdmVudFRhcmdldE5vZGUoS0pTOjpKU1Zh
bHVlKiBwcm90b3R5cGUsIE5vZGUqKTsKIAogICAgICAgICB2b2lkIHNldExpc3RlbmVyKEtKUzo6
RXhlY1N0YXRlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEtKUzo6SlNWYWx1ZSog
ZnVuYykgY29uc3Q7CiAgICAgICAgIEtKUzo6SlNWYWx1ZSogZ2V0TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxBbGxDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxBbGxDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDI5MDkwKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNIVE1MQWxsQ29sbGVjdGlvbiA6
IHB1YmxpYyBKU0hUTUxDb2xsZWN0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTSFRNTEFs
bENvbGxlY3Rpb24oS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0
aW9uKQotICAgICAgICAgICAgOiBKU0hUTUxDb2xsZWN0aW9uKGV4ZWMsIGNvbGxlY3Rpb24pCisg
ICAgICAgIEpTSFRNTEFsbENvbGxlY3Rpb24oS0pTOjpKU1ZhbHVlKiBwcm90b3R5cGUsIEhUTUxD
b2xsZWN0aW9uKiBjb2xsZWN0aW9uKQorICAgICAgICAgICAgOiBKU0hUTUxDb2xsZWN0aW9uKHBy
b3RvdHlwZSwgY29sbGVjdGlvbikKICAgICAgICAgewogICAgICAgICB9CiAKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyOTA5MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQXVkaW9F
bGVtZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw5IEBAIHVz
aW5nIG5hbWVzcGFjZSBLSlM7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTSFRNTEF1ZGlvRWxl
bWVudENvbnN0cnVjdG9yOjpKU0hUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMsIERvY3VtZW50KiBkKQotICAgIDogbV9kb2MoZCkKKyAgICA6IERPTU9iamVjdChleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQorICAgICwgbV9kb2Mo
ZCkKIHsKLSAgICBzZXRQcm90b3R5cGUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmpl
Y3RQcm90b3R5cGUoKSk7CiAgICAgcHV0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKIH0KIApJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCShy
ZXZpc2lvbiAyOTA5MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGljIEpTVmFsdWUq
IGdldE5hbWVkSXRlbXMoRXhlY1N0YXRlKgogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAx
KQogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBuYW1lZEl0ZW1zWzBdLmdldCgpKTsKIAotICAg
IHJldHVybiBuZXcgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbihleGVjLCBuYW1lZEl0ZW1zKTsKKyAg
ICByZXR1cm4gbmV3IEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24oZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSwgbmFtZWRJdGVtcyk7CiB9CiAKIC8vIEhUTUxDb2xs
ZWN0aW9ucyBhcmUgc3RyYW5nZSBvYmplY3RzLCB0aGV5IHN1cHBvcnQgYm90aCBnZXQgYW5kIGNh
bGwsCkBAIC0xMzQsMTMgKzEzNCwxMyBAQCBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywg
SFRNTENvbGxlCiAKICAgICBzd2l0Y2ggKGNvbGxlY3Rpb24tPnR5cGUoKSkgewogICAgICAgICBj
YXNlIEhUTUxDb2xsZWN0aW9uOjpTZWxlY3RPcHRpb25zOgotICAgICAgICAgICAgcmV0ID0gbmV3
IEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uKGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxPcHRpb25zQ29s
bGVjdGlvbio+KGNvbGxlY3Rpb24pKTsKKyAgICAgICAgICAgIHJldCA9IG5ldyBKU0hUTUxPcHRp
b25zQ29sbGVjdGlvbihKU0hUTUxPcHRpb25zQ29sbGVjdGlvblByb3RvdHlwZTo6c2VsZihleGVj
KSwgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4oY29sbGVjdGlvbikpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSFRNTENvbGxlY3Rpb246OkRvY0FsbDoKLSAg
ICAgICAgICAgIHJldCA9IG5ldyBKU0hUTUxBbGxDb2xsZWN0aW9uKGV4ZWMsIHN0YXRpY19jYXN0
PEhUTUxDb2xsZWN0aW9uKj4oY29sbGVjdGlvbikpOworICAgICAgICAgICAgcmV0ID0gbmV3IEpT
SFRNTEFsbENvbGxlY3Rpb24oSlNIVE1MQ29sbGVjdGlvblByb3RvdHlwZTo6c2VsZihleGVjKSwg
c3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihjb2xsZWN0aW9uKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldCA9IG5ldyBKU0hUTUxDb2xs
ZWN0aW9uKGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uKj4oY29sbGVjdGlvbikpOwor
ICAgICAgICAgICAgcmV0ID0gbmV3IEpTSFRNTENvbGxlY3Rpb24oSlNIVE1MQ29sbGVjdGlvblBy
b3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihjb2xsZWN0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAJKHJldmlzaW9u
IDI5MDkwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50V3JhcHBlckZhY3Rv
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgdHlwZWRlZiBKU05vZGUq
ICgqQ3JlYXRlSFRNTEVsZW1lbnRXcmFwcAogI2RlZmluZSBDUkVBVEVfV1JBUFBFUl9GVU5DVElP
Tih0YWcsIG5hbWUpIFwKIHN0YXRpYyBKU05vZGUqIGNyZWF0ZSMjbmFtZSMjV3JhcHBlcihFeGVj
U3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpIFwKIHsgXAotICAg
IHJldHVybiBuZXcgSlNIVE1MIyNuYW1lIyNFbGVtZW50KGV4ZWMsIHN0YXRpY19jYXN0PEhUTUwj
I25hbWUjI0VsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7IFwKKyAgICByZXR1cm4gbmV3IEpTSFRN
TCMjbmFtZSMjRWxlbWVudChKU0hUTUwjI25hbWUjI0VsZW1lbnRQcm90b3R5cGU6OnNlbGYoZXhl
YyksIHN0YXRpY19jYXN0PEhUTUwjI25hbWUjI0VsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7IFwK
IH0KIEZPUl9FQUNIX1RBRyhDUkVBVEVfV1JBUFBFUl9GVU5DVElPTikKICNpZiBFTkFCTEUoVklE
RU8pCkBAIC0yNjAsNyArMjYwLDcgQEAgRk9SX0VBQ0hfVklERU9fVEFHKEFERF9UT19IQVNIX01B
UCkKICAgICBDcmVhdGVIVE1MRWxlbWVudFdyYXBwZXJGdW5jdGlvbiBjcmVhdGVXcmFwcGVyRnVu
Y3Rpb24gPSBtYXAuZ2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSk7CiAgICAgaWYgKGNy
ZWF0ZVdyYXBwZXJGdW5jdGlvbikKICAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXJGdW5jdGlv
bihleGVjLCBlbGVtZW50KTsKLSAgICByZXR1cm4gbmV3IEpTSFRNTEVsZW1lbnQoZXhlYywgZWxl
bWVudC5nZXQoKSk7CisgICAgcmV0dXJuIG5ldyBKU0hUTUxFbGVtZW50KEpTSFRNTEVsZW1lbnRQ
cm90b3R5cGU6OnNlbGYoZXhlYyksIGVsZW1lbnQuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjkwOTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBA
QCBKU1ZhbHVlKiBKU0hUTUxGb3JtRWxlbWVudDo6bmFtZUdldHRlcihFCiAgICAgaWYgKG5hbWVk
SXRlbXMuc2l6ZSgpID09IDEpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIG5hbWVkSXRlbXNb
MF0uZ2V0KCkpOwogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUoKSA+IDEpIAotICAgICAgICByZXR1
cm4gbmV3IEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24oZXhlYywgbmFtZWRJdGVtcyk7CisgICAgICAg
IHJldHVybiBuZXcgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPm9iamVjdFByb3RvdHlwZSgpLCBuYW1lZEl0ZW1zKTsKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1l
bnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0
RWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAyOTA5MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MSW5wdXRFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDExICs1Nyw5
IEBAIEpTVmFsdWUqIEpTSFRNTElucHV0RWxlbWVudEJhc2VGdW5jdGlvblMKIAogY29uc3QgQ2xh
c3NJbmZvIEpTSFRNTElucHV0RWxlbWVudEJhc2U6OmluZm8gPSB7ICJKU0hUTUxJbnB1dEVsZW1l
bnRCYXNlIiwgJkpTSFRNTEVsZW1lbnQ6OmluZm8sICZKU0hUTUxJbnB1dEVsZW1lbnRCYXNlVGFi
bGUgfTsKIAotSlNIVE1MSW5wdXRFbGVtZW50QmFzZTo6SlNIVE1MSW5wdXRFbGVtZW50QmFzZShF
eGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gZSkKLSAgICA6IEpT
SFRNTEVsZW1lbnQoZXhlYywgZS5nZXQoKSkKK0pTSFRNTElucHV0RWxlbWVudEJhc2U6OkpTSFRN
TElucHV0RWxlbWVudEJhc2UoS0pTOjpKU1ZhbHVlKiBwcm90b3R5cGUsIFBhc3NSZWZQdHI8SFRN
TElucHV0RWxlbWVudD4gZSkKKyAgICA6IEpTSFRNTEVsZW1lbnQocHJvdG90eXBlLCBlLmdldCgp
KQogewotICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGEgcHJvdG90eXBlLCBqdXN0IHVzZSBv
dXIgcGFyZW50IGNsYXNzJ3MgcHJvdG90eXBlCi0gICAgc2V0UHJvdG90eXBlKEpTSFRNTEVsZW1l
bnRQcm90b3R5cGU6OnNlbGYoZXhlYykpOwogfQogCiBib29sIEpTSFRNTElucHV0RWxlbWVudEJh
c2U6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlLmgJKHJldmlzaW9uIDI5MDkwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNIVE1M
SW5wdXRFbGVtZW50QmFzZSA6IHB1YmxpYyBKU0hUTUxFbGVtZW50IHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIEpTSFRNTElucHV0RWxlbWVudEJhc2UoS0pTOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRy
PEhUTUxJbnB1dEVsZW1lbnQ+KTsKKyAgICAgICAgSlNIVE1MSW5wdXRFbGVtZW50QmFzZShLSlM6
OkpTVmFsdWUqIHByb3RvdHlwZSwgUGFzc1JlZlB0cjxIVE1MSW5wdXRFbGVtZW50Pik7CisKICAg
ICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChLSlM6OkV4ZWNTdGF0ZSosIGNv
bnN0IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEtKUzo6
SlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29u
c3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6
OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIGludCBhdHRyKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDI5MDkwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxP
cHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEpTSFRNTE9w
dGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQqIGQpCi0gICAgOiBtX2RvYyhkKQorICAgIDogS0pTOjpE
T01PYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkK
KyAgICAsIG1fZG9jKGQpCiB7Ci0gICAgc2V0UHJvdG90eXBlKGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOwogICAgIHB1dChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcig0KSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51
bSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uLmNwcAkocmV2aXNpb24gMjkw
OTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw4ICs1Niw5IEBAIGNvbnN0IENsYXNzSW5mbyBKU0xvY2F0aW9uOjppbmZvID0geyAi
TG8KIEBlbmQKICovCiAKLUpTTG9jYXRpb246OkpTTG9jYXRpb24oRnJhbWUqIGZyYW1lKQotICAg
IDogbV9mcmFtZShmcmFtZSkKK0pTTG9jYXRpb246OkpTTG9jYXRpb24oSlNWYWx1ZSogcHJvdG90
eXBlLCBGcmFtZSogZnJhbWUpCisgICAgOiBET01PYmplY3QocHJvdG90eXBlKQorICAgICwgbV9m
cmFtZShmcmFtZSkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uLmgJKHJldmlz
aW9uIDI5MDkwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEpT
TG9jYXRpb24gOiBwdWJsaWMgS0pTOjpET01PYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3Mg
S0pTOjpXaW5kb3c7CiAgICAgcHVibGljOgorICAgICAgICBKU0xvY2F0aW9uKEtKUzo6SlNWYWx1
ZSogcHJvdG95cGUsIEZyYW1lKik7CisgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6
OlByb3BlcnR5U2xvdCYpOwogICAgICAgICBLSlM6OkpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQg
cHV0KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgS0pTOjpKU1ZhbHVl
KiwgaW50IGF0dHIgPSBLSlM6Ok5vbmUpOwpAQCAtNDksOCArNTEsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBpbmZvOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgSlNMb2NhdGlvbihGcmFtZSopOwotCiAgICAgICAgIEZyYW1lKiBt
X2ZyYW1lOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVz
Q29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVk
Tm9kZXNDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMjkwOTApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCAr
NDAsMTAgQEAgY29uc3QgQ2xhc3NJbmZvIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb246OgogLy8gU3Vj
aCBhIGNvbGxlY3Rpb24gaXMgdXN1YWxseSB2ZXJ5IHNob3J0LWxpdmVkLCBpdCBvbmx5IGV4aXN0
cwogLy8gZm9yIGNvbnN0cnVjdHMgbGlrZSBkb2N1bWVudC5mb3Jtcy48bmFtZT5bMV0sCiAvLyBz
byBpdCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtIHRoYXQgaXQncyBzdG9yaW5nIGFsbCB0aGUgbm9k
ZXMgKHdpdGggdGhlIHNhbWUgbmFtZSkuIChEYXZpZCkKLUpTTmFtZWROb2Rlc0NvbGxlY3Rpb246
OkpTTmFtZWROb2Rlc0NvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8UmVm
UHRyPE5vZGU+ID4mIG5vZGVzKQotICAgIDogbV9ub2Rlcyhub2RlcykKK0pTTmFtZWROb2Rlc0Nv
bGxlY3Rpb246OkpTTmFtZWROb2Rlc0NvbGxlY3Rpb24oS0pTOjpKU1ZhbHVlKiBwcm90b3R5cGUs
IGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgbm9kZXMpCisgICAgOiBLSlM6OkRPTU9iamVj
dChwcm90b3R5cGUpCisgICAgLCBtX25vZGVzKG5vZGVzKQogewotICAgIHNldFByb3RvdHlwZShl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsKIH0KIAogSlNW
YWx1ZSogSlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAyOTA5MCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyB3aGVuIG11bHRpcGxlIG5v
ZGVzIGhhdmUgdGhlIHNhbWUgbmFtZS4KICAgICBjbGFzcyBKU05hbWVkTm9kZXNDb2xsZWN0aW9u
IDogcHVibGljIEtKUzo6RE9NT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTTmFtZWRO
b2Rlc0NvbGxlY3Rpb24oS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+
ID4mKTsKKyAgICAgICAgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbihLSlM6OkpTVmFsdWUqIHByb3Rv
dHlwZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+Jik7CiAKICAgICAgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6SWRlbnRp
ZmllciYsIEtKUzo6UHJvcGVydHlTbG90Jik7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDI5MDkwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNDMgKzE3NSw0MyBAQCBKU1ZhbHVl
KiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0CiAgICAgICAgICAgICAgICAgcmV0ID0g
Y3JlYXRlSlNTVkdXcmFwcGVyKGV4ZWMsIHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHRWxlbWVudD4o
bikpOwogI2VuZGlmCiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0ID0gbmV3
IEpTRWxlbWVudChleGVjLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkpOworICAgICAgICAg
ICAgICAgIHJldCA9IG5ldyBKU0VsZW1lbnQoSlNFbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMp
LCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgSlNB
dHRyKGV4ZWMsIHN0YXRpY19jYXN0PEF0dHIqPihub2RlKSk7CisgICAgICAgICAgICByZXQgPSBu
ZXcgSlNBdHRyKEpTQXR0clByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8QXR0cio+
KG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9E
RToKLSAgICAgICAgICAgIHJldCA9IG5ldyBKU1RleHQoZXhlYywgc3RhdGljX2Nhc3Q8VGV4dCo+
KG5vZGUpKTsKKyAgICAgICAgICAgIHJldCA9IG5ldyBKU1RleHQoSlNUZXh0UHJvdG90eXBlOjpz
ZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgotICAgICAgICAgICAgcmV0
ID0gbmV3IEpTQ0RBVEFTZWN0aW9uKGV4ZWMsIHN0YXRpY19jYXN0PENEQVRBU2VjdGlvbio+KG5v
ZGUpKTsKKyAgICAgICAgICAgIHJldCA9IG5ldyBKU0NEQVRBU2VjdGlvbihKU0NEQVRBU2VjdGlv
blByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q0RBVEFTZWN0aW9uKj4obm9kZSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6Ci0g
ICAgICAgICAgICByZXQgPSBuZXcgSlNFbnRpdHkoZXhlYywgc3RhdGljX2Nhc3Q8RW50aXR5Kj4o
bm9kZSkpOworICAgICAgICAgICAgcmV0ID0gbmV3IEpTRW50aXR5KEpTRW50aXR5UHJvdG90eXBl
OjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxFbnRpdHkqPihub2RlKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6Ci0g
ICAgICAgICAgICByZXQgPSBuZXcgSlNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oZXhlYywgc3RhdGlj
X2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obm9kZSkpOworICAgICAgICAgICAgcmV0ID0g
bmV3IEpTUHJvY2Vzc2luZ0luc3RydWN0aW9uKEpTUHJvY2Vzc2luZ0luc3RydWN0aW9uUHJvdG90
eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihub2Rl
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6
Ci0gICAgICAgICAgICByZXQgPSBuZXcgSlNDb21tZW50KGV4ZWMsIHN0YXRpY19jYXN0PENvbW1l
bnQqPihub2RlKSk7CisgICAgICAgICAgICByZXQgPSBuZXcgSlNDb21tZW50KEpTQ29tbWVudFBy
b3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8Q29tbWVudCo+KG5vZGUpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6CiAgICAgICAg
ICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIHRoZSBkb2N1bWVudCBpdHNlbGYgaW4gdGhl
IHBlci1kb2N1bWVudCBkaWN0aW9uYXJ5CiAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KG5vZGUpKTsKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVO
VF9UWVBFX05PREU6Ci0gICAgICAgICAgICByZXQgPSBuZXcgSlNEb2N1bWVudFR5cGUoZXhlYywg
c3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlKj4obm9kZSkpOworICAgICAgICAgICAgcmV0ID0gbmV3
IEpTRG9jdW1lbnRUeXBlKEpTRG9jdW1lbnRUeXBlUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0
aWNfY2FzdDxEb2N1bWVudFR5cGUqPihub2RlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBOb2RlOjpOT1RBVElPTl9OT0RFOgotICAgICAgICAgICAgcmV0ID0gbmV3IEpTTm90
YXRpb24oZXhlYywgc3RhdGljX2Nhc3Q8Tm90YXRpb24qPihub2RlKSk7CisgICAgICAgICAgICBy
ZXQgPSBuZXcgSlNOb3RhdGlvbihKU05vdGF0aW9uUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0
aWNfY2FzdDxOb3RhdGlvbio+KG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6Ci0gICAgICAgICAgICByZXQgPSBuZXcg
SlNEb2N1bWVudEZyYWdtZW50KGV4ZWMsIHN0YXRpY19jYXN0PERvY3VtZW50RnJhZ21lbnQqPihu
b2RlKSk7CisgICAgICAgICAgICByZXQgPSBuZXcgSlNEb2N1bWVudEZyYWdtZW50KEpTRG9jdW1l
bnRGcmFnbWVudFByb3RvdHlwZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8RG9jdW1lbnRGcmFn
bWVudCo+KG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OkVO
VElUWV9SRUZFUkVOQ0VfTk9ERToKLSAgICAgICAgICAgIHJldCA9IG5ldyBKU0VudGl0eVJlZmVy
ZW5jZShleGVjLCBzdGF0aWNfY2FzdDxFbnRpdHlSZWZlcmVuY2UqPihub2RlKSk7CisgICAgICAg
ICAgICByZXQgPSBuZXcgSlNFbnRpdHlSZWZlcmVuY2UoSlNFbnRpdHlSZWZlcmVuY2VQcm90b3R5
cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PEVudGl0eVJlZmVyZW5jZSo+KG5vZGUpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0ID0gbmV3
IEpTTm9kZShleGVjLCBub2RlKTsKKyAgICAgICAgICAgIHJldCA9IG5ldyBKU05vZGUoSlNOb2Rl
UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBub2RlKTsKICAgICB9CiAKICAgICBTY3JpcHRJbnRlcnBy
ZXRlcjo6cHV0RE9NTm9kZUZvckRvY3VtZW50KGRvYywgbm9kZSwgcmV0KTsKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwCShy
ZXZpc2lvbiAyOTA5MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdFbGVtZW50V3JhcHBl
ckZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYsNyArMjc2LDcgQEAgdHlwZWRlZiBK
U05vZGUqICgqQ3JlYXRlU1ZHRWxlbWVudFdyYXBwZQogI2RlZmluZSBDUkVBVEVfV1JBUFBFUl9G
VU5DVElPTih0YWcsIG5hbWUpIFwKIHN0YXRpYyBKU05vZGUqIGNyZWF0ZSMjbmFtZSMjV3JhcHBl
cihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U1ZHRWxlbWVudD4gZWxlbWVudCkgXAogeyBc
Ci0gICAgcmV0dXJuIG5ldyBKU1NWRyMjbmFtZSMjRWxlbWVudChleGVjLCBzdGF0aWNfY2FzdDxT
VkcjI25hbWUjI0VsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7IFwKKyAgICByZXR1cm4gbmV3IEpT
U1ZHIyNuYW1lIyNFbGVtZW50KEpTU1ZHIyNuYW1lIyNFbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4
ZWMpLCBzdGF0aWNfY2FzdDxTVkcjI25hbWUjI0VsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7IFwK
IH0KIEZPUl9FQUNIX1RBRyhDUkVBVEVfV1JBUFBFUl9GVU5DVElPTikKIEZPUl9FQUNIX0FOSU1B
VElPTl9UQUcoQ1JFQVRFX1dSQVBQRVJfRlVOQ1RJT04pCkBAIC0yOTksNyArMjk5LDcgQEAgRk9S
X0VBQ0hfRklMVEVSX1RBRyhBRERfVE9fSEFTSF9NQVApCiAgICAgQ3JlYXRlU1ZHRWxlbWVudFdy
YXBwZXJGdW5jdGlvbiBjcmVhdGVXcmFwcGVyRnVuY3Rpb24gPSBtYXAuZ2V0KGVsZW1lbnQtPmxv
Y2FsTmFtZSgpLmltcGwoKSk7CiAgICAgaWYgKGNyZWF0ZVdyYXBwZXJGdW5jdGlvbikKICAgICAg
ICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbihleGVjLCBlbGVtZW50KTsKLSAgICByZXR1
cm4gbmV3IEpTU1ZHRWxlbWVudChleGVjLCBlbGVtZW50LmdldCgpKTsKKyAgICByZXR1cm4gbmV3
IEpTU1ZHRWxlbWVudChKU1NWR0VsZW1lbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIGVsZW1lbnQu
Z2V0KCkpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdD
dXN0b20uY3BwCShyZXZpc2lvbiAyOTA5MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQ
YXRoU2VnQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNDYgKzY2LDQ2IEBAIEpTVmFs
dWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBTVkdQYXRoU2UKICAgICAKICAgICBzd2l0Y2ggKG9i
ai0+cGF0aFNlZ1R5cGUoKSkgewogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DTE9TRVBB
VEg6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnQ2xvc2VQYXRo
LCBKU1NWR1BhdGhTZWdDbG9zZVBhdGg+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDbG9z
ZVBhdGgqPihvYmopLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0
PFNWR1BhdGhTZWdDbG9zZVBhdGgsIEpTU1ZHUGF0aFNlZ0Nsb3NlUGF0aCwgSlNTVkdQYXRoU2Vn
Q2xvc2VQYXRoUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ2xvc2VQYXRo
Kj4ob2JqKSwgY29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX01PVkVUT19B
QlM6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnTW92ZXRvQWJz
LCBKU1NWR1BhdGhTZWdNb3ZldG9BYnM+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdNb3Zl
dG9BYnMqPihvYmopLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0
PFNWR1BhdGhTZWdNb3ZldG9BYnMsIEpTU1ZHUGF0aFNlZ01vdmV0b0FicywgSlNTVkdQYXRoU2Vn
TW92ZXRvQWJzUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92ZXRvQWJz
Kj4ob2JqKSwgY29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX01PVkVUT19S
RUw6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnTW92ZXRvUmVs
LCBKU1NWR1BhdGhTZWdNb3ZldG9SZWw+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdNb3Zl
dG9SZWwqPihvYmopLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0
PFNWR1BhdGhTZWdNb3ZldG9SZWwsIEpTU1ZHUGF0aFNlZ01vdmV0b1JlbCwgSlNTVkdQYXRoU2Vn
TW92ZXRvUmVsUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92ZXRvUmVs
Kj4ob2JqKSwgY29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19B
QlM6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnTGluZXRvQWJz
LCBKU1NWR1BhdGhTZWdMaW5ldG9BYnM+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5l
dG9BYnMqPihvYmopLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0
PFNWR1BhdGhTZWdMaW5ldG9BYnMsIEpTU1ZHUGF0aFNlZ0xpbmV0b0FicywgSlNTVkdQYXRoU2Vn
TGluZXRvQWJzUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvQWJz
Kj4ob2JqKSwgY29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19S
RUw6Ci0gICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnTGluZXRvUmVs
LCBKU1NWR1BhdGhTZWdMaW5ldG9SZWw+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5l
dG9SZWwqPihvYmopLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0
PFNWR1BhdGhTZWdMaW5ldG9SZWwsIEpTU1ZHUGF0aFNlZ0xpbmV0b1JlbCwgSlNTVkdQYXRoU2Vn
TGluZXRvUmVsUHJvdG90eXBlPihleGVjLCBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvUmVs
Kj4ob2JqKSwgY29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9f
Q1VCSUNfQUJTOgotICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY0FicywgSlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzPihleGVjLCBzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzKj4ob2JqKSwgY29udGV4dCk7CisgICAgICAg
IHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLCBKU1NW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMsIEpTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Fic1Byb3Rv
dHlwZT4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyo+KG9iaiks
IGNvbnRleHQpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX1JF
TDoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNSZWwsIEpTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbD4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1JlbCo+KG9iaiksIGNvbnRleHQpOworICAgICAgICByZXR1cm4g
Y2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCwgSlNTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljUmVsLCBKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWxQcm90b3R5cGU+KGV4
ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwqPihvYmopLCBjb250ZXh0
KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfQUJTOgot
ICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNBYnMsIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM+KGV4ZWMsIHN0YXRpY19jYXN0
PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKj4ob2JqKSwgY29udGV4dCk7CisgICAgICAg
IHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficywg
SlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0FicywgSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY0Fic1Byb3RvdHlwZT4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNBYnMqPihvYmopLCBjb250ZXh0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdf
Q1VSVkVUT19RVUFEUkFUSUNfUkVMOgotICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwsIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNSZWw+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKj4o
b2JqKSwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1JlbCwgSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCwg
SlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbFByb3RvdHlwZT4oZXhlYywgc3RhdGljX2Nh
c3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwqPihvYmopLCBjb250ZXh0KTsKICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQVJDX0FCUzoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZH
RE9NT2JqZWN0PFNWR1BhdGhTZWdBcmNBYnMsIEpTU1ZHUGF0aFNlZ0FyY0Ficz4oZXhlYywgc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0FyY0Ficyo+KG9iaiksIGNvbnRleHQpOworICAgICAgICByZXR1
cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0FyY0FicywgSlNTVkdQYXRoU2VnQXJjQWJz
LCBKU1NWR1BhdGhTZWdBcmNBYnNQcm90b3R5cGU+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdBcmNBYnMqPihvYmopLCBjb250ZXh0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdf
QVJDX1JFTDoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdBcmNS
ZWwsIEpTU1ZHUGF0aFNlZ0FyY1JlbD4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0FyY1Jl
bCo+KG9iaiksIGNvbnRleHQpOworICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZH
UGF0aFNlZ0FyY1JlbCwgSlNTVkdQYXRoU2VnQXJjUmVsLCBKU1NWR1BhdGhTZWdBcmNSZWxQcm90
b3R5cGU+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdBcmNSZWwqPihvYmopLCBjb250ZXh0
KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfQUJTOgot
ICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250
YWxBYnMsIEpTU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM+KGV4ZWMsIHN0YXRpY19jYXN0
PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzKj4ob2JqKSwgY29udGV4dCk7CisgICAgICAg
IHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicywg
SlNTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicywgSlNTVkdQYXRoU2VnTGluZXRvSG9yaXpv
bnRhbEFic1Byb3RvdHlwZT4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxBYnMqPihvYmopLCBjb250ZXh0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdf
TElORVRPX0hPUklaT05UQUxfUkVMOgotICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8
U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwsIEpTU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250
YWxSZWw+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKj4o
b2JqKSwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRo
U2VnTGluZXRvSG9yaXpvbnRhbFJlbCwgSlNTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbCwg
SlNTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbFByb3RvdHlwZT4oZXhlYywgc3RhdGljX2Nh
c3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwqPihvYmopLCBjb250ZXh0KTsKICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX0FCUzoKLSAgICAgICAgcmV0
dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicywgSlNTVkdQ
YXRoU2VnTGluZXRvVmVydGljYWxBYnM+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbEFicyo+KG9iaiksIGNvbnRleHQpOworICAgICAgICByZXR1cm4gY2FjaGVTVkdE
T01PYmplY3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLCBKU1NWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbEFicywgSlNTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnNQcm90b3R5cGU+KGV4ZWMs
IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyo+KG9iaiksIGNvbnRleHQp
OwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMOgotICAg
ICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVs
LCBKU1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbD4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKj4ob2JqKSwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBj
YWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwsIEpTU1ZHUGF0aFNl
Z0xpbmV0b1ZlcnRpY2FsUmVsLCBKU1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbFByb3RvdHlw
ZT4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKj4ob2JqKSwg
Y29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01P
T1RIX0FCUzoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNTbW9vdGhBYnMsIEpTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicz4oZXhl
Yywgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicyo+KG9iaiksIGNv
bnRleHQpOworICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1Ntb290aEFicywgSlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzLCBKU1NW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnNQcm90b3R5cGU+KGV4ZWMsIHN0YXRpY19jYXN0
PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMqPihvYmopLCBjb250ZXh0KTsKICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfUkVMOgotICAgICAg
ICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJl
bCwgSlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsPihleGVjLCBzdGF0aWNfY2FzdDxT
VkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKj4ob2JqKSwgY29udGV4dCk7CisgICAgICAg
IHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVs
LCBKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwsIEpTU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1Ntb290aFJlbFByb3RvdHlwZT4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1Ntb290aFJlbCo+KG9iaiksIGNvbnRleHQpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6
UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTOgotICAgICAgICByZXR1cm4gY2Fj
aGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMsIEpTU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM+KGV4ZWMsIHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKj4ob2JqKSwgY29udGV4dCk7CisgICAgICAg
IHJldHVybiBjYWNoZVNWR0RPTU9iamVjdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290
aEFicywgSlNTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicywgSlNTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1Ntb290aEFic1Byb3RvdHlwZT4oZXhlYywgc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMqPihvYmopLCBjb250ZXh0KTsKICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX1JFTDoKLSAg
ICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
U21vb3RoUmVsLCBKU1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsPihleGVjLCBz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbCo+KG9iaiksIGNv
bnRleHQpOworICAgICAgICByZXR1cm4gY2FjaGVTVkdET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNTbW9vdGhSZWwsIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhS
ZWwsIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWxQcm90b3R5cGU+KGV4ZWMs
IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKj4ob2JqKSwg
Y29udGV4dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX1VOS05PV046CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9NT2JqZWN0PFNWR1BhdGhTZWcsIEpTU1ZH
UGF0aFNlZz4oZXhlYywgb2JqLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlU1ZHRE9N
T2JqZWN0PFNWR1BhdGhTZWcsIEpTU1ZHUGF0aFNlZywgSlNTVkdQYXRoU2VnUHJvdG90eXBlPihl
eGVjLCBvYmosIGNvbnRleHQpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjkwOTApCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkg
KzQ0LDkgQEAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIFN0eWxlU2hlZQogICAgICAg
ICByZXR1cm4gcmV0OwogCiAgICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQot
ICAgICAgICByZXQgPSBuZXcgSlNDU1NTdHlsZVNoZWV0KGV4ZWMsIHN0YXRpY19jYXN0PENTU1N0
eWxlU2hlZXQqPihzdHlsZVNoZWV0KSk7CisgICAgICAgIHJldCA9IG5ldyBKU0NTU1N0eWxlU2hl
ZXQoSlNDU1NTdHlsZVNoZWV0UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxDU1NT
dHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkpOwogICAgIGVsc2UKLSAgICAgICAgcmV0ID0gbmV3IEpT
U3R5bGVTaGVldChleGVjLCBzdHlsZVNoZWV0KTsKKyAgICAgICAgcmV0ID0gbmV3IEpTU3R5bGVT
aGVldChKU1N0eWxlU2hlZXRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0eWxlU2hlZXQpOwogCiAg
ICAgU2NyaXB0SW50ZXJwcmV0ZXI6OnB1dERPTU9iamVjdChzdHlsZVNoZWV0LCByZXQpOwogICAg
IHJldHVybiByZXQ7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5j
cHAJKHJldmlzaW9uIDI5MDkwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksOSBAQCBLSlNfREVGSU5FX1BST1RP
VFlQRShKU1hNTEh0dHBSZXF1ZXN0UHJvCiBLSlNfSU1QTEVNRU5UX1BST1RPVFlQRSgiSlNYTUxI
dHRwUmVxdWVzdCIsIEpTWE1MSHR0cFJlcXVlc3RQcm90b3R5cGUpCiAKIEpTWE1MSHR0cFJlcXVl
c3RDb25zdHJ1Y3RvckltcDo6SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0
ZSogZXhlYywgRG9jdW1lbnQqIGQpCi0gICAgOiBkb2MoZCkKKyAgICA6IERPTU9iamVjdChleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQorICAgICwgZG9jKGQp
CiB7Ci0gICAgc2V0UHJvdG90eXBlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0
UHJvdG90eXBlKCkpOwogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlLCBKU1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBOb25lKTsKIH0KIApA
QCAtNzIsNyArNzIsNyBAQCBib29sIEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcDo6aW1w
CiAKIEpTT2JqZWN0KiBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXA6OmNvbnN0cnVjdChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmKQogewotICAgIHJldHVybiBuZXcgSlNYTUxIdHRw
UmVxdWVzdChleGVjLCBkb2MuZ2V0KCkpOworICAgIHJldHVybiBuZXcgSlNYTUxIdHRwUmVxdWVz
dChKU1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBkb2MuZ2V0KCkpOwogfQog
CiBjb25zdCBDbGFzc0luZm8gSlNYTUxIdHRwUmVxdWVzdDo6aW5mbyA9IHsgIkpTWE1MSHR0cFJl
cXVlc3QiLCAwLCAmSlNYTUxIdHRwUmVxdWVzdFRhYmxlIH07CkBAIC0xOTUsMTAgKzE5NSwxMCBA
QCB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6Om1hcmsoKQogfQogCiAKLUpTWE1MSHR0cFJlcXVlc3Q6
OkpTWE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZCkKLSAgOiBtX2lt
cGwobmV3IFhNTEh0dHBSZXF1ZXN0KGQpKQorSlNYTUxIdHRwUmVxdWVzdDo6SlNYTUxIdHRwUmVx
dWVzdChKU1ZhbHVlKiBwcm90b3R5cGUsIERvY3VtZW50KiBkKQorICAgIDogRE9NT2JqZWN0KHBy
b3RvdHlwZSkKKyAgICAsIG1faW1wbChuZXcgWE1MSHR0cFJlcXVlc3QoZCkpCiB7Ci0gICAgc2V0
UHJvdG90eXBlKEpTWE1MSHR0cFJlcXVlc3RQcm90b3R5cGU6OnNlbGYoZXhlYykpOwogICAgIFNj
cmlwdEludGVycHJldGVyOjpwdXRET01PYmplY3QobV9pbXBsLmdldCgpLCB0aGlzKTsKIH0KIApJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDI5MDkw
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDE2ICszNiwxOSBAQCBuYW1lc3BhY2UgS0pTIHsKIGNsYXNzIEpTWE1MSHR0cFJl
cXVlc3RDb25zdHJ1Y3RvckltcCA6IHB1YmxpYyBET01PYmplY3QgewogcHVibGljOgogICAgIEpT
WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcChFeGVjU3RhdGUqLCBXZWJDb3JlOjpEb2N1bWVu
dCopOworCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgTGlzdCYpOwor
CiBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gZG9jOwogfTsKIAogY2xh
c3MgSlNYTUxIdHRwUmVxdWVzdCA6IHB1YmxpYyBET01PYmplY3QgewogcHVibGljOgotICAgIEpT
WE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlKiwgV2ViQ29yZTo6RG9jdW1lbnQqKTsKKyAgICBKU1hN
TEh0dHBSZXF1ZXN0KEpTVmFsdWUqIHByb3RvdHlwZSwgV2ViQ29yZTo6RG9jdW1lbnQqKTsKICAg
ICB+SlNYTUxIdHRwUmVxdWVzdCgpOworCiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBpbmZvOwogICAgIGVudW0geyBPbmxvYWQsIE9ucmVhZHlzdGF0ZWNoYW5nZSwgUmVhZHlT
dGF0ZSwgUmVzcG9uc2VUZXh0LCBSZXNwb25zZVhNTCwgU3RhdHVzLApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMjkwOTApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkg
KzU4LDEwIEBAIGNvbnN0IENsYXNzSW5mbyBKU1hTTFRQcm9jZXNzb3I6OmluZm8gPSAKIEtKU19E
RUZJTkVfUFJPVE9UWVBFKFhTTFRQcm9jZXNzb3JQcm90b3R5cGUpCiBLSlNfSU1QTEVNRU5UX1BS
T1RPVFlQRSgiWFNMVFByb2Nlc3NvciIsIFhTTFRQcm9jZXNzb3JQcm90b3R5cGUpCiAKLUpTWFNM
VFByb2Nlc3Nvcjo6SlNYU0xUUHJvY2Vzc29yKEV4ZWNTdGF0ZSAqZXhlYykgOiBtX2ltcGwobmV3
IFhTTFRQcm9jZXNzb3IoKSkKK0pTWFNMVFByb2Nlc3Nvcjo6SlNYU0xUUHJvY2Vzc29yKEpTVmFs
dWUqIHByb3RvdHlwZSkKKyAgICA6IERPTU9iamVjdChwcm90b3R5cGUpCisgICAgLCBtX2ltcGwo
bmV3IFhTTFRQcm9jZXNzb3IoKSkKIHsKLSAgICBzZXRQcm90b3R5cGUoWFNMVFByb2Nlc3NvclBy
b3RvdHlwZTo6c2VsZihleGVjKSk7CiB9CiAKIEpTWFNMVFByb2Nlc3Nvcjo6fkpTWFNMVFByb2Nl
c3NvcigpCkBAIC0xODUsMTEgKzE4NiwyMSBAQCBKU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3JQcm90
b3R5cGVGdW5jdGlvCiB9CiAKIFhTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvckltcDo6WFNMVFByb2Nl
c3NvckNvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSAqZXhlYykKKyAgICA6IERPTU9iamVjdChleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQogewotICAgIHNldFBy
b3RvdHlwZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsK
ICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgWFNMVFByb2Nl
c3NvclByb3RvdHlwZTo6c2VsZihleGVjKSwgTm9uZSk7CiB9CiAKK2Jvb2wgWFNMVFByb2Nlc3Nv
ckNvbnN0cnVjdG9ySW1wOjppbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorSlNPYmplY3QqIFhTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvckltcDo6Y29u
c3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4g
bmV3IEpTWFNMVFByb2Nlc3NvcihYU0xUUHJvY2Vzc29yUHJvdG90eXBlOjpzZWxmKGV4ZWMpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgS0pTCisKICNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3IuaAkocmV2aXNpb24gMjkwOTApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiBjbGFzcyBKU1hTTFRQcm9jZXNzb3IgOiBw
dWJsaWMgRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBKU1hTTFRQcm9jZXNzb3IoRXhlY1N0YXRl
ICpleGVjKTsKKyAgICBKU1hTTFRQcm9jZXNzb3IoSlNWYWx1ZSogcHJvdG90eXBlKTsKICAgICB+
SlNYU0xUUHJvY2Vzc29yKCk7CiAgICAgCiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNs
YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkBAIC01NSw5ICs1NSwxMCBAQCBwcml2
YXRlOgogCiBjbGFzcyBYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3JJbXAgOiBwdWJsaWMgRE9NT2Jq
ZWN0IHsKIHB1YmxpYzoKLSAgICBYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3JJbXAoRXhlY1N0YXRl
ICopOwotICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgSlNPYmplY3QgKmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IExpc3QgJmFyZ3MpIHsgcmV0dXJuIG5ldyBKU1hTTFRQcm9jZXNzb3IoZXhlYyk7
IH0KKyAgICBYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3JJbXAoRXhlY1N0YXRlKik7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwgSlNP
YmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBjb25zdCBMaXN0Jik7CiB9OwogCiAjZGVmaW5l
IEZPUl9FQUNIX0NMQVNTKG1hY3JvKSBcCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19i
aW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5o
CShyZXZpc2lvbiAyOTA5MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtNTUsMTUgKzU1LDIwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAq
LwogICAgIGNsYXNzIERPTU9iamVjdCA6IHB1YmxpYyBKU09iamVjdCB7CiAgICAgcHJvdGVjdGVk
OgotICAgICAgICBET01PYmplY3QoKQorICAgICAgICBET01PYmplY3QoSlNWYWx1ZSogcHJvdG90
eXBlKQorICAgICAgICAgICAgOiBKU09iamVjdChwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIC8vIERPTU9iamVjdCBkZXN0cnVjdGlvbiBpcyBub3QgdGhyZWFkLXNhZmUgYmVjYXVz
ZSBET01PYmplY3RzIHdyYXAgCiAgICAgICAgICAgICAvLyB1bnNhZmUgV2ViQ29yZSBET00gZGF0
YSBzdHJ1Y3R1cmVzLgogICAgICAgICAgICAgQ29sbGVjdG9yOjpjb2xsZWN0T25NYWluVGhyZWFk
T25seSh0aGlzKTsKICAgICAgICAgfQorCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICB2aXJ0dWFs
IH5ET01PYmplY3QoKTsKICNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAgRE9NT2JqZWN0
KCk7CiAgICAgfTsKIAogICAgIGNsYXNzIFNjcmlwdEludGVycHJldGVyIDogcHVibGljIEludGVy
cHJldGVyIHsKQEAgLTgxLDMwICs4NiwzMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB9OwogCiAg
ICAgLyoqCi0gICAgICogUmV0cmlldmUgZnJvbSBjYWNoZSwgb3IgY3JlYXRlLCBhIEtKUyBvYmpl
Y3QgYXJvdW5kIGEgRE9NIG9iamVjdAorICAgICAqIFJldHJpZXZlIGZyb20gY2FjaGUsIG9yIGNy
ZWF0ZSwgYSBKUyBvYmplY3QgYXJvdW5kIGEgRE9NIG9iamVjdAogICAgICAqLwotICAgIHRlbXBs
YXRlPGNsYXNzIERPTU9iaiwgY2xhc3MgS0pTRE9NT2JqPiBpbmxpbmUgSlNWYWx1ZSAqY2FjaGVE
T01PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBET01PYmoqIGRvbU9iaikKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBET01PYmosIGNsYXNzIEpTRE9NT2JqLCBjbGFzcyBKU0RPTU9ialByb3RvdHlwZT4gaW5s
aW5lIEpTVmFsdWUqIGNhY2hlRE9NT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgRE9NT2JqKiBkb21P
YmopCiAgICAgewogICAgICAgICBpZiAoIWRvbU9iaikKICAgICAgICAgICAgIHJldHVybiBqc051
bGwoKTsKICAgICAgICAgaWYgKERPTU9iamVjdCogcmV0ID0gU2NyaXB0SW50ZXJwcmV0ZXI6Omdl
dERPTU9iamVjdChkb21PYmopKQogICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgRE9N
T2JqZWN0KiByZXQgPSBuZXcgS0pTRE9NT2JqKGV4ZWMsIGRvbU9iaik7CisgICAgICAgIERPTU9i
amVjdCogcmV0ID0gbmV3IEpTRE9NT2JqKEpTRE9NT2JqUHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBk
b21PYmopOwogICAgICAgICBTY3JpcHRJbnRlcnByZXRlcjo6cHV0RE9NT2JqZWN0KGRvbU9iaiwg
cmV0KTsKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9CiAKICNpZiBFTkFCTEUoU1ZHKQogICAg
IC8qKgotICAgICAqIFJldHJpZXZlIGZyb20gY2FjaGUsIG9yIGNyZWF0ZSwgYSBLSlMgb2JqZWN0
IGFyb3VuZCBhIFNWRyBET00gb2JqZWN0CisgICAgICogUmV0cmlldmUgZnJvbSBjYWNoZSwgb3Ig
Y3JlYXRlLCBhIEpTIG9iamVjdCBhcm91bmQgYSBTVkcgRE9NIG9iamVjdAogICAgICAqLwotICAg
IHRlbXBsYXRlPGNsYXNzIERPTU9iaiwgY2xhc3MgS0pTRE9NT2JqPiBpbmxpbmUgSlNWYWx1ZSog
Y2FjaGVTVkdET01PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBET01PYmoqIGRvbU9iaiwgV2ViQ29y
ZTo6U1ZHRWxlbWVudCogY29udGV4dCkKKyAgICB0ZW1wbGF0ZTxjbGFzcyBET01PYmosIGNsYXNz
IEpTRE9NT2JqLCBjbGFzcyBKU0RPTU9ialByb3RvdHlwZT4gaW5saW5lIEpTVmFsdWUqIGNhY2hl
U1ZHRE9NT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgRE9NT2JqKiBkb21PYmosIFdlYkNvcmU6OlNW
R0VsZW1lbnQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBpZiAoIWRvbU9iaikKICAgICAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAgaWYgKERPTU9iamVjdCogcmV0ID0gU2NyaXB0
SW50ZXJwcmV0ZXI6OmdldERPTU9iamVjdChkb21PYmopKQogICAgICAgICAgICAgcmV0dXJuIHJl
dDsKLSAgICAgICAgRE9NT2JqZWN0KiByZXQgPSBuZXcgS0pTRE9NT2JqKGV4ZWMsIGRvbU9iaiwg
Y29udGV4dCk7CisgICAgICAgIERPTU9iamVjdCogcmV0ID0gbmV3IEpTRE9NT2JqKEpTRE9NT2Jq
UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBkb21PYmosIGNvbnRleHQpOwogICAgICAgICBTY3JpcHRJ
bnRlcnByZXRlcjo6cHV0RE9NT2JqZWN0KGRvbU9iaiwgcmV0KTsKICAgICAgICAgcmV0dXJuIHJl
dDsKICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19jc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2Nzcy5jcHAJKHJldmlzaW9uIDI5MDkwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfY3NzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
MTAgKzQ0LDEwIEBAIGNvbnN0IENsYXNzSW5mbyBKU1JHQkNvbG9yOjppbmZvID0geyAiUkcKIEBl
bmQKICovCiAKLUpTUkdCQ29sb3I6OkpTUkdCQ29sb3IoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBjb2xvcikgCi0gICAgOiBtX2NvbG9yKGNvbG9yKSAKLXsgCi0gICAgc2V0UHJvdG90eXBlKGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOworSlNSR0JDb2xv
cjo6SlNSR0JDb2xvcihKU1ZhbHVlKiBwcm90b3R5cGUsIHVuc2lnbmVkIGNvbG9yKQorICAgIDog
RE9NT2JqZWN0KHByb3RvdHlwZSkKKyAgICAsIG1fY29sb3IoY29sb3IpCit7CiB9CiAKIEpTUkdC
Q29sb3I6On5KU1JHQkNvbG9yKCkKQEAgLTc5LDcgKzc5LDcgQEAgSlNWYWx1ZSogSlNSR0JDb2xv
cjo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogSlNWYWx1ZSogZ2V0SlNSR0JDb2xvcihFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGNvbG9yKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZXF1YWxz
IGZvciBSR0JDb2xvciBzaW5jZSB0aGV5J3JlIG5vdCByZWZjb3VudGVkIG9iamVjdHMKLSAgICBy
ZXR1cm4gbmV3IEpTUkdCQ29sb3IoZXhlYywgY29sb3IpOworICAgIHJldHVybiBuZXcgSlNSR0JD
b2xvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpLCBjb2xv
cik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMva2pzX2Nzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2Nzcy5o
CShyZXZpc2lvbiAyOTA5MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2Nzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNs
YXNzIEpTUkdCQ29sb3IgOiBwdWJsaWMgS0pTOjpET01PYmplY3QgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgSlNSR0JDb2xvcihLSlM6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvbG9yKTsKKyAgICAg
ICAgSlNSR0JDb2xvcihLSlM6OkpTVmFsdWUqIHByb3RvdHlwZSwgdW5zaWduZWQgY29sb3IpOwog
ICAgICAgICB+SlNSR0JDb2xvcigpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OlBy
b3BlcnR5U2xvdCYpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwCShyZXZpc2lv
biAyOTA5MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2NiwxMCArMzY2LDEwIEBAIGNvbnN0IENsYXNzSW5mbyBKU0NsaXBib2FyZDo6
aW5mbyA9IHsgIkMKIEtKU19ERUZJTkVfUFJPVE9UWVBFKEpTQ2xpcGJvYXJkUHJvdG90eXBlKQog
S0pTX0lNUExFTUVOVF9QUk9UT1RZUEUoIkNsaXBib2FyZCIsIEpTQ2xpcGJvYXJkUHJvdG90eXBl
KQogCi1KU0NsaXBib2FyZDo6SlNDbGlwYm9hcmQoRXhlY1N0YXRlKiBleGVjLCBDbGlwYm9hcmQq
IGNsaXBib2FyZCkKLSAgICA6IG1faW1wbChjbGlwYm9hcmQpCitKU0NsaXBib2FyZDo6SlNDbGlw
Ym9hcmQoSlNWYWx1ZSogcHJvdG90eXBlLCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKKyAgICA6IERP
TU9iamVjdChwcm90b3R5cGUpCisgICAgLCBtX2ltcGwoY2xpcGJvYXJkKQogewotICAgIHNldFBy
b3RvdHlwZShKU0NsaXBib2FyZFByb3RvdHlwZTo6c2VsZihleGVjKSk7CiB9CiAKIEpTQ2xpcGJv
YXJkOjp+SlNDbGlwYm9hcmQoKQpAQCAtNTEzLDcgKzUxMyw3IEBAIEpTVmFsdWUqIEpTQ2xpcGJv
YXJkUHJvdG90eXBlRnVuY3Rpb25TZXQKIAogSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IENsaXBib2FyZCogb2JqKQogewotICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxDbGlwYm9hcmQs
IEpTQ2xpcGJvYXJkPihleGVjLCBvYmopOworICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxDbGlw
Ym9hcmQsIEpTQ2xpcGJvYXJkLCBKU0NsaXBib2FyZFByb3RvdHlwZT4oZXhlYywgb2JqKTsKIH0K
IAogQ2xpcGJvYXJkKiB0b0NsaXBib2FyZChKU1ZhbHVlKiB2YWwpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL2tqc19ldmVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L2tqc19ldmVudHMuaAkocmV2aXNpb24gMjkwOTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tq
c19ldmVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBjbGFzcyBKU0NsaXBib2FyZCA6IHB1YmxpYyBLSlM6OkRPTU9iamVjdCB7
CiAgICAgcHVibGljOgotICAgICAgICBKU0NsaXBib2FyZChLSlM6OkV4ZWNTdGF0ZSosIENsaXBi
b2FyZCopOworICAgICAgICBKU0NsaXBib2FyZChLSlM6OkpTVmFsdWUqIHByb3RvdHlwZSwgQ2xp
cGJvYXJkKik7CiAgICAgICAgIHZpcnR1YWwgfkpTQ2xpcGJvYXJkKCk7CiAKICAgICAgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEtKUzo6
SWRlbnRpZmllciYsIEtKUzo6UHJvcGVydHlTbG90Jik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19o
dG1sLmNwcAkocmV2aXNpb24gMjkwOTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1s
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBJbWFnZUNvbnN0cnVjdG9ySW1wOjpJbWFnZUNvbnN0
cnVjdG9ySW1wKEV4ZWNTdGF0ZSogZXhlYywgRG9jdW1lbnQqIGRvYykKLSAgICA6IG1fZG9jKGRv
YykKKyAgICA6IERPTU9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFBy
b3RvdHlwZSgpKQorICAgICwgbV9kb2MoZG9jKQogewotICAgIHNldFByb3RvdHlwZShleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsKIH0KIAogSlNPYmplY3Qq
IEltYWdlQ29uc3RydWN0b3JJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUqICBleGVjLCBjb25zdCBM
aXN0JiBsaXN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCShyZXZp
c2lvbiAyOTA5MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3NSwxMCArMTc1LDEwIEBAIGNvbnN0IENsYXNzSW5mbyBOYXZpZ2F0
b3I6OmluZm8gPSB7ICJOYXYKIEBlbmQKICovCiAKLU5hdmlnYXRvcjo6TmF2aWdhdG9yKEV4ZWNT
dGF0ZSAqZXhlYywgRnJhbWUgKmYpIAotICAgIDogbV9mcmFtZShmKQorTmF2aWdhdG9yOjpOYXZp
Z2F0b3IoSlNWYWx1ZSogcHJvdG90eXBlLCBGcmFtZSogZnJhbWUpCisgICAgOiBET01PYmplY3Qo
cHJvdG90eXBlKQorICAgICwgbV9mcmFtZShmcmFtZSkKIHsKLSAgICBzZXRQcm90b3R5cGUoZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7CiB9CiAKIGJvb2wg
TmF2aWdhdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTI0OSwxMCArMjQ5
LDkgQEAgdm9pZCBQbHVnaW5CYXNlOjpjYWNoZVBsdWdpbkRhdGFJZk5lY2VzcwogICAgIH0KIH0K
IAotUGx1Z2luQmFzZTo6UGx1Z2luQmFzZShFeGVjU3RhdGUgKmV4ZWMpCitQbHVnaW5CYXNlOjpQ
bHVnaW5CYXNlKEV4ZWNTdGF0ZSogZXhlYykKKyAgICA6IERPTU9iamVjdChleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQogewotICAgIHNldFByb3RvdHlwZShl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsKLQogICAgIGNh
Y2hlUGx1Z2luRGF0YUlmTmVjZXNzYXJ5KCk7CiAgICAgbV9wbHVnSW5DYWNoZVJlZkNvdW50Kys7
CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuaAkocmV2aXNpb24gMjkwOTAp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBOYXZpZ2F0b3IgOiBw
dWJsaWMgRE9NT2JqZWN0IHsKICAgcHVibGljOgotICAgIE5hdmlnYXRvcihFeGVjU3RhdGUgKmV4
ZWMsIFdlYkNvcmU6OkZyYW1lICpwKTsKKyAgICBOYXZpZ2F0b3IoSlNWYWx1ZSogcHJvdG90eXBl
LCBXZWJDb3JlOjpGcmFtZSopOworCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIEpT
VmFsdWUgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmaW5mbzsgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCShyZXZpc2lvbiAy
OTA5MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMCw3ICsyMDAsNyBAQCBjb25zdCBDbGFzc0luZm8gV2luZG93OjppbmZvID0geyAi
V2luZG93CiBAZW5kCiAqLwogCi1XaW5kb3c6OldpbmRvdyhET01XaW5kb3cqIHdpbmRvdywgSlNW
YWx1ZSogcHJvdG90eXBlKQorV2luZG93OjpXaW5kb3coSlNWYWx1ZSogcHJvdG90eXBlLCBET01X
aW5kb3cqIHdpbmRvdykKICAgICA6IEpTR2xvYmFsT2JqZWN0KHByb3RvdHlwZSkKICAgICAsIG1f
aW1wbCh3aW5kb3cpCiAgICAgLCBkKG5ldyBXaW5kb3dQcml2YXRlKQpAQCAtMjY1LDcgKzI2NSw3
IEBAIEpTVmFsdWUqIFdpbmRvdzo6cmV0cmlldmUoRnJhbWUqIGZyYW1lKQogV2ViQ29yZTo6SlNM
b2NhdGlvbiogV2luZG93Ojpsb2NhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFkLT5sb2MpCi0g
ICAgICAgIGQtPmxvYyA9IG5ldyBKU0xvY2F0aW9uKGltcGwoKS0+ZnJhbWUoKSk7CisgICAgICAg
IGQtPmxvYyA9IG5ldyBKU0xvY2F0aW9uKGpzTnVsbCgpLCBpbXBsKCktPmZyYW1lKCkpOwogICAg
IHJldHVybiBkLT5sb2M7CiB9CiAKQEAgLTQ3MSw3ICs0NzEsNyBAQCBKU1ZhbHVlICpXaW5kb3c6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0CiAgICAgICBpZiAoIWFsbG93c0FjY2Vzc0Zyb20oZXhl
YykpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgLy8gU3RvcmUgdGhlIG5h
dmlnYXRvciBpbiB0aGUgb2JqZWN0IHNvIHdlIGdldCB0aGUgc2FtZSBvbmUgZWFjaCB0aW1lLgot
ICAgICAgTmF2aWdhdG9yICpuID0gbmV3IE5hdmlnYXRvcihleGVjLCBpbXBsKCktPmZyYW1lKCkp
OworICAgICAgTmF2aWdhdG9yKiBuID0gbmV3IE5hdmlnYXRvcihleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpLCBpbXBsKCktPmZyYW1lKCkpOwogICAgICAgLy8g
RklYTUU6IHRoaXMgd2lsbCBtYWtlIHRoZSAibmF2aWdhdG9yIiBvYmplY3QgYWNjZXNzaWJsZSBm
cm9tIHdpbmRvd3MgdGhhdCBmYWlsCiAgICAgICAvLyB0aGUgc2VjdXJpdHkgY2hlY2sgdGhlIGZp
cnN0IHRpbWUsIGJ1dCBub3Qgc3Vic2VxdWVudCB0aW1lcywgc2VlbXMgd2VpcmQuCiAgICAgICBj
b25zdF9jYXN0PFdpbmRvdyAqPih0aGlzKS0+cHV0RGlyZWN0KCJuYXZpZ2F0b3IiLCBuLCBEb250
RGVsZXRlfFJlYWRPbmx5KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCShyZXZpc2lv
biAyOTA5MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBKU0V2
ZW50TGlzdGVuZXI7CiAgICAgY2xhc3MgSlNMb2NhdGlvbjsKICAgICBjbGFzcyBKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcjsKLSAgICBjbGFzcyBMb2NhdGlvbjsKICAgICBjbGFzcyBQYXVzZWRU
aW1lb3V0czsKICAgICBjbGFzcyBTY2hlZHVsZWRBY3Rpb247CiB9CkBAIC00OSwxMSArNDgsMTAg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgV2ViQ29yZSBKUyBiaW5k
aW5nIHdoaWNoIGRvZXMgbm90IGluaGVyaXQgZnJvbSBET01PYmplY3QKICAgY2xhc3MgV2luZG93
IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKICAgICB0eXBlZGVmIEpTR2xvYmFsT2JqZWN0IEJh
c2U7Ci0gICAgCi0gICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkpTTG9jYXRpb247CisKICAgICBm
cmllbmQgY2xhc3MgV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOwogICBwcm90ZWN0ZWQ6Ci0gICAg
V2luZG93KFdlYkNvcmU6OkRPTVdpbmRvdyosIEpTVmFsdWUqIHByb3RvdHlwZSk7CisgICAgV2lu
ZG93KEpTVmFsdWUqIHByb3RvdHlwZSwgV2ViQ29yZTo6RE9NV2luZG93Kik7CiAKICAgcHVibGlj
OgogICAgIHZpcnR1YWwgfldpbmRvdygpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyOTA5MCkKKysrIFdlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTMyMywxMSAr
MzIzLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkRvTm90Q2FjaGUifSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgICRjbGFzc05hbWUoJHBhc3NUeXBlKTtcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkpIHsK
LSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShLSlM6OkV4
ZWNTdGF0ZSosICRwYXNzVHlwZSwgU1ZHRWxlbWVudCogY29udGV4dCk7XG4iKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFt
ZShLSlM6OkV4ZWNTdGF0ZSosICRwYXNzVHlwZSk7XG4iKTsKLSAgICAgICAgfQorICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoS0pTOjpKU1ZhbHVlKiBwcm90b3R5
cGUsICRwYXNzVHlwZSIgLiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxD
bGFzc05hbWUpID8gIiwgU1ZHRWxlbWVudCogY29udGV4dCIgOiAiIikgLiIpO1xuIik7CiAgICAg
fQogCiAgICAgIyBEZXN0cnVjdG9yCkBAIC03ODAsNDAgKzc3NiwyNSBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgIG15ICRwb2RUeXBlID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiUE9EVHlwZSJ9OwogICAgIG15ICRwYXNzVHlwZSA9ICRwb2RUeXBlID8gIkpTU1ZH
UE9EVHlwZVdyYXBwZXI8JHBvZFR5cGU+KiIgOiAiJGltcGxDbGFzc05hbWUqIjsKIAorICAgIG15
ICRuZWVkc1NWR0NvbnRleHQgPSBJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1w
bENsYXNzTmFtZSk7CisgICAgbXkgJHBhcmVudE5lZWRzU1ZHQ29udGV4dCA9ICgkbmVlZHNTVkdD
b250ZXh0IGFuZCAkcGFyZW50Q2xhc3NOYW1lID1+IC9TVkcvKTsKKwogICAgICMgQ29uc3RydWN0
b3IKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDYWNoZSJ9
KSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1l
KCRwYXNzVHlwZSBpbXBsKVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDog
JHBhcmVudENsYXNzTmFtZShpbXBsLCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoKSlcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoJHtj
bGFzc05hbWV9UHJvdG90eXBlOjpzZWxmKCksIGltcGwpXG4iKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBteSAkbmVlZHNTVkdDb250ZXh0ID0gSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0
ZXIoJGltcGxDbGFzc05hbWUpOwotICAgICAgICBpZiAoJG5lZWRzU1ZHQ29udGV4dCkgewotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFzc05hbWUoRXhl
Y1N0YXRlKiBleGVjLCAkcGFzc1R5cGUgaW1wbCwgU1ZHRWxlbWVudCogY29udGV4dClcbiIpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNz
TmFtZX06OiRjbGFzc05hbWUoRXhlY1N0YXRlKiBleGVjLCAkcGFzc1R5cGUgaW1wbClcbiIpOwot
ICAgICAgICB9Ci0KKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRj
bGFzc05hbWUoSlNWYWx1ZSogcHJvdG90eXBlLCAkcGFzc1R5cGUgaW1wbCIgLiAoJG5lZWRzU1ZH
Q29udGV4dCA/ICIsIFNWR0VsZW1lbnQqIGNvbnRleHQiIDogIiIpIC4gIilcbiIpOwogICAgICAg
ICBpZiAoJGhhc1BhcmVudCkgewotICAgICAgICAgICAgaWYgKCRuZWVkc1NWR0NvbnRleHQgYW5k
ICRwYXJlbnRDbGFzc05hbWUgPX4gL1NWRy8pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoZXhlYywgaW1wbCwgY29udGV4dClcbiIp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoZXhlYywgaW1wbClcbiIpOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1l
KHByb3RvdHlwZSwgaW1wbCIgLiAoJHBhcmVudE5lZWRzU1ZHQ29udGV4dCA/ICIsIGNvbnRleHQi
IDogIiIpIC4gIilcbiIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCRuZWVk
c1NWR0NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6
IG1fY29udGV4dChjb250ZXh0KVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgLCBtX2ltcGwoaW1wbClcbiIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6IG1faW1wbChpbXBsKVxuIik7Ci0g
ICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICA6ICRwYXJlbnRDbGFzc05hbWUocHJvdG90eXBlKVxuIik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAsIG1fY29udGV4dChjb250ZXh0KVxuIikgaWYgJG5lZWRzU1ZH
Q29udGV4dDsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9pbXBsKGlt
cGwpXG4iKTsgIAogICAgICAgICB9Ci0gICAgfQogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ7
XG4iKTsKLQotICAgIGlmICghJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RD
YWNoZSJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldFByb3RvdHlwZSgk
e2NsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoZXhlYykpO1xuIik7CiAgICAgfQotCisgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CiAKICAgICAjIERlc3RydWN0b3IKQEAgLTEyMDUsMTEgKzExODYsMTEgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAg
ICAgICBpZiAoJHBvZFR5cGUpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBLSlM6OmNhY2hlU1ZHRE9NT2JqZWN0PEpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5
cGU+LCAkY2xhc3NOYW1lPihleGVjLCBvYmosIGNvbnRleHQpO1xuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gS0pTOjpjYWNoZVNWR0RPTU9iamVjdDxKU1NW
R1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPiwgJGNsYXNzTmFtZSwgJHtjbGFzc05hbWV9UHJvdG90
eXBlPihleGVjLCBvYmosIGNvbnRleHQpO1xuIik7CiAgICAgICAgIH0gZWxzaWYgKElzU1ZHVHlw
ZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEtKUzo6Y2FjaGVTVkdET01PYmplY3Q8JGlt
cGxDbGFzc05hbWUsICRjbGFzc05hbWU+KGV4ZWMsIG9iaiwgY29udGV4dCk7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBLSlM6OmNhY2hlU1ZHRE9NT2Jq
ZWN0PCRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NOYW1lLCAke2NsYXNzTmFtZX1Qcm90b3R5cGU+KGV4
ZWMsIG9iaiwgY29udGV4dCk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBLSlM6OmNhY2hlRE9NT2JqZWN0PCRpbXBsQ2xh
c3NOYW1lLCAkY2xhc3NOYW1lPihleGVjLCBvYmopO1xuIik7CisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICByZXR1cm4gS0pTOjpjYWNoZURPTU9iamVjdDwkaW1wbENsYXNzTmFt
ZSwgJGNsYXNzTmFtZSwgJHtjbGFzc05hbWV9UHJvdG90eXBlPihleGVjLCBvYmopO1xuIik7CiAg
ICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKICAgICB9CkBAIC0x
NzUwLDggKzE3MzEsOCBAQCBteSAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKIGNsYXNzICR7Y2xh
c3NOYW1lfUNvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7CiBwdWJsaWM6CiAgICAgJHtj
bGFzc05hbWV9Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQorICAgICAgICA6IERPTU9iamVj
dChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKQogICAgIHsK
LSAgICAgICAgc2V0UHJvdG90eXBlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0
UHJvdG90eXBlKCkpOwogICAgICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgJHtwcm90b0NsYXNzTmFtZX06OnNlbGYoZXhlYyksIE5vbmUpOwogICAgIH0KICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsK
</data>
<flag name="review"
          id="7946"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>