<?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>127750</bug_id>
          
          <creation_ts>2014-01-27 18:12:29 -0800</creation_ts>
          <short_desc>FTL should support GetById(Untyped:)</short_desc>
          <delta_ts>2014-01-30 14:55: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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>127830</blocked>
    
    <blocked>127746</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>972728</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-27 18:12:29 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973308</commentid>
    <comment_count>1</comment_count>
      <attachid>222555</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-28 22:43:38 -0800</bug_when>
    <thetext>Created attachment 222555
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973309</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-28 22:49:15 -0800</bug_when>
    <thetext>Heh, this reveals some bugs:

** The following JSC stress test failures have been introduced:
	internal-js-tests.yaml/V8v7/deltablue.js.ftl-no-cjit
	internal-js-tests.yaml/V8v7/deltablue.js.default-ftl
	sunspider-1.0/access-fannkuch.js.ftl-no-cjit-validate
	sunspider-1.0/access-fannkuch.js.ftl-no-cjit-osr-validation
	sunspider-1.0/access-fannkuch.js.ftl-eager-no-cjit
	sunspider-1.0/access-fannkuch.js.ftl-eager-no-cjit-osr-validation
	internal-js-tests.yaml/Kraken/stanford-crypto-aes.js.ftl-no-cjit
	v8-v6/v8-deltablue.js.ftl-eager-no-cjit
	v8-v6/v8-deltablue.js.ftl-eager-no-cjit-osr-validation

I am investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973583</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-29 19:48:17 -0800</bug_when>
    <thetext>Lol.  The bug is that LLVM may duplicate code that does patchpoints and stackmaps.  Our code gets confused by this, because we incorrectly assume that for a patchpoint/stackmap that we emit in IR, LLVM will only generate one copy in the resulting code.  That&apos;s clearly bogus.

This will require some fun reworking.  Since GetById(Untyped:) is relative straight-forward, I think I will just include the fix in the patch.  It&apos;ll take a while.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973590</commentid>
    <comment_count>4</comment_count>
      <attachid>222624</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-29 20:42:25 -0800</bug_when>
    <thetext>Created attachment 222624
more

Working on a fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973598</commentid>
    <comment_count>5</comment_count>
      <attachid>222626</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-29 22:25:52 -0800</bug_when>
    <thetext>Created attachment 222626
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973604</commentid>
    <comment_count>6</comment_count>
      <attachid>222629</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-29 23:18:31 -0800</bug_when>
    <thetext>Created attachment 222629
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973824</commentid>
    <comment_count>7</comment_count>
      <attachid>222629</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-30 10:59:08 -0800</bug_when>
    <thetext>Comment on attachment 222629
the patch

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

&gt; Source/JavaScriptCore/ftl/FTLStackMaps.h:91
&gt; +    typedef HashMap&lt;uint32_t, Vector&lt;Record&gt;, WTF::IntHash&lt;uint32_t&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;uint32_t&gt;&gt; RecordMap;

Since the common case is one entry, can we use Vector&lt;Record, 1&gt;? That will substantially reduce malloc traffic, with very little space overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973954</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-30 13:19:05 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 222629 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222629&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLStackMaps.h:91
&gt; &gt; +    typedef HashMap&lt;uint32_t, Vector&lt;Record&gt;, WTF::IntHash&lt;uint32_t&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;uint32_t&gt;&gt; RecordMap;
&gt; 
&gt; Since the common case is one entry, can we use Vector&lt;Record, 1&gt;? That will substantially reduce malloc traffic, with very little space overhead.

Good point!  I will make that change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974032</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-30 14:55:50 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/163119</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222555</attachid>
            <date>2014-01-28 22:43:38 -0800</date>
            <delta_ts>2014-01-29 20:42:25 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>6642</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMDA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBA
CisyMDE0LTAxLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBzdXBwb3J0IEdldEJ5SWQoVW50eXBlZDopCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc3NTAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisK
KyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
YW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlJZCk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmdldEJ5SWQpOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9nZXQtYnktaWQtdW50eXBlZC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorCiAyMDE0LTAx
LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRlRMIHNob3Vs
ZCBzdXBwb3J0IEFycmF5UG9wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjMwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw5ICsx
MzEsOSBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2Fz
ZSBUb1N0cmluZzoKICAgICBjYXNlIE1ha2VSb3BlOgogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6
ZToKKyAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHZXRCeUlkOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAgICBj
YXNlIFB1dEJ5SWQ6CiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2Vs
bFVzZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCShyZXZpc2lvbiAxNjMwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwNCwzMCArMTYwNCw0
NCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEJ5SWQoKQogICAgIHsKLSAg
ICAgICAgLy8gVW50eXBlZFVzZSBpcyBhIGJpdCBoYXJkZXIgdG8gcmVhc29uIGFib3V0IGFuZCBJ
J20gbm90IHN1cmUgaG93IGJlc3QgdG8gZG8gaXQsIHlldC4KLSAgICAgICAgLy8gQmFzaWNhbGx5
IHdlIG5lZWQgdG8gZW1pdCBhIGNlbGwgYnJhbmNoIHRoYXQgdGFrZXMgeW91IHRvIHRoZSBzbG93
IHBhdGgsIGJ1dCB0aGUgc2xvdwotICAgICAgICAvLyBwYXRoIGlzIGdlbmVyYXRlZCBieSB0aGUg
SUMgZ2VuZXJhdG9yIHNvIHdlIGNhbid0IGp1bXAgdG8gaXQgZnJvbSBoZXJlLiBBbmQgdGhlIElD
Ci0gICAgICAgIC8vIGdlbmVyYXRvciBjdXJyZW50bHkgZG9lc24ndCBrbm93IGhvdyB0byBlbWl0
IHN1Y2ggYSBicmFuY2guIFNvLCBmb3Igbm93LCB3ZSBqdXN0Ci0gICAgICAgIC8vIHJlc3RyaWN0
IHRoaXMgdG8gQ2VsbFVzZS4KLSAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IENlbGxVc2UpOwotCi0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVy
cygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKLQotICAgICAgICAvLyBBcmd1bWVudHM6
IGlkLCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBhcmdzLi4uCi0gICAgICAgIHVuc2lnbmVkIHN0
YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZUNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgRW1pdHRp
bmcgR2V0QnlJZCBwYXRjaHBvaW50IHdpdGggc3RhY2ttYXAgIyIsIHN0YWNrbWFwSUQsICJcbiIp
OwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAotICAgICAgICAg
ICAgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksCi0gICAgICAgICAgICBtX291dC5j
b25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQoKSks
Ci0gICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMSks
IGJhc2UpOwotICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExM
Vk1BbnlSZWdDYWxsQ29udik7Ci0gICAgICAgIHNldEpTVmFsdWUoY2FsbCk7Ci0gICAgICAgIAot
ICAgICAgICBtX2Z0bFN0YXRlLmdldEJ5SWRzLmFwcGVuZChHZXRCeUlkRGVzY3JpcHRvcihzdGFj
a21hcElELCBtX25vZGUtPmNvZGVPcmlnaW4sIHVpZCkpOworICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZTogeworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShnZXRCeUlkKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
VW50eXBlZFVzZTogeworICAgICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgd2VpcmQsIHNpbmNl
IHdlIGR1cGxpY2F0ZSB0aGUgc2xvdyBwYXRoIGJvdGggaGVyZSBhbmQgaW4gdGhlCisgICAgICAg
ICAgICAvLyBjb2RlIGdlbmVyYXRlZCBieSB0aGUgSUMuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBt
YWtpbmcgdGhpcyBsZXNzIGJhZC4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc4MzAKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeUlkIHVudHlw
ZWQgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5SWQgdW50eXBlZCBub3QgY2VsbCBjYXNlIikpOwor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJHZXRCeUlkIHVudHlwZWQgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlKSwgY2VsbENhc2UsIG5vdENlbGxDYXNl
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihnZXRCeUlkKHZhbHVlKSk7CisgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAg
ICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5SWQpLAorICAgICAgICAg
ICAgICAgIG1fY2FsbEZyYW1lLCBnZXRVbmRlZihtX291dC5pbnRQdHIpLCB2YWx1ZSwKKyAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2Rl
LT5pZGVudGlmaWVyTnVtYmVyKCldKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0
LmludDY0LCBjZWxsUmVzdWx0LCBub3RDZWxsUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkKCkKQEAgLTMzOTUsNiAr
MzQwOSwyNyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmFkZChtX291
dC5sb2FkNjQoY291bnRlciksIG1fb3V0LmNvbnN0SW50NjQoMSkpLCBjb3VudGVyKTsKICAgICB9
CiAgICAgCisgICAgTFZhbHVlIGdldEJ5SWQoTFZhbHVlIGJhc2UpCisgICAgeworICAgICAgICBT
dHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVy
TnVtYmVyKCldOworCisgICAgICAgIC8vIEFyZ3VtZW50czogaWQsIGJ5dGVzLCB0YXJnZXQsIG51
bUFyZ3MsIGFyZ3MuLi4KKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJ
RHMrKzsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb24o
KSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBFbWl0dGluZyBHZXRCeUlkIHBhdGNocG9pbnQg
d2l0aCBzdGFja21hcCAjIiwgc3RhY2ttYXBJRCwgIlxuIik7CisgICAgICAgIAorICAgICAgICBM
VmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCisgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50SW50
NjRJbnRyaW5zaWMoKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCks
IG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKKyAgICAgICAgICAgIGNvbnN0TnVs
bChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgYmFzZSk7CisgICAgICAgIHNldElu
c3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKKyAg
ICAgICAgCisgICAgICAgIG1fZnRsU3RhdGUuZ2V0QnlJZHMuYXBwZW5kKEdldEJ5SWREZXNjcmlw
dG9yKHN0YWNrbWFwSUQsIG1fbm9kZS0+Y29kZU9yaWdpbiwgdWlkKSk7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gY2FsbDsKKyAgICB9CisgICAgCiAgICAgVHlwZWRQb2ludGVyIGJhc2VJbmRl
eChJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwLCBMVmFsdWUgc3RvcmFnZSwgTFZhbHVlIGluZGV4
LCBFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICByZXR1cm4gbV9vdXQuYmFzZUluZGV4KApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXQtYnktaWQtdW50eXBlZC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dldC1i
eS1pZC11bnR5cGVkLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9nZXQtYnktaWQtdW50eXBlZC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIxIEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJldHVybiBvLmY7Cit9CisKK25vSW5saW5l
KGZvbyk7CisKK1N0cmluZy5wcm90b3R5cGUuZiA9IDQyOworTnVtYmVyLnByb3RvdHlwZS5mID0g
MjQ7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0
ID0gZm9vKCJoZWxsbyIpOworICAgIGlmIChyZXN1bHQgIT0gNDIpCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdCBmb3Igc3RyaW5nOiAiICsgcmVzdWx0OworICAgIHJlc3VsdCA9IGZv
bygxMyk7CisgICAgaWYgKHJlc3VsdCAhPSAyNCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0IGZvciBudW1iZXI6ICIgKyByZXN1bHQ7CisgICAgcmVzdWx0ID0gZm9vKHtmOjg0fSk7
CisgICAgaWYgKHJlc3VsdCAhPSA4NCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
IGZvciBvYmplY3Q6ICIgKyByZXN1bHQ7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222624</attachid>
            <date>2014-01-29 20:42:25 -0800</date>
            <delta_ts>2014-01-29 22:25:52 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23823</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMDA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBA
CisyMDE0LTAxLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBzdXBwb3J0IEdldEJ5SWQoVW50eXBlZDopCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc3NTAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisK
KyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
YW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlJZCk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmdldEJ5SWQpOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9nZXQtYnktaWQtdW50eXBlZC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorCiAyMDE0LTAx
LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRlRMIHNob3Vs
ZCBzdXBwb3J0IEFycmF5UG9wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjMwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw5ICsx
MzEsOSBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2Fz
ZSBUb1N0cmluZzoKICAgICBjYXNlIE1ha2VSb3BlOgogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6
ZToKKyAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHZXRCeUlkOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAgICBj
YXNlIFB1dEJ5SWQ6CiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2Vs
bFVzZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2
aXNpb24gMTYyOTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDMwICsxMjQsMzcgQEAgdm9pZCBnZW5lcmF0ZUlDRmFz
dFBhdGgoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgU3RhY2tNYXBzOjpSZWNv
cmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlOwotCi0gICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklU
KCZ2bSwgY29kZUJsb2NrKTsKLSAgICBpYy5tX2dlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGZh
c3RQYXRoSklUKTsKLQotICAgIGNoYXIqIHN0YXJ0T2ZJQyA9Ci0gICAgICAgIGJpdHdpc2VfY2Fz
dDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0Owot
ICAgICAgICAgICAgCi0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmZmFzdFBhdGhKSVQs
IHN0YXJ0T2ZJQywgc2l6ZU9mSUMpOwotICAgIC8vIE5vdGU6IHdlIGNvdWxkIGhhbmRsZSB0aGUg
IWlzVmFsaWQoKSBjYXNlLiBXZSBqdXN0IGRvbid0IGFwcGVhciB0byBoYXZlIGEKLSAgICAvLyBy
ZWFzb24gdG8gZG8gc28sIHlldC4KLSAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFs
aWQoKSk7CisgICAgVmVjdG9yPFN0YWNrTWFwczo6UmVjb3JkPiYgcmVjb3JkcyA9IGl0ZXItPnZh
bHVlOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3Bz
KAotICAgICAgICBzdGFydE9mSUMgKyBsaW5rQnVmZmVyLnNpemUoKSwgc2l6ZU9mSUMgLSBsaW5r
QnVmZmVyLnNpemUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVjb3Jkcy5zaXplKCkgPT0gaWMu
bV9nZW5lcmF0b3JzLnNpemUoKSk7CiAgICAgCi0gICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29k
ZUxpbmtCdWZmZXItPmxpbmsoCi0gICAgICAgIGljLm1fc2xvd1BhdGhEb25lLCBDb2RlTG9jYXRp
b25MYWJlbChzdGFydE9mSUMgKyBzaXplT2ZJQykpOwotICAgICAgICAgICAgCi0gICAgbGlua0J1
ZmZlci5saW5rKAotICAgICAgICBpYy5tX2dlbmVyYXRvci5zbG93UGF0aEp1bXAoKSwKLSAgICAg
ICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2YoaWMubV9n
ZW5lcmF0b3Iuc2xvd1BhdGhCZWdpbigpKSk7Ci0gICAgICAgICAgICAKLSAgICBpYy5tX2dlbmVy
YXRvci5maW5hbGl6ZShsaW5rQnVmZmVyLCAqc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtC
dWZmZXIpOworICAgIGZvciAodW5zaWduZWQgaSA9IHJlY29yZHMuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSByZWNvcmRzW2ldOworICAgICAgICBh
dXRvIGdlbmVyYXRvciA9IGljLm1fZ2VuZXJhdG9yc1tpXTsKKworICAgICAgICBDQ2FsbEhlbHBl
cnMgZmFzdFBhdGhKSVQoJnZtLCBjb2RlQmxvY2spOworICAgICAgICBnZW5lcmF0b3IuZ2VuZXJh
dGVGYXN0UGF0aChmYXN0UGF0aEpJVCk7CisgICAgICAgIAorICAgICAgICBjaGFyKiBzdGFydE9m
SUMgPQorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikg
KyByZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgIAorICAgICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIodm0sICZmYXN0UGF0aEpJVCwgc3RhcnRPZklDLCBzaXplT2ZJQyk7CisgICAg
ICAgIC8vIE5vdGU6IHdlIGNvdWxkIGhhbmRsZSB0aGUgIWlzVmFsaWQoKSBjYXNlLiBXZSBqdXN0
IGRvbid0IGFwcGVhciB0byBoYXZlIGEKKyAgICAgICAgLy8gcmVhc29uIHRvIGRvIHNvLCB5ZXQu
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKKyAgICAgICAg
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3BzKAorICAg
ICAgICAgICAgc3RhcnRPZklDICsgbGlua0J1ZmZlci5zaXplKCksIHNpemVPZklDIC0gbGlua0J1
ZmZlci5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29k
ZUxpbmtCdWZmZXItPmxpbmsoCisgICAgICAgICAgICBpYy5tX3Nsb3dQYXRoRG9uZVtpXSwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3RhcnRPZklDICsgc2l6ZU9mSUMpKTsKKyAgICAgICAgCisgICAgICAg
IGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgIGdlbmVyYXRvci5zbG93UGF0aEp1bXAoKSwK
KyAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5sb2NhdGlv
bk9mKGdlbmVyYXRvci5zbG93UGF0aEJlZ2luKCkpKTsKKyAgICAgICAgCisgICAgICAgIGdlbmVy
YXRvci5maW5hbGl6ZShsaW5rQnVmZmVyLCAqc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtC
dWZmZXIpOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tN
YXBzKApAQCAtMjcyLDI4ICsyNzksMzAgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9u
U3RhY2tNYXBzKAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+
dmFsdWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBMTFZNIHNob3VsZCB0
ZWxsIHVzIHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4KLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpOwotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzFdLmRp
cmVjdEdQUigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGdldEJ5SWQuY29kZU9yaWdpbigpLCB1
c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyhiYXNlKSwKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncyhyZXN1bHQpLCBmYWxzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBiZWdpbiA9IHNsb3dQYXRoSklULmxhYmVsKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAot
ICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgZ2V0QnlJ
ZC5jb2RlT3JpZ2luKCksICZleGNlcHRpb25UYXJnZXQsCi0gICAgICAgICAgICAgICAgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHQsIGdlbi5zdHViSW5mbygpLCBiYXNlLCBnZXRCeUlk
LnVpZCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChiZWdpbiwgY2FsbCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRl
ci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdGFja01hcHM6OlJlY29y
ZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGdl
dEJ5SWQubV9zbG93UGF0aERvbmUgPSBzbG93UGF0aEpJVC5qdW1wKCk7Ci0gICAgICAgICAgICBn
ZXRCeUlkLm1fZ2VuZXJhdG9yID0gZ2VuOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBMTFZN
IHNob3VsZCB0ZWxsIHVzIHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4KKyAgICAgICAgICAgICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWNv
cmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNl
ID0gcmVjb3JkLmxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgICAgICAg
ICAgY29kZUJsb2NrLCBnZXRCeUlkLmNvZGVPcmlnaW4oKSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1
ZVJlZ3MoYmFzZSksCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdCksIGZh
bHNlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAor
ICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGdl
dEJ5SWQuY29kZU9yaWdpbigpLCAmZXhjZXB0aW9uVGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdCwgZ2VuLnN0dWJJbmZvKCksIGJhc2Us
IGdldEJ5SWQudWlkKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoYmVnaW4sIGNhbGwpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGdldEJ5SWQubV9zbG93UGF0aERvbmUuYXBwZW5kKHNsb3dQYXRoSklULmp1bXAo
KSk7CisgICAgICAgICAgICAgICAgZ2V0QnlJZC5tX2dlbmVyYXRvci5hcHBlbmQoZ2VuKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhdGUucHV0QnlJZHMuc2l6ZSgpOyBpLS07KSB7CkBAIC0zMDgsMjkgKzMxNywzMSBAQCBz
dGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0YWNr
TWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgLy8gRklYTUU6IExMVk0gc2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBs
aXZlLgotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0
OjphbGxSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2Ug
PSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOwotICAgICAgICAgICAgR1BSUmVnIHZh
bHVlID0gcmVjb3JkLmxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICAgICAgY29kZUJs
b2NrLCBwdXRCeUlkLmNvZGVPcmlnaW4oKSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MoYmFz
ZSksCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWUpLCBNYWNyb0Fzc2VtYmxlcjo6
c2NyYXRjaFJlZ2lzdGVyLCBmYWxzZSwgcHV0QnlJZC5lY21hTW9kZSgpLAotICAgICAgICAgICAg
ICAgIHB1dEJ5SWQucHV0S2luZCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
Ci0gICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBwdXRC
eUlkLmNvZGVPcmlnaW4oKSwgJmV4Y2VwdGlvblRhcmdldCwKLSAgICAgICAgICAgICAgICBnZW4u
c2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWUsIGJhc2UsIHB1dEJ5SWQu
dWlkKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGJlZ2luLCBjYWxsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcHV0QnlJZC5tX3Nsb3dQ
YXRoRG9uZSA9IHNsb3dQYXRoSklULmp1bXAoKTsKLSAgICAgICAgICAgIHB1dEJ5SWQubV9nZW5l
cmF0b3IgPSBnZW47CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlci0+
dmFsdWUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYg
cmVjb3JkID0gaXRlci0+dmFsdWVbaV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IExMVk0gc2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZl
LgorICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNl
dDo6YWxsUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgR1BS
UmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOworICAgICAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZSA9IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCisg
ICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgcHV0QnlJZC5jb2RlT3JpZ2luKCksIHVzZWRS
ZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2UpLAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncyh2YWx1ZSksIE1hY3JvQXNzZW1ibGVyOjpzY3JhdGNoUmVnaXN0ZXIsIGZhbHNlLCBwdXRC
eUlkLmVjbWFNb2RlKCksCisgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWQucHV0S2luZCgpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
YmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAg
ICAgICAgICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIHB1dEJ5SWQu
Y29kZU9yaWdpbigpLCAmZXhjZXB0aW9uVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICBnZW4u
c2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWUsIGJhc2UsIHB1dEJ5SWQu
dWlkKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoYmVnaW4sIGNhbGwpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IHB1dEJ5SWQubV9zbG93UGF0aERvbmUuYXBwZW5kKHNsb3dQYXRoSklULmp1bXAoKSk7CisgICAg
ICAgICAgICAgICAgcHV0QnlJZC5tX2dlbmVyYXRvci5hcHBlbmQoZ2VuKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LmxpbmsoJnNs
b3dQYXRoSklUKTsKQEAgLTM1OCw4ICszNjksMTAgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25C
YXNlZE9uU3RhY2tNYXBzKAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5qc0Nh
bGxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTQ2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNb
aV07CiAgICAgICAgIAorICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBjYWxsIElDICMiLCBj
YWxsLnN0YWNrbWFwSUQoKSwgIlxuIik7CiAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjpp
dGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2FsbC5zdGFja21hcElEKCkpOwogICAgICAg
ICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBJdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LlxuIik7CiAgICAgICAgICAgICAvLyBJdCB3YXMg
b3B0aW1pemVkIG91dC4gUHJ1bmUgaXQuCiAgICAgICAgICAgICBjYWxsID0gc3RhdGUuanNDYWxs
cy5sYXN0KCk7CiAgICAgICAgICAgICBzdGF0ZS5qc0NhbGxzLnJlbW92ZUxhc3QoKTsKQEAgLTM2
Nyw2ICszODAsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgZGF0YUxv
ZygiICAgIEl0J3MgYSB0aGluZywgYXQgb2Zmc2V0ICIsIGl0ZXItPnZhbHVlLmluc3RydWN0aW9u
T2Zmc2V0LCAiIGFuZCBhZGRyZXNzICIsIFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PGNoYXIqPihn
ZW5lcmF0ZWRGdW5jdGlvbikgKyBpdGVyLT52YWx1ZS5pbnN0cnVjdGlvbk9mZnNldCksICIuXG4i
KTsKICAgICAgICAgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWUuaW5zdHJ1
Y3Rpb25PZmZzZXQ7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxNjI5OTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nSW1w
bCogbV91aWQ7CiAgICAgCiBwdWJsaWM6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93
UGF0aERvbmU7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wPiBtX3Nsb3dQYXRoRG9u
ZTsKIH07CiAKIGNsYXNzIEdldEJ5SWREZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVz
Y3JpcHRvciB7CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAot
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgbV9nZW5lcmF0b3I7CisgICAgVmVjdG9yPEpJVEdldEJ5
SWRHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yczsKIH07CiAKIGNsYXNzIFB1dEJ5SWREZXNjcmlwdG9y
IDogcHVibGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7CkBAIC04NCw3ICs4NCw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgfQogICAgIAotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgbV9nZW5lcmF0
b3I7CisgICAgVmVjdG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yczsKICAgICAK
ICAgICBFQ01BTW9kZSBlY21hTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWNtYU1vZGU7IH0KICAg
ICBQdXRLaW5kIHB1dEtpbmQoKSBjb25zdCB7IHJldHVybiBtX3B1dEtpbmQ7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJl
dmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2Fj
aGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBzaXplX3Qgc2l6ZU9m
UHV0QnlJZCgpCiAKIHNpemVfdCBzaXplT2ZDYWxsKCkKIHsKLSAgICByZXR1cm4gNDM7CisgICAg
cmV0dXJuIDQzICsgMjsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNpb24g
MTYyOTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksMTQgQEAgc2l6ZV90IEpJVEZpbmFsaXplcjo6
Y29kZVNpemUoKQogewogICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgIAotICAgIHJlc3VsdCAr
PSBleGl0VGh1bmtzTGlua0J1ZmZlci0+c2l6ZSgpOwotICAgIHJlc3VsdCArPSBlbnRyeXBvaW50
TGlua0J1ZmZlci0+c2l6ZSgpOworICAgIGlmIChleGl0VGh1bmtzTGlua0J1ZmZlcikKKyAgICAg
ICAgcmVzdWx0ICs9IGV4aXRUaHVua3NMaW5rQnVmZmVyLT5zaXplKCk7CisgICAgaWYgKGVudHJ5
cG9pbnRMaW5rQnVmZmVyKQorICAgICAgICByZXN1bHQgKz0gZW50cnlwb2ludExpbmtCdWZmZXIt
PnNpemUoKTsKICAgICBpZiAoc2lkZUNvZGVMaW5rQnVmZmVyKQogICAgICAgICByZXN1bHQgKz0g
c2lkZUNvZGVMaW5rQnVmZmVyLT5zaXplKCk7Ci0gICAgcmVzdWx0ICs9IGhhbmRsZUV4Y2VwdGlv
bnNMaW5rQnVmZmVyLT5zaXplKCk7CisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVy
KQorICAgICAgICByZXN1bHQgKz0gaGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXItPnNpemUoKTsK
ICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBqaXRDb2RlLT5oYW5kbGVzKCkuc2l6ZSgpOyBp
LS07KQogICAgICAgICByZXN1bHQgKz0gaml0Q29kZS0+aGFuZGxlcygpW2ldLT5zaXplSW5CeXRl
cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkocmV2aXNp
b24gMTYyOTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw5IEBAIEpTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0
YWNrbWFwSUQsIERGRzoKIAogdm9pZCBKU0NhbGw6OmVtaXQoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7
CisgICAgaWYgKG1fbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4ID09IDYzMSkKKyAgICAg
ICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1Bh
dGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAogICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBHUFJJbmZvOjpyZWdUMCwgbV90YXJnZXRUb0NoZWNrLAogICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoMCkpOwpAQCAtNjEsNiArNjQsOSBAQCB2b2lkIEpTQ2FsbDo6ZW1p
dChDQ2FsbEhlbHBlcnMmIGppdCkKICAgICBtX3Nsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAg
ICAgCiAgICAgZG9uZS5saW5rKCZqaXQpOworCisgICAgaWYgKG1fbm9kZS0+Y29kZU9yaWdpbi5i
eXRlY29kZUluZGV4ID09IDYzMSkKKyAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKIH0KIAogdm9p
ZCBKU0NhbGw6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBDYWxsTGlua0lu
Zm8mIGNhbGxJbmZvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCShy
ZXZpc2lvbiAxNjI5OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMiArNTgsMTYgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7CiAgICAgREZHOjpOb2RlKiBtX25vZGU7Ci0gICAgQ0Nh
bGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgbV90YXJnZXRUb0NoZWNrOwotICAgIENDYWxsSGVscGVy
czo6Q2FsbCBtX2Zhc3RDYWxsOwotICAgIENDYWxsSGVscGVyczo6Q2FsbCBtX3Nsb3dDYWxsOwog
CiBwdWJsaWM6Ci0gICAgdWludDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNldDsKKyAgICBzdHJ1Y3Qg
Q29weSB7CisgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7
CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbDsKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIHNsb3dDYWxsOworICAgICAgICB1aW50MzJfdCBpbnN0cnVjdGlvbk9mZnNldDsK
KyAgICB9OworCisgICAgVmVjdG9yPENvcHk+IG1fY29waWVzOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE2MzAwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1
NiwyOSBAQCBzdGF0aWMgc3RkOjphdG9taWM8aW50PiBjb21waWxlQ291bnRlcjsKIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU2NTAKIHN0YXRpYyB1aW50cHRy
X3Qgc3RhY2tMaW1pdDsKIAorLy9zdGF0aWMgaW50MzJfdCBkdW1teVN0b3JlVGFyZ2V0OworCitz
dGF0aWMgdm9pZCBsb2dCZWZvcmVDYWxsKCkKK3sKKyAgICBkYXRhTG9nKCJKdXN0IGJlZm9yZSB0
aGUgY2FsbC5cbiIpOworfQorCitzdGF0aWMgdm9pZCBsb2dBZnRlckNhbGwoKQoreworICAgIGRh
dGFMb2coIkp1c3QgYWZ0ZXIgdGhlIGNhbGwuXG4iKTsKK30KKworc3RhdGljIHZvaWQgbG9nQmxv
Y2tFeGVjdXRpb24odW5zaWduZWQgYmxvY2tJbmRleCkKK3sKKyAgICB2b2lkKiBwYzsKKyAgICBh
c20gdm9sYXRpbGUgKAorICAgICAgICAibW92cSA4KCUlcmJwKSwgJTAiCisgICAgICAgIDogIj1y
IihwYykKKyAgICAgICAgOgorICAgICAgICA6ICJtZW1vcnkiKTsKKyAgICBkYXRhTG9nKCJFeGVj
dXRpbmcgYmxvY2sgIyIsIGJsb2NrSW5kZXgsICIgd2l0aCByZXR1cm4gUEMgIiwgUmF3UG9pbnRl
cihwYyksICJcbiIpOworfQorCiAvLyBVc2luZyB0aGlzIGluc3RlYWQgb2YgdHlwZUNoZWNrKCkg
aGVscHMgdG8gcmVkdWNlIHRoZSBsb2FkIG9uIExMVk0sIGJ5IGNyZWF0aW5nCiAvLyBzaWduaWZp
Y2FudGx5IGxlc3MgZGVhZCBjb2RlLgogI2RlZmluZSBGVExfVFlQRV9DSEVDSyhsb3dWYWx1ZSwg
aGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRpb24pIGRvIHsgXApAQCAt
MjM2LDYgKzI1OSwxMCBAQCBwcml2YXRlOgogICAgICAgICBpZiAoT3B0aW9uczo6ZnRsQ3Jhc2hl
cygpKQogICAgICAgICAgICAgbV9vdXQuY3Jhc2hOb25UZXJtaW5hbCgpOwogICAgICAgICAKKyAg
ICAgICAgaWYgKCEobV9oaWdoQmxvY2stPmluZGV4ICUgMykpIHsKKyAgICAgICAgICAgIG1fb3V0
LmNhbGwobV9vdXQuaW50VG9QdHIobV9vdXQuY29uc3RJbnRQdHIobG9nQmxvY2tFeGVjdXRpb24p
LCBwb2ludGVyVHlwZShmdW5jdGlvblR5cGUobV9vdXQudm9pZFR5cGUsIG1fb3V0LmludDMyKSkp
LCBtX291dC5jb25zdEludDMyKG1faGlnaEJsb2NrLT5pbmRleCkpOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBpZiAoIW1faGlnaEJsb2NrLT5jZmFIYXNWaXNpdGVkKSB7CiAgICAgICAg
ICAgICBtX291dC5jcmFzaCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTYwNCwzMCArMTYz
MSw1NCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEJ5SWQoKQogICAgIHsK
LSAgICAgICAgLy8gVW50eXBlZFVzZSBpcyBhIGJpdCBoYXJkZXIgdG8gcmVhc29uIGFib3V0IGFu
ZCBJJ20gbm90IHN1cmUgaG93IGJlc3QgdG8gZG8gaXQsIHlldC4KLSAgICAgICAgLy8gQmFzaWNh
bGx5IHdlIG5lZWQgdG8gZW1pdCBhIGNlbGwgYnJhbmNoIHRoYXQgdGFrZXMgeW91IHRvIHRoZSBz
bG93IHBhdGgsIGJ1dCB0aGUgc2xvdwotICAgICAgICAvLyBwYXRoIGlzIGdlbmVyYXRlZCBieSB0
aGUgSUMgZ2VuZXJhdG9yIHNvIHdlIGNhbid0IGp1bXAgdG8gaXQgZnJvbSBoZXJlLiBBbmQgdGhl
IElDCi0gICAgICAgIC8vIGdlbmVyYXRvciBjdXJyZW50bHkgZG9lc24ndCBrbm93IGhvdyB0byBl
bWl0IHN1Y2ggYSBicmFuY2guIFNvLCBmb3Igbm93LCB3ZSBqdXN0Ci0gICAgICAgIC8vIHJlc3Ry
aWN0IHRoaXMgdG8gQ2VsbFVzZS4KLSAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IENlbGxVc2UpOwotCi0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlm
aWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKLQotICAgICAgICAvLyBBcmd1bWVu
dHM6IGlkLCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBhcmdzLi4uCi0gICAgICAgIHVuc2lnbmVk
IHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgRW1p
dHRpbmcgR2V0QnlJZCBwYXRjaHBvaW50IHdpdGggc3RhY2ttYXAgIyIsIHN0YWNrbWFwSUQsICJc
biIpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAotICAgICAg
ICAgICAgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksCi0gICAgICAgICAgICBtX291
dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQo
KSksCi0gICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIo
MSksIGJhc2UpOwotICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGws
IExMVk1BbnlSZWdDYWxsQ29udik7Ci0gICAgICAgIHNldEpTVmFsdWUoY2FsbCk7Ci0gICAgICAg
IAotICAgICAgICBtX2Z0bFN0YXRlLmdldEJ5SWRzLmFwcGVuZChHZXRCeUlkRGVzY3JpcHRvcihz
dGFja21hcElELCBtX25vZGUtPmNvZGVPcmlnaW4sIHVpZCkpOworICAgICAgICBzd2l0Y2ggKG1f
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZTogeworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShnZXRCeUlkKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICAgICAg
ICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUoCisg
ICAgICAgICAgICAgICAgICAgIHZtQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y2FsbEZyYW1lLCBnZXRVbmRlZihtX291dC5pbnRQdHIpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hp
bGQxKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFw
aC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSkpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFRoaXMgaXMgcHJldHR5IHdlaXJkLCBzaW5jZSB3ZSBkdXBsaWNhdGUgdGhlIHNsb3cgcGF0
aCBib3RoIGhlcmUgYW5kIGluIHRoZQorICAgICAgICAgICAgLy8gY29kZSBnZW5lcmF0ZWQgYnkg
dGhlIElDLiBXZSBzaG91bGQgaW52ZXN0aWdhdGUgbWFraW5nIHRoaXMgbGVzcyBiYWQuCisgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3ODMw
CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiR2V0QnlJZCB1bnR5cGVkIGNlbGwgY2FzZSIpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRC
eUlkIHVudHlwZWQgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlJZCB1bnR5cGVkIGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2Vs
bCh2YWx1ZSksIGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENl
bGxDYXNlKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNlbGxSZXN1bHQgPSBtX291dC5h
bmNob3IoZ2V0QnlJZCh2YWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2Fz
ZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1
bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25HZXRCeUlkKSwKKyAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgZ2V0VW5k
ZWYobV9vdXQuaW50UHRyKSwgdmFsdWUsCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIobV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSkpKTsK
KyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgY2VsbFJlc3VsdCwgbm90Q2Vs
bFJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlUHV0QnlJZCgpCkBAIC0zMTU3LDYgKzMyMDgsOSBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpCiAgICAgeworICAgICAgICBpZiAobV9u
b2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXggPT0gNjMxICYmIGZhbHNlKQorICAgICAgICAg
ICAgbV9vdXQuY2FsbChtX291dC5pbnRUb1B0cihtX291dC5jb25zdEludFB0cihsb2dCZWZvcmVD
YWxsKSwgcG9pbnRlclR5cGUoZnVuY3Rpb25UeXBlKG1fb3V0LnZvaWRUeXBlKSkpKTsKKyAgICAg
ICAgCiAgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG1fbm9kZS0+b3AoKSA9PSBDYWxs
ID8gMCA6IDE7CiAgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbV9ub2RlLT5udW1DaGlsZHJl
bigpIC0gMTsKICAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlz
QXJndW1lbnQ7CkBAIC0zMTg4LDYgKzMyNDIsOSBAQCBwcml2YXRlOgogICAgICAgICBtX2Z0bFN0
YXRlLmpzQ2FsbHMuYXBwZW5kKEpTQ2FsbChzdGFja21hcElELCBtX25vZGUpKTsKICAgICAgICAg
CiAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CisKKyAgICAgICAgaWYgKG1fbm9kZS0+Y29kZU9y
aWdpbi5ieXRlY29kZUluZGV4ID09IDYzMSAmJiBmYWxzZSkKKyAgICAgICAgICAgIG1fb3V0LmNh
bGwobV9vdXQuaW50VG9QdHIobV9vdXQuY29uc3RJbnRQdHIobG9nQWZ0ZXJDYWxsKSwgcG9pbnRl
clR5cGUoZnVuY3Rpb25UeXBlKG1fb3V0LnZvaWRUeXBlKSkpKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlSnVtcCgpCkBAIC0zMzk1LDYgKzM0NTIsMjcgQEAgcHJpdmF0ZToKICAgICAg
ICAgbV9vdXQuc3RvcmU2NChtX291dC5hZGQobV9vdXQubG9hZDY0KGNvdW50ZXIpLCBtX291dC5j
b25zdEludDY0KDEpKSwgY291bnRlcik7CiAgICAgfQogICAgIAorICAgIExWYWx1ZSBnZXRCeUlk
KExWYWx1ZSBiYXNlKQorICAgIHsKKyAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5p
ZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKKworICAgICAgICAvLyBB
cmd1bWVudHM6IGlkLCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBhcmdzLi4uCisgICAgICAgIHVu
c2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAgICAgIAorICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgRW1pdHRpbmcgR2V0QnlJZCBwYXRjaHBvaW50IHdpdGggc3RhY2ttYXAgIyIsIHN0YWNrbWFw
SUQsICJcbiIpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAor
ICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksCisgICAgICAgICAg
ICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdl
dEJ5SWQoKSksCisgICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0
SW50MzIoMSksIGJhc2UpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9u
KGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CisgICAgICAgIAorICAgICAgICBtX2Z0bFN0YXRl
LmdldEJ5SWRzLmFwcGVuZChHZXRCeUlkRGVzY3JpcHRvcihzdGFja21hcElELCBtX25vZGUtPmNv
ZGVPcmlnaW4sIHVpZCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgfQor
ICAgIAogICAgIFR5cGVkUG9pbnRlciBiYXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVh
cCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1ZSBpbmRleCwgRWRnZSBlZGdlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fb3V0LmJhc2VJbmRleCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhY2tNYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0
OSw3IEBAIFN0YWNrTWFwczo6UmVjb3JkTWFwIFN0YWNrTWFwczo6Z2V0UmVjb3IKIHsKICAgICBS
ZWNvcmRNYXAgcmVzdWx0OwogICAgIGZvciAodW5zaWduZWQgaSA9IHJlY29yZHMuc2l6ZSgpOyBp
LS07KQotICAgICAgICByZXN1bHQuYWRkKHJlY29yZHNbaV0ucGF0Y2hwb2ludElELCByZWNvcmRz
W2ldKTsKKyAgICAgICAgcmVzdWx0LmFkZChyZWNvcmRzW2ldLnBhdGNocG9pbnRJRCwgVmVjdG9y
PFJlY29yZD4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChyZWNvcmRzW2ldKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNr
TWFwcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tN
YXBzLmgJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U3RhY2tNYXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgc3RydWN0IFN0YWNr
TWFwcyB7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1w
TXVsdGlsaW5lKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4KSBjb25zdDsKICAgICAK
LSAgICB0eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIFJlY29yZCwgV1RGOjpJbnRIYXNoPHVpbnQz
Ml90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IFJlY29y
ZE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIFZlY3RvcjxSZWNvcmQ+LCBXVEY6
OkludEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVp
bnQzMl90Pj4gUmVjb3JkTWFwOwogICAgIAogICAgIFJlY29yZE1hcCBnZXRSZWNvcmRNYXAoKSBj
b25zdDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiwxMyArMTE2LDE2IEBAIGludDMy
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db25zdHJ1Y3QKIAogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1
YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJbXBsKiB1aWQpCiB7CisgICAgZGF0
YUxvZygiSGVyZS5cbiIpOwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIAogICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VW
YWx1ZSk7CiAgICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOworICAgIGRhdGFMb2co
IkZvciBhY2Nlc3MgdG8gIiwgdWlkLCAiIG9uICIsIGJhc2VWYWx1ZSwgIiBnb3QgIiwgcmVzdWx0
LCAiXG4iKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdChFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFz
ZSwgU3RyaW5nSW1wbCogdWlkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9nZXQtYnktaWQtdW50eXBlZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2dldC1ieS1pZC11bnR5cGVkLmpzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXQtYnktaWQtdW50eXBlZC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxIEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJl
dHVybiBvLmY7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK1N0cmluZy5wcm90b3R5cGUuZiA9IDQy
OworTnVtYmVyLnByb3RvdHlwZS5mID0gMjQ7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAw
OyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKCJoZWxsbyIpOworICAgIGlmIChyZXN1bHQg
IT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3Igc3RyaW5nOiAiICsg
cmVzdWx0OworICAgIHJlc3VsdCA9IGZvbygxMyk7CisgICAgaWYgKHJlc3VsdCAhPSAyNCkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBudW1iZXI6ICIgKyByZXN1bHQ7Cisg
ICAgcmVzdWx0ID0gZm9vKHtmOjg0fSk7CisgICAgaWYgKHJlc3VsdCAhPSA4NCkKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBvYmplY3Q6ICIgKyByZXN1bHQ7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222626</attachid>
            <date>2014-01-29 22:25:52 -0800</date>
            <delta_ts>2014-01-29 23:18:31 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35653</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMDY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDE0LTAxLTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBzdXBwb3J0IEdldEJ5SWQoVW50eXBlZDopCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc3NTAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFsc28gbWFrZSBpdCBzYWZlIGZv
ciBMTFZNIHRvIGR1cGxpY2F0ZSBjYWxscyB0byBwYXRjaHBvaW50cyBhbmQgc3RhY2ttYXBzLiBQ
cmV2aW91c2x5CisgICAgICAgIHdlIGluY29ycmVjdGx5IGFzc3VtZWQgdGhhdCBpZiB3ZSBlbWl0
dGVkIGEgcGF0Y2hwb2ludCwgdGhlbiB0aGVyZSB3b3VsZCBvbmx5IGJlIG9uZQorICAgICAgICBj
b3B5IG9mIHRoYXQgcGF0Y2hwb2ludCAod2l0aCB0aGF0IElEKSBpbiB0aGUgcmVzdWx0aW5nIG1h
Y2hpbmUgY29kZSBhbmQgaW4gdGhlCisgICAgICAgIHN0YWNrbWFwcyBzZWN0aW9uLiBUaGF0J3Mg
b2J2aW91c2x5IGEgYmFkIGFzc3VtcHRpb24gLSBMTFZNIGlzIGFsbG93ZWQgdG8gZG8gYW55dGhp
bmcKKyAgICAgICAgaXQgd2FudHMgc28gbG9uZyBhcyB0aGUgb3V0Y29tZSBvZiBleGVjdXRpbmcg
dGhlIGNvZGUgaGFzIGEgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQKKyAgICAgICAgbWVhbmluZyB0
byB0aGUgSVIgd2UgZ2F2ZSBpdCwgYW5kIGR1cGxpY2F0aW5nIGNvZGUgaXMgdHJpdmlhbGx5IE9L
IHVuZGVyIHRoaXMgcnVsZS4gV2UKKyAgICAgICAgc2hvdWxkIGJlIE9LIHdpdGggaXQsIHRvby4g
VGhlIHNvbHV0aW9uIGlzIHRvIGFkZCBWZWN0b3JzIGluIGEgYnVuY2ggb2YgcGxhY2VzIHRoYXQK
KyAgICAgICAgcHJldmlvdXNseSBqdXN0IHRob3VnaHQgdGhleSBvbmx5IGhhZCBvbmUgdmFsdWUu
IEZvciBleGFtcGxlLCBhbiBJbmxpbmVDYWNoZURlc2NyaXB0b3IKKyAgICAgICAgbm93IGhhcyBh
IFZlY3RvciBvZiBnZW5lcmF0b3JzIC0gb25lIGdlbmVyYXRvciBmb3IgZWFjaCBjb3B5IHRoYXQg
TExWTSBzdGFtcGVkIG91dC4KKyAgICAgICAgTm9ybWFsbHkgdGhlcmUgd2lsbCBvbmx5IGJlIG9u
ZSBjb3B5LCBvZiBjb3Vyc2UgLSBzaW5jZSBkdXBsaWNhdGlvbiBpcyB1c3VhbGx5CisgICAgICAg
IHVucHJvZml0YWJsZS4gQnV0LCBpZiBMTFZNIGRlY2lkZXMgdGhhdCBjb3B5aW5nIHdvdWxkIGJl
IGdyb292eSB0aGVuIHdlIHdpbGwgbm8gbG9uZ2VyCisgICAgICAgIGJhcmYuCisgICAgICAgIAor
ICAgICAgICBBbHNvIGZpeCBTU0EgY29udmVyc2lvbi4gSXQgdHVybnMgb3V0IHRoYXQgd2UgbWlz
aGFuZGxlZCB0aGUgY2FzZSB3aGVyZSBhIGJsb2NrIGhhZAorICAgICAgICBtdWx0aXBsZSBQaGkg
ZnVuY3Rpb25zIGZvciB0aGUgc2FtZSBsb2NhbC4gSWYgYW55IG9mIHRob3NlIENQUyBQaGlzIGZh
aWwgdG8gdHJpdmlhbGl6ZQorICAgICAgICBBeWNvY2stSG9yc3Bvb2wgZml4cG9pbnQsIHdlIG5l
ZWQgdG8gaW5zZXJ0IGFuIFNTQSBQaGkuIFByZXZpb3VzbHksIGl0IHdhcyBhc3N1bWluZworICAg
ICAgICB0aGF0IHNvIGxvbmcgYXMgdGhlIGhlYWQgQ1BTIFBoaSB3YXMgdHJpdmlhbCwgd2UgY291
bGQgZm9yZWdvIFNTQSBQaGkgaW5zZXJ0aW9uLgorICAgICAgICBUaGF0J3Mgd3JvbmcgaWYgdGhl
IGhlYWQgQ1BTIFBoaSB0cml2aWFsaXplZCBidXQgZW5kZWQgdXAgcG9pbnRpbmcgdG8gYSBub24t
dHJpdmlhbAorICAgICAgICBDUFMgUGhpIGluIHRoZSBzYW1lIGJsb2NrLiBUaGlzIG1hZG5lc3Mg
d2l0aCB0cmVlcyBvZiBQaGlzIG9jY3VycyBiZWNhdXNlIHdlIHRyeSB0bworICAgICAgICBzYXZl
IG9uIGNvbXBpbGUgdGltZXM6IG5vIFBoaSBldmVyIGhhcyBtb3JlIHRoYW4gdGhyZWUgY2hpbGRy
ZW4gZXZlbiBpZiB0aGUgYmxvY2sgaGFzCisgICAgICAgIG1vcmUgdGhhbiB0aHJlZSBwcmVkZWNl
c3NvcnM7IHdlIGp1c3QgYnVpbGQgb3V0IGEgdHJlZSBvZiBQaGlzIHRvIHNhdGlzZnkgYWxsCisg
ICAgICAgIHByZWRlY2Vzc29ycy4gU28gd2VpcmQuCisKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0
YSk6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIGZ0bC9GVExDYXBh
YmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAq
IGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmF0ZUlDRmFzdFBh
dGgpOgorICAgICAgICAoSlNDOjpGVEw6OmZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6Cisg
ICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oOgorICAgICAgICAqIGZ0bC9G
VExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZpbmFsaXplcjo6Y29k
ZVNpemUpOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkpTQ2FsbDo6SlNDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsLmg6CisgICAgICAgICog
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpnZXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRMU3RhY2tNYXBzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpTdGFja01hcHM6OmdldFJlY29yZE1hcCk6CisgICAgICAgICogZnRsL0ZUTFN0YWNr
TWFwcy5oOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9nZXQtYnktaWQtdW50eXBlZC5qczogQWRk
ZWQuCisgICAgICAgIChmb28pOgorCiAyMDE0LTAxLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgRlRMIHNob3VsZCBzdXBwb3J0IEFycmF5UG9wCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTYyOTk1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0NywxOSArMjQ3LDIxIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QKICAgICB9CiAgICAgQVNTRVJUKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykg
PT0gbm9kZS0+aGFzTG9jYWwoKnRoaXMpKTsKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nl
c3NEYXRhKCp0aGlzKSkgewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAgaWYg
KG9wZXJhbmQuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYXJn
Iiwgb3BlcmFuZC50b0FyZ3VtZW50KCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhp
cywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAibG9jIiwgb3BlcmFuZC50b0xvY2FsKCksICIoIiwgVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKLSAgICAgICAg
Ci0gICAgICAgIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1hY2hpbmVMb2NhbCgpOwot
ICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YSkgeworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7CiAgICAgICAg
ICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAibWFjaGluZTphcmciLCBvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiYXJnIiwgb3BlcmFuZC50b0FyZ3VtZW50KCksICIoIiwg
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJtYWNo
aW5lOmxvYyIsIG9wZXJhbmQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJsb2MiLCBvcGVyYW5kLnRvTG9jYWwoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tYWNoaW5lTG9jYWwoKTsKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIGlmIChv
cGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAibWFjaGluZTphcmciLCBvcGVyYW5kLnRvQXJndW1lbnQoKSk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJtYWNoaW5lOmxvYyIs
IG9wZXJhbmQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAg
ICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSB7CkBAIC0zMzAsOCArMzMyLDggQEAgdm9p
ZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIG91dC5wcmludCgiKSIp
OwogCiAgICAgaWYgKCFza2lwcGVkKSB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFj
Y2Vzc0RhdGEoKnRoaXMpKQotICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwg
U3BlY3VsYXRpb25EdW1wKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkp
KTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykgJiYgbm9k
ZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAg
cHJlZGljdGluZyAiLCBTcGVjdWxhdGlvbkR1bXAobm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NE
YXRhKCktPnByZWRpY3Rpb24oKSkpOwogICAgICAgICBlbHNlIGlmIChub2RlLT5oYXNIZWFwUHJl
ZGljdGlvbigpKQogICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwgU3BlY3Vs
YXRpb25EdW1wKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTYyOTk1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxNyw2ICs1MTcs
MTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gaGFzVmFyaWFibGVBY2Nlc3NEYXRh
KGdyYXBoKTsKICAgICB9CiAgICAgCisgICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2lu
ZyBjb2RlLCB3aGVyZSBhIG5vZGUgdGhhdCBzaG91bGQgaGF2ZSBhIHZhcmlhYmxlCisgICAgLy8g
YWNjZXNzIGRhdGEgZG9lc24ndCBoYXZlIG9uZSBiZWNhdXNlIGl0IGhhc24ndCBiZWVuIGluaXRp
YWxpemVkIHlldC4KKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHRyeUdldFZhcmlhYmxlQWNjZXNz
RGF0YSgpCisgICAgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHJlc3VsdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRhKj4obV9vcEluZm8pOworICAgICAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcmVzdWx0LT5m
aW5kKCk7CisgICAgfQorICAgIAogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhKCkKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFZhcmlhYmxl
QWNjZXNzRGF0YSo+KG1fb3BJbmZvKS0+ZmluZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMTYy
OTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogY2xhc3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgZHVtcEdyYXBoID0gZmFsc2U7CiAgICAgCiBwdWJsaWM6CiAgICAgU1NBQ29udmVyc2lvblBo
YXNlKEdyYXBoJiBncmFwaCkKQEAgLTUxLDYgKzUyLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKICAgICAg
ICAgCisgICAgICAgIGlmIChkdW1wR3JhcGgpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBo
IGR1bXAgYXQgdG9wIG9mIFNTQSBjb252ZXJzaW9uOlxuIik7CisgICAgICAgICAgICBtX2dyYXBo
LmR1bXAoKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8gRmlndXJlIG91dCB3aGlj
aCBTZXRMb2NhbCdzIG5lZWQgZmx1c2hpbmcuIE5lZWQgdG8gZG8gdGhpcyB3aGlsZSB0aGUKICAg
ICAgICAgLy8gUGhpIGdyYXBoIGlzIHN0aWxsIGludGFjdC4KICAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CkBA
IC0xMDgsMTYgKzExNCwyNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIElmIGl0IHR1cm5zIG91dCB0
byBiZSBhIG5vbi10cml2aWFsIFBoaSwgbWFrZSBzdXJlIHRoYXQgd2UgY3JlYXRlIGFuCiAgICAg
ICAgIC8vIFNTQSBQaGkgYW5kIFVwc2lsb25zIGluIHByZWRlY2Vzc29yIGJsb2Nrcy4gV2UgcmV1
c2UKICAgICAgICAgLy8gQmFzaWNCbG9jazo6dmFyaWFibGVzQXRIZWFkIGZvciB0cmFja2luZyB3
aGljaCBub2RlcyB0byByZWZlciB0by4KKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbm9uVHJpdmlh
bFBoaXMoT3BlcmFuZHNMaWtlLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOwog
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7
IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgbm9uVHJpdmlhbFBo
aXMuZmlsbChmYWxzZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+cGhp
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhp
c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXBoaS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCkp
CisgICAgICAgICAgICAgICAgICAgIG5vblRyaXZpYWxQaGlzLm9wZXJhbmQocGhpLT5sb2NhbCgp
KSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewog
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwog
ICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkF0IGJsb2NrICMiLCBibG9ja0luZGV4LCAiIGZvciBvcGVy
YW5kIHIiLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKSwgIiBoYXZl
IG5vZGUgIiwgbm9kZSwgIlxuIik7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwogICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFBvaXNvbiB0aGlzIGVudHJ5IGluIHZhcmlhYmxlc0F0SGVhZCBiZWNh
dXNlIHdlIGRvbid0CkBAIC0xNDQsMTYgKzE2MSwyMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgYm9vbCBpc0ZsdXNoZWQgPSBtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsK
LSAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNo
aWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlZGdlKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5vblRyaXZpYWxQaGlzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmp1c3RPbmVDaGlsZCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGVkZ2UpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIE9uZSBjaGlsZDogIiwgZWRnZSwgIiwgIiwgUmF3UG9pbnRlcihlZGdlLm5vZGUoKSks
ICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVkZ2Uubm9kZSgpOyAvLyBJ
dCdzIHNvbWV0aGluZyBmcm9tIGEgZGlmZmVyZW50IGJhc2ljIGJsb2NrLgotICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBOb24tdHJpdmlhbC5cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SXQncyBhIG5vbi10cml2aWFsIFBoaS4KICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9y
bWF0IGZvcm1hdCA9IHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgTm9kZUZsYWdzIHJlc3VsdCA9IHJlc3VsdEZvcihmb3JtYXQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdXNlS2luZEZvcihmb3JtYXQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgwLCBTcGVjTm9uZSwgUGhpLCBDb2RlT3JpZ2luKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEluc2VydGVkIG5ldyBub2RlOiAiLCBub2RlLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MocmVzdWx0KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKChub2RlLT5mbGFncygpICYgTm9kZVJlc3Vs
dE1hc2spID09IHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTIyMCwxOSAr
MjQ0LDI3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQ2xlYXIgYWxsIHJlcGxhY2VtZW50cywgc2lu
Y2Ugb3RoZXIgcGhhc2VzIG1heSBoYXZlIHVzZWQgdGhlbS4KICAgICAgICAgbV9ncmFwaC5jbGVh
clJlcGxhY2VtZW50cygpOwogICAgICAgICAKKyAgICAgICAgaWYgKGR1bXBHcmFwaCkgeworICAg
ICAgICAgICAgZGF0YUxvZygiR3JhcGgganVzdCBiZWZvcmUgaWRlbnRpZnlpbmcgcmVwbGFjZW1l
bnRzOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgLy8gRm9yIGFsbCBvZiB0aGUgb2xkIENQUyBQaGlzLCBmaWd1cmUgb3V0IHdo
YXQgdGhleSBjb3JyZXNwb25kIHRvIGluIFNTQS4KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVhbGluZyB3aXRoIGJs
b2NrICMiLCBibG9ja0luZGV4LCAiXG4iKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhp
SW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7CiAgICAgICAgICAgICAg
ICAgTm9kZSogcGhpID0gYmxvY2stPnBoaXNbcGhpSW5kZXhdOwogICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAg
ICAgICAgICAgICAiQ29uc2lkZXJpbmcgIiwgcGhpLCAiLCBmb3IgciIsIHBoaS0+bG9jYWwoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICIsIGFuZCBpdHMgcmVwbGFjZW1lbnQgaW4gIiwgKmJs
b2NrLCAiLCAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnNpZGVyaW5nICIsIHBoaSwg
IiAoIiwgUmF3UG9pbnRlcihwaGkpLCAiKSwgZm9yIHIiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgcGhpLT5sb2NhbCgpLCAiLCBhbmQgaXRzIHJlcGxhY2VtZW50IGluICIsICpibG9jaywgIiwg
IiwKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFu
ZChwaGktPmxvY2FsKCkpLCAiXG4iKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHBoaSAhPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQocGhpLT5sb2Nh
bCgpKSk7CiAgICAgICAgICAgICAgICAgcGhpLT5taXNjLnJlcGxhY2VtZW50ID0gYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5vcGVyYW5kKHBoaS0+bG9jYWwoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTI0OCw4ICsyODAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwogICAgICAgICAgICAgICAgIGlmICgh
bm9kZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgd2hp
bGUgKG5vZGUtPm1pc2MucmVwbGFjZW1lbnQpCisgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUt
Pm1pc2MucmVwbGFjZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUgIT0g
bm9kZS0+bWlzYy5yZXBsYWNlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT5taXNjLnJlcGxhY2VtZW50OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
bG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gbm9kZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkocmV2aXNpb24gMTYzMDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsOSArMTMxLDkgQEAgaW5saW5lIENh
cGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgVG9TdHJpbmc6CiAgICAg
Y2FzZSBNYWtlUm9wZToKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CisgICAgY2FzZSBHZXRC
eUlkOgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R2V0QnlJZDoKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgY2FzZSBQdXRCeUlkOgogICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE2Mjk5NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyNCwzMCArMTI0LDM3IEBAIHZvaWQgZ2VuZXJhdGVJQ0Zhc3RQYXRoKAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVy
LT52YWx1ZTsKLQotICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7
Ci0gICAgaWMubV9nZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChmYXN0UGF0aEpJVCk7Ci0KLSAg
ICBjaGFyKiBzdGFydE9mSUMgPQotICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRl
ZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgICAgIAotICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgJmZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVP
ZklDKTsKLSAgICAvLyBOb3RlOiB3ZSBjb3VsZCBoYW5kbGUgdGhlICFpc1ZhbGlkKCkgY2FzZS4g
V2UganVzdCBkb24ndCBhcHBlYXIgdG8gaGF2ZSBhCi0gICAgLy8gcmVhc29uIHRvIGRvIHNvLCB5
ZXQuCi0gICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOworICAgIFZlY3Rv
cjxTdGFja01hcHM6OlJlY29yZD4mIHJlY29yZHMgPSBpdGVyLT52YWx1ZTsKICAgICAKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6QXNzZW1ibGVyVHlwZV9UOjpmaWxsTm9wcygKLSAgICAgICAgc3RhcnRP
ZklDICsgbGlua0J1ZmZlci5zaXplKCksIHNpemVPZklDIC0gbGlua0J1ZmZlci5zaXplKCkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlY29yZHMuc2l6ZSgpID09IGljLm1fZ2VuZXJhdG9ycy5zaXpl
KCkpOwogICAgIAotICAgIHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5saW5r
KAotICAgICAgICBpYy5tX3Nsb3dQYXRoRG9uZSwgQ29kZUxvY2F0aW9uTGFiZWwoc3RhcnRPZklD
ICsgc2l6ZU9mSUMpKTsKLSAgICAgICAgICAgIAotICAgIGxpbmtCdWZmZXIubGluaygKLSAgICAg
ICAgaWMubV9nZW5lcmF0b3Iuc2xvd1BhdGhKdW1wKCksCi0gICAgICAgIHN0YXRlLmZpbmFsaXpl
ci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGljLm1fZ2VuZXJhdG9yLnNsb3dQYXRo
QmVnaW4oKSkpOwotICAgICAgICAgICAgCi0gICAgaWMubV9nZW5lcmF0b3IuZmluYWxpemUobGlu
a0J1ZmZlciwgKnN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSByZWNvcmRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBTdGFja01hcHM6
OlJlY29yZCYgcmVjb3JkID0gcmVjb3Jkc1tpXTsKKyAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBp
Yy5tX2dlbmVyYXRvcnNbaV07CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2
bSwgY29kZUJsb2NrKTsKKyAgICAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlRmFzdFBhdGgoZmFzdFBh
dGhKSVQpOworICAgICAgICAKKyAgICAgICAgY2hhciogc3RhcnRPZklDID0KKyAgICAgICAgICAg
IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0
aW9uT2Zmc2V0OworICAgICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAm
ZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMpOworICAgICAgICAvLyBOb3RlOiB3ZSBj
b3VsZCBoYW5kbGUgdGhlICFpc1ZhbGlkKCkgY2FzZS4gV2UganVzdCBkb24ndCBhcHBlYXIgdG8g
aGF2ZSBhCisgICAgICAgIC8vIHJlYXNvbiB0byBkbyBzbywgeWV0LgorICAgICAgICBSRUxFQVNF
X0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QXNzZW1ibGVyVHlwZV9UOjpmaWxsTm9wcygKKyAgICAgICAgICAgIHN0YXJ0T2ZJ
QyArIGxpbmtCdWZmZXIuc2l6ZSgpLCBzaXplT2ZJQyAtIGxpbmtCdWZmZXIuc2l6ZSgpKTsKKyAg
ICAgICAgCisgICAgICAgIHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5saW5r
KAorICAgICAgICAgICAgaWMubV9zbG93UGF0aERvbmVbaV0sIENvZGVMb2NhdGlvbkxhYmVsKHN0
YXJ0T2ZJQyArIHNpemVPZklDKSk7CisgICAgICAgIAorICAgICAgICBsaW5rQnVmZmVyLmxpbmso
CisgICAgICAgICAgICBnZW5lcmF0b3Iuc2xvd1BhdGhKdW1wKCksCisgICAgICAgICAgICBzdGF0
ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZihnZW5lcmF0b3Iuc2xv
d1BhdGhCZWdpbigpKSk7CisgICAgICAgIAorICAgICAgICBnZW5lcmF0b3IuZmluYWxpemUobGlu
a0J1ZmZlciwgKnN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyKTsKKyAgICB9CiB9
CiAKIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKQEAgLTE2MCw5ICsx
NjcsMTAgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIAog
ICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQo
c3RhdGUuY2FwdHVyZWRTdGFja21hcElEKTsKICAgICBSRUxFQVNFX0FTU0VSVChpdGVyICE9IHJl
Y29yZE1hcC5lbmQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWUubG9jYXRpb25z
LnNpemUoKSA9PSAxKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0g
MSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9
PSAxKTsKICAgICBMb2NhdGlvbiBjYXB0dXJlZExvY2F0aW9uID0KLSAgICAgICAgTG9jYXRpb246
OmZvclN0YWNrbWFwcygmaml0Q29kZS0+c3RhY2ttYXBzLCBpdGVyLT52YWx1ZS5sb2NhdGlvbnNb
MF0pOworICAgICAgICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZqaXRDb2RlLT5zdGFja21hcHMs
IGl0ZXItPnZhbHVlWzBdLmxvY2F0aW9uc1swXSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVy
ZWRMb2NhdGlvbi5raW5kKCkgPT0gTG9jYXRpb246OlJlZ2lzdGVyKTsKICAgICBSRUxFQVNFX0FT
U0VSVChjYXB0dXJlZExvY2F0aW9uLmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKICAgICBSRUxFQVNFX0FTU0VSVCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgJSBzaXpl
b2YoUmVnaXN0ZXIpKSk7CkBAIC0yNzIsMjggKzI4MCwzMCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNv
cmQgPSBpdGVyLT52YWx1ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6IExM
Vk0gc2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgotICAgICAgICAgICAg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlY29yZC5sb2NhdGlv
bnNbMF0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlY29yZC5sb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgZ2V0QnlJZC5jb2Rl
T3JpZ2luKCksIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2UpLAotICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlc3VsdCksIGZhbHNlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZVtpXTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQu
bGFiZWwoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3Rl
cnMsIHNsb3dQYXRoSklULCBnZXRCeUlkLmNvZGVPcmlnaW4oKSwgJmV4Y2VwdGlvblRhcmdldCwK
LSAgICAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdCwgZ2VuLnN0
dWJJbmZvKCksIGJhc2UsIGdldEJ5SWQudWlkKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGJlZ2luLCBjYWxsKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgZ2V0QnlJZC5tX3Nsb3dQYXRoRG9uZSA9IHNsb3dQYXRoSklULmp1bXAoKTsKLSAg
ICAgICAgICAgIGdldEJ5SWQubV9nZW5lcmF0b3IgPSBnZW47CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IExMVk0gc2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgorICAg
ICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6YWxs
UmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7CisgICAgICAgICAgICAgICAg
R1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAgICAg
ICAgICAgICAgICAgICBjb2RlQmxvY2ssIGdldEJ5SWQuY29kZU9yaWdpbigpLCB1c2VkUmVnaXN0
ZXJzLCBKU1ZhbHVlUmVncyhiYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVzdWx0KSwgZmFsc2UpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBiZWdpbiA9IHNsb3dQYXRoSklULmxhYmVsKCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93
UGF0aEpJVCwgZ2V0QnlJZC5jb2RlT3JpZ2luKCksICZleGNlcHRpb25UYXJnZXQsCisgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0LCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZSwgZ2V0QnlJZC51aWQoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChiZWdpbiwgY2FsbCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgZ2V0QnlJZC5tX3Nsb3dQYXRoRG9uZS5hcHBlbmQoc2xvd1Bh
dGhKSVQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9ycy5hcHBl
bmQoZ2VuKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc3RhdGUucHV0QnlJZHMuc2l6ZSgpOyBpLS07KSB7CkBAIC0zMDgsMjkg
KzMxOCwzMSBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gRklYTUU6IExMVk0gc2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVn
aXN0ZXJzIGFyZSBsaXZlLgotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9
IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
R1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOwotICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlID0gcmVjb3JkLmxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAg
ICAgICAgY29kZUJsb2NrLCBwdXRCeUlkLmNvZGVPcmlnaW4oKSwgdXNlZFJlZ2lzdGVycywgSlNW
YWx1ZVJlZ3MoYmFzZSksCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWUpLCBNYWNy
b0Fzc2VtYmxlcjo6c2NyYXRjaFJlZ2lzdGVyLCBmYWxzZSwgcHV0QnlJZC5lY21hTW9kZSgpLAot
ICAgICAgICAgICAgICAgIHB1dEJ5SWQucHV0S2luZCgpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQ
YXRoSklULCBwdXRCeUlkLmNvZGVPcmlnaW4oKSwgJmV4Y2VwdGlvblRhcmdldCwKLSAgICAgICAg
ICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWUsIGJh
c2UsIHB1dEJ5SWQudWlkKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGJlZ2luLCBjYWxsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcHV0
QnlJZC5tX3Nsb3dQYXRoRG9uZSA9IHNsb3dQYXRoSklULmp1bXAoKTsKLSAgICAgICAgICAgIHB1
dEJ5SWQubV9nZW5lcmF0b3IgPSBnZW47CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdGFja01h
cHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IExMVk0gc2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0
ZXJzIGFyZSBsaXZlLgorICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMg
PSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOwor
ICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0
R1BSKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgSklUUHV0QnlJZEdlbmVy
YXRvciBnZW4oCisgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgcHV0QnlJZC5jb2RlT3Jp
Z2luKCksIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2UpLAorICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlUmVncyh2YWx1ZSksIE1hY3JvQXNzZW1ibGVyOjpzY3JhdGNoUmVnaXN0ZXIs
IGZhbHNlLCBwdXRCeUlkLmVjbWFNb2RlKCksCisgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWQu
cHV0S2luZCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKAorICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhK
SVQsIHB1dEJ5SWQuY29kZU9yaWdpbigpLCAmZXhjZXB0aW9uVGFyZ2V0LAorICAgICAgICAgICAg
ICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWUsIGJh
c2UsIHB1dEJ5SWQudWlkKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoYmVnaW4sIGNhbGwpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHB1dEJ5SWQubV9zbG93UGF0aERvbmUuYXBwZW5kKHNsb3dQYXRoSklULmp1
bXAoKSk7CisgICAgICAgICAgICAgICAgcHV0QnlJZC5tX2dlbmVyYXRvcnMuYXBwZW5kKGdlbik7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGV4Y2VwdGlvblRh
cmdldC5saW5rKCZzbG93UGF0aEpJVCk7CkBAIC0zNTUsMTkgKzM2NywyMCBAQCBzdGF0aWMgdm9p
ZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgCiAgICAgLy8gSGFuZGxpbmcgSlMg
Y2FsbHMgaXMgd2VpcmQ6IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugc29ydCB0aGVtIGJ5IHRo
ZSBQQyBpbiBMTFZNCiAgICAgLy8gZ2VuZXJhdGVkIGNvZGUuIFRoYXQgaW1wbGllcyBmaXJzdCBw
cnVuaW5nIHRoZSBvbmVzIHRoYXQgTExWTSBkaWRuJ3QgZ2VuZXJhdGUuCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0YXRlLmpzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSlND
YWxsJiBjYWxsID0gc3RhdGUuanNDYWxsc1tpXTsKKyAgICBWZWN0b3I8SlNDYWxsPiBvbGRDYWxs
cyA9IHN0YXRlLmpzQ2FsbHM7CisgICAgc3RhdGUuanNDYWxscy5yZXNpemUoMCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEpT
Q2FsbCYgY2FsbCA9IG9sZENhbGxzW2ldOwogICAgICAgICAKICAgICAgICAgU3RhY2tNYXBzOjpS
ZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQo
KSk7Ci0gICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgewotICAgICAgICAgICAg
Ly8gSXQgd2FzIG9wdGltaXplZCBvdXQuIFBydW5lIGl0LgotICAgICAgICAgICAgY2FsbCA9IHN0
YXRlLmpzQ2FsbHMubGFzdCgpOwotICAgICAgICAgICAgc3RhdGUuanNDYWxscy5yZW1vdmVMYXN0
KCk7Ci0gICAgICAgICAgICBpLS07CisgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraikgeworICAgICAgICAgICAgSlNDYWxsIGNvcHkg
PSBjYWxsOworICAgICAgICAgICAgY29weS5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFs
dWVbal0uaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICBzdGF0ZS5qc0NhbGxzLmFwcGVu
ZChjb3B5KTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FsbC5tX2luc3RydWN0aW9u
T2Zmc2V0ID0gaXRlci0+dmFsdWUuaW5zdHJ1Y3Rpb25PZmZzZXQ7CiAgICAgfQogICAgIAogICAg
IHN0ZDo6c29ydChzdGF0ZS5qc0NhbGxzLmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMuZW5kKCkpOwpA
QCAtMzk3LDEyICs0MTAsMTQgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tN
YXBzKAogICAgIC8vIEl0J3Mgc29ydCBvZiByZW1vdGVseSBwb3NzaWJsZSB0aGF0IHdlIHdvbid0
IGhhdmUgYW4gaW4tYmFuZCBleGNlcHRpb24gaGFuZGxpbmcKICAgICAvLyBwYXRoLCBmb3Igc29t
ZSBraW5kcyBvZiBmdW5jdGlvbnMuCiAgICAgaWYgKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKSB7
Ci0gICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZTsKLSAgICAg
ICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNvdXJjZSA9IENvZGVMb2NhdGlvbkxhYmVs
KAotICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyBy
ZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQpOwotCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFj
ZVdpdGhKdW1wKHNvdXJjZSwgc3RhdGUuZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1
ZmZlci0+ZW50cnlwb2ludCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlci0+dmFs
dWUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3Jk
ID0gaXRlci0+dmFsdWVbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIHNvdXJjZSA9IENvZGVMb2NhdGlvbkxhYmVsKAorICAgICAgICAgICAgICAgIGJpdHdp
c2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zm
c2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0
aEp1bXAoc291cmNlLCBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVy
LT5lbnRyeXBvaW50KCkpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGZvciAodW5zaWdu
ZWQgZXhpdEluZGV4ID0gMDsgZXhpdEluZGV4IDwgaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsr
ZXhpdEluZGV4KSB7CkBAIC00MTMsMTcgKzQyOCwxOSBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlv
bkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKj4gY29kZUFkZHJl
c3NlczsKICAgICAgICAgCiAgICAgICAgIGlmIChpdGVyICE9IHJlY29yZE1hcC5lbmQoKSkgewot
ICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzb3VyY2UgPSBDb2RlTG9j
YXRpb25MYWJlbCgKLSAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRl
ZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNvZGVBZGRyZXNzZXMuYXBwZW5kKGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJh
dGVkRnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0ICsgTWFjcm9Bc3NlbWJsZXI6
Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChpbmZvLm1faXNJbnZhbGlkYXRpb25Qb2ludCkKLSAgICAgICAgICAgICAgICBqaXRDb2RlLT5j
b21tb24uanVtcFJlcGxhY2VtZW50cy5hcHBlbmQoSnVtcFJlcGxhY2VtZW50KHNvdXJjZSwgaW5m
by5tX3RodW5rQWRkcmVzcykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKHNvdXJjZSwgaW5mby5tX3RodW5rQWRkcmVzcyk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpdGVyLT52YWx1ZS5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFs
dWVbaV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgc291cmNlID0gQ29kZUxvY2F0aW9uTGFiZWwoCisgICAgICAgICAgICAgICAgICAgIGJpdHdp
c2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zm
c2V0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb2RlQWRkcmVzc2VzLmFw
cGVuZChiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0
cnVjdGlvbk9mZnNldCArIE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpbmZvLm1faXNJbnZhbGlk
YXRpb25Qb2ludCkKKyAgICAgICAgICAgICAgICAgICAgaml0Q29kZS0+Y29tbW9uLmp1bXBSZXBs
YWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudChzb3VyY2UsIGluZm8ubV90aHVua0FkZHJl
c3MpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVwbGFjZVdpdGhKdW1wKHNvdXJjZSwgaW5mby5tX3RodW5rQWRkcmVzcyk7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChncmFwaC5jb21waWxh
dGlvbigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURl
c2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
bGluZUNhY2hlRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxNjI5OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nSW1wbCogbV91aWQ7CiAgICAgCiBwdWJs
aWM6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aERvbmU7CisgICAgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyOjpKdW1wPiBtX3Nsb3dQYXRoRG9uZTsKIH07CiAKIGNsYXNzIEdldEJ5
SWREZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7CkBAIC02OCw3ICs2
OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgbV9nZW5lcmF0b3I7CisgICAgVmVjdG9yPEpJVEdldEJ5SWRHZW5lcmF0b3I+IG1fZ2VuZXJh
dG9yczsKIH07CiAKIGNsYXNzIFB1dEJ5SWREZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hl
RGVzY3JpcHRvciB7CkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAg
IAotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgbV9nZW5lcmF0b3I7CisgICAgVmVjdG9yPEpJVFB1
dEJ5SWRHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yczsKICAgICAKICAgICBFQ01BTW9kZSBlY21hTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWNtYU1vZGU7IH0KICAgICBQdXRLaW5kIHB1dEtpbmQoKSBj
b25zdCB7IHJldHVybiBtX3B1dEtpbmQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksMTEgKzQ5LDE0IEBAIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKIHsKICAgICBz
aXplX3QgcmVzdWx0ID0gMDsKICAgICAKLSAgICByZXN1bHQgKz0gZXhpdFRodW5rc0xpbmtCdWZm
ZXItPnNpemUoKTsKLSAgICByZXN1bHQgKz0gZW50cnlwb2ludExpbmtCdWZmZXItPnNpemUoKTsK
KyAgICBpZiAoZXhpdFRodW5rc0xpbmtCdWZmZXIpCisgICAgICAgIHJlc3VsdCArPSBleGl0VGh1
bmtzTGlua0J1ZmZlci0+c2l6ZSgpOworICAgIGlmIChlbnRyeXBvaW50TGlua0J1ZmZlcikKKyAg
ICAgICAgcmVzdWx0ICs9IGVudHJ5cG9pbnRMaW5rQnVmZmVyLT5zaXplKCk7CiAgICAgaWYgKHNp
ZGVDb2RlTGlua0J1ZmZlcikKICAgICAgICAgcmVzdWx0ICs9IHNpZGVDb2RlTGlua0J1ZmZlci0+
c2l6ZSgpOwotICAgIHJlc3VsdCArPSBoYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlci0+c2l6ZSgp
OworICAgIGlmIChoYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlcikKKyAgICAgICAgcmVzdWx0ICs9
IGhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyLT5zaXplKCk7CiAgICAgCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gaml0Q29kZS0+aGFuZGxlcygpLnNpemUoKTsgaS0tOykKICAgICAgICAgcmVzdWx0
ICs9IGppdENvZGUtPmhhbmRsZXMoKVtpXS0+c2l6ZUluQnl0ZXMoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNiAr
MzIsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCitKU0NhbGw6OkpT
Q2FsbCgpCisgICAgOiBtX3N0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBtX25vZGUoMCkKKyAg
ICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoVUlOVF9NQVgpCit7Cit9CisKIEpTQ2FsbDo6SlNDYWxs
KHVuc2lnbmVkIHN0YWNrbWFwSUQsIERGRzo6Tm9kZSogbm9kZSkKICAgICA6IG1fc3RhY2ttYXBJ
RChzdGFja21hcElEKQogICAgICwgbV9ub2RlKG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNDYWxsLmgJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQzLDcgQEAgbmFtZXNw
YWNlIEZUTCB7CiAKIGNsYXNzIEpTQ2FsbCB7CiBwdWJsaWM6CisgICAgSlNDYWxsKCk7CiAgICAg
SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIERGRzo6Tm9kZSopOwogICAgIAogICAgIHZvaWQg
ZW1pdChDQ2FsbEhlbHBlcnMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjMwMDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYwNCwzMCArMTYwNCw0NCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEJ5
SWQoKQogICAgIHsKLSAgICAgICAgLy8gVW50eXBlZFVzZSBpcyBhIGJpdCBoYXJkZXIgdG8gcmVh
c29uIGFib3V0IGFuZCBJJ20gbm90IHN1cmUgaG93IGJlc3QgdG8gZG8gaXQsIHlldC4KLSAgICAg
ICAgLy8gQmFzaWNhbGx5IHdlIG5lZWQgdG8gZW1pdCBhIGNlbGwgYnJhbmNoIHRoYXQgdGFrZXMg
eW91IHRvIHRoZSBzbG93IHBhdGgsIGJ1dCB0aGUgc2xvdwotICAgICAgICAvLyBwYXRoIGlzIGdl
bmVyYXRlZCBieSB0aGUgSUMgZ2VuZXJhdG9yIHNvIHdlIGNhbid0IGp1bXAgdG8gaXQgZnJvbSBo
ZXJlLiBBbmQgdGhlIElDCi0gICAgICAgIC8vIGdlbmVyYXRvciBjdXJyZW50bHkgZG9lc24ndCBr
bm93IGhvdyB0byBlbWl0IHN1Y2ggYSBicmFuY2guIFNvLCBmb3Igbm93LCB3ZSBqdXN0Ci0gICAg
ICAgIC8vIHJlc3RyaWN0IHRoaXMgdG8gQ2VsbFVzZS4KLSAgICAgICAgQVNTRVJUKG1fbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpOwotCi0gICAgICAgIExWYWx1ZSBiYXNlID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9n
cmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKLQotICAgICAg
ICAvLyBBcmd1bWVudHM6IGlkLCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBhcmdzLi4uCi0gICAg
ICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBkYXRh
TG9nKCIgICAgRW1pdHRpbmcgR2V0QnlJZCBwYXRjaHBvaW50IHdpdGggc3RhY2ttYXAgIyIsIHN0
YWNrbWFwSUQsICJcbiIpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5j
YWxsKAotICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksCi0gICAg
ICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNp
emVPZkdldEJ5SWQoKSksCi0gICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0
LmNvbnN0SW50MzIoMSksIGJhc2UpOwotICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252
ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7Ci0gICAgICAgIHNldEpTVmFsdWUoY2Fs
bCk7Ci0gICAgICAgIAotICAgICAgICBtX2Z0bFN0YXRlLmdldEJ5SWRzLmFwcGVuZChHZXRCeUlk
RGVzY3JpcHRvcihzdGFja21hcElELCBtX25vZGUtPmNvZGVPcmlnaW4sIHVpZCkpOworICAgICAg
ICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2Vs
bFVzZTogeworICAgICAgICAgICAgc2V0SlNWYWx1ZShnZXRCeUlkKGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgLy8gVGhpcyBpcyBwcmV0
dHkgd2VpcmQsIHNpbmNlIHdlIGR1cGxpY2F0ZSB0aGUgc2xvdyBwYXRoIGJvdGggaGVyZSBhbmQg
aW4gdGhlCisgICAgICAgICAgICAvLyBjb2RlIGdlbmVyYXRlZCBieSB0aGUgSUMuIFdlIHNob3Vs
ZCBpbnZlc3RpZ2F0ZSBtYWtpbmcgdGhpcyBsZXNzIGJhZC4KKyAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc4MzAKKyAgICAgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJHZXRCeUlkIHVudHlwZWQgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5SWQgdW50eXBlZCBub3Qg
Y2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJHZXRCeUlkIHVudHlwZWQgY29udGludWF0aW9uIikpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlKSwgY2VsbENh
c2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihnZXRCeUlkKHZh
bHVlKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24p
OworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hv
cih2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5
SWQpLAorICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBnZXRVbmRlZihtX291dC5pbnRQdHIp
LCB2YWx1ZSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX2dyYXBoLmlkZW50
aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKSkpOworICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
bV9vdXQucGhpKG1fb3V0LmludDY0LCBjZWxsUmVzdWx0LCBub3RDZWxsUmVzdWx0KSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlk
KCkKQEAgLTMzOTUsNiArMzQwOSwyNyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5zdG9yZTY0
KG1fb3V0LmFkZChtX291dC5sb2FkNjQoY291bnRlciksIG1fb3V0LmNvbnN0SW50NjQoMSkpLCBj
b3VudGVyKTsKICAgICB9CiAgICAgCisgICAgTFZhbHVlIGdldEJ5SWQoTFZhbHVlIGJhc2UpCisg
ICAgeworICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9u
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOworCisgICAgICAgIC8vIEFyZ3VtZW50czogaWQsIGJ5
dGVzLCB0YXJnZXQsIG51bUFyZ3MsIGFyZ3MuLi4KKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJ
RCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlQ29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBFbWl0dGluZyBHZXRC
eUlkIHBhdGNocG9pbnQgd2l0aCBzdGFja21hcCAjIiwgc3RhY2ttYXBJRCwgIlxuIik7CisgICAg
ICAgIAorICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCisgICAgICAgICAgICBtX291
dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKKyAgICAg
ICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgYmFzZSk7
CisgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJl
Z0NhbGxDb252KTsKKyAgICAgICAgCisgICAgICAgIG1fZnRsU3RhdGUuZ2V0QnlJZHMuYXBwZW5k
KEdldEJ5SWREZXNjcmlwdG9yKHN0YWNrbWFwSUQsIG1fbm9kZS0+Y29kZU9yaWdpbiwgdWlkKSk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gY2FsbDsKKyAgICB9CisgICAgCiAgICAgVHlwZWRQ
b2ludGVyIGJhc2VJbmRleChJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwLCBMVmFsdWUgc3RvcmFn
ZSwgTFZhbHVlIGluZGV4LCBFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICByZXR1cm4gbV9vdXQu
YmFzZUluZGV4KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBz
LmNwcAkocmV2aXNpb24gMTYyOTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGFja01hcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgU3RhY2tNYXBz
OjpSZWNvcmRNYXAgU3RhY2tNYXBzOjpnZXRSZWNvcgogewogICAgIFJlY29yZE1hcCByZXN1bHQ7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVjb3Jkcy5zaXplKCk7IGktLTspCi0gICAgICAgIHJl
c3VsdC5hZGQocmVjb3Jkc1tpXS5wYXRjaHBvaW50SUQsIHJlY29yZHNbaV0pOworICAgICAgICBy
ZXN1bHQuYWRkKHJlY29yZHNbaV0ucGF0Y2hwb2ludElELCBWZWN0b3I8UmVjb3JkPigpKS5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKHJlY29yZHNbaV0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAkocmV2aXNpb24g
MTYyOTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAkod29y
a2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBzdHJ1Y3QgU3RhY2tNYXBzIHsKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBNdWx0aWxpbmUoUHJpbnRT
dHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgpIGNvbnN0OwogICAgIAotICAgIHR5cGVkZWYgSGFz
aE1hcDx1aW50MzJfdCwgUmVjb3JkLCBXVEY6OkludEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gUmVjb3JkTWFwOworICAgIHR5cGVk
ZWYgSGFzaE1hcDx1aW50MzJfdCwgVmVjdG9yPFJlY29yZD4sIFdURjo6SW50SGFzaDx1aW50MzJf
dD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBSZWNvcmRN
YXA7CiAgICAgCiAgICAgUmVjb3JkTWFwIGdldFJlY29yZE1hcCgpIGNvbnN0OwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LWJ5LWlkLXVudHlwZWQuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXQtYnkt
aWQtdW50eXBlZC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvZ2V0LWJ5LWlkLXVudHlwZWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MSBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGluZShm
b28pOworCitTdHJpbmcucHJvdG90eXBlLmYgPSA0MjsKK051bWJlci5wcm90b3R5cGUuZiA9IDI0
OworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9
IGZvbygiaGVsbG8iKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQgZm9yIHN0cmluZzogIiArIHJlc3VsdDsKKyAgICByZXN1bHQgPSBmb28o
MTMpOworICAgIGlmIChyZXN1bHQgIT0gMjQpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdCBmb3IgbnVtYmVyOiAiICsgcmVzdWx0OworICAgIHJlc3VsdCA9IGZvbyh7Zjo4NH0pOwor
ICAgIGlmIChyZXN1bHQgIT0gODQpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBm
b3Igb2JqZWN0OiAiICsgcmVzdWx0OworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222629</attachid>
            <date>2014-01-29 23:18:31 -0800</date>
            <delta_ts>2014-01-30 10:59:08 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38627</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMDY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE0LTAxLTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBzdXBwb3J0IEdldEJ5SWQoVW50eXBlZDopCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc3NTAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgd2FzIHN1cHBvc2VkIHRv
IGJlIGVhc3kuIEluZGVlZCwgdGhlIGFjdHVhbCBHZXRCeUlkIFVudHlwZWRVc2UgY2FzZSB3YXMg
ZWFzeS4gQnV0CisgICAgICAgIHRoZW4gaXQgZXhwYW5kZWQgY292ZXJhZ2UgYnkgYSBsb3QgYW5k
IEkgZ290IHRvIGRlYWwgd2l0aCB0aHJlZSBidWdzLiBTbywgdGhpcyBoYXMKKyAgICAgICAgc29t
ZSBhZGRpdGlvbmFsIGNoYW5nZXM6CisgICAgICAgIAorICAgICAgICBBbHNvIG1ha2UgaXQgc2Fm
ZSBmb3IgTExWTSB0byBkdXBsaWNhdGUgY2FsbHMgdG8gcGF0Y2hwb2ludHMgYW5kIHN0YWNrbWFw
cy4gUHJldmlvdXNseQorICAgICAgICB3ZSBpbmNvcnJlY3RseSBhc3N1bWVkIHRoYXQgaWYgd2Ug
ZW1pdHRlZCBhIHBhdGNocG9pbnQsIHRoZW4gdGhlcmUgd291bGQgb25seSBiZSBvbmUKKyAgICAg
ICAgY29weSBvZiB0aGF0IHBhdGNocG9pbnQgKHdpdGggdGhhdCBJRCkgaW4gdGhlIHJlc3VsdGlu
ZyBtYWNoaW5lIGNvZGUgYW5kIGluIHRoZQorICAgICAgICBzdGFja21hcHMgc2VjdGlvbi4gVGhh
dCdzIG9idmlvdXNseSBhIGJhZCBhc3N1bXB0aW9uIC0gTExWTSBpcyBhbGxvd2VkIHRvIGRvIGFu
eXRoaW5nCisgICAgICAgIGl0IHdhbnRzIHNvIGxvbmcgYXMgdGhlIG91dGNvbWUgb2YgZXhlY3V0
aW5nIHRoZSBjb2RlIGhhcyBhIHNlbWFudGljYWxseSBlcXVpdmFsZW50CisgICAgICAgIG1lYW5p
bmcgdG8gdGhlIElSIHdlIGdhdmUgaXQsIGFuZCBkdXBsaWNhdGluZyBjb2RlIGlzIHRyaXZpYWxs
eSBPSyB1bmRlciB0aGlzIHJ1bGUuIFdlCisgICAgICAgIHNob3VsZCBiZSBPSyB3aXRoIGl0LCB0
b28uIFRoZSBzb2x1dGlvbiBpcyB0byBhZGQgVmVjdG9ycyBpbiBhIGJ1bmNoIG9mIHBsYWNlcyB0
aGF0CisgICAgICAgIHByZXZpb3VzbHkganVzdCB0aG91Z2h0IHRoZXkgb25seSBoYWQgb25lIHZh
bHVlLiBGb3IgZXhhbXBsZSwgYW4gSW5saW5lQ2FjaGVEZXNjcmlwdG9yCisgICAgICAgIG5vdyBo
YXMgYSBWZWN0b3Igb2YgZ2VuZXJhdG9ycyAtIG9uZSBnZW5lcmF0b3IgZm9yIGVhY2ggY29weSB0
aGF0IExMVk0gc3RhbXBlZCBvdXQuCisgICAgICAgIE5vcm1hbGx5IHRoZXJlIHdpbGwgb25seSBi
ZSBvbmUgY29weSwgb2YgY291cnNlIC0gc2luY2UgZHVwbGljYXRpb24gaXMgdXN1YWxseQorICAg
ICAgICB1bnByb2ZpdGFibGUuIEJ1dCwgaWYgTExWTSBkZWNpZGVzIHRoYXQgY29weWluZyB3b3Vs
ZCBiZSBncm9vdnkgdGhlbiB3ZSB3aWxsIG5vIGxvbmdlcgorICAgICAgICBiYXJmLgorICAgICAg
ICAKKyAgICAgICAgQWxzbyBmaXggU1NBIGNvbnZlcnNpb24uIEl0IHR1cm5zIG91dCB0aGF0IHdl
IG1pc2hhbmRsZWQgdGhlIGNhc2Ugd2hlcmUgYSBibG9jayBoYWQKKyAgICAgICAgbXVsdGlwbGUg
UGhpIGZ1bmN0aW9ucyBmb3IgdGhlIHNhbWUgbG9jYWwuIElmIGFueSBvZiB0aG9zZSBDUFMgUGhp
cyBmYWlsIHRvIHRyaXZpYWxpemUKKyAgICAgICAgaW4gdGhlIEF5Y29jay1Ib3JzcG9vbCBmaXhw
b2ludCwgd2UgbmVlZCB0byBpbnNlcnQgYW4gU1NBIFBoaS4gUHJldmlvdXNseSwgaXQgd2FzCisg
ICAgICAgIGFzc3VtaW5nIHRoYXQgc28gbG9uZyBhcyB0aGUgaGVhZCBDUFMgUGhpIHdhcyB0cml2
aWFsLCB3ZSBjb3VsZCBmb3JlZ28gU1NBIFBoaQorICAgICAgICBpbnNlcnRpb24uIFRoYXQncyB3
cm9uZyBpZiB0aGUgaGVhZCBDUFMgUGhpIHRyaXZpYWxpemVkIGJ1dCBlbmRlZCB1cCBwb2ludGlu
ZyB0byBhCisgICAgICAgIG5vbi10cml2aWFsIENQUyBQaGkgaW4gdGhlIHNhbWUgYmxvY2suIFRo
aXMgbWFkbmVzcyB3aXRoIHRyZWVzIG9mIFBoaXMgb2NjdXJzIGJlY2F1c2UKKyAgICAgICAgd2Ug
dHJ5IHRvIHNhdmUgb24gY29tcGlsZSB0aW1lczogbm8gUGhpIGV2ZXIgaGFzIG1vcmUgdGhhbiB0
aHJlZSBjaGlsZHJlbiBldmVuIGlmIHRoZQorICAgICAgICBibG9jayBoYXMgbW9yZSB0aGFuIHRo
cmVlIHByZWRlY2Vzc29yczsgd2UganVzdCBidWlsZCBvdXQgYSB0cmVlIG9mIFBoaXMgdG8gc2F0
aXNmeQorICAgICAgICBhbGwgcHJlZGVjZXNzb3JzLiBTbyB3ZWlyZC4KKyAgICAgICAgCisgICAg
ICAgIEFuZCBmaW5hbGx5LCBmaXggREZHLT5GVEwgT1NSIGVudHJ5J3MgcmVjb25zdHJ1Y3Rpb24g
b2YgJ3RoaXMnIGluIGEgY29uc3RydWN0b3IuIFRoYXQKKyAgICAgICAgcmVjb25zdHJ1Y3Rpb24g
Y29kZSwgSklUQ29kZTo6cmVjb25zdHJ1Y3QoKSwgaGFkIGEgd29yay1hcm91bmQgZm9yIHRoZSBj
YXNlIHdoZXJlIHdlCisgICAgICAgIHdlcmUgZW50ZXJpbmcgaW50byBhIGNvbnN0cnVjdG9yIGF0
IHRoZSBwcm9sb2d1ZS4gSW4gdGhhdCBjYXNlLCAndGhpcycgaXMgZGVmaW5pdGVseQorICAgICAg
ICB1bmF2YWlsYWJsZS4gQnV0IHRoZSBPU1IgY29kZSBkb2VzIHJlY29uc3RydWN0aW9ucyBhdCBM
b29wSGludHMsIHdoaWNoIGFyZW4ndCBhdCB0aGUKKyAgICAgICAgcHJvbG9ndWUsIGFuZCBzbyAn
dGhpcycgc2hvdWxkIHRvdGFsbHkgYmUgYXZhaWxhYmxlLgorCisgICAgICAgICogZGZnL0RGR0dy
YXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZn
L0RGR0pJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OnJlY29uc3RydWN0
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnRy
eUdldFZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgor
ICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNh
bkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpnZW5lcmF0ZUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpGVEw6OmZpeEZ1bmN0aW9u
QmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRv
ci5oOgorICAgICAgICAqIGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkpJVEZpbmFsaXplcjo6Y29kZVNpemUpOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkpTQ2FsbDo6SlNDYWxsKToKKyAgICAgICAgKiBmdGwvRlRM
SlNDYWxsLmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5SWQpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpnZXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50
cnkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICog
ZnRsL0ZUTFN0YWNrTWFwcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpnZXRS
ZWNvcmRNYXApOgorICAgICAgICAqIGZ0bC9GVExTdGFja01hcHMuaDoKKyAgICAgICAgKiB0ZXN0
cy9zdHJlc3MvZ2V0LWJ5LWlkLXVudHlwZWQuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwog
MjAxNC0wMS0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZU
TCBzaG91bGQgc3VwcG9ydCBBcnJheVBvcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsMTkgKzI0NywyMSBAQCB2b2lk
IEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgfQogICAgIEFTU0VSVChu
b2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpID09IG5vZGUtPmhhc0xvY2FsKCp0aGlz
KSk7CiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykpIHsKLSAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCk7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkK
LSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImFyZyIsIG9wZXJhbmQudG9Bcmd1bWVudCgp
LCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSks
ICIpIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIs
IG9wZXJhbmQudG9Mb2NhbCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZh
cmlhYmxlQWNjZXNzRGF0YSksICIpIik7Ci0gICAgICAgIAotICAgICAgICBvcGVyYW5kID0gdmFy
aWFibGVBY2Nlc3NEYXRhLT5tYWNoaW5lTG9jYWwoKTsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNW
YWxpZCgpKSB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGlmICh2YXJpYWJs
ZUFjY2Vzc0RhdGEpIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwogICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1
bWVudCgpKQotICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6YXJnIiwg
b3BlcmFuZC50b0FyZ3VtZW50KCkpOworICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
ImFyZyIsIG9wZXJhbmQudG9Bcmd1bWVudCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAo
KnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibWFjaGluZTpsb2MiLCBvcGVyYW5kLnRvTG9j
YWwoKSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgb3BlcmFuZC50
b0xvY2FsKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nl
c3NEYXRhKSwgIikiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3BlcmFuZCA9IHZhcmlh
YmxlQWNjZXNzRGF0YS0+bWFjaGluZUxvY2FsKCk7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisg
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6YXJnIiwgb3BlcmFu
ZC50b0FyZ3VtZW50KCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAibWFjaGluZTpsb2MiLCBvcGVyYW5kLnRvTG9jYWwoKSk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1VubGlua2Vk
TG9jYWwoKSkgewpAQCAtMzMwLDggKzMzMiw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QKICAgICBvdXQucHJpbnQoIikiKTsKIAogICAgIGlmICghc2tpcHBlZCkg
ewotICAgICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSkKLSAgICAg
ICAgICAgIG91dC5wcmludCgiICBwcmVkaWN0aW5nICIsIFNwZWN1bGF0aW9uRHVtcChub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSk7CisgICAgICAgIGlmIChub2RlLT5o
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpICYmIG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNz
RGF0YSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwgU3BlY3VsYXRp
b25EdW1wKG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKTsK
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKICAgICAgICAgICAg
IG91dC5wcmludCgiICBwcmVkaWN0aW5nICIsIFNwZWN1bGF0aW9uRHVtcChub2RlLT5nZXRIZWFw
UHJlZGljdGlvbigpKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNjI5OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MCw4IEBAIHZvaWQgSklU
Q29kZTo6cmVjb25zdHJ1Y3QoCiAgICAgZm9yIChzaXplX3QgaSA9IHJlc3VsdC5zaXplKCk7IGkt
LTspIHsKICAgICAgICAgaW50IG9wZXJhbmQgPSByZXN1bHQub3BlcmFuZEZvckluZGV4KGkpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAg
IGlmIChjb2RlT3JpZ2luID09IENvZGVPcmlnaW4oMCkKKyAgICAgICAgICAgICYmIG9wZXJhbmRJ
c0FyZ3VtZW50KG9wZXJhbmQpCiAgICAgICAgICAgICAmJiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQpLnRvQXJndW1lbnQoKQogICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZQogICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktp
bmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTYyOTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxNyw2ICs1MTcsMTYgQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICByZXR1cm4gaGFzVmFyaWFibGVBY2Nlc3NEYXRhKGdyYXBoKTsKICAgICB9CiAg
ICAgCisgICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBjb2RlLCB3aGVyZSBhIG5v
ZGUgdGhhdCBzaG91bGQgaGF2ZSBhIHZhcmlhYmxlCisgICAgLy8gYWNjZXNzIGRhdGEgZG9lc24n
dCBoYXZlIG9uZSBiZWNhdXNlIGl0IGhhc24ndCBiZWVuIGluaXRpYWxpemVkIHlldC4KKyAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpCisgICAgeworICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFyaWFi
bGVBY2Nlc3NEYXRhKj4obV9vcEluZm8pOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcmVzdWx0LT5maW5kKCk7CisgICAgfQorICAg
IAogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFZhcmlhYmxlQWNjZXNzRGF0YSo+KG1fb3BJ
bmZvKS0+ZmluZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252
ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMTYyOTk1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3Mg
U1NBQ29udmVyc2lvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICBzdGF0aWMgY29uc3QgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZHVtcEdyYXBoID0gZmFs
c2U7CiAgICAgCiBwdWJsaWM6CiAgICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBoJiBncmFwaCkK
QEAgLTUxLDYgKzUyLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKICAgICAgICAgCisgICAgICAgIGlmIChk
dW1wR3JhcGgpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGR1bXAgYXQgdG9wIG9mIFNT
QSBjb252ZXJzaW9uOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBTZXRMb2NhbCdzIG5lZWQg
Zmx1c2hpbmcuIE5lZWQgdG8gZG8gdGhpcyB3aGlsZSB0aGUKICAgICAgICAgLy8gUGhpIGdyYXBo
IGlzIHN0aWxsIGludGFjdC4KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CkBAIC0xMDgsMTYgKzExNCwyNyBA
QCBwdWJsaWM6CiAgICAgICAgIC8vIElmIGl0IHR1cm5zIG91dCB0byBiZSBhIG5vbi10cml2aWFs
IFBoaSwgbWFrZSBzdXJlIHRoYXQgd2UgY3JlYXRlIGFuCiAgICAgICAgIC8vIFNTQSBQaGkgYW5k
IFVwc2lsb25zIGluIHByZWRlY2Vzc29yIGJsb2Nrcy4gV2UgcmV1c2UKICAgICAgICAgLy8gQmFz
aWNCbG9jazo6dmFyaWFibGVzQXRIZWFkIGZvciB0cmFja2luZyB3aGljaCBub2RlcyB0byByZWZl
ciB0by4KKyAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbm9uVHJpdmlhbFBoaXMoT3BlcmFuZHNMaWtl
LCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOwogICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsK
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4
KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAKKworICAgICAgICAgICAgbm9uVHJpdmlhbFBoaXMuZmlsbChmYWxzZSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+cGhpcy5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXBoaS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCkpCisgICAgICAgICAgICAgICAg
ICAgIG5vblRyaXZpYWxQaGlzLm9wZXJhbmQocGhpLT5sb2NhbCgpKSA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwogICAgICAgICAgICAgICAgIGlm
ICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkF0IGJsb2NrICMiLCBibG9ja0luZGV4LCAiIGZvciBvcGVyYW5kIHIiLCBibG9jay0+dmFy
aWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKSwgIiBoYXZlIG5vZGUgIiwgbm9kZSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFBv
aXNvbiB0aGlzIGVudHJ5IGluIHZhcmlhYmxlc0F0SGVhZCBiZWNhdXNlIHdlIGRvbid0CkBAIC0x
NDQsMTYgKzE2MSwyMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYm9vbCBpc0ZsdXNoZWQg
PSBtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChlZGdlKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW5vblRyaXZpYWxQ
aGlzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVk
Z2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmp1c3RPbmVDaGlsZCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGVkZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIE9uZSBjaGlsZDog
IiwgZWRnZSwgIiwgIiwgUmF3UG9pbnRlcihlZGdlLm5vZGUoKSksICJcbiIpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IGVkZ2Uubm9kZSgpOyAvLyBJdCdzIHNvbWV0aGluZyBmcm9t
IGEgZGlmZmVyZW50IGJhc2ljIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBOb24tdHJp
dmlhbC5cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBhIG5vbi10cml2aWFs
IFBoaS4KICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IHZhcmlh
YmxlLT5mbHVzaEZvcm1hdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUZsYWdzIHJl
c3VsdCA9IHJlc3VsdEZvcihmb3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgVXNlS2lu
ZCB1c2VLaW5kID0gdXNlS2luZEZvcihmb3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgwLCBTcGVjTm9uZSwgUGhpLCBDb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
IEluc2VydGVkIG5ldyBub2RlOiAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPm1lcmdlRmxhZ3MocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKChub2RlLT5mbGFncygpICYgTm9kZVJlc3VsdE1hc2spID09IHJlc3VsdCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTIyMCwxOSArMjQ0LDI3IEBAIHB1YmxpYzoK
ICAgICAgICAgLy8gQ2xlYXIgYWxsIHJlcGxhY2VtZW50cywgc2luY2Ugb3RoZXIgcGhhc2VzIG1h
eSBoYXZlIHVzZWQgdGhlbS4KICAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOwog
ICAgICAgICAKKyAgICAgICAgaWYgKGR1bXBHcmFwaCkgeworICAgICAgICAgICAgZGF0YUxvZygi
R3JhcGgganVzdCBiZWZvcmUgaWRlbnRpZnlpbmcgcmVwbGFjZW1lbnRzOlxuIik7CisgICAgICAg
ICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8gRm9y
IGFsbCBvZiB0aGUgb2xkIENQUyBQaGlzLCBmaWd1cmUgb3V0IHdoYXQgdGhleSBjb3JyZXNwb25k
IHRvIGluIFNTQS4KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2Nr
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRGVhbGluZyB3aXRoIGJsb2NrICMiLCBibG9ja0luZGV4
LCAiXG4iKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhp
cy5zaXplKCk7IHBoaUluZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gYmxv
Y2stPnBoaXNbcGhpSW5kZXhdOwogICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ29uc2lk
ZXJpbmcgIiwgcGhpLCAiLCBmb3IgciIsIHBoaS0+bG9jYWwoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICIsIGFuZCBpdHMgcmVwbGFjZW1lbnQgaW4gIiwgKmJsb2NrLCAiLCAiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIkNvbnNpZGVyaW5nICIsIHBoaSwgIiAoIiwgUmF3UG9pbnRlcihw
aGkpLCAiKSwgZm9yIHIiLAorICAgICAgICAgICAgICAgICAgICAgICAgcGhpLT5sb2NhbCgpLCAi
LCBhbmQgaXRzIHJlcGxhY2VtZW50IGluICIsICpibG9jaywgIiwgIiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChwaGktPmxvY2FsKCkpLCAi
XG4iKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKHBoaSAhPSBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQocGhpLT5sb2NhbCgpKSk7CiAgICAgICAgICAg
ICAgICAgcGhpLT5taXNjLnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kKHBoaS0+bG9jYWwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0OCw4ICsy
ODAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFy
aWFibGVzQXRIZWFkW2ldOwogICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUtPm1pc2MucmVw
bGFjZW1lbnQpCisgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUtPm1pc2MucmVwbGFjZW1lbnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUgIT0gbm9kZS0+bWlzYy5yZXBsYWNl
bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5taXNjLnJlcGxhY2VtZW50
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRI
ZWFkW2ldID0gbm9kZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTYzMDA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzEsOSArMTMxLDkgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIAogICAgIGNhc2UgVG9TdHJpbmc6CiAgICAgY2FzZSBNYWtlUm9wZToKICAg
ICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CisgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICAvLyBU
aGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNl
IFB1dEJ5SWREaXJlY3Q6CiAgICAgY2FzZSBQdXRCeUlkOgogICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCwzMCArMTI0LDM3
IEBAIHZvaWQgZ2VuZXJhdGVJQ0Zhc3RQYXRoKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZTsKLQotICAgIEND
YWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAgaWMubV9nZW5lcmF0
b3IuZ2VuZXJhdGVGYXN0UGF0aChmYXN0UGF0aEpJVCk7Ci0KLSAgICBjaGFyKiBzdGFydE9mSUMg
PQotICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29y
ZC5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgICAgIAotICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcih2bSwgJmZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZklDKTsKLSAgICAvLyBOb3Rl
OiB3ZSBjb3VsZCBoYW5kbGUgdGhlICFpc1ZhbGlkKCkgY2FzZS4gV2UganVzdCBkb24ndCBhcHBl
YXIgdG8gaGF2ZSBhCi0gICAgLy8gcmVhc29uIHRvIGRvIHNvLCB5ZXQuCi0gICAgUkVMRUFTRV9B
U1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOworICAgIFZlY3RvcjxTdGFja01hcHM6OlJlY29y
ZD4mIHJlY29yZHMgPSBpdGVyLT52YWx1ZTsKICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6QXNz
ZW1ibGVyVHlwZV9UOjpmaWxsTm9wcygKLSAgICAgICAgc3RhcnRPZklDICsgbGlua0J1ZmZlci5z
aXplKCksIHNpemVPZklDIC0gbGlua0J1ZmZlci5zaXplKCkpOworICAgIFJFTEVBU0VfQVNTRVJU
KHJlY29yZHMuc2l6ZSgpID09IGljLm1fZ2VuZXJhdG9ycy5zaXplKCkpOwogICAgIAotICAgIHN0
YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5saW5rKAotICAgICAgICBpYy5tX3Ns
b3dQYXRoRG9uZSwgQ29kZUxvY2F0aW9uTGFiZWwoc3RhcnRPZklDICsgc2l6ZU9mSUMpKTsKLSAg
ICAgICAgICAgIAotICAgIGxpbmtCdWZmZXIubGluaygKLSAgICAgICAgaWMubV9nZW5lcmF0b3Iu
c2xvd1BhdGhKdW1wKCksCi0gICAgICAgIHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mKGljLm1fZ2VuZXJhdG9yLnNsb3dQYXRoQmVnaW4oKSkpOwotICAgICAg
ICAgICAgCi0gICAgaWMubV9nZW5lcmF0b3IuZmluYWxpemUobGlua0J1ZmZlciwgKnN0YXRlLmZp
bmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSByZWNv
cmRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0g
cmVjb3Jkc1tpXTsKKyAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBpYy5tX2dlbmVyYXRvcnNbaV07
CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlRmFzdFBhdGgoZmFzdFBhdGhKSVQpOworICAgICAgICAK
KyAgICAgICAgY2hhciogc3RhcnRPZklDID0KKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFy
Kj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0OworICAgICAg
ICAKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmZmFzdFBhdGhKSVQsIHN0YXJ0
T2ZJQywgc2l6ZU9mSUMpOworICAgICAgICAvLyBOb3RlOiB3ZSBjb3VsZCBoYW5kbGUgdGhlICFp
c1ZhbGlkKCkgY2FzZS4gV2UganVzdCBkb24ndCBhcHBlYXIgdG8gaGF2ZSBhCisgICAgICAgIC8v
IHJlYXNvbiB0byBkbyBzbywgeWV0LgorICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVy
LmlzVmFsaWQoKSk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QXNzZW1ibGVy
VHlwZV9UOjpmaWxsTm9wcygKKyAgICAgICAgICAgIHN0YXJ0T2ZJQyArIGxpbmtCdWZmZXIuc2l6
ZSgpLCBzaXplT2ZJQyAtIGxpbmtCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIHN0
YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5saW5rKAorICAgICAgICAgICAgaWMu
bV9zbG93UGF0aERvbmVbaV0sIENvZGVMb2NhdGlvbkxhYmVsKHN0YXJ0T2ZJQyArIHNpemVPZklD
KSk7CisgICAgICAgIAorICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAgICBnZW5l
cmF0b3Iuc2xvd1BhdGhKdW1wKCksCisgICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVD
b2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZihnZW5lcmF0b3Iuc2xvd1BhdGhCZWdpbigpKSk7Cisg
ICAgICAgIAorICAgICAgICBnZW5lcmF0b3IuZmluYWxpemUobGlua0J1ZmZlciwgKnN0YXRlLmZp
bmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyKTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGZp
eEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKQEAgLTE2MCw5ICsxNjcsMTAgQEAgc3RhdGljIHZv
aWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIAogICAgIFN0YWNrTWFwczo6UmVj
b3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuY2FwdHVyZWRTdGFj
a21hcElEKTsKICAgICBSRUxFQVNFX0FTU0VSVChpdGVyICE9IHJlY29yZE1hcC5lbmQoKSk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWUubG9jYXRpb25zLnNpemUoKSA9PSAxKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0gMSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9PSAxKTsKICAgICBMb2NhdGlv
biBjYXB0dXJlZExvY2F0aW9uID0KLSAgICAgICAgTG9jYXRpb246OmZvclN0YWNrbWFwcygmaml0
Q29kZS0+c3RhY2ttYXBzLCBpdGVyLT52YWx1ZS5sb2NhdGlvbnNbMF0pOworICAgICAgICBMb2Nh
dGlvbjo6Zm9yU3RhY2ttYXBzKCZqaXRDb2RlLT5zdGFja21hcHMsIGl0ZXItPnZhbHVlWzBdLmxv
Y2F0aW9uc1swXSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5raW5kKCkg
PT0gTG9jYXRpb246OlJlZ2lzdGVyKTsKICAgICBSRUxFQVNFX0FTU0VSVChjYXB0dXJlZExvY2F0
aW9uLmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBSRUxFQVNFX0FT
U0VSVCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgJSBzaXplb2YoUmVnaXN0ZXIpKSk7CkBA
IC0yNzIsMjggKzI4MCwzMCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01h
cHMoCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6IExMVk0gc2hvdWxkIHRlbGwgdXMg
d2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7
Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgZ2V0QnlJZC5jb2RlT3JpZ2luKCksIHVzZWRSZWdp
c3RlcnMsIEpTVmFsdWVSZWdzKGJhc2UpLAotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJl
c3VsdCksIGZhbHNlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVy
LT52YWx1ZS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3Jk
JiByZWNvcmQgPSBpdGVyLT52YWx1ZVtpXTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oCi0gICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBn
ZXRCeUlkLmNvZGVPcmlnaW4oKSwgJmV4Y2VwdGlvblRhcmdldCwKLSAgICAgICAgICAgICAgICBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdCwgZ2VuLnN0dWJJbmZvKCksIGJhc2UsIGdl
dEJ5SWQudWlkKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGJlZ2luLCBjYWxsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZ2V0QnlJZC5t
X3Nsb3dQYXRoRG9uZSA9IHNsb3dQYXRoSklULmp1bXAoKTsKLSAgICAgICAgICAgIGdldEJ5SWQu
bV9nZW5lcmF0b3IgPSBnZW47CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IExMVk0gc2hvdWxk
IHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgorICAgICAgICAgICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlY29yZC5sb2Nh
dGlvbnNbMF0uZGlyZWN0R1BSKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWNv
cmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgICAgICAgICBjb2Rl
QmxvY2ssIGdldEJ5SWQuY29kZU9yaWdpbigpLCB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyhi
YXNlKSwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0KSwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBi
ZWdpbiA9IHNsb3dQYXRoSklULmxhYmVsKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCisgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgZ2V0QnlJZC5j
b2RlT3JpZ2luKCksICZleGNlcHRpb25UYXJnZXQsCisgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0LCBnZW4uc3R1YkluZm8oKSwgYmFzZSwgZ2V0QnlJ
ZC51aWQoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChiZWdpbiwgY2FsbCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgZ2V0QnlJZC5tX3Nsb3dQYXRoRG9uZS5hcHBlbmQoc2xvd1BhdGhKSVQuanVtcCgpKTsKKyAg
ICAgICAgICAgICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9ycy5hcHBlbmQoZ2VuKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3Rh
dGUucHV0QnlJZHMuc2l6ZSgpOyBpLS07KSB7CkBAIC0zMDgsMjkgKzMxOCwzMSBAQCBzdGF0aWMg
dm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0YWNrTWFwczo6
UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gRklYTUU6IExMVk0gc2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgot
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjphbGxS
ZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWNv
cmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOwotICAgICAgICAgICAgR1BSUmVnIHZhbHVlID0g
cmVjb3JkLmxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICAgICAgY29kZUJsb2NrLCBw
dXRCeUlkLmNvZGVPcmlnaW4oKSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MoYmFzZSksCi0g
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWUpLCBNYWNyb0Fzc2VtYmxlcjo6c2NyYXRj
aFJlZ2lzdGVyLCBmYWxzZSwgcHV0QnlJZC5lY21hTW9kZSgpLAotICAgICAgICAgICAgICAgIHB1
dEJ5SWQucHV0S2luZCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAg
ICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBwdXRCeUlkLmNv
ZGVPcmlnaW4oKSwgJmV4Y2VwdGlvblRhcmdldCwKLSAgICAgICAgICAgICAgICBnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWUsIGJhc2UsIHB1dEJ5SWQudWlkKCkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGJlZ2lu
LCBjYWxsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcHV0QnlJZC5tX3Nsb3dQYXRoRG9u
ZSA9IHNsb3dQYXRoSklULmp1bXAoKTsKLSAgICAgICAgICAgIHB1dEJ5SWQubV9nZW5lcmF0b3Ig
PSBnZW47CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlci0+dmFsdWUu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3Jk
ID0gaXRlci0+dmFsdWVbaV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IExMVk0gc2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgorICAg
ICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6YWxs
UmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgR1BSUmVnIGJh
c2UgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOworICAgICAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZSA9IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAg
ICAgICAgICAgICAgIGNvZGVCbG9jaywgcHV0QnlJZC5jb2RlT3JpZ2luKCksIHVzZWRSZWdpc3Rl
cnMsIEpTVmFsdWVSZWdzKGJhc2UpLAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2
YWx1ZSksIE1hY3JvQXNzZW1ibGVyOjpzY3JhdGNoUmVnaXN0ZXIsIGZhbHNlLCBwdXRCeUlkLmVj
bWFNb2RlKCksCisgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWQucHV0S2luZCgpKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYmVnaW4g
PSBzbG93UGF0aEpJVC5sYWJlbCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAg
ICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIHB1dEJ5SWQuY29kZU9y
aWdpbigpLCAmZXhjZXB0aW9uVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICBnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWUsIGJhc2UsIHB1dEJ5SWQudWlkKCkp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoYmVnaW4sIGNhbGwpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHB1dEJ5
SWQubV9zbG93UGF0aERvbmUuYXBwZW5kKHNsb3dQYXRoSklULmp1bXAoKSk7CisgICAgICAgICAg
ICAgICAgcHV0QnlJZC5tX2dlbmVyYXRvcnMuYXBwZW5kKGdlbik7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGV4Y2VwdGlvblRhcmdldC5saW5rKCZzbG93UGF0
aEpJVCk7CkBAIC0zNTUsMTkgKzM2NywyMCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2Vk
T25TdGFja01hcHMoCiAgICAgCiAgICAgLy8gSGFuZGxpbmcgSlMgY2FsbHMgaXMgd2VpcmQ6IHdl
IG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugc29ydCB0aGVtIGJ5IHRoZSBQQyBpbiBMTFZNCiAgICAg
Ly8gZ2VuZXJhdGVkIGNvZGUuIFRoYXQgaW1wbGllcyBmaXJzdCBwcnVuaW5nIHRoZSBvbmVzIHRo
YXQgTExWTSBkaWRuJ3QgZ2VuZXJhdGUuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
YXRlLmpzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSlNDYWxsJiBjYWxsID0gc3RhdGUu
anNDYWxsc1tpXTsKKyAgICBWZWN0b3I8SlNDYWxsPiBvbGRDYWxscyA9IHN0YXRlLmpzQ2FsbHM7
CisgICAgc3RhdGUuanNDYWxscy5yZXNpemUoMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG9sZENhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEpTQ2FsbCYgY2FsbCA9IG9sZENh
bGxzW2ldOwogICAgICAgICAKICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSByZWNvcmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7Ci0gICAgICAgIGlmIChp
dGVyID09IHJlY29yZE1hcC5lbmQoKSkgewotICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXpl
ZCBvdXQuIFBydW5lIGl0LgotICAgICAgICAgICAgY2FsbCA9IHN0YXRlLmpzQ2FsbHMubGFzdCgp
OwotICAgICAgICAgICAgc3RhdGUuanNDYWxscy5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICBp
LS07CisgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpdGVyLT52YWx1ZS5z
aXplKCk7ICsraikgeworICAgICAgICAgICAgSlNDYWxsIGNvcHkgPSBjYWxsOworICAgICAgICAg
ICAgY29weS5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWVbal0uaW5zdHJ1Y3Rpb25P
ZmZzZXQ7CisgICAgICAgICAgICBzdGF0ZS5qc0NhbGxzLmFwcGVuZChjb3B5KTsKICAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFs
dWUuaW5zdHJ1Y3Rpb25PZmZzZXQ7CiAgICAgfQogICAgIAogICAgIHN0ZDo6c29ydChzdGF0ZS5q
c0NhbGxzLmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMuZW5kKCkpOwpAQCAtMzk3LDEyICs0MTAsMTQg
QEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIC8vIEl0J3Mg
c29ydCBvZiByZW1vdGVseSBwb3NzaWJsZSB0aGF0IHdlIHdvbid0IGhhdmUgYW4gaW4tYmFuZCBl
eGNlcHRpb24gaGFuZGxpbmcKICAgICAvLyBwYXRoLCBmb3Igc29tZSBraW5kcyBvZiBmdW5jdGlv
bnMuCiAgICAgaWYgKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKSB7Ci0gICAgICAgIFN0YWNrTWFw
czo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZTsKLSAgICAgICAgCi0gICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIHNvdXJjZSA9IENvZGVMb2NhdGlvbkxhYmVsKAotICAgICAgICAgICAgYml0
d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyByZWNvcmQuaW5zdHJ1Y3Rpb25P
ZmZzZXQpOwotCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKHNvdXJjZSwg
c3RhdGUuZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlwb2ludCgp
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlci0+dmFsdWUuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNvdXJjZSA9IENv
ZGVMb2NhdGlvbkxhYmVsKAorICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2Vu
ZXJhdGVkRnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0KTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoc291cmNlLCBzdGF0
ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkpOwor
ICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGZvciAodW5zaWduZWQgZXhpdEluZGV4ID0gMDsg
ZXhpdEluZGV4IDwgaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsrZXhpdEluZGV4KSB7CkBAIC00
MTMsMTcgKzQyOCwxOSBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMo
CiAgICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKj4gY29kZUFkZHJlc3NlczsKICAgICAgICAgCiAg
ICAgICAgIGlmIChpdGVyICE9IHJlY29yZE1hcC5lbmQoKSkgewotICAgICAgICAgICAgU3RhY2tN
YXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBzb3VyY2UgPSBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAg
ICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29y
ZC5pbnN0cnVjdGlvbk9mZnNldCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNvZGVBZGRy
ZXNzZXMuYXBwZW5kKGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVj
b3JkLmluc3RydWN0aW9uT2Zmc2V0ICsgTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVu
dFNpemUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmZvLm1faXNJbnZhbGlk
YXRpb25Qb2ludCkKLSAgICAgICAgICAgICAgICBqaXRDb2RlLT5jb21tb24uanVtcFJlcGxhY2Vt
ZW50cy5hcHBlbmQoSnVtcFJlcGxhY2VtZW50KHNvdXJjZSwgaW5mby5tX3RodW5rQWRkcmVzcykp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFj
ZVdpdGhKdW1wKHNvdXJjZSwgaW5mby5tX3RodW5rQWRkcmVzcyk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBpdGVyLT52YWx1ZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc291cmNlID0gQ29kZUxv
Y2F0aW9uTGFiZWwoCisgICAgICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2Vu
ZXJhdGVkRnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjb2RlQWRkcmVzc2VzLmFwcGVuZChiaXR3aXNlX2Nhc3Q8
Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldCArIE1h
Y3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChpbmZvLm1faXNJbnZhbGlkYXRpb25Qb2ludCkKKyAgICAg
ICAgICAgICAgICAgICAgaml0Q29kZS0+Y29tbW9uLmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1
bXBSZXBsYWNlbWVudChzb3VyY2UsIGluZm8ubV90aHVua0FkZHJlc3MpKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhK
dW1wKHNvdXJjZSwgaW5mby5tX3RodW5rQWRkcmVzcyk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChncmFwaC5jb21waWxhdGlvbigpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRv
ci5oCShyZXZpc2lvbiAxNjI5OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
bGluZUNhY2hlRGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHByaXZh
dGU6CiAgICAgU3RyaW5nSW1wbCogbV91aWQ7CiAgICAgCiBwdWJsaWM6Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgbV9zbG93UGF0aERvbmU7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpK
dW1wPiBtX3Nsb3dQYXRoRG9uZTsKIH07CiAKIGNsYXNzIEdldEJ5SWREZXNjcmlwdG9yIDogcHVi
bGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogICAgIAotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgbV9nZW5lcmF0b3I7Cisg
ICAgVmVjdG9yPEpJVEdldEJ5SWRHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yczsKIH07CiAKIGNsYXNz
IFB1dEJ5SWREZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7CkBAIC04
NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgbV9nZW5lcmF0b3I7CisgICAgVmVjdG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1f
Z2VuZXJhdG9yczsKICAgICAKICAgICBFQ01BTW9kZSBlY21hTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZWNtYU1vZGU7IH0KICAgICBQdXRLaW5kIHB1dEtpbmQoKSBjb25zdCB7IHJldHVybiBtX3B1
dEtpbmQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFs
aXplci5jcHAJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTEgKzQ5LDE0IEBAIHNp
emVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKIHsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsK
ICAgICAKLSAgICByZXN1bHQgKz0gZXhpdFRodW5rc0xpbmtCdWZmZXItPnNpemUoKTsKLSAgICBy
ZXN1bHQgKz0gZW50cnlwb2ludExpbmtCdWZmZXItPnNpemUoKTsKKyAgICBpZiAoZXhpdFRodW5r
c0xpbmtCdWZmZXIpCisgICAgICAgIHJlc3VsdCArPSBleGl0VGh1bmtzTGlua0J1ZmZlci0+c2l6
ZSgpOworICAgIGlmIChlbnRyeXBvaW50TGlua0J1ZmZlcikKKyAgICAgICAgcmVzdWx0ICs9IGVu
dHJ5cG9pbnRMaW5rQnVmZmVyLT5zaXplKCk7CiAgICAgaWYgKHNpZGVDb2RlTGlua0J1ZmZlcikK
ICAgICAgICAgcmVzdWx0ICs9IHNpZGVDb2RlTGlua0J1ZmZlci0+c2l6ZSgpOwotICAgIHJlc3Vs
dCArPSBoYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlci0+c2l6ZSgpOworICAgIGlmIChoYW5kbGVF
eGNlcHRpb25zTGlua0J1ZmZlcikKKyAgICAgICAgcmVzdWx0ICs9IGhhbmRsZUV4Y2VwdGlvbnNM
aW5rQnVmZmVyLT5zaXplKCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gaml0Q29kZS0+
aGFuZGxlcygpLnNpemUoKTsgaS0tOykKICAgICAgICAgcmVzdWx0ICs9IGppdENvZGUtPmhhbmRs
ZXMoKVtpXS0+c2l6ZUluQnl0ZXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSlNDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbC5jcHAJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNiArMzIsMTMgQEAKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCitKU0NhbGw6OkpTQ2FsbCgpCisgICAgOiBtX3N0
YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBtX25vZGUoMCkKKyAgICAsIG1faW5zdHJ1Y3Rpb25P
ZmZzZXQoVUlOVF9NQVgpCit7Cit9CisKIEpTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFw
SUQsIERGRzo6Tm9kZSogbm9kZSkKICAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQogICAg
ICwgbV9ub2RlKG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2Fs
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJ
KHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQzLDcgQEAgbmFtZXNwYWNlIEZUTCB7CiAKIGNsYXNz
IEpTQ2FsbCB7CiBwdWJsaWM6CisgICAgSlNDYWxsKCk7CiAgICAgSlNDYWxsKHVuc2lnbmVkIHN0
YWNrbWFwSUQsIERGRzo6Tm9kZSopOwogICAgIAogICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMm
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCShyZXZpc2lvbiAxNjMwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwNCwzMCArMTYwNCw0NCBA
QCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEJ5SWQoKQogICAgIHsKLSAgICAg
ICAgLy8gVW50eXBlZFVzZSBpcyBhIGJpdCBoYXJkZXIgdG8gcmVhc29uIGFib3V0IGFuZCBJJ20g
bm90IHN1cmUgaG93IGJlc3QgdG8gZG8gaXQsIHlldC4KLSAgICAgICAgLy8gQmFzaWNhbGx5IHdl
IG5lZWQgdG8gZW1pdCBhIGNlbGwgYnJhbmNoIHRoYXQgdGFrZXMgeW91IHRvIHRoZSBzbG93IHBh
dGgsIGJ1dCB0aGUgc2xvdwotICAgICAgICAvLyBwYXRoIGlzIGdlbmVyYXRlZCBieSB0aGUgSUMg
Z2VuZXJhdG9yIHNvIHdlIGNhbid0IGp1bXAgdG8gaXQgZnJvbSBoZXJlLiBBbmQgdGhlIElDCi0g
ICAgICAgIC8vIGdlbmVyYXRvciBjdXJyZW50bHkgZG9lc24ndCBrbm93IGhvdyB0byBlbWl0IHN1
Y2ggYSBicmFuY2guIFNvLCBmb3Igbm93LCB3ZSBqdXN0Ci0gICAgICAgIC8vIHJlc3RyaWN0IHRo
aXMgdG8gQ2VsbFVzZS4KLSAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IENlbGxVc2UpOwotCi0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygp
W21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKLQotICAgICAgICAvLyBBcmd1bWVudHM6IGlk
LCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBhcmdzLi4uCi0gICAgICAgIHVuc2lnbmVkIHN0YWNr
bWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZUNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgRW1pdHRpbmcg
R2V0QnlJZCBwYXRjaHBvaW50IHdpdGggc3RhY2ttYXAgIyIsIHN0YWNrbWFwSUQsICJcbiIpOwot
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAotICAgICAgICAgICAg
bV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksCi0gICAgICAgICAgICBtX291dC5jb25z
dEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQoKSksCi0g
ICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMSksIGJh
c2UpOwotICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1B
bnlSZWdDYWxsQ29udik7Ci0gICAgICAgIHNldEpTVmFsdWUoY2FsbCk7Ci0gICAgICAgIAotICAg
ICAgICBtX2Z0bFN0YXRlLmdldEJ5SWRzLmFwcGVuZChHZXRCeUlkRGVzY3JpcHRvcihzdGFja21h
cElELCBtX25vZGUtPmNvZGVPcmlnaW4sIHVpZCkpOworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZTogeworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShnZXRCeUlkKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVW50
eXBlZFVzZTogeworICAgICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgd2VpcmQsIHNpbmNlIHdl
IGR1cGxpY2F0ZSB0aGUgc2xvdyBwYXRoIGJvdGggaGVyZSBhbmQgaW4gdGhlCisgICAgICAgICAg
ICAvLyBjb2RlIGdlbmVyYXRlZCBieSB0aGUgSUMuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBtYWtp
bmcgdGhpcyBsZXNzIGJhZC4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjc4MzAKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeUlkIHVudHlwZWQg
Y2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5SWQgdW50eXBlZCBub3QgY2VsbCBjYXNlIikpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJHZXRCeUlkIHVudHlwZWQgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlKSwgY2VsbENhc2UsIG5vdENlbGxDYXNlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihnZXRCeUlkKHZhbHVlKSk7CisgICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAg
ICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5SWQpLAorICAgICAgICAgICAg
ICAgIG1fY2FsbEZyYW1lLCBnZXRVbmRlZihtX291dC5pbnRQdHIpLCB2YWx1ZSwKKyAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludFB0cihtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCldKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0Lmlu
dDY0LCBjZWxsUmVzdWx0LCBub3RDZWxsUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkKCkKQEAgLTMzOTUsNiArMzQw
OSwyNyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmFkZChtX291dC5s
b2FkNjQoY291bnRlciksIG1fb3V0LmNvbnN0SW50NjQoMSkpLCBjb3VudGVyKTsKICAgICB9CiAg
ICAgCisgICAgTFZhbHVlIGdldEJ5SWQoTFZhbHVlIGJhc2UpCisgICAgeworICAgICAgICBTdHJp
bmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCldOworCisgICAgICAgIC8vIEFyZ3VtZW50czogaWQsIGJ5dGVzLCB0YXJnZXQsIG51bUFy
Z3MsIGFyZ3MuLi4KKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMr
KzsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb24oKSkK
KyAgICAgICAgICAgIGRhdGFMb2coIiAgICBFbWl0dGluZyBHZXRCeUlkIHBhdGNocG9pbnQgd2l0
aCBzdGFja21hcCAjIiwgc3RhY2ttYXBJRCwgIlxuIik7CisgICAgICAgIAorICAgICAgICBMVmFs
dWUgY2FsbCA9IG1fb3V0LmNhbGwoCisgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50SW50NjRJ
bnRyaW5zaWMoKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCksIG1f
b3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKKyAgICAgICAgICAgIGNvbnN0TnVsbCht
X291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgYmFzZSk7CisgICAgICAgIHNldEluc3Ry
dWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKKyAgICAg
ICAgCisgICAgICAgIG1fZnRsU3RhdGUuZ2V0QnlJZHMuYXBwZW5kKEdldEJ5SWREZXNjcmlwdG9y
KHN0YWNrbWFwSUQsIG1fbm9kZS0+Y29kZU9yaWdpbiwgdWlkKSk7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gY2FsbDsKKyAgICB9CisgICAgCiAgICAgVHlwZWRQb2ludGVyIGJhc2VJbmRleChJ
bmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwLCBMVmFsdWUgc3RvcmFnZSwgTFZhbHVlIGluZGV4LCBF
ZGdlIGVkZ2UpCiAgICAgewogICAgICAgICByZXR1cm4gbV9vdXQuYmFzZUluZGV4KApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDE2Mjk5
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw4ICs2NywxNCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAgICAg
IGRhdGFMb2coIiAgICBWYWx1ZXMgYXQgZW50cnk6ICIsIHZhbHVlcywgIlxuIik7CiAgICAgCiAg
ICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1l
bnQtLTspIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICBleGVjLT5yKHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSkuanNWYWx1ZSgpID09
IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFj
ayA9IGV4ZWMtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgp
KS5qc1ZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmVjb25zdHJ1Y3RlZFZhbHVlID0gdmFsdWVz
LmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgaWYgKHZhbHVlT25TdGFjayA9PSByZWNvbnN0
cnVjdGVkVmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZGF0YUxvZygiTWlz
bWF0Y2ggYmV0d2VlbiByZWNvbnN0cnVjdGVkIHZhbHVlcyBhbmQgdGhlIHRoZSB2YWx1ZSBvbiB0
aGUgc3RhY2sgZm9yIGFyZ3VtZW50IGFyZyIsIGFyZ3VtZW50LCAiIGZvciAiLCAqZW50cnlDb2Rl
QmxvY2ssICIgYXQgYmMjIiwgYnl0ZWNvZGVJbmRleCwgIjpcbiIpOworICAgICAgICBkYXRhTG9n
KCIgICAgVmFsdWUgb24gc3RhY2s6ICIsIHZhbHVlT25TdGFjaywgIlxuIik7CisgICAgICAgIGRh
dGFMb2coIiAgICBSZWNvbnN0cnVjdGVkIHZhbHVlOiAiLCByZWNvbnN0cnVjdGVkVmFsdWUsICJc
biIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAK
ICAgICBSRUxFQVNFX0FTU0VSVCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U3RhY2tNYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YWNrTWFwcy5jcHAJKHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBA
IFN0YWNrTWFwczo6UmVjb3JkTWFwIFN0YWNrTWFwczo6Z2V0UmVjb3IKIHsKICAgICBSZWNvcmRN
YXAgcmVzdWx0OwogICAgIGZvciAodW5zaWduZWQgaSA9IHJlY29yZHMuc2l6ZSgpOyBpLS07KQot
ICAgICAgICByZXN1bHQuYWRkKHJlY29yZHNbaV0ucGF0Y2hwb2ludElELCByZWNvcmRzW2ldKTsK
KyAgICAgICAgcmVzdWx0LmFkZChyZWNvcmRzW2ldLnBhdGNocG9pbnRJRCwgVmVjdG9yPFJlY29y
ZD4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChyZWNvcmRzW2ldKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJ
KHJldmlzaW9uIDE2Mjk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tN
YXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgc3RydWN0IFN0YWNrTWFwcyB7
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wTXVsdGls
aW5lKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4KSBjb25zdDsKICAgICAKLSAgICB0
eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIFJlY29yZCwgV1RGOjpJbnRIYXNoPHVpbnQzMl90Piwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IFJlY29yZE1hcDsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIFZlY3RvcjxSZWNvcmQ+LCBXVEY6OkludEhh
c2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90
Pj4gUmVjb3JkTWFwOwogICAgIAogICAgIFJlY29yZE1hcCBnZXRSZWNvcmRNYXAoKSBjb25zdDsK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dldC1ieS1pZC11
bnR5cGVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvZ2V0LWJ5LWlkLXVudHlwZWQuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2dldC1ieS1pZC11bnR5cGVkLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjEgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKwor
bm9JbmxpbmUoZm9vKTsKKworU3RyaW5nLnByb3RvdHlwZS5mID0gNDI7CitOdW1iZXIucHJvdG90
eXBlLmYgPSAyNDsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZh
ciByZXN1bHQgPSBmb28oImhlbGxvIik7CisgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBzdHJpbmc6ICIgKyByZXN1bHQ7CisgICAgcmVz
dWx0ID0gZm9vKDEzKTsKKyAgICBpZiAocmVzdWx0ICE9IDI0KQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQgZm9yIG51bWJlcjogIiArIHJlc3VsdDsKKyAgICByZXN1bHQgPSBmb28o
e2Y6ODR9KTsKKyAgICBpZiAocmVzdWx0ICE9IDg0KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQgZm9yIG9iamVjdDogIiArIHJlc3VsdDsKK30KKwo=
</data>
<flag name="review"
          id="246635"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>