<?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>94897</bug_id>
          
          <creation_ts>2012-08-23 22:06:58 -0700</creation_ts>
          <short_desc>Don&apos;t use malloc / destructors for activation objects</short_desc>
          <delta_ts>2012-08-25 20:24:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>gustavo</cc>
    
    <cc>philn</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>703742</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-23 22:06:58 -0700</bug_when>
    <thetext>Don&apos;t use malloc / destructors for activation objects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704652</commentid>
    <comment_count>1</comment_count>
      <attachid>160554</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-24 23:12:26 -0700</bug_when>
    <thetext>Created attachment 160554
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704654</commentid>
    <comment_count>2</comment_count>
      <attachid>160554</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-08-24 23:31:23 -0700</bug_when>
    <thetext>Comment on attachment 160554
Patch

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

r+ if you can answer/correct the commented code

&gt; Source/JavaScriptCore/runtime/JSStaticScopeObject.cpp:45
&gt; -    visitor.append(&amp;thisObject-&gt;m_registerStore);
&gt; +    if (thisObject-&gt;m_registerStore)
&gt; +        visitor.append(&amp;thisObject-&gt;m_registerStore);

you don&apos;t need this change

&gt; Source/JavaScriptCore/runtime/JSSymbolTableObject.cpp:45
&gt; +    JSNonFinalObject::visitChildren(thisObject, visitor);

Should be Base::visitChildren unless you have a compelling reason not to

&gt; Source/JavaScriptCore/runtime/JSSymbolTableObject.cpp:46
&gt; +    if (thisObject-&gt;m_symbolTable)

null check is unnecessary here

&gt; Source/JavaScriptCore/runtime/SymbolTable.cpp:47
&gt; +    SharedSymbolTable* thisObject = static_cast&lt;SharedSymbolTable*&gt;(cell);

jsCast&lt;&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704655</commentid>
    <comment_count>3</comment_count>
      <attachid>160554</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-24 23:35:20 -0700</bug_when>
    <thetext>Comment on attachment 160554
Patch

Attachment 160554 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13591517</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704656</commentid>
    <comment_count>4</comment_count>
      <attachid>160554</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-24 23:37:15 -0700</bug_when>
    <thetext>Comment on attachment 160554
Patch

Attachment 160554 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13600387</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704657</commentid>
    <comment_count>5</comment_count>
      <attachid>160554</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-24 23:37:17 -0700</bug_when>
    <thetext>Comment on attachment 160554
Patch

Attachment 160554 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13604347</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704695</commentid>
    <comment_count>6</comment_count>
      <attachid>160554</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-25 07:37:59 -0700</bug_when>
    <thetext>Comment on attachment 160554
Patch

Attachment 160554 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13601446</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704777</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-08-25 20:24:59 -0700</bug_when>
    <thetext>Committed r126695: &lt;http://trac.webkit.org/changeset/126695&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160554</attachid>
            <date>2012-08-24 23:12:26 -0700</date>
            <delta_ts>2012-08-25 07:37:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94897-20120824231221.patch</filename>
            <type>text/plain</type>
            <size>60531</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2Njc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MCBA
QAorMjAxMi0wOC0yNCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIERvbid0IHVzZSBtYWxsb2MgLyBkZXN0cnVjdG9ycyBmb3IgYWN0aXZhdGlvbiBvYmplY3Rz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDg5Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDY1JSBmYXN0
ZXIgb24gdjgtcmVhbC1lYXJsZXkuCisKKyAgICAgICAgTG90cyBvZiBib2lsZXJwbGF0ZSBoZXJl
LCBidXQgdGhlIGppc3QgaXMgdGhpczoKKworICAgICAgICAoMSkgVXNlIENvcGllZFNwYWNlIGlu
c3RlYWQgb2YgbWFsbG9jIHRvIGFsbG9jYXRlIHRoZSBhY3RpdmF0aW9uJ3MKKyAgICAgICAgYmFj
a2luZyBzdG9yZS4KKworICAgICAgICAoMikgVXNlIE1hcmtlZFNwYWNlIGluc3RlYWQgb2YgcmVm
LWNvdW50aW5nIHRvIGFsbG9jYXRlIHRoZSBzeW1ib2wgdGFibGUuCisKKyAgICAgICAgKDMpID09
PiBObyBtb3JlIGRlc3RydWN0b3IuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN5bWJvbFRhYmxlKToK
KyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAgIChKU0M6Okdsb2JhbENvZGVCbG9jazo6R2xv
YmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OkZ1bmN0aW9u
Q29kZUJsb2NrKToKKyAgICAgICAgKEZ1bmN0aW9uQ29kZUJsb2NrKTogU3ltYm9sVGFibGUgaXMg
YSBHQyBvYmplY3Qgbm93LCBzbyBpdCBnZXRzIGEgd3JpdGUKKyAgICAgICAgYmFycmllciBhbmQg
dmlzaXQgY2FsbHMgaW5zdGVhZCBvZiByZWYtY291bnRpbmcuIEkgY2hhbmdlZCBhbGwgQ29kZUJs
b2NrcworICAgICAgICB0byB1c2Ugc2hhcmVkIHN5bWJvbCB0YWJsZXMgYmVjYXVzZSB0aGUgZGlz
dGluY3Rpb24gYmV0d2VlbiBzaGFyZWQgYW5kCisgICAgICAgIHVuc2hhcmVkIGh1cnQgbXkgaGVh
ZC4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDb25zdERlY2wpOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFB1dFN0YXRpY1Zhcik6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOiBTb21ldGltZXMsIGEgcGVyaW9kIGp1c3Qgd2FudHMKKyAgICAgICAgdG8gYmUgYW4g
YXJyb3cuIEFuZCB0aGVuIEMrKyBpcyB0aGVyZSB0byBhY2NvbW1vZGF0ZS4KKworICAgICAgICAq
IGppdC9KSVREcml2ZXIuaDoKKyAgICAgICAgKEpTQzo6aml0Q29tcGlsZUZ1bmN0aW9uSWZBcHBy
b3ByaWF0ZSk6CisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuaDoKKyAgICAgICAgKEFyZ3Vt
ZW50c0RhdGEpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnNldFJlZ2lzdGVycyk6CisgICAg
ICAgIChBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmFyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6QXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5j
dGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGls
ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9y
Q2FsbEludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
Rm9yQ29uc3RydWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6
OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnN5bWJvbFRhYmxlKToKKyAgICAgICAgKEZ1bmN0
aW9uRXhlY3V0YWJsZSk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmg6Cisg
ICAgICAgIChKU0M6OnByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbik6IEkgY2hhbmdlZCBmcm9t
IFdyaXRlQmFycmllciB0bworICAgICAgICBXcml0ZUJhcnJpZXJCYXNlIHNvIGFjdGl2YXRpb25z
IGNvdWxkIHJldXNlIFN0b3JhZ2VCYXJyaWVyIGFuZCBQcm9wZXJ0eVN0b3JhZ2UuCisKKyAgICAg
ICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlv
bjo6SlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpmaW5pc2hDcmVh
dGlvbik6IEFsbG9jYXRlIHRoZSBzeW1ib2wgdGFibGUgaGVyZSwKKyAgICAgICAgYWZ0ZXIgd2Un
cmUgZnVsbHkgY29uc3RydWN0ZWQsIHRvIGF2b2lkIEdDIGR1cmluZyBpbml0aWFsaXphdGlvbi4K
KworICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAo
SlNDOjpKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlR2V0KToKKyAgICAgICAgKEpTQzo6SlNBY3Rp
dmF0aW9uOjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0
T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6c3ltYm9sVGFi
bGVQdXRXaXRoQXR0cmlidXRlcyk6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoK
KyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNBY3RpdmF0
aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpyZWdpc3Rlck9mZnNldCk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnJlZ2lzdGVyQXJyYXlTaXpl
KToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpyZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMp
OgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnRlYXJPZmYpOiBUZWFyLW9mZiB6ZXJvLWlu
aXRpYWxpemVzIGFsbCB1bmNvcGllZAorICAgICAgICByZWdpc3RlcnMuIFRoaXMgbWFrZXMgaXQg
c2FmZSB0byBjb3B5QW5kQXBwZW5kIHRoZSBmdWxsIGJ1ZmZlciBpbgorICAgICAgICB2aXNpdENo
aWxkcmVuLCB3aXRob3V0IGFueSBleHRyYSBjaGVja3MuCisKKyAgICAgICAgKiBydW50aW1lL0pT
Q2VsbC5oOgorICAgICAgICAoSlNDZWxsKTogTW92ZWQgYSBzaGFyZWQgZGVmYXVsdCBzZXQgb2Yg
ZmxhZ3MgaW50byB0aGlzIGJhc2UgY2xhc3MsIHNvCisgICAgICAgIEkgY291bGQgdXNlIGl0IGlu
IGEgZmV3IHBsYWNlcy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0dsb2JhbERhdGEpOiBOZXcgc3RydWN0dXJl
IGZvciBzeW1ib2wgdGFibGVzLgorCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAg
ICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjphZGRTdGF0aWNHbG9iYWxzKToKKyAgICAgICAgKiBy
dW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAg
ICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpzeW1ib2xUYWJsZUhhc1Byb3BlcnR5KTogV2UgZG9u
J3QgbmVlZCBhbiBpbmxpbmUKKyAgICAgICAgc3ltYm9sIHRhYmxlIC0tIEpTU3ltYm9sVGFibGVP
YmplY3Qgd2lsbCBHQyBhbGxvY2F0ZSBvbmUgZm9yIHVzLgorCisgICAgICAgICogcnVudGltZS9K
U09iamVjdC5oOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pT
U3RhdGljU2NvcGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNT
dGF0aWNTY29wZU9iamVjdDo6dmlzaXRDaGlsZHJlbik6IE5VTEwgY2hlY2sgb3VyIHJlZ2lzdGVy
IHN0b3JlCisgICAgICAgIGJlY2F1c2UgZmluaXNoQ3JlYXRpb24gYWxsb2NhdGVzIGFuIG9iamVj
dCBub3csIHNvIHdlIG1heSBnZXQgbWFya2VkCisgICAgICAgIGJlZm9yZSB3ZSd2ZSBhc3NpZ25l
ZCB0byBvdXIgcmVnaXN0ZXIgc3RvcmUuCisKKyAgICAgICAgKiBydW50aW1lL0pTU3RhdGljU2Nv
cGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjpKU1N0YXRpY1Njb3Bl
T2JqZWN0KToKKyAgICAgICAgKEpTU3RhdGljU2NvcGVPYmplY3QpOiBObyBtb3JlIGRlc3RydWN0
b3IgZm9yIHRoaXMgb2JqZWN0LCBlaXRoZXIsIHNpbmNlCisgICAgICAgIGl0IG5vIGxvbmdlciBl
bWJlZHMgYSBoYXNoIHRhYmxlLgorCisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6
CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU0M6
OkpTU3ltYm9sVGFibGVPYmplY3Q6OnN5bWJvbFRhYmxlKToKKyAgICAgICAgKEpTU3ltYm9sVGFi
bGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpKU1N5bWJvbFRh
YmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZUdldCk6CisgICAgICAgIChKU0M6OnN5
bWJvbFRhYmxlUHV0KToKKyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRl
cyk6IFN5bWJvbFRhYmxlT2JqZWN0IGFsbG9jYXRlcyBhIHN5bWJvbAorICAgICAgICB0YWJsZSBh
dXRvbWF0aWNhbGx5IGlmIG9uZSBpc24ndCBwcm92aWRlZC4gKEFjdGl2YXRpb25zIHByb3ZpZGUg
dGhlaXIKKyAgICAgICAgb3duLCB3aGljaCB0aGV5IGdldCBmcm9tIGNvbXBpbGVkIGNvZGUuKQor
CisgICAgICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpT
VmFyaWFibGVPYmplY3Q6OnJlZ2lzdGVyQXQpOgorICAgICAgICAoSlNDOjpKU1ZhcmlhYmxlT2Jq
ZWN0OjphZGRyZXNzT2ZSZWdpc3RlcnMpOgorICAgICAgICAoSlNWYXJpYWJsZU9iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3QpOgorICAgICAg
ICAoSlNDOjpKU1ZhcmlhYmxlT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6IFJlbW92ZWQgYSBidW5j
aCBvZiBvYnNvbGV0ZSBjb2RlLgorICAgICAgICBBY3RpdmF0aW9ucyBtYW5hZ2UgdGhlaXIgcmVn
aXN0ZXJzIGRpcmVjdGx5IG5vdy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RvcmFnZUJhcnJpZXIu
aDoKKyAgICAgICAgKFN0b3JhZ2VCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6U3RvcmFnZUJhcnJp
ZXI6Om9wZXJhdG9yISk6CisKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNoYXJlZFN5bWJvbFRhYmxlOjpkZXN0cm95KToK
KyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6CisgICAgICAgIChKU0M6OlNoYXJlZFN5
bWJvbFRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoU2hhcmVkU3ltYm9sVGFibGUpOgorICAgICAg
ICAoSlNDOjpTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6U2hhcmVkU3ltYm9sVGFibGU6OlNoYXJlZFN5bWJvbFRhYmxlKTogQm9pbGVycGxhdCBjb2Rl
IHRvCisgICAgICAgIG1ha2Ugc2hhcmVkIHN5bWJvbCB0YWJsZSBHQy1hbGxvY2F0ZWQuCisKIDIw
MTItMDgtMjQgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5pZnkgTnVtYmVyIHRvIFN0cmluZ0ltcGwgY29udmVyc2lvbgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEyNjY3OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjc4LDcgKzE2NzgsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFN0YXRpc3Rp
Y3MoKQogI2VuZGlmCiB9CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1Rh
ZywgQ29kZUJsb2NrJiBvdGhlciwgU3ltYm9sVGFibGUqIHN5bVRhYikKK0NvZGVCbG9jazo6Q29k
ZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKICAgICA6IG1fZ2xv
YmFsT2JqZWN0KG90aGVyLm1fZ2xvYmFsT2JqZWN0KQogICAgICwgbV9oZWFwKG90aGVyLm1faGVh
cCkKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKG90aGVyLm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
KQpAQCAtMTcxMCw3ICsxNzEwLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJs
b2NrVGFnLAogICAgICwgbV9jb25zdGFudFJlZ2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0
ZXJzKQogICAgICwgbV9mdW5jdGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKICAgICAs
IG1fZnVuY3Rpb25FeHBycyhvdGhlci5tX2Z1bmN0aW9uRXhwcnMpCi0gICAgLCBtX3N5bWJvbFRh
YmxlKHN5bVRhYikKKyAgICAsIG1fc3ltYm9sVGFibGUoKm90aGVyLm1fZ2xvYmFsRGF0YSwgb3Ro
ZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLnN5bWJvbFRhYmxlKCkpCiAgICAgLCBt
X29zckV4aXRDb3VudGVyKDApCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQog
ICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQpAQCAtMTc0NCw3ICsxNzQ0LDcg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgIH0KIH0KIAot
Q29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBD
b2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QgKmdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwg
U3ltYm9sVGFibGUqIHN5bVRhYiwgYm9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVC
bG9jaz4gYWx0ZXJuYXRpdmUpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xv
YmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5z
aWduZWQgc291cmNlT2Zmc2V0LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJs
b2NrPiBhbHRlcm5hdGl2ZSkKICAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgm
bV9nbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKQogICAgICwgbV9udW1DYWxsZWVSZWdp
c3RlcnMoMCkKQEAgLTE3NjQsNyArMTc2NCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG8KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgLCBtX2V4ZWN1
dGlvbkVudHJ5Q291bnQoMCkKICNlbmRpZgotICAgICwgbV9zeW1ib2xUYWJsZShzeW1UYWIpCisg
ICAgLCBtX3N5bWJvbFRhYmxlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1
dGFibGUsIFNoYXJlZFN5bWJvbFRhYmxlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCkpKQogICAgICwgbV9hbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSkKICAgICAsIG1fb3NyRXhpdENv
dW50ZXIoMCkKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCkBAIC0yMjIyLDYg
KzIyMjIsNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyCiB7CiAg
ICAgdmlzaXRvci5hcHBlbmQoJm1fZ2xvYmFsT2JqZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgm
bV9vd25lckV4ZWN1dGFibGUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZtX3N5bWJvbFRhYmxlKTsK
ICAgICBpZiAobV9yYXJlRGF0YSkgewogICAgICAgICBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2Fj
aGUudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgICAgIHNpemVfdCByZWdFeHBDb3VudCA9
IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5zaXplKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMjY2NzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw5
ICsxMTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGVudW0gQ29w
eVBhcnNlZEJsb2NrVGFnIHsgQ29weVBhcnNlZEJsb2NrIH07CiAgICAgcHJvdGVjdGVkOgotICAg
ICAgICBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyLCBTeW1i
b2xUYWJsZSopOworICAgICAgICBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxv
Y2smIG90aGVyKTsKICAgICAgICAgCi0gICAgICAgIENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiwgYm9v
bCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpOworICAg
ICAgICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlw
ZSwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQg
c291cmNlT2Zmc2V0LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBh
bHRlcm5hdGl2ZSk7CiAKICAgICAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2ds
b2JhbE9iamVjdDsKICAgICAgICAgSGVhcCogbV9oZWFwOwpAQCAtOTQ5LDggKzk0OSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVE
YXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KIAogCi0gICAgICAg
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpIHsgcmV0dXJuIG1fc3ltYm9sVGFibGU7IH0KLSAg
ICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHNoYXJlZFN5bWJvbFRhYmxlKCkgeyBBU1NFUlQobV9j
b2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpOyByZXR1cm4gc3RhdGljX2Nhc3Q8U2hhcmVkU3ltYm9s
VGFibGUqPihtX3N5bWJvbFRhYmxlKTsgfQorICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUoKSB7IHJldHVybiBtX3N5bWJvbFRhYmxlLmdldCgpOyB9CiAKICAgICAgICAgRXZh
bENvZGVDYWNoZSYgZXZhbENvZGVDYWNoZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OyByZXR1cm4gbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlOyB9CiAKQEAgLTEzNjEsNyArMTM2
MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEZ1bmN0
aW9uRXhlY3V0YWJsZT4gPiBtX2Z1bmN0aW9uRGVjbHM7CiAgICAgICAgIFZlY3RvcjxXcml0ZUJh
cnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPiA+IG1fZnVuY3Rpb25FeHByczsKIAotICAgICAgICBT
eW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFNoYXJlZFN5
bWJvbFRhYmxlPiBtX3N5bWJvbFRhYmxlOwogCiAgICAgICAgIE93blB0cjxDb2RlQmxvY2s+IG1f
YWx0ZXJuYXRpdmU7CiAgICAgICAgIApAQCAtMTQyMywxOCArMTQyMiwxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIEdsb2JhbENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcs
IEdsb2JhbENvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgICAgICA6IENvZGVCbG9jayhDb3B5UGFy
c2VkQmxvY2ssIG90aGVyLCAmbV91bnNoYXJlZFN5bWJvbFRhYmxlKQotICAgICAgICAgICAgLCBt
X3Vuc2hhcmVkU3ltYm9sVGFibGUob3RoZXIubV91bnNoYXJlZFN5bWJvbFRhYmxlKQorICAgICAg
ICAgICAgOiBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKICAgICAgICAgewogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBHbG9iYWxDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVu
c2lnbmVkIHNvdXJjZU9mZnNldCwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQot
ICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFs
T2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCAmbV91bnNoYXJlZFN5bWJvbFRh
YmxlLCBmYWxzZSwgYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4
ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VP
ZmZzZXQsIGZhbHNlLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBTeW1ib2xUYWJsZSBtX3Vuc2hhcmVkU3ltYm9sVGFibGU7CiAgICAg
fTsKIAogICAgIGNsYXNzIFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2Nr
IHsKQEAgLTE1MDEsMjUgKzE0OTYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRnVu
Y3Rpb25Db2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IEZ1bmN0aW9uQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2RlQmxvY2sm
IG90aGVyKQotICAgICAgICAgICAgOiBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlciwg
b3RoZXIuc2hhcmVkU3ltYm9sVGFibGUoKSkKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKENvcHlQ
YXJzZWRCbG9jaywgb3RoZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZSBmYWN0IHRo
YXQgd2UgaGF2ZSB0byBkbyB0aGlzIGlzIHl1Y2t5LCBidXQgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ug
b2YgdGhlCi0gICAgICAgICAgICAvLyBjbGFzcyBoaWVyYXJjaHkgaXNzdWVzIGRlc2NyaWJlZCBp
biB0aGUgY29tbWVudCBibG9jayBmb3IgdGhlIG1haW4KLSAgICAgICAgICAgIC8vIGNvbnN0cnVj
dG9yLCBiZWxvdy4KLSAgICAgICAgICAgIHNoYXJlZFN5bWJvbFRhYmxlKCktPnJlZigpOwogICAg
ICAgICB9CiAKLSAgICAgICAgLy8gUmF0aGVyIHRoYW4gdXNpbmcgdGhlIHVzdWFsIFJlZkNvdW50
ZWQ6OmNyZWF0ZSBpZGlvbSBmb3IgU2hhcmVkU3ltYm9sVGFibGUgd2UganVzdCB1c2UgbmV3Ci0g
ICAgICAgIC8vIGFzIHdlIG5lZWQgdG8gaW5pdGlhbGlzZSB0aGUgQ29kZUJsb2NrIGJlZm9yZSB3
ZSBjb3VsZCBpbml0aWFsaXNlIGFueSBSZWZQdHIgdG8gaG9sZCB0aGUgc2hhcmVkCi0gICAgICAg
IC8vIHN5bWJvbCB0YWJsZSwgc28gd2UganVzdCBwYXNzIGFzIGEgcmF3IHBvaW50ZXIgd2l0aCBh
IHJlZiBjb3VudCBvZiAxLiAgV2UgdGhlbiBtYW51YWxseSBkZXJlZgotICAgICAgICAvLyBpbiB0
aGUgZGVzdHJ1Y3Rvci4KICAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwg
dW5zaWduZWQgc291cmNlT2Zmc2V0LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29k
ZUJsb2NrPiBhbHRlcm5hdGl2ZSA9IG51bGxwdHIpCi0gICAgICAgICAgICA6IENvZGVCbG9jayhv
d25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBz
b3VyY2VPZmZzZXQsIFNoYXJlZFN5bWJvbFRhYmxlOjpjcmVhdGUoKS5sZWFrUmVmKCksIGlzQ29u
c3RydWN0b3IsIGFsdGVybmF0aXZlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgfkZ1
bmN0aW9uQ29kZUJsb2NrKCkKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJs
ZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwg
aXNDb25zdHJ1Y3RvciwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHNoYXJl
ZFN5bWJvbFRhYmxlKCktPmRlcmVmKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAjaWYgRU5BQkxF
KEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxMjY2NzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI2MCw3ICsxMjYwLDcgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVy
YXRvcjo6cmVzb2x2ZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgSlNT
eW1ib2xUYWJsZU9iamVjdCogY3VycmVudFZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9s
VGFibGVPYmplY3QqPihjdXJyZW50U2NvcGUpOwotICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVu
dHJ5ID0gY3VycmVudFZhcmlhYmxlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5p
bXBsKCkpOworICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gY3VycmVudFZhcmlhYmxl
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQocHJvcGVydHkuaW1wbCgpKTsKIAogICAgICAgICAv
LyBGb3VuZCB0aGUgcHJvcGVydHkKICAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewpAQCAt
MTMyNyw3ICsxMzI3LDcgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2
ZQogICAgICAgICBpZiAoIWN1cnJlbnRTY29wZS0+aXNWYXJpYWJsZU9iamVjdCgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIGN1cnJlbnRWYXJp
YWJsZU9iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY3VycmVudFNjb3BlKTsK
LSAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGN1cnJlbnRWYXJpYWJsZU9iamVjdC0+
c3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKKyAgICAgICAgU3ltYm9sVGFibGVF
bnRyeSBlbnRyeSA9IGN1cnJlbnRWYXJpYWJsZU9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHBy
b3BlcnR5LmltcGwoKSk7CiAgICAgICAgIGlmIChlbnRyeS5pc051bGwoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBpZiAoKytpdGVyID09IGVuZCkKQEAgLTE1ODMsNyArMTU4Myw3
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0U3QKICAgICAgICAgZW1p
dE9wY29kZShvcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjayk7CiAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChyZXNvbHZlUmVzdWx0LnJlZ2lzdGVyUG9pbnRlcigpKTsKICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KHJlc29sdmVSZXN1bHQuZ2xvYmFsT2JqZWN0
KCkpLT5zeW1ib2xUYWJsZSgpLmdldChpZGVudGlmaWVyLmltcGwoKSkuYWRkcmVzc09mSXNXYXRj
aGVkKCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoanNDYXN0PEpTR2xvYmFsT2Jq
ZWN0Kj4ocmVzb2x2ZVJlc3VsdC5nbG9iYWxPYmplY3QoKSktPnN5bWJvbFRhYmxlKCktPmdldChp
ZGVudGlmaWVyLmltcGwoKSkuYWRkcmVzc09mSXNXYXRjaGVkKCkpOwogICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwogICAgICAgICByZXR1cm4g
dmFsdWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjY2NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwNiw3ICsyNDA2
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgCiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFj
a1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZF07
CiAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihpZGVudGlmaWVyTnVtYmVyKTsKLSAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCkuZ2V0KGlkZW50aWZpZXIuaW1wbCgpKTsK
KyAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJv
bFRhYmxlKCktPmdldChpZGVudGlmaWVyLmltcGwoKSk7CiAgICAgICAgICAgICBpZiAoIWVudHJ5
LmNvdWxkQmVXYXRjaGVkKCkpIHsKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0R2xvYmFs
VmFyID0gYWRkVG9HcmFwaCgKICAgICAgICAgICAgICAgICAgICAgR2V0R2xvYmFsVmFyLApAQCAt
MjQ1OSw3ICsyNDU5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzRd
LnUub3BlcmFuZF07CiAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKTsKLSAgICAgICAgICAgIFN5bWJvbFRh
YmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCkuZ2V0KGlkZW50aWZp
ZXIuaW1wbCgpKTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxP
YmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChpZGVudGlmaWVyLmltcGwoKSk7CiAgICAgICAgICAg
ICBpZiAoIWVudHJ5LmNvdWxkQmVXYXRjaGVkKCkpIHsKICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKAogICAgICAgICAgICAgICAgICAgICBQdXRHbG9iYWxWYXIsCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJl
dmlzaW9uIDEyNjY3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MzUsNyArMzUzNSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBXYXRjaHBv
aW50U2V0KiB3YXRjaHBvaW50U2V0ID0KLSAgICAgICAgICAgIG1faml0Lmdsb2JhbE9iamVjdEZv
cihub2RlLmNvZGVPcmlnaW4pLT5zeW1ib2xUYWJsZSgpLmdldCgKKyAgICAgICAgICAgIG1faml0
Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5zeW1ib2xUYWJsZSgpLT5nZXQoCiAg
ICAgICAgICAgICAgICAgaWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXJGb3JDaGVjaygp
KS0+aW1wbCgpKS53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKApAQCAtMzU2Myw3ICszNTYzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OiB7Ci0gICAgICAgIG1faml0Lmdsb2JhbE9iamVjdEZv
cihub2RlLmNvZGVPcmlnaW4pLT5zeW1ib2xUYWJsZSgpLmdldCgKKyAgICAgICAgbV9qaXQuZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgKICAgICAg
ICAgICAgIGlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKSktPmltcGwo
KSkuYWRkV2F0Y2hwb2ludCgKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQo
KSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMjY2NzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTE4LDcgKzM1MTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAKICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCA9Ci0gICAgICAgICAg
ICBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+c3ltYm9sVGFibGUoKS5n
ZXQoCisgICAgICAgICAgICBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+
c3ltYm9sVGFibGUoKS0+Z2V0KAogICAgICAgICAgICAgICAgIGlkZW50aWZpZXIobm9kZS5pZGVu
dGlmaWVyTnVtYmVyRm9yQ2hlY2soKSktPmltcGwoKSkud2F0Y2hwb2ludFNldCgpOwogICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKQEAgLTM1
NDEsNyArMzU0MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDogewotICAgICAg
ICBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+c3ltYm9sVGFibGUoKS5n
ZXQoCisgICAgICAgIG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5zeW1i
b2xUYWJsZSgpLT5nZXQoCiAgICAgICAgICAgICBpZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51
bWJlckZvckNoZWNrKCkpLT5pbXBsKCkpLmFkZFdhdGNocG9pbnQoCiAgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVREcml2ZXIuaAkocmV2aXNpb24gMTI2Njc5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVREcml2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBp
bmxpbmUgYm9vbCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShFeGVjCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWlubGluZSBib29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoRXhlY1N0
YXRlKiBleGVjLCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUm
IGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBT
aGFyZWRTeW1ib2xUYWJsZSomIHN5bWJvbFRhYmxlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUs
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK2lu
bGluZSBib29sIGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoRXhlY1N0YXRlKiBleGVj
LCBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBXcml0ZUJhcnJp
ZXI8U2hhcmVkU3ltYm9sVGFibGU+JiBzeW1ib2xUYWJsZSwgSklUQ29kZTo6SklUVHlwZSBqaXRU
eXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwog
ICAgIApAQCAtOTksNyArOTksNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlRnVuY3Rpb25JZkFw
cHJvcHJpCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSkgewogICAgICAgICAgICAgY29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlv
bkNvZGVCbG9jaz4oY29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgICAg
ICBzeW1ib2xUYWJsZSA9IGNvZGVCbG9jay0+c2hhcmVkU3ltYm9sVGFibGUoKTsKKyAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSk7CiAgICAgICAgICAgICBqaXRD
b2RlID0gb2xkSklUQ29kZTsKICAgICAgICAgICAgIGppdENvZGVXaXRoQXJpdHlDaGVjayA9IG9s
ZEpJVENvZGVXaXRoQXJpdHlDaGVjazsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiAxMjY2
NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBv
dmVycm9kZUNhbGxlcjsKICAgICAgICAgYm9vbCBpc1N0cmljdE1vZGU7CiAKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlcnM7CisgICAgICAgIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4qIHJlZ2lzdGVyczsKICAgICAgICAgT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVu
a25vd24+ID4gcmVnaXN0ZXJBcnJheTsKIAogICAgICAgICBPd25BcnJheVB0cjxib29sPiBkZWxl
dGVkQXJndW1lbnRzOwpAQCAtMTEwLDYgKzExMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgZC0+YWN0aXZhdGlvbi5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgYWN0aXZhdGlvbik7CiAg
ICAgICAgICAgICBkLT5yZWdpc3RlcnMgPSAmYWN0aXZhdGlvbi0+cmVnaXN0ZXJBdCgwKTsKICAg
ICAgICAgfQorICAgICAgICB2b2lkIHNldFJlZ2lzdGVycyhXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiByZWdpc3RlcnMpIHsgZC0+cmVnaXN0ZXJzID0gcmVnaXN0ZXJzOyB9CiAKICAgICAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAogICAg
ICAgICB7IApAQCAtMTM4LDcgKzEzOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGNyZWF0ZVN0cmljdE1vZGVDYWxsZXJJZk5lY2Vzc2FyeShFeGVjU3RhdGUqKTsKICAgICAgICAg
dm9pZCBjcmVhdGVTdHJpY3RNb2RlQ2FsbGVlSWZOZWNlc3NhcnkoRXhlY1N0YXRlKik7CiAKLSAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBhcmd1bWVudChzaXplX3QpOworICAgICAgICBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBhcmd1bWVudChzaXplX3QpOwogCiAgICAgICAgIHZv
aWQgaW5pdChDYWxsRnJhbWUqKTsKIApAQCAtMTY1LDcgKzE2Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgV3JpdGVCYXJyaWVyPFVua25vd24+JiBBcmd1
bWVudHM6OmFyZ3VtZW50KHNpemVfdCBpKQorICAgIGlubGluZSBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+JiBBcmd1bWVudHM6OmFyZ3VtZW50KHNpemVfdCBpKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGQtPnJlZ2lzdGVyc1tDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpXTsKICAgICB9CkBA
IC0xNzcsNyArMTc4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNGdW5jdGlvbiog
Y2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmNhbGxlZSgpKTsKICAgICAg
ICAgZC0+bnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7Ci0gICAgICAg
IGQtPnJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4o
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKSk7CisgICAgICAgIGQtPnJlZ2lzdGVycyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkpOwogICAgICAgICBkLT5jYWxsZWUuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBjYWxsZWUpOwogICAgICAgICBkLT5vdmVycm9kZUxlbmd0aCA9IGZhbHNlOwogICAgICAgICBk
LT5vdmVycm9kZUNhbGxlZSA9IGZhbHNlOwpAQCAtMTk3LDcgKzE5OCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlLmdldCgpOwogICAgICAgICBkLT5udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCkgLSAxOwotICAgICAgICBkLT5yZWdpc3RlcnMgPSByZWludGVycHJldF9j
YXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpICsgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICAgICAgZC0+cmVnaXN0ZXJzID0gcmVpbnRl
cnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwogICAgICAgICBkLT5jYWxsZWUu
c2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBjYWxsZWUpOwogICAgICAgICBkLT5v
dmVycm9kZUxlbmd0aCA9IGZhbHNlOwogICAgICAgICBkLT5vdmVycm9kZUNhbGxlZSA9IGZhbHNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJ
KHJldmlzaW9uIDEyNjY3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDYgQEAgRnVuY3Rpb25FeGVj
dXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoSgogICAgICwgbV9wYXJhbWV0ZXJzKHBhcmFtZXRl
cnMpCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAsIG1faW5mZXJyZWROYW1lKGluZmVycmVkTmFt
ZS5pc051bGwoKSA/IGdsb2JhbERhdGEucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyIDog
aW5mZXJyZWROYW1lKQotICAgICwgbV9zeW1ib2xUYWJsZSgwKQogewogfQogCkBAIC0xNTEsNyAr
MTUwLDYgQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoRQogICAgICwg
bV9wYXJhbWV0ZXJzKHBhcmFtZXRlcnMpCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAsIG1faW5m
ZXJyZWROYW1lKGluZmVycmVkTmFtZS5pc051bGwoKSA/IGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9w
ZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIgOiBpbmZlcnJlZE5hbWUpCi0gICAgLCBtX3N5bWJv
bFRhYmxlKDApCiB7CiB9CiAKQEAgLTM0OSw3ICszNDcsNyBAQCBKU09iamVjdCogUHJvZ3JhbUV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAgICAgICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3Vz
Q29kZUJsb2NrID0gbV9wcm9ncmFtQ29kZUJsb2NrLnJlbGVhc2UoKTsKICAgICAgICAgQVNTRVJU
KChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJs
b2NrKTsKICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFByb2dyYW1D
b2RlQmxvY2sodGhpcywgR2xvYmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRl
cigpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKLSAgICAgICAgT3duUHRyPEJ5dGVj
b2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHBy
b2dyYW1Ob2RlLmdldCgpLCBzY29wZUNoYWluTm9kZSwgJmdsb2JhbE9iamVjdC0+c3ltYm9sVGFi
bGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpLCAhIW1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24pKSk7
CisgICAgICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5l
dyBCeXRlY29kZUdlbmVyYXRvcihwcm9ncmFtTm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIGds
b2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpLCAhIW1f
cHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6
IEZpcnN0Q29tcGlsYXRpb24pKSk7CiAgICAgICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9y
LT5nZW5lcmF0ZSgpKSkgewogICAgICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gc3RhdGlj
X3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2stPnJlbGVh
c2VBbHRlcm5hdGl2ZSgpKTsKICAgICAgICAgICAgIHByb2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgp
OwpAQCAtNTI2LDcgKzUyNCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVGb3IKICAgICBtX251bVBhcmFtZXRlcnNGb3JDYWxsID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgQVNTRVJUKG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwpOwogICAg
IG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPm1fbnVtQ2FwdHVy
ZWRWYXJzOwotICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPnNoYXJlZFN5
bWJvbFRhYmxlKCk7CisgICAgbV9zeW1ib2xUYWJsZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBtX2NvZGVCbG9ja0ZvckNhbGwtPnN5bWJvbFRhYmxlKCkpOwogCiAjaWYgRU5BQkxFKEpJ
VCkKICAgICBpZiAoIXByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9j
a0ZvckNhbGwsIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
aywgbV9zeW1ib2xUYWJsZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNhbGwpKQpA
QCAtNTY5LDcgKzU2Nyw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVG
b3IKICAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QgPSBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC0+bnVtUGFyYW1ldGVycygpOwogICAgIEFTU0VSVChtX251bVBhcmFtZXRlcnNGb3JDb25z
dHJ1Y3QpOwogICAgIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMgPSBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC0+bV9udW1DYXB0dXJlZFZhcnM7Ci0gICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0LT5zaGFyZWRTeW1ib2xUYWJsZSgpOworICAgIG1fc3ltYm9sVGFibGUuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnN5bWJv
bFRhYmxlKCkpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoIXByZXBhcmVGdW5jdGlvbkZv
ckV4ZWN1dGlvbihleGVjLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCwgbV9qaXRDb2RlRm9yQ29u
c3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgbV9zeW1ib2xUYWJs
ZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNvbnN0cnVjdCkpCkBAIC02MTUsNiAr
NjEzLDggQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIFNj
cmlwdEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAg
aWYgKHRoaXNPYmplY3QtPm1fbmFtZVZhbHVlKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9uYW1lVmFsdWUpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxl
KQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zeW1ib2xUYWJsZSk7CiAg
ICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ2FsbCkKICAgICAgICAgdGhpc09iamVj
dC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICBpZiAo
dGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxMjY2NzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2Miw3ICs2NjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IHBhcmFtZXRl
ckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0gLy8gRXhjbHVk
aW5nICd0aGlzJyEKICAgICAgICAgdW5zaWduZWQgY2FwdHVyZWRWYXJpYWJsZUNvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9udW1DYXB0dXJlZFZhcmlhYmxlczsgfQogICAgICAgICBVU3RyaW5nIHBh
cmFtU3RyaW5nKCkgY29uc3Q7Ci0gICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ltYm9sVGFibGU7IH0KKyAgICAgICAgU2hhcmVkU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zeW1ib2xUYWJsZS5nZXQoKTsg
fQogCiAgICAgICAgIHZvaWQgY2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKICAgICAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpAQCAtNzIzLDcg
KzcyMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBJZGVudGlmaWVyIG1fbmFtZTsKICAg
ICAgICAgSWRlbnRpZmllciBtX2luZmVycmVkTmFtZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPEpT
U3RyaW5nPiBtX25hbWVWYWx1ZTsKLSAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIG1fc3ltYm9s
VGFibGU7CisgICAgICAgIFdyaXRlQmFycmllcjxTaGFyZWRTeW1ib2xUYWJsZT4gbV9zeW1ib2xU
YWJsZTsKICAgICB9OwogCiAgICAgaW5saW5lIEZ1bmN0aW9uRXhlY3V0YWJsZSogSlNGdW5jdGlv
bjo6anNFeGVjdXRhYmxlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJKHJldmlzaW9uIDEyNjY3OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksNyArNDksNyBAQCBpbmxpbmUgYm9vbCBwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNT
dGF0CiAgICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIGNvZGVCbG9jaywg
aml0Q29kZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUo
aml0VHlwZSkgPyBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkIDogSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKIH0KIAotaW5saW5lIGJvb2wgcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgY29kZUJsb2NrLCBKSVRDb2Rl
JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywg
U2hhcmVkU3ltYm9sVGFibGUqJiBzeW1ib2xUYWJsZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBl
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitp
bmxpbmUgYm9vbCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBP
d25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBXcml0ZUJhcnJpZXI8
U2hhcmVkU3ltYm9sVGFibGU+JiBzeW1ib2xUYWJsZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBl
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7
CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRU
eXBlKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uY3BwCShyZXZpc2lvbiAxMjY2NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw4IEBAIEFT
U0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBY3RpdmF0aW9uKTsKIGNvbnN0IENsYXNzSW5mbyBK
U0FjdGl2YXRpb246OnNfaW5mbyA9IHsgIkpTQWN0aXZhdGlvbiIsICZCYXNlOjpzX2luZm8sIDAs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBY3RpdmF0aW9uKSB9OwogCiBKU0FjdGl2YXRpb246
OkpTQWN0aXZhdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4ZWN1dGFibGUpCi0gICAgOiBCYXNlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKS5hY3RpdmF0aW9uU3RydWN0dXJlLmdldCgpLCBmdW5jdGlv
bkV4ZWN1dGFibGUtPnN5bWJvbFRhYmxlKCksIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpCisgICAg
OiBCYXNlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5h
Y3RpdmF0aW9uU3RydWN0dXJlLmdldCgpLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpKQorICAgICwg
bV9yZWdpc3RlckFycmF5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCB0aGlzLCAwKQogICAgICwg
bV9udW1DYXB0dXJlZEFyZ3MobWF4KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpLCBmdW5jdGlv
bkV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCkpKQogICAgICwgbV9udW1DYXB0dXJlZFZhcnMo
ZnVuY3Rpb25FeGVjdXRhYmxlLT5jYXB0dXJlZFZhcmlhYmxlQ291bnQoKSkKICAgICAsIG1faXNU
b3JuT2ZmKGZhbHNlKQpAQCAtNTEsMjAgKzUyLDEwIEBAIEpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0
aW9uKENhbGxGcmFtZSogY2EKIHsKIH0KIAotdm9pZCBKU0FjdGl2YXRpb246OmZpbmlzaENyZWF0
aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lKQordm9pZCBKU0FjdGl2YXRpb246OmZpbmlzaENyZWF0
aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+c3ltYm9sVGFibGUoKSk7CiAgICAgQVNTRVJUKGluaGVyaXRz
KCZzX2luZm8pKTsKLQotICAgIC8vIFdlIGhhdmUgdG8gbWFudWFsbHkgcmVmIGFuZCBkZXJlZiB0
aGUgc3ltYm9sIHRhYmxlIGFzIEpTVmFyaWFibGVPYmplY3QKLSAgICAvLyBkb2Vzbid0IGtub3cg
YWJvdXQgU2hhcmVkU3ltYm9sVGFibGUKLSAgICBzdGF0aWNfY2FzdDxTaGFyZWRTeW1ib2xUYWJs
ZSo+KG1fc3ltYm9sVGFibGUpLT5yZWYoKTsKLSAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5o
ZWFwLmFkZEZpbmFsaXplcih0aGlzLCAmZmluYWxpemUpOwotfQotCi12b2lkIEpTQWN0aXZhdGlv
bjo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0PFNoYXJlZFN5bWJv
bFRhYmxlKj4oanNDYXN0PEpTQWN0aXZhdGlvbio+KGNlbGwpLT5tX3N5bWJvbFRhYmxlKS0+ZGVy
ZWYoKTsKIH0KIAogdm9pZCBKU0FjdGl2YXRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTc2LDIzICs2NywyMyBAQCB2b2lkIEpTQWN0aXZh
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIAogICAgIC8vIE5vIG5lZWQgdG8gbWFyayBvdXIgcmVnaXN0ZXJz
IGlmIHRoZXkncmUgc3RpbGwgaW4gdGhlIFJlZ2lzdGVyRmlsZS4KLSAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHJlZ2lzdGVyQXJyYXkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkuZ2V0
KCk7CisgICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJyYXkgPSB0aGlzT2JqZWN0LT5tX3Jl
Z2lzdGVyQXJyYXkuZ2V0KCk7CiAgICAgaWYgKCFyZWdpc3RlckFycmF5KQogICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMocmVnaXN0ZXJBcnJheSwgdGhpc09i
amVjdC0+bV9udW1DYXB0dXJlZEFyZ3MpOwogCi0gICAgLy8gU2tpcCAndGhpcycgYW5kIGNhbGwg
ZnJhbWUsIGV4Y2VwdCBmb3IgY2FsbGVlIGFuZCBzY29wZSBjaGFpbi4KLSAgICBpbnQgb2Zmc2V0
ID0gQ2FsbEZyYW1lOjpvZmZzZXRGb3IodGhpc09iamVjdC0+bV9udW1DYXB0dXJlZEFyZ3MgKyAx
KTsKLSAgICB2aXNpdG9yLmFwcGVuZChyZWdpc3RlckFycmF5ICsgb2Zmc2V0ICsgUmVnaXN0ZXJG
aWxlOjpTY29wZUNoYWluKTsKLSAgICB2aXNpdG9yLmFwcGVuZChyZWdpc3RlckFycmF5ICsgb2Zm
c2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpOwotICAgIAotICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKHJlZ2lzdGVyQXJyYXkgKyBvZmZzZXQsIHRoaXNPYmplY3QtPm1fbnVtQ2FwdHVyZWRWYXJz
KTsKKyAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZy
ZWdpc3RlckFycmF5KSwgdGhpc09iamVjdC0+cmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlZ2lzdGVyQXJyYXkpLCB0aGlzT2JqZWN0LT5yZWdp
c3RlckFycmF5U2l6ZSgpKTsKKyAgICB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkuc2V0KHJl
Z2lzdGVyQXJyYXksIFN0b3JhZ2VCYXJyaWVyOjpVbmNoZWNrZWQpOworICAgIHRoaXNPYmplY3Qt
Pm1fcmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheSArIHRoaXNPYmplY3QtPnJlZ2lzdGVyT2Zmc2V0
KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIGFyZ3VtZW50cyBvYmplY3QsIHNpbmNlIGl0IHBvaW50
cyBhdCBvdXIgYnVmZmVyLgorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpj
cmVhdGUocmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJz
KSk7CisgICAgaWYgKEpTVmFsdWUgdiA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUih1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIodGhpc09iamVjdC0+bV9hcmd1bWVudHNSZWdpc3RlcikpLmpzVmFs
dWUoKSkKKyAgICAgICAganNDYXN0PEFyZ3VtZW50cyo+KHYpLT5zZXRSZWdpc3RlcnModGhpc09i
amVjdC0+bV9yZWdpc3RlcnMpOwogfQogCiBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJv
bFRhYmxlR2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKLSAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5pbmxpbmVHZXQo
cHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CisgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9
IHN5bWJvbFRhYmxlKCktPmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKICAg
ICBpZiAoZW50cnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9p
c1Rvcm5PZmYgJiYgZW50cnkuZ2V0SW5kZXgoKSA+PSBtX251bUNhcHR1cmVkVmFycykKQEAgLTEw
Nyw3ICs5OCw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQKICAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgQVNT
RVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFw
KHRoaXMpKTsKICAgICAKLSAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUo
KS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CisgICAgU3ltYm9sVGFibGVF
bnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCktPmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpKTsKICAgICBpZiAoZW50cnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKSB7CkBAIC0xMjUsOCArMTE2LDggQEAgaW5saW5l
IGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dAogdm9pZCBKU0FjdGl2YXRpb246Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAg
ICAgSlNBY3RpdmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQWN0aXZhdGlvbio+KG9iamVj
dCk7Ci0gICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlKCkuZW5kKCk7Ci0gICAgZm9yIChTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1i
b2xUYWJsZSgpLT5lbmQoKTsKKyAgICBmb3IgKFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBp
dCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICBpZiAoaXQtPnNlY29uZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSAmJiBt
b2RlICE9IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgaWYgKGl0LT5zZWNvbmQuZ2V0SW5kZXgoKSA+PSB0aGlzT2JqZWN0LT5tX251bUNh
cHR1cmVkVmFycykKQEAgLTE0MSw4ICsxMzIsOCBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246
OnN5bWJvbFRhYmxlUHV0CiB7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFw
OjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKICAgICAKLSAgICBTeW1ib2xUYWJs
ZTo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlKCkuZmluZChwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpKTsKLSAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZSgpLmVuZCgpKQorICAgIFN5bWJv
bFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUoKS0+ZmluZChwcm9wZXJ0eU5hbWUu
cHVibGljTmFtZSgpKTsKKyAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZSgpLT5lbmQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+
c2Vjb25kOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDEyNjY3OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OSwxMiArNDksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBK
U0FjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjKQogICAgICAgICB7CiAgICAg
ICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FjdGl2YXRpb24+KGdsb2JhbERhdGEuaGVhcCkpIEpTQWN0aXZhdGlvbihjYWxsRnJh
bWUsIGZ1bmNFeGVjKTsKLSAgICAgICAgICAgIGFjdGl2YXRpb24tPmZpbmlzaENyZWF0aW9uKGNh
bGxGcmFtZSk7CisgICAgICAgICAgICBhY3RpdmF0aW9uLT5maW5pc2hDcmVhdGlvbihjYWxsRnJh
bWUsIGZ1bmNFeGVjKTsKICAgICAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7Ci0KICAgICAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgICAg
IGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsK
QEAgLTc4LDggKzc2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNWYWxpZFNj
b3BlZExvb2t1cChpbnQgaW5kZXgpIHsgcmV0dXJuIGluZGV4IDwgbV9udW1DYXB0dXJlZFZhcnM7
IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihDYWxsRnJh
bWUqKTsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSXNF
bnZpcm9ubWVudFJlY29yZCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNWYXJpYWJsZU9i
amVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oQ2FsbEZy
YW1lKiwgRnVuY3Rpb25FeGVjdXRhYmxlKik7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVy
dHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
Ym9vbCBzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpAQCAtOTEs
NiArODksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlIGFyZ3Vt
ZW50c0dldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICBO
RVZFUl9JTkxJTkUgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVy
KCk7CiAKKyAgICAgICAgc2l6ZV90IHJlZ2lzdGVyT2Zmc2V0KCk7CisgICAgICAgIHNpemVfdCBy
ZWdpc3RlckFycmF5U2l6ZSgpOworICAgICAgICBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5
dGVzKCk7CisKKyAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9yZWdpc3RlckFycmF5OyAvLyBJbmRl
cGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVuIGEgdmFyaWFibGUgb2JqZWN0IGNv
cGllcyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0ZXIgZmlsZS4KICAgICAgICAgaW50
IG1fbnVtQ2FwdHVyZWRBcmdzOwogICAgICAgICBpbnQgbV9udW1DYXB0dXJlZFZhcnMgOiAzMDsK
ICAgICAgICAgYm9vbCBtX2lzVG9ybk9mZiA6IDE7CkBAIC0xMTcsMjMgKzEyMCw1MSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIGlubGluZSBz
aXplX3QgSlNBY3RpdmF0aW9uOjpyZWdpc3Rlck9mZnNldCgpCisgICAgeworICAgICAgICBzaXpl
X3QgY2FwdHVyZWRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IG1fbnVtQ2FwdHVyZWRBcmdz
ICsgMTsKKyAgICAgICAgcmV0dXJuIENhbGxGcmFtZTo6b2Zmc2V0Rm9yKGNhcHR1cmVkQXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgIH0KKworICAgIGlubGluZSBzaXplX3QgSlNBY3Rp
dmF0aW9uOjpyZWdpc3RlckFycmF5U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVnaXN0
ZXJPZmZzZXQoKSArIG1fbnVtQ2FwdHVyZWRWYXJzOworICAgIH0KKworICAgIGlubGluZSBzaXpl
X3QgSlNBY3RpdmF0aW9uOjpyZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlZ2lzdGVyQXJyYXlTaXplKCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPik7CisgICAgfQorCiAgICAgaW5saW5lIHZvaWQgSlNBY3RpdmF0aW9uOjp0ZWFyT2Zm
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9yZWdp
c3RlckFycmF5KTsKICAgICAgICAgQVNTRVJUKG1fbnVtQ2FwdHVyZWRWYXJzICsgbV9udW1DYXB0
dXJlZEFyZ3MpOwogCi0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IENhbGxGcmFtZTo6b2Zm
c2V0Rm9yKG1fbnVtQ2FwdHVyZWRBcmdzICsgMSk7Ci0gICAgICAgIHNpemVfdCByZWdpc3RlckFy
cmF5U2l6ZSA9IHJlZ2lzdGVyT2Zmc2V0ICsgbV9udW1DYXB0dXJlZFZhcnM7Ci0KLSAgICAgICAg
T3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSA9IGFkb3B0
QXJyYXlQdHIobmV3IFdyaXRlQmFycmllcjxVbmtub3duPltyZWdpc3RlckFycmF5U2l6ZV0pOwot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXku
Z2V0KCkgKyByZWdpc3Rlck9mZnNldDsKKyAgICAgICAgdm9pZCogYWxsb2NhdGlvbiA9IDA7Cisg
ICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShyZWdpc3RlckFy
cmF5U2l6ZUluQnl0ZXMoKSwgJmFsbG9jYXRpb24pKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJyYXkgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0
eVN0b3JhZ2U+KGFsbG9jYXRpb24pOworICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXJz
ID0gcmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVyT2Zmc2V0KCk7CiAKKyAgICAgICAgLy8gYXJndW1l
bnRzCiAgICAgICAgIGludCBmcm9tID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChtX251bUNh
cHR1cmVkQXJncyAtIDEpOwotICAgICAgICBpbnQgdG8gPSBtX251bUNhcHR1cmVkVmFyczsKKyAg
ICAgICAgaW50IHRvID0gQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgLy8gU2tpcCAn
dGhpcycgYmVjYXVzZSBpdCdzIG5vdCBsZXhpY2FsbHkgYWNjZXNzaWJsZS4KKyAgICAgICAgZm9y
IChpbnQgaSA9IGZyb207IGkgPCB0bzsgKytpKQorICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBtX3JlZ2lzdGVyc1tpXS5nZXQoKSk7CisKKyAgICAgICAgLy8g
Q2FsbEZyYW1lCisgICAgICAgIHJlZ2lzdGVyc1tSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5dLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBtX3JlZ2lzdGVyc1tSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5d
LmdldCgpKTsKKyAgICAgICAgcmVnaXN0ZXJzW1JlZ2lzdGVyRmlsZTo6Q2FsbGVlXS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgbV9yZWdpc3RlcnNbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdLmdldCgpKTsK
KworICAgICAgICAvLyB2YXJzCisgICAgICAgIGZyb20gPSAwOworICAgICAgICB0byA9IG1fbnVt
Q2FwdHVyZWRWYXJzOwogICAgICAgICBmb3IgKGludCBpID0gZnJvbTsgaSA8IHRvOyArK2kpCiAg
ICAgICAgICAgICByZWdpc3RlcnNbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0ZXJz
W2ldLmdldCgpKTsKIAotICAgICAgICBzZXRSZWdpc3RlcnMocmVnaXN0ZXJzLCByZWdpc3RlckFy
cmF5LnJlbGVhc2UoKSk7CisgICAgICAgIG1fcmVnaXN0ZXJBcnJheS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgcmVnaXN0ZXJBcnJheSk7CisgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVnaXN0ZXJzOwog
ICAgICAgICBtX2lzVG9ybk9mZiA9IHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTI2Njc5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGZyaWVuZCB2
b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYpOwogCiAgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSAwOworCiAgICAgICAgIGVudW0gQ3JlYXRp
bmdFYXJseUNlbGxUYWcgeyBDcmVhdGluZ0Vhcmx5Q2VsbCB9OwogICAgICAgICBKU0NlbGwoQ3Jl
YXRpbmdFYXJseUNlbGxUYWcpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEyNjY3OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
Myw2ICsyMDMsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAg
ICAgcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtRXhlY3V0YWJs
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGZ1bmN0aW9uRXhl
Y3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHJlZ0V4cFN0cnVjdHVyZS5zZXQoKnRo
aXMsIFJlZ0V4cDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHNo
YXJlZFN5bWJvbFRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgU2hhcmVkU3ltYm9sVGFibGU6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzdHJ1Y3R1cmVDaGFpblN0
cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZUNoYWluOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CiAKICAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZp
ZXJUYWJsZShleGlzdGluZ0VudHJ5SWRlbnRpZmllclRhYmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMjY2NzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMjM4LDYgKzIzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8
U3RydWN0dXJlPiBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiByZWdFeHBTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHNoYXJl
ZFN5bWJvbFRhYmxlU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1
cmVDaGFpblN0cnVjdHVyZTsKIAogICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJU
YWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHJldmlzaW9uIDEyNjY3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIHZvaWQKIH0KIAogSlNHbG9i
YWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSkKLSAgICA6IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCAmbV9zeW1ib2xUYWJsZSkKKyAgICA6IEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQogICAgICwgbV9nbG9iYWxTY29wZUNoYWluKCkK
ICAgICAsIG1fbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoYWRvcHRSZWYobmV3IFdh
dGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykpKQogICAgICwgbV93ZWFrUmFuZG9tKE9w
dGlvbnM6OmZvcmNlV2Vha1JhbmRvbVNlZWQoKSA/IE9wdGlvbnM6OmZvcmNlZFdlYWtSYW5kb21T
ZWVkKCkgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSkpCkBAIC00MTQsOSArNDE0LDkgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyhHbAogICAgICAgICBHbG9iYWxQ
cm9wZXJ0eUluZm8mIGdsb2JhbCA9IGdsb2JhbHNbaV07CiAgICAgICAgIEFTU0VSVChnbG9iYWwu
YXR0cmlidXRlcyAmIERvbnREZWxldGUpOwogICAgICAgICAKLSAgICAgICAgaW50IGluZGV4ID0g
c3ltYm9sVGFibGUoKS5zaXplKCk7CisgICAgICAgIGludCBpbmRleCA9IHN5bWJvbFRhYmxlKCkt
PnNpemUoKTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgZ2xvYmFs
LmF0dHJpYnV0ZXMpOwotICAgICAgICBzeW1ib2xUYWJsZSgpLmFkZChnbG9iYWwuaWRlbnRpZmll
ci5pbXBsKCksIG5ld0VudHJ5KTsKKyAgICAgICAgc3ltYm9sVGFibGUoKS0+YWRkKGdsb2JhbC5p
ZGVudGlmaWVyLmltcGwoKSwgbmV3RW50cnkpOwogICAgICAgICByZWdpc3RlckF0KGluZGV4KS5z
ZXQoZ2xvYmFsRGF0YSgpLCB0aGlzLCBnbG9iYWwudmFsdWUpOwogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNp
b24gMTI2Njc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDggKzE0OSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIFdlYWtSYW5kb20gbV93ZWFrUmFuZG9tOwogCi0gICAgICAgIFN5bWJvbFRhYmxl
IG1fc3ltYm9sVGFibGU7Ci0KICAgICAgICAgYm9vbCBtX2V2YWxFbmFibGVkOwogICAgICAgICBi
b29sIG1fZXhwZXJpbWVudHNFbmFibGVkOwogCkBAIC0zNzYsNyArMzc0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBpbmxpbmUgYm9vbCBKU0dsb2JhbE9iamVjdDo6c3ltYm9sVGFibGVIYXNQ
cm9wZXJ0eShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIHsKLSAgICAgICAgU3ltYm9s
VGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5w
dWJsaWNOYW1lKCkpOworICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFi
bGUoKS0+aW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAgICAgICByZXR1
cm4gIWVudHJ5LmlzTnVsbCgpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjY2NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsOCArMzE0LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSAwOwotCiAgICAgICAgIC8vIFRvIGluc3Rh
bnRpYXRlIG9iamVjdHMgeW91IGxpa2VseSB3YW50IEpTRmluYWxPYmplY3QsIGJlbG93LgogICAg
ICAgICAvLyBUbyBjcmVhdGUgZGVyaXZlZCB0eXBlcyB5b3UgbGlrZWx5IHdhbnQgSlNOb25GaW5h
bE9iamVjdCwgYmVsb3cuCiAgICAgICAgIEpTT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMTI2Njc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw4ICs4Miw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVu
IHwgSlNTeW1ib2xUYWJsZU9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKLSAgICBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLSAgICAgICAgOiBKU1N5bWJvbFRhYmxl
T2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgc3ltYm9sVGFibGUpCisgICAgSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgICAgICA6IEpTU3ltYm9sVGFibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMjY2NzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDYgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VM
TChKU1N0YXRpY1Njb3BlTwogCiBjb25zdCBDbGFzc0luZm8gSlNTdGF0aWNTY29wZU9iamVjdDo6
c19pbmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1N0YXRpY1Njb3BlT2JqZWN0KSB9OwogCi12b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6
OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0PEpTU3RhdGljU2NvcGVP
YmplY3QqPihjZWxsKS0+SlNTdGF0aWNTY29wZU9iamVjdDo6fkpTU3RhdGljU2NvcGVPYmplY3Qo
KTsKLX0KLQogdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTdGF0aWNTY29wZU9iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oY2VsbCk7CkBAIC00Niw3
ICs0MSw4IEBAIHZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6dmlzaXRDaGlsZHJlbigKICAgICBD
T01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkp
OwogICAgIEpTVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmVnaXN0ZXJTdG9yZSk7Cisg
ICAgaWYgKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJTdG9yZSkKKyAgICAgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fcmVnaXN0ZXJTdG9yZSk7CiB9CiAKIEpTT2JqZWN0KiBKU1N0YXRp
Y1Njb3BlT2JqZWN0Ojp0b1RoaXNPYmplY3QoSlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVP
YmplY3QuaAkocmV2aXNpb24gMTI2Njc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxOSArNTgsMTYg
QEAgbmFtZXNwYWNlIEpTQ3sKICAgICAgICAgewogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJTdG9yZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICBzeW1ib2xU
YWJsZSgpLmFkZChpZGVudGlmaWVyLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeSgtMSwgYXR0cmli
dXRlcykpOworICAgICAgICAgICAgc3ltYm9sVGFibGUoKS0+YWRkKGlkZW50aWZpZXIuaW1wbCgp
LCBTeW1ib2xUYWJsZUVudHJ5KC0xLCBhdHRyaWJ1dGVzKSk7CiAgICAgICAgIH0KICAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSXNFbnZpcm9ubWVudFJlY29y
ZCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNWYXJpYWJsZU9iamVjdDo6U3RydWN0dXJl
RmxhZ3M7CiAKICAgICBwcml2YXRlOgogICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYykKLSAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChleGVjLT5nbG9iYWxE
YXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5zdGF0aWNTY29wZVN0cnVjdHVyZS5nZXQoKSwgJm1f
c3ltYm9sVGFibGUsIHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmbV9yZWdpc3RlclN0b3Jl
ICsgMSkpCisgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBleGVjLT5nbG9iYWxEYXRhKCkuc3RhdGljU2NvcGVTdHJ1Y3R1cmUuZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8UmVnaXN0ZXIqPigmbV9yZWdpc3RlclN0b3JlICsgMSkpCiAgICAgICAgIHsKICAg
ICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICAg
ICAgU3ltYm9sVGFibGUgbV9zeW1ib2xUYWJsZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+IG1fcmVnaXN0ZXJTdG9yZTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24g
MTI2Njc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE1ICszNiwyMSBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
K3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIHN0YXRpY19jYXN0PEpTU3ltYm9sVGFibGVPYmpl
Y3QqPihjZWxsKS0+SlNTeW1ib2xUYWJsZU9iamVjdDo6fkpTU3ltYm9sVGFibGVPYmplY3QoKTsK
KyAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFi
bGVPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsICZzX2luZm8pOworICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxh
Zyk7CisgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CisgICAgSlNOb25GaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9zeW1ib2xUYWJs
ZSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUpOwog
fQogCiBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpT
U3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVj
dCo+KGNlbGwpOwotICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmNvbnRhaW5zKHBy
b3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpKQorICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLT5jb250YWlucyhwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwpAQCAtNTMsOCArNTksOCBAQCBib29sIEpTU3ltYm9sVGFi
bGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5CiB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAg
SlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2Jq
ZWN0Kj4ob2JqZWN0KTsKLSAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhp
c09iamVjdC0+c3ltYm9sVGFibGUoKS5lbmQoKTsKLSAgICBmb3IgKFN5bWJvbFRhYmxlOjpjb25z
dF9pdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNP
YmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZCgpOworICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgIGlmICghKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYg
RG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQogICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkp
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxMjY2NzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDkgKzM5LDcgQEAgY2xhc3MgSlNTeW1ib2xUYWJsZU9iamVjdCA6IHB1YmxpYyBKU05vbgog
cHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogICAgIAotICAgIFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuICptX3N5bWJvbFRhYmxlOyB9
Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKKyAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBt
X3N5bWJvbFRhYmxlLmdldCgpOyB9CiAgICAgCiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9f
QVNTRVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgCkBAIC01MSwyOCAr
NDksMzEgQEAgcHVibGljOgogICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNE
eW5hbWljQ2hlY2tzKSBjb25zdDsKICAgICAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNO
b25GaW5hbE9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFBy
b3BlcnR5TmFtZXMgfCBKU05vbkZpbmFsT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICAKLSAg
ICBKU1N5bWJvbFRhYmxlT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKKyAgICBKU1N5bWJvbFRhYmxl
T2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgICAg
ICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKICAgICB7CiAgICAgfQotICAgIAotICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorCisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFNoYXJlZFN5bWJvbFRhYmxl
KiBzeW1ib2xUYWJsZSA9IDApCiAgICAgewogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKLSAgICAgICAgQVNTRVJUKG1fc3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
IXN5bWJvbFRhYmxlKQorICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBTaGFyZWRTeW1ib2xUYWJs
ZTo6Y3JlYXRlKGdsb2JhbERhdGEpOworICAgICAgICBtX3N5bWJvbFRhYmxlLnNldChnbG9iYWxE
YXRhLCB0aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAgfQotICAgIAotICAgIFN5bWJvbFRhYmxlKiBt
X3N5bWJvbFRhYmxlOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCisgICAgV3JpdGVCYXJyaWVyPFNoYXJlZFN5bWJvbFRhYmxlPiBtX3N5
bWJvbFRhYmxlOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9sVGFibGVPYmplY3RUeXBl
PgogaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGVPYmplY3RUeXBl
KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKLSAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSBvYmplY3QtPnN5bWJvbFRhYmxlKCk7
CisgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsK
ICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlLmZpbmQocHJvcGVy
dHlOYW1lLnB1YmxpY05hbWUoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg2LDcgKzg3LDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgU3ltYm9sVGFibGVPYmplY3RUeXBlPgogaW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCiAg
ICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKLSAgICBTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUgPSBvYmplY3QtPnN5bWJvbFRhYmxlKCk7CisgICAgU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsKICAgICBTeW1ib2xUYWJsZTo6aXRl
cmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlLmZpbmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7
CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTEwMiw3ICsxMDMsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKICAgICBT
eW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90LAogICAgIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSkKIHsKLSAgICBT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSBvYmplY3QtPnN5bWJvbFRhYmxlKCk7CisgICAgU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsKICAgICBTeW1i
b2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlLmZpbmQocHJvcGVydHlOYW1lLnB1
YmxpY05hbWUoKSk7CiAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTEyMSw3ICsxMjIsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJs
ZVB1dCgKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBI
ZWFwOjpoZWFwKG9iamVjdCkpOwogICAgIAotICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9
IG9iamVjdC0+c3ltYm9sVGFibGUoKTsKKyAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSAq
b2JqZWN0LT5zeW1ib2xUYWJsZSgpOwogICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0g
c3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKICAgICBpZiAoaXRl
ciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQ2LDgg
KzE0Nyw4IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKIHsKICAg
ICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6
OmhlYXAob2JqZWN0KSk7CiAgICAgCi0gICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBv
YmplY3QtPnN5bWJvbFRhYmxlKCkuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAg
ICBpZiAoaXRlciA9PSBvYmplY3QtPnN5bWJvbFRhYmxlKCkuZW5kKCkpCisgICAgU3ltYm9sVGFi
bGU6Oml0ZXJhdG9yIGl0ZXIgPSBvYmplY3QtPnN5bWJvbFRhYmxlKCktPmZpbmQocHJvcGVydHlO
YW1lLnB1YmxpY05hbWUoKSk7CisgICAgaWYgKGl0ZXIgPT0gb2JqZWN0LT5zeW1ib2xUYWJsZSgp
LT5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFN5bWJvbFRhYmxlRW50cnkmIGVu
dHJ5ID0gaXRlci0+c2Vjb25kOwogICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5j
cHAJKHJldmlzaW9uIDEyNjY3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VmFyaWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw0IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi12b2lkIEpTVmFyaWFibGVPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQotewotICAgIHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3QqPihjZWxsKS0+SlNWYXJp
YWJsZU9iamVjdDo6fkpTVmFyaWFibGVPYmplY3QoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9i
amVjdC5oCShyZXZpc2lvbiAxMjY2NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDUzICs0OCwyOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNTeW1ib2xUYWJs
ZU9iamVjdCBCYXNlOwogCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgcmVnaXN0ZXJB
dChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQorICAgICAg
ICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiByZWdpc3RlckF0KGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CiAKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBjb25zdCAqIGFkZHJlc3NPZlJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuICZtX3Jl
Z2lzdGVyczsgfQorICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBjb25zdCAqIGFk
ZHJlc3NPZlJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuICZtX3JlZ2lzdGVyczsgfQogICAgICAg
ICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mUmVnaXN0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTVmFyaWFibGVPYmplY3QsIG1fcmVnaXN0ZXJzKTsgfQogCi0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KICAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTU3ltYm9s
VGFibGVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCi0gICAgICAgIEpTVmFyaWFibGVPYmplY3Qo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlLCBSZWdpc3RlciogcmVnaXN0ZXJzKQotICAgICAgICAgICAgOiBKU1N5
bWJvbFRhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgc3ltYm9sVGFibGUpCi0gICAg
ICAgICAgICAsIG1fcmVnaXN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25v
d24+Kj4ocmVnaXN0ZXJzKSkKKyAgICAgICAgSlNWYXJpYWJsZU9iamVjdChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWdpc3RlciogcmVnaXN0ZXJzKQor
ICAgICAgICAgICAgOiBKU1N5bWJvbFRhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkK
KyAgICAgICAgICAgICwgbV9yZWdpc3RlcnMocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+Kj4ocmVnaXN0ZXJzKSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTaGFyZWRTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUgPSAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pID09IHNpemVvZihSZWdpc3RlciksIFJlZ2lzdGVy
X3Nob3VsZF9iZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJyaWVyKTsKKyAgICAgICAgICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSA9PSBzaXplb2Yo
UmVnaXN0ZXIpLCBSZWdpc3Rlcl9zaG91bGRfYmVfc2FtZV9zaXplX2FzX1dyaXRlQmFycmllckJh
c2UpOwogICAgICAgICB9CiAKLSAgICAgICAgUGFzc093bkFycmF5UHRyPFdyaXRlQmFycmllcjxV
bmtub3duPiA+IGNvcHlSZWdpc3RlckFycmF5KEpTR2xvYmFsRGF0YSYsIFdyaXRlQmFycmllcjxV
bmtub3duPiogc3JjLCBzaXplX3QgY291bnQsIHNpemVfdCBjYWxsZnJhbWVTdGFydHMpOwotICAg
ICAgICB2b2lkIHNldFJlZ2lzdGVycyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycywg
UGFzc093bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXkpOwot
Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogbV9yZWdpc3RlcnM7IC8vICJyIiBpbiB0
aGUgcmVnaXN0ZXIgZmlsZS4KLSAgICAgICAgT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25v
d24+ID4gbV9yZWdpc3RlckFycmF5OyAvLyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVycywg
dXNlZCB3aGVuIGEgdmFyaWFibGUgb2JqZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0
aGUgcmVnaXN0ZXIgZmlsZS4KKyAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbV9y
ZWdpc3RlcnM7IC8vICJyIiBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4KICAgICB9OwogCi0gICAgaW5s
aW5lIFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiBKU1ZhcmlhYmxlT2Jq
ZWN0Ojpjb3B5UmVnaXN0ZXJBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFdyaXRlQmFy
cmllcjxVbmtub3duPiogc3JjLCBzaXplX3QgY291bnQsIHNpemVfdCBjYWxsZnJhbWVTdGFydHMp
Ci0gICAgewotICAgICAgICBPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdp
c3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W2NvdW50
XSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGZyYW1lU3RhcnRzOyBpKysp
Ci0gICAgICAgICAgICByZWdpc3RlckFycmF5W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzcmNb
aV0uZ2V0KCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gY2FsbGZyYW1lU3RhcnRzICsgUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAg
ICAgIHJlZ2lzdGVyQXJyYXlbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHNyY1tpXS5nZXQoKSk7
Ci0KLSAgICAgICAgcmV0dXJuIHJlZ2lzdGVyQXJyYXkucmVsZWFzZSgpOwotICAgIH0KLQotICAg
IGlubGluZSB2b2lkIEpTVmFyaWFibGVPYmplY3Q6OnNldFJlZ2lzdGVycyhXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3du
PiA+IHJlZ2lzdGVyQXJyYXkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVnaXN0ZXJBcnJheSAh
PSBtX3JlZ2lzdGVyQXJyYXkpOwotICAgICAgICBtX3JlZ2lzdGVyQXJyYXkgPSByZWdpc3RlckFy
cmF5OwotICAgICAgICBtX3JlZ2lzdGVycyA9IHJlZ2lzdGVyczsKLSAgICB9Ci0KIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNWYXJpYWJsZU9iamVjdF9oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgJKHJldmlzaW9uIDEy
NjY3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDggQEAgcHVibGljOgogICAgIAogICAgIENvbnN0
UHJvcGVydHlTdG9yYWdlIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQogICAgIFBy
b3BlcnR5U3RvcmFnZSBnZXQoKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhKCkgeyByZXR1cm4gIW1fc3RvcmFnZTsgfQogICAgIAogcHJpdmF0ZToKICAgICBQcm9w
ZXJ0eVN0b3JhZ2UgbV9zdG9yYWdlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTI2Njc5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjb25zdCBDbGFzc0luZm8gU2hhcmVkU3lt
Ym9sVGFibGU6OnNfaW5mbyA9IHsgIlNoYXJlZFN5bWJvbFRhYmxlIiwgMCwgMCwgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShTaGFyZWRTeW1ib2xUYWJsZSkgfTsKKwogU3ltYm9sVGFibGVFbnRyeSYg
U3ltYm9sVGFibGVFbnRyeTo6Y29weVNsb3coY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgb3RoZXIp
CiB7CiAgICAgQVNTRVJUKG90aGVyLmlzRmF0KCkpOwpAQCAtNDAsNiArNDIsMTIgQEAgU3ltYm9s
VGFibGVFbnRyeSYgU3ltYm9sVGFibGVFbnRyeTo6Y29weQogICAgIHJldHVybiAqdGhpczsKIH0K
IAordm9pZCBTaGFyZWRTeW1ib2xUYWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAg
U2hhcmVkU3ltYm9sVGFibGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxTaGFyZWRTeW1ib2xU
YWJsZSo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPlNoYXJlZFN5bWJvbFRhYmxlOjp+U2hhcmVk
U3ltYm9sVGFibGUoKTsKK30KKwogdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpmcmVlRmF0RW50cnlT
bG93KCkKIHsKICAgICBBU1NFUlQoaXNGYXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDEyNjY3OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
NSwxMiArMzI1LDI4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJl
ZlB0cjxTdHJpbmdJbXBsPiwgU3ltYm9sVGFibGVFbnRyeSwgSWRlbnRpZmllclJlcEhhc2gsIEhh
c2hUcmFpdHM8UmVmUHRyPFN0cmluZ0ltcGw+ID4sIFN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRz
PiBTeW1ib2xUYWJsZTsKIAotICAgIGNsYXNzIFNoYXJlZFN5bWJvbFRhYmxlIDogcHVibGljIFN5
bWJvbFRhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRTeW1ib2xUYWJsZT4gewotICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBjbGFzcyBTaGFyZWRTeW1ib2xUYWJsZSA6
IHB1YmxpYyBKU0NlbGwsIHB1YmxpYyBTeW1ib2xUYWJsZSB7CiAgICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRTeW1ib2xUYWJsZT4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYobmV3IFNoYXJlZFN5bWJvbFRhYmxlKTsgfQorICAgICAgICBzdGF0aWMgU2hhcmVk
U3ltYm9sVGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzaGFyZWRTeW1ib2xUYWJsZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFNoYXJlZFN5bWJvbFRhYmxlPihnbG9iYWxEYXRhLmhlYXAp
KSBTaGFyZWRTeW1ib2xUYWJsZShnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHNoYXJlZFN5bWJv
bFRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBz
aGFyZWRTeW1ib2xUYWJsZTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOworCisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKExl
YWZUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICB9CisKKyAgICAgICAg
c3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKwogICAgIHByaXZh
dGU6Ci0gICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKCkgeyB9CisgICAgICAgIFNoYXJlZFN5bWJv
bFRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgICAgIDogSlNDZWxsKGds
b2JhbERhdGEsIGdsb2JhbERhdGEuc2hhcmVkU3ltYm9sVGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCisg
ICAgICAgIHsKKyAgICAgICAgfQogICAgIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>
<flag name="review"
          id="171138"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="171139"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>