<?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>154650</bug_id>
          
          <creation_ts>2016-02-24 12:46:12 -0800</creation_ts>
          <short_desc>[ES6] Implement Proxy.[[OwnPropertyKeys]]</short_desc>
          <delta_ts>2016-03-03 18:26:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <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>154665</dependson>
          
          <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>1167891</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-24 12:46:12 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168336</commentid>
    <comment_count>1</comment_count>
      <attachid>272272</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-25 17:55:33 -0800</bug_when>
    <thetext>Created attachment 272272
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168604</commentid>
    <comment_count>2</comment_count>
      <attachid>272352</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-26 11:36:18 -0800</bug_when>
    <thetext>Created attachment 272352
more WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168623</commentid>
    <comment_count>3</comment_count>
      <attachid>272356</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-26 12:36:33 -0800</bug_when>
    <thetext>Created attachment 272356
more WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168626</commentid>
    <comment_count>4</comment_count>
      <attachid>272356</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-02-26 12:43:18 -0800</bug_when>
    <thetext>Comment on attachment 272356
more WIP

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

&gt; Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp:456
&gt; +        if (UNLIKELY(exec-&gt;hadException()))
&gt; +            return JSValue();
&gt; +    } else
&gt;          return jsUndefined();

Is there any observable difference between returning JSValue() and jsUndefined()? In this case, the page is doing something like `var value = InspectorFrontendHost.method()`; Do JSValue() and jsUndefined() here produce the same result in `value`?

&gt; Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp:466
&gt;      JSArray* array = constructEmptyArray(exec, nullptr);
&gt; +    if (UNLIKELY(exec-&gt;hadException()))
&gt; +        return JSValue();

There are a dozen other places we construct an empty object / array and putDirect in this file. Seems weird to check for just these couple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168636</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-26 12:56:41 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 272356 [details]
&gt; more WIP
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=272356&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp:456
&gt; &gt; +        if (UNLIKELY(exec-&gt;hadException()))
&gt; &gt; +            return JSValue();
&gt; &gt; +    } else
&gt; &gt;          return jsUndefined();
&gt; 
&gt; Is there any observable difference between returning JSValue() and
&gt; jsUndefined()? In this case, the page is doing something like `var value =
&gt; InspectorFrontendHost.method()`; Do JSValue() and jsUndefined() here produce
&gt; the same result in `value`?
An exception was thrown so value will never actually get assigned to.
Therefore, there should be no observable difference.

&gt; 
&gt; &gt; Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp:466
&gt; &gt;      JSArray* array = constructEmptyArray(exec, nullptr);
&gt; &gt; +    if (UNLIKELY(exec-&gt;hadException()))
&gt; &gt; +        return JSValue();
&gt; 
&gt; There are a dozen other places we construct an empty object / array and
&gt; putDirect in this file. Seems weird to check for just these couple.
I&apos;ll probably just take this out and open a bug for this, that way
this patch is doing two things at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168731</commentid>
    <comment_count>6</comment_count>
      <attachid>272378</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-26 15:40:24 -0800</bug_when>
    <thetext>Created attachment 272378
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168734</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-26 15:41:02 -0800</bug_when>
    <thetext>Attachment 272378 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ProxyObject.cpp:643:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 15 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>1168735</commentid>
    <comment_count>8</comment_count>
      <attachid>272378</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-26 15:41:39 -0800</bug_when>
    <thetext>Comment on attachment 272378
patch

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

&gt; Source/JavaScriptCore/API/JSObjectRef.cpp:627
&gt; +    jsObject-&gt;methodTable()-&gt;getPropertyNames(jsObject, exec, array, EnumerationMode()); // FIXME: This throws but no caller expects it to.

I&apos;m not sure what to do about this function.
It&apos;s callers don&apos;t expect it to throw. Maybe we can make it
safe and detect if it might throw and just not perform that operation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169959</commentid>
    <comment_count>9</comment_count>
      <attachid>272378</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-02 14:50:32 -0800</bug_when>
    <thetext>Comment on attachment 272378
patch

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

r=me

&gt;&gt; Source/JavaScriptCore/API/JSObjectRef.cpp:627
&gt;&gt; +    jsObject-&gt;methodTable()-&gt;getPropertyNames(jsObject, exec, array, EnumerationMode()); // FIXME: This throws but no caller expects it to.
&gt; 
&gt; I&apos;m not sure what to do about this function.
&gt; It&apos;s callers don&apos;t expect it to throw. Maybe we can make it
&gt; safe and detect if it might throw and just not perform that operation?

We just have to accept this limitation in the API, since there&apos;s no way to fix it and retain binary compatibility.

The ObjC API does not have this problem.

&gt; Source/JavaScriptCore/runtime/JSObject.h:1529
&gt; +        if (LIKELY(index &lt;= std::numeric_limits&lt;unsigned&gt;::max()))
&gt; +            next = arrayLikeValue.get(exec, static_cast&lt;unsigned&gt;(index));
&gt; +        else
&gt; +            next = arrayLikeValue.get(exec, Identifier::from(exec, static_cast&lt;double&gt;(index)));

This should be a helper function on JSValue.

&gt; Source/JavaScriptCore/runtime/ProxyObject.h:40
&gt; +    // We lie an say we override getPropertyNames() because it prevents
&gt; +    // property name enumeration caching.

Why is this a lie? We do in fact implement getOwnPropertyNames.

&gt; Source/JavaScriptCore/runtime/Structure.h:580
&gt; -    DEFINE_BITFIELD(bool, hasNonEnumerableProperties, HasNonEnumerableProperties, 1, 5);
&gt; +    DEFINE_BITFIELD(bool, isQuickPropertyAccessPreventedForEnumeration, IsQuickPropertyAccessPreventedForEnumeration, 1, 5);

It&apos;s bad for booleans to express negatives, because then you end up writing double negatives (&quot;!isQuickPropertyAccessPreventedForEnumeration&quot; means &quot;is not quick property access not allowed?&quot;).

Let&apos;s call this isQuickPropertyAccessForEnumeration, and invert its meaning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169996</commentid>
    <comment_count>10</comment_count>
      <attachid>272378</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-02 16:11:06 -0800</bug_when>
    <thetext>Comment on attachment 272378
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/JSObject.h:1529
&gt;&gt; +            next = arrayLikeValue.get(exec, Identifier::from(exec, static_cast&lt;double&gt;(index)));
&gt; 
&gt; This should be a helper function on JSValue.

will change.

&gt;&gt; Source/JavaScriptCore/runtime/ProxyObject.h:40
&gt;&gt; +    // property name enumeration caching.
&gt; 
&gt; Why is this a lie? We do in fact implement getOwnPropertyNames.

We do implement *getOwnPropertyNames*. But we do not implement *getPropertyNames*.

&gt;&gt; Source/JavaScriptCore/runtime/Structure.h:580
&gt;&gt; +    DEFINE_BITFIELD(bool, isQuickPropertyAccessPreventedForEnumeration, IsQuickPropertyAccessPreventedForEnumeration, 1, 5);
&gt; 
&gt; It&apos;s bad for booleans to express negatives, because then you end up writing double negatives (&quot;!isQuickPropertyAccessPreventedForEnumeration&quot; means &quot;is not quick property access not allowed?&quot;).
&gt; 
&gt; Let&apos;s call this isQuickPropertyAccessForEnumeration, and invert its meaning.

will change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170439</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-03 18:26:50 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/197539</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272272</attachid>
            <date>2016-02-25 17:55:33 -0800</date>
            <delta_ts>2016-02-26 11:36:18 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>27524</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAxOTcxMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEz
LDcgKzUxMyw3IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob24KICAg
ICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IHRoaXNPYmplY3QtPmNsYXNzUmVmKCk7IGpzQ2xh
c3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewogICAgICAgICBpZiAoSlNPYmpl
Y3RHZXRQcm9wZXJ0eU5hbWVzQ2FsbGJhY2sgZ2V0UHJvcGVydHlOYW1lcyA9IGpzQ2xhc3MtPmdl
dFByb3BlcnR5TmFtZXMpIHsKICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhleGVjKTsKLSAgICAgICAgICAgIGdldFByb3BlcnR5TmFtZXMoZXhlY1JlZiwgdGhp
c1JlZiwgdG9SZWYoJnByb3BlcnR5TmFtZXMpKTsKKyAgICAgICAgICAgIGdldFByb3BlcnR5TmFt
ZXMoZXhlY1JlZiwgdGhpc1JlZiwgdG9SZWYoJnByb3BlcnR5TmFtZXMpKTsgLy8gRklYTUU6CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVz
VGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpzQ2xhc3MtPnN0YXRpY1ZhbHVlcyhleGVjKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDE5
NzEzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MjQsNyArNjI0LDcgQEAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU09i
amVjdENvcHlQcm9wZQogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAg
ICBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIHByb3BlcnR5TmFtZXMgPSBuZXcgT3BhcXVlSlNQcm9w
ZXJ0eU5hbWVBcnJheSh2bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgYXJyYXkodm0sIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQ
cm9wZXJ0eU5hbWVzKGpzT2JqZWN0LCBleGVjLCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOwor
ICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKGpzT2JqZWN0LCBl
eGVjLCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOyAvLyBGSVhNRToKIAogICAgIHNpemVfdCBz
aXplID0gYXJyYXkuc2l6ZSgpOwogICAgIHByb3BlcnR5TmFtZXMtPmFycmF5LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCShyZXZpc2lvbiAxOTcxMzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNyw2ICsxMjcsNyBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OmdldE93blByb3BlcnR5TmFtZXMo
CiAgICAgICAgIHJldHVybjsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IEpTU2NvcGU6Om9i
amVjdEF0U2NvcGUoc2NvcGUtPmpzU2NvcGUoKSk7CiAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKKyAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIH0KIAogYm9vbCBEZWJ1
Z2dlclNjb3BlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCShyZXZpc2lvbiAxOTcxMzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTM5LDYgKzkzOSw4IEBAIEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmIHN0
YXQKICAgICAvLyA3LiBMZXQga2V5cyBiZSBzdWJzZXQuW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgog
ICAgIFByb3BlcnR5TmFtZUFycmF5IGtleXMoJnN0YXRlLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzKTsKICAgICBzdXBwb3J0ZWRMb2NhbGVzLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHN1cHBvcnRl
ZExvY2FsZXMsICZzdGF0ZSwga2V5cywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBQ
cm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShmYWxzZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAko
cmV2aXNpb24gMTk3MTMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw2ICs0MzksOCBAQCBib29sIFN0cmluZ2lm
aWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBvYmplY3RQcm9wZXJ0eU5hbWVzKGV4ZWMsIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MpOwogICAgICAgICAgICAgICAgIG1fb2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1fb2JqZWN0LmdldCgpLCBleGVjLCBvYmplY3RQ
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IG9iamVjdFByb3BlcnR5
TmFtZXMucmVsZWFzZURhdGEoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fc2l6ZSA9
IG1fcHJvcGVydHlOYW1lcy0+cHJvcGVydHlOYW1lVmVjdG9yKCkuc2l6ZSgpOwpAQCAtNjU2LDYg
KzY1OCw4IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAg
ICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKICAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheShtX2V4ZWMsIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MpKTsKICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93
blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVt
ZXJhdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBvYmplY3RTdGFydFZpc2l0TWVtYmVyOgogICAgICAgICAg
ICAgRkFMTFRIUk9VR0g7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCShyZXZpc2lvbiAxOTcxMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDksNiArMTUwOSw4IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJpdmEKIHZvaWQgSlNPYmplY3Q6Omdl
dFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybjsKIAogICAgIGlmIChvYmplY3QtPnByb3Rv
dHlwZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTIxLDYgKzE1MjMsOCBAQCB2
b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3du
UHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAg
ICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBKU1ZhbHVlIG5leHRQcm90byA9IHByb3RvdHlwZS0+cHJvdG90eXBlKCk7
CiAgICAgICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKQEAg
LTI5MjEsNiArMjkyNSw4IEBAIHZvaWQgSlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVz
KEoKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
dm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlKG1vZGUsIEpTT2JqZWN0UHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKKyAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAob2JqZWN0LT5wcm90b3R5cGUoKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjkzMiw2ICsyOTM4LDggQEAgdm9pZCBKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFt
ZXMoSgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcHJvdG90eXBlLT5t
ZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBw
cm90b3R5cGUtPnByb3RvdHlwZSgpOwogICAgICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQog
ICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHJldmlzaW9uIDE5NzEzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRl
ICJQcm9wZXJ0eVN0b3JhZ2UuaCIKICNpbmNsdWRlICJQdXREaXJlY3RJbmRleE1vZGUuaCIKICNp
bmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKKyNpbmNsdWRlICJSdW50aW1lVHlwZS5oIgogCiAj
aW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTE1MDQsNiArMTUwNSw0
MSBAQCBBTFdBWVNfSU5MSU5FIElkZW50aWZpZXIgbWFrZUlkZW50aWZpZXIoCiAgICAgcmV0dXJu
IG5hbWU7CiB9CiAKKy8vIFNlY3Rpb24gNy4zLjE3IG9mIHRoZSBzcGVjLiAKK3RlbXBsYXRlIDx0
eXBlbmFtZSBBZGRGdW5jdGlvbj4gLy8gQWRkIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGEgdHlwZSBs
aWtlOiAoSlNWYWx1ZSwgUnVudGltZVR5cGUpIC0+IGJvb2wKK3ZvaWQgY3JlYXRlTGlzdEZyb21B
cnJheUxpa2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGFycmF5TGlrZVZhbHVlLCBSdW50aW1l
VHlwZU1hc2sgbGVnYWxUeXBlc0ZpbHRlciwgQWRkRnVuY3Rpb24gYWRkRnVuY3Rpb24pCit7Cisg
ICAgVmVjdG9yPEpTVmFsdWU+IHJlc3VsdDsKKyAgICBKU1ZhbHVlIGxlbmd0aFByb3BlcnR5ID0g
YXJyYXlMaWtlVmFsdWUuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBk
b3VibGUgbGVuZ3RoQXNEb3VibGUgPSBsZW5ndGhQcm9wZXJ0eS50b0xlbmd0aChleGVjKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBSRUxFQVNF
X0FTU0VSVChsZW5ndGhBc0RvdWJsZSA+PSAwLjAgJiYgbGVuZ3RoQXNEb3VibGUgPT0gc3RkOjp0
cnVuYyhsZW5ndGhBc0RvdWJsZSkpOworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihsZW5ndGhBc0RvdWJsZSk7CisgICAgZm9yICh1aW50NjRfdCBpbmRleCA9IDA7
IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgIEpTVmFsdWUgbmV4dDsKKyAgICAg
ICAgaWYgKExJS0VMWShpbmRleCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkpKQorICAgICAgICAgICAgbmV4dCA9IGFycmF5TGlrZVZhbHVlLmdldChleGVjLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oaW5kZXgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV4dCA9
IGFycmF5TGlrZVZhbHVlLmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHN0YXRpY19j
YXN0PGRvdWJsZT4oaW5kZXgpKSk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSdW50aW1lVHlwZSB0eXBlID0gcnVudGlt
ZVR5cGVGb3JWYWx1ZShuZXh0KTsKKyAgICAgICAgaWYgKCEodHlwZSAmIGxlZ2FsVHlwZXNGaWx0
ZXIpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogYmV0dGVyIG1lc3NhZ2UgaGVyZS4KKyAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIlVuZXhwZWN0ZWQgdHlwZSBp
biBsaXN0OiAnIiwgcnVudGltZVR5cGVBc1N0cmluZyh0eXBlKSwgIicuIikpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBleGl0RWFybHkgPSBhZGRGdW5j
dGlvbihuZXh0LCB0eXBlKTsKKyAgICAgICAgaWYgKGV4aXRFYXJseSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9Cit9CisKIGJvb2wgdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRv
cihFeGVjU3RhdGUqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZSwgYm9vbCBpc0V4dGVuc2libGUs
CiAgICAgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIGlzQ3VycmVu
dERlZmluZWQsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgY3VycmVudCwgYm9vbCB0aHJvd0V4
Y2VwdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAxOTcxMzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIHByb3BlcnQKIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMo
ZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAKKyAgICBkYXRhTG9nKCJjYW5BY2Nl
c3NQcm9wZXJ0aWVzUXVpY2tseSgpICIsIHN0cnVjdHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1
aWNrbHkoKSwgIlxuaW5kZXhlZExlbmd0aDogIiwgaW5kZXhlZExlbmd0aCwgIiAgYXJyYXlMZW5n
dGg6ICIsIGJhc2UtPmdldEFycmF5TGVuZ3RoKCksICJcbiIpOwogICAgIGlmIChzdHJ1Y3R1cmUt
PmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5KCkgJiYgaW5kZXhlZExlbmd0aCA9PSBiYXNlLT5n
ZXRBcnJheUxlbmd0aCgpKSB7CiAgICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0U3Ry
dWN0dXJlUHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUoKSk7CiAKQEAgLTEyOCw2ICsxMjksOCBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBwcm9wZXJ0CiAgICAgICAgIC8vIFNvIGRpc2FibGUgaW5kZXhlZCBwcm9wZXJ0eSBl
bnVtZXJhdGlvbiBwaGFzZSBieSBzZXR0aW5nIHxpbmRleGVkTGVuZ3RofCB0byAwLgogICAgICAg
ICBpbmRleGVkTGVuZ3RoID0gMDsKICAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQ
cm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgp
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIEFTU0VSVChwcm9wZXJ0eU5hbWVzLnNp
emUoKSA8IFVJTlQzMl9NQVgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE5NzEz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSwxMCBAQCBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0CiB7CiB9CiAKLUpTUHJvcGVydHlOYW1lSXRlcmF0b3Iq
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNsb25lKEV4ZWNTdGF0ZSogZXhlYykKK0pTUHJvcGVy
dHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNsb25lKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQpCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IEpTUHJvcGVydHlOYW1lSXRl
cmF0b3I6OmNyZWF0ZShleGVjLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnByb3Bl
cnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlKCksIG1faXRlcmF0ZWRPYmplY3QuZ2V0KCksIG1fcHJv
cGVydHlOYW1lRW51bWVyYXRvci5nZXQoKSk7CisgICAgLy8gRklYTUU6IGZpbmQgY2FsbCBzaXRl
cyBvZiB0aGlzLgogICAgIGl0ZXJhdG9yLT5tX2VudW1lcmF0aW9uUGhhc2UgPSBtX2VudW1lcmF0
aW9uUGhhc2U7CiAgICAgaXRlcmF0b3ItPm1fY3Vyc29yID0gbV9jdXJzb3I7CiAgICAgcmV0dXJu
IGl0ZXJhdG9yOwpAQCAtNTksNyArNjAsMTAgQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQ
cm9wZXJ0eU5hbWVJdAogCiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNP
YmplY3QqIGl0ZXJhdGVkT2JqZWN0KQogewotICAgIHJldHVybiBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBpdGVyYXRlZE9iamVjdCwgcHJvcGVydHlOYW1l
RW51bWVyYXRvcihleGVjLCBpdGVyYXRlZE9iamVjdCkpOworICAgIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogZW51bWVyYXRvciA9IHByb3BlcnR5TmFtZUVudW1lcmF0b3IoZXhlYywgaXRlcmF0
ZWRPYmplY3QpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpj
cmVhdGUoZXhlYywgc3RydWN0dXJlLCBpdGVyYXRlZE9iamVjdCwgZW51bWVyYXRvcik7CiB9CiAK
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogaXRlcmF0ZWRP
YmplY3QsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmgJKHJldmlzaW9uIDE5NzEzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogY3JlYXRlKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEpTT2JqZWN0Kik7CiAKLSAgICBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKiBjbG9uZShFeGVjU3RhdGUqKTsKKyAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBj
bG9uZShFeGVjU3RhdGUqLCB1bnNpZ25lZCk7CiAgICAgYm9vbCBuZXh0KEV4ZWNTdGF0ZSosIEpT
VmFsdWUmKTsKIAogICAgIEpTVmFsdWUgaXRlcmF0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXRlcmF0ZWRPYmplY3QuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5NzEzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDI2LDYgKzQyNiw4IEBAIHN0YXRpYyBKU1ZhbHVlIGRlZmluZVByb3Bl
cnRpZXMoRXhlY1N0YXQKIHsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4
ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzKTsKICAgICBhc09iamVjdChw
cm9wZXJ0aWVzKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMo
YXNPYmplY3QocHJvcGVydGllcyksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIHNpemVf
dCBudW1Qcm9wZXJ0aWVzID0gcHJvcGVydHlOYW1lcy5zaXplKCk7CiAgICAgVmVjdG9yPFByb3Bl
cnR5RGVzY3JpcHRvcj4gZGVzY3JpcHRvcnM7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbWFy
a0J1ZmZlcjsKQEAgLTQ5Niw2ICs0OTgsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0CiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUg
UCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlO
YW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhl
Yy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBF
bnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUob2JqKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gKml0ZXI7CkBAIC01MzAsNiArNTM0
LDggQEAgSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdAogICAgIC8vIDIu
IEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAgICBQcm9wZXJ0eU5h
bWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1i
b2xzKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVt
UHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgIFByb3BlcnR5TmFtZUFycmF5
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVy
dHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSAq
aXRlcjsKQEAgLTU5MCw2ICs1OTYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0CiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBv
ZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1l
TW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+
dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVt
ZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25z
dF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gKml0ZXI7CkBAIC02MjMsNiAr
NjMxLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIC8v
IDIuIEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAgICBQcm9wZXJ0
eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRT
eW1ib2xzKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRF
bnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CiAgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMu
ZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSA9ICppdGVyOwpAQCAtNjYxLDYgKzY3MSw4IEBAIEpTQXJyYXkq
IG93blByb3BlcnR5S2V5cyhFeGVjU3RhdGUqIGV4ZWMKIHsKICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0aWVzKGV4ZWMsIHByb3BlcnR5TmFtZU1vZGUpOwogICAgIG9iamVjdC0+bWV0aG9k
VGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBK
U0FycmF5KiBrZXlzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24g
MTk3MTMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsOCArMjk1LDYgQEAgYm9vbCBQcm94eU9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbgogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PFByb3h5T2JqZWN0Kj4ob2JqZWN0KTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpOyAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0
T3duUHJvcGVydHlTbG90Q29tbW9uKGV4ZWMsIGlkZW50LmltcGwoKSwgc2xvdCk7CiB9CiAKQEAg
LTQ1Nyw3ICs0NTUsNyBAQCBib29sIFByb3h5T2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwq
CiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihj
ZWxsKTsKICAgICBhdXRvIGRlZmF1bHREZWxldGUgPSBbJl0gKCkgLT4gYm9vbCB7Ci0gICAgICAg
IEpTT2JqZWN0KiB0YXJnZXQgPSBqc0Nhc3Q8SlNPYmplY3QqPih0aGlzT2JqZWN0LT50YXJnZXQo
KSk7CisgICAgICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzT2JqZWN0LT50YXJnZXQoKTsKICAg
ICAgICAgcmV0dXJuIHRhcmdldC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlbGV0ZVByb3Bl
cnR5KHRhcmdldCwgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICB9OwogICAgIHJldHVybiB0aGlz
T2JqZWN0LT5wZXJmb3JtRGVsZXRlKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVmYXVsdERlbGV0ZSk7
CkBAIC00NjcsMTMgKzQ2NSwxNzkgQEAgYm9vbCBQcm94eU9iamVjdDo6ZGVsZXRlUHJvcGVydHlC
eUluZGV4KAogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2Jq
ZWN0Kj4oY2VsbCk7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb20oZXhl
YywgcHJvcGVydHlOYW1lKTsgCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byBkZWZhdWx0RGVsZXRlID0gWyZdICgpIC0+IGJvb2wg
ewotICAgICAgICBKU09iamVjdCogdGFyZ2V0ID0ganNDYXN0PEpTT2JqZWN0Kj4odGhpc09iamVj
dC0+dGFyZ2V0KCkpOworICAgICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpc09iamVjdC0+dGFy
Z2V0KCk7CiAgICAgICAgIHJldHVybiB0YXJnZXQtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5k
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGFyZ2V0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIH07
CiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnBlcmZvcm1EZWxldGUoZXhlYywgaWRlbnQuaW1wbCgp
LCBkZWZhdWx0RGVsZXRlKTsKIH0KIAorLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gY2FuIHRocm93
LgorLy8gV2UgbmVlZCB0byBtYWtlIGFsbCBjYWxsIHNpdGVzIGF3YXJlIHRoYXQgZ2V0T3duUHJv
cGVydHlOYW1lcyBjYW4gdGhyb3cuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRGVmYXVsdEdldE93blBy
b3BlcnR5TmFtZXNGdW5jdGlvbj4KK3ZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9w
ZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHRyYXBSZXN1bHQs
IEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUsIERlZmF1bHRHZXRPd25Qcm9wZXJ0eU5h
bWVzRnVuY3Rpb24gZGVmYXVsdEdldE93blByb3BlcnR5TmFtZXMpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBKU1ZhbHVlIGhhbmRsZXJWYWx1ZSA9IHRoaXMtPmhhbmRsZXIoKTsK
KyAgICBpZiAoaGFuZGxlclZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJQcm94eSAnaGFuZGxlcicgaXMgbnVsbC4gSXQgc2hvdWxk
IGJlIGFuIE9iamVjdC4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU09iamVj
dCogaGFuZGxlciA9IGpzQ2FzdDxKU09iamVjdCo+KGhhbmRsZXJWYWx1ZSk7CisgICAgQ2FsbERh
dGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CisgICAgSlNWYWx1ZSBvd25LZXlz
TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFr
ZUlkZW50aWZpZXIodm0sICJvd25LZXlzIiksIEFTQ0lJTGl0ZXJhbCgiJ2RlbGV0ZVByb3BlcnR5
JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUuIikpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworICAgIEpTT2Jq
ZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKKyAgICBpZiAob3duS2V5c01ldGhvZC5pc1Vu
ZGVmaW5lZCgpKSB7CisgICAgICAgIGRlZmF1bHRHZXRPd25Qcm9wZXJ0eU5hbWVzKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7
CisgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOworICAgIEpTVmFsdWUgYXJyYXlMaWtlT2Jq
ZWN0ID0gY2FsbChleGVjLCBvd25LZXlzTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRs
ZXIsIGFyZ3VtZW50cyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBQcm9wZXJ0eU5hbWVNb2RlIHByb3BlcnR5TmFtZU1vZGUgPSB0cmFwUmVz
dWx0Lm1vZGUoKTsKKyAgICBSdW50aW1lVHlwZU1hc2sgcmVzdWx0RmlsdGVyID0gMDsKKyAgICBz
d2l0Y2ggKHByb3BlcnR5TmFtZU1vZGUpIHsKKyAgICBjYXNlIFByb3BlcnR5TmFtZU1vZGU6OlN5
bWJvbHM6CisgICAgICAgIHJlc3VsdEZpbHRlciA9IFR5cGVTeW1ib2w7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nczoKKyAgICAgICAgcmVzdWx0Rmls
dGVyID0gVHlwZVN0cmluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9wZXJ0eU5hbWVN
b2RlOjpTdHJpbmdzQW5kU3ltYm9sczoKKyAgICAgICAgcmVzdWx0RmlsdGVyID0gVHlwZVN5bWJv
bCB8IFR5cGVTdHJpbmc7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBBU1NFUlQocmVzdWx0
RmlsdGVyKTsKKyAgICBSdW50aW1lVHlwZU1hc2sgZG9udFRocm93QW5FeGNlcHRpb25UeXBlRmls
dGVyID0gVHlwZVN0cmluZyB8IFR5cGVTeW1ib2w7CisgICAgSGFzaE1hcDxVbmlxdWVkU3RyaW5n
SW1wbCosIHVuc2lnbmVkPiB1bmNoZWNrZWRSZXN1bHRLZXlzOyAvLyBGSVhNRTogSXQgbWlnaHQg
YmUgd29ydGggZ2VuZXJhdGluZyB0aGlzIGxhemlseS4gQWxzbyBtaWdodCBiZSB0cmlja3kgYmVj
YXVzZSBQcm9wZXJ0eU5hbWVBcnJheSBkb2Vzbid0IGFsbG93IGR1cGxpY2F0ZXMuCisgICAgdW5z
aWduZWQgdG90YWxTaXplID0gMDsKKworICAgIGF1dG8gYWRkUHJvcE5hbWUgPSBbJl0gKEpTVmFs
dWUgdmFsdWUsIFJ1bnRpbWVUeXBlIHR5cGUpIC0+IGJvb2wgeworICAgICAgICBib29sIGV4aXRF
YXJseTsKKyAgICAgICAgaWYgKCEodHlwZSAmIHJlc3VsdEZpbHRlcikpIHsKKyAgICAgICAgICAg
IGV4aXRFYXJseSA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGV4aXRFYXJseTsKKyAgICAg
ICAgfQorCisgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSB2YWx1ZS50b1Byb3BlcnR5S2V5KGV4
ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIGV4
aXRFYXJseSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZXhpdEVhcmx5OworICAgICAgICB9
CisKKyAgICAgICAgdW5jaGVja2VkUmVzdWx0S2V5cy5hZGQoaWRlbnQuaW1wbCgpLCAwKS5pdGVy
YXRvci0+dmFsdWUrKzsKKyAgICAgICAgdG90YWxTaXplKys7CisKKyAgICAgICAgdHJhcFJlc3Vs
dC5hZGQoaWRlbnQuaW1wbCgpKTsKKworICAgICAgICBleGl0RWFybHkgPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIGV4aXRFYXJseTsKKyAgICB9OworCisgICAgY3JlYXRlTGlzdEZyb21BcnJheUxp
a2UoZXhlYywgYXJyYXlMaWtlT2JqZWN0LCBkb250VGhyb3dBbkV4Y2VwdGlvblR5cGVGaWx0ZXIs
IGFkZFByb3BOYW1lKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJvb2wgdGFyZ2V0SXNFeGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJs
ZSgpOyAvLyBOb3RlOiB3ZSBkbyB0aGlzIGhlcmUgYmVjYXVzZSBpbiB0aGUgZnV0dXJlIHRoaXMg
aXMgdXNlci1vYnNlcnZhYmxlLgorCisgICAgUHJvcGVydHlOYW1lQXJyYXkgdGFyZ2V0S2V5cygm
dm0sIHByb3BlcnR5TmFtZU1vZGUpOworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgcHJvYnMgdGVt
cGxhdGl6ZSBvbiB0aGlzIGJlY2F1c2Ugb2Ygb3VyIGNhbGxlci4KKyAgICB0YXJnZXQtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQsIGV4ZWMsIHRhcmdldEtleXMs
IGVudW1lcmF0aW9uTW9kZSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm47CisgICAgVmVjdG9yPFVuaXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Q29uZmlndXJh
YmxlS2V5czsKKyAgICBWZWN0b3I8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJnZXROb25Db25maWd1
cmFibGVLZXlzOworICAgIGZvciAoY29uc3QgSWRlbnRpZmllciYgaWRlbnQgOiB0YXJnZXRLZXlz
KSB7CisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgICAgICBib29s
IGlzUHJvcGVydHlEZWZpbmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhl
YywgaWRlbnQuaW1wbCgpLCBkZXNjcmlwdG9yKTsgCisgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGlzUHJvcGVydHlEZWZp
bmVkICYmICFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQorICAgICAgICAgICAgdGFyZ2V0Tm9u
Q29uZmlndXJhYmxlS2V5cy5hcHBlbmQoaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdGFyZ2V0Q29uZmlndXJhYmxlS2V5cy5hcHBlbmQoaWRlbnQuaW1wbCgpKTsKKyAg
ICB9CisKKyAgICBhdXRvIHJlbW92ZUZyb21VbmNoZWNrZWRSZXN1bHRLZXlzID0gWyZdIChVbmlx
dWVkU3RyaW5nSW1wbCogaW1wbCkgLT4gYm9vbCB7CisgICAgICAgIGF1dG8gaXRlciA9IHVuY2hl
Y2tlZFJlc3VsdEtleXMuZmluZChpbXBsKTsKKyAgICAgICAgYm9vbCBjb250YWluczsKKyAgICAg
ICAgaWYgKGl0ZXIgPT0gdW5jaGVja2VkUmVzdWx0S2V5cy5lbmQoKSkgeworICAgICAgICAgICAg
Y29udGFpbnMgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBjb250YWluczsKKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkJiBjb3VudCA9IGl0ZXItPnZhbHVlOworICAgICAgICBpZiAo
Y291bnQgPT0gMCkgeworICAgICAgICAgICAgY29udGFpbnMgPSBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBjb250YWluczsKKyAgICAgICAgfQorCisgICAgICAgIC0tY291bnQ7CisgICAgICAg
IC0tdG90YWxTaXplOworICAgICAgICBjb250YWlucyA9IHRydWU7CisgICAgICAgIHJldHVybiBj
b250YWluczsKKyAgICB9OworCisgICAgZm9yIChVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCA6IHRh
cmdldE5vbkNvbmZpZ3VyYWJsZUtleXMpIHsKKyAgICAgICAgYm9vbCBjb250YWlucyA9IHJlbW92
ZUZyb21VbmNoZWNrZWRSZXN1bHRLZXlzKGltcGwpOworICAgICAgICBpZiAoIWNvbnRhaW5zKSB7
CisgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUHJveHkg
b2JqZWN0J3MgJ3RhcmdldCcgaGFzIGEgbm9uLWNvbmZpZ3VyYWJsZSBrZXkgbm90IHJldHVybmVk
IGluIHRoZSByZXN1bHQgb2YgdGhlIFByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kLiIp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0YXJn
ZXRJc0V4ZW5zaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChVbmlxdWVkU3RyaW5n
SW1wbCogaW1wbCA6IHRhcmdldENvbmZpZ3VyYWJsZUtleXMpIHsKKyAgICAgICAgYm9vbCBjb250
YWlucyA9IHJlbW92ZUZyb21VbmNoZWNrZWRSZXN1bHRLZXlzKGltcGwpOworICAgICAgICBpZiAo
IWNvbnRhaW5zKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgaXRlcmF0ZSB0aGUg
aGFzaCB0YWJsZSB0byBnZXQgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgICAgIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJQcm94eSBvYmplY3QncyBub24tZXh0
ZW5zaWJsZSAndGFyZ2V0JyBoYXMgYSBjb25maWd1cmFibGUga2V5IG5vdCByZXR1cm5lZCBpbiB0
aGUgcmVzdWx0IG9mIHRoZSBQcm94eSBoYW5kbGVyJ3MgJ293bktleXMnIG1ldGhvZC4iKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKy8vI2lmbmRlZiBOREVCVUcK
KyAgICB1bnNpZ25lZCBzdW0gPSAwOworICAgIGZvciAodW5zaWduZWQga2V5Q291bnQgOiB1bmNo
ZWNrZWRSZXN1bHRLZXlzLnZhbHVlcygpKQorICAgICAgICBzdW0gKz0ga2V5Q291bnQ7CisgICAg
UkVMRUFTRV9BU1NFUlQoc3VtID09IHRvdGFsU2l6ZSk7CisvLyNlbmRpZgorCisgICAgaWYgKHRv
dGFsU2l6ZSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
UHJveHkgaGFuZGxlcidzICdvd25LZXlzJyBtZXRob2QgcmV0dXJuZWQgYSBrZXkgdGhhdCB3YXMg
bm90IHByZXNlbnQgaW4gaXRzIHRhcmdldCBvciBpdCByZXR1cm5lZCBkdXBsaWNhdGUga2V5cy4i
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgUHJveHlPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlv
bk1vZGUpCit7CisgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmpl
Y3QqPihvYmplY3QpOworICAgIGF1dG8gZGVmYXVsdEdldE93blByb3BlcnR5TmFtZXMgPSBbJl0g
eworICAgICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpc09iamVjdC0+dGFyZ2V0KCk7CisgICAg
ICAgIHRhcmdldC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMo
dGFyZ2V0LCBleGVjLCBwcm9wZXJ0eU5hbWVBcnJheSwgZW51bWVyYXRpb25Nb2RlKTsKKyAgICB9
OworICAgIHRoaXNPYmplY3QtPnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3Bl
cnR5TmFtZUFycmF5LCBlbnVtZXJhdGlvbk1vZGUsIGRlZmF1bHRHZXRPd25Qcm9wZXJ0eU5hbWVz
KTsKK30KKwordm9pZCBQcm94eU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZUFycmF5LCBFbnVtZXJhdGlvbk1vZGUgZW51bWVyYXRpb25Nb2RlKQoreworICAgIC8v
IEZJWE1FOiB3aGF0IHRvIGRvIGhlcmUuIERvaW5nIHRoaXMgdHdpY2UgbWlnaHQgcHJvZHVjZSBv
YnNlcnZhYmxlIGJlaGF2aW9yIHRoYXQgZGV2aWF0ZXMgZnJvbSB0aGUgc3BlYy4gCisgICAgUHJv
eHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmplY3QpOworICAg
IGF1dG8gZGVmYXVsdEdldE93blByb3BlcnR5TmFtZXMgPSBbJl0geworICAgICAgICBKU09iamVj
dCogdGFyZ2V0ID0gdGhpc09iamVjdC0+dGFyZ2V0KCk7CisgICAgICAgIHRhcmdldC0+bWV0aG9k
VGFibGUoZXhlYy0+dm0oKSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0YXJnZXQsIGV4
ZWMsIHByb3BlcnR5TmFtZUFycmF5LCBlbnVtZXJhdGlvbk1vZGUpOworICAgIH07CisgICAgdGhp
c09iamVjdC0+cGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydHlOYW1lQXJy
YXksIGVudW1lcmF0aW9uTW9kZSwgZGVmYXVsdEdldE93blByb3BlcnR5TmFtZXMpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJveHlPYmplY3QuaAkocmV2aXNpb24gMTk3MTMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2lu
Y2x1ZGUgIlJ1bnRpbWVUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNSw3ICszNiw3
IEBAIGNsYXNzIFByb3h5T2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmoKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAotICAgIGNvbnN0IHN0YXRpYyB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhOworICAgIGNvbnN0
IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRh
IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lczsKIAogICAgIHN0YXRpYyBQcm94eU9iamVjdCog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgdGFy
Z2V0LCBKU1ZhbHVlIGhhbmRsZXIpCiAgICAgewpAQCAtNDgsNiArNDksOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewogICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IAorICAgICAgICAvL3Jlc3Vs
dC0+c2V0SGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXModHJ1ZSk7CisgICAgICAgIC8vcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwpAQCAtNjUsNiArNjgs
OCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
SlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0
aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RDb21tb24oRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKQEAgLTcyLDYgKzc3LDggQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZvcm1IYXNQcm9wZXJ0
eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBEZWZhdWx0RGVsZXRlRnVuY3Rpb24+CiAgICAgYm9vbCBwZXJmb3JtRGVsZXRl
KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgRGVmYXVsdERlbGV0ZUZ1bmN0aW9uKTsKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgRGVmYXVsdEdldE93blByb3BlcnR5TmFtZXNGdW5jdGlvbj4KKyAg
ICB2b2lkIHBlcmZvcm1HZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlLCBEZWZhdWx0R2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0
aW9uKTsKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV90YXJnZXQ7CiAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+IG1faGFuZGxlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvcHJveHktb3duLWtleXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1vd24ta2V5cy5qcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJveHktb3duLWtleXMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBp
ZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbi4iKTsKK30KKwor
eworICAgIGxldCB0YXJnZXQgPSB7CisgICAgICAgIC8veDogNDAKKyAgICB9OworICAgIGxldCBz
eW1ib2wgPSBTeW1ib2woInN5bWJvbC1mb28iKTsKKyAgICAvL3RhcmdldFtzeW1ib2xdID0gMjA7
CisgICAgLy9PYmplY3QuZnJlZXplKHRhcmdldCk7CisKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7
CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdl
dCkgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vcmV0dXJuIFsn
eCcsIFN5bWJvbCgpXTsKKyAgICAgICAgICAgIC8vcmV0dXJuIFtzeW1ib2xdOworICAgICAgICAg
ICAgbGV0IGFyciA9IFJlZmxlY3Qub3duS2V5cyh0aGVUYXJnZXQpOworICAgICAgICAgICAgcHJp
bnQoSlNPTi5zdHJpbmdpZnkoYXJyKSk7CisgICAgICAgICAgICBhcnIgPSBhcnIuY29uY2F0KFsi
Zm9vIiwgImJhciIsICJ4Il0pOworICAgICAgICAgICAgcHJpbnQoInJldHVybmluZzogIiArIEpT
T04uc3RyaW5naWZ5KGFycikpOworICAgICAgICAgICAgcmV0dXJuIGFycjsKKyAgICAgICAgICAg
IC8vcmV0dXJuIFJlZmxlY3Qub3duS2V5cyh0aGVUYXJnZXQpLmNvbmNhdCgpOworICAgICAgICB9
LAorICAgICAgICAvL2hhczogKCkgPT4gdHJ1ZQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBu
ZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICAvL2ZvciAobGV0IGkgPSAwOyBpIDwgNTAw
OyBpKyspIHsKKyAgICAgICAgLy9sZXQga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhwcm94eSk7Cisg
ICAgICAgIC8vcHJpbnQoSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9s
cyh0YXJnZXQpLCB1bmRlZmluZWQsIDIpKTsKKyAgICAgICAgLy9sZXQga2V5cyA9IE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJveHkpOworICAgICAgICAvL2Fzc2VydChjYWxsZWQpOwor
ICAgICAgICAvL3ByaW50KEpTT04uc3RyaW5naWZ5KGtleXMsIHVuZGVmaW5lZCwgMikpOworICAg
ICAgICAvL2ZvciAobGV0IHAgaW4gcHJveHkpIHsKKyAgICAgICAgLy8gICAgcHJpbnQoIlA6ICIg
KyBwKTsKKyAgICAgICAgLy99CisgICAgICAgIC8vYXNzZXJ0KGNhbGxlZCk7CisgICAgICAgIC8v
cHJpbnQocHJveHkuX19wcm90b19fID09PSBPYmplY3QucHJvdG90eXBlKTsKKyAgICAgICAgbGV0
IHRlc3QgPSBPYmplY3QuY3JlYXRlKHByb3h5KTsKKyAgICAgICAgdGVzdC55ID0gNDU7CisgICAg
ICAgIGZvciAobGV0IHAgaW4gcHJveHkpIHsKKyAgICAgICAgICAgIHByaW50KCJQUDogIiArIHAp
OworICAgICAgICB9CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgIC8vfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272352</attachid>
            <date>2016-02-26 11:36:18 -0800</date>
            <delta_ts>2016-02-26 12:36:33 -0800</delta_ts>
            <desc>more WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>40156</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAxOTcxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEz
LDcgKzUxMyw3IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob24KICAg
ICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IHRoaXNPYmplY3QtPmNsYXNzUmVmKCk7IGpzQ2xh
c3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewogICAgICAgICBpZiAoSlNPYmpl
Y3RHZXRQcm9wZXJ0eU5hbWVzQ2FsbGJhY2sgZ2V0UHJvcGVydHlOYW1lcyA9IGpzQ2xhc3MtPmdl
dFByb3BlcnR5TmFtZXMpIHsKICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhleGVjKTsKLSAgICAgICAgICAgIGdldFByb3BlcnR5TmFtZXMoZXhlY1JlZiwgdGhp
c1JlZiwgdG9SZWYoJnByb3BlcnR5TmFtZXMpKTsKKyAgICAgICAgICAgIGdldFByb3BlcnR5TmFt
ZXMoZXhlY1JlZiwgdGhpc1JlZiwgdG9SZWYoJnByb3BlcnR5TmFtZXMpKTsgLy8gRklYTUU6CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVz
VGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpzQ2xhc3MtPnN0YXRpY1ZhbHVlcyhleGVjKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDE5
NzE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MjQsNyArNjI0LDcgQEAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU09i
amVjdENvcHlQcm9wZQogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAg
ICBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIHByb3BlcnR5TmFtZXMgPSBuZXcgT3BhcXVlSlNQcm9w
ZXJ0eU5hbWVBcnJheSh2bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgYXJyYXkodm0sIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQ
cm9wZXJ0eU5hbWVzKGpzT2JqZWN0LCBleGVjLCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOwor
ICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKGpzT2JqZWN0LCBl
eGVjLCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOyAvLyBGSVhNRToKIAogICAgIHNpemVfdCBz
aXplID0gYXJyYXkuc2l6ZSgpOwogICAgIHByb3BlcnR5TmFtZXMtPmFycmF5LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCShyZXZpc2lvbiAxOTcxNzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNyw2ICsxMjcsNyBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OmdldE93blByb3BlcnR5TmFtZXMo
CiAgICAgICAgIHJldHVybjsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IEpTU2NvcGU6Om9i
amVjdEF0U2NvcGUoc2NvcGUtPmpzU2NvcGUoKSk7CiAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKKyAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIH0KIAogYm9vbCBEZWJ1
Z2dlclNjb3BlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwCShy
ZXZpc2lvbiAxOTcxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ5LDcgKzQ0OSw3IEBAIEpT
VmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Oml0ZXJhdG9yRW4KICAgICBlbHNlIGlmIChKU1N0
cmluZ0l0ZXJhdG9yKiBzdHJpbmdJdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmdJdGVy
YXRvcio+KHZhbHVlKSkKICAgICAgICAgaXRlcmF0b3IgPSBzdHJpbmdJdGVyYXRvci0+Y2xvbmUo
ZXhlYyk7CiAgICAgZWxzZSBpZiAoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogcHJvcGVydHlOYW1l
SXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqPih2YWx1ZSkp
Ci0gICAgICAgIGl0ZXJhdG9yID0gcHJvcGVydHlOYW1lSXRlcmF0b3ItPmNsb25lKGV4ZWMpOwor
ICAgICAgICBpdGVyYXRvciA9IHByb3BlcnR5TmFtZUl0ZXJhdG9yLT5jbG9uZShleGVjLCAwKTsg
Ly8gRklYTUU6IGNhbiB0aHJvdy4KICAgICBlbHNlCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0
LmNwcAkocmV2aXNpb24gMTk3MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzOSw2ICs5MzksOCBAQCBKU1ZhbHVl
IHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgLy8gNy4gTGV0IGtleXMgYmUg
c3Vic2V0LltbT3duUHJvcGVydHlLZXlzXV0oKS4KICAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlz
KCZzdGF0ZSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAgICAgc3VwcG9ydGVkTG9jYWxl
cy0+Z2V0T3duUHJvcGVydHlOYW1lcyhzdXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXMsIEVu
dW1lcmF0aW9uTW9kZSgpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2M7CiAg
ICAgZGVzYy5zZXRDb25maWd1cmFibGUoZmFsc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDE5NzE3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzksNiArNDM5LDggQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJv
cAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkg
b2JqZWN0UHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAg
ICAgICAgICAgICAgICBtX29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1l
cyhtX29iamVjdC5nZXQoKSwgZXhlYywgb2JqZWN0UHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlKCkpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBt
X3Byb3BlcnR5TmFtZXMgPSBvYmplY3RQcm9wZXJ0eU5hbWVzLnJlbGVhc2VEYXRhKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBtX3NpemUgPSBtX3Byb3BlcnR5TmFtZXMtPnByb3BlcnR5
TmFtZVZlY3RvcigpLnNpemUoKTsKQEAgLTY1Niw2ICs2NTgsOCBAQCBORVZFUl9JTkxJTkUgSlNW
YWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBl
bmQoMCk7CiAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1l
QXJyYXkobV9leGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKSk7CiAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9l
eGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb2Jq
ZWN0U3RhcnRWaXNpdE1lbWJlcjoKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTk3MTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTI0LDYgKzE1MjQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByaXZhCiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+
dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAob2JqZWN0LT5wcm90b3R5cGUoKS5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTUzNiw2ICsxNTM4LDggQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlO
YW1lcyhKU09iamVjdAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcHJv
dG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgSlNWYWx1ZSBuZXh0
UHJvdG8gPSBwcm90b3R5cGUtPnByb3RvdHlwZSgpOwogICAgICAgICBpZiAobmV4dFByb3RvLmlz
TnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTQyLDYgKzI5NDYsOCBAQCB2b2lkIEpT
T2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZShtb2RlLCBKU09iamVj
dFByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG9iamVjdC0+cHJvdG90eXBl
KCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI5NTMsNiArMjk1OSw4IEBAIHZvaWQg
SlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEoKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKHByb3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIEpTVmFsdWUgbmV4dFByb3RvID0gcHJvdG90eXBlLT5wcm90b3R5cGUoKTsKICAg
ICAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxOTcxNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCiAjaW5j
bHVkZSAiUHV0RGlyZWN0SW5kZXhNb2RlLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90Lmgi
CisjaW5jbHVkZSAiUnVudGltZVR5cGUuaCIKIAogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2lu
Y2x1ZGUgIlZNLmgiCkBAIC0xNTA3LDYgKzE1MDgsNDEgQEAgQUxXQVlTX0lOTElORSBJZGVudGlm
aWVyIG1ha2VJZGVudGlmaWVyKAogICAgIHJldHVybiBuYW1lOwogfQogCisvLyBTZWN0aW9uIDcu
My4xNyBvZiB0aGUgc3BlYy4gCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQWRkRnVuY3Rpb24+IC8vIEFk
ZCBmdW5jdGlvbiBzaG91bGQgaGF2ZSBhIHR5cGUgbGlrZTogKEpTVmFsdWUsIFJ1bnRpbWVUeXBl
KSAtPiBib29sCit2b2lkIGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBhcnJheUxpa2VWYWx1ZSwgUnVudGltZVR5cGVNYXNrIGxlZ2FsVHlwZXNGaWx0ZXIs
IEFkZEZ1bmN0aW9uIGFkZEZ1bmN0aW9uKQoreworICAgIFZlY3RvcjxKU1ZhbHVlPiByZXN1bHQ7
CisgICAgSlNWYWx1ZSBsZW5ndGhQcm9wZXJ0eSA9IGFycmF5TGlrZVZhbHVlLmdldChleGVjLCBl
eGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm47CisgICAgZG91YmxlIGxlbmd0aEFzRG91YmxlID0gbGVu
Z3RoUHJvcGVydHkudG9MZW5ndGgoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm47CisgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoQXNEb3VibGUgPj0g
MC4wICYmIGxlbmd0aEFzRG91YmxlID09IHN0ZDo6dHJ1bmMobGVuZ3RoQXNEb3VibGUpKTsKKyAg
ICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoQXNEb3VibGUp
OworICAgIGZvciAodWludDY0X3QgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykg
eworICAgICAgICBKU1ZhbHVlIG5leHQ7CisgICAgICAgIGlmIChMSUtFTFkoaW5kZXggPD0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSkKKyAgICAgICAgICAgIG5leHQgPSBh
cnJheUxpa2VWYWx1ZS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5leHQgPSBhcnJheUxpa2VWYWx1ZS5nZXQoZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBzdGF0aWNfY2FzdDxkb3VibGU+KGluZGV4KSkpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgUnVudGltZVR5cGUgdHlwZSA9IHJ1bnRpbWVUeXBlRm9yVmFsdWUobmV4dCk7CisgICAg
ICAgIGlmICghKHR5cGUgJiBsZWdhbFR5cGVzRmlsdGVyKSkgeworICAgICAgICAgICAgLy8gRklY
TUU6IGJldHRlciBtZXNzYWdlIGhlcmUuCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBtYWtlU3RyaW5nKCJVbmV4cGVjdGVkIHR5cGUgaW4gbGlzdDogJyIsIHJ1bnRpbWVUeXBlQXNT
dHJpbmcodHlwZSksICInLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgZXhpdEVhcmx5ID0gYWRkRnVuY3Rpb24obmV4dCwgdHlwZSk7CisgICAgICAg
IGlmIChleGl0RWFybHkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCiBib29sIHZh
bGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIGJvb2wgaXNFeHRlbnNpYmxlLAogICAgIGNvbnN0IFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgYm9vbCBpc0N1cnJlbnREZWZpbmVkLCBjb25zdCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGN1cnJlbnQsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaAkocmV2aXNpb24gMTk3MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNywxNyAr
MTE3LDIxIEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnQKIAogICAg
IFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5ncyk7CiAKLSAgICBpZiAoc3RydWN0dXJlLT5jYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2ts
eSgpICYmIGluZGV4ZWRMZW5ndGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkgeworICAgIGlm
IChzdHJ1Y3R1cmUtPmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51bWVyYXRpb24oKSAm
JiBpbmRleGVkTGVuZ3RoID09IGJhc2UtPmdldEFycmF5TGVuZ3RoKCkpIHsKICAgICAgICAgYmFz
ZS0+bWV0aG9kVGFibGUodm0pLT5nZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKIAogICAgICAgICBudW1iZXJTdHJ1
Y3R1cmVQcm9wZXJ0aWVzID0gcHJvcGVydHlOYW1lcy5zaXplKCk7CiAKICAgICAgICAgYmFzZS0+
bWV0aG9kVGFibGUodm0pLT5nZXRHZW5lcmljUHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9IGVs
c2UgewogICAgICAgICAvLyBHZW5lcmljIHByb3BlcnR5IG5hbWVzIHZlY3RvciBjb250YWlucyBh
bGwgaW5kZXhlZCBwcm9wZXJ0eSBuYW1lcy4KICAgICAgICAgLy8gU28gZGlzYWJsZSBpbmRleGVk
IHByb3BlcnR5IGVudW1lcmF0aW9uIHBoYXNlIGJ5IHNldHRpbmcgfGluZGV4ZWRMZW5ndGh8IHRv
IDAuCiAgICAgICAgIGluZGV4ZWRMZW5ndGggPSAwOwogICAgICAgICBiYXNlLT5tZXRob2RUYWJs
ZSh2bSktPmdldFByb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlKCkpOworICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgQVNTRVJUKHByb3Bl
cnR5TmFtZXMuc2l6ZSgpIDwgVUlOVDMyX01BWCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2
aXNpb24gMTk3MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDEwIEBAIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3I6OkpTUHJvcGVydHlOYW1lSXQKIHsKIH0KIAotSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y2xvbmUoRXhlY1N0YXRlKiBleGVj
KQorSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y2xvbmUo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCkKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKS0+cHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9pdGVyYXRlZE9iamVjdC5n
ZXQoKSwgbV9wcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmdldCgpKTsKKyAgICAvLyBGSVhNRTogZmlu
ZCBjYWxsIHNpdGVzIG9mIHRoaXMuCiAgICAgaXRlcmF0b3ItPm1fZW51bWVyYXRpb25QaGFzZSA9
IG1fZW51bWVyYXRpb25QaGFzZTsKICAgICBpdGVyYXRvci0+bV9jdXJzb3IgPSBtX2N1cnNvcjsK
ICAgICByZXR1cm4gaXRlcmF0b3I7CkBAIC01OSw3ICs2MCwxMCBAQCBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0CiAKIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU09iamVjdCogaXRlcmF0ZWRPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGl0ZXJhdGVkT2JqZWN0LCBw
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGV4ZWMsIGl0ZXJhdGVkT2JqZWN0KSk7CisgICAgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gcHJvcGVydHlOYW1lRW51bWVyYXRvcihl
eGVjLCBpdGVyYXRlZE9iamVjdCk7CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGl0ZXJhdGVkT2JqZWN0LCBlbnVtZXJh
dG9yKTsKIH0KIAogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
cjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0
KiBpdGVyYXRlZE9iamVjdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lSXRlcmF0b3IuaAkocmV2aXNpb24gMTk3MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgSlNPYmplY3QqKTsKIAotICAgIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSopOworICAgIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKICAgICBib29sIG5leHQoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSYpOwogCiAgICAgSlNWYWx1ZSBpdGVyYXRlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9pdGVyYXRlZE9iamVjdC5nZXQoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MTk3MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsNiArNDI2LDggQEAgc3RhdGljIEpTVmFsdWUg
ZGVmaW5lUHJvcGVydGllcyhFeGVjU3RhdAogewogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3Bl
cnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwogICAg
IGFzT2JqZWN0KHByb3BlcnRpZXMpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJv
cGVydHlOYW1lcyhhc09iamVjdChwcm9wZXJ0aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKKyAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7
CiAgICAgc2l6ZV90IG51bVByb3BlcnRpZXMgPSBwcm9wZXJ0eU5hbWVzLnNpemUoKTsKICAgICBW
ZWN0b3I8UHJvcGVydHlEZXNjcmlwdG9yPiBkZXNjcmlwdG9yczsKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBtYXJrQnVmZmVyOwpAQCAtNDk2LDYgKzQ5OCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJv
cGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVj
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7CiAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHBy
b3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRl
KSk7CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJy
YXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSAqaXRlcjsKQEAg
LTUzMCw2ICs1MzQsOCBAQCBKU09iamVjdCogb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoRXhlY1N0
CiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAg
IFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5nc0FuZFN5bWJvbHMpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdl
dE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1v
ZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgUHJvcGVy
dHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAgICAg
Zm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMu
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSA9ICppdGVyOwpAQCAtNTkwLDYgKzU5Niw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVy
dHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7CiAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3Bl
cnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7
CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1l
QXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSAqaXRlcjsK
QEAgLTYyMyw2ICs2MzEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENv
bnN0CiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAog
ICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5nc0FuZFN5bWJvbHMpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSkt
PmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlv
bk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
cHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAg
ICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gKml0ZXI7CkBAIC02NjEsNiArNjcxLDgg
QEAgSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYwogewogICAgIFByb3Bl
cnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgcHJvcGVydHlOYW1lTW9kZSk7CiAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3Qs
IGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShkb250RW51bVByb3BlcnRpZXNNb2Rl
KSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIEpTQXJyYXkqIGtleXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3Bw
CShyZXZpc2lvbiAxOTcxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NSw4ICsyOTUsNiBAQCBib29sIFByb3h5
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmplY3QpOwogICAgIElkZW50aWZpZXIgaWRl
bnQgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSk7IAotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0aGlz
T2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgaWRlbnQuaW1wbCgpLCBzbG90
KTsKIH0KIApAQCAtNTI5LDcgKzUyNyw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCoKIHsKICAgICBQcm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94
eU9iamVjdCo+KGNlbGwpOwogICAgIGF1dG8gZGVmYXVsdERlbGV0ZSA9IFsmXSAoKSAtPiBib29s
IHsKLSAgICAgICAgSlNPYmplY3QqIHRhcmdldCA9IGpzQ2FzdDxKU09iamVjdCo+KHRoaXNPYmpl
Y3QtPnRhcmdldCgpKTsKKyAgICAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXNPYmplY3QtPnRh
cmdldCgpOwogICAgICAgICByZXR1cm4gdGFyZ2V0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+
ZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIH07CiAgICAg
cmV0dXJuIHRoaXNPYmplY3QtPnBlcmZvcm1EZWxldGUoZXhlYywgcHJvcGVydHlOYW1lLCBkZWZh
dWx0RGVsZXRlKTsKQEAgLTUzOSwxNSArNTM3LDE5NCBAQCBib29sIFByb3h5T2JqZWN0OjpkZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgoCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8UHJveHlPYmplY3QqPihjZWxsKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpOyAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvIGRlZmF1bHREZWxldGUgPSBbJl0g
KCkgLT4gYm9vbCB7Ci0gICAgICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBqc0Nhc3Q8SlNPYmplY3Qq
Pih0aGlzT2JqZWN0LT50YXJnZXQoKSk7CisgICAgICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlz
T2JqZWN0LT50YXJnZXQoKTsKICAgICAgICAgcmV0dXJuIHRhcmdldC0+bWV0aG9kVGFibGUoZXhl
Yy0+dm0oKSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0YXJnZXQsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgfTsKICAgICByZXR1cm4gdGhpc09iamVjdC0+cGVyZm9ybURlbGV0ZShleGVjLCBp
ZGVudC5pbXBsKCksIGRlZmF1bHREZWxldGUpOwogfQogCisvLyBGSVhNRTogdGhpcyBmdW5jdGlv
biBjYW4gdGhyb3cuCisvLyBXZSBuZWVkIHRvIG1ha2UgYWxsIGNhbGwgc2l0ZXMgYXdhcmUgdGhh
dCBnZXRPd25Qcm9wZXJ0eU5hbWVzIGNhbiB0aHJvdy4KK3RlbXBsYXRlIDx0eXBlbmFtZSBEZWZh
dWx0R2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uPgordm9pZCBQcm94eU9iamVjdDo6cGVyZm9y
bUdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
dHJhcFJlc3VsdCwgRW51bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZSwgRGVmYXVsdEdldE93
blByb3BlcnR5TmFtZXNGdW5jdGlvbiBkZWZhdWx0R2V0T3duUHJvcGVydHlOYW1lcykKK3sKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTVmFsdWUgaGFuZGxlclZhbHVlID0gdGhpcy0+
aGFuZGxlcigpOworICAgIGlmIChoYW5kbGVyVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5ICdoYW5kbGVyJyBpcyBudWxs
LiBJdCBzaG91bGQgYmUgYW4gT2JqZWN0LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEpTT2JqZWN0KiBoYW5kbGVyID0ganNDYXN0PEpTT2JqZWN0Kj4oaGFuZGxlclZhbHVlKTsK
KyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBKU1Zh
bHVlIG93bktleXNNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNh
bGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgIm93bktleXMiKSwgQVNDSUlMaXRlcmFsKCInZGVs
ZXRlUHJvcGVydHknIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxs
YWJsZS4iKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47
CisgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOworICAgIGlmIChvd25LZXlz
TWV0aG9kLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgZGVmYXVsdEdldE93blByb3BlcnR5TmFt
ZXMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CisgICAgSlNWYWx1ZSBh
cnJheUxpa2VPYmplY3QgPSBjYWxsKGV4ZWMsIG93bktleXNNZXRob2QsIGNhbGxUeXBlLCBjYWxs
RGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFByb3BlcnR5TmFtZU1vZGUgcHJvcGVydHlOYW1lTW9k
ZSA9IHRyYXBSZXN1bHQubW9kZSgpOworICAgIFJ1bnRpbWVUeXBlTWFzayByZXN1bHRGaWx0ZXIg
PSAwOworICAgIHN3aXRjaCAocHJvcGVydHlOYW1lTW9kZSkgeworICAgIGNhc2UgUHJvcGVydHlO
YW1lTW9kZTo6U3ltYm9sczoKKyAgICAgICAgcmVzdWx0RmlsdGVyID0gVHlwZVN5bWJvbDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzOgorICAgICAg
ICByZXN1bHRGaWx0ZXIgPSBUeXBlU3RyaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBy
b3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzOgorICAgICAgICByZXN1bHRGaWx0ZXIg
PSBUeXBlU3ltYm9sIHwgVHlwZVN0cmluZzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEFT
U0VSVChyZXN1bHRGaWx0ZXIpOworICAgIFJ1bnRpbWVUeXBlTWFzayBkb250VGhyb3dBbkV4Y2Vw
dGlvblR5cGVGaWx0ZXIgPSBUeXBlU3RyaW5nIHwgVHlwZVN5bWJvbDsKKyAgICBIYXNoTWFwPFVu
aXF1ZWRTdHJpbmdJbXBsKiwgdW5zaWduZWQ+IHVuY2hlY2tlZFJlc3VsdEtleXM7IC8vIEZJWE1F
OiBJdCBtaWdodCBiZSB3b3J0aCBnZW5lcmF0aW5nIHRoaXMgbGF6aWx5LiBBbHNvIG1pZ2h0IGJl
IHRyaWNreSBiZWNhdXNlIFByb3BlcnR5TmFtZUFycmF5IGRvZXNuJ3QgYWxsb3cgZHVwbGljYXRl
cy4KKyAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSAwOworCisgICAgYXV0byBhZGRQcm9wTmFtZSA9
IFsmXSAoSlNWYWx1ZSB2YWx1ZSwgUnVudGltZVR5cGUgdHlwZSkgLT4gYm9vbCB7CisgICAgICAg
IGJvb2wgZXhpdEVhcmx5OworICAgICAgICBpZiAoISh0eXBlICYgcmVzdWx0RmlsdGVyKSkgewor
ICAgICAgICAgICAgZXhpdEVhcmx5ID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gZXhpdEVh
cmx5OworICAgICAgICB9CisKKyAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IHZhbHVlLnRvUHJv
cGVydHlLZXkoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAg
ICAgICAgICAgZXhpdEVhcmx5ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBleGl0RWFybHk7
CisgICAgICAgIH0KKworICAgICAgICB1bmNoZWNrZWRSZXN1bHRLZXlzLmFkZChpZGVudC5pbXBs
KCksIDApLml0ZXJhdG9yLT52YWx1ZSsrOworICAgICAgICB0b3RhbFNpemUrKzsKKworICAgICAg
ICB0cmFwUmVzdWx0LmFkZChpZGVudC5pbXBsKCkpOworCisgICAgICAgIGV4aXRFYXJseSA9IGZh
bHNlOworICAgICAgICByZXR1cm4gZXhpdEVhcmx5OworICAgIH07CisKKyAgICBjcmVhdGVMaXN0
RnJvbUFycmF5TGlrZShleGVjLCBhcnJheUxpa2VPYmplY3QsIGRvbnRUaHJvd0FuRXhjZXB0aW9u
VHlwZUZpbHRlciwgYWRkUHJvcE5hbWUpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCB0YXJnZXRJc0V4ZW5zaWJsZSA9IHRhcmdldC0+
aXNFeHRlbnNpYmxlKCk7IC8vIE5vdGU6IHdlIGRvIHRoaXMgaGVyZSBiZWNhdXNlIGluIHRoZSBm
dXR1cmUgdGhpcyBpcyB1c2VyLW9ic2VydmFibGUuCisKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSB0
YXJnZXRLZXlzKCZ2bSwgcHJvcGVydHlOYW1lTW9kZSk7CisgICAgLy8gRklYTUU6IHdlIHNob3Vs
ZCBwcm9icyB0ZW1wbGF0aXplIG9uIHRoaXMgYmVjYXVzZSBvZiBvdXIgY2FsbGVyLgorICAgIHRh
cmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZXhlYywg
dGFyZ2V0S2V5cywgZW51bWVyYXRpb25Nb2RlKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJn
ZXRDb25maWd1cmFibGVLZXlzOworICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdl
dE5vbkNvbmZpZ3VyYWJsZUtleXM7CisgICAgZm9yIChjb25zdCBJZGVudGlmaWVyJiBpZGVudCA6
IHRhcmdldEtleXMpIHsKKyAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Cisg
ICAgICAgIGJvb2wgaXNQcm9wZXJ0eURlZmluZWQgPSB0YXJnZXQtPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBpZGVudC5pbXBsKCksIGRlc2NyaXB0b3IpOyAKKyAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoaXNQ
cm9wZXJ0eURlZmluZWQgJiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCisgICAgICAgICAg
ICB0YXJnZXROb25Db25maWd1cmFibGVLZXlzLmFwcGVuZChpZGVudC5pbXBsKCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICB0YXJnZXRDb25maWd1cmFibGVLZXlzLmFwcGVuZChpZGVudC5p
bXBsKCkpOworICAgIH0KKworICAgIGF1dG8gcmVtb3ZlRnJvbVVuY2hlY2tlZFJlc3VsdEtleXMg
PSBbJl0gKFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsKSAtPiBib29sIHsKKyAgICAgICAgYXV0byBp
dGVyID0gdW5jaGVja2VkUmVzdWx0S2V5cy5maW5kKGltcGwpOworICAgICAgICBib29sIGNvbnRh
aW5zOworICAgICAgICBpZiAoaXRlciA9PSB1bmNoZWNrZWRSZXN1bHRLZXlzLmVuZCgpKSB7Cisg
ICAgICAgICAgICBjb250YWlucyA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5z
OworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQmIGNvdW50ID0gaXRlci0+dmFsdWU7Cisg
ICAgICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgICAgICAgICBjb250YWlucyA9IGZhbHNlOwor
ICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zOworICAgICAgICB9CisKKyAgICAgICAgLS1jb3Vu
dDsKKyAgICAgICAgLS10b3RhbFNpemU7CisgICAgICAgIGNvbnRhaW5zID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIGNvbnRhaW5zOworICAgIH07CisKKyAgICBmb3IgKFVuaXF1ZWRTdHJpbmdJbXBs
KiBpbXBsIDogdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5cykgeworICAgICAgICBib29sIGNvbnRh
aW5zID0gcmVtb3ZlRnJvbVVuY2hlY2tlZFJlc3VsdEtleXMoaW1wbCk7CisgICAgICAgIGlmICgh
Y29udGFpbnMpIHsKKyAgICAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJQcm94eSBvYmplY3QncyAndGFyZ2V0JyBoYXMgYSBub24tY29uZmlndXJhYmxlIGtleSBu
b3QgcmV0dXJuZWQgaW4gdGhlIHJlc3VsdCBvZiB0aGUgUHJveHkgaGFuZGxlcidzICdvd25LZXlz
JyBtZXRob2QuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHRhcmdldElzRXhlbnNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKFVu
aXF1ZWRTdHJpbmdJbXBsKiBpbXBsIDogdGFyZ2V0Q29uZmlndXJhYmxlS2V5cykgeworICAgICAg
ICBib29sIGNvbnRhaW5zID0gcmVtb3ZlRnJvbVVuY2hlY2tlZFJlc3VsdEtleXMoaW1wbCk7Cisg
ICAgICAgIGlmICghY29udGFpbnMpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBp
dGVyYXRlIHRoZSBoYXNoIHRhYmxlIHRvIGdldCBhIGJldHRlciBlcnJvciBtZXNzYWdlLgorICAg
ICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5IG9iamVj
dCdzIG5vbi1leHRlbnNpYmxlICd0YXJnZXQnIGhhcyBhIGNvbmZpZ3VyYWJsZSBrZXkgbm90IHJl
dHVybmVkIGluIHRoZSByZXN1bHQgb2YgdGhlIFByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0
aG9kLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworLy8jaWZu
ZGVmIE5ERUJVRworICAgIHVuc2lnbmVkIHN1bSA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBrZXlD
b3VudCA6IHVuY2hlY2tlZFJlc3VsdEtleXMudmFsdWVzKCkpCisgICAgICAgIHN1bSArPSBrZXlD
b3VudDsKKyAgICBSRUxFQVNFX0FTU0VSVChzdW0gPT0gdG90YWxTaXplKTsKKy8vI2VuZGlmCisK
KyAgICBpZiAodG90YWxTaXplKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJQcm94eSBoYW5kbGVyJ3MgJ293bktleXMnIG1ldGhvZCByZXR1cm5lZCBhIGtl
eSB0aGF0IHdhcyBub3QgcHJlc2VudCBpbiBpdHMgdGFyZ2V0IG9yIGl0IHJldHVybmVkIGR1cGxp
Y2F0ZSBrZXlzLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBQcm94eU9i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2Rl
IGVudW1lcmF0aW9uTW9kZSkKK3sKKyAgICBQcm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxQcm94eU9iamVjdCo+KG9iamVjdCk7CisgICAgYXV0byBkZWZhdWx0R2V0T3duUHJvcGVydHlO
YW1lcyA9IFsmXSB7CisgICAgICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzT2JqZWN0LT50YXJn
ZXQoKTsKKyAgICAgICAgdGFyZ2V0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJv
cGVydHlOYW1lcyh0YXJnZXQsIGV4ZWMsIHByb3BlcnR5TmFtZUFycmF5LCBlbnVtZXJhdGlvbk1v
ZGUpOworICAgIH07CisgICAgdGhpc09iamVjdC0+cGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMo
ZXhlYywgcHJvcGVydHlOYW1lQXJyYXksIGVudW1lcmF0aW9uTW9kZSwgZGVmYXVsdEdldE93blBy
b3BlcnR5TmFtZXMpOworfQorCit2b2lkIFByb3h5T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSSdtIGNvbnZpbmNlZCB0
aGF0IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQgYnV0IHdlIHNob3VsZCB2ZXJpZnkgdGhp
cy4KKyAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGV2ZXIgcmVhY2ggdGhpcyBjb2RlPworICAgIC8v
IEZJWE1FOiB3aGF0IHRvIGRvIGhlcmUuIERvaW5nIHRoaXMgdHdpY2UgbWlnaHQgcHJvZHVjZSBv
YnNlcnZhYmxlIGJlaGF2aW9yIHRoYXQgZGV2aWF0ZXMgZnJvbSB0aGUgc3BlYy4gCisgICAgUHJv
eHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmplY3QpOworICAg
IGF1dG8gZGVmYXVsdEdldE93blByb3BlcnR5TmFtZXMgPSBbJl0geworICAgICAgICBKU09iamVj
dCogdGFyZ2V0ID0gdGhpc09iamVjdC0+dGFyZ2V0KCk7CisgICAgICAgIHRhcmdldC0+bWV0aG9k
VGFibGUoZXhlYy0+dm0oKSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0YXJnZXQsIGV4
ZWMsIHByb3BlcnR5TmFtZUFycmF5LCBlbnVtZXJhdGlvbk1vZGUpOworICAgIH07CisgICAgdGhp
c09iamVjdC0+cGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydHlOYW1lQXJy
YXksIGVudW1lcmF0aW9uTW9kZSwgZGVmYXVsdEdldE93blByb3BlcnR5TmFtZXMpOworfQorCit2
b2lkIFByb3h5T2JqZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAgLy8g
V2Ugc2hvdWxkIGFsd2F5cyBnbyBkb3duIHRoZSBnZXRPd25Qcm9wZXJ0eU5hbWVzIHBhdGguCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQcm94eU9iamVjdDo6
Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCiB2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMTk3MTc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU09i
amVjdC5oIgorI2luY2x1ZGUgIlJ1bnRpbWVUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC0zNSw3ICszNiw5IEBAIGNsYXNzIFByb3h5T2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmoK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAotICAgIGNvbnN0
IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRh
IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybzsKKyAgICAvLyBXZSBsaWUgYW4gc2F5IHdlIG92ZXJyaWRlIGdldFByb3BlcnR5TmFtZXMo
KSBiZWNhdXNlIGl0IHByZXZlbnRzCisgICAgLy8gcHJvcGVydHkgbmFtZSBlbnVtZXJhdGlvbiBj
YWNoaW5nLgorICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgVHlwZU9mU2hv
dWxkQ2FsbEdldENhbGxEYXRhIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXM7CiAKICAg
ICBzdGF0aWMgUHJveHlPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU1ZhbHVlIHRhcmdldCwgSlNWYWx1ZSBoYW5kbGVyKQogICAgIHsKQEAgLTQ3
LDcgKzUwLDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oUHJveHlPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSwgTm9uQXJyYXkgfCBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyk7CisgICAgICAg
IFN0cnVjdHVyZSogcmVzdWx0ID0gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhQcm94eU9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpLCBOb25BcnJheSB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzKTsKKyAgICAgICAgcmVzdWx0
LT5zZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NQcmV2ZW50ZWRGb3JFbnVtZXJhdGlvbih0cnVlKTsK
KyAgICAgICAgQVNTRVJUKCFyZXN1bHQtPmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51
bWVyYXRpb24oKSk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LT5jYW5DYWNoZVByb3BlcnR5TmFt
ZUVudW1lcmF0b3IoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKQEAgLTY5LDYgKzc2LDEwIEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7
CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNI
IHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyBOT19SRVRV
Uk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBz
dGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIAogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC03OCw2ICs4OSw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBwZXJmb3JtRGVsZXRlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgRGVmYXVsdERlbGV0
ZUZ1bmN0aW9uKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUGVyZm9ybURlZmF1bHRQdXRGdW5j
dGlvbj4KICAgICB2b2lkIHBlcmZvcm1QdXQoRXhlY1N0YXRlKiwgSlNWYWx1ZSBwdXRWYWx1ZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgUGVyZm9ybURlZmF1bHRQdXRGdW5jdGlv
bik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIERlZmF1bHRHZXRPd25Qcm9wZXJ0eU5hbWVzRnVu
Y3Rpb24+CisgICAgdm9pZCBwZXJmb3JtR2V0T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSwgRGVmYXVsdEdldE93blByb3BlcnR5
TmFtZXNGdW5jdGlvbik7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fdGFyZ2V0Owog
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2hhbmRsZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE5NzE3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwMSw3ICsyMDEsNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqCiAgICAgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhjbGFzc0luZm8tPmhhc1N0YXRp
Y1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwogICAgIHNldEhhc0N1c3RvbUdldHRlclNl
dHRlclByb3BlcnRpZXMoZmFsc2UpOwogICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRv
bmx5UHJvcGVydGllcygpKTsKLSAgICBzZXRIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyhmYWxz
ZSk7CisgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzUHJldmVudGVkRm9yRW51bWVyYXRpb24o
ZmFsc2UpOwogICAgIHNldEF0dHJpYnV0ZXNJblByZXZpb3VzKDApOwogICAgIHNldFByZXZlbnRF
eHRlbnNpb25zKGZhbHNlKTsKICAgICBzZXREaWRUcmFuc2l0aW9uKGZhbHNlKTsKQEAgLTIzMyw3
ICsyMzMsNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAgc2V0SGFzR2V0dGVy
U2V0dGVyUHJvcGVydGllcyhtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVBy
b3BlcnRpZXMoKSk7CiAgICAgc2V0SGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcyhmYWxz
ZSk7CiAgICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQ
cm90byhtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7
Ci0gICAgc2V0SGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoZmFsc2UpOworICAgIHNldElzUXVp
Y2tQcm9wZXJ0eUFjY2Vzc1ByZXZlbnRlZEZvckVudW1lcmF0aW9uKGZhbHNlKTsKICAgICBzZXRB
dHRyaWJ1dGVzSW5QcmV2aW91cygwKTsKICAgICBzZXRQcmV2ZW50RXh0ZW5zaW9ucyhmYWxzZSk7
CiAgICAgc2V0RGlkVHJhbnNpdGlvbihmYWxzZSk7CkBAIC0yNjQsNyArMjY0LDcgQEAgU3RydWN0
dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgIHNldEhhc0dldHRlclNldHRl
clByb3BlcnRpZXMocHJldmlvdXMtPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSk7CiAgICAg
c2V0SGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVydGllcyhwcmV2aW91cy0+aGFzQ3VzdG9tR2V0
dGVyU2V0dGVyUHJvcGVydGllcygpKTsKICAgICBzZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVy
UHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKHByZXZpb3VzLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkpOwotICAgIHNldEhhc05vbkVudW1lcmFibGVQ
cm9wZXJ0aWVzKHByZXZpb3VzLT5oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcygpKTsKKyAgICBz
ZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NQcmV2ZW50ZWRGb3JFbnVtZXJhdGlvbihwcmV2aW91cy0+
aXNRdWlja1Byb3BlcnR5QWNjZXNzUHJldmVudGVkRm9yRW51bWVyYXRpb24oKSk7CiAgICAgc2V0
QXR0cmlidXRlc0luUHJldmlvdXMoMCk7CiAgICAgc2V0UHJldmVudEV4dGVuc2lvbnMocHJldmlv
dXMtPnByZXZlbnRFeHRlbnNpb25zKCkpOwogICAgIHNldERpZFRyYW5zaXRpb24odHJ1ZSk7CkBA
IC05ODYsNyArOTg2LDcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQ
cgogCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udEVu
dW0pCi0gICAgICAgIHNldEhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKHRydWUpOworICAgICAg
ICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NQcmV2ZW50ZWRGb3JFbnVtZXJhdGlvbih0cnVlKTsK
IAogICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwogCkBAIC0xMDQ0LDcgKzEwNDQs
NyBAQCB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1CiAKICAgICBQcm9w
ZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwogICAgIGZv
ciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoaGFzTm9uRW51bWVyYWJs
ZVByb3BlcnRpZXMoKSB8fCAhKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51bSkpOworICAgICAg
ICBBU1NFUlQoaXNRdWlja1Byb3BlcnR5QWNjZXNzUHJldmVudGVkRm9yRW51bWVyYXRpb24oKSB8
fCAhKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51bSkpOwogICAgICAgICBpZiAoIShpdGVyLT5h
dHRyaWJ1dGVzICYgRG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygp
KSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+a2V5LT5pc1N5bWJvbCgpICYmICFwcm9wZXJ0eU5h
bWVzLmluY2x1ZGVTeW1ib2xQcm9wZXJ0aWVzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CkBAIC0xMzI0LDcgKzEzMjQsNyBAQCB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgp
CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICgh
aGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoKSkgeworICAgIGlmICghaXNRdWlja1Byb3BlcnR5
QWNjZXNzUHJldmVudGVkRm9yRW51bWVyYXRpb24oKSkgewogICAgICAgICBQcm9wZXJ0eVRhYmxl
OjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwogICAgICAgICBmb3IgKFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgICAgIEFTU0VSVCghKGl0ZXItPmF0dHJpYnV0
ZXMgJiBEb250RW51bSkpOwpAQCAtMTM5NCw5ICsxMzk0LDkgQEAgYm9vbCBTdHJ1Y3R1cmU6OmNh
bkNhY2hlUHJvcGVydHlOYW1lRW51bQogICAgIHJldHVybiB0cnVlOwogfQogICAgIAotYm9vbCBT
dHJ1Y3R1cmU6OmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5KCkgY29uc3QKK2Jvb2wgU3RydWN0
dXJlOjpjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseUZvckVudW1lcmF0aW9uKCkgY29uc3QKIHsK
LSAgICBpZiAoaGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoKSkKKyAgICBpZiAoaXNRdWlja1By
b3BlcnR5QWNjZXNzUHJldmVudGVkRm9yRW51bWVyYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmIChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CShyZXZpc2lvbiAxOTcxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzc3LDcgKzM3Nyw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldENhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqKTsKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNhY2hlZFByb3BlcnR5
TmFtZUVudW1lcmF0b3IoKSBjb25zdDsKICAgICBib29sIGNhbkNhY2hlUHJvcGVydHlOYW1lRW51
bWVyYXRvcigpIGNvbnN0OwotICAgIGJvb2wgY2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHkoKSBj
b25zdDsKKyAgICBib29sIGNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51bWVyYXRpb24o
KSBjb25zdDsKIAogICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKQEAgLTU3Nyw3ICs1NzcsNyBA
QCBwdWJsaWM6CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlzUGlubmVkUHJvcGVydHlUYWJs
ZSwgSXNQaW5uZWRQcm9wZXJ0eVRhYmxlLCAxLCAyKTsKICAgICBERUZJTkVfQklURklFTEQoYm9v
bCwgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcywgSGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcywg
MSwgMyk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8sIEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzRXhjbHVkaW5nUHJvdG8sIDEsIDQpOwotICAgIERFRklORV9CSVRGSUVMRChib29sLCBo
YXNOb25FbnVtZXJhYmxlUHJvcGVydGllcywgSGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMsIDEs
IDUpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBpc1F1aWNrUHJvcGVydHlBY2Nlc3NQcmV2
ZW50ZWRGb3JFbnVtZXJhdGlvbiwgSXNRdWlja1Byb3BlcnR5QWNjZXNzUHJldmVudGVkRm9yRW51
bWVyYXRpb24sIDEsIDUpOwogICAgIERFRklORV9CSVRGSUVMRCh1bnNpZ25lZCwgYXR0cmlidXRl
c0luUHJldmlvdXMsIEF0dHJpYnV0ZXNJblByZXZpb3VzLCAxNCwgNik7CiAgICAgREVGSU5FX0JJ
VEZJRUxEKGJvb2wsIHByZXZlbnRFeHRlbnNpb25zLCBQcmV2ZW50RXh0ZW5zaW9ucywgMSwgMjAp
OwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRUcmFuc2l0aW9uLCBEaWRUcmFuc2l0aW9u
LCAxLCAyMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5
LW93bi1rZXlzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvcHJveHktb3duLWtleXMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LW93bi1rZXlzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjc1IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uLiIpOworfQorCitsZXQgYXJyID0gWzEsMiwz
XTsKK2ZvciAobGV0IHAgaW4gYXJyKSA7CisKKy8veworLy8gICAgbGV0IHRhcmdldCA9IHsKKy8v
ICAgICAgICAvL3g6IDQwCisvLyAgICB9OworLy8gICAgbGV0IHN5bWJvbCA9IFN5bWJvbCgic3lt
Ym9sLWZvbyIpOworLy8gICAgLy90YXJnZXRbc3ltYm9sXSA9IDIwOworLy8gICAgLy9PYmplY3Qu
ZnJlZXplKHRhcmdldCk7CisvLworLy8gICAgbGV0IGNhbGxlZCA9IGZhbHNlOworLy8gICAgbGV0
IGhhbmRsZXIgPSB7CisvLyAgICAgICAgb3duS2V5czogZnVuY3Rpb24odGhlVGFyZ2V0KSB7Cisv
LyAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisvLyAgICAgICAgICAgIC8vcmV0dXJuIFsneCcs
IFN5bWJvbCgpXTsKKy8vICAgICAgICAgICAgLy9yZXR1cm4gW3N5bWJvbF07CisvLyAgICAgICAg
ICAgIGxldCBhcnIgPSBSZWZsZWN0Lm93bktleXModGhlVGFyZ2V0KTsKKy8vICAgICAgICAgICAg
cHJpbnQoSlNPTi5zdHJpbmdpZnkoYXJyKSk7CisvLyAgICAgICAgICAgIGFyciA9IGFyci5jb25j
YXQoWyJmb28iLCAiYmFyIiwgIngiXSk7CisvLyAgICAgICAgICAgIHByaW50KCJyZXR1cm5pbmc6
ICIgKyBKU09OLnN0cmluZ2lmeShhcnIpKTsKKy8vICAgICAgICAgICAgcmV0dXJuIGFycjsKKy8v
ICAgICAgICAgICAgLy9yZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRoZVRhcmdldCkuY29uY2F0KCk7
CisvLyAgICAgICAgfSwKKy8vICAgICAgICAvL2hhczogKCkgPT4gdHJ1ZQorLy8gICAgfTsKKy8v
CisvLyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKy8vICAgIC8v
Zm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworLy8gICAgICAgIC8vbGV0IGtleXMgPSBS
ZWZsZWN0Lm93bktleXMocHJveHkpOworLy8gICAgICAgIC8vcHJpbnQoSlNPTi5zdHJpbmdpZnko
T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpLCB1bmRlZmluZWQsIDIpKTsKKy8v
ICAgICAgICAvL2xldCBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhwcm94eSk7
CisvLyAgICAgICAgLy9hc3NlcnQoY2FsbGVkKTsKKy8vICAgICAgICAvL3ByaW50KEpTT04uc3Ry
aW5naWZ5KGtleXMsIHVuZGVmaW5lZCwgMikpOworLy8gICAgICAgIC8vZm9yIChsZXQgcCBpbiBw
cm94eSkgeworLy8gICAgICAgIC8vICAgIHByaW50KCJQOiAiICsgcCk7CisvLyAgICAgICAgLy99
CisvLyAgICAgICAgLy9hc3NlcnQoY2FsbGVkKTsKKy8vICAgICAgICAvL3ByaW50KHByb3h5Ll9f
cHJvdG9fXyA9PT0gT2JqZWN0LnByb3RvdHlwZSk7CisvLyAgICAgICAgbGV0IHRlc3QgPSBPYmpl
Y3QuY3JlYXRlKHByb3h5KTsKKy8vICAgICAgICB0ZXN0LnkgPSA0NTsKKy8vICAgICAgICBmb3Ig
KGxldCBwIGluIHByb3h5KSB7CisvLyAgICAgICAgICAgIHByaW50KCJQUDogIiArIHApOworLy8g
ICAgICAgIH0KKy8vICAgICAgICBhc3NlcnQoY2FsbGVkKTsKKy8vICAgIC8vfQorLy99CisKK3sK
KyAgICBsZXQgZXJyb3IgPSBudWxsOworICAgIGxldCB0YXJnZXQgPSB7IH07CisgICAgbGV0IGhh
bmRsZXIgPSB7CisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZXJy
b3IgPSBuZXcgRXJyb3I7CisgICAgICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9IGZhbHNl
OworICAgICAgICB0cnkgeworICAgICAgICAgICAgT2JqZWN0LmtleXMocHJveHkpOworICAgICAg
ICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAgICAgIGFz
c2VydChlID09PSBlcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHRocmV3KTsKKyAg
ICB9Cit9CisKK3sKKyAgICBsZXQgZXJyb3IgPSBudWxsOworICAgIGxldCB0YXJnZXQgPSB7IH07
CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGdldCBvd25LZXlzKCkgeworICAgICAgICAg
ICAgZXJyb3IgPSBuZXcgRXJyb3I7CisgICAgICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9
IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgT2JqZWN0LmtleXMocHJveHkpOwor
ICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGFzc2VydChlID09PSBlcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHRocmV3
KTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0geworICAgICAgICB4OiA0MAorICAg
IH07CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBoYW5kbGVyID0geworICAgICAg
ICBvd25LZXlzOiBmdW5jdGlvbih0aGVUYXJnZXQpIHsKKyAgICAgICAgICAgIGNhbGxlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gWyIxIiwgMiwgM107CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3h5KTsKKyAgICAgICAgfSBj
YXRjaChlKSB7CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICBhc3NlcnQo
ZS50b1N0cmluZygpID09PSAiVHlwZUVycm9yOiBVbmV4cGVjdGVkIHR5cGUgaW4gbGlzdDogJ0lu
dGVnZXInLiIpOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAgICAgIGFz
c2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK2Z1bmN0
aW9uIHNoYWxsb3dFcShhLCBiKSB7CisgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkr
KykgeworICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworeworICAgIGxldCB0YXJnZXQgPSB7
CisgICAgICAgIHg6IDQwCisgICAgfTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0
IGFyciA9IFsiYSIsICJiIiwgImMiXTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgb3du
S2V5czogZnVuY3Rpb24odGhlVGFyZ2V0KSB7CisgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIGFycjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgcHJv
eHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCByZXN1bHQgPSBPYmplY3Qua2V5cyhwcm94eSk7Cisg
ICAgICAgIGFzc2VydChyZXN1bHQgIT09IGFycik7CisgICAgICAgIGFzc2VydChzaGFsbG93RXEo
cmVzdWx0LCBhcnIpKTsKKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7CisgICAgICAgIGNhbGxlZCA9
IGZhbHNlOworICAgIH0KK30KKworeworICAgIGxldCB0YXJnZXQgPSB7CisgICAgICAgIHg6IDQw
CisgICAgfTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IGFyciA9IFsiYSIsICJi
IiwgImMiXTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgb3duS2V5czogZnVuY3Rpb24o
dGhlVGFyZ2V0KSB7CisgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIGFycjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHko
dGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7Cisg
ICAgICAgIGxldCByZXN1bHQgPSBSZWZsZWN0Lm93bktleXMocHJveHkpOworICAgICAgICBhc3Nl
cnQocmVzdWx0ICE9PSBhcnIpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHJlc3VsdCwgYXJy
KSk7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAg
ICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0geworICAgICAgICB4OiA0MAorICAgIH07Cisg
ICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBzMSA9IFN5bWJvbCgpOworICAgIGxldCBz
MiA9IFN5bWJvbCgpOworICAgIGxldCBhcnIgPSBbImEiLCAiYiIsIHMxLCAiYyIsIHMyXTsKKyAg
ICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgb3duS2V5czogZnVuY3Rpb24odGhlVGFyZ2V0KSB7
CisgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGFycjsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5k
bGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCBy
ZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3h5KTsKKyAgICAgICAgYXNz
ZXJ0KHNoYWxsb3dFcShyZXN1bHQsIFtzMSwgczJdKSk7CisgICAgICAgIGFzc2VydChjYWxsZWQp
OworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0
ID0geworICAgICAgICB4OiA0MAorICAgIH07CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAg
IGxldCBzMSA9IFN5bWJvbCgpOworICAgIGxldCBzMiA9IFN5bWJvbCgpOworICAgIGxldCBhcnIg
PSBbImEiLCAiYiIsIHMxLCAiYyIsIHMyXTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4geyBl
bnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfQorICAgICAgICB9LAorICAgICAg
ICBvd25LZXlzOiBmdW5jdGlvbih0aGVUYXJnZXQpIHsKKyAgICAgICAgICAgIGNhbGxlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gYXJyOworICAgICAgICB9CisgICAgfTsKKworICAgIGxl
dCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IHNldCA9IG5ldyBTZXQ7CisgICAgICAgIGZv
ciAobGV0IHAgaW4gcHJveHkpCisgICAgICAgICAgICBzZXQuYWRkKHApOworICAgICAgICBhc3Nl
cnQoc2V0LnNpemUgPT09IDMpOworICAgICAgICBhc3NlcnQoc2V0LmhhcygiYSIpKTsKKyAgICAg
ICAgYXNzZXJ0KHNldC5oYXMoImIiKSk7CisgICAgICAgIGFzc2VydChzZXQuaGFzKCJjIikpOwor
ICAgICAgICBhc3NlcnQoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQor
fQorCit7CisgICAgbGV0IHRhcmdldCA9IHsKKyAgICAgICAgeDogNDAKKyAgICB9OworICAgIGxl
dCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgczEgPSBTeW1ib2woKTsKKyAgICBsZXQgczIgPSBT
eW1ib2woKTsKKyAgICBsZXQgYXJyID0gWyJhIiwgImIiLCBzMSwgImMiLCBzMl07CisgICAgbGV0
IGhhbmRsZXIgPSB7CisgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogKCkgPT4gewor
ICAgICAgICAgICAgcmV0dXJuIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVl
IH0KKyAgICAgICAgfSwKKyAgICAgICAgb3duS2V5czogZnVuY3Rpb24odGhlVGFyZ2V0KSB7Cisg
ICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGFycjsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVy
KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCBzZXQg
PSBuZXcgU2V0OworICAgICAgICBmb3IgKGxldCBwIGluIHByb3h5KQorICAgICAgICAgICAgc2V0
LmFkZChwKTsKKyAgICAgICAgaWYgKGkgPT09IDM5KSB7IC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBj
YWNoZSB0aGUgcmVzdWx0LgorICAgICAgICAgICAgYXJyLnB1c2goImQiKTsKKyAgICAgICAgfQor
ICAgICAgICBhc3NlcnQoc2V0LnNpemUgPT09IGkgPj0gNDAgPyA0IDogMyk7CisgICAgICAgIGFz
c2VydChzZXQuaGFzKCJhIikpOworICAgICAgICBhc3NlcnQoc2V0LmhhcygiYiIpKTsKKyAgICAg
ICAgYXNzZXJ0KHNldC5oYXMoImMiKSk7CisgICAgICAgIGlmIChpID49IDQwKQorICAgICAgICAg
ICAgYXNzZXJ0KHNldC5oYXMoImQiKSk7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAg
ICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272356</attachid>
            <date>2016-02-26 12:36:33 -0800</date>
            <delta_ts>2016-02-26 15:40:24 -0800</delta_ts>
            <desc>more WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>43667</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAxOTcxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEz
LDcgKzUxMyw3IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob24KICAg
ICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IHRoaXNPYmplY3QtPmNsYXNzUmVmKCk7IGpzQ2xh
c3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewogICAgICAgICBpZiAoSlNPYmpl
Y3RHZXRQcm9wZXJ0eU5hbWVzQ2FsbGJhY2sgZ2V0UHJvcGVydHlOYW1lcyA9IGpzQ2xhc3MtPmdl
dFByb3BlcnR5TmFtZXMpIHsKICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhleGVjKTsKLSAgICAgICAgICAgIGdldFByb3BlcnR5TmFtZXMoZXhlY1JlZiwgdGhp
c1JlZiwgdG9SZWYoJnByb3BlcnR5TmFtZXMpKTsKKyAgICAgICAgICAgIGdldFByb3BlcnR5TmFt
ZXMoZXhlY1JlZiwgdGhpc1JlZiwgdG9SZWYoJnByb3BlcnR5TmFtZXMpKTsgLy8gRklYTUU6CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVz
VGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpzQ2xhc3MtPnN0YXRpY1ZhbHVlcyhleGVjKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDE5
NzE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MjQsNyArNjI0LDcgQEAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU09i
amVjdENvcHlQcm9wZQogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAg
ICBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIHByb3BlcnR5TmFtZXMgPSBuZXcgT3BhcXVlSlNQcm9w
ZXJ0eU5hbWVBcnJheSh2bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgYXJyYXkodm0sIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQ
cm9wZXJ0eU5hbWVzKGpzT2JqZWN0LCBleGVjLCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOwor
ICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKGpzT2JqZWN0LCBl
eGVjLCBhcnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOyAvLyBGSVhNRToKIAogICAgIHNpemVfdCBz
aXplID0gYXJyYXkuc2l6ZSgpOwogICAgIHByb3BlcnR5TmFtZXMtPmFycmF5LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCShyZXZpc2lvbiAxOTcxNzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNyw2ICsxMjcsNyBAQCB2b2lkIERlYnVnZ2VyU2NvcGU6OmdldE93blByb3BlcnR5TmFtZXMo
CiAgICAgICAgIHJldHVybjsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IEpTU2NvcGU6Om9i
amVjdEF0U2NvcGUoc2NvcGUtPmpzU2NvcGUoKSk7CiAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKKyAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIH0KIAogYm9vbCBEZWJ1
Z2dlclNjb3BlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwCShy
ZXZpc2lvbiAxOTcxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDkgKzQ0OCwxMSBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAgIGl0ZXJhdG9y
ID0gc2V0SXRlcmF0b3ItPmNsb25lKGV4ZWMpOwogICAgIGVsc2UgaWYgKEpTU3RyaW5nSXRlcmF0
b3IqIHN0cmluZ0l0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU1N0cmluZ0l0ZXJhdG9yKj4odmFs
dWUpKQogICAgICAgICBpdGVyYXRvciA9IHN0cmluZ0l0ZXJhdG9yLT5jbG9uZShleGVjKTsKLSAg
ICBlbHNlIGlmIChKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBwcm9wZXJ0eU5hbWVJdGVyYXRvciA9
IGpzRHluYW1pY0Nhc3Q8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcio+KHZhbHVlKSkKLSAgICAgICAg
aXRlcmF0b3IgPSBwcm9wZXJ0eU5hbWVJdGVyYXRvci0+Y2xvbmUoZXhlYyk7Ci0gICAgZWxzZQor
ICAgIGVsc2UgaWYgKEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHByb3BlcnR5TmFtZUl0ZXJhdG9y
ID0ganNEeW5hbWljQ2FzdDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKj4odmFsdWUpKSB7CisgICAg
ICAgIGl0ZXJhdG9yID0gcHJvcGVydHlOYW1lSXRlcmF0b3ItPmNsb25lKGV4ZWMsIDApOworICAg
ICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKKyAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICB1bnNpZ25lZCBudW1iZXJUb0ZldGNoID0gNTsKQEAgLTQ2MCw2ICs0NjIsOCBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAgIG51bWJlclRv
RmV0Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hEb3VibGUpOwogCiAgICAgSlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOworICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyVG9GZXRjaDsgKytpKSB7CiAg
ICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRvcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAkocmV2aXNp
b24gMTk3MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkzOSw2ICs5MzksOCBAQCBKU1ZhbHVlIHN1cHBvcnRlZExv
Y2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgLy8gNy4gTGV0IGtleXMgYmUgc3Vic2V0LltbT3du
UHJvcGVydHlLZXlzXV0oKS4KICAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZzdGF0ZSwgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAgICAgc3VwcG9ydGVkTG9jYWxlcy0+Z2V0T3duUHJv
cGVydHlOYW1lcyhzdXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXMsIEVudW1lcmF0aW9uTW9k
ZSgpKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2M7CiAgICAgZGVzYy5zZXRD
b25maWd1cmFibGUoZmFsc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDE5NzE3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzksNiArNDM5
LDggQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVy
dHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICAgICAgICAgICAg
ICBtX29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX29iamVjdC5n
ZXQoKSwgZXhlYywgb2JqZWN0UHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFt
ZXMgPSBvYmplY3RQcm9wZXJ0eU5hbWVzLnJlbGVhc2VEYXRhKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBtX3NpemUgPSBtX3Byb3BlcnR5TmFtZXMtPnByb3BlcnR5TmFtZVZlY3Rvcigp
LnNpemUoKTsKQEAgLTY1Niw2ICs2NTgsOCBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6
OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CiAgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkobV9leGVj
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKSk7CiAgICAgICAgICAgICAgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0
eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNp
dE1lbWJlcjoKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTk3MTc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTI0LDYgKzE1MjQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByaXZh
CiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogewogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93
blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAob2JqZWN0LT5wcm90b3R5cGUoKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTUzNiw2ICsxNTM4LDggQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVj
dAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcHJvdG90eXBlLT5tZXRo
b2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBwcm90
b3R5cGUtPnByb3RvdHlwZSgpOwogICAgICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yOTQyLDYgKzI5NDYsOCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRH
ZW5lcmljUHJvcGVydHlOYW1lcyhKCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZShtb2RlLCBKU09iamVjdFByb3BlcnRpZXNN
b2RlOjpFeGNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG9iamVjdC0+cHJvdG90eXBlKCkuaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTI5NTMsNiArMjk1OSw4IEBAIHZvaWQgSlNPYmplY3Q6Omdl
dEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBy
b3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEpT
VmFsdWUgbmV4dFByb3RvID0gcHJvdG90eXBlLT5wcm90b3R5cGUoKTsKICAgICAgICAgaWYgKG5l
eHRQcm90by5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxOTcxNzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2
ICs0MSw3IEBACiAjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCiAjaW5jbHVkZSAiUHV0RGly
ZWN0SW5kZXhNb2RlLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCisjaW5jbHVkZSAi
UnVudGltZVR5cGUuaCIKIAogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlZNLmgi
CkBAIC0xNTA3LDYgKzE1MDgsNDEgQEAgQUxXQVlTX0lOTElORSBJZGVudGlmaWVyIG1ha2VJZGVu
dGlmaWVyKAogICAgIHJldHVybiBuYW1lOwogfQogCisvLyBTZWN0aW9uIDcuMy4xNyBvZiB0aGUg
c3BlYy4gCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQWRkRnVuY3Rpb24+IC8vIEFkZCBmdW5jdGlvbiBz
aG91bGQgaGF2ZSBhIHR5cGUgbGlrZTogKEpTVmFsdWUsIFJ1bnRpbWVUeXBlKSAtPiBib29sCit2
b2lkIGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhcnJh
eUxpa2VWYWx1ZSwgUnVudGltZVR5cGVNYXNrIGxlZ2FsVHlwZXNGaWx0ZXIsIEFkZEZ1bmN0aW9u
IGFkZEZ1bmN0aW9uKQoreworICAgIFZlY3RvcjxKU1ZhbHVlPiByZXN1bHQ7CisgICAgSlNWYWx1
ZSBsZW5ndGhQcm9wZXJ0eSA9IGFycmF5TGlrZVZhbHVlLmdldChleGVjLCBleGVjLT52bSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm47CisgICAgZG91YmxlIGxlbmd0aEFzRG91YmxlID0gbGVuZ3RoUHJvcGVydHku
dG9MZW5ndGgoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm47CisgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoQXNEb3VibGUgPj0gMC4wICYmIGxlbmd0
aEFzRG91YmxlID09IHN0ZDo6dHJ1bmMobGVuZ3RoQXNEb3VibGUpKTsKKyAgICB1aW50NjRfdCBs
ZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoQXNEb3VibGUpOworICAgIGZvciAo
dWludDY0X3QgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICBK
U1ZhbHVlIG5leHQ7CisgICAgICAgIGlmIChMSUtFTFkoaW5kZXggPD0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKSkKKyAgICAgICAgICAgIG5leHQgPSBhcnJheUxpa2VWYWx1
ZS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG5leHQgPSBhcnJheUxpa2VWYWx1ZS5nZXQoZXhlYywgSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBzdGF0aWNfY2FzdDxkb3VibGU+KGluZGV4KSkpOworICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUnVudGlt
ZVR5cGUgdHlwZSA9IHJ1bnRpbWVUeXBlRm9yVmFsdWUobmV4dCk7CisgICAgICAgIGlmICghKHR5
cGUgJiBsZWdhbFR5cGVzRmlsdGVyKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IGJldHRlciBt
ZXNzYWdlIGhlcmUuCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBtYWtlU3RyaW5n
KCJVbmV4cGVjdGVkIHR5cGUgaW4gbGlzdDogJyIsIHJ1bnRpbWVUeXBlQXNTdHJpbmcodHlwZSks
ICInLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
ZXhpdEVhcmx5ID0gYWRkRnVuY3Rpb24obmV4dCwgdHlwZSk7CisgICAgICAgIGlmIChleGl0RWFy
bHkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCiBib29sIHZhbGlkYXRlQW5kQXBw
bHlQcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IGJvb2wgaXNFeHRlbnNpYmxlLAogICAgIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgYm9vbCBpc0N1cnJlbnREZWZpbmVkLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGN1
cnJlbnQsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2
aXNpb24gMTk3MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNywxNyArMTE3LDIxIEBAIGlu
bGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnQKIAogICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAK
LSAgICBpZiAoc3RydWN0dXJlLT5jYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSgpICYmIGluZGV4
ZWRMZW5ndGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkgeworICAgIGlmIChzdHJ1Y3R1cmUt
PmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51bWVyYXRpb24oKSAmJiBpbmRleGVkTGVu
Z3RoID09IGJhc2UtPmdldEFycmF5TGVuZ3RoKCkpIHsKICAgICAgICAgYmFzZS0+bWV0aG9kVGFi
bGUodm0pLT5nZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKIAogICAgICAgICBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0
aWVzID0gcHJvcGVydHlOYW1lcy5zaXplKCk7CiAKICAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUo
dm0pLT5nZXRHZW5lcmljUHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9IGVsc2UgewogICAgICAg
ICAvLyBHZW5lcmljIHByb3BlcnR5IG5hbWVzIHZlY3RvciBjb250YWlucyBhbGwgaW5kZXhlZCBw
cm9wZXJ0eSBuYW1lcy4KICAgICAgICAgLy8gU28gZGlzYWJsZSBpbmRleGVkIHByb3BlcnR5IGVu
dW1lcmF0aW9uIHBoYXNlIGJ5IHNldHRpbmcgfGluZGV4ZWRMZW5ndGh8IHRvIDAuCiAgICAgICAg
IGluZGV4ZWRMZW5ndGggPSAwOwogICAgICAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldFBy
b3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkp
OworICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgQVNTRVJUKHByb3BlcnR5TmFtZXMuc2l6
ZSgpIDwgVUlOVDMyX01BWCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTk3MTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDEwIEBAIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3I6OkpTUHJvcGVydHlOYW1lSXQKIHsKIH0KIAotSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciog
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y2xvbmUoRXhlY1N0YXRlKiBleGVjKQorSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y2xvbmUoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCkKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+cHJvcGVy
dHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9pdGVyYXRlZE9iamVjdC5nZXQoKSwgbV9wcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmdldCgpKTsKKyAgICAvLyBGSVhNRTogZmluZCBjYWxsIHNpdGVz
IG9mIHRoaXMuCiAgICAgaXRlcmF0b3ItPm1fZW51bWVyYXRpb25QaGFzZSA9IG1fZW51bWVyYXRp
b25QaGFzZTsKICAgICBpdGVyYXRvci0+bV9jdXJzb3IgPSBtX2N1cnNvcjsKICAgICByZXR1cm4g
aXRlcmF0b3I7CkBAIC01OSw3ICs2MCwxMCBAQCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1By
b3BlcnR5TmFtZUl0CiAKIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09i
amVjdCogaXRlcmF0ZWRPYmplY3QpCiB7Ci0gICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3I6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGl0ZXJhdGVkT2JqZWN0LCBwcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKGV4ZWMsIGl0ZXJhdGVkT2JqZWN0KSk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBlbnVtZXJhdG9yID0gcHJvcGVydHlOYW1lRW51bWVyYXRvcihleGVjLCBpdGVyYXRl
ZE9iamVjdCk7CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNy
ZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGl0ZXJhdGVkT2JqZWN0LCBlbnVtZXJhdG9yKTsKIH0KIAog
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBpdGVyYXRlZE9i
amVjdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0
b3IuaAkocmV2aXNpb24gMTk3MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBjcmVhdGUoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgSlNPYmplY3QqKTsKIAotICAgIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSopOworICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGNs
b25lKEV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKICAgICBib29sIG5leHQoRXhlY1N0YXRlKiwgSlNW
YWx1ZSYpOwogCiAgICAgSlNWYWx1ZSBpdGVyYXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9p
dGVyYXRlZE9iamVjdC5nZXQoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTk3MTc4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MjYsNiArNDI2LDggQEAgc3RhdGljIEpTVmFsdWUgZGVmaW5lUHJvcGVy
dGllcyhFeGVjU3RhdAogewogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhl
YywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwogICAgIGFzT2JqZWN0KHBy
b3BlcnRpZXMpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhh
c09iamVjdChwcm9wZXJ0aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
KERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgc2l6ZV90
IG51bVByb3BlcnRpZXMgPSBwcm9wZXJ0eU5hbWVzLnNpemUoKTsKICAgICBWZWN0b3I8UHJvcGVy
dHlEZXNjcmlwdG9yPiBkZXNjcmlwdG9yczsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBtYXJr
QnVmZmVyOwpAQCAtNDk2LDYgKzQ5OCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0Q29uc3QKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQ
IG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5h
bWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVj
LT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVu
dW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShvYmopOwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
ICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSAqaXRlcjsKQEAgLTUzMCw2ICs1MzQs
OCBAQCBKU09iamVjdCogb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoRXhlY1N0CiAgICAgLy8gMi4g
Rm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJv
bHMpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgUHJvcGVydHlOYW1lQXJyYXk6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0
eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9ICpp
dGVyOwpAQCAtNTkwLDYgKzU5Niw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3QKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9m
IE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVN
b2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52
bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1l
cmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSAqaXRlcjsKQEAgLTYyMyw2ICs2
MzEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgLy8g
Mi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5
TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5
bWJvbHMpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5l
bmQoKTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g
cHJvcGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIElkZW50
aWZpZXIgcHJvcGVydHlOYW1lID0gKml0ZXI7CkBAIC02NjEsNiArNjcxLDggQEAgSlNBcnJheSog
b3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYwogewogICAgIFByb3BlcnR5TmFtZUFycmF5
IHByb3BlcnRpZXMoZXhlYywgcHJvcGVydHlOYW1lTW9kZSk7CiAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3Bl
cnRpZXMsIEVudW1lcmF0aW9uTW9kZShkb250RW51bVByb3BlcnRpZXNNb2RlKSk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEpT
QXJyYXkqIGtleXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAx
OTcxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5NSw4ICsyOTUsNiBAQCBib29sIFByb3h5T2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8UHJveHlPYmplY3QqPihvYmplY3QpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSk7IAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0aGlzT2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgaWRlbnQuaW1wbCgpLCBzbG90KTsKIH0KIApAQCAt
NTI5LDcgKzUyNyw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCoK
IHsKICAgICBQcm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNl
bGwpOwogICAgIGF1dG8gZGVmYXVsdERlbGV0ZSA9IFsmXSAoKSAtPiBib29sIHsKLSAgICAgICAg
SlNPYmplY3QqIHRhcmdldCA9IGpzQ2FzdDxKU09iamVjdCo+KHRoaXNPYmplY3QtPnRhcmdldCgp
KTsKKyAgICAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXNPYmplY3QtPnRhcmdldCgpOwogICAg
ICAgICByZXR1cm4gdGFyZ2V0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVsZXRlUHJvcGVy
dHkodGFyZ2V0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIH07CiAgICAgcmV0dXJuIHRoaXNP
YmplY3QtPnBlcmZvcm1EZWxldGUoZXhlYywgcHJvcGVydHlOYW1lLCBkZWZhdWx0RGVsZXRlKTsK
QEAgLTUzOSwxNSArNTM3LDE5NCBAQCBib29sIFByb3h5T2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5
SW5kZXgoCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmpl
Y3QqPihjZWxsKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBwcm9wZXJ0eU5hbWUpOyAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBhdXRvIGRlZmF1bHREZWxldGUgPSBbJl0gKCkgLT4gYm9vbCB7
Ci0gICAgICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBqc0Nhc3Q8SlNPYmplY3QqPih0aGlzT2JqZWN0
LT50YXJnZXQoKSk7CisgICAgICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzT2JqZWN0LT50YXJn
ZXQoKTsKICAgICAgICAgcmV0dXJuIHRhcmdldC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRl
bGV0ZVByb3BlcnR5QnlJbmRleCh0YXJnZXQsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgfTsK
ICAgICByZXR1cm4gdGhpc09iamVjdC0+cGVyZm9ybURlbGV0ZShleGVjLCBpZGVudC5pbXBsKCks
IGRlZmF1bHREZWxldGUpOwogfQogCisvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBjYW4gdGhyb3cu
CisvLyBXZSBuZWVkIHRvIG1ha2UgYWxsIGNhbGwgc2l0ZXMgYXdhcmUgdGhhdCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzIGNhbiB0aHJvdy4KK3RlbXBsYXRlIDx0eXBlbmFtZSBEZWZhdWx0R2V0T3duUHJv
cGVydHlOYW1lc0Z1bmN0aW9uPgordm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3Bl
cnR5TmFtZXMoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgdHJhcFJlc3VsdCwg
RW51bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZSwgRGVmYXVsdEdldE93blByb3BlcnR5TmFt
ZXNGdW5jdGlvbiBkZWZhdWx0R2V0T3duUHJvcGVydHlOYW1lcykKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIEpTVmFsdWUgaGFuZGxlclZhbHVlID0gdGhpcy0+aGFuZGxlcigpOwor
ICAgIGlmIChoYW5kbGVyVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5ICdoYW5kbGVyJyBpcyBudWxsLiBJdCBzaG91bGQg
YmUgYW4gT2JqZWN0LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0
KiBoYW5kbGVyID0ganNDYXN0PEpTT2JqZWN0Kj4oaGFuZGxlclZhbHVlKTsKKyAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBKU1ZhbHVlIG93bktleXNN
ZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtl
SWRlbnRpZmllcih2bSwgIm93bktleXMiKSwgQVNDSUlMaXRlcmFsKCInZGVsZXRlUHJvcGVydHkn
IHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZS4iKSk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47CisgICAgSlNPYmpl
Y3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOworICAgIGlmIChvd25LZXlzTWV0aG9kLmlzVW5k
ZWZpbmVkKCkpIHsKKyAgICAgICAgZGVmYXVsdEdldE93blByb3BlcnR5TmFtZXMoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsK
KyAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CisgICAgSlNWYWx1ZSBhcnJheUxpa2VPYmpl
Y3QgPSBjYWxsKGV4ZWMsIG93bktleXNNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxl
ciwgYXJndW1lbnRzKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFByb3BlcnR5TmFtZU1vZGUgcHJvcGVydHlOYW1lTW9kZSA9IHRyYXBSZXN1
bHQubW9kZSgpOworICAgIFJ1bnRpbWVUeXBlTWFzayByZXN1bHRGaWx0ZXIgPSAwOworICAgIHN3
aXRjaCAocHJvcGVydHlOYW1lTW9kZSkgeworICAgIGNhc2UgUHJvcGVydHlOYW1lTW9kZTo6U3lt
Ym9sczoKKyAgICAgICAgcmVzdWx0RmlsdGVyID0gVHlwZVN5bWJvbDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzOgorICAgICAgICByZXN1bHRGaWx0
ZXIgPSBUeXBlU3RyaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3NBbmRTeW1ib2xzOgorICAgICAgICByZXN1bHRGaWx0ZXIgPSBUeXBlU3ltYm9s
IHwgVHlwZVN0cmluZzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEFTU0VSVChyZXN1bHRG
aWx0ZXIpOworICAgIFJ1bnRpbWVUeXBlTWFzayBkb250VGhyb3dBbkV4Y2VwdGlvblR5cGVGaWx0
ZXIgPSBUeXBlU3RyaW5nIHwgVHlwZVN5bWJvbDsKKyAgICBIYXNoTWFwPFVuaXF1ZWRTdHJpbmdJ
bXBsKiwgdW5zaWduZWQ+IHVuY2hlY2tlZFJlc3VsdEtleXM7IC8vIEZJWE1FOiBJdCBtaWdodCBi
ZSB3b3J0aCBnZW5lcmF0aW5nIHRoaXMgbGF6aWx5LiBBbHNvIG1pZ2h0IGJlIHRyaWNreSBiZWNh
dXNlIFByb3BlcnR5TmFtZUFycmF5IGRvZXNuJ3QgYWxsb3cgZHVwbGljYXRlcy4KKyAgICB1bnNp
Z25lZCB0b3RhbFNpemUgPSAwOworCisgICAgYXV0byBhZGRQcm9wTmFtZSA9IFsmXSAoSlNWYWx1
ZSB2YWx1ZSwgUnVudGltZVR5cGUgdHlwZSkgLT4gYm9vbCB7CisgICAgICAgIGJvb2wgZXhpdEVh
cmx5OworICAgICAgICBpZiAoISh0eXBlICYgcmVzdWx0RmlsdGVyKSkgeworICAgICAgICAgICAg
ZXhpdEVhcmx5ID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gZXhpdEVhcmx5OworICAgICAg
ICB9CisKKyAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IHZhbHVlLnRvUHJvcGVydHlLZXkoZXhl
Yyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgZXhp
dEVhcmx5ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBleGl0RWFybHk7CisgICAgICAgIH0K
KworICAgICAgICB1bmNoZWNrZWRSZXN1bHRLZXlzLmFkZChpZGVudC5pbXBsKCksIDApLml0ZXJh
dG9yLT52YWx1ZSsrOworICAgICAgICB0b3RhbFNpemUrKzsKKworICAgICAgICB0cmFwUmVzdWx0
LmFkZChpZGVudC5pbXBsKCkpOworCisgICAgICAgIGV4aXRFYXJseSA9IGZhbHNlOworICAgICAg
ICByZXR1cm4gZXhpdEVhcmx5OworICAgIH07CisKKyAgICBjcmVhdGVMaXN0RnJvbUFycmF5TGlr
ZShleGVjLCBhcnJheUxpa2VPYmplY3QsIGRvbnRUaHJvd0FuRXhjZXB0aW9uVHlwZUZpbHRlciwg
YWRkUHJvcE5hbWUpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYm9vbCB0YXJnZXRJc0V4ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxl
KCk7IC8vIE5vdGU6IHdlIGRvIHRoaXMgaGVyZSBiZWNhdXNlIGluIHRoZSBmdXR1cmUgdGhpcyBp
cyB1c2VyLW9ic2VydmFibGUuCisKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSB0YXJnZXRLZXlzKCZ2
bSwgcHJvcGVydHlOYW1lTW9kZSk7CisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBwcm9icyB0ZW1w
bGF0aXplIG9uIHRoaXMgYmVjYXVzZSBvZiBvdXIgY2FsbGVyLgorICAgIHRhcmdldC0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZXhlYywgdGFyZ2V0S2V5cywg
ZW51bWVyYXRpb25Nb2RlKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBWZWN0b3I8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJnZXRDb25maWd1cmFi
bGVLZXlzOworICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdldE5vbkNvbmZpZ3Vy
YWJsZUtleXM7CisgICAgZm9yIChjb25zdCBJZGVudGlmaWVyJiBpZGVudCA6IHRhcmdldEtleXMp
IHsKKyAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgICAgIGJvb2wg
aXNQcm9wZXJ0eURlZmluZWQgPSB0YXJnZXQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVj
LCBpZGVudC5pbXBsKCksIGRlc2NyaXB0b3IpOyAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoaXNQcm9wZXJ0eURlZmlu
ZWQgJiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCisgICAgICAgICAgICB0YXJnZXROb25D
b25maWd1cmFibGVLZXlzLmFwcGVuZChpZGVudC5pbXBsKCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0YXJnZXRDb25maWd1cmFibGVLZXlzLmFwcGVuZChpZGVudC5pbXBsKCkpOworICAg
IH0KKworICAgIGF1dG8gcmVtb3ZlRnJvbVVuY2hlY2tlZFJlc3VsdEtleXMgPSBbJl0gKFVuaXF1
ZWRTdHJpbmdJbXBsKiBpbXBsKSAtPiBib29sIHsKKyAgICAgICAgYXV0byBpdGVyID0gdW5jaGVj
a2VkUmVzdWx0S2V5cy5maW5kKGltcGwpOworICAgICAgICBib29sIGNvbnRhaW5zOworICAgICAg
ICBpZiAoaXRlciA9PSB1bmNoZWNrZWRSZXN1bHRLZXlzLmVuZCgpKSB7CisgICAgICAgICAgICBj
b250YWlucyA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zOworICAgICAgICB9
CisKKyAgICAgICAgdW5zaWduZWQmIGNvdW50ID0gaXRlci0+dmFsdWU7CisgICAgICAgIGlmIChj
b3VudCA9PSAwKSB7CisgICAgICAgICAgICBjb250YWlucyA9IGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIGNvbnRhaW5zOworICAgICAgICB9CisKKyAgICAgICAgLS1jb3VudDsKKyAgICAgICAg
LS10b3RhbFNpemU7CisgICAgICAgIGNvbnRhaW5zID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNv
bnRhaW5zOworICAgIH07CisKKyAgICBmb3IgKFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsIDogdGFy
Z2V0Tm9uQ29uZmlndXJhYmxlS2V5cykgeworICAgICAgICBib29sIGNvbnRhaW5zID0gcmVtb3Zl
RnJvbVVuY2hlY2tlZFJlc3VsdEtleXMoaW1wbCk7CisgICAgICAgIGlmICghY29udGFpbnMpIHsK
KyAgICAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJQcm94eSBv
YmplY3QncyAndGFyZ2V0JyBoYXMgYSBub24tY29uZmlndXJhYmxlIGtleSBub3QgcmV0dXJuZWQg
aW4gdGhlIHJlc3VsdCBvZiB0aGUgUHJveHkgaGFuZGxlcidzICdvd25LZXlzJyBtZXRob2QuIikp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdl
dElzRXhlbnNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKFVuaXF1ZWRTdHJpbmdJ
bXBsKiBpbXBsIDogdGFyZ2V0Q29uZmlndXJhYmxlS2V5cykgeworICAgICAgICBib29sIGNvbnRh
aW5zID0gcmVtb3ZlRnJvbVVuY2hlY2tlZFJlc3VsdEtleXMoaW1wbCk7CisgICAgICAgIGlmICgh
Y29udGFpbnMpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBpdGVyYXRlIHRoZSBo
YXNoIHRhYmxlIHRvIGdldCBhIGJldHRlciBlcnJvciBtZXNzYWdlLgorICAgICAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlByb3h5IG9iamVjdCdzIG5vbi1leHRl
bnNpYmxlICd0YXJnZXQnIGhhcyBhIGNvbmZpZ3VyYWJsZSBrZXkgbm90IHJldHVybmVkIGluIHRo
ZSByZXN1bHQgb2YgdGhlIFByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kLiIpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworLy8jaWZuZGVmIE5ERUJVRwor
ICAgIHVuc2lnbmVkIHN1bSA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBrZXlDb3VudCA6IHVuY2hl
Y2tlZFJlc3VsdEtleXMudmFsdWVzKCkpCisgICAgICAgIHN1bSArPSBrZXlDb3VudDsKKyAgICBS
RUxFQVNFX0FTU0VSVChzdW0gPT0gdG90YWxTaXplKTsKKy8vI2VuZGlmCisKKyAgICBpZiAodG90
YWxTaXplKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJQ
cm94eSBoYW5kbGVyJ3MgJ293bktleXMnIG1ldGhvZCByZXR1cm5lZCBhIGtleSB0aGF0IHdhcyBu
b3QgcHJlc2VudCBpbiBpdHMgdGFyZ2V0IG9yIGl0IHJldHVybmVkIGR1cGxpY2F0ZSBrZXlzLiIp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBQcm94eU9iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9u
TW9kZSkKK3sKKyAgICBQcm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVj
dCo+KG9iamVjdCk7CisgICAgYXV0byBkZWZhdWx0R2V0T3duUHJvcGVydHlOYW1lcyA9IFsmXSB7
CisgICAgICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzT2JqZWN0LT50YXJnZXQoKTsKKyAgICAg
ICAgdGFyZ2V0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0
YXJnZXQsIGV4ZWMsIHByb3BlcnR5TmFtZUFycmF5LCBlbnVtZXJhdGlvbk1vZGUpOworICAgIH07
CisgICAgdGhpc09iamVjdC0+cGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVy
dHlOYW1lQXJyYXksIGVudW1lcmF0aW9uTW9kZSwgZGVmYXVsdEdldE93blByb3BlcnR5TmFtZXMp
OworfQorCit2b2lkIFByb3h5T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUpCit7CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSSdtIGNvbnZpbmNlZCB0aGF0IHRoaXMgc2hv
dWxkIG5ldmVyIGJlIHJlYWNoZWQgYnV0IHdlIHNob3VsZCB2ZXJpZnkgdGhpcy4KKyAgICAvLyBG
SVhNRTogc2hvdWxkIHdlIGV2ZXIgcmVhY2ggdGhpcyBjb2RlPworICAgIC8vIEZJWE1FOiB3aGF0
IHRvIGRvIGhlcmUuIERvaW5nIHRoaXMgdHdpY2UgbWlnaHQgcHJvZHVjZSBvYnNlcnZhYmxlIGJl
aGF2aW9yIHRoYXQgZGV2aWF0ZXMgZnJvbSB0aGUgc3BlYy4gCisgICAgUHJveHlPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmplY3QpOworICAgIGF1dG8gZGVmYXVs
dEdldE93blByb3BlcnR5TmFtZXMgPSBbJl0geworICAgICAgICBKU09iamVjdCogdGFyZ2V0ID0g
dGhpc09iamVjdC0+dGFyZ2V0KCk7CisgICAgICAgIHRhcmdldC0+bWV0aG9kVGFibGUoZXhlYy0+
dm0oKSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0YXJnZXQsIGV4ZWMsIHByb3BlcnR5
TmFtZUFycmF5LCBlbnVtZXJhdGlvbk1vZGUpOworICAgIH07CisgICAgdGhpc09iamVjdC0+cGVy
Zm9ybUdldE93blByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydHlOYW1lQXJyYXksIGVudW1lcmF0
aW9uTW9kZSwgZGVmYXVsdEdldE93blByb3BlcnR5TmFtZXMpOworfQorCit2b2lkIFByb3h5T2Jq
ZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAgLy8gV2Ugc2hvdWxkIGFs
d2F5cyBnbyBkb3duIHRoZSBnZXRPd25Qcm9wZXJ0eU5hbWVzIHBhdGguCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQcm94eU9iamVjdDo6Z2V0R2VuZXJpY1By
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CiB2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJv
eHlPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJveHlPYmplY3QuaAkocmV2aXNpb24gMTk3MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2lu
Y2x1ZGUgIlJ1bnRpbWVUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNSw3ICszNiw5
IEBAIGNsYXNzIFByb3h5T2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmoKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAotICAgIGNvbnN0IHN0YXRpYyB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhIHwgSW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKKyAgICAv
LyBXZSBsaWUgYW4gc2F5IHdlIG92ZXJyaWRlIGdldFByb3BlcnR5TmFtZXMoKSBiZWNhdXNlIGl0
IHByZXZlbnRzCisgICAgLy8gcHJvcGVydHkgbmFtZSBlbnVtZXJhdGlvbiBjYWNoaW5nLgorICAg
IGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgVHlwZU9mU2hvdWxkQ2FsbEdldENh
bGxEYXRhIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXM7CiAKICAgICBzdGF0aWMgUHJv
eHlPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U1ZhbHVlIHRhcmdldCwgSlNWYWx1ZSBoYW5kbGVyKQogICAgIHsKQEAgLTQ3LDcgKzUwLDExIEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oUHJveHlPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwg
Tm9uQXJyYXkgfCBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyk7CisgICAgICAgIFN0cnVjdHVyZSog
cmVzdWx0ID0gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhQcm94eU9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBOb25BcnJh
eSB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRJc1F1aWNr
UHJvcGVydHlBY2Nlc3NQcmV2ZW50ZWRGb3JFbnVtZXJhdGlvbih0cnVlKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIXJlc3VsdC0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJh
dGlvbigpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdC0+Y2FuQ2FjaGVQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CkBAIC02OSw2ICs3NiwxMCBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0
YSYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSk7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgTk9f
UkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRHZW5lcmljUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CiAKICAgICBib29sIGdldE93blByb3BlcnR5U2xvdENvbW1vbihFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpAQCAtNzgsNiArODksOCBAQCBwcml2YXRlOgog
ICAgIGJvb2wgcGVyZm9ybURlbGV0ZShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIERlZmF1bHRE
ZWxldGVGdW5jdGlvbik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBlcmZvcm1EZWZhdWx0UHV0
RnVuY3Rpb24+CiAgICAgdm9pZCBwZXJmb3JtUHV0KEV4ZWNTdGF0ZSosIEpTVmFsdWUgcHV0VmFs
dWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIFBlcmZvcm1EZWZhdWx0UHV0RnVu
Y3Rpb24pOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBEZWZhdWx0R2V0T3duUHJvcGVydHlOYW1l
c0Z1bmN0aW9uPgorICAgIHZvaWQgcGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUsIERlZmF1bHRHZXRPd25Qcm9w
ZXJ0eU5hbWVzRnVuY3Rpb24pOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3Rhcmdl
dDsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9oYW5kbGVyOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxOTcxNzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDEsNyArMjAxLDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iagogICAgIHNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXMoY2xhc3NJbmZvLT5oYXNT
dGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKICAgICBzZXRIYXNDdXN0b21HZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzKGZhbHNlKTsKICAgICBzZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKGNsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JS
ZWFkb25seVByb3BlcnRpZXMoKSk7Ci0gICAgc2V0SGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMo
ZmFsc2UpOworICAgIHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc1ByZXZlbnRlZEZvckVudW1lcmF0
aW9uKGZhbHNlKTsKICAgICBzZXRBdHRyaWJ1dGVzSW5QcmV2aW91cygwKTsKICAgICBzZXRQcmV2
ZW50RXh0ZW5zaW9ucyhmYWxzZSk7CiAgICAgc2V0RGlkVHJhbnNpdGlvbihmYWxzZSk7CkBAIC0y
MzMsNyArMjMzLDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtKQogICAgIHNldEhhc0dl
dHRlclNldHRlclByb3BlcnRpZXMobV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9u
bHlQcm9wZXJ0aWVzKCkpOwogICAgIHNldEhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMo
ZmFsc2UpOwogICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVk
aW5nUHJvdG8obV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVz
KCkpOwotICAgIHNldEhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKGZhbHNlKTsKKyAgICBzZXRJ
c1F1aWNrUHJvcGVydHlBY2Nlc3NQcmV2ZW50ZWRGb3JFbnVtZXJhdGlvbihmYWxzZSk7CiAgICAg
c2V0QXR0cmlidXRlc0luUHJldmlvdXMoMCk7CiAgICAgc2V0UHJldmVudEV4dGVuc2lvbnMoZmFs
c2UpOwogICAgIHNldERpZFRyYW5zaXRpb24oZmFsc2UpOwpAQCAtMjY0LDcgKzI2NCw3IEBAIFN0
cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICBzZXRIYXNHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzKHByZXZpb3VzLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpOwog
ICAgIHNldEhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMocHJldmlvdXMtPmhhc0N1c3Rv
bUdldHRlclNldHRlclByb3BlcnRpZXMoKSk7CiAgICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNl
dHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhwcmV2aW91cy0+aGFzUmVhZE9ubHlPckdldHRl
clNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpKTsKLSAgICBzZXRIYXNOb25FbnVtZXJh
YmxlUHJvcGVydGllcyhwcmV2aW91cy0+aGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoKSk7Cisg
ICAgc2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzUHJldmVudGVkRm9yRW51bWVyYXRpb24ocHJldmlv
dXMtPmlzUXVpY2tQcm9wZXJ0eUFjY2Vzc1ByZXZlbnRlZEZvckVudW1lcmF0aW9uKCkpOwogICAg
IHNldEF0dHJpYnV0ZXNJblByZXZpb3VzKDApOwogICAgIHNldFByZXZlbnRFeHRlbnNpb25zKHBy
ZXZpb3VzLT5wcmV2ZW50RXh0ZW5zaW9ucygpKTsKICAgICBzZXREaWRUcmFuc2l0aW9uKHRydWUp
OwpAQCAtOTg2LDcgKzk4Niw3IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2
bSwgUHIKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBpZiAoYXR0cmlidXRlcyAmIERv
bnRFbnVtKQotICAgICAgICBzZXRIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyh0cnVlKTsKKyAg
ICAgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzUHJldmVudGVkRm9yRW51bWVyYXRpb24odHJ1
ZSk7CiAKICAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKIApAQCAtMTA0NCw3ICsx
MDQ0LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydQogCiAgICAg
UHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKICAg
ICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGhhc05vbkVudW1l
cmFibGVQcm9wZXJ0aWVzKCkgfHwgIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKTsKKyAg
ICAgICAgQVNTRVJUKGlzUXVpY2tQcm9wZXJ0eUFjY2Vzc1ByZXZlbnRlZEZvckVudW1lcmF0aW9u
KCkgfHwgIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKTsKICAgICAgICAgaWYgKCEoaXRl
ci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSB8fCBtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMoKSkgewogICAgICAgICAgICAgaWYgKGl0ZXItPmtleS0+aXNTeW1ib2woKSAmJiAhcHJvcGVy
dHlOYW1lcy5pbmNsdWRlU3ltYm9sUHJvcGVydGllcygpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwpAQCAtMTMyNCw3ICsxMzI0LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVu
Y3koKQogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIWhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKCkpIHsKKyAgICBpZiAoIWlzUXVpY2tQcm9w
ZXJ0eUFjY2Vzc1ByZXZlbnRlZEZvckVudW1lcmF0aW9uKCkpIHsKICAgICAgICAgUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKICAgICAgICAgZm9y
IChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgICAgICBBU1NFUlQoIShpdGVyLT5hdHRy
aWJ1dGVzICYgRG9udEVudW0pKTsKQEAgLTEzOTQsOSArMTM5NCw5IEBAIGJvb2wgU3RydWN0dXJl
OjpjYW5DYWNoZVByb3BlcnR5TmFtZUVudW0KICAgICByZXR1cm4gdHJ1ZTsKIH0KICAgICAKLWJv
b2wgU3RydWN0dXJlOjpjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSgpIGNvbnN0Citib29sIFN0
cnVjdHVyZTo6Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpIGNvbnN0
CiB7Ci0gICAgaWYgKGhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKCkpCisgICAgaWYgKGlzUXVp
Y2tQcm9wZXJ0eUFjY2Vzc1ByZXZlbnRlZEZvckVudW1lcmF0aW9uKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAkocmV2aXNpb24gMTk3MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw3ICszNzcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRDYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKik7CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3Q7CiAgICAgYm9vbCBjYW5DYWNoZVByb3BlcnR5TmFt
ZUVudW1lcmF0b3IoKSBjb25zdDsKLSAgICBib29sIGNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5
KCkgY29uc3Q7CisgICAgYm9vbCBjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseUZvckVudW1lcmF0
aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIGdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKFZN
JiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCkBAIC01NzcsNyArNTc3
LDcgQEAgcHVibGljOgogICAgIERFRklORV9CSVRGSUVMRChib29sLCBpc1Bpbm5lZFByb3BlcnR5
VGFibGUsIElzUGlubmVkUHJvcGVydHlUYWJsZSwgMSwgMik7CiAgICAgREVGSU5FX0JJVEZJRUxE
KGJvb2wsIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMsIEhhc0dldHRlclNldHRlclByb3BlcnRp
ZXMsIDEsIDMpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNSZWFkT25seU9yR2V0dGVy
U2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvLCBIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVy
UHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvLCAxLCA0KTsKLSAgICBERUZJTkVfQklURklFTEQoYm9v
bCwgaGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMsIEhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVz
LCAxLCA1KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNRdWlja1Byb3BlcnR5QWNjZXNz
UHJldmVudGVkRm9yRW51bWVyYXRpb24sIElzUXVpY2tQcm9wZXJ0eUFjY2Vzc1ByZXZlbnRlZEZv
ckVudW1lcmF0aW9uLCAxLCA1KTsKICAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIGF0dHJp
YnV0ZXNJblByZXZpb3VzLCBBdHRyaWJ1dGVzSW5QcmV2aW91cywgMTQsIDYpOwogICAgIERFRklO
RV9CSVRGSUVMRChib29sLCBwcmV2ZW50RXh0ZW5zaW9ucywgUHJldmVudEV4dGVuc2lvbnMsIDEs
IDIwKTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlkVHJhbnNp
dGlvbiwgMSwgMjEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9w
cm94eS1vd24ta2V5cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3Byb3h5LW93bi1rZXlzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1vd24ta2V5cy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM5NSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbi4iKTsKK30KKworbGV0IGFyciA9IFsx
LDIsM107Citmb3IgKGxldCBwIGluIGFycikgOworCisvL3sKKy8vICAgIGxldCB0YXJnZXQgPSB7
CisvLyAgICAgICAgLy94OiA0MAorLy8gICAgfTsKKy8vICAgIGxldCBzeW1ib2wgPSBTeW1ib2wo
InN5bWJvbC1mb28iKTsKKy8vICAgIC8vdGFyZ2V0W3N5bWJvbF0gPSAyMDsKKy8vICAgIC8vT2Jq
ZWN0LmZyZWV6ZSh0YXJnZXQpOworLy8KKy8vICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKy8vICAg
IGxldCBoYW5kbGVyID0geworLy8gICAgICAgIG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdldCkg
eworLy8gICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworLy8gICAgICAgICAgICAvL3JldHVybiBb
J3gnLCBTeW1ib2woKV07CisvLyAgICAgICAgICAgIC8vcmV0dXJuIFtzeW1ib2xdOworLy8gICAg
ICAgICAgICBsZXQgYXJyID0gUmVmbGVjdC5vd25LZXlzKHRoZVRhcmdldCk7CisvLyAgICAgICAg
ICAgIHByaW50KEpTT04uc3RyaW5naWZ5KGFycikpOworLy8gICAgICAgICAgICBhcnIgPSBhcnIu
Y29uY2F0KFsiZm9vIiwgImJhciIsICJ4Il0pOworLy8gICAgICAgICAgICBwcmludCgicmV0dXJu
aW5nOiAiICsgSlNPTi5zdHJpbmdpZnkoYXJyKSk7CisvLyAgICAgICAgICAgIHJldHVybiBhcnI7
CisvLyAgICAgICAgICAgIC8vcmV0dXJuIFJlZmxlY3Qub3duS2V5cyh0aGVUYXJnZXQpLmNvbmNh
dCgpOworLy8gICAgICAgIH0sCisvLyAgICAgICAgLy9oYXM6ICgpID0+IHRydWUKKy8vICAgIH07
CisvLworLy8gICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisvLyAg
ICAvL2ZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKy8vICAgICAgICAvL2xldCBrZXlz
ID0gUmVmbGVjdC5vd25LZXlzKHByb3h5KTsKKy8vICAgICAgICAvL3ByaW50KEpTT04uc3RyaW5n
aWZ5KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSwgdW5kZWZpbmVkLCAyKSk7
CisvLyAgICAgICAgLy9sZXQga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJv
eHkpOworLy8gICAgICAgIC8vYXNzZXJ0KGNhbGxlZCk7CisvLyAgICAgICAgLy9wcmludChKU09O
LnN0cmluZ2lmeShrZXlzLCB1bmRlZmluZWQsIDIpKTsKKy8vICAgICAgICAvL2ZvciAobGV0IHAg
aW4gcHJveHkpIHsKKy8vICAgICAgICAvLyAgICBwcmludCgiUDogIiArIHApOworLy8gICAgICAg
IC8vfQorLy8gICAgICAgIC8vYXNzZXJ0KGNhbGxlZCk7CisvLyAgICAgICAgLy9wcmludChwcm94
eS5fX3Byb3RvX18gPT09IE9iamVjdC5wcm90b3R5cGUpOworLy8gICAgICAgIGxldCB0ZXN0ID0g
T2JqZWN0LmNyZWF0ZShwcm94eSk7CisvLyAgICAgICAgdGVzdC55ID0gNDU7CisvLyAgICAgICAg
Zm9yIChsZXQgcCBpbiBwcm94eSkgeworLy8gICAgICAgICAgICBwcmludCgiUFA6ICIgKyBwKTsK
Ky8vICAgICAgICB9CisvLyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7CisvLyAgICAvL30KKy8vfQor
Cit7CisgICAgbGV0IGVycm9yID0gbnVsbDsKKyAgICBsZXQgdGFyZ2V0ID0geyB9OworICAgIGxl
dCBoYW5kbGVyID0geworICAgICAgICBvd25LZXlzOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IGVycm9yID0gbmV3IEVycm9yOworICAgICAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7Cisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgdGhyZXcgPSBm
YWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3h5KTsKKyAg
ICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAg
ICBhc3NlcnQoZSA9PT0gZXJyb3IpOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7
CisgICAgfQorfQorCit7CisgICAgbGV0IGVycm9yID0gbnVsbDsKKyAgICBsZXQgdGFyZ2V0ID0g
eyB9OworICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBnZXQgb3duS2V5cygpIHsKKyAgICAg
ICAgICAgIGVycm9yID0gbmV3IEVycm9yOworICAgICAgICAgICAgdGhyb3cgZXJyb3I7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxl
cik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgdGhy
ZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3h5
KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAg
ICAgICAgICBhc3NlcnQoZSA9PT0gZXJyb3IpOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0
aHJldyk7CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9IHsKKyAgICAgICAgeDogNDAK
KyAgICB9OworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAg
ICAgICAgb3duS2V5czogZnVuY3Rpb24odGhlVGFyZ2V0KSB7CisgICAgICAgICAgICBjYWxsZWQg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFsiMSIsIDIsIDNdOworICAgICAgICB9CisgICAg
fTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7
CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBPYmplY3Qua2V5cyhwcm94eSk7CisgICAgICAg
IH0gY2F0Y2goZSkgeworICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAgICAgICAgICAgYXNz
ZXJ0KGUudG9TdHJpbmcoKSA9PT0gIlR5cGVFcnJvcjogVW5leHBlY3RlZCB0eXBlIGluIGxpc3Q6
ICdJbnRlZ2VyJy4iKTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQodGhyZXcpOworICAgICAg
ICBhc3NlcnQoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCitm
dW5jdGlvbiBzaGFsbG93RXEoYSwgYikgeworICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgaWYgKGFbaV0gIT09IGJbaV0pCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0
ID0geworICAgICAgICB4OiA0MAorICAgIH07CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAg
IGxldCBhcnIgPSBbImEiLCAiYiIsICJjIl07CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAg
IG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdldCkgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiBhcnI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0
IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgcmVzdWx0ID0gT2JqZWN0LmtleXMocHJveHkp
OworICAgICAgICBhc3NlcnQocmVzdWx0ICE9PSBhcnIpOworICAgICAgICBhc3NlcnQoc2hhbGxv
d0VxKHJlc3VsdCwgYXJyKSk7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxs
ZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0geworICAgICAgICB4
OiA0MAorICAgIH07CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBhcnIgPSBbImEi
LCAiYiIsICJjIl07CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIG93bktleXM6IGZ1bmN0
aW9uKHRoZVRhcmdldCkgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBhcnI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFBy
b3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykg
eworICAgICAgICBsZXQgcmVzdWx0ID0gUmVmbGVjdC5vd25LZXlzKHByb3h5KTsKKyAgICAgICAg
YXNzZXJ0KHJlc3VsdCAhPT0gYXJyKTsKKyAgICAgICAgYXNzZXJ0KHNoYWxsb3dFcShyZXN1bHQs
IGFycikpOworICAgICAgICBhc3NlcnQoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7
CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9IHsKKyAgICAgICAgeDogNDAKKyAgICB9
OworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgczEgPSBTeW1ib2woKTsKKyAgICBs
ZXQgczIgPSBTeW1ib2woKTsKKyAgICBsZXQgYXJyID0gWyJhIiwgImIiLCBzMSwgImMiLCBzMl07
CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdl
dCkgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBhcnI7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwg
aGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBs
ZXQgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhwcm94eSk7CisgICAgICAg
IGFzc2VydChzaGFsbG93RXEocmVzdWx0LCBbczEsIHMyXSkpOworICAgICAgICBhc3NlcnQoY2Fs
bGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit7CisgICAgbGV0IHRh
cmdldCA9IHsKKyAgICAgICAgeDogNDAKKyAgICB9OworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsK
KyAgICBsZXQgczEgPSBTeW1ib2woKTsKKyAgICBsZXQgczIgPSBTeW1ib2woKTsKKyAgICBsZXQg
YXJyID0gWyJhIiwgImIiLCBzMSwgImMiLCBzMl07CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAg
ICAgIG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdldCkgeworICAgICAgICAgICAgY2FsbGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBhcnI7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
bGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgcmVzdWx0ID0gT2JqZWN0LmtleXMocHJv
eHkpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHJlc3VsdCwgWyJhIiwgImIiLCAiYyJdKSk7
CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9
Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0geworICAgICAgICB4OiA0MAorICAgIH07CisgICAg
bGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBzMSA9IFN5bWJvbCgpOworICAgIGxldCBzMiA9
IFN5bWJvbCgpOworICAgIGxldCBhcnIgPSBbImEiLCAiYiIsIHMxLCAiYyIsIHMyXTsKKyAgICBs
ZXQgaGFuZGxlciA9IHsKKyAgICAgICAgb3duS2V5czogZnVuY3Rpb24odGhlVGFyZ2V0KSB7Cisg
ICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGFycjsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVy
KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCByZXN1
bHQgPSBSZWZsZWN0Lm93bktleXMocHJveHkpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHJl
c3VsdCwgWyJhIiwgImIiLCAiYyIsIHMxLCBzMl0pKTsKKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7
CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgIH0KK30KKworeworICAgIGxldCB0YXJnZXQg
PSB7CisgICAgICAgIHg6IDQwCisgICAgfTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAg
bGV0IHMxID0gU3ltYm9sKCk7CisgICAgbGV0IHMyID0gU3ltYm9sKCk7CisgICAgbGV0IGFyciA9
IFsiYSIsICJiIiwgczEsICJjIiwgczJdOworICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICgpID0+IHsKKyAgICAgICAgICAgIHJldHVybiB7IGVu
dW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9CisgICAgICAgIH0sCisgICAgICAg
IG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdldCkgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiBhcnI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0
IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgc2V0ID0gbmV3IFNldDsKKyAgICAgICAgZm9y
IChsZXQgcCBpbiBwcm94eSkKKyAgICAgICAgICAgIHNldC5hZGQocCk7CisgICAgICAgIGFzc2Vy
dChzZXQuc2l6ZSA9PT0gMyk7CisgICAgICAgIGFzc2VydChzZXQuaGFzKCJhIikpOworICAgICAg
ICBhc3NlcnQoc2V0LmhhcygiYiIpKTsKKyAgICAgICAgYXNzZXJ0KHNldC5oYXMoImMiKSk7Cisg
ICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9
CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0geworICAgICAgICB4OiA0MAorICAgIH07CisgICAgbGV0
IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBzMSA9IFN5bWJvbCgpOworICAgIGxldCBzMiA9IFN5
bWJvbCgpOworICAgIGxldCBhcnIgPSBbImEiLCAiYiIsIHMxLCAiYyIsIHMyXTsKKyAgICBsZXQg
aGFuZGxlciA9IHsKKyAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAoKSA9PiB7Cisg
ICAgICAgICAgICByZXR1cm4geyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUg
fQorICAgICAgICB9LAorICAgICAgICBvd25LZXlzOiBmdW5jdGlvbih0aGVUYXJnZXQpIHsKKyAg
ICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gYXJyOworICAgICAg
ICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIp
OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IHNldCA9
IG5ldyBTZXQ7CisgICAgICAgIGZvciAobGV0IHAgaW4gcHJveHkpCisgICAgICAgICAgICBzZXQu
YWRkKHApOworICAgICAgICBpZiAoaSA9PT0gNDApIHsgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGNh
Y2hlIHRoZSByZXN1bHQuCisgICAgICAgICAgICBhcnIucHVzaCgiZCIpOworICAgICAgICB9Cisg
ICAgICAgIGFzc2VydChzZXQuc2l6ZSA9PT0gaSA+IDQwID8gNCA6IDMpOworICAgICAgICBhc3Nl
cnQoc2V0LmhhcygiYSIpKTsKKyAgICAgICAgYXNzZXJ0KHNldC5oYXMoImIiKSk7CisgICAgICAg
IGFzc2VydChzZXQuaGFzKCJjIikpOworICAgICAgICBpZiAoaSA+IDQwKQorICAgICAgICAgICAg
YXNzZXJ0KHNldC5oYXMoImQiKSk7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBj
YWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0geworICAgICAg
ICB4OiA0MAorICAgIH07CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBzMSA9IFN5
bWJvbCgpOworICAgIGxldCBzMiA9IFN5bWJvbCgpOworICAgIGxldCBhcnIgPSBbImEiLCAiYiIs
IHMxLCAiYyIsIHMyXTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yOiAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4geyBlbnVtZXJhYmxlOiB0
cnVlLCBjb25maWd1cmFibGU6IHRydWUgfQorICAgICAgICB9LAorICAgICAgICBvd25LZXlzOiBm
dW5jdGlvbih0aGVUYXJnZXQpIHsKKyAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gYXJyOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5l
dyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGxldCBwcm94eWlzaCA9IE9iamVjdC5jcmVh
dGUocHJveHksIHsKKyAgICAgICAgZDogeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6
IHRydWUgfQorICAgIH0pOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAg
ICAgICAgbGV0IHNldCA9IG5ldyBTZXQ7CisgICAgICAgIGZvciAobGV0IHAgaW4gcHJveHlpc2gp
CisgICAgICAgICAgICBzZXQuYWRkKHApOworICAgICAgICBhc3NlcnQoc2V0LnNpemUgPT09IDQp
OworICAgICAgICBhc3NlcnQoc2V0LmhhcygiYSIpKTsKKyAgICAgICAgYXNzZXJ0KHNldC5oYXMo
ImIiKSk7CisgICAgICAgIGFzc2VydChzZXQuaGFzKCJjIikpOworICAgICAgICBhc3NlcnQoc2V0
LmhhcygiZCIpKTsKKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZh
bHNlOworICAgIH0KK30KKworeworICAgIGxldCB0YXJnZXQgPSB7CisgICAgICAgIHg6IDQwCisg
ICAgfTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IHMxID0gU3ltYm9sKCk7Cisg
ICAgbGV0IHMyID0gU3ltYm9sKCk7CisgICAgbGV0IGFyciA9IFsiYSIsICJiIiwgczEsICJjIiwg
czJdOworICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3I6ICgpID0+IHsKKyAgICAgICAgICAgIHJldHVybiB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZp
Z3VyYWJsZTogdHJ1ZSB9CisgICAgICAgIH0sCisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKHRo
ZVRhcmdldCkgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biBhcnI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRh
cmdldCwgaGFuZGxlcik7CisgICAgbGV0IHByb3h5aXNoID0gT2JqZWN0LmNyZWF0ZShwcm94eSwg
eworICAgICAgICBkOiB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9Cisg
ICAgfSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQg
c2V0ID0gbmV3IFNldDsKKyAgICAgICAgZm9yIChsZXQgcCBpbiBwcm94eWlzaCkKKyAgICAgICAg
ICAgIHNldC5hZGQocCk7CisgICAgICAgIGFzc2VydChzZXQuc2l6ZSA9PT0gNCk7CisgICAgICAg
IGFzc2VydChzZXQuaGFzKCJhIikpOworICAgICAgICBhc3NlcnQoc2V0LmhhcygiYiIpKTsKKyAg
ICAgICAgYXNzZXJ0KHNldC5oYXMoImMiKSk7CisgICAgICAgIGFzc2VydChzZXQuaGFzKCJkIikp
OworICAgICAgICBhc3NlcnQoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAg
fQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272378</attachid>
            <date>2016-02-26 15:40:24 -0800</date>
            <delta_ts>2016-03-02 14:50:32 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>47343</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3MjEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDE2LTAyLTI2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBQcm94eSB0ZXN0cyBmb3IgZXhjZXB0aW9ucyB0aGF0IGRlcGVuZCBvbiBhbiBvYmplY3Qg
YmVpbmcgbm9uLWV4dGVuc2libGUgYW5kIGhhdmluZyBjb25maWd1cmFibGUgcHJvcGVydGllcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NzQ1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpcyBtb3N0bHkgYW4gaW1wbGVtZW50YXRpb24gb2YgUHJveHkuW1tPd25Qcm9wZXJ0eUtleXNd
XSAKKyAgICAgICAgd2l0aCByZXNwZWN0IHRvIHNlY3Rpb24gOS41LjExIG9mIHRoZSBFQ01BU2Ny
aXB0IHNwZWMuCisgICAgICAgIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXBy
b3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1vd25wcm9wZXJ0
eWtleXMKKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gY2hhbmdlcyBjYWxsIHNpdGVzIG9mIGdl
dE93blByb3BlcnR5TmFtZXMgYW5kCisgICAgICAgIGdldFByb3BlcnR5TmFtZXMgdG8gZXhwZWN0
IHRoYXQgYW4gZXhjZXB0aW9uIGNhbiBiZSB0aHJvd24uCisKKyAgICAgICAgKiBBUEkvSlNPYmpl
Y3RSZWYuY3BwOgorICAgICAgICAoSlNPYmplY3RDb3B5UHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rv
cjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Oml0ZXJhdG9yRW50cmllcyk6CisgICAgICAgICogcnVu
dGltZS9JbnRsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6c3VwcG9ydGVkTG9jYWxlcyk6Cisg
ICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZp
ZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6V2Fsa2VyOjp3
YWxrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0R2Vu
ZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6bWFrZUlkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpjcmVhdGVMaXN0RnJvbUFy
cmF5TGlrZSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoK
KyAgICAgICAgKEpTQzo6cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6ZGVmaW5lUHJvcGVydGllcyk6CisgICAgICAgIChKU0M6Om9i
amVjdENvbnN0cnVjdG9yU2VhbCk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJl
ZXplKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc1NlYWxlZCk6CisgICAgICAg
IChKU0M6Om9iamVjdENvbnN0cnVjdG9ySXNGcm96ZW4pOgorICAgICAgICAoSlNDOjpvd25Qcm9w
ZXJ0eUtleXMpOgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpQcm94eU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChK
U0M6OlByb3h5T2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlByb3h5T2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6
cGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6Z2V0U3Ry
dWN0dXJlUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpnZXRHZW5l
cmljUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0Ojp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlBy
b3h5T2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpjYW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51bWVyYXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICBJIHJlbmFt
ZWQgdGhlIGhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzIGJpdGZpZWxkCisgICAgICAgIHRvIGlz
UXVpY2tQcm9wZXJ0eUFjY2Vzc1ByZXZlbnRlZEZvckVudW1lcmF0aW9uLiBJIGRpZAorICAgICAg
ICB0aGlzIHJlbmFtaW5nIGJlY2F1c2UgdGhlIGZsYWcgd2FzIG9ubHkgdXNlZCBmb3IgdGhlIAor
ICAgICAgICBTdHJ1Y3R1cmU6OmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51bWVyYXRp
b24oKSBtZXRob2QuCisgICAgICAgIFRoZSBmbGFnIGlzIG5vdyBzZXQgZGlyZWN0bHkgYnkgUHJv
eHlPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgpIG1ldGhvZAorICAgICAgICBldmVuIHRob3VnaCBp
dCBkb2Vzbid0IGhhdmUgRG9udEVudW0gcHJvcGVydGllcyBvbiB0aGUgc3RydWN0dXJlLiAKKyAg
ICAgICAgKFRoZSBmbGFnIHN0aWxsIGdldHMgc2V0IHRvIHRydWUgd2hlbiB3ZSBzdG9yZSBEb250
RW51bSBwcm9wZXJ0aWVzLikKKyAgICAgICAgV2UgbWF5IHdhbnQgdG8gY29uc2lkZXIgcmUtY3Jl
YXRpbmcgdGhpcyBmbGFnIGFuZCBhZGRpbmcgYW5vdGhlcgorICAgICAgICBmbGFnIGp1c3QgZm9y
IFByb3h5T2JqZWN0IGluIHRoZSBmdXR1cmUsIGJ1dCBiZWNhdXNlIHRoaXMgZmxhZyB3YXMKKyAg
ICAgICAgb25seSB1c2VkIGluIG9uZSBwbGFjZSBJIGRlY2lkZWQgdG8ganVzdCByZW5hbWUgaXQg
aW5zdGVhZCBvZgorICAgICAgICBjcmVhdGluZyB0d28gZGlzdGluY3QgZmxhZ3MuCisKKyAgICAg
ICAgKiB0ZXN0cy9zdHJlc3MvcHJveHktb3duLWtleXMuanM6IEFkZGVkLgorICAgICAgICAoYXNz
ZXJ0KToKKyAgICAgICAgKHRocm93Lm5ldy5FcnJvci5sZXQuaGFuZGxlci5vd25LZXlzKToKKyAg
ICAgICAgKHRocm93Lm5ldy5FcnJvcik6CisgICAgICAgIChhc3NlcnQubGV0LmhhbmRsZXIuZ2V0
IG93bktleXMpOgorICAgICAgICAoYXNzZXJ0LmxldC5oYW5kbGVyLm93bktleXMpOgorICAgICAg
ICAobGV0LmhhbmRsZXIub3duS2V5cyk6CisgICAgICAgIChpLmNhdGNoKToKKyAgICAgICAgKHNo
YWxsb3dFcSk6CisgICAgICAgIChsZXQuaGFuZGxlci5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ip
OgorICAgICAgICAoaS5zZXQgYXNzZXJ0KToKKyAgICAgICAgKHNldCBhZGQpOgorICAgICAgICAo
c2V0IGFzc2VydCk6CisgICAgICAgIChzZXQgaWYpOgorCiAyMDE2LTAyLTI2ICBKb3NlcGggUGVj
b3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVkdWNlIGRpcmVjdCBjYWxs
ZXJzIG9mIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lv
biAxOTcxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjI0LDcgKzYyNCw3IEBAIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYg
SlNPYmplY3RDb3B5UHJvcGUKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7
CiAgICAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBwcm9wZXJ0eU5hbWVzID0gbmV3IE9wYXF1ZUpT
UHJvcGVydHlOYW1lQXJyYXkodm0pOwogICAgIFByb3BlcnR5TmFtZUFycmF5IGFycmF5KHZtLCBQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0UHJvcGVydHlOYW1lcyhqc09iamVjdCwgZXhlYywgYXJyYXksIEVudW1lcmF0aW9uTW9kZSgp
KTsKKyAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhqc09iamVj
dCwgZXhlYywgYXJyYXksIEVudW1lcmF0aW9uTW9kZSgpKTsgLy8gRklYTUU6IFRoaXMgdGhyb3dz
IGJ1dCBubyBjYWxsZXIgZXhwZWN0cyBpdCB0by4KIAogICAgIHNpemVfdCBzaXplID0gYXJyYXku
c2l6ZSgpOwogICAgIHByb3BlcnR5TmFtZXMtPmFycmF5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
c2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRT
Y3JpcHRIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkocmV2aXNpb24gMTk3MTc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0OCw5ICs0NDgsMTEgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9z
dDo6aXRlcmF0b3JFbgogICAgICAgICBpdGVyYXRvciA9IHNldEl0ZXJhdG9yLT5jbG9uZShleGVj
KTsKICAgICBlbHNlIGlmIChKU1N0cmluZ0l0ZXJhdG9yKiBzdHJpbmdJdGVyYXRvciA9IGpzRHlu
YW1pY0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+KHZhbHVlKSkKICAgICAgICAgaXRlcmF0b3IgPSBz
dHJpbmdJdGVyYXRvci0+Y2xvbmUoZXhlYyk7Ci0gICAgZWxzZSBpZiAoSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvciogcHJvcGVydHlOYW1lSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IqPih2YWx1ZSkpCisgICAgZWxzZSBpZiAoSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ciogcHJvcGVydHlOYW1lSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTUHJvcGVydHlOYW1lSXRl
cmF0b3IqPih2YWx1ZSkpIHsKICAgICAgICAgaXRlcmF0b3IgPSBwcm9wZXJ0eU5hbWVJdGVyYXRv
ci0+Y2xvbmUoZXhlYyk7Ci0gICAgZWxzZQorICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICB9IGVsc2UK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICB1bnNpZ25lZCBudW1iZXJUb0Zl
dGNoID0gNTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxOTcxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM5LDYgKzkzOSw4IEBAIEpTVmFs
dWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmIHN0YXQKICAgICAvLyA3LiBMZXQga2V5cyBi
ZSBzdWJzZXQuW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgogICAgIFByb3BlcnR5TmFtZUFycmF5IGtl
eXMoJnN0YXRlLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICBzdXBwb3J0ZWRMb2Nh
bGVzLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHN1cHBvcnRlZExvY2FsZXMsICZzdGF0ZSwga2V5cywg
RW51bWVyYXRpb25Nb2RlKCkpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsK
ICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShmYWxzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMTk3MTc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzOSw2ICs0MzksOCBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQ
cm9wCiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBvYmplY3RQcm9wZXJ0eU5hbWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwog
ICAgICAgICAgICAgICAgIG1fb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKG1fb2JqZWN0LmdldCgpLCBleGVjLCBvYmplY3RQcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAg
IG1fcHJvcGVydHlOYW1lcyA9IG9iamVjdFByb3BlcnR5TmFtZXMucmVsZWFzZURhdGEoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG1fc2l6ZSA9IG1fcHJvcGVydHlOYW1lcy0+cHJvcGVy
dHlOYW1lVmVjdG9yKCkuc2l6ZSgpOwpAQCAtNjU2LDYgKzY1OCw4IEBAIE5FVkVSX0lOTElORSBK
U1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmFw
cGVuZCgwKTsKICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5h
bWVBcnJheShtX2V4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpKTsKICAgICAgICAgICAg
ICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBt
X2V4ZWMsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBv
YmplY3RTdGFydFZpc2l0TWVtYmVyOgogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxOTcx
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MjQsNiArMTUyNCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJpdmEKIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVj
LT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChvYmplY3QtPnByb3RvdHlwZSgpLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNTM2LDYgKzE1MzgsOCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBw
cm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUs
IGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBKU1ZhbHVlIG5l
eHRQcm90byA9IHByb3RvdHlwZS0+cHJvdG90eXBlKCk7CiAgICAgICAgIGlmIChuZXh0UHJvdG8u
aXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTI5NDIsNiArMjk0Niw4IEBAIHZvaWQg
SlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEoKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKG1vZGUsIEpTT2Jq
ZWN0UHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm47CiAKICAgICBpZiAob2JqZWN0LT5wcm90b3R5
cGUoKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjk1Myw2ICsyOTU5LDggQEAgdm9p
ZCBKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPnByb3RvdHlwZSgpOwog
ICAgICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE5NzE3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKICNp
bmNsdWRlICJQdXREaXJlY3RJbmRleE1vZGUuaCIKICNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3Qu
aCIKKyNpbmNsdWRlICJSdW50aW1lVHlwZS5oIgogCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAj
aW5jbHVkZSAiVk0uaCIKQEAgLTE1MDcsNiArMTUwOCw0MCBAQCBBTFdBWVNfSU5MSU5FIElkZW50
aWZpZXIgbWFrZUlkZW50aWZpZXIoCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKKy8vIFNlY3Rpb24g
Ny4zLjE3IG9mIHRoZSBzcGVjLiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBBZGRGdW5jdGlvbj4gLy8g
QWRkIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGEgdHlwZSBsaWtlOiAoSlNWYWx1ZSwgUnVudGltZVR5
cGUpIC0+IGJvb2wKK3ZvaWQgY3JlYXRlTGlzdEZyb21BcnJheUxpa2UoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGFycmF5TGlrZVZhbHVlLCBSdW50aW1lVHlwZU1hc2sgbGVnYWxUeXBlc0ZpbHRl
ciwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIEFkZEZ1bmN0aW9uIGFkZEZ1bmN0aW9uKQor
eworICAgIFZlY3RvcjxKU1ZhbHVlPiByZXN1bHQ7CisgICAgSlNWYWx1ZSBsZW5ndGhQcm9wZXJ0
eSA9IGFycmF5TGlrZVZhbHVlLmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47Cisg
ICAgZG91YmxlIGxlbmd0aEFzRG91YmxlID0gbGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoZXhlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47CisgICAgUkVM
RUFTRV9BU1NFUlQobGVuZ3RoQXNEb3VibGUgPj0gMC4wICYmIGxlbmd0aEFzRG91YmxlID09IHN0
ZDo6dHJ1bmMobGVuZ3RoQXNEb3VibGUpKTsKKyAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4obGVuZ3RoQXNEb3VibGUpOworICAgIGZvciAodWludDY0X3QgaW5kZXgg
PSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICBKU1ZhbHVlIG5leHQ7Cisg
ICAgICAgIGlmIChMSUtFTFkoaW5kZXggPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKSkKKyAgICAgICAgICAgIG5leHQgPSBhcnJheUxpa2VWYWx1ZS5nZXQoZXhlYywgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5l
eHQgPSBhcnJheUxpa2VWYWx1ZS5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBzdGF0
aWNfY2FzdDxkb3VibGU+KGluZGV4KSkpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUnVudGltZVR5cGUgdHlwZSA9IHJ1
bnRpbWVUeXBlRm9yVmFsdWUobmV4dCk7CisgICAgICAgIGlmICghKHR5cGUgJiBsZWdhbFR5cGVz
RmlsdGVyKSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdl
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZXhpdEVh
cmx5ID0gYWRkRnVuY3Rpb24obmV4dCwgdHlwZSk7CisgICAgICAgIGlmIChleGl0RWFybHkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCiBib29sIHZhbGlkYXRlQW5kQXBwbHlQcm9w
ZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGJvb2wg
aXNFeHRlbnNpYmxlLAogICAgIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
Ym9vbCBpc0N1cnJlbnREZWZpbmVkLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGN1cnJlbnQs
IGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24g
MTk3MTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNywxNyArMTE3LDIxIEBAIGlubGluZSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnQKIAogICAgIFByb3BlcnR5TmFtZUFycmF5
IHByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAKLSAgICBp
ZiAoc3RydWN0dXJlLT5jYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSgpICYmIGluZGV4ZWRMZW5n
dGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkgeworICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkFj
Y2Vzc1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51bWVyYXRpb24oKSAmJiBpbmRleGVkTGVuZ3RoID09
IGJhc2UtPmdldEFycmF5TGVuZ3RoKCkpIHsKICAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0p
LT5nZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7
CiAKICAgICAgICAgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMuc2l6
ZSgpOwogCiAgICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0R2VuZXJpY1Byb3BlcnR5
TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAg
ICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKICAgICB9IGVsc2UgewogICAgICAg
ICAvLyBHZW5lcmljIHByb3BlcnR5IG5hbWVzIHZlY3RvciBjb250YWlucyBhbGwgaW5kZXhlZCBw
cm9wZXJ0eSBuYW1lcy4KICAgICAgICAgLy8gU28gZGlzYWJsZSBpbmRleGVkIHByb3BlcnR5IGVu
dW1lcmF0aW9uIHBoYXNlIGJ5IHNldHRpbmcgfGluZGV4ZWRMZW5ndGh8IHRvIDAuCiAgICAgICAg
IGluZGV4ZWRMZW5ndGggPSAwOwogICAgICAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldFBy
b3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkp
OworICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgQVNTRVJUKHByb3BlcnR5TmFtZXMuc2l6
ZSgpIDwgVUlOVDMyX01BWCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTk3MTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDEwIEBAIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3IqIEpTUHJvcGVydHlOYW1lSXQKIAogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBpdGVyYXRlZE9iamVjdCkKIHsKLSAgICByZXR1cm4gSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgaXRlcmF0ZWRPYmplY3QsIHBy
b3BlcnR5TmFtZUVudW1lcmF0b3IoZXhlYywgaXRlcmF0ZWRPYmplY3QpKTsKKyAgICBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGV4
ZWMsIGl0ZXJhdGVkT2JqZWN0KTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgaXRlcmF0ZWRPYmplY3QsIGVudW1lcmF0
b3IpOwogfQogCiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3Qq
IGl0ZXJhdGVkT2JqZWN0LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAxOTcxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNiw2ICs0MjYs
OCBAQCBzdGF0aWMgSlNWYWx1ZSBkZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0CiB7CiAgICAgUHJv
cGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzQW5kU3ltYm9scyk7CiAgICAgYXNPYmplY3QocHJvcGVydGllcyktPm1ldGhvZFRhYmxlKGV4
ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFzT2JqZWN0KHByb3BlcnRpZXMpLCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6
RXhjbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
ICAgIHJldHVybiBqc051bGwoKTsKICAgICBzaXplX3QgbnVtUHJvcGVydGllcyA9IHByb3BlcnR5
TmFtZXMuc2l6ZSgpOwogICAgIFZlY3RvcjxQcm9wZXJ0eURlc2NyaXB0b3I+IGRlc2NyaXB0b3Jz
OwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIG1hcmtCdWZmZXI7CkBAIC00OTYsNiArNDk4LDgg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIC8vIDIuIEZv
ciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAgICBQcm9wZXJ0eU5hbWVB
cnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xz
KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJv
cGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiAgICAgUHJvcGVy
dHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAgICAg
Zm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMu
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSA9ICppdGVyOwpAQCAtNTMwLDYgKzUzNCw4IEBAIEpTT2JqZWN0KiBvYmplY3RDb25z
dHJ1Y3RvckZyZWV6ZShFeGVjU3QKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVy
dHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7CiAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3Bl
cnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7
CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJu
IG9iamVjdDsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJv
cGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRv
ciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAg
ICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gKml0ZXI7CkBAIC01OTAsNiArNTk2LDggQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIC8vIDIuIEZvciBl
YWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzKTsK
ICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgUHJv
cGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAg
ICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRp
ZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSA9ICppdGVyOwpAQCAtNjIzLDYgKzYzMSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJv
cGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVj
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7CiAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHBy
b3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRl
KSk7CisgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlO
YW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSAqaXRl
cjsKQEAgLTY2MSw2ICs2NzEsOCBAQCBKU0FycmF5KiBvd25Qcm9wZXJ0eUtleXMoRXhlY1N0YXRl
KiBleGVjCiB7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBwcm9wZXJ0
eU5hbWVNb2RlKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKGRv
bnRFbnVtUHJvcGVydGllc01vZGUpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSlNBcnJheSoga2V5cyA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYywgMCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDE5NzE3OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk1LDgg
KzI5NSw2IEBAIGJvb2wgUHJveHlPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW4KIHsKICAg
ICBQcm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iamVjdCk7
CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlO
YW1lKTsgCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5U2xvdENvbW1vbihleGVj
LCBpZGVudC5pbXBsKCksIHNsb3QpOwogfQogCkBAIC01MjksNyArNTI3LDcgQEAgYm9vbCBQcm94
eU9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKgogewogICAgIFByb3h5T2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY2VsbCk7CiAgICAgYXV0byBkZWZhdWx0RGVs
ZXRlID0gWyZdICgpIC0+IGJvb2wgewotICAgICAgICBKU09iamVjdCogdGFyZ2V0ID0ganNDYXN0
PEpTT2JqZWN0Kj4odGhpc09iamVjdC0+dGFyZ2V0KCkpOworICAgICAgICBKU09iamVjdCogdGFy
Z2V0ID0gdGhpc09iamVjdC0+dGFyZ2V0KCk7CiAgICAgICAgIHJldHVybiB0YXJnZXQtPm1ldGhv
ZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7CiAgICAgfTsKICAgICByZXR1cm4gdGhpc09iamVjdC0+cGVyZm9ybURlbGV0ZShleGVj
LCBwcm9wZXJ0eU5hbWUsIGRlZmF1bHREZWxldGUpOwpAQCAtNTM5LDE1ICs1MzcsMTcxIEBAIGJv
b2wgUHJveHlPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCgKIHsKICAgICBQcm94eU9iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KGNlbGwpOwogICAgIElkZW50aWZp
ZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSk7IAotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8g
ZGVmYXVsdERlbGV0ZSA9IFsmXSAoKSAtPiBib29sIHsKLSAgICAgICAgSlNPYmplY3QqIHRhcmdl
dCA9IGpzQ2FzdDxKU09iamVjdCo+KHRoaXNPYmplY3QtPnRhcmdldCgpKTsKKyAgICAgICAgSlNP
YmplY3QqIHRhcmdldCA9IHRoaXNPYmplY3QtPnRhcmdldCgpOwogICAgICAgICByZXR1cm4gdGFy
Z2V0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRhcmdl
dCwgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICB9OwogICAgIHJldHVybiB0aGlzT2JqZWN0LT5w
ZXJmb3JtRGVsZXRlKGV4ZWMsIGlkZW50LmltcGwoKSwgZGVmYXVsdERlbGV0ZSk7CiB9CiAKK3Zv
aWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHRyYXBSZXN1bHQsIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJh
dGlvbk1vZGUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU1ZhbHVlIGhhbmRs
ZXJWYWx1ZSA9IHRoaXMtPmhhbmRsZXIoKTsKKyAgICBpZiAoaGFuZGxlclZhbHVlLmlzTnVsbCgp
KSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJQcm94eSAn
aGFuZGxlcicgaXMgbnVsbC4gSXQgc2hvdWxkIGJlIGFuIE9iamVjdC4iKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBKU09iamVjdCogaGFuZGxlciA9IGpzQ2FzdDxKU09iamVjdCo+
KGhhbmRsZXJWYWx1ZSk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2Fs
bFR5cGU7CisgICAgSlNWYWx1ZSBvd25LZXlzTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4
ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJvd25LZXlzIiksIEFT
Q0lJTGl0ZXJhbCgiJ293bktleXMnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3Vs
ZCBiZSBjYWxsYWJsZS4iKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm47CisgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOworICAgIGlm
IChvd25LZXlzTWV0aG9kLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgdGFyZ2V0LT5tZXRob2RU
YWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQsIGV4ZWMsIHRyYXBS
ZXN1bHQsIGVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJn
ZXQpOworICAgIEpTVmFsdWUgYXJyYXlMaWtlT2JqZWN0ID0gY2FsbChleGVjLCBvd25LZXlzTWV0
aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBQcm9wZXJ0eU5hbWVN
b2RlIHByb3BlcnR5TmFtZU1vZGUgPSB0cmFwUmVzdWx0Lm1vZGUoKTsKKyAgICBSdW50aW1lVHlw
ZU1hc2sgcmVzdWx0RmlsdGVyID0gMDsKKyAgICBzd2l0Y2ggKHByb3BlcnR5TmFtZU1vZGUpIHsK
KyAgICBjYXNlIFByb3BlcnR5TmFtZU1vZGU6OlN5bWJvbHM6CisgICAgICAgIHJlc3VsdEZpbHRl
ciA9IFR5cGVTeW1ib2w7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5nczoKKyAgICAgICAgcmVzdWx0RmlsdGVyID0gVHlwZVN0cmluZzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9sczoKKyAg
ICAgICAgcmVzdWx0RmlsdGVyID0gVHlwZVN5bWJvbCB8IFR5cGVTdHJpbmc7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBBU1NFUlQocmVzdWx0RmlsdGVyKTsKKyAgICBSdW50aW1lVHlwZU1h
c2sgZG9udFRocm93QW5FeGNlcHRpb25UeXBlRmlsdGVyID0gVHlwZVN0cmluZyB8IFR5cGVTeW1i
b2w7CisgICAgSGFzaE1hcDxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkPiB1bmNoZWNrZWRS
ZXN1bHRLZXlzOworICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IDA7CisKKyAgICBhdXRvIGFkZFBy
b3BOYW1lID0gWyZdIChKU1ZhbHVlIHZhbHVlLCBSdW50aW1lVHlwZSB0eXBlKSAtPiBib29sIHsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZG9FeGl0RWFybHkgPSB0cnVlOworICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBkb250RXhpdEVhcmx5ID0gZmFsc2U7CisKKyAgICAgICAgaWYgKCEo
dHlwZSAmIHJlc3VsdEZpbHRlcikpCisgICAgICAgICAgICByZXR1cm4gZG9udEV4aXRFYXJseTsK
KworICAgICAgICBJZGVudGlmaWVyIGlkZW50ID0gdmFsdWUudG9Qcm9wZXJ0eUtleShleGVjKTsK
KyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGRv
RXhpdEVhcmx5OworCisgICAgICAgICsrdW5jaGVja2VkUmVzdWx0S2V5cy5hZGQoaWRlbnQuaW1w
bCgpLCAwKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICsrdG90YWxTaXplOworCisgICAgICAg
IHRyYXBSZXN1bHQuYWRkKGlkZW50LmltcGwoKSk7CisKKyAgICAgICAgcmV0dXJuIGRvbnRFeGl0
RWFybHk7CisgICAgfTsKKworICAgIGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKGV4ZWMsIGFycmF5
TGlrZU9iamVjdCwgZG9udFRocm93QW5FeGNlcHRpb25UeXBlRmlsdGVyLCBBU0NJSUxpdGVyYWwo
IlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kIG11c3QgcmV0dXJuIGEgYXJyYXktbGlr
ZSBvYmplY3QgY29udGFpbmluZyBvbmx5IFN0cmluZ3MgYW5kIFN5bWJvbHMuIiksIGFkZFByb3BO
YW1lKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGJvb2wgdGFyZ2V0SXNFeGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZSgpOyAvLyBO
b3RlOiB3ZSBkbyB0aGlzIGhlcmUgYmVjYXVzZSBpbiB0aGUgZnV0dXJlIHRoaXMgaXMgdXNlci1v
YnNlcnZhYmxlLgorCisgICAgUHJvcGVydHlOYW1lQXJyYXkgdGFyZ2V0S2V5cygmdm0sIHByb3Bl
cnR5TmFtZU1vZGUpOworICAgIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKHRhcmdldCwgZXhlYywgdGFyZ2V0S2V5cywgZW51bWVyYXRpb25Nb2RlKTsKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8VW5p
cXVlZFN0cmluZ0ltcGwqPiB0YXJnZXRDb25maWd1cmFibGVLZXlzOworICAgIFZlY3RvcjxVbmlx
dWVkU3RyaW5nSW1wbCo+IHRhcmdldE5vbkNvbmZpZ3VyYWJsZUtleXM7CisgICAgZm9yIChjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA6IHRhcmdldEtleXMpIHsKKyAgICAgICAgUHJvcGVydHlEZXNj
cmlwdG9yIGRlc2NyaXB0b3I7CisgICAgICAgIGJvb2wgaXNQcm9wZXJ0eURlZmluZWQgPSB0YXJn
ZXQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBpZGVudC5pbXBsKCksIGRlc2NyaXB0
b3IpOyAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAoaXNQcm9wZXJ0eURlZmluZWQgJiYgIWRlc2NyaXB0b3IuY29uZmln
dXJhYmxlKCkpCisgICAgICAgICAgICB0YXJnZXROb25Db25maWd1cmFibGVLZXlzLmFwcGVuZChp
ZGVudC5pbXBsKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0YXJnZXRDb25maWd1cmFi
bGVLZXlzLmFwcGVuZChpZGVudC5pbXBsKCkpOworICAgIH0KKworICAgIGF1dG8gcmVtb3ZlSWZD
b250YWluZWRJblVuY2hlY2tlZFJlc3VsdEtleXMgPSBbJl0gKFVuaXF1ZWRTdHJpbmdJbXBsKiBp
bXBsKSAtPiBib29sIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNDb250YWluZWRJbiA9
IHRydWU7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzTm90Q29udGFpbmVkSW4gPSBmYWxz
ZTsKKworICAgICAgICBhdXRvIGl0ZXIgPSB1bmNoZWNrZWRSZXN1bHRLZXlzLmZpbmQoaW1wbCk7
CisgICAgICAgIGlmIChpdGVyID09IHVuY2hlY2tlZFJlc3VsdEtleXMuZW5kKCkpCisgICAgICAg
ICAgICByZXR1cm4gaXNOb3RDb250YWluZWRJbjsKKworICAgICAgICB1bnNpZ25lZCYgY291bnQg
PSBpdGVyLT52YWx1ZTsKKyAgICAgICAgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgICByZXR1
cm4gaXNOb3RDb250YWluZWRJbjsKKworICAgICAgICAtLWNvdW50OworICAgICAgICAtLXRvdGFs
U2l6ZTsKKyAgICAgICAgcmV0dXJuIGlzQ29udGFpbmVkSW47CisgICAgfTsKKworICAgIGZvciAo
VW5pcXVlZFN0cmluZ0ltcGwqIGltcGwgOiB0YXJnZXROb25Db25maWd1cmFibGVLZXlzKSB7Cisg
ICAgICAgIGJvb2wgY29udGFpbnMgPSByZW1vdmVJZkNvbnRhaW5lZEluVW5jaGVja2VkUmVzdWx0
S2V5cyhpbXBsKTsKKyAgICAgICAgaWYgKCFjb250YWlucykgeworICAgICAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJQcm94eSBvYmplY3QncyAndGFyZ2V0JyBoYXMg
dGhlIG5vbi1jb25maWd1cmFibGUgcHJvcGVydHkgJyIsIFN0cmluZyhpbXBsKSwgIicgdGhhdCB3
YXMgbm90IGluIHRoZSByZXN1bHQgZnJvbSB0aGUgJ293bktleXMnIHRyYXAuIikpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRhcmdldElzRXhlbnNp
YmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBs
IDogdGFyZ2V0Q29uZmlndXJhYmxlS2V5cykgeworICAgICAgICBib29sIGNvbnRhaW5zID0gcmVt
b3ZlSWZDb250YWluZWRJblVuY2hlY2tlZFJlc3VsdEtleXMoaW1wbCk7CisgICAgICAgIGlmICgh
Y29udGFpbnMpIHsKKyAgICAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgbWFrZVN0cmlu
ZygiUHJveHkgb2JqZWN0J3Mgbm9uLWV4dGVuc2libGUgJ3RhcmdldCcgaGFzIGNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eSAnIiwgU3RyaW5nKGltcGwpLCAiJyB0aGF0IHdhcyBub3QgaW4gdGhlIHJlc3Vs
dCBmcm9tIHRoZSAnb3duS2V5cycgdHJhcC4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdW5zaWduZWQgc3VtID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIGtleUNvdW50IDogdW5jaGVja2VkUmVzdWx0S2V5cy52YWx1ZXMoKSkK
KyAgICAgICAgc3VtICs9IGtleUNvdW50OworICAgIEFTU0VSVChzdW0gPT0gdG90YWxTaXplKTsK
KyNlbmRpZgorCisgICAgaWYgKHRvdGFsU2l6ZSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUHJveHkgaGFuZGxlcidzICdvd25LZXlzJyBtZXRob2QgcmV0
dXJuZWQgYSBrZXkgdGhhdCB3YXMgbm90IHByZXNlbnQgaW4gaXRzIHRhcmdldCBvciBpdCByZXR1
cm5lZCBkdXBsaWNhdGUga2V5cy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3Zv
aWQgUHJveHlPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJyYXksIEVudW1l
cmF0aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUpCit7CisgICAgUHJveHlPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmplY3QpOworICAgIHRoaXNPYmplY3QtPnBlcmZv
cm1HZXRPd25Qcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFtZUFycmF5LCBlbnVtZXJhdGlv
bk1vZGUpOworfQorCit2b2lkIFByb3h5T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFBy
b3h5T2JqZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAgLy8gV2Ugc2hv
dWxkIGFsd2F5cyBnbyBkb3duIHRoZSBnZXRPd25Qcm9wZXJ0eU5hbWVzIHBhdGguCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQcm94eU9iamVjdDo6Z2V0R2Vu
ZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCiB2b2lkIFByb3h5T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8UHJveHlPYmplY3QqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJveHlPYmplY3QuaAkocmV2aXNpb24gMTk3MTc4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgorI2luY2x1ZGUgIlJ1bnRpbWVUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNSw3
ICszNiw5IEBAIGNsYXNzIFByb3h5T2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmoKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAotICAgIGNvbnN0IHN0YXRp
YyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhIHwgSW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsK
KyAgICAvLyBXZSBsaWUgYW4gc2F5IHdlIG92ZXJyaWRlIGdldFByb3BlcnR5TmFtZXMoKSBiZWNh
dXNlIGl0IHByZXZlbnRzCisgICAgLy8gcHJvcGVydHkgbmFtZSBlbnVtZXJhdGlvbiBjYWNoaW5n
LgorICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgVHlwZU9mU2hvdWxkQ2Fs
bEdldENhbGxEYXRhIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXM7CiAKICAgICBzdGF0
aWMgUHJveHlPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU1ZhbHVlIHRhcmdldCwgSlNWYWx1ZSBoYW5kbGVyKQogICAgIHsKQEAgLTQ3LDcgKzUw
LDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oUHJveHlPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSwgTm9uQXJyYXkgfCBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyk7CisgICAgICAgIFN0cnVj
dHVyZSogcmVzdWx0ID0gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhQcm94eU9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBO
b25BcnJheSB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRJ
c1F1aWNrUHJvcGVydHlBY2Nlc3NQcmV2ZW50ZWRGb3JFbnVtZXJhdGlvbih0cnVlKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdC0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JF
bnVtZXJhdGlvbigpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdC0+Y2FuQ2FjaGVQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CkBAIC02OSw2ICs3NiwxMCBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3Ry
dWN0RGF0YSYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0
aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRHZW5lcmljUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CiAKICAgICBib29sIGdldE93blByb3BlcnR5U2xvdENvbW1vbihFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpAQCAtNzgsNiArODksNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgcGVyZm9ybURlbGV0ZShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIERl
ZmF1bHREZWxldGVGdW5jdGlvbik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBlcmZvcm1EZWZh
dWx0UHV0RnVuY3Rpb24+CiAgICAgdm9pZCBwZXJmb3JtUHV0KEV4ZWNTdGF0ZSosIEpTVmFsdWUg
cHV0VmFsdWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIFBlcmZvcm1EZWZhdWx0
UHV0RnVuY3Rpb24pOworICAgIHZvaWQgcGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgV3JpdGVC
YXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldDsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9o
YW5kbGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCShyZXZpc2lvbiAxOTcxNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAgU3RydWN0dXJl
OjpTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iagogICAgIHNldEhhc0dldHRlclNldHRlclBy
b3BlcnRpZXMoY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygp
KTsKICAgICBzZXRIYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKGZhbHNlKTsKICAgICBz
ZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKGNsYXNz
SW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSk7Ci0gICAgc2V0SGFz
Tm9uRW51bWVyYWJsZVByb3BlcnRpZXMoZmFsc2UpOworICAgIHNldElzUXVpY2tQcm9wZXJ0eUFj
Y2Vzc1ByZXZlbnRlZEZvckVudW1lcmF0aW9uKGZhbHNlKTsKICAgICBzZXRBdHRyaWJ1dGVzSW5Q
cmV2aW91cygwKTsKICAgICBzZXRQcmV2ZW50RXh0ZW5zaW9ucyhmYWxzZSk7CiAgICAgc2V0RGlk
VHJhbnNpdGlvbihmYWxzZSk7CkBAIC0yMzMsNyArMjMzLDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1
cmUoVk0mIHZtKQogICAgIHNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXMobV9jbGFzc0luZm8t
Pmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwogICAgIHNldEhhc0N1c3Rv
bUdldHRlclNldHRlclByb3BlcnRpZXMoZmFsc2UpOwogICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8obV9jbGFzc0luZm8tPmhhc1N0YXRpY1Nl
dHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkpOwotICAgIHNldEhhc05vbkVudW1lcmFibGVQcm9w
ZXJ0aWVzKGZhbHNlKTsKKyAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NQcmV2ZW50ZWRGb3JF
bnVtZXJhdGlvbihmYWxzZSk7CiAgICAgc2V0QXR0cmlidXRlc0luUHJldmlvdXMoMCk7CiAgICAg
c2V0UHJldmVudEV4dGVuc2lvbnMoZmFsc2UpOwogICAgIHNldERpZFRyYW5zaXRpb24oZmFsc2Up
OwpAQCAtMjY0LDcgKzI2NCw3IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0
dXJlKiAKICAgICBzZXRIYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKHByZXZpb3VzLT5oYXNHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpOwogICAgIHNldEhhc0N1c3RvbUdldHRlclNldHRlclByb3Bl
cnRpZXMocHJldmlvdXMtPmhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMoKSk7CiAgICAg
c2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhwcmV2
aW91cy0+aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygp
KTsKLSAgICBzZXRIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyhwcmV2aW91cy0+aGFzTm9uRW51
bWVyYWJsZVByb3BlcnRpZXMoKSk7CisgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzUHJldmVu
dGVkRm9yRW51bWVyYXRpb24ocHJldmlvdXMtPmlzUXVpY2tQcm9wZXJ0eUFjY2Vzc1ByZXZlbnRl
ZEZvckVudW1lcmF0aW9uKCkpOwogICAgIHNldEF0dHJpYnV0ZXNJblByZXZpb3VzKDApOwogICAg
IHNldFByZXZlbnRFeHRlbnNpb25zKHByZXZpb3VzLT5wcmV2ZW50RXh0ZW5zaW9ucygpKTsKICAg
ICBzZXREaWRUcmFuc2l0aW9uKHRydWUpOwpAQCAtOTg2LDcgKzk4Niw3IEBAIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHIKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICBpZiAoYXR0cmlidXRlcyAmIERvbnRFbnVtKQotICAgICAgICBzZXRIYXNOb25FbnVtZXJh
YmxlUHJvcGVydGllcyh0cnVlKTsKKyAgICAgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzUHJl
dmVudGVkRm9yRW51bWVyYXRpb24odHJ1ZSk7CiAKICAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFt
ZS51aWQoKTsKIApAQCAtMTA0NCw3ICsxMDQ0LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmdldFByb3Bl
cnR5TmFtZXNGcm9tU3RydQogCiAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJv
cGVydHlUYWJsZSgpLT5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0
ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAg
ICAgICAgQVNTRVJUKGhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKCkgfHwgIShpdGVyLT5hdHRy
aWJ1dGVzICYgRG9udEVudW0pKTsKKyAgICAgICAgQVNTRVJUKGlzUXVpY2tQcm9wZXJ0eUFjY2Vz
c1ByZXZlbnRlZEZvckVudW1lcmF0aW9uKCkgfHwgIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVu
dW0pKTsKICAgICAgICAgaWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSB8fCBtb2Rl
LmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkgewogICAgICAgICAgICAgaWYgKGl0ZXItPmtl
eS0+aXNTeW1ib2woKSAmJiAhcHJvcGVydHlOYW1lcy5pbmNsdWRlU3ltYm9sUHJvcGVydGllcygp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTMyNCw3ICsxMzI0LDcgQEAgdm9pZCBT
dHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3koKQogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKCkp
IHsKKyAgICBpZiAoIWlzUXVpY2tQcm9wZXJ0eUFjY2Vzc1ByZXZlbnRlZEZvckVudW1lcmF0aW9u
KCkpIHsKICAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJs
ZSgpLT5lbmQoKTsKICAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0g
cHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKTsKQEAgLTEzOTQsOSAr
MTM5NCw5IEBAIGJvb2wgU3RydWN0dXJlOjpjYW5DYWNoZVByb3BlcnR5TmFtZUVudW0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KICAgICAKLWJvb2wgU3RydWN0dXJlOjpjYW5BY2Nlc3NQcm9wZXJ0aWVz
UXVpY2tseSgpIGNvbnN0Citib29sIFN0cnVjdHVyZTo6Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNr
bHlGb3JFbnVtZXJhdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc05vbkVudW1lcmFibGVQcm9w
ZXJ0aWVzKCkpCisgICAgaWYgKGlzUXVpY2tQcm9wZXJ0eUFjY2Vzc1ByZXZlbnRlZEZvckVudW1l
cmF0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoaGFzR2V0dGVyU2V0dGVy
UHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTk3MTc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
Nyw3ICszNzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDYWNoZWRQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CiAgICAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3Q7CiAgICAg
Ym9vbCBjYW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsKLSAgICBib29sIGNh
bkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5KCkgY29uc3Q7CisgICAgYm9vbCBjYW5BY2Nlc3NQcm9w
ZXJ0aWVzUXVpY2tseUZvckVudW1lcmF0aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIGdldFByb3Bl
cnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOwogCkBAIC01NzcsNyArNTc3LDcgQEAgcHVibGljOgogICAgIERFRklORV9CSVRGSUVM
RChib29sLCBpc1Bpbm5lZFByb3BlcnR5VGFibGUsIElzUGlubmVkUHJvcGVydHlUYWJsZSwgMSwg
Mik7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMs
IEhhc0dldHRlclNldHRlclByb3BlcnRpZXMsIDEsIDMpOwogICAgIERFRklORV9CSVRGSUVMRChi
b29sLCBoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvLCBI
YXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvLCAxLCA0KTsK
LSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMsIEhh
c05vbkVudW1lcmFibGVQcm9wZXJ0aWVzLCAxLCA1KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9v
bCwgaXNRdWlja1Byb3BlcnR5QWNjZXNzUHJldmVudGVkRm9yRW51bWVyYXRpb24sIElzUXVpY2tQ
cm9wZXJ0eUFjY2Vzc1ByZXZlbnRlZEZvckVudW1lcmF0aW9uLCAxLCA1KTsKICAgICBERUZJTkVf
QklURklFTEQodW5zaWduZWQsIGF0dHJpYnV0ZXNJblByZXZpb3VzLCBBdHRyaWJ1dGVzSW5QcmV2
aW91cywgMTQsIDYpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBwcmV2ZW50RXh0ZW5zaW9u
cywgUHJldmVudEV4dGVuc2lvbnMsIDEsIDIwKTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
ZGlkVHJhbnNpdGlvbiwgRGlkVHJhbnNpdGlvbiwgMSwgMjEpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1vd24ta2V5cy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LW93bi1rZXlzLmpzCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1vd24t
a2V5cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2MCBAQAorZnVuY3Rpb24gYXNzZXJ0
KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlv
bi4iKTsKK30KKworeworICAgIGxldCBlcnJvciA9IG51bGw7CisgICAgbGV0IHRhcmdldCA9IHsg
fTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgb3duS2V5czogZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcjsKKyAgICAgICAgICAgIHRocm93IGVycm9yOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhh
bmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0
IHRocmV3ID0gZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBPYmplY3Qua2V5cyhw
cm94eSk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgdGhyZXcgPSB0cnVlOwor
ICAgICAgICAgICAgYXNzZXJ0KGUgPT09IGVycm9yKTsKKyAgICAgICAgfQorICAgICAgICBhc3Nl
cnQodGhyZXcpOworICAgIH0KK30KKworeworICAgIGxldCBlcnJvciA9IG51bGw7CisgICAgbGV0
IHRhcmdldCA9IHsgfTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0IG93bktleXMo
KSB7CisgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcjsKKyAgICAgICAgICAgIHRocm93IGVy
cm9yOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJn
ZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAg
ICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBPYmplY3Qu
a2V5cyhwcm94eSk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgdGhyZXcgPSB0
cnVlOworICAgICAgICAgICAgYXNzZXJ0KGUgPT09IGVycm9yKTsKKyAgICAgICAgfQorICAgICAg
ICBhc3NlcnQodGhyZXcpOworICAgIH0KK30KKworeworICAgIGxldCB0YXJnZXQgPSB7CisgICAg
ICAgIHg6IDQwCisgICAgfTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IGhhbmRs
ZXIgPSB7CisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdldCkgeworICAgICAgICAg
ICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBbIjEiLCAyLCAzXTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVy
KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJl
dyA9IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgT2JqZWN0LmtleXMocHJveHkp
OworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGFzc2VydChlLnRvU3RyaW5nKCkgPT09ICJUeXBlRXJyb3I6IFByb3h5IGhhbmRsZXIn
cyAnb3duS2V5cycgbWV0aG9kIG11c3QgcmV0dXJuIGEgYXJyYXktbGlrZSBvYmplY3QgY29udGFp
bmluZyBvbmx5IFN0cmluZ3MgYW5kIFN5bWJvbHMuIik7CisgICAgICAgIH0KKyAgICAgICAgYXNz
ZXJ0KHRocmV3KTsKKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZh
bHNlOworICAgIH0KK30KKworeworICAgIGxldCB0YXJnZXQgPSB7IH07CisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KHRhcmdldCwgIngiLCB7CisgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2Us
CisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIHZhbHVlOiA0MDAKKyAgICB9KTsK
KyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIG93
bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdldCkgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgcHJv
eHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICB0cnkgewor
ICAgICAgICAgICAgT2JqZWN0LmtleXMocHJveHkpOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAg
ICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAgICAgIGFzc2VydChlLnRvU3RyaW5nKCkg
PT09ICJUeXBlRXJyb3I6IFByb3h5IG9iamVjdCdzICd0YXJnZXQnIGhhcyB0aGUgbm9uLWNvbmZp
Z3VyYWJsZSBwcm9wZXJ0eSAneCcgdGhhdCB3YXMgbm90IGluIHRoZSByZXN1bHQgZnJvbSB0aGUg
J293bktleXMnIHRyYXAuIik7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHRocmV3KTsKKyAg
ICAgICAgYXNzZXJ0KGNhbGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgIH0KK30K
KworeworICAgIGxldCB0YXJnZXQgPSB7IH07CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRh
cmdldCwgIngiLCB7CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgZW51bWVy
YWJsZTogdHJ1ZSwKKyAgICAgICAgdmFsdWU6IDQwMAorICAgIH0pOworICAgIE9iamVjdC5wcmV2
ZW50RXh0ZW5zaW9ucyh0YXJnZXQpOworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQg
aGFuZGxlciA9IHsKKyAgICAgICAgb3duS2V5czogZnVuY3Rpb24odGhlVGFyZ2V0KSB7CisgICAg
ICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9
CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOwor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IHRocmV3ID0g
ZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBPYmplY3Qua2V5cyhwcm94eSk7Cisg
ICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAgICAgICAg
ICAgYXNzZXJ0KGUudG9TdHJpbmcoKSA9PT0gIlR5cGVFcnJvcjogUHJveHkgb2JqZWN0J3Mgbm9u
LWV4dGVuc2libGUgJ3RhcmdldCcgaGFzIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSAneCcgdGhhdCB3
YXMgbm90IGluIHRoZSByZXN1bHQgZnJvbSB0aGUgJ293bktleXMnIHRyYXAuIik7CisgICAgICAg
IH0KKyAgICAgICAgYXNzZXJ0KHRocmV3KTsKKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7CisgICAg
ICAgIGNhbGxlZCA9IGZhbHNlOworICAgIH0KK30KKworeworICAgIGxldCB0YXJnZXQgPSB7IH07
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgIngiLCB7CisgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgdmFsdWU6
IDQwMAorICAgIH0pOworICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpOworICAg
IGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgb3duS2V5
czogZnVuY3Rpb24odGhlVGFyZ2V0KSB7CisgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIFsieCIsICJ5Il07CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0
IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3h5KTsKKyAgICAgICAgfSBjYXRjaChlKSB7
CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICBhc3NlcnQoZS50b1N0cmlu
ZygpID09PSAiVHlwZUVycm9yOiBQcm94eSBoYW5kbGVyJ3MgJ293bktleXMnIG1ldGhvZCByZXR1
cm5lZCBhIGtleSB0aGF0IHdhcyBub3QgcHJlc2VudCBpbiBpdHMgdGFyZ2V0IG9yIGl0IHJldHVy
bmVkIGR1cGxpY2F0ZSBrZXlzLiIpOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7
CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9
Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0geyB9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eSh0YXJnZXQsICJ4IiwgeworICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgIHZhbHVlOiA0MDAKKyAgICB9KTsKKyAgICBPYmplY3Qu
cHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAg
bGV0IGhhbmRsZXIgPSB7CisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdldCkgewor
ICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBbIngiLCAieCJd
OworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQs
IGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAg
bGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBPYmplY3Qua2V5
cyhwcm94eSk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgdGhyZXcgPSB0cnVl
OworICAgICAgICAgICAgYXNzZXJ0KGUudG9TdHJpbmcoKSA9PT0gIlR5cGVFcnJvcjogUHJveHkg
aGFuZGxlcidzICdvd25LZXlzJyBtZXRob2QgcmV0dXJuZWQgYSBrZXkgdGhhdCB3YXMgbm90IHBy
ZXNlbnQgaW4gaXRzIHRhcmdldCBvciBpdCByZXR1cm5lZCBkdXBsaWNhdGUga2V5cy4iKTsKKyAg
ICAgICAgfQorICAgICAgICBhc3NlcnQodGhyZXcpOworICAgICAgICBhc3NlcnQoY2FsbGVkKTsK
KyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9
IHsgfTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgb3duS2V5czogNDUKKyAgICB9Owor
CisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3h5KTsKKyAgICAgICAgfSBj
YXRjaChlKSB7CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICBhc3NlcnQo
ZS50b1N0cmluZygpID09PSAiVHlwZUVycm9yOiAnb3duS2V5cycgcHJvcGVydHkgb2YgYSBQcm94
eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlLiIpOworICAgICAgICB9CisgICAgICAgIGFz
c2VydCh0aHJldyk7CisgICAgfQorfQorCitmdW5jdGlvbiBzaGFsbG93RXEoYSwgYikgeworICAg
IGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGFbaV0gIT09
IGJbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0geworICAgICAgICB4OiA0MAorICAgIH07Cisg
ICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBhcnIgPSBbImEiLCAiYiIsICJjIl07Cisg
ICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdldCkg
eworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBhcnI7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFu
ZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQg
cmVzdWx0ID0gT2JqZWN0LmtleXMocHJveHkpOworICAgICAgICBhc3NlcnQocmVzdWx0ICE9PSBh
cnIpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHJlc3VsdCwgYXJyKSk7CisgICAgICAgIGFz
c2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3sKKyAg
ICBsZXQgdGFyZ2V0ID0geworICAgICAgICB4OiA0MAorICAgIH07CisgICAgbGV0IGNhbGxlZCA9
IGZhbHNlOworICAgIGxldCBhcnIgPSBbImEiLCAiYiIsICJjIl07CisgICAgbGV0IGhhbmRsZXIg
PSB7CisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdldCkgeworICAgICAgICAgICAg
Y2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBhcnI7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgcmVzdWx0ID0gUmVmbGVj
dC5vd25LZXlzKHByb3h5KTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdCAhPT0gYXJyKTsKKyAgICAg
ICAgYXNzZXJ0KHNoYWxsb3dFcShyZXN1bHQsIGFycikpOworICAgICAgICBhc3NlcnQoY2FsbGVk
KTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdl
dCA9IHsKKyAgICAgICAgeDogNDAKKyAgICB9OworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAg
ICBsZXQgczEgPSBTeW1ib2woKTsKKyAgICBsZXQgczIgPSBTeW1ib2woKTsKKyAgICBsZXQgYXJy
ID0gWyJhIiwgImIiLCBzMSwgImMiLCBzMl07CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAg
IG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdldCkgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiBhcnI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0
IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3Bl
cnR5U3ltYm9scyhwcm94eSk7CisgICAgICAgIGFzc2VydChzaGFsbG93RXEocmVzdWx0LCBbczEs
IHMyXSkpOworICAgICAgICBhc3NlcnQoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7
CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9IHsKKyAgICAgICAgeDogNDAKKyAgICB9
OworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgczEgPSBTeW1ib2woKTsKKyAgICBs
ZXQgczIgPSBTeW1ib2woKTsKKyAgICBsZXQgYXJyID0gWyJhIiwgImIiLCBzMSwgImMiLCBzMl07
CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdl
dCkgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBhcnI7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwg
aGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBs
ZXQgcmVzdWx0ID0gT2JqZWN0LmtleXMocHJveHkpOworICAgICAgICBhc3NlcnQoc2hhbGxvd0Vx
KHJlc3VsdCwgWyJhIiwgImIiLCAiYyJdKSk7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAg
ICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0gewor
ICAgICAgICB4OiA0MAorICAgIH07CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBz
MSA9IFN5bWJvbCgpOworICAgIGxldCBzMiA9IFN5bWJvbCgpOworICAgIGxldCBhcnIgPSBbImEi
LCAiYiIsIHMxLCAiYyIsIHMyXTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgb3duS2V5
czogZnVuY3Rpb24odGhlVGFyZ2V0KSB7CisgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIGFycjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkg
PSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUw
MDsgaSsrKSB7CisgICAgICAgIGxldCByZXN1bHQgPSBSZWZsZWN0Lm93bktleXMocHJveHkpOwor
ICAgICAgICBhc3NlcnQoc2hhbGxvd0VxKHJlc3VsdCwgWyJhIiwgImIiLCAiYyIsIHMxLCBzMl0p
KTsKKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAg
IH0KK30KKworeworICAgIGxldCB0YXJnZXQgPSB7CisgICAgICAgIHg6IDQwCisgICAgfTsKKyAg
ICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IHMxID0gU3ltYm9sKCk7CisgICAgbGV0IHMy
ID0gU3ltYm9sKCk7CisgICAgbGV0IGFyciA9IFsiYSIsICJiIiwgczEsICJjIiwgczJdOworICAg
IGxldCBoYW5kbGVyID0geworICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICgpID0+
IHsKKyAgICAgICAgICAgIHJldHVybiB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTog
dHJ1ZSB9CisgICAgICAgIH0sCisgICAgICAgIG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdldCkg
eworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBhcnI7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFu
ZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQg
c2V0ID0gbmV3IFNldDsKKyAgICAgICAgZm9yIChsZXQgcCBpbiBwcm94eSkKKyAgICAgICAgICAg
IHNldC5hZGQocCk7CisgICAgICAgIGFzc2VydChzZXQuc2l6ZSA9PT0gMyk7CisgICAgICAgIGFz
c2VydChzZXQuaGFzKCJhIikpOworICAgICAgICBhc3NlcnQoc2V0LmhhcygiYiIpKTsKKyAgICAg
ICAgYXNzZXJ0KHNldC5oYXMoImMiKSk7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAg
ICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0geworICAg
ICAgICB4OiA0MAorICAgIH07CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBzMSA9
IFN5bWJvbCgpOworICAgIGxldCBzMiA9IFN5bWJvbCgpOworICAgIGxldCBhcnIgPSBbImEiLCAi
YiIsIHMxLCAiYyIsIHMyXTsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yOiAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4geyBlbnVtZXJhYmxl
OiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfQorICAgICAgICB9LAorICAgICAgICBvd25LZXlz
OiBmdW5jdGlvbih0aGVUYXJnZXQpIHsKKyAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gYXJyOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9
IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAw
OyBpKyspIHsKKyAgICAgICAgbGV0IHNldCA9IG5ldyBTZXQ7CisgICAgICAgIGZvciAobGV0IHAg
aW4gcHJveHkpCisgICAgICAgICAgICBzZXQuYWRkKHApOworICAgICAgICBpZiAoaSA9PT0gNDAp
IHsgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGNhY2hlIHRoZSByZXN1bHQuCisgICAgICAgICAgICBh
cnIucHVzaCgiZCIpOworICAgICAgICB9CisgICAgICAgIGFzc2VydChzZXQuc2l6ZSA9PT0gaSA+
IDQwID8gNCA6IDMpOworICAgICAgICBhc3NlcnQoc2V0LmhhcygiYSIpKTsKKyAgICAgICAgYXNz
ZXJ0KHNldC5oYXMoImIiKSk7CisgICAgICAgIGFzc2VydChzZXQuaGFzKCJjIikpOworICAgICAg
ICBpZiAoaSA+IDQwKQorICAgICAgICAgICAgYXNzZXJ0KHNldC5oYXMoImQiKSk7CisgICAgICAg
IGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3sK
KyAgICBsZXQgdGFyZ2V0ID0geworICAgICAgICB4OiA0MAorICAgIH07CisgICAgbGV0IGNhbGxl
ZCA9IGZhbHNlOworICAgIGxldCBzMSA9IFN5bWJvbCgpOworICAgIGxldCBzMiA9IFN5bWJvbCgp
OworICAgIGxldCBhcnIgPSBbImEiLCAiYiIsIHMxLCAiYyIsIHMyXTsKKyAgICBsZXQgaGFuZGxl
ciA9IHsKKyAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAoKSA9PiB7CisgICAgICAg
ICAgICByZXR1cm4geyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfQorICAg
ICAgICB9LAorICAgICAgICBvd25LZXlzOiBmdW5jdGlvbih0aGVUYXJnZXQpIHsKKyAgICAgICAg
ICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gYXJyOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAg
IGxldCBwcm94eWlzaCA9IE9iamVjdC5jcmVhdGUocHJveHksIHsKKyAgICAgICAgZDogeyBlbnVt
ZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfQorICAgIH0pOworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IHNldCA9IG5ldyBTZXQ7CisgICAg
ICAgIGZvciAobGV0IHAgaW4gcHJveHlpc2gpCisgICAgICAgICAgICBzZXQuYWRkKHApOworICAg
ICAgICBhc3NlcnQoc2V0LnNpemUgPT09IDQpOworICAgICAgICBhc3NlcnQoc2V0LmhhcygiYSIp
KTsKKyAgICAgICAgYXNzZXJ0KHNldC5oYXMoImIiKSk7CisgICAgICAgIGFzc2VydChzZXQuaGFz
KCJjIikpOworICAgICAgICBhc3NlcnQoc2V0LmhhcygiZCIpKTsKKyAgICAgICAgYXNzZXJ0KGNh
bGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgIH0KK30KKworeworICAgIGxldCB0
YXJnZXQgPSB7CisgICAgICAgIHg6IDQwCisgICAgfTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7
CisgICAgbGV0IHMxID0gU3ltYm9sKCk7CisgICAgbGV0IHMyID0gU3ltYm9sKCk7CisgICAgbGV0
IGFyciA9IFsiYSIsICJiIiwgczEsICJjIiwgczJdOworICAgIGxldCBoYW5kbGVyID0geworICAg
ICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICgpID0+IHsKKyAgICAgICAgICAgIHJldHVy
biB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9CisgICAgICAgIH0sCisg
ICAgICAgIG93bktleXM6IGZ1bmN0aW9uKHRoZVRhcmdldCkgeworICAgICAgICAgICAgY2FsbGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBhcnI7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgbGV0IHByb3h5
aXNoID0gT2JqZWN0LmNyZWF0ZShwcm94eSwgeworICAgICAgICBkOiB7IGVudW1lcmFibGU6IHRy
dWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9CisgICAgfSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCA1MDA7IGkrKykgeworICAgICAgICBsZXQgc2V0ID0gbmV3IFNldDsKKyAgICAgICAgZm9yIChs
ZXQgcCBpbiBwcm94eWlzaCkKKyAgICAgICAgICAgIHNldC5hZGQocCk7CisgICAgICAgIGFzc2Vy
dChzZXQuc2l6ZSA9PT0gNCk7CisgICAgICAgIGFzc2VydChzZXQuaGFzKCJhIikpOworICAgICAg
ICBhc3NlcnQoc2V0LmhhcygiYiIpKTsKKyAgICAgICAgYXNzZXJ0KHNldC5oYXMoImMiKSk7Cisg
ICAgICAgIGFzc2VydChzZXQuaGFzKCJkIikpOworICAgICAgICBhc3NlcnQoY2FsbGVkKTsKKyAg
ICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit7CisgICAgbGV0IGNhbGxlZCA9IGZh
bHNlOworICAgIGxldCB0YXJnZXQgPSB7eDogMjAsIHk6IDQwfTsKKyAgICBsZXQgaGFuZGxlciA9
IHsKKyAgICAgICAgb3duS2V5czogbnVsbAorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcg
UHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsr
KSB7CisgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocHJveHkpOworICAgICAgICBhc3Nl
cnQoa2V5cy5pbmRleE9mKCJ4IikgIT09IC0xKTsKKyAgICAgICAgYXNzZXJ0KGtleXMuaW5kZXhP
ZigieSIpICE9PSAtMSk7CisgICAgfQorfQorCit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOwor
ICAgIGxldCB0YXJnZXQgPSBuZXcgUHJveHkoe30sIHsKKyAgICAgICAgb3duS2V5czogZnVuY3Rp
b24odGhlVGFyZ2V0KSB7CisgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIFJlZmxlY3Qub3duS2V5cyh0aGVUYXJnZXQpOworICAgICAgICB9CisgICAgfSk7Cisg
ICAgbGV0IHMxID0gU3ltYm9sKCk7CisgICAgbGV0IHMyID0gU3ltYm9sKCk7CisgICAgbGV0IGFy
ciA9IFsiYSIsICJiIiwgczEsICJjIiwgczJdOworICAgIGxldCBoYW5kbGVyID0geworICAgICAg
ICBvd25LZXlzOiBmdW5jdGlvbih0aGVUYXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVybiBhcnI7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwg
aGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBs
ZXQga2V5cyA9IE9iamVjdC5rZXlzKHByb3h5KTsKKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7Cisg
ICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgIH0KK30KKworeworICAgIGxldCBlcnJvciA9IG51
bGw7CisgICAgbGV0IHRhcmdldCA9IG5ldyBQcm94eSh7fSwgeworICAgICAgICBvd25LZXlzOiBm
dW5jdGlvbih0aGVUYXJnZXQpIHsKKyAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yOworICAg
ICAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBsZXQgczEgPSBT
eW1ib2woKTsKKyAgICBsZXQgczIgPSBTeW1ib2woKTsKKyAgICBsZXQgYXJyID0gWyJhIiwgImIi
LCBzMSwgImMiLCBzMl07CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIG93bktleXM6IGZ1
bmN0aW9uKHRoZVRhcmdldCkgeworICAgICAgICAgICAgcmV0dXJuIGFycjsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9IGZh
bHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgT2JqZWN0LmtleXMocHJveHkpOworICAg
ICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAgICAg
IGFzc2VydChlID09PSBlcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHRocmV3KTsK
KyAgICAgICAgZXJyb3IgPSBudWxsOworICAgIH0KK30K
</data>
<flag name="review"
          id="297153"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>