<?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>154314</bug_id>
          
          <creation_ts>2016-02-16 15:22:51 -0800</creation_ts>
          <short_desc>Implement Proxy.[[GetOwnProperty]]</short_desc>
          <delta_ts>2020-04-08 16:34:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=200560</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>154081</dependson>
          <blocked>35731</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1165353</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-16 15:22:51 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165701</commentid>
    <comment_count>1</comment_count>
      <attachid>271582</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-17 13:02:55 -0800</bug_when>
    <thetext>Created attachment 271582
it begins

this patch still has the contents of the [[Get]] patch until it lands</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165754</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-17 14:33:19 -0800</bug_when>
    <thetext>*** Bug 154353 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165856</commentid>
    <comment_count>3</comment_count>
      <attachid>271616</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-17 19:06:01 -0800</bug_when>
    <thetext>Created attachment 271616
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165857</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 19:07:43 -0800</bug_when>
    <thetext>Attachment 271616 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSObject.h:720:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:720:  The parameter name &quot;callData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:720:  The parameter name &quot;callType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:720:  The parameter name &quot;ident&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:1477:  The parameter name &quot;descriptor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 5 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165858</commentid>
    <comment_count>5</comment_count>
      <attachid>271616</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-17 19:08:52 -0800</bug_when>
    <thetext>Comment on attachment 271616
patch

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

&gt; Source/JavaScriptCore/runtime/FunctionPrototype.cpp:167
&gt; +    if (targetObject-&gt;hasOwnProperty(exec, exec-&gt;propertyNames().length)) {
&gt; +        if (exec-&gt;hadException())
&gt; +            return JSValue::encode(jsUndefined());
&gt; +
&gt;          // a. Let L be the length property of Target minus the length of A.
&gt;          // b. Set the length own property of F to either 0 or L, whichever is larger.
&gt; -        unsigned targetLength = (unsigned)target.get(exec, exec-&gt;propertyNames().length).asNumber();
&gt; -        if (targetLength &gt; numBoundArgs)
&gt; -            length = targetLength - numBoundArgs;
&gt; +        JSValue lengthValue = target.get(exec, exec-&gt;propertyNames().length);
&gt; +        if (lengthValue.isNumber()) {
&gt; +            unsigned targetLength = (unsigned)lengthValue.asNumber();
&gt; +            if (targetLength &gt; numBoundArgs)
&gt; +                length = targetLength - numBoundArgs;
&gt; +        }

I added this here because it&apos;s wrong w.r.t to the spec.
There is a kangax test that tests this in combination with Proxy.[[GetOwnProperty]].
To make us pass that test, I need to also implement Proxy.[[Call]]. I can wait
or open another bug for this if anybody objects about having it in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166134</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-18 12:29:51 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/196772</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166167</commentid>
    <comment_count>7</comment_count>
      <attachid>271689</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-18 13:48:18 -0800</bug_when>
    <thetext>Created attachment 271689
follow up fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166171</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-18 13:56:30 -0800</bug_when>
    <thetext>follow up landed in:
http://trac.webkit.org/changeset/196775</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167515</commentid>
    <comment_count>9</comment_count>
      <attachid>271616</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-23 13:30:24 -0800</bug_when>
    <thetext>Comment on attachment 271616
patch

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

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:2942
&gt; +    if (method.isUndefined() || method.isNull())
&gt; +        return jsUndefined();
&gt; +
&gt; +    if (!method.isCell()) {
&gt; +        throwVMTypeError(exec, errorMessage);
&gt; +        return jsUndefined();
&gt; +    }

I would have written:

    if (!method.isCell()) {
        if (method.isUndefinedOrNull())
            return jsUndefined();
        return throwVMTypeError(exec, errorMessage);
    }

Having one less branch seems slightly more elegant to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167522</commentid>
    <comment_count>10</comment_count>
      <attachid>271616</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-23 13:44:01 -0800</bug_when>
    <thetext>Comment on attachment 271616
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/FunctionPrototype.cpp:167
&gt;&gt; +    if (targetObject-&gt;hasOwnProperty(exec, exec-&gt;propertyNames().length)) {
&gt;&gt; +        if (exec-&gt;hadException())
&gt;&gt; +            return JSValue::encode(jsUndefined());
&gt;&gt; +
&gt;&gt;          // a. Let L be the length property of Target minus the length of A.
&gt;&gt;          // b. Set the length own property of F to either 0 or L, whichever is larger.
&gt;&gt; -        unsigned targetLength = (unsigned)target.get(exec, exec-&gt;propertyNames().length).asNumber();
&gt;&gt; -        if (targetLength &gt; numBoundArgs)
&gt;&gt; -            length = targetLength - numBoundArgs;
&gt;&gt; +        JSValue lengthValue = target.get(exec, exec-&gt;propertyNames().length);
&gt;&gt; +        if (lengthValue.isNumber()) {
&gt;&gt; +            unsigned targetLength = (unsigned)lengthValue.asNumber();
&gt;&gt; +            if (targetLength &gt; numBoundArgs)
&gt;&gt; +                length = targetLength - numBoundArgs;
&gt;&gt; +        }
&gt; 
&gt; I added this here because it&apos;s wrong w.r.t to the spec.
&gt; There is a kangax test that tests this in combination with Proxy.[[GetOwnProperty]].
&gt; To make us pass that test, I need to also implement Proxy.[[Call]]. I can wait
&gt; or open another bug for this if anybody objects about having it in this patch.

I added this here because it&apos;s wrong w.r.t to the spec.
There is a kangax test that tests this in combination with Proxy.[[GetOwnProperty]].
To make us pass that test, I need to also implement Proxy.[[Call]]. I can wait
or open another bug for this if anybody objects about having it in this patch.

&gt;&gt; Source/JavaScriptCore/runtime/JSObject.cpp:2942
&gt;&gt; +    }
&gt; 
&gt; I would have written:
&gt; 
&gt;     if (!method.isCell()) {
&gt;         if (method.isUndefinedOrNull())
&gt;             return jsUndefined();
&gt;         return throwVMTypeError(exec, errorMessage);
&gt;     }
&gt; 
&gt; Having one less branch seems slightly more elegant to me.

I agree.
I&apos;ll upload a fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167523</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-23 13:44:44 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 271616 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=271616&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/runtime/FunctionPrototype.cpp:167
&gt; &gt;&gt; +    if (targetObject-&gt;hasOwnProperty(exec, exec-&gt;propertyNames().length)) {
&gt; &gt;&gt; +        if (exec-&gt;hadException())
&gt; &gt;&gt; +            return JSValue::encode(jsUndefined());
&gt; &gt;&gt; +
&gt; &gt;&gt;          // a. Let L be the length property of Target minus the length of A.
&gt; &gt;&gt;          // b. Set the length own property of F to either 0 or L, whichever is larger.
&gt; &gt;&gt; -        unsigned targetLength = (unsigned)target.get(exec, exec-&gt;propertyNames().length).asNumber();
&gt; &gt;&gt; -        if (targetLength &gt; numBoundArgs)
&gt; &gt;&gt; -            length = targetLength - numBoundArgs;
&gt; &gt;&gt; +        JSValue lengthValue = target.get(exec, exec-&gt;propertyNames().length);
&gt; &gt;&gt; +        if (lengthValue.isNumber()) {
&gt; &gt;&gt; +            unsigned targetLength = (unsigned)lengthValue.asNumber();
&gt; &gt;&gt; +            if (targetLength &gt; numBoundArgs)
&gt; &gt;&gt; +                length = targetLength - numBoundArgs;
&gt; &gt;&gt; +        }
&gt; &gt; 
&gt; &gt; I added this here because it&apos;s wrong w.r.t to the spec.
&gt; &gt; There is a kangax test that tests this in combination with Proxy.[[GetOwnProperty]].
&gt; &gt; To make us pass that test, I need to also implement Proxy.[[Call]]. I can wait
&gt; &gt; or open another bug for this if anybody objects about having it in this patch.
&gt; 
&gt; I added this here because it&apos;s wrong w.r.t to the spec.
&gt; There is a kangax test that tests this in combination with
&gt; Proxy.[[GetOwnProperty]].
&gt; To make us pass that test, I need to also implement Proxy.[[Call]]. I can
&gt; wait
&gt; or open another bug for this if anybody objects about having it in this
&gt; patch.
I definitely didn&apos;t mean to post this comment again. I think bugzilla cached my comment from before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167524</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-23 13:45:10 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 271616 [details]
&gt; patch
&gt; &gt;&gt; Source/JavaScriptCore/runtime/JSObject.cpp:2942
&gt; &gt;&gt; +    }
&gt; &gt; 
&gt; &gt; I would have written:
&gt; &gt; 
&gt; &gt;     if (!method.isCell()) {
&gt; &gt;         if (method.isUndefinedOrNull())
&gt; &gt;             return jsUndefined();
&gt; &gt;         return throwVMTypeError(exec, errorMessage);
&gt; &gt;     }
&gt; &gt; 
&gt; &gt; Having one less branch seems slightly more elegant to me.
&gt; 
&gt; I agree.
&gt; I&apos;ll upload a fix.

the bug for the fix:
https://bugs.webkit.org/show_bug.cgi?id=154603</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271582</attachid>
            <date>2016-02-17 13:02:55 -0800</date>
            <delta_ts>2016-02-17 19:06:01 -0800</delta_ts>
            <desc>it begins</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>95244</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2Njc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBA
QAorMjAxNi0wMi0xNiAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBJbXBsZW1lbnQgUHJveHkgW1tHZXRdXQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MDgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIFByb3h5T2JqZWN0IGFuZCBQ
cm94eUNvbnN0cnVjdG9yLiBUaGVpcgorICAgICAgICBpbXBsZW1lbnRhdGlvbnMgYXJlIHN0cmFp
Z2h0IGZvcndhcmQgYW5kIGZvbGxvdyB0aGUgc3BlYy4KKyAgICAgICAgVGhlIGxhcmdlc3QgY2hh
bmdlIGluIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGEgc2Vjb25kIHBhcmFtZXRlcgorICAgICAgICB0
byBQcm9wZXJ0eVNsb3QncyBjb25zdHJ1Y3RvciB0aGF0IHNwZWNpZmllcyB0aGUgaW50ZXJuYWwg
bWV0aG9kIHR5cGUgb2YKKyAgICAgICAgdGhlIGdldE93blByb3BlcnR5U2xvdCBpbnF1aXJ5LiBX
ZSB1c2UgZ2V0T3duUHJvcGVydHlTbG90IHRvIAorICAgICAgICBpbXBsZW1lbnQgbW9yZSB0aGFu
IG9uZSBJbnRlcm5hbCBNZXRob2QgaW4gdGhlIHNwZWMuIEJlY2F1c2UgCisgICAgICAgIG9mIHRo
aXMsIHdlIG5lZWQgSW50ZXJuYWxNZXRob2RUeXBlIHRvIGdpdmUgdXMgY29udGV4dCBhYm91dCAK
KyAgICAgICAgd2hpY2ggSW50ZXJuYWwgTWV0aG9kIHdlJ3JlIGV4ZWN1dGluZy4gU3BlY2lmaWNh
bGx5LCBQcm94eSB3aWxsIAorICAgICAgICBjYWxsIGludG8gZGlmZmVyZW50IGhhbmRsZXJzIGJh
c2VkIG9uIHRoaXMgaW5mb3JtYXRpb24uCisKKyAgICAgICAgSW50ZXJuYWxNZXRob2RUeXBlIGlz
IGFuIGVudW0gd2l0aCB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgICAgICAgLSBHZXQKKyAgICAg
ICAgICBUaGlzIGNvcnJlc3BvbmRzIHRvIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIGluIHRoZSBz
cGVjLgorICAgICAgICAtIEdldE93blByb3BlcnR5CisgICAgICAgICAgVGhpcyBjb3JyZXNwb25k
cyB0byBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIGluIHRoZSBzcGVjLgorICAg
ICAgICAtIEhhc1Byb3BlcnR5CisgICAgICAgICAgVGhpcyBjb3JyZXNwb25kcyB0byBbW0hhc1By
b3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIGluIHRoZSBzcGVjLgorICAgICAgICAtIFZNSW5xdWly
eQorICAgICAgICAgIFRoaXMgaXMgYmFzaWNhbGx5IGV2ZXJ5dGhpbmcgZWxzZSB0aGF0IGlzbid0
IG9uZSBvZiB0aGUgYWJvdmUKKyAgICAgICAgICB0eXBlcy4gVGhpcyB2YWx1ZSBhbHNvIG1hbmRh
dGVzIHRoYXQgZ2V0T3duUHJvcGVydHlTbG90IGRvZXMKKyAgICAgICAgICBub3QgcGVyZm9ybSBh
bnkgdXNlciBvYnNlcnZhYmxlIGVmZmVjdHMuIEkuZSwgaXQgY2FuJ3QgY2FsbAorICAgICAgICAg
IGEgSlMgZnVuY3Rpb24uCisKKyAgICAgICAgVGhlIG90aGVyIG5vbi1WTUlucXVpcnkgSW50ZXJu
YWxNZXRob2RUeXBlcyBhcmUgYWxsb3dlZCB0byBwZXJmb3JtIHVzZXIKKyAgICAgICAgb2JzZXJ2
YWJsZSBlZmZlY3RzLiBJLmUsIGluIGZ1dHVyZSBwYXRjaGVzLCBQcm94eU9iamVjdCB3aWxsIGlt
cGxlbWVudAorICAgICAgICBJbnRlcm5hbE1ldGhvZFR5cGU6Okhhc1Byb3BlcnR5IGFuZCBJbnRl
cm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5LCB3aGljaCB3aWxsIGJvdGggYmUgZGVmaW5l
ZAorICAgICAgICB0byBjYWxsIHVzZXIgZGVmaW5lZCBKUyBmdW5jdGlvbnMsIHdoaWNoIGNsZWFy
bHkgaGF2ZSB0aGUgcmlnaHQgdG8gcGVyZm9ybQorICAgICAgICB1c2VyIG92ZXJzYWJsZSBlZmZl
Y3RzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBnZXRPd25Qcm9wZXJ0eVNsb3Qg
b2YgUHJveHlPYmplY3QgdW5kZXIKKyAgICAgICAgSW50ZXJuYWxNZXRob2RUeXBlOjpHZXQuIAor
CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpT
Qzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46OnN0YXRpY0Z1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwOgorICAgICAgICAo
SlNDOjpEZWJ1Z2dlclNjb3BlOjpjYXVnaHRWYWx1ZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50U2xv
d1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToK
KyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0
UHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6
OmdldCk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJv
cGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlW
aWV3V2l0aEFyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZWdFeHBNYXRjaGVz
QXJyYXlTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6bW9kdWxlUmVj
b3JkU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Om1vZHVsZU5hbWVz
cGFjZU9iamVjdFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojpwcm94
eU9iamVjdFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp3YXNtTW9k
dWxlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Omhhc093blByb3Bl
cnR5Rm9yV3JpdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHA6
CisgICAgICAgIChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdCk6
CisgICAgICAgICogcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OmNhbGxiYWNrR2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpXYWxrZXI6OndhbGspOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FsY3VsYXRlZENsYXNzTmFtZSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3ROb25JbmRleEFjY2Vzc29yKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6Omhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc093blByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6Cisg
ICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
RGlyZWN0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0KToKKyAgICAgICAgKiBy
dW50aW1lL0pTU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjphYnN0cmFjdEFjY2Vzcyk6CisgICAg
ICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnRvUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAgIChK
U0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFBy
b3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAg
ICAgICAoSlNDOjphdHRyaWJ1dGVzRm9yU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlTbG90OjpQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmlzQ2Fj
aGVhYmxlR2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90Ojppc0NhY2hlYWJsZUN1
c3RvbSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlKToK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpkaXNhYmxlQ2FjaGluZyk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5U2xvdDo6Z2V0VmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlDb25z
dHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpQcm94eUNvbnN0cnVjdG9yOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpQcm94eUNvbnN0cnVjdG9yOjpQcm94eUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKEpTQzo6UHJveHlDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RQcm94eU9iamVjdCk6CisgICAgICAgIChKU0M6OlByb3h5Q29uc3Ry
dWN0b3I6OmdldENvbnN0cnVjdERhdGEpOgorICAgICAgICAoSlNDOjpQcm94eUNvbnN0cnVjdG9y
OjpnZXRDYWxsRGF0YSk6CisgICAgICAgICogcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpQcm94eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
UHJveHlPYmplY3Q6OlByb3h5T2JqZWN0KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5R2V0KToKKyAgICAgICAg
KEpTQzo6UHJveHlPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdENvbW1vbik6CisgICAgICAgIChK
U0M6OlByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpQcm94
eU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6OlByb3h5
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0Lmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6UHJveHlPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlByb3h5T2Jq
ZWN0Ojp0YXJnZXQpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6aGFuZGxlcik6CisgICAg
ICAgICogcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9i
amVjdEdldCk6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6bmFtZUZyb21DYWxsZWUpOgor
ICAgICAgICAqIHRlc3RzL2VzNi55YW1sOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wcm94eS1i
YXNpYy5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAobGV0LmhhbmRsZXIu
Z2V0IG51bGwpOgorICAgICAgICAoZ2V0IGxldCk6CisgICAgICAgIChsZXQuaGFuZGxlci5nZXQg
c3dpdGNoKToKKyAgICAgICAgKGxldC5oYW5kbGVyKToKKyAgICAgICAgKGxldC50aGVUYXJnZXQu
Z2V0IHgpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wcm94eS1pbi1wcm90by1jaGFpbi5qczog
QWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wcm94eS1v
Zi1hLXByb3h5LmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0aHJvdy5u
ZXcuRXJyb3IuKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcHJveHktcHJvcGVydHktZGVzY3Jp
cHRvci5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoc2V0IE9iamVjdCk6
CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V0FT
TU1vZHVsZVBhcnNlcjo6Z2V0SW1wb3J0ZWRWYWx1ZSk6CisKIDIwMTYtMDItMTYgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIEpTRE9NV2luZG93
OjpnZXRPd25Qcm9wZXJ0eVNsb3Qgc2hvdWxkIGp1c3QgY2FsbCBnZXRTdGF0aWNQcm9wZXJ0eVNs
b3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NjY3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNzM2LDYgKzczNiw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMK
ICAgICBydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAKICAgICBydW50aW1lL1Byb3BlcnR5VGFibGUu
Y3BwCiAgICAgcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCisgICAgcnVudGltZS9Qcm94eUNvbnN0
cnVjdG9yLmNwcAorICAgIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwCiAgICAgcnVudGltZS9SZWZs
ZWN0T2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvUmVnRXhwLmNwcAogICAgIHJ1bnRpbWUvUmVnRXhw
Q2FjaGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTk2Njc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0
KEpTQ2VsCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzU3RhdGlj
RnVuY3Rpb25zVGFibGUqIHN0YXRpY0Z1bmN0aW9ucyA9IGpzQ2xhc3MtPnN0YXRpY0Z1bmN0aW9u
cyhleGVjKSkgewogICAgICAgICAgICAgICAgIGlmIChTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRy
eSA9IHN0YXRpY0Z1bmN0aW9ucy0+Z2V0KG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFBy
b3BlcnR5U2xvdCBnZXRTbG90KHRoaXNPYmplY3QpOworICAgICAgICAgICAgICAgICAgICBQcm9w
ZXJ0eVNsb3QgZ2V0U2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6Vk1JbnF1aXJ5KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFBhcmVudDo6Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZ2V0U2xvdCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFyZW50OjpwdXQodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChl
bnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkpCkBAIC02MDUs
NyArNjA1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OgogICAg
IEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmogPSBhc0NhbGxiYWNrT2JqZWN0KHRoaXNWYWx1ZSk7
CiAgICAgCiAgICAgLy8gQ2hlY2sgZm9yIGNhY2hlZCBvciBvdmVycmlkZSBwcm9wZXJ0eS4KLSAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdDIodGhpc09iaik7CisgICAgUHJvcGVydHlTbG90IHNsb3QyKHRo
aXNPYmosIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwogICAg
IGlmIChQYXJlbnQ6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QyKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzbG90Mi5nZXRWYWx1
ZShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE5NjY3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzE4LDYg
KzEzMTgsMTAgQEAKIAkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9u
bWVudC5jcHAgKi87IH07CiAJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExl
eGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmly
b25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5NjAw
MkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTc5QjAwQ0JDMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5QjAwQ0I4MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmNwcCAqLzsg
fTsKKwkJNzlCMDBDQkQxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5Q29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QjAwQ0I5MUM2QUIw
N0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzlCMDBDQkUxQzZBQjA3RTAwODhDNjVEIC8qIFBy
b3h5T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5QjAwQ0JBMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5jcHAgKi87IH07CisJ
CTc5QjAwQ0JGMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlCMDBDQkIxQzZBQjA3RTAwODhDNjVE
IC8qIFByb3h5T2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzlDNEIxNUQxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlh
YmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzlDNEIxNUIxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZh
cmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwICovOyB9OwogCQk3OUM0QjE1RTFCQTIxNThGMDBG
RDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIxNUMxQkEyMTU4RjAw
RkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUNGQzZGMDFDMzNC
MTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDRkM2RUYxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENS
YW5nZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMzUyNSw2ICszNTI5LDEwIEBACiAJCTc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0ds
b2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExl
eGljYWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTlFRjdD
MzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzUENUb09yaWdpbk1hcC5oOyBwYXRoID0gYjMvQjNQQ1RvT3JpZ2lu
TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5QjAwQ0I4MUM2QUIwN0UwMDg4
QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFByb3h5Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3OUIwMENCOTFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm94eUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5QjAwQ0JBMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9i
amVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm94eU9iamVj
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5QjAwQ0JCMUM2QUIwN0UwMDg4
QzY1RCAvKiBQcm94eU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
cm94eU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1QjFCQTIx
NThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJs
ZVByZXNlcnZhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVBy
ZXNlcnZhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIx
NUMxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJl
c2VydmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDRkM2RUYx
QzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTExJbnRQQ1Jhbmdlcy5oOyBwYXRoID0gbGxpbnQvTExJbnRQQ1Jhbmdlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjAwOCw2ICs2MDE2LDEwIEBACiAJCQkJ
NjVDMDJGQkIwNjM3NDYyQTAwM0U3RUU2IC8qIFByb3RlY3QuaCAqLywKIAkJCQkxNEQ4NDRBMjE2
QUEyQzcwMDBBNjVBRjAgLyogUHJvdG90eXBlTWFwLmNwcCAqLywKIAkJCQkxNEQ4NDRBMzE2QUEy
QzcwMDBBNjVBRjAgLyogUHJvdG90eXBlTWFwLmggKi8sCisJCQkJNzlCMDBDQjgxQzZBQjA3RTAw
ODhDNjVEIC8qIFByb3h5Q29uc3RydWN0b3IuY3BwICovLAorCQkJCTc5QjAwQ0I5MUM2QUIwN0Uw
MDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmggKi8sCisJCQkJNzlCMDBDQkExQzZBQjA3RTAw
ODhDNjVEIC8qIFByb3h5T2JqZWN0LmNwcCAqLywKKwkJCQk3OUIwMENCQjFDNkFCMDdFMDA4OEM2
NUQgLyogUHJveHlPYmplY3QuaCAqLywKIAkJCQkwRjU3ODBBMTE4RkUxRTk4MDAxRTcyRDkgLyog
UHVyZU5hTi5oICovLAogCQkJCTBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJ
bmRleE1vZGUuaCAqLywKIAkJCQkxNDdCODQ2MjBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVy
dHlTbG90LmggKi8sCkBAIC03MDYxLDcgKzcwNzMsOSBAQAogCQkJCTBGRUM4NTc2MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5MzFDMEQ2N0VF
MDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ1NzAzOTFC
RTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTc5QjAwQ0JEMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFw
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3OUIwMENCRjFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5MkNCMzRBMUM0RUVENUMwMEQxM0FGMyAvKiBQ
Q1RvQ29kZU9yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDRkM2RjAxQzMzQjEwMDAw
Qzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RDVDRDVCMUMx
MTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTg5
NTMsNiArODk2Nyw3IEBACiAJCQkJQTc3QTQyM0YxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2Ji
ZXJpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyNDExN0EwQkJGRDAwQThEQjgxIC8q
IERGR0Nsb2JiZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQzFGMUExQjg2OEU3OTAw
QUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5
QjAwQ0JDMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMDQzOTZEMUIwM0RDMEIwMDk1OThCNyAvKiBERkdDb21iaW5lZExpdmVuZXNz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlEMTZCNzJBMDgwMDVERjk1QiAvKiBERkdD
b21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMzExNzBENDBCRjAwQkI3MjJDIC8q
IERGR0NvbW1vbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MDE0LDYgKzkwMjksNyBAQAog
CQkJCTQ2RDREQ0JEMUM1QUIyRDUwMEQ4RDMyMSAvKiBKU0JvdW5kU2xvdEJhc2VGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVs
dGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEy
RTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3OUIw
MENCRTFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzkyQ0IzNDkxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVERjk1QiAvKiBERkdOb2RlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQjM4NzhGMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCShyZXZpc2lvbiAxOTY2NzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCBKU1ZhbHVlIERlYnVnZ2VyU2NvcGU6OmNhdWdo
dFZhbHVlKEV4ZWNTCiAgICAgU3ltYm9sVGFibGUqIGNhdGNoU3ltYm9sVGFibGUgPSBjYXRjaEVu
dmlyb25tZW50LT5zeW1ib2xUYWJsZSgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNhdGNoU3ltYm9s
VGFibGUtPnNpemUoKSA9PSAxKTsKICAgICBQcm9wZXJ0eU5hbWUgZXJyb3JOYW1lKGNhdGNoU3lt
Ym9sVGFibGUtPmJlZ2luKGNhdGNoU3ltYm9sVGFibGUtPm1fbG9jayktPmtleS5nZXQoKSk7Ci0g
ICAgUHJvcGVydHlTbG90IHNsb3QobV9zY29wZS5nZXQoKSk7CisgICAgUHJvcGVydHlTbG90IHNs
b3QobV9zY29wZS5nZXQoKSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7
CiAgICAgYm9vbCBzdWNjZXNzID0gY2F0Y2hFbnZpcm9ubWVudC0+Z2V0T3duUHJvcGVydHlTbG90
KGNhdGNoRW52aXJvbm1lbnQsIGV4ZWMsIGVycm9yTmFtZSwgc2xvdCk7CiAgICAgUkVMRUFTRV9B
U1NFUlQoc3VjY2VzcyAmJiBzbG90LmlzVmFsdWUoKSk7CiAgICAgcmV0dXJuIHNsb3QuZ2V0VmFs
dWUoZXhlYywgZXJyb3JOYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTk2Njc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODc3LDcgKzg3Nyw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3Jh
bUV4ZWMKICAgICAgICAgICAgICAgICBzd2l0Y2ggKEpTT05QUGF0aFtpXS5tX3R5cGUpIHsKICAg
ICAgICAgICAgICAgICBjYXNlIEpTT05QUGF0aEVudHJ5VHlwZURvdDogewogICAgICAgICAgICAg
ICAgICAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdChnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlT
bG90IHNsb3QoZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
R2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5nZXRQcm9w
ZXJ0eVNsb3QoY2FsbEZyYW1lLCBKU09OUFBhdGhbaV0ubV9wYXRoRW50cnlOYW1lLCBzbG90KSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihj
YWxsRnJhbWUsIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBKU09OUFBh
dGhbaV0ubV9wYXRoRW50cnlOYW1lKSk7CkBAIC0xMjI1LDcgKzEyMjUsNyBAQCBKU1ZhbHVlIElu
dGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgICAgIEpTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50KiBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNHbG9iYWxPYmpl
Y3QqPih2YXJpYWJsZU9iamVjdCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtVmFyaWFibGVzOyArK2kpIHsKICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT52YXJpYWJsZShpKTsKLSAg
ICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGdsb2JhbExleGljYWxFbnZpcm9ubWVudCk7Cisg
ICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQsIFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwogICAgICAgICAgICAg
aWYgKEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZ2xvYmFs
TGV4aWNhbEVudmlyb25tZW50LCBjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgewogICAgICAgICAg
ICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlv
bihjYWxsRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihjYWxsRnJh
bWUsIG1ha2VTdHJpbmcoIkNhbid0IGNyZWF0ZSBkdXBsaWNhdGUgZ2xvYmFsIHZhcmlhYmxlIGlu
IGV2YWw6ICciLCBTdHJpbmcoaWRlbnQuaW1wbCgpKSwgIiciKSkpKTsKQEAgLTEyMzQsNyArMTIz
NCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKIAogICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bUZ1bmN0aW9uczsgKytpKSB7CiAgICAgICAgICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7
Ci0gICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQp
OworICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50
LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKICAgICAgICAg
ICAgIGlmIChKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KGds
b2JhbExleGljYWxFbnZpcm9ubWVudCwgY2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBzbG90
KSkgewogICAgICAgICAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKGNhbGxGcmFtZS0+dm0o
KS50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVR5
cGVFcnJvcihjYWxsRnJhbWUsIG1ha2VTdHJpbmcoIkNhbid0IGNyZWF0ZSBkdXBsaWNhdGUgZ2xv
YmFsIHZhcmlhYmxlIGluIGV2YWw6ICciLCBTdHJpbmcoZnVuY3Rpb24tPm5hbWUoKS5pbXBsKCkp
LCAiJyIpKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAxOTY2NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHN0dWJJbmZvLT50b29rU2xv
d1BhdGggPSB0cnVlOwogICAgIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGJhc2UpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7CisgICAgUHJvcGVy
dHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
R2V0KTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlk
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQs
IHNsb3QpKTsKIH0KQEAgLTE2OSw3ICsxNjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkdlCiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7
Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlVmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAg
IElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOwog
fQpAQCAtMTgxLDcgKzE4MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2UKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlk
KTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwotICAg
IFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFz
ZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICAKICAg
ICBib29sIGhhc1Jlc3VsdCA9IGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQs
IHNsb3QpOwogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKCkpCkBAIC0yMDMsNyAr
MjAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbgogICAgIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlKTsKIAogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCBrZXkpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UpOworICAgIFByb3BlcnR5U2xv
dCBzbG90KGJhc2UsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0
eSk7CiAgICAgYm9vbCByZXN1bHQgPSBhc09iamVjdChiYXNlKS0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIGlkZW50LCBzbG90KTsKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChhY2Nlc3NUeXBlID09
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKQEAgLTE4ODUsNyArMTg4NSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAvLyBNb2R1bGVWYXIgaXMgYWx3YXlz
IGNvbnZlcnRlZCB0byBDbG9zdXJlVmFyIGZvciBnZXRfZnJvbV9zY29wZS4KICAgICBBU1NFUlQo
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpICE9IE1vZHVsZVZhcik7CiAKLSAgICBQcm9wZXJ0eVNs
b3Qgc2xvdChzY29wZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAgIGlmICghc2NvcGUtPmdldFByb3BlcnR5
U2xvdChleGVjLCBpZGVudCwgc2xvdCkpIHsKICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2
ZU1vZGUoKSA9PSBUaHJvd0lmTm90Rm91bmQpCiAgICAgICAgICAgICB2bS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KSk7CkBAIC0x
OTM3LDcgKzE5MzcsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShF
CiAgICAgICAgICYmIGpzRHluYW1pY0Nhc3Q8SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQqPihz
Y29wZSkKICAgICAgICAgJiYgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSAhPSBJbml0
aWFsaXphdGlvbikgewogICAgICAgICAvLyBXaGVuIHdlIGNhbid0IHN0YXRpY2FsbHkgcHJvdmUg
d2UgbmVlZCBhIFREWiBjaGVjaywgd2UgbXVzdCBwZXJmb3JtIHRoZSBjaGVjayBvbiB0aGUgc2xv
dyBwYXRoLgotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSk7CisgICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90KHNjb3BlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0
KTsKICAgICAgICAgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xv
dChzY29wZSwgZXhlYywgaWRlbnQsIHNsb3QpOwogICAgICAgICBpZiAoc2xvdC5nZXRWYWx1ZShl
eGVjLCBpZGVudCkgPT0ganNURFpWYWx1ZSgpKSB7CiAgICAgICAgICAgICBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVREWkVycm9yKGV4ZWMpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTk2
Njc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTUxLDcgKzU1MSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9nZXRfYnlfaWQKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVC
bG9jaygpOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlm
aWVyKHBjWzNdLnUub3BlcmFuZCk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9D
KDIpLmpzVmFsdWUoKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOworICAgIFBy
b3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgUHJvcGVydHlTbG90OjpQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVl
LmdldChleGVjLCBpZGVudCwgc2xvdCk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CkBA
IC02MDIsNyArNjAyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9hcmd1
bQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocGNbM10udS5vcGVy
YW5kKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QKDIpLmpzVmFsdWUoKTsKLSAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOworICAgIFByb3BlcnR5U2xvdCBzbG90KGJh
c2VWYWx1ZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAgICAgTExJ
TlRfUkVUVVJOKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsKIH0KIApAQCAtMTQx
Myw3ICsxNDEzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tXwog
ICAgIC8vIE1vZHVsZVZhciBpcyBhbHdheXMgY29udmVydGVkIHRvIENsb3N1cmVWYXIgZm9yIGdl
dF9mcm9tX3Njb3BlLgogICAgIEFTU0VSVChnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgIT0gTW9k
dWxlVmFyKTsKIAotICAgIFByb3BlcnR5U2xvdCBzbG90KHNjb3BlKTsKKyAgICBQcm9wZXJ0eVNs
b3Qgc2xvdChzY29wZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAg
ICAgaWYgKCFzY29wZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkgewogICAg
ICAgICBpZiAoZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpID09IFRocm93SWZOb3RGb3VuZCkKICAg
ICAgICAgICAgIExMSU5UX1JFVFVSTihleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpKSk7CkBAIC0xNDYxLDcgKzE0
NjEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX3NjCiAgICAgICAg
ICYmIGpzRHluYW1pY0Nhc3Q8SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQqPihzY29wZSkKICAg
ICAgICAgJiYgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSAhPSBJbml0aWFsaXphdGlv
bikgewogICAgICAgICAvLyBXaGVuIHdlIGNhbid0IHN0YXRpY2FsbHkgcHJvdmUgd2UgbmVlZCBh
IFREWiBjaGVjaywgd2UgbXVzdCBwZXJmb3JtIHRoZSBjaGVjayBvbiB0aGUgc2xvdyBwYXRoLgot
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSk7CisgICAgICAgIFByb3BlcnR5U2xvdCBz
bG90KHNjb3BlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICAg
ICAgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChzY29wZSwg
ZXhlYywgaWRlbnQsIHNsb3QpOwogICAgICAgICBpZiAoc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVu
dCkgPT0ganNURFpWYWx1ZSgpKQogICAgICAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVERaRXJy
b3IoZXhlYykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTk2Njc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyAr
MTUxLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRQcm9wZXJ0eQogewogICAg
IGlmIChKU1ZhbHVlIHJlc3VsdCA9IG9iamVjdC0+dHJ5R2V0SW5kZXhRdWlja2x5KGluZGV4KSkK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwor
ICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhv
ZFR5cGU6OkdldCk7CiAgICAgaWYgKCFvYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBpbmRl
eCwgc2xvdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgcmV0dXJuIHNsb3QuZ2V0
VmFsdWUoZXhlYywgaW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uSWRlbnRpZmllcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCShyZXZpc2lvbiAxOTY2NzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw2ICs1Miw3IEBACiAgICAgbWFjcm8oTnVtYmVyRm9ybWF0KSBcCiAgICAgbWFjcm8o
T2JqZWN0KSBcCiAgICAgbWFjcm8oUHJvbWlzZSkgXAorICAgIG1hY3JvKFByb3h5KSBcCiAgICAg
bWFjcm8oUmFuZ2VFcnJvcikgXAogICAgIG1hY3JvKFJlZmVyZW5jZUVycm9yKSBcCiAgICAgbWFj
cm8oUmVmbGVjdCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAxOTY2NzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MDUsNyArNzA1LDcgQEAgaW5saW5lIEpTVmFsdWUgSlNWYWx1ZTo6dG9UaGlzKEV4ZWNTdGF0ZQog
CiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSlNWYWx1ZTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChh
c1ZhbHVlKCkpOworICAgIFByb3BlcnR5U2xvdCBzbG90KGFzVmFsdWUoKSwgUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAgICAgcmV0dXJuIGdldChleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwogfQogCkBAIC03MzIsNyArNzMyLDcgQEAgQUxXQVlTX0lOTElORSBib29s
IEpTVmFsdWU6OmdldFByb3BlcnR5UwogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSlNWYWx1ZTo6
Z2V0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAogewotICAg
IFByb3BlcnR5U2xvdCBzbG90KGFzVmFsdWUoKSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYXNW
YWx1ZSgpLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICByZXR1
cm4gZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxOTY2NzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU4KICAgICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkg
JiYgbW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsKICAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICAgICAgLy8gTWFrZSBzdXJlIHByb3RvdHlwZSBoYXMgYmVlbiByZWlm
aWVkLgotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0KTsKKyAgICAgICAgUHJv
cGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OlZNSW5xdWlyeSk7CiAgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgc2xvdCk7CiAKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1l
cy0+YXJndW1lbnRzKTsKQEAgLTQ1MSw3ICs0NTEsNyBAQCB2b2lkIEpTRnVuY3Rpb246OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZWNTCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkucHJvdG90eXBlKSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSBwcm90b3R5cGUgaGFz
IGJlZW4gcmVpZmllZCwgc3VjaCB0aGF0IGl0IGNhbiBvbmx5IGJlIG92ZXJ3cml0dGVuCiAgICAg
ICAgIC8vIGZvbGxvd2luZyB0aGUgcnVsZXMgc2V0IG91dCBpbiBFQ01BLTI2MiA4LjEyLjkuCi0g
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QpOworICAgICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1J
bnF1aXJ5KTsKICAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
ICAgICAgICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkKICAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fcmFyZURhdGEtPmNsZWFyKCJTdG9yZSB0byBwcm90b3R5cGUgcHJvcGVydHkgb2YgYSBm
dW5jdGlvbiIpOwpAQCAtNTAxLDcgKzUwMSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmoKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHByb3RvdHlwZSBoYXMgYmVl
biByZWlmaWVkLCBzdWNoIHRoYXQgaXQgY2FuIG9ubHkgYmUgb3ZlcndyaXR0ZW4KICAgICAgICAg
Ly8gZm9sbG93aW5nIHRoZSBydWxlcyBzZXQgb3V0IGluIEVDTUEtMjYyIDguMTIuOS4KLSAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCk7CisgICAgICAgIFByb3BlcnR5U2xvdCBz
bG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVp
cnkpOwogICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAg
ICAgIGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRhKQogICAgICAgICAgICAgdGhpc09iamVjdC0+
bV9yYXJlRGF0YS0+Y2xlYXIoIlN0b3JlIHRvIHByb3RvdHlwZSBwcm9wZXJ0eSBvZiBhIGZ1bmN0
aW9uIik7CkBAIC01MTEsNyArNTExLDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iagogICAgIGJvb2wgdmFsdWVDaGVjazsKICAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpIHsKICAgICAgICAgaWYgKHRoaXNPYmpl
Y3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICAgICAgUHJvcGVy
dHlTbG90IHNsb3QodGhpc09iamVjdCk7CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0
aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsK
ICAgICAgICAgICAgIGlmICghQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0
RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUg
fCBEb250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVP
d25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dF
eGNlcHRpb24pOwpAQCAtNTE5LDcgKzUxOSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmoKICAgICAgICAgdmFsdWVDaGVjayA9ICFkZXNjcmlwdG9yLnZhbHVlKCkg
fHwgc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgcmV0cmlldmVBcmd1bWVudHMo
ZXhlYywgdGhpc09iamVjdCkpOwogICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpIHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhl
Y3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICAgICAgUHJvcGVydHlTbG90IHNs
b3QodGhpc09iamVjdCk7CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0
LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKICAgICAgICAg
ICAgIGlmICghQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNj
ZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhy
b3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYy0+dm0oKSksIERvbnREZWxldGUgfCBEb250RW51
bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0
eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5o
CShyZXZpc2lvbiAxOTY2NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTAsNyArMTUwLDcgQEAgc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRB
cgogICAgICAgICBpZiAoaXNUeXBlZFZpZXcob2JqZWN0LT5jbGFzc0luZm8oKS0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKSkKICAgICAgICAgICAgIGxlbmd0aCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVy
Vmlldyo+KG9iamVjdCktPmxlbmd0aCgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFBy
b3BlcnR5U2xvdCBsZW5ndGhTbG90KG9iamVjdCk7CisgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qg
bGVuZ3RoU2xvdChvYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQp
OwogICAgICAgICAgICAgb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBsZW5ndGhTbG90KTsKIAogICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRv
ckZ1bmMgPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJv
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAxOTY2NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw2ICsxMjgsOCBA
QAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiUGFyc2VyRXJyb3IuaCIKKyNpbmNsdWRlICJQcm94eUNvbnN0cnVj
dG9yLmgiCisjaW5jbHVkZSAiUHJveHlPYmplY3QuaCIKICNpbmNsdWRlICJSZWZsZWN0T2JqZWN0
LmgiCiAjaW5jbHVkZSAiUmVnRXhwQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJSZWdFeHBNYXRj
aGVzQXJyYXkuaCIKQEAgLTM2Niw2ICszNjgsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0
KFZNJiB2bSkKIAogICAgIG1fbW9kdWxlUmVjb3JkU3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNN
b2R1bGVSZWNvcmQ6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpKTsKICAgICBtX21vZHVsZU5hbWVzcGFjZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIHRo
aXMsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGpz
TnVsbCgpKSk7CisgICAgbV9wcm94eU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIFByb3h5
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KSk7CiAgICAgCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIG1fd2FzbU1vZHVsZVN0cnVj
dHVyZS5zZXQodm0sIHRoaXMsIEpTV0FTTU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlz
KSk7CkBAIC00NTQsNiArNDU3LDggQEAgbV8gIyMgbG93ZXJOYW1lICMjIFByb3RvdHlwZS0+cHV0
RGlyZWN0VwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5TeW50YXhFcnJvciwgbV9zeW50YXhFcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51
bSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMt
PlR5cGVFcnJvciwgbV90eXBlRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwogICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5VUklFcnJv
ciwgbV9VUklFcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7CisKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+UHJveHksIFByb3h5Q29u
c3RydWN0b3I6OmNyZWF0ZSh2bSwgUHJveHlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZt
LCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtKTsKICAgICAKICAg
ICAKICNkZWZpbmUgUFVUX0NPTlNUUlVDVE9SX0ZPUl9TSU1QTEVfVFlQRShjYXBpdGFsTmFtZSwg
bG93ZXJOYW1lLCBwcm9wZXJOYW1lLCBpbnN0YW5jZVR5cGUsIGpzTmFtZSkgXApAQCAtNjI2LDcg
KzYzMSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEUKIGJvb2wg
SlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQogewogICAgIEpTR2xvYmFsT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlz
T2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKICAg
ICAvLyBzaWxlbnRseSBpZ25vcmUgYXR0ZW1wdHMgdG8gYWRkIGFjY2Vzc29ycyBhbGlhc2luZyB2
YXJzLgogICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgc3ltYm9s
VGFibGVHZXQodGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCShyZXZpc2lvbiAxOTY2NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNiArMjc3LDcgQEAg
cHJvdGVjdGVkOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVnRXhwTWF0Y2hlc0Fy
cmF5U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbW9kdWxlUmVjb3Jk
U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbW9kdWxlTmFtZXNwYWNl
T2JqZWN0U3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcHJveHlPYmpl
Y3RTdHJ1Y3R1cmU7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fd2FzbU1vZHVsZVN0cnVjdHVyZTsKICNlbmRpZgpAQCAtNTI5LDYgKzUzMCw3
IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAg
ICAgU3RydWN0dXJlKiBtb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX21v
ZHVsZVJlY29yZFN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogbW9kdWxlTmFtZXNw
YWNlT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHByb3h5T2JqZWN0U3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9wcm94eU9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKICAgICBTdHJ1Y3R1cmUqIHdhc21Nb2R1bGVTdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX3dhc21Nb2R1bGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KICNlbmRpZgpAQCAt
NzE5LDcgKzcyMSw3IEBAIGlubGluZSBKU0dsb2JhbE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlMK
IAogaW5saW5lIGJvb2wgSlNHbG9iYWxPYmplY3Q6Omhhc093blByb3BlcnR5Rm9yV3JpdGUoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIFByb3BlcnR5
U2xvdCBzbG90KHRoaXMpOworICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwogICAgIGlmIChCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgYm9vbCBzbG90SXNXcml0ZWFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkocmV2
aXNpb24gMTk2Njc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVF
bnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgYm9vbCBKU01v
ZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eQogICAgIGlmIChyZXNvbHV0aW9uLnR5cGUg
PT0gSlNNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb246OlR5cGU6OlJlc29sdmVkKSB7CiAgICAgICAg
IC8vIFdoZW4gcmVzb2x2ZUltcG9ydCByZXNvbHZlcyB0aGUgcmVzb2x1dGlvbiwgdGhlIGltcG9y
dGVkIG1vZHVsZSBlbnZpcm9ubWVudCBtdXN0IGhhdmUgdGhlIGJpbmRpbmcuCiAgICAgICAgIEpT
TW9kdWxlRW52aXJvbm1lbnQqIGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQgPSByZXNvbHV0aW9u
Lm1vZHVsZVJlY29yZC0+bW9kdWxlRW52aXJvbm1lbnQoKTsKLSAgICAgICAgUHJvcGVydHlTbG90
IHJlZGlyZWN0U2xvdChpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50KTsKKyAgICAgICAgUHJvcGVy
dHlTbG90IHJlZGlyZWN0U2xvdChpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50LCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICAgICAgYm9vbCByZXN1bHQgPSBpbXBv
cnRlZE1vZHVsZUVudmlyb25tZW50LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJv
cGVydHlTbG90KGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIHJlc29sdXRpb24ubG9j
YWxOYW1lLCByZWRpcmVjdFNsb3QpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVz
dWx0KTsKICAgICAgICAgQVNTRVJUKHJlZGlyZWN0U2xvdC5pc1ZhbHVlKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMTk2Njc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDYsNyArMTA2LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNhbGxiYWNrR2V0dGVyKEV4ZQog
ICAgIEpTTW9kdWxlUmVjb3JkKiB0YXJnZXRNb2R1bGUgPSByZXNvbHV0aW9uLm1vZHVsZVJlY29y
ZDsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0YXJnZXRFbnZpcm9ubWVudCA9IHRhcmdldE1v
ZHVsZS0+bW9kdWxlRW52aXJvbm1lbnQoKTsKIAotICAgIFByb3BlcnR5U2xvdCB0cmFtcG9saW5l
U2xvdCh0YXJnZXRFbnZpcm9ubWVudCk7CisgICAgUHJvcGVydHlTbG90IHRyYW1wb2xpbmVTbG90
KHRhcmdldEVudmlyb25tZW50LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0
KTsKICAgICBpZiAoIXRhcmdldEVudmlyb25tZW50LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+
Z2V0T3duUHJvcGVydHlTbG90KHRhcmdldEVudmlyb25tZW50LCBleGVjLCByZXNvbHV0aW9uLmxv
Y2FsTmFtZSwgdHJhbXBvbGluZVNsb3QpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMTk2Njc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Niw3ICs0NjYs
NyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgIGlm
IChtX2lzSlNBcnJheSAmJiBhc0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Y2FuR2V0SW5kZXhRdWlj
a2x5KGluZGV4KSkKICAgICAgICAgICAgIHZhbHVlID0gYXNBcnJheShtX29iamVjdC5nZXQoKSkt
PmdldEluZGV4UXVpY2tseShpbmRleCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHJv
cGVydHlTbG90IHNsb3QobV9vYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgUHJvcGVydHlTbG90
IHNsb3QobV9vYmplY3QuZ2V0KCksIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpH
ZXQpOwogICAgICAgICAgICAgaWYgKG1fb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KG1fb2JqZWN0LmdldCgpLCBleGVjLCBpbmRleCwgc2xvdCkpIHsKICAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaW5kZXgpOwogICAgICAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTQ4NCw3ICs0ODQsNyBAQCBi
b29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgIHN0cmluZ2lm
eVJlc3VsdCA9IHN0cmluZ2lmaWVyLmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUoYnVpbGRlciwgdmFs
dWUsIG1fb2JqZWN0LmdldCgpLCBpbmRleCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gR2V0
IHRoZSB2YWx1ZS4KLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3QobV9vYmplY3QuZ2V0KCkpOwor
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChtX29iamVjdC5nZXQoKSwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAgICAgICAgIElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSA9IG1fcHJvcGVydHlOYW1lcy0+cHJvcGVydHlOYW1lVmVjdG9yKClbaW5kZXhdOwogICAgICAg
ICBpZiAoIW1fb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QobV9vYmpl
Y3QuZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTYxOCw3ICs2MTgsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6Ondh
bGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheShhcnJheSkgJiYgYXJyYXkt
PmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUg
PSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYXJyYXkpOworICAgICAgICAg
ICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChhcnJheSwgUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OkdldCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheS0+bWV0aG9k
VGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChhcnJheSwgbV9leGVjLCBpbmRleCwg
c2xvdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gc2xvdC5nZXRWYWx1ZSht
X2V4ZWMsIGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQpAQCAtNjcwLDcgKzY3MCw3
IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChvYmplY3QpOworICAgICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAgICAgICAgICAgICAgICAg
aWYgKG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgbV9l
eGVjLCBwcm9wZXJ0aWVzW2luZGV4XSwgc2xvdCkpCiAgICAgICAgICAgICAgICAgICAgIGluVmFs
dWUgPSBzbG90LmdldFZhbHVlKG1fZXhlYywgcHJvcGVydGllc1tpbmRleF0pOwogICAgICAgICAg
ICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHJldmlzaW9uIDE5NjY3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDcgKzI2NCw3IEBAIFN0cmluZyBK
U09iamVjdDo6Y2FsY3VsYXRlZENsYXNzTmFtZShKU08KIHsKICAgICBTdHJpbmcgcHJvdG90eXBl
RnVuY3Rpb25OYW1lOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QtPnN0cnVjdHVy
ZSgpLT5zdG9yZWRQcm90b3R5cGUoKSk7CisgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCksIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRo
b2RUeXBlOjpWTUlucXVpcnkpOwogICAgIFByb3BlcnR5TmFtZSBjb25zdHJ1Y3RvcihleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOwogICAgIGlmIChvYmplY3QtPmdldFByb3BlcnR5
U2xvdChleGVjLCBjb25zdHJ1Y3Rvciwgc2xvdCkpIHsKICAgICAgICAgaWYgKHNsb3QuaXNWYWx1
ZSgpKSB7CkBAIC0xMjcwLDE1ICsxMjcwLDE3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdE5v
bkluZGV4QWNjZXNzb3IKICAgICBzdHJ1Y3R1cmUtPnNldEhhc0dldHRlclNldHRlclByb3BlcnRp
ZXNXaXRoUHJvdG9DaGVjayhwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJz
Y29yZVByb3RvKTsKIH0KIAorLy8gSGFzUHJvcGVydHkoTywgUCkgZnJvbSBTZWN0aW9uIDcuMy4x
MCBvZiB0aGUgc3BlYy4KKy8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21h
LTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtaGFzcHJvcGVydHkKIGJvb2wgSlNPYmplY3Q6Omhhc1By
b3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QK
IHsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0
aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOwogICAg
IHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKLSAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOwogICAgIHJldHVybiBjb25z
dF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogfQogCkBAIC0xMzA0LDE1ICsxMzA2LDE3IEBAIGJvb2wgSlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogY2UKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gSGFzT3du
UHJvcGVydHkoTywgUCkgZnJvbSBzZWN0aW9uIDcuMy4xMSBpbiB0aGUgc3BlYy4KKy8vIGh0dHA6
Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMt
aGFzb3ducHJvcGVydHkKIGJvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKLSAgICBQcm9wZXJ0eVNs
b3Qgc2xvdCh0aGlzKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwogICAgIHJldHVybiBjb25zdF9j
YXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQogCiBib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKLSAgICBQcm9wZXJ0eVNsb3Qgc2xv
dCh0aGlzKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVy
bmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwogICAgIHJldHVybiBjb25zdF9jYXN0PEpT
T2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KTsKIH0KIApAQCAtMjU0OCw3ICsyNTUyLDcgQEAgc3RhdGljIEpTQm91bmRTbG90QmFz
ZUZ1bmN0aW9uKiBnZXRCb3VuZAogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgSlNDOjpQcm9wZXJ0eVNsb3Qgc2xvdCh0
aGlzKTsKKyAgICBKU0M6OlByb3BlcnR5U2xvdCBzbG90KHRoaXMsIFByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CiAgICAgaWYgKCFtZXRob2RUYWJsZShl
eGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxOTY2NzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gdHJ5R2V0
SW5kZXhRdWlja2x5KGkpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgUHJv
cGVydHlTbG90IHNsb3QodGhpcyk7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMsIFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAgICAgICBpZiAobWV0aG9k
VGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpcywgZXhlYywg
aSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBpKTsKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTExOTAsNyArMTE5MCw3IEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHkKIAogaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6
OmdldChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7
Ci0gICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CisgICAgUHJvcGVydHlTbG90IHNsb3QodGhp
cywgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAgICAgaWYgKGNvbnN0
X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgCkBAIC0xMTk5LDcgKzExOTksNyBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6
Z2V0KEV4ZWNTdGF0ZSogCiAKIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gICAgUHJvcGVydHlTbG90
IHNsb3QodGhpcyk7CisgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcywgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAgICAgaWYgKGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0
aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAg
IHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxOTY2NzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI3LDcgKzEyNyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhF
eGVjU3QKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUHJv
cGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qo
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5
KTsKICAgICAgICAgYm9vbCBoYXNPd25Qcm9wZXJ0eSA9IGdsb2JhbE9iamVjdC0+Z2V0T3duUHJv
cGVydHlTbG90KGdsb2JhbE9iamVjdCwgZXhlYywgaWRlbnQsIHNsb3QpOwogICAgICAgICBpZiAo
IWhhc093blByb3BlcnR5KSB7CiAgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShV
bnJlc29sdmVkUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgMCwgMCwgMCwgMCwg
MCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY2NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMSwx
NCArMzMxLDE0IEBAIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAg
ICB9CiAgICAgSlNPYmplY3QqIGRlc2NyaXB0aW9uID0gYXNPYmplY3QoaW4pOwogCi0gICAgUHJv
cGVydHlTbG90IGVudW1lcmFibGVTbG90KGRlc2NyaXB0aW9uKTsKKyAgICBQcm9wZXJ0eVNsb3Qg
ZW51bWVyYWJsZVNsb3QoZGVzY3JpcHRpb24sIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlOjpIYXNQcm9wZXJ0eSk7CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5nZXRQcm9wZXJ0eVNsb3Qo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUsIGVudW1lcmFibGVTbG90KSkg
ewogICAgICAgICBkZXNjLnNldEVudW1lcmFibGUoZW51bWVyYWJsZVNsb3QuZ2V0VmFsdWUoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpLnRvQm9vbGVhbihleGVjKSk7CiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBQcm9wZXJ0eVNsb3QgY29uZmlndXJhYmxlU2xvdChkZXNjcmlwdGlv
bik7CisgICAgUHJvcGVydHlTbG90IGNvbmZpZ3VyYWJsZVNsb3QoZGVzY3JpcHRpb24sIFByb3Bl
cnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7CiAgICAgaWYgKGRlc2Ny
aXB0aW9uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZp
Z3VyYWJsZSwgY29uZmlndXJhYmxlU2xvdCkpIHsKICAgICAgICAgZGVzYy5zZXRDb25maWd1cmFi
bGUoY29uZmlndXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y29uZmlndXJhYmxlKS50b0Jvb2xlYW4oZXhlYykpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCkBAIC0zNDYsMjEgKzM0NiwyMSBAQCBib29sIHRvUHJvcGVydHlEZXNjcmlwdG9y
KEV4ZWNTdGF0ZSogZXhlCiAgICAgfQogCiAgICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICBQcm9wZXJ0
eVNsb3QgdmFsdWVTbG90KGRlc2NyaXB0aW9uKTsKKyAgICBQcm9wZXJ0eVNsb3QgdmFsdWVTbG90
KGRlc2NyaXB0aW9uLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVy
dHkpOwogICAgIGlmIChkZXNjcmlwdGlvbi0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS52YWx1ZSwgdmFsdWVTbG90KSkgewogICAgICAgICBkZXNjLnNldFZhbHVl
KHZhbHVlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUpKTsK
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIFByb3BlcnR5U2xvdCB3cml0YWJsZVNsb3QoZGVzY3JpcHRpb24p
OworICAgIFByb3BlcnR5U2xvdCB3cml0YWJsZVNsb3QoZGVzY3JpcHRpb24sIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7CiAgICAgaWYgKGRlc2NyaXB0aW9u
LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlLCB3
cml0YWJsZVNsb3QpKSB7CiAgICAgICAgIGRlc2Muc2V0V3JpdGFibGUod3JpdGFibGVTbG90Lmdl
dFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSkudG9Cb29sZWFuKGV4
ZWMpKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFByb3BlcnR5U2xvdCBnZXRTbG90KGRlc2NyaXB0aW9u
KTsKKyAgICBQcm9wZXJ0eVNsb3QgZ2V0U2xvdChkZXNjcmlwdGlvbiwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6Okhhc1Byb3BlcnR5KTsKICAgICBpZiAoZGVzY3JpcHRpb24tPmdl
dFByb3BlcnR5U2xvdChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2V0LCBnZXRTbG90KSkg
ewogICAgICAgICBKU1ZhbHVlIGdldCA9IGdldFNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmdldCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAg
LTM3NSw3ICszNzUsNyBAQCBib29sIHRvUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhl
CiAgICAgICAgIGRlc2Muc2V0R2V0dGVyKGdldCk7CiAgICAgfQogCi0gICAgUHJvcGVydHlTbG90
IHNldFNsb3QoZGVzY3JpcHRpb24pOworICAgIFByb3BlcnR5U2xvdCBzZXRTbG90KGRlc2NyaXB0
aW9uLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOwogICAg
IGlmIChkZXNjcmlwdGlvbi0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5zZXQsIHNldFNsb3QpKSB7CiAgICAgICAgIEpTVmFsdWUgc2V0ID0gc2V0U2xvdC5nZXRW
YWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0KTsKICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxOTY2NzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzQsNyArMTc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90
bwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmpl
Y3QpOworICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5nZXRQcm9w
ZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkgewogICAgICAgICBpZiAoc2xvdC5p
c0FjY2Vzc29yKCkpIHsKICAgICAgICAgICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0g
c2xvdC5nZXR0ZXJTZXR0ZXIoKTsKQEAgLTIwMSw3ICsyMDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUHJv
cGVydHlTbG90IHNsb3QodGhpc09iamVjdCk7CisgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09i
amVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSk7CiAgICAg
aWYgKHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
KSB7CiAgICAgICAgIGlmIChzbG90LmlzQWNjZXNzb3IoKSkgewogICAgICAgICAgICAgR2V0dGVy
U2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBzbG90LmdldHRlclNldHRlcigpOwpAQCAtMjY0LDcgKzI2
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBKU1N0
cmluZyogcmVzdWx0ID0gdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+b2JqZWN0VG9TdHJpbmdW
YWx1ZSgpOwogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIFByb3BlcnR5TmFtZSB0b1N0cmlu
Z1RhZ1N5bWJvbCA9IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZ1RhZ1N5bWJvbDsKLSAg
ICAgICAgUHJvcGVydHlTbG90IHRvU3RyaW5nVGFnU2xvdCh0aGlzT2JqZWN0KTsKKyAgICAgICAg
UHJvcGVydHlTbG90IHRvU3RyaW5nVGFnU2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmdldFByb3Bl
cnR5U2xvdChleGVjLCB0b1N0cmluZ1RhZ1N5bWJvbCwgdG9TdHJpbmdUYWdTbG90KSkgewogICAg
ICAgICAgICAgSlNWYWx1ZSBzdHJpbmdUYWcgPSB0b1N0cmluZ1RhZ1Nsb3QuZ2V0VmFsdWUoZXhl
YywgdG9TdHJpbmdUYWdTeW1ib2wpOwogICAgICAgICAgICAgaWYgKHN0cmluZ1RhZy5pc1N0cmlu
ZygpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNs
b3QuaAkocmV2aXNpb24gMTk2Njc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDI2ICs1OSwzNCBAQCBpbmxpbmUg
dW5zaWduZWQgYXR0cmlidXRlc0ZvclN0cnVjdHVyZSh1CiB9CiAKIGNsYXNzIFByb3BlcnR5U2xv
dCB7Ci0gICAgZW51bSBQcm9wZXJ0eVR5cGUgeworICAgIGVudW0gUHJvcGVydHlUeXBlIDogdWlu
dDhfdCB7CiAgICAgICAgIFR5cGVVbnNldCwKICAgICAgICAgVHlwZVZhbHVlLAogICAgICAgICBU
eXBlR2V0dGVyLAogICAgICAgICBUeXBlQ3VzdG9tCiAgICAgfTsKIAotICAgIGVudW0gQ2FjaGVh
YmlsaXR5VHlwZSB7CisgICAgZW51bSBDYWNoZWFiaWxpdHlUeXBlIDogdWludDhfdCB7CiAgICAg
ICAgIENhY2hpbmdEaXNhbGxvd2VkLAogICAgICAgICBDYWNoaW5nQWxsb3dlZAogICAgIH07CiAK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBQcm9wZXJ0eVNsb3QoY29uc3QgSlNWYWx1ZSB0aGlzVmFs
dWUpCi0gICAgICAgIDogbV9wcm9wZXJ0eVR5cGUoVHlwZVVuc2V0KQotICAgICAgICAsIG1fb2Zm
c2V0KGludmFsaWRPZmZzZXQpCisgICAgZW51bSBjbGFzcyBJbnRlcm5hbE1ldGhvZFR5cGUgOiB1
aW50OF90IHsKKyAgICAgICAgR2V0LCAvLyBbW0dldF1dIGluIHRoZSBzcGVjLgorICAgICAgICBI
YXNQcm9wZXJ0eSwgLy8gW1tIYXNQcm9wZXJ0eV1dIGluIHRoZSBzcGVjLgorICAgICAgICBHZXRP
d25Qcm9wZXJ0eSwgLy8gW1tHZXRPd25Qcm9wZXJ0eV1dIGluIHRoZSBzcGVjLgorICAgICAgICBW
TUlucXVpcnksIC8vIE91ciBWTSBpcyBqdXN0IHBva2luZyBhcm91bmQuIFdoZW4gdGhpcyBpcyB0
aGUgSW50ZXJuYWxNZXRob2RUeXBlLCBnZXRPd25Qcm9wZXJ0eVNsb3QgaXMgbm90IGFsbG93ZWQg
dG8gZG8gdXNlciBvYnNlcnZhYmxlIGFjdGlvbnMuCisgICAgfTsKKworICAgIGV4cGxpY2l0IFBy
b3BlcnR5U2xvdChjb25zdCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSW50ZXJuYWxNZXRob2RUeXBlIGlu
dGVybmFsTWV0aG9kVHlwZSkKKyAgICAgICAgOiBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQogICAg
ICAgICAsIG1fdGhpc1ZhbHVlKHRoaXNWYWx1ZSkKICAgICAgICAgLCBtX3Nsb3RCYXNlKG51bGxw
dHIpCiAgICAgICAgICwgbV93YXRjaHBvaW50U2V0KG51bGxwdHIpCiAgICAgICAgICwgbV9jYWNo
ZWFiaWxpdHkoQ2FjaGluZ0FsbG93ZWQpCisgICAgICAgICwgbV9wcm9wZXJ0eVR5cGUoVHlwZVVu
c2V0KQorICAgICAgICAsIG1faW50ZXJuYWxNZXRob2RUeXBlKGludGVybmFsTWV0aG9kVHlwZSkK
ICAgICB7CiAgICAgfQogCkBAIC05Niw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Nh
Y2hlYWJsZUdldHRlcigpIGNvbnN0IHsgcmV0dXJuIGlzQ2FjaGVhYmxlKCkgJiYgaXNBY2Nlc3Nv
cigpOyB9CiAgICAgYm9vbCBpc0NhY2hlYWJsZUN1c3RvbSgpIGNvbnN0IHsgcmV0dXJuIGlzQ2Fj
aGVhYmxlKCkgJiYgaXNDdXN0b20oKTsgfQogCisgICAgSW50ZXJuYWxNZXRob2RUeXBlIGludGVy
bmFsTWV0aG9kVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxNZXRob2RUeXBlOyB9CisK
ICAgICB2b2lkIGRpc2FibGVDYWNoaW5nKCkKICAgICB7CiAgICAgICAgIG1fY2FjaGVhYmlsaXR5
ID0gQ2FjaGluZ0Rpc2FsbG93ZWQ7CkBAIC0yNjIsMTIgKzI3MiwxMyBAQCBwcml2YXRlOgogICAg
ICAgICB9IGN1c3RvbTsKICAgICB9IG1fZGF0YTsKIAotICAgIFByb3BlcnR5VHlwZSBtX3Byb3Bl
cnR5VHlwZTsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBKU1ZhbHVlIG1fdGhp
c1ZhbHVlOwogICAgIEpTT2JqZWN0KiBtX3Nsb3RCYXNlOwogICAgIFdhdGNocG9pbnRTZXQqIG1f
d2F0Y2hwb2ludFNldDsKICAgICBDYWNoZWFiaWxpdHlUeXBlIG1fY2FjaGVhYmlsaXR5OworICAg
IFByb3BlcnR5VHlwZSBtX3Byb3BlcnR5VHlwZTsKKyAgICBJbnRlcm5hbE1ldGhvZFR5cGUgbV9p
bnRlcm5hbE1ldGhvZFR5cGU7CiB9OwogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgUHJvcGVydHlT
bG90OjpnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
IGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJveHlDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAi
RXJyb3IuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ2Vs
bElubGluZXMuaCIKKyNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJQcm94
eU9iamVjdC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShQcm94eUNvbnN0
cnVjdG9yKTsKKworY29uc3QgQ2xhc3NJbmZvIFByb3h5Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsg
IlByb3h5IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm94eUNvbnN0
cnVjdG9yKSB9OworCitQcm94eUNvbnN0cnVjdG9yKiBQcm94eUNvbnN0cnVjdG9yOjpjcmVhdGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBQcm94eUNvbnN0cnVjdG9yKiBj
b25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3h5Q29uc3RydWN0b3I+
KHZtLmhlYXApKSBQcm94eUNvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVj
dG9yLT5maW5pc2hDcmVhdGlvbih2bSwgIlByb3h5Iik7CisgICAgcmV0dXJuIGNvbnN0cnVjdG9y
OworfQorCitQcm94eUNvbnN0cnVjdG9yOjpQcm94eUNvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQg
UHJveHlDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25zdCBjaGFyKiBuYW1l
KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKKworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDIpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFByb3h5T2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+bmV3VGFyZ2V0KCkuaXNVbmRlZmluZWQoKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJuZXcudGFyZ2V0
IG9mIFByb3h5IGNvbnN0cnVjdCBzaG91bGQgbm90IGJlIHVuZGVmaW5lZC4iKSk7CisKKyAgICBB
cmdMaXN0IGFyZ3MoZXhlYyk7CisgICAgSlNWYWx1ZSB0YXJnZXQgPSBhcmdzLmF0KDApOworICAg
IEpTVmFsdWUgaGFuZGxlciA9IGFyZ3MuYXQoMSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShQcm94eU9iamVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
cHJveHlPYmplY3RTdHJ1Y3R1cmUoKSwgdGFyZ2V0LCBoYW5kbGVyKSk7Cit9CisKK0NvbnN0cnVj
dFR5cGUgUHJveHlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uID0gY29uc3RydWN0UHJveHlPYmplY3Q7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0
OworfQorCitDYWxsVHlwZSBQcm94eUNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBD
YWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgLy8gUHJveHkgc2hvdWxkIHRocm93IGEgVHlwZUVy
cm9yIHdoZW4gY2FsbGVkIGFzIGEgZnVuY3Rpb24uCisgICAgY2FsbERhdGEuanMuZnVuY3Rpb25F
eGVjdXRhYmxlID0gMDsKKyAgICBjYWxsRGF0YS5qcy5zY29wZSA9IDA7CisgICAgY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gMDsKKyAgICByZXR1cm4gQ2FsbFR5cGVOb25lOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUHJveHlDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIFByb3h5Q29uc3RydWN0b3JfaAorCisjaW5j
bHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgUHJv
eHlDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyBQcm94
eUNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKworICAgIERFQ0xBUkVfSU5G
TzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICB7IAorICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IAorICAgIH0K
KworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBjb25zdCBjaGFyKiBuYW1lKTsKKworcHJp
dmF0ZToKKyAgICBQcm94eUNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGlj
IENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7
CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CisK
KyAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgZ2V0R2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gUHJveHlDb25zdHJ1Y3Rvcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3h5T2JqZWN0LmgiCisKKyNp
bmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5j
bHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMu
aCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitT
VEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoUHJveHlPYmplY3QpOworCitj
b25zdCBDbGFzc0luZm8gUHJveHlPYmplY3Q6OnNfaW5mbyA9IHsgIlByb3h5T2JqZWN0IiwgJkJh
c2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm94eU9iamVjdCkgfTsKKworUHJv
eHlPYmplY3Q6OlByb3h5T2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgUHJveHlPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRhcmdldCwgSlNWYWx1ZSBo
YW5kbGVyKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBpZiAoIXRhcmdl
dC5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiQSBQcm94eSdzICd0YXJnZXQnIHNob3VsZCBiZSBhbiBPYmplY3QiKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKFByb3h5T2JqZWN0KiB0YXJnZXRBc1Byb3h5ID0ganNEeW5h
bWljQ2FzdDxQcm94eU9iamVjdCo+KHRhcmdldCkpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCB0
ZXN0cyBmb3IgdGhpcyBvbmNlIHdlIGltcGxlbWVudCBQcm94eS5yZXZva2UoLikuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQzMjEKKyAgICAg
ICAgaWYgKHRhcmdldEFzUHJveHktPmhhbmRsZXIoKS5pc051bGwoKSkgeworICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJZiBhIFByb3h5J3MgaGFuZGxlciBp
cyBhbm90aGVyIFByb3h5IG9iamVjdCwgdGhlIG90aGVyIFByb3h5IG9iamVjdCBtdXN0IGhhdmUg
YSBub24tbnVsbCBoYW5kbGVyLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAoIWhhbmRsZXIuaXNPYmplY3QoKSkgeworICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkEgUHJveHkncyAnaGFuZGxlcicgc2hvdWxkIGJlIGFu
IE9iamVjdCIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fdGFyZ2V0LnNldCh2
bSwgdGhpcywganNDYXN0PEpTT2JqZWN0Kj4odGFyZ2V0KSk7CisgICAgbV9oYW5kbGVyLnNldCh2
bSwgdGhpcywgaGFuZGxlcik7Cit9CisKKy8vIEZJWE1FOiBtb3ZlIHRoaXMgaW5zaWRlIEpTT2Jq
ZWN0Lmggb3Igc29tZXRoaW5nCitzdGF0aWMgSlNWYWx1ZSBnZXRNZXRob2QoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogaGFuZGxlciwgQ2FsbERhdGEmIGNhbGxEYXRhLCBDYWxsVHlwZSYgY2Fs
bFR5cGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQoreworICAgIEpTVmFsdWUgbWV0aG9kID0g
aGFuZGxlci0+Z2V0KGV4ZWMsIGlkZW50KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgaWYgKG1ldGhvZC5pc1VuZGVm
aW5lZCgpIHx8IG1ldGhvZC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisKKyAgICBpZiAoIW1ldGhvZC5pc0NlbGwoKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIG1ha2VTdHJpbmcoJ1wnJywgU3RyaW5nKGlkZW50LmltcGwoKSksICdcJycsICIgcHJv
cGVydHkgb2YgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZS4iKSk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIGNhbGxUeXBlID0gbWV0aG9kLmFz
Q2VsbCgpLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShtZXRob2QuYXNDZWxsKCksIGNhbGxE
YXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7CisgICAgICAgIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgbWFrZVN0cmluZygnXCcnLCBTdHJpbmcoaWRlbnQuaW1wbCgpKSwg
J1wnJywgIiBwcm9wZXJ0eSBvZiBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlLiIp
KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1l
dGhvZDsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOyAvLyBU
aGlzIG1pZ2h0IGJlIGEgdmFsdWUgd2hlcmUgc29tZXdoZXJlIGluIF9fcHJvdG9fXyBjaGFpbiBs
aXZlcyBhIFByb3h5T2JqZWN0LgorICAgIEpTT2JqZWN0KiBwcm94eU9iamVjdEFzT2JqZWN0ID0g
dGhpc09iamVjdDsKKyAgICAvLyBGSVhNRTogbWFrZSBpdCBzbyB0aGF0IGN1c3RvbSBnZXR0ZXJz
IHRha2UgYm90aCB0aGUgfHRoaXN8IHZhbHVlIGFuZCB0aGUgc2xvdEJhc2UgKHByb3BlcnR5IGhv
bGRlcikuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NDMyMAorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChMSUtFTFkocHJveHlPYmplY3RB
c09iamVjdC0+aW5oZXJpdHMoUHJveHlPYmplY3Q6OmluZm8oKSkpKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqdm0uaGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KHByb3h5T2JqZWN0QXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocHJvdG90eXBlLmlzT2JqZWN0KCkpOworICAgICAgICBwcm94eU9i
amVjdEFzT2JqZWN0ID0gYXNPYmplY3QocHJvdG90eXBlKTsKKyAgICB9CisKKyAgICBQcm94eU9i
amVjdCogcHJveHlPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihwcm94eU9iamVjdEFzT2Jq
ZWN0KTsKKyAgICBKU1ZhbHVlIGhhbmRsZXJWYWx1ZSA9IHByb3h5T2JqZWN0LT5oYW5kbGVyKCk7
CisgICAgaWYgKGhhbmRsZXJWYWx1ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJQcm94eSAnaGFuZGxlcicgaXMgbnVsbC4gSXQg
c2hvdWxkIGJlIGFuIE9iamVjdC4iKSk7CisKKyAgICBKU09iamVjdCogaGFuZGxlciA9IGpzQ2Fz
dDxKU09iamVjdCo+KGhhbmRsZXJWYWx1ZSk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAg
Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgSlNWYWx1ZSBnZXRIYW5kbGVyID0gZ2V0TWV0aG9kKGV4
ZWMsIGhhbmRsZXIsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+Z2V0KTsK
KyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBKU09iamVjdCogdGFyZ2V0ID0gcHJveHlPYmpl
Y3QtPnRhcmdldCgpOworICAgIGlmIChnZXRIYW5kbGVyLmlzVW5kZWZpbmVkKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGFyZ2V0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7
CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFw
cGVuZCh0YXJnZXQpOworICAgIGFyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcoZXhlYywgcHJvcGVy
dHlOYW1lLnVpZCgpKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGFyZ3VtZW50cy5hcHBl
bmQodGhpc09iamVjdCk7CisgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBnZXRI
YW5kbGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAg
aWYgKHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcikpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigp
ICYmICFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpICYmICFkZXNjcmlwdG9yLndyaXRhYmxlKCkp
IHsKKyAgICAgICAgICAgIGlmICghc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwg
dHJhcFJlc3VsdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJQcm94eSBoYW5kbGVyJ3MgJ2dldCcgcmVzdWx0IG9mIGEgbm9uLWNv
bmZpZ3VyYWJsZSBhbmQgbm9uLXdyaXRhYmxlIHByb3BlcnR5IHNob3VsZCBiZSB0aGUgc2FtZSB2
YWx1ZSBhcyB0aGUgdGFyZ2V0J3MgcHJvcGVydHkuIikpOworICAgICAgICB9IGVsc2UgaWYgKGRl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFi
bGUoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAg
IGlmICghdHJhcFJlc3VsdC5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUHJveHkgaGFuZGxlcidzICdnZXQn
IHJlc3VsdCBvZiBhIG5vbi1jb25maWd1cmFibGUgYWNjZXNzb3IgcHJvcGVydHkgd2l0aG91dCBh
IGdldHRlciBzaG91bGQgYmUgdW5kZWZpbmVkLiIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIEZJWE1FOiB3aGVuIGltcGxlbWVudGluZyBQcm94eS5bW0dldE93blByb3BlcnR5XV0gaXQg
d291bGQgYmUgYSBnb29kIHRlc3QgdG8KKyAgICAvLyBoYXZlIGhhbmRsZXIgYmUgYW5vdGhlciBQ
cm94eSB3aGVyZSBpdHMgaGFuZGxlciB0aHJvd3Mgb24gW1tHZXRPd25Qcm9wZXJ0eV1dCisgICAg
Ly8gcmlnaHQgaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU0MzE0CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0cmFwUmVzdWx0KTsKK30KKworYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVy
bmFsTWV0aG9kR2V0T3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU1ZhbHVlIGhhbmRsZXJWYWx1ZSA9IGhhbmRsZXIoKTsKKyAgICBpZiAoaGFuZGxl
clZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJQcm94eSAnaGFuZGxlcicgaXMgbnVsbC4gSXQgc2hvdWxkIGJlIGFuIE9iamVjdC4i
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBKU09iamVjdCogaGFuZGxl
ciA9IGpzQ2FzdDxKU09iamVjdCo+KGhhbmRsZXJWYWx1ZSk7CisgICAgQ2FsbERhdGEgY2FsbERh
dGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpT
VmFsdWUgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTWV0aG9kID0gZ2V0TWV0aG9kKGV4ZWMsIGhh
bmRsZXIsIGNhbGxEYXRhLCBjYWxsVHlwZSwgaWRlbnQpOworICAgIEpTT2JqZWN0KiB0YXJnZXQg
PSB0aGlzLT50YXJnZXQoKTsKKyAgICBpZiAoZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTWV0aG9k
LmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlTbG90KHRhcmdldCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKwor
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5k
KHRhcmdldCk7CisgICAgYXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhleGVjLCBwcm9wZXJ0eU5h
bWUudWlkKCkpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdldE93blByb3Bl
cnR5RGVzY3JpcHRvck1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVu
dHMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCF0cmFwUmVzdWx0LmlzVW5kZWZpbmVkKCkgJiYgIXRyYXBSZXN1bHQuaXNP
YmplY3QoKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
cmVzdWx0IG9mICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InIGNhbGwgc2hvdWxkIGVpdGhlciBi
ZSBhbiBPYmplY3Qgb3IgdW5kZWZpbmVkLiIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIFByb3BlcnR5RGVzY3JpcHRvciB0YXJnZXRQcm9wZXJ0eURlc2NyaXB0b3I7Cisg
ICAgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JSZXN1bHQgPSB0YXJnZXQtPmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRhcmdldFByb3BlcnR5RGVzY3Jp
cHRvcik7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAodHJhcFJlc3VsdC5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGlmICgh
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yUmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIXRhcmdldFByb3BlcnR5RGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkg
eworICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInJlc3Vs
dCBvZiAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJyB3aGVuIHVuZGVmaW5lZCBiZSBjb25maWd1
cmFibGUuIikpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IC8vIEZJWE1FOiB0aGlzIGRvZXNuJ3Qgd29yayBpZiAndGFyZ2V0JyBpcyBhbm90aGVyIFByb3h5
LiBXZSBkb24ndCBoYXZlIGlzRXh0ZW5zaWJsZSBpbXBsZW1lbnRlZCBpbiBhIHdheSB0aGF0IGZp
dHMgdy8gUHJveHlzLgorICAgICAgICBpZiAoIXRhcmdldC0+aXNFeHRlbnNpYmxlKCkpIHsKKyAg
ICAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXaGVuICdnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3InIHJldHVybnMgdW5kZWZpbmVkLCB0aGUgJ3RhcmdldCcgb2Yg
YSBQcm94eSBzaG91bGQgYmUgZXh0ZW5zaWJsZS4iKSk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgUHJv
cGVydHlEZXNjcmlwdG9yIHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3I7CisgICAgdG9Qcm9wZXJ0eURl
c2NyaXB0b3IoZXhlYywgdHJhcFJlc3VsdCwgdHJhcFJlc3VsdEFzRGVzY3JpcHRvcik7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudCBzdGVwIDE0LiBDb21wbGV0ZVByb3BlcnR5RGVzY3JpcHRvcih0cmFw
UmVzdWx0QXNEZXNjcmlwdG9yKSBpbiB0aGUgc3BlYy4gTWF5YmUgdGhpcyBpcyBhbHJlYWR5IGRv
bmU/CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBib29sIHZhbGlkID0gSXNDb21wYXRpYmxlUHJv
cGVydHlEZXNjcmlwdG9yKHRhcmdldC0+aXNFeHRlbnNpYmxlKCksIHRyYXBSZXN1bHRBc0Rlc2Ny
aXB0b3IsIHRhcmdldFByb3BlcnR5RGVzY3JpcHRvcik7CisgICAgLy8gRklYTUU6IHRocm93IGlm
ICF2YWx1ZAorICAgIGlmICghdHJhcFJlc3VsdEFzRGVzY3JpcHRvci5jb25maWd1cmFibGUoKSAp
IHsKKyAgICAgICAgaWYgKCFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JSZXN1bHQgfHwgdGFyZ2V0
UHJvcGVydHlEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAgICB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUmVzdWx0IGZyb20gJ2dldE93blByb3BlcnR5
RGVzY3JpcHRvcicgY2FuJ3QgYmUgbm9uLWNvbmZpZ3VyYWJsZSB3aGVuIHRoZSAndGFyZ2V0JyBk
b2Vzbid0IGhhdmUgaXQgYXMgYW4gb3duIHByb3BlcnR5IG9yIGlmIGl0IGlzIGEgY29uZmlndXJh
YmxlIG93biBwcm9wZXJ0eSBvbiAndGFyZ2V0Jy4iKSk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgc3dpdGNoIChzbG90LmludGVybmFsTWV0aG9kVHlwZSgpKSB7CisgICAgY2FzZSBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0OgorICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzLCBDdXN0b21BY2Nlc3NvciwgcGVyZm9ybVByb3h5R2V0KTsKKyAgICAgICAgc2xvdC5k
aXNhYmxlQ2FjaGluZygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eToKKyAgICAgICAgcmV0dXJu
IHBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IFByb3h5LltbSGFzUHJvcGVydHldXSBhbmQgUHJveHkuW1tHZXRP
d25Qcm9wZXJ0eV1dCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NDMxMworICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTQzMTQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJveHlPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBQcm94eU9iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iamVjdCk7CisgICAgcmV0dXJu
IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5U2xvdENvbW1vbihleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOworfQorCitib29sIFByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8UHJveHlPYmplY3QqPihvYmplY3QpOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSk7IAorICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5n
ZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgaWRlbnQuaW1wbCgpLCBzbG90KTsKK30KKwor
dm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5
T2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90YXJnZXQpOworICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2hhbmRsZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
UHJveHlPYmplY3RfaAorI2RlZmluZSBQcm94eU9iamVjdF9oCisKKyNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBQcm94eU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAgIGNvbnN0IHN0YXRpYyB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90OworCisgICAgc3RhdGljIFByb3h5T2JqZWN0KiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSB0YXJnZXQsIEpTVmFsdWUg
aGFuZGxlcikKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIFBy
b3h5T2JqZWN0KiBwcm94eSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3h5T2JqZWN0
Pih2bS5oZWFwKSkgUHJveHlPYmplY3Qodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIHByb3h5LT5m
aW5pc2hDcmVhdGlvbih2bSwgZXhlYywgdGFyZ2V0LCBoYW5kbGVyKTsKKyAgICAgICAgcmV0dXJu
IHByb3h5OworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OyAKKyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgSlNPYmplY3QqIHRh
cmdldCgpIHsgcmV0dXJuIG1fdGFyZ2V0LmdldCgpOyB9CisgICAgSlNWYWx1ZSBoYW5kbGVyKCkg
eyByZXR1cm4gbV9oYW5kbGVyLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgUHJveHlPYmplY3Qo
Vk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgRXhlY1N0YXRl
KiwgSlNWYWx1ZSB0YXJnZXQsIEpTVmFsdWUgaGFuZGxlcik7CisKKyAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKworICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgYm9vbCBwZXJmb3JtSW50ZXJuYWxNZXRob2RH
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwor
CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldDsKKyAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4gbV9oYW5kbGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKU1Byb21pc2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVj
dE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVmbGVjdE9iamVjdC5jcHAJKHJldmlzaW9uIDE5NjY3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNyAr
MTM1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykKICAgICAgICAgcmVjZWl2ZXIgPSBleGVjLT5h
cmd1bWVudCgyKTsKIAotICAgIFByb3BlcnR5U2xvdCBzbG90KHJlY2VpdmVyKTsKKyAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6
OkdldCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0YXJnZXQuZ2V0KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMTk2Njc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU4MSw3ICs1ODEsNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tG
cmFtZTo6bmFtCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7CiAgICAgYXV0byBnZXRQcm9wZXJ0eUlmUHVyZU9wZXJhdGlvbiA9IFsm
XSAoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIC0+IFN0cmluZyB7Ci0gICAgICAgIFByb3BlcnR5
U2xvdCBzbG90KGNhbGxlZSk7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGNhbGxlZSwgUHJv
cGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSk7CiAgICAgICAgIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUoaWRlbnQpOwogICAgICAgICBpZiAoY2FsbGVlLT5nZXRQcm9w
ZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkgewogICAgICAgICAgICAgaWYgKHNs
b3QuaXNWYWx1ZSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvZXM2Lnlh
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCShy
ZXZpc2lvbiAxOTY2NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvZXM2LnlhbWwJ
KHdvcmtpbmcgY29weSkKQEAgLTkxMyw3ICs5MTMsNyBAQAogLSBwYXRoOiBlczYvUHJveHlfY29u
c3RydWN0X2hhbmRsZXIuanMKICAgY21kOiBydW5FUzYgOmZhaWwKIC0gcGF0aDogZXM2L1Byb3h5
X2NvbnN0cnVjdG9yX3JlcXVpcmVzX25ldy5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6
IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9Qcm94eV9kZWZpbmVQcm9wZXJ0eV9oYW5kbGVy
LmpzCiAgIGNtZDogcnVuRVM2IDpmYWlsCiAtIHBhdGg6IGVzNi9Qcm94eV9kZWxldGVQcm9wZXJ0
eV9oYW5kbGVyLmpzCkBAIC05MjEsOSArOTIxLDkgQEAKIC0gcGF0aDogZXM2L1Byb3h5X2VudW1l
cmF0ZV9oYW5kbGVyLmpzCiAgIGNtZDogcnVuRVM2IDpmYWlsCiAtIHBhdGg6IGVzNi9Qcm94eV9n
ZXRfaGFuZGxlci5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFs
CiAtIHBhdGg6IGVzNi9Qcm94eV9nZXRfaGFuZGxlcl9pbnN0YW5jZXNfb2ZfcHJveGllcy5qcwot
ICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9Q
cm94eV9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JfaGFuZGxlci5qcwogICBjbWQ6IHJ1bkVTNiA6
ZmFpbAogLSBwYXRoOiBlczYvUHJveHlfZ2V0UHJvdG90eXBlT2ZfaGFuZGxlci5qcwpAQCAtOTUz
LDI3ICs5NTMsMjcgQEAKIC0gcGF0aDogZXM2L1Byb3h5X2ludGVybmFsX2dldF9jYWxsc19BcnJh
eS5wcm90b3R5cGUuY29uY2F0LmpzCiAgIGNtZDogcnVuRVM2IDpmYWlsCiAtIHBhdGg6IGVzNi9Q
cm94eV9pbnRlcm5hbF9nZXRfY2FsbHNfQXJyYXkucHJvdG90eXBlLnBvcC5qcwotICBjbWQ6IHJ1
bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9Qcm94eV9pbnRl
cm5hbF9nZXRfY2FsbHNfQXJyYXkucHJvdG90eXBlLnJldmVyc2UuanMKICAgY21kOiBydW5FUzYg
OmZhaWwKIC0gcGF0aDogZXM2L1Byb3h5X2ludGVybmFsX2dldF9jYWxsc19BcnJheS5wcm90b3R5
cGUuc2hpZnQuanMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5FUzYgOm5vcm1hbAog
LSBwYXRoOiBlczYvUHJveHlfaW50ZXJuYWxfZ2V0X2NhbGxzX0FycmF5LnByb3RvdHlwZS5zcGxp
Y2UuanMKICAgY21kOiBydW5FUzYgOmZhaWwKIC0gcGF0aDogZXM2L1Byb3h5X2ludGVybmFsX2dl
dF9jYWxsc19BcnJheS5wcm90b3R5cGUudG9TdHJpbmcuanMKLSAgY21kOiBydW5FUzYgOmZhaWwK
KyAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYvUHJveHlfaW50ZXJuYWxfZ2V0X2Nh
bGxzX0FycmF5LnByb3RvdHlwZV9pdGVyYXRpb25fbWV0aG9kcy5qcwogICBjbWQ6IHJ1bkVTNiA6
ZmFpbAogLSBwYXRoOiBlczYvUHJveHlfaW50ZXJuYWxfZ2V0X2NhbGxzX0NsYXNzRGVmaW5pdGlv
bkV2YWx1YXRpb24uanMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5FUzYgOm5vcm1h
bAogLSBwYXRoOiBlczYvUHJveHlfaW50ZXJuYWxfZ2V0X2NhbGxzX0NyZWF0ZUR5bmFtaWNGdW5j
dGlvbi5qcwogICBjbWQ6IHJ1bkVTNiA6ZmFpbAogLSBwYXRoOiBlczYvUHJveHlfaW50ZXJuYWxf
Z2V0X2NhbGxzX0NyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlLmpzCi0gIGNtZDogcnVuRVM2IDpmYWls
CisgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L1Byb3h5X2ludGVybmFsX2dldF9j
YWxsc19EYXRlLnByb3RvdHlwZS50b0pTT04uanMKICAgY21kOiBydW5FUzYgOmZhaWwKIC0gcGF0
aDogZXM2L1Byb3h5X2ludGVybmFsX2dldF9jYWxsc19FcnJvci5wcm90b3R5cGUudG9TdHJpbmcu
anMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBl
czYvUHJveHlfaW50ZXJuYWxfZ2V0X2NhbGxzX0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmpzCiAg
IGNtZDogcnVuRVM2IDpmYWlsCiAtIHBhdGg6IGVzNi9Qcm94eV9pbnRlcm5hbF9nZXRfY2FsbHNf
SGFzQmluZGluZy5qcwpAQCAtOTgxLDcgKzk4MSw3IEBACiAtIHBhdGg6IGVzNi9Qcm94eV9pbnRl
cm5hbF9nZXRfY2FsbHNfaW5zdGFuY2VvZl9vcGVyYXRvci5qcwogICBjbWQ6IHJ1bkVTNiA6ZmFp
bAogLSBwYXRoOiBlczYvUHJveHlfaW50ZXJuYWxfZ2V0X2NhbGxzX0l0ZXJhdG9yQ29tcGxldGVf
SXRlcmF0b3JWYWx1ZS5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9y
bWFsCiAtIHBhdGg6IGVzNi9Qcm94eV9pbnRlcm5hbF9nZXRfY2FsbHNfSlNPTi5zdHJpbmdpZnku
anMKICAgY21kOiBydW5FUzYgOmZhaWwKIC0gcGF0aDogZXM2L1Byb3h5X2ludGVybmFsX2dldF9j
YWxsc19PYmplY3QuYXNzaWduLmpzCkBAIC05ODksNyArOTg5LDcgQEAKIC0gcGF0aDogZXM2L1By
b3h5X2ludGVybmFsX2dldF9jYWxsc19PYmplY3QuZGVmaW5lUHJvcGVydGllcy5qcwogICBjbWQ6
IHJ1bkVTNiA6ZmFpbAogLSBwYXRoOiBlczYvUHJveHlfaW50ZXJuYWxfZ2V0X2NhbGxzX1Byb21p
c2VfcmVzb2x2ZV9mdW5jdGlvbnMuanMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5F
UzYgOm5vcm1hbAogLSBwYXRoOiBlczYvUHJveHlfaW50ZXJuYWxfZ2V0X2NhbGxzX1JlZ0V4cC5w
cm90b3R5cGUuZmxhZ3MuanMKICAgY21kOiBydW5FUzYgOmZhaWwKIC0gcGF0aDogZXM2L1Byb3h5
X2ludGVybmFsX2dldF9jYWxsc19SZWdFeHAucHJvdG90eXBlLnRlc3QuanMKQEAgLTEwMTMsNyAr
MTAxMyw3IEBACiAtIHBhdGg6IGVzNi9Qcm94eV9pbnRlcm5hbF9nZXRfY2FsbHNfU3RyaW5nLnBy
b3RvdHlwZS5zcGxpdC5qcwogICBjbWQ6IHJ1bkVTNiA6ZmFpbAogLSBwYXRoOiBlczYvUHJveHlf
aW50ZXJuYWxfZ2V0X2NhbGxzX1N0cmluZy5yYXcuanMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAg
Y21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYvUHJveHlfaW50ZXJuYWxfZ2V0X2NhbGxz
X1RvUHJpbWl0aXZlLmpzCiAgIGNtZDogcnVuRVM2IDpmYWlsCiAtIHBhdGg6IGVzNi9Qcm94eV9p
bnRlcm5hbF9nZXRfY2FsbHNfVG9Qcm9wZXJ0eURlc2NyaXB0b3IuanMKQEAgLTEyMjEsNCArMTIy
MSw0IEBACiAtIHBhdGg6IGVzNi9PYmplY3Rfc3RhdGljX21ldGhvZHNfT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcnMuanMKICAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYv
T2JqZWN0X3N0YXRpY19tZXRob2RzX09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLXBy
b3h5LmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQor
ICBjbWQ6IHJ1bkVTNiA6ZmFpbApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9wcm94eS1iYXNpYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3Byb3h5LWJhc2ljLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1iYXNpYy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE4NyBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOworfQorCithc3NlcnQoUHJveHkgaW5z
dGFuY2VvZiBGdW5jdGlvbik7Cithc3NlcnQoUHJveHkubGVuZ3RoID09PSAyKTsKK2Fzc2VydChQ
cm94eS5wcm90b3R5cGUgPT09IHVuZGVmaW5lZCk7CisKK3sKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDA7IGkrKykKKyAgICAgICAgYXNzZXJ0KChuZXcgUHJveHkoe30sIHt9KSkuX19wcm90
b19fID09PSBPYmplY3QucHJvdG90eXBlKTsKK30KKworeworICAgIC8vIFdoZW4gd2UgY2FsbCBQ
cm94eSBpdCBzaG91bGQgdGhyb3cKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7
CisgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAg
UHJveHkoe30sIHt9KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB0aHJldyA9
IHRydWU7CisgICAgICAgICAgICBhc3NlcnQoZS50b1N0cmluZygpID09PSAiVHlwZUVycm9yOiBQ
cm94eSBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdQcm94eSh7fSwge30pJywgJ1Byb3h5JyBpcyBh
biBpbnN0YW5jZSBvZiBGdW5jdGlvbikiKTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQodGhy
ZXcgPT09IHRydWUpOworICAgIH0KKworICAgIGxldCB0aGVUYXJnZXQgPSB7CisgICAgICAgIHg6
IDMwCisgICAgfTsKKworICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBnZXQ6IGZ1bmN0aW9u
KHRhcmdldCwgcHJvcE5hbWUsIHByb3h5QXJnKSB7CisgICAgICAgICAgICBhc3NlcnQodGFyZ2V0
ID09PSB0aGVUYXJnZXQpOworICAgICAgICAgICAgYXNzZXJ0KHByb3h5QXJnID09PSBwcm94eSk7
CisgICAgICAgICAgICBpZiAocHJvcE5hbWUgPT09ICJ5IikKKyAgICAgICAgICAgICAgICByZXR1
cm4gNDU7CisgICAgICAgICAgICBhc3NlcnQocHJvcE5hbWUgPT09ICJ4Iik7CisgICAgICAgICAg
ICByZXR1cm4gdGFyZ2V0W3Byb3BOYW1lXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQg
cHJveHkgPSBuZXcgUHJveHkodGhlVGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICBhc3NlcnQocHJveHkueCA9PT0gMzApOworICAg
ICAgICBhc3NlcnQocHJveHkueSA9PT0gNDUpOworICAgICAgICBhc3NlcnQocHJveHlbIngiXSA9
PT0gMzApOworICAgICAgICBhc3NlcnQocHJveHlbInkiXSA9PT0gNDUpOworICAgIH0KKworfQor
Cit7CisgICAgbGV0IGhhbmRsZXIgPSB7Z2V0OiBudWxsfTsKKyAgICBsZXQgdGFyZ2V0ID0ge3g6
IDIwfTsKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9IGZhbHNl
OworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKGkgJSAyKQorICAgICAgICAgICAgICAg
IHByb3h5LmZvbzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm94eVsiZm9v
Il07CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAg
ICAgICAgICAgYXNzZXJ0KGUudG9TdHJpbmcoKSA9PT0gIlR5cGVFcnJvcjogJ2dldCcgcHJvcGVy
dHkgb2YgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZS4iKTsKKyAgICAgICAgfQor
ICAgICAgICBhc3NlcnQodGhyZXcpOworICAgIH0KK30KKworeworICAgIGxldCBoYW5kbGVyID0g
e2dldDoge319OworICAgIGxldCB0YXJnZXQgPSB7eDogMjB9OworICAgIGxldCBwcm94eSA9IG5l
dyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBp
KyspIHsKKyAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICBpZiAoaSAlIDIpCisgICAgICAgICAgICAgICAgcHJveHkuZm9vOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHByb3h5WyJmb28iXTsKKyAgICAgICAgfSBjYXRjaChlKSB7
CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICBhc3NlcnQoZS50b1N0cmlu
ZygpID09PSAiVHlwZUVycm9yOiAnZ2V0JyBwcm9wZXJ0eSBvZiBQcm94eSdzIGhhbmRsZXIgc2hv
dWxkIGJlIGNhbGxhYmxlLiIpOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7Cisg
ICAgfQorfQorCit7CisgICAgbGV0IGhhbmRsZXIgPSB7fTsKKyAgICBsZXQgdGFyZ2V0ID0ge3g6
IDIwfTsKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydChwcm94eS54ID09
PSAyMCk7CisgICAgICAgIGFzc2VydChwcm94eS55ID09PSB1bmRlZmluZWQpOworICAgIH0KK30K
KworeworICAgIGxldCBoYW5kbGVyID0ge307CisgICAgbGV0IHRhcmdldCA9IFsxLCAyLCAzXTsK
KyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydChwcm94eVswXSA9PT0gMSk7
CisgICAgICAgIGFzc2VydChwcm94eVsxXSA9PT0gMik7CisgICAgICAgIGFzc2VydChwcm94eVsy
XSA9PT0gMyk7CisgICAgfQorfQorCit7CisgICAgbGV0IHRoZVRhcmdldCA9IFsxLCAyLCAzXTsK
KyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbih0YXJnZXQsIHByb3BO
YW1lLCBwcm94eUFyZykgeworICAgICAgICAgICAgc3dpdGNoIChwcm9wTmFtZSkgeworICAgICAg
ICAgICAgY2FzZSAiMCI6CisgICAgICAgICAgICBjYXNlICIxIjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMTAwOworICAgICAgICAgICAgY2FzZSAiMiI6CisgICAgICAgICAgICBjYXNlICJsZW5n
dGgiOgorICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcE5hbWVdOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
bGV0IHByb3h5ID0gbmV3IFByb3h5KHRoZVRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBhc3NlcnQocHJveHlbMF0gPT09IDEwMCk7
CisgICAgICAgIGFzc2VydChwcm94eVsxXSA9PT0gMTAwKTsKKyAgICAgICAgYXNzZXJ0KHByb3h5
WzJdID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KHByb3h5Lmxlbmd0aCA9PT0gMyk7CisgICAgICAg
IGFzc2VydChwcm94eVsibGVuZ3RoIl0gPT09IDMpOworICAgIH0KK30KKworeworICAgIGxldCB3
YXNDYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgdGhlVGFyZ2V0ID0geworICAgICAgICBnZXQgeCgp
IHsKKyAgICAgICAgICAgIHdhc0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gMjU7
CisgICAgICAgIH0KKyAgICB9OworICAgIGxldCBqID0gMDsKKyAgICBsZXQgaGFuZGxlciA9IHsK
KyAgICAgICAgZ2V0OiBmdW5jdGlvbih0YXJnZXQsIHByb3BOYW1lLCBwcm94eUFyZykgeworICAg
ICAgICAgICAgYXNzZXJ0KHRhcmdldCA9PT0gdGhlVGFyZ2V0KTsKKyAgICAgICAgICAgIGxldCB4
ID0gaisrOworICAgICAgICAgICAgaWYgKHggJSAyKQorICAgICAgICAgICAgICAgIHJldHVybiB0
YXJnZXRbcHJvcE5hbWVdOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVy
biAiaGVsbG8iOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94
eSh0aGVUYXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKysp
IHsKKyAgICAgICAgaWYgKGkgJSAyKQorICAgICAgICAgICAgYXNzZXJ0KHByb3h5LnggPT09IDI1
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNzZXJ0KHByb3h5LnggPT09ICJoZWxsbyIp
OworICAgICAgICAgICAgCisgICAgfQorCisgICAgYXNzZXJ0KHdhc0NhbGxlZCk7Cit9CisKK3sK
KyAgICBsZXQgdGhlVGFyZ2V0ID0geworICAgICAgICB4OiA0MAorICAgIH07CisgICAgbGV0IGhh
bmRsZXIgPSB7CisgICAgICAgIGdldDogZnVuY3Rpb24odGFyZ2V0LCBwcm9wTmFtZSwgcHJveHlB
cmcpIHsKKyAgICAgICAgICAgIHJldHVybiAzMDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBs
ZXQgcHJveHkgPSBuZXcgUHJveHkodGhlVGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydChwcm94eS54ID09PSAzMCk7Cisg
ICAgfQorICAgIGhhbmRsZXIuZ2V0ID0gdW5kZWZpbmVkOworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgNTAwOyBpKyspIHsKKyAgICAgICAgYXNzZXJ0KHByb3h5LnggPT09IDQwKTsKKyAgICB9Cit9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LWluLXByb3Rv
LWNoYWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvcHJveHktaW4tcHJvdG8tY2hhaW4uanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LWluLXByb3RvLWNoYWluLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjggQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKTsKK30KKworbGV0IHRoZVRh
cmdldCA9IHsKKyAgICB4OiAzMAorfTsKKworbGV0IGhhbmRsZXIgPSB7CisgICAgZ2V0OiBmdW5j
dGlvbih0YXJnZXQsIHByb3BOYW1lLCBwcm94eUFyZykgeworICAgICAgICBhc3NlcnQodGFyZ2V0
ID09PSB0aGVUYXJnZXQpOworICAgICAgICBhc3NlcnQocHJveHlBcmcgPT09IG9iaik7CisgICAg
ICAgIGlmIChwcm9wTmFtZSA9PT0gInkiKQorICAgICAgICAgICAgcmV0dXJuIDQ1OworICAgICAg
ICBhc3NlcnQocHJvcE5hbWUgPT09ICJ4Iik7CisgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcE5h
bWVdOworICAgIH0KK307CisKK2xldCBwcm94eSA9IG5ldyBQcm94eSh0aGVUYXJnZXQsIGhhbmRs
ZXIpOworCitsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShwcm94eSk7CisKK2ZvciAobGV0IGkgPSAw
OyBpIDwgMTAwMDsgaSsrKSB7CisgICAgYXNzZXJ0KG9iai54ID09PSAzMCk7CisgICAgYXNzZXJ0
KG9iai55ID09PSA0NSk7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3Byb3h5LW9mLWEtcHJveHkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1vZi1hLXByb3h5LmpzCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1vZi1hLXByb3h5LmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYg
KCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKTsKK30KKworewor
ICAgIGxldCBvZ1RhcmdldCA9IHt4OiAyMH07CisgICAgbGV0IHRoZVRhcmdldCA9IG5ldyBQcm94
eShvZ1RhcmdldCwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uKHRhcmdldCwgcHJvcE5hbWUsIHBy
b3h5QXJnKSB7CisgICAgICAgICAgICBhc3NlcnQodGFyZ2V0ID09PSBvZ1RhcmdldCk7CisgICAg
ICAgICAgICBpZiAocHJvcE5hbWUgPT09ICJ5IikKKyAgICAgICAgICAgICAgICByZXR1cm4gNDU7
CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BOYW1lXTsKKyAgICAgICAgfQorICAgIH0p
OworICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBnZXQ6IGZ1bmN0aW9uKHRhcmdldCwgcHJv
cE5hbWUsIHByb3h5QXJnKSB7CisgICAgICAgICAgICBpZiAocHJvcE5hbWUgPT09ICJ6IikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gNjA7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BO
YW1lXTsKKyAgICAgICAgfQorICAgIH07CisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRoZVRh
cmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAg
ICAgICBhc3NlcnQocHJveHkueCA9PT0gMjApOworICAgICAgICBhc3NlcnQocHJveHlbIngiXSA9
PT0gMjApOworCisgICAgICAgIGFzc2VydChwcm94eS55ID09PSA0NSk7CisgICAgICAgIGFzc2Vy
dChwcm94eVsieSJdID09PSA0NSk7CisKKyAgICAgICAgYXNzZXJ0KHByb3h5LnogPT09IDYwKTsK
KyAgICAgICAgYXNzZXJ0KHByb3h5WyJ6Il0gPT09IDYwKTsKKyAgICB9Cit9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LXByb3BlcnR5LWRlc2NyaXB0b3Iu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94
eS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFi
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKTsKK30KKworbGV0IHRo
ZVRhcmdldCA9IHt9OworT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoZVRhcmdldCwgIngiLCB7Cisg
ICAgd3JpdGFibGU6IGZhbHNlLAorICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisgICAgdmFsdWU6
IDQ1Cit9KTsKKworT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoZVRhcmdldCwgInkiLCB7CisgICAg
d3JpdGFibGU6IGZhbHNlLAorICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisgICAgdmFsdWU6IDQ1
Cit9KTsKKworT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoZVRhcmdldCwgImdldHRlciIsIHsKKyAg
ICBjb25maWd1cmFibGU6IGZhbHNlLAorICAgIHNldDogZnVuY3Rpb24oeCkgeyB9Cit9KTsKKwor
T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoZVRhcmdldCwgImJhZEdldHRlciIsIHsKKyAgICBjb25m
aWd1cmFibGU6IGZhbHNlLAorICAgIHNldDogZnVuY3Rpb24oeCkgeyB9Cit9KTsKKworbGV0IGhh
bmRsZXIgPSB7CisgICAgZ2V0OiBmdW5jdGlvbih0YXJnZXQsIHByb3BOYW1lLCBwcm94eUFyZykg
eworICAgICAgICBhc3NlcnQodGFyZ2V0ID09PSB0aGVUYXJnZXQpOworICAgICAgICBhc3NlcnQo
cHJveHlBcmcgPT09IHByb3h5KTsKKyAgICAgICAgaWYgKHByb3BOYW1lID09PSAieCIpCisgICAg
ICAgICAgICByZXR1cm4gNDU7CisgICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSAieSIpCisg
ICAgICAgICAgICByZXR1cm4gMzA7CisgICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSAiZ2V0
dGVyIikKKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgYXNzZXJ0KHByb3BOYW1lID09PSAiYmFkR2V0dGVyIik7CisgICAgICAgICAgICBy
ZXR1cm4gMjU7CisgICAgICAgIH0KKyAgICB9Cit9OworCitsZXQgcHJveHkgPSBuZXcgUHJveHko
dGhlVGFyZ2V0LCBoYW5kbGVyKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsK
KyAgICBhc3NlcnQocHJveHkueCA9PT0gNDUpOworICAgIGFzc2VydChwcm94eVsieCJdID09PSA0
NSk7Cit9CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgdHJ5IHsKKyAg
ICAgICAgaWYgKGkgJSAyKQorICAgICAgICAgICAgcHJveHkueTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcHJveHlbInkiXTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgdGhyZXcgPSB0
cnVlOworICAgICAgICBhc3NlcnQoZS50b1N0cmluZygpID09PSAiVHlwZUVycm9yOiBQcm94eSBo
YW5kbGVyJ3MgJ2dldCcgcmVzdWx0IG9mIGEgbm9uLWNvbmZpZ3VyYWJsZSBhbmQgbm9uLXdyaXRh
YmxlIHByb3BlcnR5IHNob3VsZCBiZSB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgdGFyZ2V0J3MgcHJv
cGVydHkuIik7CisgICAgfQorICAgIGFzc2VydCh0aHJldyA9PT0gdHJ1ZSk7Cit9CisKK2ZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgYXNzZXJ0KHByb3h5LmdldHRlciA9PT0g
dW5kZWZpbmVkKTsKKyAgICBhc3NlcnQocHJveHlbImdldHRlciJdID09PSB1bmRlZmluZWQpOwor
fQorCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgIHRyeSB7CisgICAgICAg
IGlmIChpICUgMikKKyAgICAgICAgICAgIHByb3h5LmJhZEdldHRlcjsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcHJveHlbImJhZEdldHRlciJdOworCisgICAgfSBjYXRjaChlKSB7CisgICAg
ICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAgYXNzZXJ0KGUudG9TdHJpbmcoKSA9PT0gIlR5cGVF
cnJvcjogUHJveHkgaGFuZGxlcidzICdnZXQnIHJlc3VsdCBvZiBhIG5vbi1jb25maWd1cmFibGUg
YWNjZXNzb3IgcHJvcGVydHkgd2l0aG91dCBhIGdldHRlciBzaG91bGQgYmUgdW5kZWZpbmVkLiIp
OworICAgIH0KKyAgICBhc3NlcnQodGhyZXcgPT09IHRydWUpOworfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAJKHJldmlzaW9uIDE5
NjY3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNyArMzU4LDcgQEAgdm9pZCBXQVNNTW9kdWxlUGFyc2Vy
OjpnZXRJbXBvcnRlZFZhbHVlKAogewogICAgIEZBSUxfSUZfRkFMU0UobV9pbXBvcnRzLCAiQWNj
ZXNzaW5nIHByb3BlcnR5IG9mIG5vbi1vYmplY3QuIik7CiAgICAgSWRlbnRpZmllciBpZGVudGlm
aWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV92bSwgaW1wb3J0TmFtZSk7Ci0gICAgUHJv
cGVydHlTbG90IHNsb3QobV9pbXBvcnRzLmdldCgpKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCht
X2ltcG9ydHMuZ2V0KCksIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwog
ICAgIGlmICghbV9pbXBvcnRzLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnRpZmllciwgc2xv
dCkpCiAgICAgICAgIEZBSUxfV0lUSF9NRVNTQUdFKCJDYW4ndCBmaW5kIGEgcHJvcGVydHkgbmFt
ZWQgXCIiICsgaW1wb3J0TmFtZSArICciJyk7CiAgICAgRkFJTF9JRl9GQUxTRShzbG90LmlzVmFs
dWUoKSwgIlwiIiArIGltcG9ydE5hbWUgKyAiXCIgaXMgbm90IGEgZGF0YSBwcm9wZXJ0eS4iKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAyLTE2ICBTYWFtIGJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBQcm94eSBbW0dl
dF1dCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQw
ODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3Jp
dGhtRGljdGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRIYXNoQWxnb3JpdGhtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0suY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNB
cnJheUZyb21KU09OKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFN0cmluZ0Zyb21KU09OKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldEJvb2xlYW5Gcm9tSlNPTik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlhbG9nSGFuZGxl
cjo6cmV0dXJuVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnk6OnRyeUdldFByb3BlcnR5KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpKU1N0b3JhZ2U6
OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1N0b3JhZ2U6OnB1
dERlbGVnYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpnZXRQcm9wZXJ0eSk6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjppc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkKToKKwogMjAxNi0wMi0xNiAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgSlNET01XaW5kb3c6
OmdldE93blByb3BlcnR5U2xvdCBzaG91bGQganVzdCBjYWxsIGdldFN0YXRpY1Byb3BlcnR5U2xv
dApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0
aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAxOTY2NzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIGJvb2wgSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9u
YXJ5OjpnZXRBbGcKIHN0YXRpYyBKU1ZhbHVlIGdldFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBJZGVudGlmaWVyIGlk
ZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIG5hbWUpOwotICAgIFByb3Bl
cnR5U2xvdCBzbG90KG9iamVjdCk7CisgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKIAogICAgIGlmIChvYmplY3QtPmdl
dFByb3BlcnR5U2xvdChleGVjLCBpZGVudGlmaWVyLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHNs
b3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7CkBAIC0xMTEsNyArMTExLDYgQEAgc3RhdGlj
IGJvb2wgZ2V0SGFzaEFsZ29yaXRobShKU0RpY3Rpb25hcgogICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBkaWN0aW9uYXJ5LmluaXRpYWxpemVyT2JqZWN0KCk7CiAKICAgICBJZGVudGlmaWVyIGlkZW50
aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJoYXNoIik7Ci0gICAgUHJvcGVy
dHlTbG90IHNsb3Qob2JqZWN0KTsKIAogICAgIEpTVmFsdWUgaGFzaCA9IGdldFByb3BlcnR5KGV4
ZWMsIG9iamVjdCwgImhhc2giKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5
U2VyaWFsaXphdGlvbkpXSy5jcHAJKHJldmlzaW9uIDE5NjY3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIGJvb2wgZ2V0
SlNBcnJheUZyb21KU09OKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGpzb24sIGNvbnN0IGNo
YXIqIGtleSwgSlNBcnJheSomIHJlc3VsdCkKIHsKICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGtleSk7Ci0gICAgUHJvcGVydHlTbG90IHNs
b3QoanNvbik7CisgICAgUHJvcGVydHlTbG90IHNsb3QoanNvbiwgUHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGU6OkdldCk7CiAKICAgICBpZiAoIWpzb24tPmdldFByb3BlcnR5U2xvdChl
eGVjLCBpZGVudGlmaWVyLCBzbG90KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzMsNyAr
NzMsNyBAQCBzdGF0aWMgYm9vbCBnZXRKU0FycmF5RnJvbUpTT04oRXhlY1N0YXRlCiBzdGF0aWMg
Ym9vbCBnZXRTdHJpbmdGcm9tSlNPTihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBqc29uLCBj
b25zdCBjaGFyKiBrZXksIFN0cmluZyYgcmVzdWx0KQogewogICAgIElkZW50aWZpZXIgaWRlbnRp
ZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywga2V5KTsKLSAgICBQcm9wZXJ0eVNs
b3Qgc2xvdChqc29uKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChqc29uLCBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKIAogICAgIGlmICghanNvbi0+Z2V0UHJvcGVydHlT
bG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05
NCw3ICs5NCw3IEBAIHN0YXRpYyBib29sIGdldFN0cmluZ0Zyb21KU09OKEV4ZWNTdGF0ZSoKIHN0
YXRpYyBib29sIGdldEJvb2xlYW5Gcm9tSlNPTihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBq
c29uLCBjb25zdCBjaGFyKiBrZXksIGJvb2wmIHJlc3VsdCkKIHsKICAgICBJZGVudGlmaWVyIGlk
ZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGtleSk7Ci0gICAgUHJvcGVy
dHlTbG90IHNsb3QoanNvbik7CisgICAgUHJvcGVydHlTbG90IHNsb3QoanNvbiwgUHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAKICAgICBpZiAoIWpzb24tPmdldFByb3Bl
cnR5U2xvdChleGVjLCBpZGVudGlmaWVyLCBzbG90KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9t
LmNwcAkocmV2aXNpb24gMTk2Njc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjMsNyArNTYzLDcgQEAgaW5s
aW5lIEpTVmFsdWUgRGlhbG9nSGFuZGxlcjo6cmV0dXJuVmFsdQogICAgIGlmICghZ2xvYmFsT2Jq
ZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBJZGVudGlmaWVyIGlkZW50
aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZtX2V4ZWMsICJyZXR1cm5WYWx1ZSIpOwot
ICAgIFByb3BlcnR5U2xvdCBzbG90KGdsb2JhbE9iamVjdCk7CisgICAgUHJvcGVydHlTbG90IHNs
b3QoZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsK
ICAgICBpZiAoIUpTR2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0
LCAmbV9leGVjLCBpZGVudGlmaWVyLCBzbG90KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoJm1fZXhlYywgaWRlbnRpZmllcik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAJKHJldmlzaW9u
IDE5NjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgSlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0
eVJlc3VsdCBKU0RpY3RpbwogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgIElkZW50aWZp
ZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCBwcm9wZXJ0eU5h
bWUpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KG1faW5pdGlhbGl6ZXJPYmplY3QuZ2V0KCkpOwor
ICAgIFByb3BlcnR5U2xvdCBzbG90KG1faW5pdGlhbGl6ZXJPYmplY3QuZ2V0KCksIFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogCiAgICAgaWYgKCFtX2luaXRpYWxpemVy
T2JqZWN0LmdldCgpLT5nZXRQcm9wZXJ0eVNsb3QobV9leGVjLCBpZGVudGlmaWVyLCBzbG90KSkK
ICAgICAgICAgcmV0dXJuIE5vUHJvcGVydHlGb3VuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTk2Njc4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNyArNTcsNyBAQCBib29sIEpTU3RvcmFnZTo6ZGVsZXRlUHJvcGVydHkoSlND
ZWxsKiBjCiAgICAgLy8gT25seSBwZXJmb3JtIHRoZSBjdXN0b20gZGVsZXRlIGlmIHRoZSBvYmpl
Y3QgZG9lc24ndCBoYXZlIGEgbmF0aXZlIHByb3BlcnR5IGJ5IHRoaXMgbmFtZS4KICAgICAvLyBT
aW5jZSBoYXNQcm9wZXJ0eSgpIHdvdWxkIGVuZCB1cCBjYWxsaW5nIGNhbkdldEl0ZW1zRm9yTmFt
ZSgpIGFuZCBiZSBmb29sZWQsIHdlIG5lZWQgdG8gY2hlY2sKICAgICAvLyB0aGUgbmF0aXZlIHBy
b3BlcnR5IHNsb3RzIG1hbnVhbGx5LgotICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3Qp
OworICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CiAKICAgICBzdGF0aWNfYXNzZXJ0KCFoYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlLCAiVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgc3RhdGlj
IGluc3RhbmNlIHByb3BlcnRpZXMiKTsKIApAQCAtNzYsOCArNzYsNiBAQCBib29sIEpTU3RvcmFn
ZTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjCiAKIGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSkKIHsKLSAgICBKU1N0b3JhZ2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdG9yYWdl
Kj4oY2VsbCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCk7CiAgICAgc3RhdGlj
X2Fzc2VydCghaGFzU3RhdGljUHJvcGVydHlUYWJsZSwgIlRoaXMgZnVuY3Rpb24gZG9lcyBub3Qg
aGFuZGxlIHN0YXRpYyBpbnN0YW5jZSBwcm9wZXJ0aWVzIik7CiAgICAgcmV0dXJuIGRlbGV0ZVBy
b3BlcnR5KGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSk7
CiB9CkBAIC0xMDUsNyArMTAzLDcgQEAgYm9vbCBKU1N0b3JhZ2U6OnB1dERlbGVnYXRlKEV4ZWNT
dGF0ZSogZQogICAgIC8vIE9ubHkgcGVyZm9ybSB0aGUgY3VzdG9tIHB1dCBpZiB0aGUgb2JqZWN0
IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBwcm9wZXJ0eSBieSB0aGlzIG5hbWUuCiAgICAgLy8gU2lu
Y2UgaGFzUHJvcGVydHkoKSB3b3VsZCBlbmQgdXAgY2FsbGluZyBjYW5HZXRJdGVtc0Zvck5hbWUo
KSBhbmQgYmUgZm9vbGVkLCB3ZSBuZWVkIHRvIGNoZWNrCiAgICAgLy8gdGhlIG5hdGl2ZSBwcm9w
ZXJ0eSBzbG90cyBtYW51YWxseS4KLSAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKKyAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
R2V0T3duUHJvcGVydHkpOwogICAgIHN0YXRpY19hc3NlcnQoIWhhc1N0YXRpY1Byb3BlcnR5VGFi
bGUsICJUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBzdGF0aWMgaW5zdGFuY2UgcHJvcGVy
dGllcyIpOwogCiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzLT5wcm90b3R5cGUoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAkocmV2aXNpb24gMTk2Njc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQxLDcgKzY0
MSw3IEBAIHByaXZhdGU6CiAKICAgICBKU1ZhbHVlIGdldFByb3BlcnR5KEpTT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKICAgICB7Ci0gICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90KG9iamVjdCk7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAgICAgICAgIGlmIChvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIG1fZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKG1fZXhl
YywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDE5NjY3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ0Myw3ICsz
NDQzLDcgQEAgYm9vbCBJbnRlcm5hbHM6OmlzUmVhZGFibGVTdHJlYW1EaXN0dXJiZQogICAgIEpT
Vk1DbGllbnREYXRhKiBjbGllbnREYXRhID0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPihz
dGF0ZS52bSgpLmNsaWVudERhdGEpOwogICAgIGNvbnN0IElkZW50aWZpZXImIHByaXZhdGVOYW1l
ID0gY2xpZW50RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygpLnJlYWRhYmxlU3RyZWFtSW50ZXJuYWxz
QnVpbHRpbnMoKS5pc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkUHJpdmF0ZU5hbWUoKTsKICAgICBK
U1ZhbHVlIHZhbHVlOwotICAgIFByb3BlcnR5U2xvdCBwcm9wZXJ0eVNsb3QodmFsdWUpOworICAg
IFByb3BlcnR5U2xvdCBwcm9wZXJ0eVNsb3QodmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxN
ZXRob2RUeXBlOjpHZXQpOwogICAgIGdsb2JhbE9iamVjdC0+ZmFzdEdldE93blByb3BlcnR5U2xv
dCgmc3RhdGUsIHN0YXRlLnZtKCksICpnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLCBwcml2YXRl
TmFtZSwgcHJvcGVydHlTbG90KTsKICAgICB2YWx1ZSA9IHByb3BlcnR5U2xvdC5nZXRWYWx1ZSgm
c3RhdGUsIHByaXZhdGVOYW1lKTsKICAgICBBU1NFUlQodmFsdWUuaXNGdW5jdGlvbigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271616</attachid>
            <date>2016-02-17 19:06:01 -0800</date>
            <delta_ts>2016-02-18 10:51:09 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>30252</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBA
CisyMDE2LTAyLTE3ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCBQcm94eS5bW0dldE93blByb3BlcnR5XV0KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDMxNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBQcm94eS5b
W0dldE93blByb3BlcnR5XV0uCisgICAgICAgIEl0J3MgYSBzdHJhaWdodCBmb3J3YXJkIGltcGxl
bWVudGF0aW9uIGFzIGRlc2NyaWJlZAorICAgICAgICBpbiBzZWN0aW9uIDkuNS41IG9mIHRoZSBz
cGVjaWZpY2F0aW9uOgorICAgICAgICBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcv
ZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2Rz
LWFuZC1pbnRlcm5hbC1zbG90cy1nZXRvd25wcm9wZXJ0eS1wCisKKyAgICAgICAgKiBydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Qcm90b0Z1bmNC
aW5kKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6dmFs
aWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRl
ZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEdlbmVyaWNQcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE1ldGhvZCk6CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5
QWRkcmVzcyk6CisgICAgICAgIChKU0M6Om1ha2VJZGVudGlmaWVyKToKKyAgICAgICAgKiBydW50
aW1lL1Byb3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5R2V0KToKKyAg
ICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdENvbW1v
bik6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAg
ICAgICAoSlNDOjpQcm94eU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAg
ICAgIChKU0M6OlByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1l
L1Byb3h5T2JqZWN0Lmg6CisgICAgICAgICogdGVzdHMvZXM2LnlhbWw6CisgICAgICAgICogdGVz
dHMvc3RyZXNzL3Byb3h5LWJhc2ljLmpzOgorICAgICAgICAobGV0LmhhbmRsZXIuZ2V0IG51bGwp
OgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wcm94eS1nZXQtb3duLXByb3BlcnR5LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0aHJvdy5uZXcuRXJyb3IubGV0LmhhbmRs
ZXIuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKHRocm93Lm5ldy5FcnJvcik6
CisgICAgICAgIChsZXQuaGFuZGxlci5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAg
ICAoaS5jYXRjaCk6CisgICAgICAgIChhc3NlcnQubGV0LmhhbmRsZXIuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKToKKwogMjAxNi0wMi0xNyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFw
cGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBBUk02NDogU3VwcG9ydCB0aGUgaW1tZWRpYXRlIGZv
cm1hdCB1c2VkIGZvciBiaXQgb3BlcmF0aW9ucyBpbiBBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDE5NjcyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDEzICsxNTMsMTggQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBybwogICAgIC8vIElmIHRoZSBbW0NsYXNzXV0gaW50
ZXJuYWwgcHJvcGVydHkgb2YgVGFyZ2V0IGlzICJGdW5jdGlvbiIsIHRoZW4gLi4uCiAgICAgLy8g
RWxzZSBzZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byAwLgogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IDA7Ci0gICAgaWYgKHRhcmdldE9iamVjdC0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6
aW5mbygpKSkgewotICAgICAgICBBU1NFUlQodGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKS5pc051bWJlcigpKTsKKyAgICBpZiAodGFyZ2V0T2JqZWN0LT5oYXNP
d25Qcm9wZXJ0eShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSkgeworICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCiAgICAgICAgIC8vIGEuIExldCBMIGJlIHRoZSBsZW5n
dGggcHJvcGVydHkgb2YgVGFyZ2V0IG1pbnVzIHRoZSBsZW5ndGggb2YgQS4KICAgICAgICAgLy8g
Yi4gU2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gZWl0aGVyIDAgb3IgTCwgd2hp
Y2hldmVyIGlzIGxhcmdlci4KLSAgICAgICAgdW5zaWduZWQgdGFyZ2V0TGVuZ3RoID0gKHVuc2ln
bmVkKXRhcmdldC5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkuYXNOdW1i
ZXIoKTsKLSAgICAgICAgaWYgKHRhcmdldExlbmd0aCA+IG51bUJvdW5kQXJncykKLSAgICAgICAg
ICAgIGxlbmd0aCA9IHRhcmdldExlbmd0aCAtIG51bUJvdW5kQXJnczsKKyAgICAgICAgSlNWYWx1
ZSBsZW5ndGhWYWx1ZSA9IHRhcmdldC5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCk7CisgICAgICAgIGlmIChsZW5ndGhWYWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCB0YXJnZXRMZW5ndGggPSAodW5zaWduZWQpbGVuZ3RoVmFsdWUuYXNOdW1iZXIo
KTsKKyAgICAgICAgICAgIGlmICh0YXJnZXRMZW5ndGggPiBudW1Cb3VuZEFyZ3MpCisgICAgICAg
ICAgICAgICAgbGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gbnVtQm91bmRBcmdzOworICAgICAgICB9
CiAgICAgfQogCiAgICAgSlNTdHJpbmcqIG5hbWUgPSB0YXJnZXQuZ2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5uYW1lKS50b1N0cmluZyhleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE5NjcyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjY0NiwzNCArMjY0NiwzOCBAQCBwcml2YXRlOgogICAgIFZNJiBtX3ZtOwogfTsKIAotYm9vbCBK
U09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKKworLy8gOS4xLjYuMyBvZiB0aGUgc3BlYworLy8gaHR0
cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3Nl
Yy12YWxpZGF0ZWFuZGFwcGx5cHJvcGVydHlkZXNjcmlwdG9yCitib29sIHZhbGlkYXRlQW5kQXBw
bHlQcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBib29sIGlzRXh0ZW5zaWJsZSwKKyAgICBjb25zdCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgaXNDdXJyZW50RGVmaW5lZCwgY29u
c3QgUHJvcGVydHlEZXNjcmlwdG9yJiBjdXJyZW50LCBib29sIHRocm93RXhjZXB0aW9uKQogewot
ICAgIC8vIFRyYWNrIG9uIHRoZSBnbG9iYWxkYXRhIHRoYXQgd2UncmUgaW4gZGVmaW5lIHByb3Bl
cnR5LgotICAgIC8vIEN1cnJlbnRseSBEZWZpbmVPd25Qcm9wZXJ0eSB1c2VzIGRlbGV0ZSB0byBy
ZW1vdmUgcHJvcGVydGllcyB3aGVuIHRoZXkgYXJlIGJlaW5nIHJlcGxhY2VkCi0gICAgLy8gKHBh
cnRpY3VsYXJseSB3aGVuIGNoYW5naW5nIGF0dHJpYnV0ZXMpLCBob3dldmVyIGRlbGV0ZSB3b24n
dCBhbGxvdyBub24tY29uZmlndXJhYmxlIChpLmUuCi0gICAgLy8gRG9udERlbGV0ZSkgcHJvcGVy
dGllcyB0byBiZSBkZWxldGVkLiBGb3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMgZmxhZyB0byBtYWtl
IHRoaXMgd29yay4KLSAgICBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHNjb3BlKGV4ZWMpOwotICAg
IAogICAgIC8vIElmIHdlIGhhdmUgYSBuZXcgcHJvcGVydHkgd2UgY2FuIGp1c3QgcHV0IGl0IG9u
IG5vcm1hbGx5Ci0gICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgaWYgKCFnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgeworICAg
IC8vIFN0ZXAgMi4KKyAgICBpZiAoIWlzQ3VycmVudERlZmluZWQpIHsKICAgICAgICAgLy8gdW5s
ZXNzIGV4dGVuc2lvbnMgYXJlIHByZXZlbnRlZCEKLSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUo
KSkgeworICAgICAgICAvLyBTdGVwIDIuYQorICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSkgewog
ICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uKQogICAgICAgICAgICAgICAgIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4
dGVuc2libGUuIikpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorICAg
ICAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAvLyBT
dGVwIDIuYy9kCiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBvbGREZXNjcmlwdG9yOwogICAg
ICAgICBvbGREZXNjcmlwdG9yLnNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1
cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRl
c2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKKyAgICAgICAgLy8gRklYTUU6
IHNwZWMgc2F5cyB0byBhbHdheXMgcmV0dXJuIHRydWUgaGVyZS4KKyAgICAgICAgcmV0dXJuIHB1
dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2Ny
aXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKICAgICB9Ci0KKyAgICAvLyBTdGVw
IDMuCiAgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LQorICAgIC8vIFN0ZXAgNC4KICAgICBpZiAoY3VycmVudC5lcXVhbFRvKGV4ZWMsIGRlc2NyaXB0
b3IpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIC8vIFN0ZXAgNS4KICAgICAvLyBGaWx0
ZXIgb3V0IGludmFsaWQgY2hhbmdlcwogICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkg
ewogICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkgewpAQCAtMjY4NywxNiAr
MjY5MSwxOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0KKyAgICAKKyAgICAvLyBT
dGVwIDYuCiAgICAgLy8gQSBnZW5lcmljIGRlc2NyaXB0b3IgaXMgc2ltcGx5IGNoYW5naW5nIHRo
ZSBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5CiAgICAgaWYgKGRlc2NyaXB0b3Iu
aXNHZW5lcmljRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIGlmICghY3VycmVudC5hdHRyaWJ1dGVz
RXF1YWwoZGVzY3JpcHRvcikpIHsKLSAgICAgICAgICAgIG1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAg
cmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
LCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVu
dCk7CisgICAgICAgIGlmICghY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikgJiYg
b2JqZWN0KSB7CisgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5k
ZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBy
ZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
ciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJl
bnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQorICAgIAorICAg
IC8vIFN0ZXAgNy4KICAgICAvLyBDaGFuZ2luZyBiZXR3ZWVuIGEgbm9ybWFsIHByb3BlcnR5IG9y
IGFuIGFjY2Vzc29yIHByb3BlcnR5CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRv
cigpICE9IGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpKSB7CiAgICAgICAgIGlmICghY3VycmVu
dC5jb25maWd1cmFibGUoKSkgewpAQCAtMjcwNCwxMCArMjcxMCwxNSBAQCBib29sIEpTT2JqZWN0
OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5CiAgICAgICAgICAgICAgICAgZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJB
dHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKSkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0g
ICAgICAgIG1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVj
LCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlz
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRp
bmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKworICAgICAgICBpZiAoIW9iamVjdCkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhl
Yy0+dm0oKSktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQp
LCBjdXJyZW50KTsKICAgICB9CiAKKyAgICAvLyBTdGVwIDguCiAgICAgLy8gQ2hhbmdpbmcgdGhl
IHZhbHVlIGFuZCBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5CiAgICAgaWYgKGRl
c2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CiAgICAgICAgIGlmICghY3VycmVudC5jb25m
aWd1cmFibGUoKSkgewpAQCAtMjcyNiwxMCArMjczNywxMyBAQCBib29sIEpTT2JqZWN0OjpkZWZp
bmVPd25Ob25JbmRleFByb3BlcnR5CiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQuYXR0
cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpICYmICFkZXNjcmlwdG9yLnZhbHVlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgbWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlbGV0
ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXRE
ZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRv
ci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAg
ICBpZiAoIW9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5n
Q3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCisgICAgLy8gU3RlcCA5LgogICAg
IC8vIENoYW5naW5nIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgb2YgYW4gZXhpc3RpbmcgYWNjZXNz
b3IgcHJvcGVydHkKICAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KTsKICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKQEAgLTI3NDksNyArMjc2Mywx
MSBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9
IGdldERpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpOworCisgICAgLy8gU3RlcCAxMC8x
MS4KKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSBh
Y2Nlc3NvciA9IG9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSk7CiAg
ICAgaWYgKCFhY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRlclNldHRl
ciogZ2V0dGVyU2V0dGVyOwpAQCAtMjc3MCwxMiArMjc4OCwyNCBAQCBib29sIEpTT2JqZWN0Ojpk
ZWZpbmVPd25Ob25JbmRleFByb3BlcnR5CiAgICAgfQogICAgIGlmIChjdXJyZW50LmF0dHJpYnV0
ZXNFcXVhbChkZXNjcmlwdG9yKSAmJiAhZ2V0dGVyU2V0dGVyQ2hhbmdlZCkKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgbWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52
bSgpKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIHVu
c2lnbmVkIGF0dHJzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3Vy
cmVudCk7Ci0gICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCBnZXR0ZXJT
ZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOworICAgIG9iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3Io
ZXhlYywgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOwogICAg
IHJldHVybiB0cnVlOwogfQogCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAg
IC8vIFRyYWNrIG9uIHRoZSBnbG9iYWxkYXRhIHRoYXQgd2UncmUgaW4gZGVmaW5lIHByb3BlcnR5
LgorICAgIC8vIEN1cnJlbnRseSBEZWZpbmVPd25Qcm9wZXJ0eSB1c2VzIGRlbGV0ZSB0byByZW1v
dmUgcHJvcGVydGllcyB3aGVuIHRoZXkgYXJlIGJlaW5nIHJlcGxhY2VkCisgICAgLy8gKHBhcnRp
Y3VsYXJseSB3aGVuIGNoYW5naW5nIGF0dHJpYnV0ZXMpLCBob3dldmVyIGRlbGV0ZSB3b24ndCBh
bGxvdyBub24tY29uZmlndXJhYmxlIChpLmUuCisgICAgLy8gRG9udERlbGV0ZSkgcHJvcGVydGll
cyB0byBiZSBkZWxldGVkLiBGb3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMgZmxhZyB0byBtYWtlIHRo
aXMgd29yay4KKyAgICBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHNjb3BlKGV4ZWMpOworICAgIFBy
b3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OworICAgIGJvb2wgaXNDdXJyZW50RGVmaW5lZCA9IGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpOworICAg
IHJldHVybiB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHBy
b3BlcnR5TmFtZSwgaXNFeHRlbnNpYmxlKCksIGRlc2NyaXB0b3IsIGlzQ3VycmVudERlZmluZWQs
IGN1cnJlbnQsIHRocm93RXhjZXB0aW9uKTsKK30KKwogYm9vbCBKU09iamVjdDo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wg
dGhyb3dFeGNlcHRpb24pCiB7CiAgICAgLy8gSWYgaXQncyBhbiBhcnJheSBpbmRleCwgdGhlbiB1
c2UgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4KQEAgLTI4OTUsNCArMjkyNSwyOSBAQCB2
b2lkIEpTT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKCiAgICAgfQogfQogCisvLyBJ
bXBsZW1lbnRzIEdldE1ldGhvZChPLCBQKSBpbiBzZWN0aW9uIDcuMy45IG9mIHRoZSBzcGVjLgor
Ly8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5o
dG1sI3NlYy1nZXRtZXRob2QKK0pTVmFsdWUgSlNPYmplY3Q6OmdldE1ldGhvZChFeGVjU3RhdGUq
IGV4ZWMsIENhbGxEYXRhJiBjYWxsRGF0YSwgQ2FsbFR5cGUmIGNhbGxUeXBlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgSlNWYWx1
ZSBtZXRob2QgPSBnZXQoZXhlYywgaWRlbnQpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBpZiAobWV0aG9kLmlzVW5k
ZWZpbmVkKCkgfHwgbWV0aG9kLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKworICAgIGlmICghbWV0aG9kLmlzQ2VsbCgpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgfQorCisgICAgY2FsbFR5cGUgPSBtZXRob2QuYXNDZWxsKCktPm1ldGhvZFRhYmxlKCktPmdl
dENhbGxEYXRhKG1ldGhvZC5hc0NlbGwoKSwgY2FsbERhdGEpOworICAgIGlmIChjYWxsVHlwZSA9
PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBlcnJvck1l
c3NhZ2UpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbWV0aG9kOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTk2NzIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzE3LDYg
KzcxNyw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZtX2J1dHRlcmZseTsKICAgICB9CiAK
KyAgICBKU1ZhbHVlIGdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIENhbGxEYXRhJiBjYWxsRGF0
YSwgQ2FsbFR5cGUmIGNhbGxUeXBlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpOworCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJvdGVj
dGVkOgpAQCAtMTQ3MSw2ICsxNDczLDkgQEAgQUxXQVlTX0lOTElORSBJZGVudGlmaWVyIG1ha2VJ
ZGVudGlmaWVyKAogICAgIHJldHVybiBuYW1lOwogfQogCitib29sIHZhbGlkYXRlQW5kQXBwbHlQ
cm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGJv
b2wgaXNFeHRlbnNpYmxlLAorICAgIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCBpc0N1cnJlbnREZWZpbmVkLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGN1cnJl
bnQsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworCiAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIG5hdGl2
ZSBmdW5jdGlvbnMsIGlmIHlvdSdyZSBub3QgdXNpbmcgYSBzdGF0aWMgaGFzaCB0YWJsZS4KIC8v
IFVzZSB0aGlzIG1hY3JvIGZyb20gd2l0aGluIGZpbmlzaENyZWF0aW9uKCkgbWV0aG9kcyBpbiBw
cm90b3R5cGVzLiBUaGlzIGFzc3VtZXMKIC8vIHlvdSd2ZSBkZWZpbmVkIHZhcmlhYmxlcyBjYWxs
ZWQgZXhlYywgZ2xvYmFsT2JqZWN0LCBhbmQgdm0sIGFuZCB0aGV5CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAxOTY3MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDggKzI3LDEwIEBACiAjaW5jbHVkZSAiUHJveHlPYmplY3QuaCIKIAog
I2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNs
dWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNp
bmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIApAQCAtOTAsMjUgKzkyLDIxIEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQoRXgKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJQcm94eSAnaGFuZGxlcicgaXMg
bnVsbC4gSXQgc2hvdWxkIGJlIGFuIE9iamVjdC4iKSk7CiAKICAgICBKU09iamVjdCogaGFuZGxl
ciA9IGpzQ2FzdDxKU09iamVjdCo+KGhhbmRsZXJWYWx1ZSk7Ci0gICAgSlNPYmplY3QqIHRhcmdl
dCA9IHByb3h5T2JqZWN0LT50YXJnZXQoKTsKLSAgICBKU1ZhbHVlIGdldEhhbmRsZXIgPSBoYW5k
bGVyLT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Z2V0KTsKKyAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBKU1ZhbHVlIGdldEhhbmRsZXIgPSBo
YW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5h
bWVzLT5nZXQsIEFTQ0lJTGl0ZXJhbCgiJ2dldCcgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRs
ZXIgb2JqZWN0IHNob3VsZCBiZSBjYWxsYWJsZS4iKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CisgICAgSlNPYmplY3QqIHRhcmdldCA9IHByb3h5T2JqZWN0LT50YXJnZXQoKTsKICAgICBpZiAo
Z2V0SGFuZGxlci5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRhcmdldC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwogCi0gICAgaWYgKCFnZXRIYW5kbGVy
LmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoIidnZXQnIHByb3BlcnR5IG9mIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFi
bGUuIikpOwotCi0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBnZXRIYW5kbGVyLmFzQ2VsbCgpLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXRIYW5k
bGVyLmFzQ2VsbCgpLCBjYWxsRGF0YSk7Ci0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCIn
Z2V0JyBwcm9wZXJ0eSBvZiBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlLiIpKTsK
LQogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBw
ZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhleGVjLCBwcm9wZXJ0
eU5hbWUudWlkKCkpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXJndW1lbnRzLmFwcGVu
ZCh0aGlzT2JqZWN0KTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdldEhh
bmRsZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC0xMjUsMzkgKzEyMywxMjQgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeAogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8g
RklYTUU6IHdoZW4gaW1wbGVtZW50aW5nIFByb3h5LltbR2V0T3duUHJvcGVydHldXSBpdCB3b3Vs
ZCBiZSBhIGdvb2QgdGVzdCB0bwotICAgIC8vIGhhdmUgaGFuZGxlciBiZSBhbm90aGVyIFByb3h5
IHdoZXJlIGl0cyBoYW5kbGVyIHRocm93cyBvbiBbW0dldE93blByb3BlcnR5XV0KLSAgICAvLyBy
aWdodCBoZXJlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTQzMTQKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRyYXBSZXN1bHQpOwogfQogCi1ib29sIFByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3RDb21tb24oRXhlY1N0YXRlKiwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBQcm94eU9iamVj
dDo6cGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBzbG90LnNldFZhbHVlKHRoaXMsIE5vbmUsIGpzVW5kZWZp
bmVkKCkpOyAvLyBXZSBkbyB0aGlzIHRvIHByb3RlY3QgYWdhaW5zdCBhbnkgYmFkIGFjdG9ycy4g
Tm9ib2R5IHNob3VsZCBkZXBlbmQgb24gdGhpcyB2YWx1ZS4KKyAgICBKU1ZhbHVlIGhhbmRsZXJW
YWx1ZSA9IHRoaXMtPmhhbmRsZXIoKTsKKyAgICBpZiAoaGFuZGxlclZhbHVlLmlzTnVsbCgpKSB7
CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJQcm94eSAnaGFu
ZGxlcicgaXMgbnVsbC4gSXQgc2hvdWxkIGJlIGFuIE9iamVjdC4iKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBKU09iamVjdCogaGFuZGxlciA9IGpzQ2FzdDxKU09iamVj
dCo+KGhhbmRsZXJWYWx1ZSk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUg
Y2FsbFR5cGU7CisgICAgSlNWYWx1ZSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNZXRob2QgPSBo
YW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmll
cih2bSwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIpLCBBU0NJSUxpdGVyYWwoIidnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3InIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBi
ZSBjYWxsYWJsZS4iKSk7CisgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwor
ICAgIGlmIChnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNZXRob2QuaXNVbmRlZmluZWQoKSkKKyAg
ICAgICAgcmV0dXJuIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3Qo
dGFyZ2V0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworCisgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKKyAgICBhcmd1
bWVudHMuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHByb3BlcnR5TmFtZS51aWQoKSkpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTVmFs
dWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTWV0aG9k
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXRyYXBS
ZXN1bHQuaXNVbmRlZmluZWQoKSAmJiAhdHJhcFJlc3VsdC5pc09iamVjdCgpKSB7CisgICAgICAg
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJyZXN1bHQgb2YgJ2dldE93blBy
b3BlcnR5RGVzY3JpcHRvcicgY2FsbCBzaG91bGQgZWl0aGVyIGJlIGFuIE9iamVjdCBvciB1bmRl
ZmluZWQuIikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgUHJvcGVydHlE
ZXNjcmlwdG9yIHRhcmdldFByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICBib29sIGlzVGFyZ2V0UHJv
cGVydHlEZXNjcmlwdG9yRGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0
cmFwUmVzdWx0LmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgaWYgKCFpc1RhcmdldFByb3BlcnR5
RGVzY3JpcHRvckRlZmluZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghdGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2hlbiB0aGUgcmVzdWx0IG9m
ICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InIGlzIHVuZGVmaW5lZCB0aGUgdGFyZ2V0IG11c3Qg
YmUgY29uZmlndXJhYmxlLiIpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICAvLyBGSVhNRTogdGhpcyBkb2Vzbid0IHdvcmsgaWYgJ3RhcmdldCcgaXMgYW5v
dGhlciBQcm94eS4gV2UgZG9uJ3QgaGF2ZSBpc0V4dGVuc2libGUgaW1wbGVtZW50ZWQgaW4gYSB3
YXkgdGhhdCBmaXRzIHcvIFByb3h5cy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NDM3NQorICAgICAgICBpZiAoIXRhcmdldC0+aXNFeHRlbnNp
YmxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSB0ZXN0IGZvciB0
aGlzIGVycm9yLiBJJ20gbm90IHN1cmUgaG93IHRvIGJlY2F1c2UKKyAgICAgICAgICAgIC8vIE9i
amVjdC5zZWFsKG8pIHdpbGwgbWFrZSBhbGwgZmllbGRzIFtbQ29uZmlndXJhYmxlXV0gZmFsc2Uu
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU0Mzc2CisgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
V2hlbiAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJyByZXR1cm5zIHVuZGVmaW5lZCwgdGhlICd0
YXJnZXQnIG9mIGEgUHJveHkgc2hvdWxkIGJlIGV4dGVuc2libGUuIikpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIFByb3BlcnR5RGVzY3JpcHRvciB0cmFwUmVzdWx0QXNEZXNjcmlwdG9yOworICAgIHRv
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHRyYXBSZXN1bHQsIHRyYXBSZXN1bHRBc0Rlc2NyaXB0
b3IpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgc3RlcCAxNC4gQ29tcGxldGVQcm9wZXJ0eURlc2Ny
aXB0b3IodHJhcFJlc3VsdEFzRGVzY3JpcHRvcikgaW4gdGhlIHNwZWMuIE1heWJlIHRoaXMgaXMg
YWxyZWFkeSBkb25lPworICAgIGJvb2wgdGhyb3dFeGNlcHRpb24gPSBmYWxzZTsKKyAgICBib29s
IHZhbGlkID0gdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBudWxscHRy
LCBwcm9wZXJ0eU5hbWUsIHRhcmdldC0+aXNFeHRlbnNpYmxlKCksCisgICAgICAgIHRyYXBSZXN1
bHRBc0Rlc2NyaXB0b3IsIGlzVGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yRGVmaW5lZCwgdGFyZ2V0
UHJvcGVydHlEZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgaWYgKCF2YWxpZCkgewor
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUmVzdWx0IGZyb20g
J2dldE93blByb3BlcnR5RGVzY3JpcHRvcicgZmFpbHMgdGhlIElzQ29tcGF0aWJsZVByb3BlcnR5
RGVzY3JpcHRvciB0ZXN0LiIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmICghdHJhcFJlc3VsdEFzRGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkgeworICAgICAgICBp
ZiAoIWlzVGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yRGVmaW5lZCB8fCB0YXJnZXRQcm9wZXJ0eURl
c2NyaXB0b3IuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJSZXN1bHQgZnJvbSAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
JyBjYW4ndCBiZSBub24tY29uZmlndXJhYmxlIHdoZW4gdGhlICd0YXJnZXQnIGRvZXNuJ3QgaGF2
ZSBpdCBhcyBhbiBvd24gcHJvcGVydHkgb3IgaWYgaXQgaXMgYSBjb25maWd1cmFibGUgb3duIHBy
b3BlcnR5IG9uICd0YXJnZXQnLiIpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb3h5T2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgaWYgKHNsb3QuaW50ZXJuYWxN
ZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCkgewor
ICAgIHN3aXRjaCAoc2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSkgeworICAgIGNhc2UgUHJvcGVy
dHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldDoKICAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpcywgQ3VzdG9tQWNjZXNzb3IsIHBlcmZvcm1Qcm94eUdldCk7CiAgICAgICAgIHNsb3QuZGlz
YWJsZUNhY2hpbmcoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHk6CisgICAgICAgIHJldHVybiBw
ZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgUHJveHkuW1tI
YXNQcm9wZXJ0eV1dLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU0MzEzCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IFByb3h5LltbSGFzUHJvcGVydHldXSBhbmQgUHJveHkuW1tHZXRPd25Q
cm9wZXJ0eV1dCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NDMxMwotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTQzMTQKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KLWJvb2wgUHJveHlPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQor
Citib29sIFByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmpl
Y3QqPihvYmplY3QpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3RD
b21tb24oZXhlYywgc2xvdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5
U2xvdENvbW1vbihleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIFByb3h5T2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgUHJveHlPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBQ
cm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iamVjdCk7Ci0g
ICAgcmV0dXJuIHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5U2xvdENvbW1vbihleGVjLCBzbG90
KTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpOyAKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90Q29tbW9uKGV4
ZWMsIGlkZW50LmltcGwoKSwgc2xvdCk7CiB9CiAKIHZvaWQgUHJveHlPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMTk2NzIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNyArNjMsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9u
KEV4ZWNTdGF0ZSosIFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
Q29tbW9uKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgYm9v
bCBwZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3Rh
cmdldDsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9oYW5kbGVyOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9lczYueWFtbAkocmV2aXNpb24gMTk2NzIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI1LDcgKzEw
MjUsNyBAQAogLSBwYXRoOiBlczYvUHJveHlfaW50ZXJuYWxfZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yX2NhbGxzX09iamVjdC5hc3NpZ24uanMKICAgY21kOiBydW5FUzYgOmZhaWwKIC0gcGF0aDog
ZXM2L1Byb3h5X2ludGVybmFsX2dldE93blByb3BlcnR5RGVzY3JpcHRvcl9jYWxsc19PYmplY3Qu
cHJvdG90eXBlLmhhc093blByb3BlcnR5LmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDog
cnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L1Byb3h5X2ludGVybmFsX293bktleXNfY2FsbHNf
U2VyaWFsaXplSlNPTk9iamVjdC5qcwogICBjbWQ6IHJ1bkVTNiA6ZmFpbAogLSBwYXRoOiBlczYv
UHJveHlfaW50ZXJuYWxfb3duS2V5c19jYWxsc19TZXRJbnRlZ3JpdHlMZXZlbC5qcwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1iYXNpYy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LWJhc2ljLmpz
CShyZXZpc2lvbiAxOTY3MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3Byb3h5LWJhc2ljLmpzCSh3b3JraW5nIGNvcHkpCkBAIC02Myw5ICs2Myw4IEBAIGFzc2VydChQ
cm94eS5wcm90b3R5cGUgPT09IHVuZGVmaW5lZCk7CiAgICAgICAgICAgICAgICAgcHJveHlbImZv
byJdOwogICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGFzc2VydChlLnRvU3RyaW5nKCkgPT09ICJUeXBlRXJyb3I6ICdnZXQnIHByb3Bl
cnR5IG9mIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUuIik7CiAgICAgICAgIH0K
LSAgICAgICAgYXNzZXJ0KHRocmV3KTsKKyAgICAgICAgYXNzZXJ0KCF0aHJldyk7CiAgICAgfQog
fQogCkBAIC04Miw3ICs4MSw3IEBAIGFzc2VydChQcm94eS5wcm90b3R5cGUgPT09IHVuZGVmaW5l
ZCk7CiAgICAgICAgICAgICAgICAgcHJveHlbImZvbyJdOwogICAgICAgICB9IGNhdGNoKGUpIHsK
ICAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKLSAgICAgICAgICAgIGFzc2VydChlLnRvU3RyaW5n
KCkgPT09ICJUeXBlRXJyb3I6ICdnZXQnIHByb3BlcnR5IG9mIFByb3h5J3MgaGFuZGxlciBzaG91
bGQgYmUgY2FsbGFibGUuIik7CisgICAgICAgICAgICBhc3NlcnQoZS50b1N0cmluZygpID09PSAi
VHlwZUVycm9yOiAnZ2V0JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBvYmplY3Qgc2hv
dWxkIGJlIGNhbGxhYmxlLiIpOwogICAgICAgICB9CiAgICAgICAgIGFzc2VydCh0aHJldyk7CiAg
ICAgfQpAQCAtMTg1LDMgKzE4NCwyOCBAQCBhc3NlcnQoUHJveHkucHJvdG90eXBlID09PSB1bmRl
ZmluZWQpOwogICAgICAgICBhc3NlcnQocHJveHkueCA9PT0gNDApOwogICAgIH0KIH0KKworewor
ICAgIGxldCBlcnJvciA9IG51bGw7CisgICAgbGV0IHRoZVRhcmdldCA9IG5ldyBQcm94eSh7fSwg
eworICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKHRoZVRhcmdldCwg
cHJvcE5hbWUpIHsKKyAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCJoZWxsbyEiKQorICAg
ICAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGxldCBoYW5k
bGVyID0geworICAgICAgICBnZXQ6IGZ1bmN0aW9uKHRhcmdldCwgcHJvcE5hbWUsIHByb3h5QXJn
KSB7CisgICAgICAgICAgICByZXR1cm4gMzA7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0
IHByb3h5ID0gbmV3IFByb3h5KHRoZVRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcHJveHkueDsK
KyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBhc3NlcnQoZSA9PT0gZXJyb3IpOwor
ICAgICAgICB9CisgICAgfQorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9wcm94eS1nZXQtb3duLXByb3BlcnR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJveHktZ2V0LW93bi1wcm9wZXJ0eS5qcwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJveHktZ2V0LW93
bi1wcm9wZXJ0eS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4OCBAQAorZnVuY3Rpb24g
YXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGFz
c2VydGlvbi4iKTsKK30KKworeworICAgIGxldCB0YXJnZXQgPSB7eDogMjB9OworICAgIGxldCBj
YWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yOiBmdW5jdGlvbih0aGVUYXJnZXQsIHByb3BOYW1lKSB7CisgICAgICAgICAg
ICBjYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0gdGFyZ2V0
KTsKKyAgICAgICAgICAgIGFzc2VydChwcm9wTmFtZSA9PT0gIngiKTsKKyAgICAgICAgICAgIHJl
dHVybiB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICB9OworICAgIGxldCBwcm94eSA9IG5ldyBQ
cm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKysp
IHsKKyAgICAgICAgYXNzZXJ0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJveHks
ICJ4IikgPT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBj
YWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0ge307CisgICAg
bGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rp
b24odGhlVGFyZ2V0LCBwcm9wTmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIDI1OworICAgICAg
ICB9CisgICAgfTsKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9
IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihwcm94eSwgIngiKTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAg
ICBhc3NlcnQoZS50b1N0cmluZygpID09PSAiVHlwZUVycm9yOiByZXN1bHQgb2YgJ2dldE93blBy
b3BlcnR5RGVzY3JpcHRvcicgY2FsbCBzaG91bGQgZWl0aGVyIGJlIGFuIE9iamVjdCBvciB1bmRl
ZmluZWQuIik7CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
YXNzZXJ0KHRocmV3KTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0ge307CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgIngiLCB7CisgICAgICAgIGVudW1lcmFibGU6
IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UKKyAgICB9KTsKKyAgICBsZXQgaGFu
ZGxlciA9IHsKKyAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbih0aGVU
YXJnZXQsIHByb3BOYW1lKSB7CisgICAgICAgICAgICBhc3NlcnQodGhlVGFyZ2V0ID09PSB0YXJn
ZXQpOworICAgICAgICAgICAgYXNzZXJ0KHByb3BOYW1lID09PSAieCIpOworICAgICAgICAgICAg
cmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgIH07CisgICAgbGV0IHByb3h5ID0gbmV3
IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkr
KykgeworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJveHksICJ4Iik7CisgICAgICAg
IH0gY2F0Y2goZSkgeworICAgICAgICAgICAgYXNzZXJ0KGUudG9TdHJpbmcoKSA9PT0gIlR5cGVF
cnJvcjogV2hlbiB0aGUgcmVzdWx0IG9mICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InIGlzIHVu
ZGVmaW5lZCB0aGUgdGFyZ2V0IG11c3QgYmUgY29uZmlndXJhYmxlLiIpOworICAgICAgICAgICAg
dGhyZXcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAgfQor
fQorCit7CisgICAgbGV0IHRhcmdldCA9IHt9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0
YXJnZXQsICJ4IiwgeworICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICB9KTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbih0aGVUYXJnZXQsIHByb3BOYW1lKSB7CisgICAg
ICAgICAgICBhc3NlcnQodGhlVGFyZ2V0ID09PSB0YXJnZXQpOworICAgICAgICAgICAgYXNzZXJ0
KHByb3BOYW1lID09PSAieCIpOworICAgICAgICAgICAgcmV0dXJuIHtjb25maWd1cmFibGU6IGZh
bHNlfTsKKyAgICAgICAgfQorICAgIH07CisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdl
dCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAg
ICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJveHksICJ4Iik7CisgICAgICAgIH0gY2F0Y2goZSkg
eworICAgICAgICAgICAgYXNzZXJ0KGUudG9TdHJpbmcoKSA9PT0gIlR5cGVFcnJvcjogUmVzdWx0
IGZyb20gJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicgY2FuJ3QgYmUgbm9uLWNvbmZpZ3VyYWJs
ZSB3aGVuIHRoZSAndGFyZ2V0JyBkb2Vzbid0IGhhdmUgaXQgYXMgYW4gb3duIHByb3BlcnR5IG9y
IGlmIGl0IGlzIGEgY29uZmlndXJhYmxlIG93biBwcm9wZXJ0eSBvbiAndGFyZ2V0Jy4iKTsKKyAg
ICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQodGhyZXcp
OworICAgIH0KK30KKworeworICAgIGxldCB0YXJnZXQgPSB7fTsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkodGFyZ2V0LCAieCIsIHsKKyAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAg
ICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UKKyAgICB9KTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAg
ICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbih0aGVUYXJnZXQsIHByb3BO
YW1lKSB7CisgICAgICAgICAgICBhc3NlcnQodGhlVGFyZ2V0ID09PSB0YXJnZXQpOworICAgICAg
ICAgICAgYXNzZXJ0KHByb3BOYW1lID09PSAieCIpOworICAgICAgICAgICAgcmV0dXJuIHtlbnVt
ZXJhYmxlOiB0cnVlfTsKKyAgICAgICAgfQorICAgIH07CisgICAgbGV0IHByb3h5ID0gbmV3IFBy
b3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykg
eworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJveHksICJ4Iik7CisgICAgICAgIH0g
Y2F0Y2goZSkgeworICAgICAgICAgICAgYXNzZXJ0KGUudG9TdHJpbmcoKSA9PT0gIlR5cGVFcnJv
cjogUmVzdWx0IGZyb20gJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicgZmFpbHMgdGhlIElzQ29t
cGF0aWJsZVByb3BlcnR5RGVzY3JpcHRvciB0ZXN0LiIpOworICAgICAgICAgICAgdGhyZXcgPSB0
cnVlOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAgfQorfQorCit7Cisg
ICAgbGV0IHRhcmdldCA9IHt9OworICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3I6IDQ1CisgICAgfTsKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHko
dGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7Cisg
ICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm94eSwgIngiKTsKKyAgICAgICAgfSBjYXRj
aChlKSB7CisgICAgICAgICAgICBhc3NlcnQoZS50b1N0cmluZygpID09PSAiVHlwZUVycm9yOiAn
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBz
aG91bGQgYmUgY2FsbGFibGUuIik7CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgYXNzZXJ0KHRocmV3KTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0
ID0ge307CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcjogbnVsbAorICAgIH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgIngi
LCB7CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFs
c2UKKyAgICB9KTsKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCBwRGVzYyA9
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJveHksICJ4Iik7CisgICAgICAgIGFz
c2VydChwRGVzYy5jb25maWd1cmFibGUgPT09IGZhbHNlKTsKKyAgICAgICAgYXNzZXJ0KHBEZXNj
LmVudW1lcmFibGUgPT09IHRydWUpOworICAgIH0KK30KKworeworICAgIGxldCB0YXJnZXQgPSB7
fTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
OiB1bmRlZmluZWQKKyAgICB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsICJ4
IiwgeworICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICBjb25maWd1cmFibGU6IGZh
bHNlCisgICAgfSk7CisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgcERlc2Mg
PSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3h5LCAieCIpOworICAgICAgICBh
c3NlcnQocERlc2MuY29uZmlndXJhYmxlID09PSBmYWxzZSk7CisgICAgICAgIGFzc2VydChwRGVz
Yy5lbnVtZXJhYmxlID09PSB0cnVlKTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0g
e307CisgICAgbGV0IGhhbmRsZXIgPSB7IH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRh
cmdldCwgIngiLCB7CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3Vy
YWJsZTogZmFsc2UKKyAgICB9KTsKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBo
YW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxl
dCBwRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJveHksICJ4Iik7Cisg
ICAgICAgIGFzc2VydChwRGVzYy5jb25maWd1cmFibGUgPT09IGZhbHNlKTsKKyAgICAgICAgYXNz
ZXJ0KHBEZXNjLmVudW1lcmFibGUgPT09IHRydWUpOworICAgIH0KK30K
</data>
<flag name="review"
          id="296436"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271689</attachid>
            <date>2016-02-18 13:48:18 -0800</date>
            <delta_ts>2016-02-18 13:49:38 -0800</delta_ts>
            <desc>follow up fix</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>4151</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2Nzc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDE2LTAyLTE4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEZvbGxvdyB1cCBmaXggdG8gSW1wbGVtZW50IFByb3h5LltbR2V0T3duUHJvcGVydHldXQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFydCBvZiB0aGUg
aW1wbGVtZW50YXRpb24gd2FzIGJyb2tlbiBiZWNhdXNlCisgICAgICAgIG9mIGhvdyBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHdvcmtlZC4KKyAgICAgICAgSSd2ZSBmaXhlZCBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHRvCisgICAgICAgIGJlIGFibGUgdG8g
aGFuZGxlIFByb3h5T2JqZWN0LgorCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6
cGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkpOgorICAgICAgICAqIHRlc3RzL3N0
cmVzcy9wcm94eS1nZXQtb3duLXByb3BlcnR5LmpzOgorICAgICAgICAoYXNzZXJ0KToKKyAgICAg
ICAgKGFzc2VydC5sZXQuaGFuZGxlci5nZXQgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKwog
MjAxNi0wMi0xOCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBJ
bXBsZW1lbnQgUHJveHkuW1tHZXRPd25Qcm9wZXJ0eV1dCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxOTY3NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlE
ZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKKyNpbmNsdWRlICJQ
cm94eU9iamVjdC5oIgogI2luY2x1ZGUgIlJlamVjdC5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTI1NjAsOSArMjU2MSwxMyBAQCBib29s
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCiAgICAgLy8gYnV0IGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcigpIHNob3VsZCBvbmx5IHdvcmsgZm9yICdvd24nIHByb3BlcnRpZXMg
c28gd2UgZXhpdCBlYXJseSBpZiB3ZSBkZXRlY3QgdGhhdAogICAgIC8vIHRoZSBwcm9wZXJ0eSBp
cyBub3QgYW4gb3duIHByb3BlcnR5LgogICAgIGlmIChzbG90LnNsb3RCYXNlKCkgIT0gdGhpcyAm
JiBzbG90LnNsb3RCYXNlKCkpIHsKLSAgICAgICAgYXV0byogcHJveHkgPSBqc0R5bmFtaWNDYXN0
PEpTUHJveHkqPih0aGlzKTsKLSAgICAgICAgaWYgKCFwcm94eSB8fCBwcm94eS0+dGFyZ2V0KCkg
IT0gc2xvdC5zbG90QmFzZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBK
U1Byb3h5KiBqc1Byb3h5ID0ganNEeW5hbWljQ2FzdDxKU1Byb3h5Kj4odGhpcyk7CisgICAgICAg
IGlmICghanNQcm94eSB8fCBqc1Byb3h5LT50YXJnZXQoKSAhPSBzbG90LnNsb3RCYXNlKCkpIHsK
KyAgICAgICAgICAgIC8vIFRyeSBQcm94eU9iamVjdC4KKyAgICAgICAgICAgIFByb3h5T2JqZWN0
KiBwcm94eU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8UHJveHlPYmplY3QqPih0aGlzKTsKKyAgICAg
ICAgICAgIGlmICghcHJveHlPYmplY3QgfHwgcHJveHlPYmplY3QtPnRhcmdldCgpICE9IHNsb3Qu
c2xvdEJhc2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBpZiAoc2xvdC5pc0FjY2Vzc29yKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAxOTY3NzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Myw2ICsxNDMsOCBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxN
ZXRob2RHCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAg
ICAgSlNWYWx1ZSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNZXRob2QgPSBoYW5kbGVyLT5nZXRN
ZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImdldE93
blByb3BlcnR5RGVzY3JpcHRvciIpLCBBU0NJSUxpdGVyYWwoIidnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3InIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZS4i
KSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3JNZXRob2QuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIHRh
cmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGFyZ2V0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9wcm94eS1nZXQtb3duLXByb3BlcnR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJveHktZ2V0LW93bi1wcm9wZXJ0eS5qcwkocmV2aXNp
b24gMTk2Nzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1n
ZXQtb3duLXByb3BlcnR5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsMyArMTg2LDI3IEBAIGZ1
bmN0aW9uIGFzc2VydChiKSB7CiAgICAgICAgIGFzc2VydChwRGVzYy5lbnVtZXJhYmxlID09PSB0
cnVlKTsKICAgICB9CiB9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0ge307CisgICAgbGV0IGVycm9y
ID0gbnVsbDsKKyAgICBsZXQgaGFuZGxlciA9IHsgZ2V0IGdldE93blByb3BlcnR5RGVzY3JpcHRv
cigpIHsKKyAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoImJsYWgiKTsKKyAgICAgICAgdGhyb3cg
ZXJyb3I7CisgICAgfX07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgIngiLCB7
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UK
KyAgICB9KTsKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9IGZh
bHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHBEZXNjID0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihwcm94eSwgIngiKTsKKyAgICAgICAgfSBjYXRjaChlKSB7Cisg
ICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICBhc3NlcnQoZSA9PT0gZXJyb3Ip
OworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAgfQorfQo=
</data>
<flag name="review"
          id="296518"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>