<?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>22174</bug_id>
          
          <creation_ts>2008-11-10 23:04:40 -0800</creation_ts>
          <short_desc>Simplified op_call by nixing its responsibility for moving the value of &quot;this&quot; into the first argument slot</short_desc>
          <delta_ts>2008-11-12 16:51:33 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>98267</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-10 23:04:40 -0800</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98268</commentid>
    <comment_count>1</comment_count>
      <attachid>25044</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-10 23:08:44 -0800</bug_when>
    <thetext>Created attachment 25044
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98291</commentid>
    <comment_count>2</comment_count>
      <attachid>25044</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-11 08:50:27 -0800</bug_when>
    <thetext>Comment on attachment 25044
patch

&gt; +// This macro rewinds to the previous call frame because CTI functions that
&gt; +// throw stack overflow exceptions execute after the call frame has
&gt; +// optimistically moved forward.
&gt; +#define CTI_THROW_STACK_OVERFLOW() do { \
&gt; +    CallFrame* oldCallFrame = ARG_callFrame-&gt;callerFrame(); \
&gt; +    JSGlobalData* globalData = ARG_globalData; \
&gt; +    globalData-&gt;exception = createStackOverflowError(oldCallFrame); \
&gt; +    globalData-&gt;throwReturnAddress = CTI_RETURN_ADDRESS; \
&gt; +    ARG_setCallFrame(oldCallFrame); \
&gt; +    CTI_SET_RETURN_ADDRESS(reinterpret_cast&lt;void*&gt;(ctiVMThrowTrampoline)); \
&gt; +} while (0);

I understand why we want to use a macro here so we can get at the ARG fields, but I think we should put as much of this work as possible into a function. For one thing, macros are harder to read and maintain than functions because of all the backslashes and special rules about identifiers and. For another, since this is an exceptional case it&apos;s nice to keep the code out of the way in a separate function so it has minimal performance impact when not executed. It looks like the existing code was using a separate function, but you eliminated it. Would you reconsider?

&gt; +        * fast/js/global-recursion-on-full-stack-expected.txt: This test passes
&gt; +        a little differently now, because the register layout has changed.

This comment seems vague, perhaps intentionally so. Why specifically don&apos;t we get call stack size exception logged now?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98386</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-11 16:24:04 -0800</bug_when>
    <thetext>I&apos;m going to land and then fix up the macro, so Gavin can start resolving conflicts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98389</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-11 16:32:59 -0800</bug_when>
    <thetext>Committed revision 38322.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98550</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-12 16:51:33 -0800</bug_when>
    <thetext>Committed revision 38349.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25044</attachid>
            <date>2008-11-10 23:08:44 -0800</date>
            <delta_ts>2008-11-11 08:50:27 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch-call.txt</filename>
            <type>text/plain</type>
            <size>54304</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MjMyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzkgQEAKKzIwMDgtMTEtMTAgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEZpeGVkIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjE3NAorICAgICAgICBTaW1wbGlmaWVkIG9wX2NhbGwgYnkgbml4
aW5nIGl0cyByZXNwb25zaWJpbGl0eSBmb3IgbW92aW5nIHRoZSB2YWx1ZSBvZgorICAgICAgICAi
dGhpcyIgaW50byB0aGUgZmlyc3QgYXJndW1lbnQgc2xvdC4KKworICAgICAgICBJbnN0ZWFkLCB0
aGUgY2FsbGVyIGVtaXRzIGFuIGV4cGxpY2l0IGxvYWQgb3IgbW92IGluc3RydWN0aW9uLCBvciBy
ZWxpZXMKKyAgICAgICAgb24gaW1wbGljaXQga25vd2xlZGdlIHRoYXQgInRoaXMiIGlzIGFscmVh
ZHkgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHNsb3QuCisgICAgICAgIEFzIGEgcmVzdWx0LCB0d28g
b3BlcmFuZHMgdG8gb3BfY2FsbCBhcmUgZ29uZTogZmlyc3RBcmcgYW5kIHRoaXNWYWwuCisgICAg
ICAgIAorICAgICAgICBTdW5TcGlkZXIgYW5kIHY4IHRlc3RzIHNob3cgbm8gY2hhbmdlIGluIGJ5
dGVjb2RlIG9yIENUSS4KKworICAgICAgICAqIFZNL0NUSS5jcHA6CisgICAgICAgIChKU0M6OkNU
STo6Y29tcGlsZU9wQ2FsbFNldHVwQXJncyk6CisgICAgICAgIChKU0M6OkNUSTo6Y29tcGlsZU9w
Q2FsbEV2YWxTZXR1cEFyZ3MpOgorICAgICAgICAoSlNDOjpDVEk6OmNvbXBpbGVPcENvbnN0cnVj
dFNldHVwQXJncyk6IFNwbGl0IGFwYXJ0IHRoZXNlIHRocmVlIHZlcnNpb25zCisgICAgICAgIG9m
IHNldHRpbmcgdXAgYXJndW1lbnRzIHRvIG9wX2NhbGwsIGJlY2F1c2UgdGhleSdyZSBtb3JlIGRp
ZmZlcmVudCB0aGFuCisgICAgICAgIHRoZXkgYXJlIHRoZSBzYW1lIC0tIGV2ZW4gbW9yZSBzbyB3
aXRoIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKEpTQzo6Q1RJOjpjb21waWxlT3BDYWxsKTogVXBk
YXRlZCBmb3IgdGhlIGZhY3QgdGhhdCBvcF9jb25zdHJ1Y3QgZG9lc24ndAorICAgICAgICBtYXRj
aCBvcF9jYWxsIGFueW1vcmUuCisKKyAgICAgICAgKEpTQzo6Q1RJOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKToKKyAgICAgICAgKEpTQzo6Q1RJOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6IE1l
cmdlZCBhIGZldyBjYWxsIGNhc2VzLiBVcGRhdGVkCisgICAgICAgIGZvciBjaGFuZ2VzIG1lbnRp
b25lZCBhYm92ZS4KKworICAgICAgICAqIFZNL0NUSS5oOgorCisgICAgICAgICogVk0vQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKTogVXBkYXRlZCBmb3IgbmV3
IGJ5dGVjb2RlIGZvcm1hdCBvZiBjYWxsIC8gY29uc3RydWN0LgorCisgICAgICAgICogVk0vTWFj
aGluZS5jcHA6CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmNhbGxFdmFsKTogVXBkYXRlZCBmb3Ig
bmV3IGJ5dGVjb2RlIGZvcm1hdCBvZiBjYWxsIC8gY29uc3RydWN0LgorCisgICAgICAgIChKU0M6
Ok1hY2hpbmU6OmR1bXBDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpkdW1wUmVn
aXN0ZXJzKTogU2ltcGxpZmllZCB0aGVzZSBkZWJ1Z2dpbmcgZnVuY3Rpb25zLCAKKyAgICAgICAg
dGFraW5nIGFkdmFudGFnZSBvZiB0aGUgbmV3IGNhbGwgZnJhbWUgbGF5b3V0LgorCisgICAgICAg
IChKU0M6Ok1hY2hpbmU6OmV4ZWN1dGUpOiBGaXhlZCB1cCB0aGUgZXZhbCB2ZXJzaW9uIG9mIGV4
ZWN1dGUgdG8gYmUKKyAgICAgICAgZnJpZW5kbGllciB0byBjYWxscyBpbiB0aGUgbmV3IGZvcm1h
dC4KKworICAgICAgICAoSlNDOjpNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZSk6IEltcGxlbWVudGVk
IHRoZSBuZXcgY2FsbCBmb3JtYXQgaW4KKyAgICAgICAgYnl0ZWNvZGUuCisKKyAgICAgICAgKEpT
Qzo6TWFjaGluZTo6Y3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbik6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmU6OmN0aV9vcF9jb25zdHJ1Y3RfSlNDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpNYWNo
aW5lOjpjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6TWFj
aGluZTo6Y3RpX29wX2NhbGxfZXZhbCk6IFVwZGF0ZWQgQ1RJIGhlbHBlcnMgdG8gbWF0Y2ggdGhl
IG5ldworICAgICAgICBjYWxsIGZvcm1hdC4KKyAgICAgICAgCisgICAgICAgIEZpeGVkIGEgbGF0
ZW50IGJ1ZyBpbiBzdGFjayBvdmVyZmxvdyBjaGVja2luZyB0aGF0IGlzIG5vdyBoaXQgYmVjYXVz
ZQorICAgICAgICB0aGUgcmVnaXN0ZXIgbGF5b3V0IGhhcyBjaGFuZ2VkIGEgYml0IC0tIG5hbWVs
eTogd2hlbiB0aHJvd2luZyBhIHN0YWNrCisgICAgICAgIG92ZXJmbG93IGV4Y2VwdGlvbiBpbnNp
ZGUgYW4gb3BfY2FsbCBoZWxwZXIsIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhlCisgICAgICAg
IGZhY3QgdGhhdCB0aGUgY3VycmVudCBjYWxsIGZyYW1lIGlzIG9ubHkgaGFsZi1jb25zdHJ1Y3Rl
ZCwgYW5kIHVzZSB0aGUKKyAgICAgICAgcGFyZW50IGNhbGwgZnJhbWUgaW5zdGVhZC4KKworICAg
ICAgICAqIFZNL01hY2hpbmUuaDoKKworICAgICAgICAqIGJ5dGVjb21waWxlci9Db2RlR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAg
ICAoSlNDOjpDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpDb2Rl
R2VuZXJhdG9yOjplbWl0Q29uc3RydWN0KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQ29kZUdl
bmVyYXRvci5oOiBVcGRhdGVkIGNvZGVnZW4gdG8gbWF0Y2ggdGhlIG5ldyBjYWxsCisgICAgICAg
IGZvcm1hdC4KKworICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkV2
YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Q29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2Fs
bFZhbHVlTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxSZXNvbHZl
Tm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6
ZW1pdENvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Q29kZSk6
CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6bmVl
ZGVkQ29uc3RhbnRzKTogZGl0dG8KKwogMjAwOC0xMS0wNyAgQ2FtZXJvbiBad2FyaWNoICA8endh
cmljaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9WTS9DVEkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L1ZNL0NUSS5jcHAJKHJldmlzaW9uIDM4MjA5KQorKysgSmF2YVNjcmlwdENvcmUvVk0vQ1RJLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTk3LDQ3ICs1OTcsNTggQEAgdm9pZCBDVEk6OmNvbXBpbGVP
cENhbGxJbml0aWFsaXplQ2FsbEZyYQogICAgIG1faml0Lm1vdmxfcm0oWDg2OjplYngsIFJlZ2lz
dGVyRmlsZTo6U2NvcGVDaGFpbiAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSks
IFg4Njo6ZWRpKTsKIH0KIAotdm9pZCBDVEk6OmNvbXBpbGVPcENhbGxTZXR1cEFyZ3MoSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBib29sIGlzQ29uc3RydWN0LCBib29sIGlzRXZhbCkKK3ZvaWQg
Q1RJOjpjb21waWxlT3BDYWxsU2V0dXBBcmdzKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsK
LSAgICBpbnQgZmlyc3RBcmcgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGFy
Z0NvdW50ID0gaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOwotICAgIGludCByZWdpc3Rlck9mZnNl
dCA9IGluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKKyAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25b
NF0udS5vcGVyYW5kOwogCisgICAgLy8gZWN4IGhvbGRzIGZ1bmMKICAgICBlbWl0UHV0QXJnKFg4
Njo6ZWN4LCAwKTsKICAgICBlbWl0UHV0QXJnQ29uc3RhbnQocmVnaXN0ZXJPZmZzZXQsIDQpOwog
ICAgIGVtaXRQdXRBcmdDb25zdGFudChhcmdDb3VudCwgOCk7CiAgICAgZW1pdFB1dEFyZ0NvbnN0
YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGluc3RydWN0aW9uKSwgMTIpOwotICAgIGlm
IChpc0NvbnN0cnVjdCkgewotICAgICAgICBlbWl0R2V0UHV0QXJnKGluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCwgMTYsIFg4Njo6ZWF4KTsKLSAgICAgICAgZW1pdFB1dEFyZ0NvbnN0YW50KGZpcnN0
QXJnLCAyMCk7Ci0gICAgfSBlbHNlIGlmIChpc0V2YWwpCi0gICAgICAgIGVtaXRHZXRQdXRBcmco
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCAxNiwgWDg2OjplYXgpOworfQorCit2b2lkIENUSTo6
Y29tcGlsZU9wQ2FsbEV2YWxTZXR1cEFyZ3MoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorewor
ICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgcmVn
aXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICAvLyBlY3ggaG9s
ZHMgZnVuYworICAgIGVtaXRQdXRBcmcoWDg2OjplY3gsIDApOworICAgIGVtaXRQdXRBcmdDb25z
dGFudChyZWdpc3Rlck9mZnNldCwgNCk7CisgICAgZW1pdFB1dEFyZ0NvbnN0YW50KGFyZ0NvdW50
LCA4KTsKKyAgICBlbWl0UHV0QXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
aW5zdHJ1Y3Rpb24pLCAxMik7Cit9CisKK3ZvaWQgQ1RJOjpjb21waWxlT3BDb25zdHJ1Y3RTZXR1
cEFyZ3MoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGludCBhcmdDb3VudCA9IGlu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3RvID0gaW5zdHJ1Y3Rpb25bNV0udS5vcGVy
YW5kOworICAgIGludCB0aGlzUmVnaXN0ZXIgPSBpbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7CisK
KyAgICAvLyBlY3ggaG9sZHMgZnVuYworICAgIGVtaXRQdXRBcmcoWDg2OjplY3gsIDApOworICAg
IGVtaXRQdXRBcmdDb25zdGFudChyZWdpc3Rlck9mZnNldCwgNCk7CisgICAgZW1pdFB1dEFyZ0Nv
bnN0YW50KGFyZ0NvdW50LCA4KTsKKyAgICBlbWl0R2V0UHV0QXJnKHByb3RvLCAxMiwgWDg2Ojpl
YXgpOworICAgIGVtaXRQdXRBcmdDb25zdGFudCh0aGlzUmVnaXN0ZXIsIDE2KTsKKyAgICBlbWl0
UHV0QXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaW5zdHJ1Y3Rpb24pLCAy
MCk7CiB9CiAKIHZvaWQgQ1RJOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGksIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4KQogewogICAgIGludCBkc3QgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50
IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgZmlyc3RBcmcgPSBp
bnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25b
NV0udS5vcGVyYW5kOwotICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzZdLnUu
b3BlcmFuZDsKLQotICAgIC8vIFNldHVwIHRoaXMgdmFsdWUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50
IChkb2VzIG5vdCBhcHBseSB0byBjb25zdHJ1Y3RvcnMpCi0gICAgaWYgKG9wY29kZUlEICE9IG9w
X2NvbnN0cnVjdCkgewotICAgICAgICBpbnQgdGhpc1ZhbCA9IGluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgaWYgKHRoaXNWYWwgPT0gbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSkK
LSAgICAgICAgICAgIG1faml0Lm1vdmxfaTMybShhc0ludGVnZXIoanNOdWxsKCkpLCBmaXJzdEFy
ZyAqIHNpemVvZihSZWdpc3RlciksIFg4Njo6ZWRpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBlbWl0R2V0QXJnKHRoaXNWYWwsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRS
ZXN1bHQoZmlyc3RBcmcpOwotICAgICAgICB9Ci0gICAgfQorICAgIGludCBhcmdDb3VudCA9IGlu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CiAKICAgICAvLyBIYW5kbGUgZXZhbAogICAgIFg4NkFzc2VtYmxl
cjo6Sm1wU3JjIHdhc0V2YWw7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewog
ICAgICAgICBlbWl0R2V0QXJnKGNhbGxlZSwgWDg2OjplY3gpOwotICAgICAgICBjb21waWxlT3BD
YWxsU2V0dXBBcmdzKGluc3RydWN0aW9uLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGNvbXBpbGVP
cENhbGxFdmFsU2V0dXBBcmdzKGluc3RydWN0aW9uKTsKIAogICAgICAgICBlbWl0Q1RJQ2FsbChp
bnN0cnVjdGlvbiwgaSwgTWFjaGluZTo6Y3RpX29wX2NhbGxfZXZhbCk7CiAgICAgICAgIG1faml0
LmNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpKSwgWDg2
OjplYXgpOwpAQCAtNjU3LDEwICs2NjgsMTMgQEAgdm9pZCBDVEk6OmNvbXBpbGVPcENhbGwoT3Bj
b2RlSUQgb3Bjb2RlSQogCiAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgT3BDb25zdHJ1Y3QsIGNhbGwg
b3V0IHRvIGEgY3RpXyBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIG5ldyBvYmplY3QuCiAgICAgaWYg
KG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCkgeworICAgICAgICBpbnQgcHJvdG8gPSBpbnN0cnVj
dGlvbls1XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCB0aGlzUmVnaXN0ZXIgPSBpbnN0cnVjdGlv
bls2XS51Lm9wZXJhbmQ7CisKICAgICAgICAgZW1pdFB1dEFyZyhYODY6OmVjeCwgMCk7Ci0gICAg
ICAgIGVtaXRHZXRQdXRBcmcoaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCAxNiwgWDg2OjplYXgp
OworICAgICAgICBlbWl0R2V0UHV0QXJnKHByb3RvLCAxMiwgWDg2OjplYXgpOwogICAgICAgICBl
bWl0Q1RJQ2FsbChpbnN0cnVjdGlvbiwgaSwgTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0Nv
bnN0cnVjdCk7Ci0gICAgICAgIGVtaXRQdXRSZXN1bHQoZmlyc3RBcmcpOworICAgICAgICBlbWl0
UHV0UmVzdWx0KHRoaXNSZWdpc3Rlcik7CiAgICAgICAgIGVtaXRHZXRBcmcoY2FsbGVlLCBYODY6
OmVjeCk7CiAgICAgfQogCkBAIC0xMjkyLDkgKzEzMDYsMTEgQEAgdm9pZCBDVEk6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgaSArPSAzOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYWxsOiB7CisgICAgICAgIGNhc2Ugb3BfY2Fs
bDoKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0
OiB7CiAgICAgICAgICAgICBjb21waWxlT3BDYWxsKG9wY29kZUlELCBpbnN0cnVjdGlvbiArIGks
IGksIGNhbGxMaW5rSW5mb0luZGV4KyspOwotICAgICAgICAgICAgaSArPSA3OworICAgICAgICAg
ICAgaSArPSAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gNyA6IDUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRfZ2xvYmFsX3ZhcjogewpAQCAt
MTM4OCwxMSArMTQwNCw2IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgICAgIGkgKz0gMzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfY29uc3RydWN0OiB7Ci0gICAgICAgICAgICBjb21waWxlT3BDYWxsKG9wY29kZUlE
LCBpbnN0cnVjdGlvbiArIGksIGksIGNhbGxMaW5rSW5mb0luZGV4KyspOwotICAgICAgICAgICAg
aSArPSA3OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9j
b25zdHJ1Y3RfdmVyaWZ5OiB7CiAgICAgICAgICAgICBlbWl0R2V0QXJnKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKICAgICAgICAgICAgIApAQCAtMTkyMCwxMSArMTkz
MSw2IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGkg
Kz0gNTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY2Fs
bF9ldmFsOiB7Ci0gICAgICAgICAgICBjb21waWxlT3BDYWxsKG9wY29kZUlELCBpbnN0cnVjdGlv
biArIGksIGksIGNhbGxMaW5rSW5mb0luZGV4KyspOwotICAgICAgICAgICAgaSArPSA3OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgY2FzZSBvcF90aHJvdzogewogICAg
ICAgICAgICAgZW1pdEdldFB1dEFyZyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBY
ODY6OmVjeCk7CiAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpbnN0cnVjdGlvbiArIGksIGksIE1h
Y2hpbmU6OmN0aV9vcF90aHJvdyk7CkBAIC0yNzc0LDE1ICsyNzgwLDE2IEBAIHZvaWQgQ1RJOjpw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7CiAg
ICAgICAgICAgICBpbnQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKICAgICAg
ICAgICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IGZpcnN0QXJnID0gaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uW2kgKyA1XS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvbltpICsgNl0udS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uW2kgKyA0XS51
Lm9wZXJhbmQ7CiAKICAgICAgICAgICAgIG1faml0LmxpbmsoaXRlci0+ZnJvbSwgbV9qaXQubGFi
ZWwoKSk7CiAKICAgICAgICAgICAgIC8vIFRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIHNldCB1cCBv
biB0aGUgaG90IHBhdGggZm9yIG9wX2NhbGxfZXZhbAotICAgICAgICAgICAgaWYgKG9wY29kZUlE
ICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgICAgICAgICBjb21waWxlT3BDYWxsU2V0dXBBcmdz
KGluc3RydWN0aW9uICsgaSwgKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCksIGZhbHNlKTsKKyAg
ICAgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsKQorICAgICAgICAgICAgICAgIGNvbXBp
bGVPcENhbGxTZXR1cEFyZ3MoaW5zdHJ1Y3Rpb24gKyBpKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCkKKyAgICAgICAgICAgICAgICBjb21waWxlT3BDb25z
dHJ1Y3RTZXR1cEFyZ3MoaW5zdHJ1Y3Rpb24gKyBpKTsKIAogICAgICAgICAgICAgLy8gRmFzdCBj
aGVjayBmb3IgSlMgZnVuY3Rpb24uCiAgICAgICAgICAgICBtX2ppdC50ZXN0bF9pMzJyKEpTSW1t
ZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVjeCk7CkBAIC0yNzkwLDEwICsyNzk3LDEwIEBAIHZvaWQg
Q1RJOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBtX2ppdC5jbXBsX2kz
Mm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9tYWNoaW5lLT5tX2pzRnVuY3Rpb25WcHRy
KSwgWDg2OjplY3gpOwogICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgY2FsbExpbmtG
YWlsTm90SlNGdW5jdGlvbiA9IG1faml0LmVtaXRVbmxpbmtlZEpuZSgpOwogCi0gICAgICAgICAg
ICAvLyBGaXJzdCwgaW4gdGhlIGNhbGUgb2YgYSBjb25zdHJ1Y3QsIGFsbG9jYXRlIHRoZSBuZXcg
b2JqZWN0LgorICAgICAgICAgICAgLy8gRmlyc3QsIGluIHRoZSBjYXNlIG9mIGEgY29uc3RydWN0
LCBhbGxvY2F0ZSB0aGUgbmV3IG9iamVjdC4KICAgICAgICAgICAgIGlmIChvcGNvZGVJRCA9PSBv
cF9jb25zdHJ1Y3QpIHsKICAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpbnN0cnVjdGlvbiwg
aSwgTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cnVjdCk7Ci0gICAgICAgICAgICAg
ICAgZW1pdFB1dFJlc3VsdChmaXJzdEFyZyk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFJlc3Vs
dChyZWdpc3Rlck9mZnNldCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFy
Z0NvdW50KTsKICAgICAgICAgICAgICAgICBlbWl0R2V0QXJnKGNhbGxlZSwgWDg2OjplY3gpOwog
ICAgICAgICAgICAgfQogCkBAIC0yODM0LDggKzI4NDEsMTAgQEAgdm9pZCBDVEk6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNvbGRQYXRoT3RoZXIgPSBtX2ppdC5sYWJlbCgp
OwogCiAgICAgICAgICAgICAvLyBUaGUgYXJndW1lbnRzIGhhdmUgYmVlbiBzZXQgdXAgb24gdGhl
IGhvdCBwYXRoIGZvciBvcF9jYWxsX2V2YWwKLSAgICAgICAgICAgIGlmIChvcGNvZGVJRCAhPSBv
cF9jYWxsX2V2YWwpCi0gICAgICAgICAgICAgICAgY29tcGlsZU9wQ2FsbFNldHVwQXJncyhpbnN0
cnVjdGlvbiArIGksIChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QpLCBmYWxzZSk7CisgICAgICAg
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbCkKKyAgICAgICAgICAgICAgICBjb21waWxlT3BD
YWxsU2V0dXBBcmdzKGluc3RydWN0aW9uICsgaSk7CisgICAgICAgICAgICBlbHNlIGlmIChvcGNv
ZGVJRCA9PSBvcF9jb25zdHJ1Y3QpCisgICAgICAgICAgICAgICAgY29tcGlsZU9wQ29uc3RydWN0
U2V0dXBBcmdzKGluc3RydWN0aW9uICsgaSk7CiAKICAgICAgICAgICAgIC8vIENoZWNrIGZvciBK
U0Z1bmN0aW9ucy4KICAgICAgICAgICAgIG1faml0LnRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRh
Z01hc2ssIFg4Njo6ZWN4KTsKQEAgLTI4NTQsMTAgKzI4NjMsMTAgQEAgdm9pZCBDVEk6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIC8vIE5leHQsIGhhbmRsZSBKU0Z1bmN0
aW9ucy4uLgogICAgICAgICAgICAgbV9qaXQubGluayhpc0pTRnVuY3Rpb24sIG1faml0LmxhYmVs
KCkpOwogCi0gICAgICAgICAgICAvLyBGaXJzdCwgaW4gdGhlIGNhbGUgb2YgYSBjb25zdHJ1Y3Qs
IGFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0LgorICAgICAgICAgICAgLy8gRmlyc3QsIGluIHRoZSBj
YXNlIG9mIGEgY29uc3RydWN0LCBhbGxvY2F0ZSB0aGUgbmV3IG9iamVjdC4KICAgICAgICAgICAg
IGlmIChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QpIHsKICAgICAgICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpbnN0cnVjdGlvbiwgaSwgTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cnVj
dCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFJlc3VsdChmaXJzdEFyZyk7CisgICAgICAgICAg
ICAgICAgZW1pdFB1dFJlc3VsdChyZWdpc3Rlck9mZnNldCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50KTsKICAgICAgICAgICAgICAgICBlbWl0R2V0QXJnKGNh
bGxlZSwgWDg2OjplY3gpOwogICAgICAgICAgICAgfQogCkBAIC0yOTAyLDcgKzI5MTEsNyBAQCB2
b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiAgICAgICAgICAgICAr
K2NhbGxMaW5rSW5mb0luZGV4OwogCi0gICAgICAgICAgICBpICs9IDc7CisgICAgICAgICAgICBp
ICs9IChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyA3IDogNSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3RvX2pzbnVtYmVyOiB7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9WTS9DVEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9DVEku
aAkocmV2aXNpb24gMzgyMDkpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9DVEkuaAkod29ya2luZyBj
b3B5KQpAQCAtMzc2LDcgKzM3Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQg
Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25l
ZCBpLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHZvaWQgY29tcGlsZU9w
Q2FsbEluaXRpYWxpemVDYWxsRnJhbWUodW5zaWduZWQgY2FsbGVlLCB1bnNpZ25lZCBhcmdDb3Vu
dCk7Ci0gICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNldHVwQXJncyhJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIGJvb2wgaXNDb25zdHJ1Y3QsIGJvb2wgaXNFdmFsKTsKKyAgICAgICAgdm9pZCBj
b21waWxlT3BDYWxsU2V0dXBBcmdzKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgY29tcGls
ZU9wQ2FsbEV2YWxTZXR1cEFyZ3MoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBjb21waWxl
T3BDb25zdHJ1Y3RTZXR1cEFyZ3MoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgZW51bSBDb21waWxl
T3BTdHJpY3RFcVR5cGUgeyBPcFN0cmljdEVxLCBPcE5TdHJpY3RFcSB9OwogICAgICAgICB2b2lk
IGNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgaSwg
Q29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpOwogICAgICAgICB2b2lkIHB1dERvdWJsZVJlc3Vs
dFRvSlNOdW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OlhNTVJlZ2lzdGVySUQgeG1tU291cmNl
LCBYODY6OlJlZ2lzdGVySUQganNOdW1iZXJDZWxsLCB1bnNpZ25lZCBkc3QsIFg4NkFzc2VtYmxl
cjo6Sm1wU3JjKiB3cm90ZUpTTnVtYmVyQ2VsbCwgIFg4Njo6WE1NUmVnaXN0ZXJJRCB0ZW1wWG1t
LCBYODY6OlJlZ2lzdGVySUQgdGVtcFJlZzEsIFg4Njo6UmVnaXN0ZXJJRCB0ZW1wUmVnMik7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDM4MjA5KQorKysgSmF2YVNjcmlw
dENvcmUvVk0vQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEyLDIzICs4MTIsMTkg
QEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jYWxsOiB7Ci0gICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgdGVtcENvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZnVuYyA9ICgrK2l0
KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQgJXMsICVzLCAlcywgJWQsICVkLCAl
ZFxuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIx
KS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjIpLmNfc3RyKCksIHRlbXBDb3VudCwgYXJnQ291bnQs
IHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQgJXMs
ICVzLCAlZCwgJWRcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZHN0KS5jX3N0cigpLCByZWdp
c3Rlck5hbWUoZnVuYykuY19zdHIoKSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7Ci0g
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBy
MSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgdGVtcENvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
ZnVuYyA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbF9ldmFsXHRcdCAlcywg
JXMsICVzLCAlZCwgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigp
LCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMikuY19zdHIoKSwgdGVt
cENvdW50LCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgcHJpbnRmKCJb
JTRkXSBjYWxsX2V2YWxcdCAlcywgJXMsICVkLCAlZFxuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFt
ZShkc3QpLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShmdW5jKS5jX3N0cigpLCBhcmdDb3VudCwgcmVn
aXN0ZXJPZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBvcF90ZWFyX29mZl9hY3RpdmF0aW9uOiB7CkBAIC04NDYsMTMgKzg0MiwxMyBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogewotICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgaW50IHRlbXBDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGRz
dCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGZ1bmMgPSAoKytpdCktPnUu
b3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmdDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOwog
ICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBwcmludGYoIlslNGRdIGNvbnN0cnVjdFx0ICVzLCAlcywgJXMsICVkLCAlZCwgJWRc
biIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSku
Y19zdHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50LCBy
ZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICBpbnQgcHJvdG8gPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCB0aGlzUmVnaXN0ZXIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50ZigiWyU0ZF0gY29uc3RydWN0XHQgJXMsICVzLCAlZCwgJWQsICVzLCAl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShkc3QpLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShm
dW5jKS5jX3N0cigpLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQsIHJlZ2lzdGVyTmFtZShwcm90
bykuY19zdHIoKSwgcmVnaXN0ZXJOYW1lKHRoaXNSZWdpc3RlcikuY19zdHIoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92ZXJpZnk6
IHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCShyZXZpc2lvbiAzODIwOSkKKysrIEphdmFTY3Jp
cHRDb3JlL1ZNL01hY2hpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzksMjQgKzU3OSwyNSBA
QCBzdGF0aWMgTkVWRVJfSU5MSU5FIGJvb2wgaXNOb3RPYmplY3QoQ2FsCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLU5FVkVSX0lOTElORSBKU1ZhbHVlKiBNYWNoaW5lOjpjYWxsRXZhbChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgaW50IGFyZ3YsIGludCBhcmdjLCBKU1Zh
bHVlKiYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUgSlNWYWx1ZSogTWFjaGluZTo6Y2Fs
bEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBS
ZWdpc3RlciogYXJndiwgaW50IGFyZ2MsIGludCByZWdpc3Rlck9mZnNldCwgSlNWYWx1ZSomIGV4
Y2VwdGlvblZhbHVlKQogewogICAgIGlmIChhcmdjIDwgMikKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKLSAgICBKU1ZhbHVlKiBwcm9ncmFtID0gY2FsbEZyYW1lW2FyZ3YgKyAxXS5q
c1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgSlNWYWx1ZSogcHJvZ3JhbSA9IGFyZ3ZbMV0uanNWYWx1
ZShjYWxsRnJhbWUpOwogCiAgICAgaWYgKCFwcm9ncmFtLT5pc1N0cmluZygpKQogICAgICAgICBy
ZXR1cm4gcHJvZ3JhbTsKIAogICAgIFVTdHJpbmcgcHJvZ3JhbVNvdXJjZSA9IGFzU3RyaW5nKHBy
b2dyYW0pLT52YWx1ZSgpOwogCisgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxs
RnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CiAgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9IGNvZGVCbG9j
ay0+ZXZhbENvZGVDYWNoZS5nZXQoY2FsbEZyYW1lLCBwcm9ncmFtU291cmNlLCBzY29wZUNoYWlu
LCBleGNlcHRpb25WYWx1ZSk7CiAKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc1VuZGVmaW5lZCgp
OwogICAgIGlmIChldmFsTm9kZSkKLSAgICAgICAgcmVzdWx0ID0gY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkubWFjaGluZS0+ZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwgY2FsbEZyYW1lLCB0aGlzT2Jq
LCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gcmVnaXN0ZXJGaWxlLT5zdGFydCgpICsgYXJndiAr
IDEgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIHNjb3BlQ2hhaW4sICZleGNl
cHRpb25WYWx1ZSk7CisgICAgICAgIHJlc3VsdCA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm1h
Y2hpbmUtPmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksIGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlz
VmFsdWUoKS0+dG9UaGlzT2JqZWN0KGNhbGxGcmFtZSksIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkg
LSByZWdpc3RlckZpbGUtPnN0YXJ0KCkgKyByZWdpc3Rlck9mZnNldCwgc2NvcGVDaGFpbiwgJmV4
Y2VwdGlvblZhbHVlKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC02NDgsMTcgKzY0OSwx
MyBAQCBNYWNoaW5lOjp+TWFjaGluZSgpCiAKICNpZm5kZWYgTkRFQlVHCiAKLXZvaWQgTWFjaGlu
ZTo6ZHVtcENhbGxGcmFtZShjb25zdCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCit2b2lkIE1hY2hpbmU6OmR1bXBDYWxsRnJhbWUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFt
ZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKTsKLQotICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb2RlQmxvY2stPmR1bXAoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCkpOwotCi0gICAgZHVtcFJlZ2lzdGVycyhyZWdpc3RlckZpbGUs
IGNhbGxGcmFtZSk7CisgICAgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+ZHVtcChjYWxsRnJhbWUp
OworICAgIGR1bXBSZWdpc3RlcnMoY2FsbEZyYW1lKTsKIH0KIAotdm9pZCBNYWNoaW5lOjpkdW1w
UmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKK3ZvaWQgTWFjaGluZTo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKIHsKICAgICBwcmludGYoIlJlZ2lzdGVyIGZyYW1lOiBcblxuIik7CiAgICAgcHJpbnRmKCIt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsK
QEAgLTY2Niw2ICs2NjMsNyBAQCB2b2lkIE1hY2hpbmU6OmR1bXBSZWdpc3RlcnMoY29uc3QgUmVn
aXN0CiAgICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tXG4iKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKKyAgICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSA9ICZjYWxsRnJh
bWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS0+bWFjaGluZS0+
cmVnaXN0ZXJGaWxlKCk7CiAgICAgY29uc3QgUmVnaXN0ZXIqIGl0OwogICAgIGNvbnN0IFJlZ2lz
dGVyKiBlbmQ7CiAKQEAgLTEwMTYsNyArMTAxNCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1
dGUoRXZhbE5vZGUqIGV2YWwKICAgICByZXR1cm4gZXhlY3V0ZShldmFsTm9kZSwgY2FsbEZyYW1l
LCB0aGlzT2JqLCBtX3JlZ2lzdGVyRmlsZS5zaXplKCkgKyBldmFsTm9kZS0+Ynl0ZUNvZGUoc2Nv
cGVDaGFpbikubnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSwgc2NvcGVDaGFpbiwgZXhjZXB0aW9uKTsKIH0KIAotSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0
ZShFdmFsTm9kZSogZXZhbE5vZGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhp
c09iaiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNW
YWx1ZSoqIGV4Y2VwdGlvbikKK0pTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2
YWxOb2RlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIHRoaXNPYmosIGludCBnbG9i
YWxSZWdpc3Rlck9mZnNldCwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqKiBl
eGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKCFzY29wZUNoYWluLT5nbG9iYWxEYXRhLT5leGNlcHRp
b24pOwogCkBAIC0xMDYyLDEzICsxMDYwLDEzIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUo
RXZhbE5vZGUqIGV2YWwKICAgICB9CiAKICAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9yZWdpc3Rl
ckZpbGUuZW5kKCk7Ci0gICAgUmVnaXN0ZXIqIG5ld0VuZCA9IG1fcmVnaXN0ZXJGaWxlLnN0YXJ0
KCkgKyByZWdpc3Rlck9mZnNldCArIGNvZGVCbG9jay0+bnVtQ2FsbGVlUmVnaXN0ZXJzOworICAg
IFJlZ2lzdGVyKiBuZXdFbmQgPSBtX3JlZ2lzdGVyRmlsZS5zdGFydCgpICsgZ2xvYmFsUmVnaXN0
ZXJPZmZzZXQgKyBjb2RlQmxvY2stPm51bUNhbGxlZVJlZ2lzdGVyczsKICAgICBpZiAoIW1fcmVn
aXN0ZXJGaWxlLmdyb3cobmV3RW5kKSkgewogICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3Rh
Y2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAg
ICB9CiAKLSAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG1f
cmVnaXN0ZXJGaWxlLnN0YXJ0KCkgKyByZWdpc3Rlck9mZnNldCk7CisgICAgQ2FsbEZyYW1lKiBu
ZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShtX3JlZ2lzdGVyRmlsZS5zdGFydCgpICsg
Z2xvYmFsUmVnaXN0ZXJPZmZzZXQpOwogCiAgICAgLy8gYSAwIGNvZGVCbG9jayBpbmRpY2F0ZXMg
YSBidWlsdC1pbiBjYWxsZXIKICAgICBuZXdDYWxsRnJhbWVbY29kZUJsb2NrLT50aGlzUmVnaXN0
ZXJdID0gdGhpc09iajsKQEAgLTMyNTcsNyArMzI1NSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQogICAgIEJF
R0lOX09QQ09ERShvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAgLyogY2FsbF9ldmFsIGRzdChyKSBm
dW5jKHIpIHRoaXNWYWwocikgZmlyc3RBcmcocikgYXJnQ291bnQobikKKyAgICAgICAgLyogY2Fs
bF9ldmFsIGRzdChyKSBmdW5jKHIpIGFyZ0NvdW50KG4pIHJlZ2lzdGVyT2Zmc2V0KG4pCiAKICAg
ICAgICAgICAgQ2FsbCBhIGZ1bmN0aW9uIG5hbWVkICJldmFsIiB3aXRoIG5vIGV4cGxpY2l0ICJ0
aGlzIiB2YWx1ZQogICAgICAgICAgICAod2hpY2ggbWF5IHRoZXJlZm9yZSBiZSB0aGUgZXZhbCBv
cGVyYXRvcikuIElmIHJlZ2lzdGVyCkBAIC0zMjcwLDMwICszMjY4LDI4IEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKIAogICAgICAgICBpbnQgZHN0ID0gdlBDWzFd
LnUub3BlcmFuZDsKICAgICAgICAgaW50IGZ1bmMgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAg
ICBpbnQgdGhpc1ZhbCA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBmaXJzdEFyZyA9
IHZQQ1s0XS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBhcmdDb3VudCA9IHZQQ1s1XS51Lm9wZXJh
bmQ7CisgICAgICAgIGludCBhcmdDb3VudCA9IHZQQ1szXS51Lm9wZXJhbmQ7CisgICAgICAgIGlu
dCByZWdpc3Rlck9mZnNldCA9IHZQQ1s0XS51Lm9wZXJhbmQ7CiAKICAgICAgICAgSlNWYWx1ZSog
ZnVuY1ZhbCA9IGNhbGxGcmFtZVtmdW5jXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpT
VmFsdWUqIGJhc2VWYWwgPSBjYWxsRnJhbWVbdGhpc1ZhbF0uanNWYWx1ZShjYWxsRnJhbWUpOwog
Ci0gICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNo
YWluKCk7Ci0gICAgICAgIGlmIChiYXNlVmFsID09IHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgp
ICYmIGZ1bmNWYWwgPT0gc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlvbigp
KSB7Ci0gICAgICAgICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGFzT2JqZWN0KGNhbGxGcmFt
ZVtjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT50aGlzUmVnaXN0ZXJdLmpzVmFsdWUoY2FsbEZyYW1l
KSk7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBjYWxsRXZhbChjYWxsRnJhbWUsIHRo
aXNPYmplY3QsIHNjb3BlQ2hhaW4sIHJlZ2lzdGVyRmlsZSwgZmlyc3RBcmcsIGFyZ0NvdW50LCBl
eGNlcHRpb25WYWx1ZSk7CisgICAgICAgIFJlZ2lzdGVyKiBuZXdDYWxsRnJhbWUgPSBjYWxsRnJh
bWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQ7CisgICAgICAgIFJlZ2lzdGVyKiBhcmd2
ID0gbmV3Q2FsbEZyYW1lIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJn
Q291bnQ7CisgICAgICAgIEpTVmFsdWUqIHRoaXNWYWx1ZSA9IGFyZ3ZbMF0uanNWYWx1ZShjYWxs
RnJhbWUpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1l
LT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpOworCisgICAgICAgIGlmICh0aGlzVmFsdWUg
PT0gZ2xvYmFsT2JqZWN0ICYmIGZ1bmNWYWwgPT0gZ2xvYmFsT2JqZWN0LT5ldmFsRnVuY3Rpb24o
KSkgeworICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gY2FsbEV2YWwoY2FsbEZyYW1lLCBy
ZWdpc3RlckZpbGUsIGFyZ3YsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCwgZXhjZXB0aW9uVmFs
dWUpOwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAgICAgICAgICAgIGdv
dG8gdm1fdGhyb3c7Ci0KICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogCi0g
ICAgICAgICAgICB2UEMgKz0gNzsKKyAgICAgICAgICAgIHZQQyArPSA1OwogICAgICAgICAgICAg
TkVYVF9PUENPREU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBXZSBkaWRuJ3QgZmluZCB0aGUg
Ymxlc3NlZCB2ZXJzaW9uIG9mIGV2YWwsIHNvIHJlc2V0IHZQQyBhbmQgcHJvY2VzcwotICAgICAg
ICAvLyB0aGlzIGluc3RydWN0aW9uIGFzIGEgbm9ybWFsIGZ1bmN0aW9uIGNhbGwsIHN1cHBseWlu
ZyB0aGUgcHJvcGVyICd0aGlzJwotICAgICAgICAvLyB2YWx1ZS4KLSAgICAgICAgY2FsbEZyYW1l
W3RoaXNWYWxdID0gYmFzZVZhbC0+dG9UaGlzT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgICAgIC8v
IFdlIGRpZG4ndCBmaW5kIHRoZSBibGVzc2VkIHZlcnNpb24gb2YgZXZhbCwgc28gcHJvY2VzcyB0
aGlzCisgICAgICAgIC8vIGluc3RydWN0aW9uIGFzIGEgbm9ybWFsIGZ1bmN0aW9uIGNhbGwuCiAK
ICNpZiBIQVZFKENPTVBVVEVEX0dPVE8pCiAgICAgICAgIC8vIEhhY2sgYXJvdW5kIGdjYyBwZXJm
b3JtYW5jZSBxdWlyayBieSBwZXJmb3JtaW5nIGFuIGluZGlyZWN0IGdvdG8KQEAgLTMzMDQsNDgg
KzMzMDAsMjAgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAg
ICAgICAvLyBmYWxsIHRocm91Z2ggdG8gb3BfY2FsbAogICAgIH0KICAgICBCRUdJTl9PUENPREUo
b3BfY2FsbCkgewotICAgICAgICAvKiBjYWxsIGRzdChyKSBmdW5jKHIpIHRoaXNWYWwocikgZmly
c3RBcmcocikgYXJnQ291bnQobikgcmVnaXN0ZXJPZmZzZXQobikKKyAgICAgICAgLyogY2FsbCBk
c3QocikgZnVuYyhyKSBhcmdDb3VudChuKSByZWdpc3Rlck9mZnNldChuKQogCi0gICAgICAgICAg
IFBlcmZvcm0gYSBmdW5jdGlvbiBjYWxsLiBTcGVjaWZpY2FsbHksIGNhbGwgcmVnaXN0ZXIgZnVu
YwotICAgICAgICAgICB3aXRoIGEgInRoaXMiIHZhbHVlIG9mIHJlZ2lzdGVyIHRoaXNWYWwsIGFu
ZCBwdXQgdGhlIHJlc3VsdAotICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCi0KLSAgICAgICAg
ICAgVGhlIGFyZ3VtZW50cyBzdGFydCBhdCByZWdpc3RlciBmaXJzdEFyZyBhbmQgZ28gdXAgdG8K
LSAgICAgICAgICAgYXJnQ291bnQsIGJ1dCB0aGUgInRoaXMiIHZhbHVlIGlzIGNvbnNpZGVyZWQg
YW4gaW1wbGljaXQKLSAgICAgICAgICAgZmlyc3QgYXJndW1lbnQsIHNvIHRoZSBhcmdDb3VudCBz
aG91bGQgYmUgb25lIGdyZWF0ZXIgdGhhbgotICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGV4cGxp
Y2l0IGFyZ3VtZW50cyBwYXNzZWQsIGFuZCB0aGUgcmVnaXN0ZXIKLSAgICAgICAgICAgYWZ0ZXIg
Zmlyc3RBcmcgc2hvdWxkIGNvbnRhaW4gdGhlIGFjdHVhbCBmaXJzdAotICAgICAgICAgICBhcmd1
bWVudC4gVGhpcyBvcGNvZGUgd2lsbCBjb3B5IGZyb20gdGhlIHRoaXNWYWwgcmVnaXN0ZXIKLSAg
ICAgICAgICAgdG8gdGhlIGZpcnN0QXJnIHJlZ2lzdGVyLCB1bmxlc3MgdGhlIHJlZ2lzdGVyIGlu
ZGV4IG9mCi0gICAgICAgICAgIHRoaXNWYWwgaXMgdGhlIHNwZWNpYWwgbWlzc2luZyB0aGlzIG9i
amVjdCBtYXJrZXIsIHdoaWNoIGlzCi0gICAgICAgICAgIDJeMzEtMTsgaW4gdGhhdCBjYXNlLCB0
aGUgZ2xvYmFsIG9iamVjdCB3aWxsIGJlIHVzZWQgYXMgdGhlCi0gICAgICAgICAgICJ0aGlzIiB2
YWx1ZS4KLQotICAgICAgICAgICBJZiBmdW5jIGlzIGEgbmF0aXZlIGNvZGUgZnVuY3Rpb24sIHRo
ZW4gdGhpcyBvcGNvZGUgY2FsbHMKLSAgICAgICAgICAgaXQgYW5kIHJldHVybnMgdGhlIHZhbHVl
IGltbWVkaWF0ZWx5LiAKLQotICAgICAgICAgICBCdXQgaWYgaXQgaXMgYSBKUyBmdW5jdGlvbiwg
dGhlbiB0aGUgY3VycmVudCBzY29wZSBjaGFpbgotICAgICAgICAgICBhbmQgY29kZSBibG9jayBp
cyBzZXQgdG8gdGhlIGZ1bmN0aW9uJ3MsIGFuZCB3ZSBzbGlkZSB0aGUKLSAgICAgICAgICAgcmVn
aXN0ZXIgd2luZG93IHNvIHRoYXQgdGhlIGFyZ3VtZW50cyB3b3VsZCBmb3JtIHRoZSBmaXJzdAot
ICAgICAgICAgICBmZXcgbG9jYWwgcmVnaXN0ZXJzIG9mIHRoZSBjYWxsZWQgZnVuY3Rpb24ncyBy
ZWdpc3RlcgotICAgICAgICAgICB3aW5kb3cuIEluIGFkZGl0aW9uLCBhIGNhbGwgZnJhbWUgaGVh
ZGVyIGlzIHdyaXR0ZW4KLSAgICAgICAgICAgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBhcmd1bWVu
dHM7IHNlZSB0aGUgY2FsbCBmcmFtZQotICAgICAgICAgICBkb2N1bWVudGF0aW9uIGZvciBhbiBl
eHBsYW5hdGlvbiBvZiBob3cgbWFueSByZWdpc3RlcnMgYQotICAgICAgICAgICBjYWxsIGZyYW1l
IHRha2VzIGFuZCB3aGF0IHRoZXkgY29udGFpbi4gVGhhdCBtYW55IHJlZ2lzdGVycwotICAgICAg
ICAgICBiZWZvcmUgdGhlIGZpcnN0QXJnIHJlZ2lzdGVyIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkg
dGhlCi0gICAgICAgICAgIGNhbGwuIEluIGFkZGl0aW9uLCBhbnkgcmVnaXN0ZXJzIGhpZ2hlciB0
aGFuIGZpcnN0QXJnICsKLSAgICAgICAgICAgYXJnQ291bnQgbWF5IGJlIG92ZXJ3cml0dGVuLiBP
bmNlIHRoaXMgc2V0dXAgaXMgY29tcGxldGUsCi0gICAgICAgICAgIGV4ZWN1dGlvbiBjb250aW51
ZXMgZnJvbSB0aGUgY2FsbGVkIGZ1bmN0aW9uJ3MgZmlyc3QKLSAgICAgICAgICAgYXJndW1lbnQs
IGFuZCBkb2VzIG5vdCByZXR1cm4gdW50aWwgYSAicmV0IiBvcGNvZGUgaXMKLSAgICAgICAgICAg
ZW5jb3VudGVyZWQuCisgICAgICAgICAgIFBlcmZvcm0gYSBmdW5jdGlvbiBjYWxsLgorICAgICAg
ICAgICAKKyAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgaXMgdGhlIGRpc3RhbmNlIHRoZSBjYWxs
RnJhbWUgcG9pbnRlciBzaG91bGQgbW92ZQorICAgICAgICAgICBiZWZvcmUgdGhlIFZNIGluaXRp
YWxpemVzIHRoZSBuZXcgY2FsbCBmcmFtZSdzIGhlYWRlci4KKyAgICAgICAgICAgCisgICAgICAg
ICAgIGRzdCBpcyB3aGVyZSBvcF9yZXQgc2hvdWxkIHN0b3JlIGl0cyByZXN1bHQuCiAgICAgICAg
ICAqLwogCiAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBpbnQg
ZnVuYyA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB0aGlzVmFsID0gdlBDWzNdLnUu
b3BlcmFuZDsKLSAgICAgICAgaW50IGZpcnN0QXJnID0gdlBDWzRdLnUub3BlcmFuZDsKLSAgICAg
ICAgaW50IGFyZ0NvdW50ID0gdlBDWzVdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gdlBDWzZdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IGFyZ0NvdW50ID0gdlBDWzNd
LnUub3BlcmFuZDsKKyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gdlBDWzRdLnUub3BlcmFu
ZDsKIAogICAgICAgICBKU1ZhbHVlKiB2ID0gY2FsbEZyYW1lW2Z1bmNdLmpzVmFsdWUoY2FsbEZy
YW1lKTsKIApAQCAtMzM1Nyw4ICszMzI1LDYgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5
Tm9kZSA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uQm9keTsKICAgICAgICAgICAgIENvZGVCbG9jayog
bmV3Q29kZUJsb2NrID0gJmZ1bmN0aW9uQm9keU5vZGUtPmJ5dGVDb2RlKGNhbGxEYXRhU2NvcGVD
aGFpbik7CiAKLSAgICAgICAgICAgIGNhbGxGcmFtZVtmaXJzdEFyZ10gPSB0aGlzVmFsID09IG1p
c3NpbmdUaGlzT2JqZWN0TWFya2VyKCkgPyBjYWxsRnJhbWUtPmdsb2JhbFRoaXNWYWx1ZSgpIDog
Y2FsbEZyYW1lW3RoaXNWYWxdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIAogICAg
ICAgICAgICAgQ2FsbEZyYW1lKiBwcmV2aW91c0NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKIAogICAg
ICAgICAgICAgY2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJs
b2NrLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgcmVnaXN0ZXJPZmZzZXQsIGFyZ0NvdW50KTsK
QEAgLTMzNjgsNyArMzMzNCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4
ZWN1dGkKICAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBjYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyA3LCBjYWxsRGF0
YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1lLCBkc3QsIGFyZ0NvdW50LCBhc0Z1bmN0aW9u
KHYpKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIHZQQyArIDUs
IGNhbGxEYXRhU2NvcGVDaGFpbiwgcHJldmlvdXNDYWxsRnJhbWUsIGRzdCwgYXJnQ291bnQsIGFz
RnVuY3Rpb24odikpOwogICAgICAgICAgICAgdlBDID0gbmV3Q29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMuYmVnaW4oKTsKIAogI2lmIEVOQUJMRShPUENPREVfU1RBVFMpCkBAIC0zMzc5LDEyICszMzQ1
LDE3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKLSAgICAgICAgICAg
IEpTVmFsdWUqIHRoaXNWYWx1ZSA9IHRoaXNWYWwgPT0gbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIo
KSA/IGNhbGxGcmFtZS0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBjYWxsRnJhbWVbdGhpc1ZhbF0uanNW
YWx1ZShjYWxsRnJhbWUpOwotICAgICAgICAgICAgQXJnTGlzdCBhcmdzKGNhbGxGcmFtZS0+cmVn
aXN0ZXJzKCkgKyBmaXJzdEFyZyArIDEsIGFyZ0NvdW50IC0gMSk7Ci0KICAgICAgICAgICAgIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAgICAg
ICAgICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCk7Ci0gICAgICAgICAgICBuZXdDYWxs
RnJhbWUtPmluaXQoMCwgdlBDICsgNywgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLCBkc3QsIGFyZ0Nv
dW50LCAwKTsKKyAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyA1LCBzY29w
ZUNoYWluLCBjYWxsRnJhbWUsIGRzdCwgYXJnQ291bnQsIDApOworCisgICAgICAgICAgICBSZWdp
c3RlciogdGhpc1JlZ2lzdGVyID0gbmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50OworICAgICAgICAgICAgQXJnTGlz
dCBhcmdzKHRoaXNSZWdpc3RlciArIDEsIGFyZ0NvdW50IC0gMSk7CisKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBBbGwgaG9zdCBtZXRob2RzIHNob3VsZCBiZSBjYWxsaW5nIHRvVGhpc09iamVjdCwg
YnV0IHRoaXMgaXMgbm90IHByZXNlbnRseSB0aGUgY2FzZS4KKyAgICAgICAgICAgIEpTVmFsdWUq
IHRoaXNWYWx1ZSA9IHRoaXNSZWdpc3Rlci0+anNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICAg
ICAgaWYgKHRoaXNWYWx1ZSA9PSBqc051bGwoKSkKKyAgICAgICAgICAgICAgICB0aGlzVmFsdWUg
PSBjYWxsRnJhbWUtPmdsb2JhbFRoaXNWYWx1ZSgpOwogCiAgICAgICAgICAgICBKU1ZhbHVlKiBy
ZXR1cm5WYWx1ZTsKICAgICAgICAgICAgIHsKQEAgLTMzOTUsNyArMzM2Niw3IEBAIEpTVmFsdWUq
IE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKIAogICAgICAgICAgICAgY2FsbEZyYW1l
W2RzdF0gPSByZXR1cm5WYWx1ZTsKIAotICAgICAgICAgICAgdlBDICs9IDc7CisgICAgICAgICAg
ICB2UEMgKz0gNTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgICAgICB9CiAKQEAgLTM1
NjUsMjggKzM1MzYsMjggQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX2NvbnN0
cnVjdCkgewotICAgICAgICAvKiBjb25zdHJ1Y3QgZHN0KHIpIGNvbnN0cihyKSBjb25zdHJQcm90
byhyKSBmaXJzdEFyZyhyKSBhcmdDb3VudChuKSByZWdpc3Rlck9mZnNldChuKQorICAgICAgICAv
KiBjb25zdHJ1Y3QgZHN0KHIpIGZ1bmMocikgYXJnQ291bnQobikgcmVnaXN0ZXJPZmZzZXQobikg
cHJvdG8ocikgdGhpc1JlZ2lzdGVyKHIpCiAKLSAgICAgICAgICAgSW52b2tlIHJlZ2lzdGVyICJj
b25zdHIiIGFzIGEgY29uc3RydWN0b3IuIEZvciBKUworICAgICAgICAgICBJbnZva2UgcmVnaXN0
ZXIgImZ1bmMiIGFzIGEgY29uc3RydWN0b3IuIEZvciBKUwogICAgICAgICAgICBmdW5jdGlvbnMs
IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gaXMgZXhhY3RseSBhcyBmb3IgdGhlCiAgICAgICAgICAg
ICJjYWxsIiBvcGNvZGUsIGV4Y2VwdCB0aGF0IHRoZSAidGhpcyIgdmFsdWUgaXMgYSBuZXdseQot
ICAgICAgICAgICBjcmVhdGVkIE9iamVjdC4gRm9yIG5hdGl2ZSBjb25zdHJ1Y3RvcnMsIGEgbnVs
bCAidGhpcyIKLSAgICAgICAgICAgdmFsdWUgaXMgcGFzc2VkLiBJbiBlaXRoZXIgY2FzZSwgdGhl
IGZpcnN0QXJnIGFuZCBhcmdDb3VudAorICAgICAgICAgICBjcmVhdGVkIE9iamVjdC4gRm9yIG5h
dGl2ZSBjb25zdHJ1Y3RvcnMsIG5vICJ0aGlzIgorICAgICAgICAgICB2YWx1ZSBpcyBwYXNzZWQu
IEluIGVpdGhlciBjYXNlLCB0aGUgYXJnQ291bnQgYW5kIHJlZ2lzdGVyT2Zmc2V0CiAgICAgICAg
ICAgIHJlZ2lzdGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgZm9yIHRoZSAiY2FsbCIgb3Bjb2RlLgog
Ci0gICAgICAgICAgIFJlZ2lzdGVyIGNvbnN0clByb3RvIG11c3QgY29udGFpbiB0aGUgcHJvdG90
eXBlIHByb3BlcnR5IG9mCi0gICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0c3IuIFRoaXMgaXMgdG8g
ZW5hYmxlIHBvbHltb3JwaGljIGlubGluZQorICAgICAgICAgICBSZWdpc3RlciBwcm90byBtdXN0
IGNvbnRhaW4gdGhlIHByb3RvdHlwZSBwcm9wZXJ0eSBvZgorICAgICAgICAgICByZWdpc3RlciBm
dW5jLiBUaGlzIGlzIHRvIGVuYWJsZSBwb2x5bW9ycGhpYyBpbmxpbmUKICAgICAgICAgICAgY2Fj
aGluZyBvZiB0aGlzIGxvb2t1cC4KICAgICAgICAgKi8KIAogICAgICAgICBpbnQgZHN0ID0gdlBD
WzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IGNvbnN0ciA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIGludCBjb25zdHJQcm90byA9IHZQQ1szXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBm
aXJzdEFyZyA9IHZQQ1s0XS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBhcmdDb3VudCA9IHZQQ1s1
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHZQQ1s2XS51Lm9wZXJh
bmQ7CisgICAgICAgIGludCBmdW5jID0gdlBDWzJdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IGFy
Z0NvdW50ID0gdlBDWzNdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0g
dlBDWzRdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IHByb3RvID0gdlBDWzVdLnUub3BlcmFuZDsK
KyAgICAgICAgaW50IHRoaXNSZWdpc3RlciA9IHZQQ1s2XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAg
SlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtjb25zdHJdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAg
ICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtmdW5jXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAg
ICAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgICAgICBDb25zdHJ1Y3RUeXBl
IGNvbnN0cnVjdFR5cGUgPSB2LT5nZXRDb25zdHJ1Y3REYXRhKGNvbnN0cnVjdERhdGEpOwpAQCAt
MzU5NywxNCArMzU2OCwxNCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVj
dXRpCiAgICAgICAgICAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9ICZmdW5jdGlvbkJvZHlO
b2RlLT5ieXRlQ29kZShjYWxsRGF0YVNjb3BlQ2hhaW4pOwogCiAgICAgICAgICAgICBTdHJ1Y3R1
cmVJRCogc3RydWN0dXJlOwotICAgICAgICAgICAgSlNWYWx1ZSogcHJvdG90eXBlID0gY2FsbEZy
YW1lW2NvbnN0clByb3RvXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBKU1ZhbHVl
KiBwcm90b3R5cGUgPSBjYWxsRnJhbWVbcHJvdG9dLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAg
ICAgICAgIGlmIChwcm90b3R5cGUtPmlzT2JqZWN0KCkpCiAgICAgICAgICAgICAgICAgc3RydWN0
dXJlID0gYXNPYmplY3QocHJvdG90eXBlKS0+aW5oZXJpdG9ySUQoKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBjYWxsRGF0YVNjb3BlQ2hhaW4tPmdsb2Jh
bE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpOwogICAgICAgICAgICAgSlNPYmplY3Qq
IG5ld09iamVjdCA9IG5ldyAoZ2xvYmFsRGF0YSkgSlNPYmplY3Qoc3RydWN0dXJlKTsKIAotICAg
ICAgICAgICAgY2FsbEZyYW1lW2ZpcnN0QXJnXSA9IG5ld09iamVjdDsgLy8gInRoaXMiIHZhbHVl
CisgICAgICAgICAgICBjYWxsRnJhbWVbdGhpc1JlZ2lzdGVyXSA9IG5ld09iamVjdDsgLy8gInRo
aXMiIHZhbHVlCiAKICAgICAgICAgICAgIENhbGxGcmFtZSogcHJldmlvdXNDYWxsRnJhbWUgPSBj
YWxsRnJhbWU7CiAKQEAgLTM2MjYsNyArMzU5Nyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZh
dGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjb25zdHJ1Y3RUeXBl
ID09IENvbnN0cnVjdFR5cGVIb3N0KSB7Ci0gICAgICAgICAgICBBcmdMaXN0IGFyZ3MoY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0QXJnICsgMSwgYXJnQ291bnQgLSAxKTsKKyAgICAgICAg
ICAgIEFyZ0xpc3QgYXJncyhjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgdGhpc1JlZ2lzdGVyICsg
MSwgYXJnQ291bnQgLSAxKTsKIAogICAgICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAgICAgICAgICAgIENhbGxGcmFtZSogbmV3
Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJl
Z2lzdGVyT2Zmc2V0KTsKQEAgLTQzNzMsNiArNDM0NCwxOCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5F
IHZvaWQgc2V0VXBUaHJvd1RyYW1wCiAgICAgICAgIH0gXAogICAgIH0gd2hpbGUgKDApCiAKKy8v
IFRoaXMgbWFjcm8gcmV3aW5kcyB0byB0aGUgcHJldmlvdXMgY2FsbCBmcmFtZSBiZWNhdXNlIENU
SSBmdW5jdGlvbnMgdGhhdAorLy8gdGhyb3cgc3RhY2sgb3ZlcmZsb3cgZXhjZXB0aW9ucyBleGVj
dXRlIGFmdGVyIHRoZSBjYWxsIGZyYW1lIGhhcworLy8gb3B0aW1pc3RpY2FsbHkgbW92ZWQgZm9y
d2FyZC4KKyNkZWZpbmUgQ1RJX1RIUk9XX1NUQUNLX09WRVJGTE9XKCkgZG8geyBcCisgICAgQ2Fs
bEZyYW1lKiBvbGRDYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOyBcCisg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gQVJHX2dsb2JhbERhdGE7IFwKKyAgICBnbG9i
YWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Iob2xkQ2FsbEZyYW1l
KTsgXAorICAgIGdsb2JhbERhdGEtPnRocm93UmV0dXJuQWRkcmVzcyA9IENUSV9SRVRVUk5fQURE
UkVTUzsgXAorICAgIEFSR19zZXRDYWxsRnJhbWUob2xkQ2FsbEZyYW1lKTsgXAorICAgIENUSV9T
RVRfUkVUVVJOX0FERFJFU1MocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY3RpVk1UaHJvd1RyYW1w
b2xpbmUpKTsgXAorfSB3aGlsZSAoMCk7CisKIEpTT2JqZWN0KiBNYWNoaW5lOjpjdGlfb3BfY29u
dmVydF90aGlzKENUSV9BUkdTKQogewogICAgIENUSV9TVEFDS19IQUNLKCk7CkBAIC00NDYxLDEz
ICs0NDQ0LDYgQEAgdm9pZCBNYWNoaW5lOjpjdGlfdGltZW91dF9jaGVjayhDVElfQVJHUwogICAg
IH0KIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgTWFjaGluZTo6dGhyb3dTdGFja092ZXJmbG93UHJl
dmlvdXNGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCB2b2lkKiYgcmV0dXJuQWRkcmVzcykKLXsKLSAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpKTsKLSAgICBn
bG9iYWxEYXRhLT50aHJvd1JldHVybkFkZHJlc3MgPSBjYWxsRnJhbWUtPnJldHVyblBDKCk7Ci0g
ICAgY3RpU2V0UmV0dXJuQWRkcmVzcygmcmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY3RpVk1UaHJvd1RyYW1wb2xpbmUpKTsKLX0KLQogdm9pZCBNYWNoaW5lOjpjdGlfcmVn
aXN0ZXJfZmlsZV9jaGVjayhDVElfQVJHUykKIHsKICAgICBDVElfU1RBQ0tfSEFDSygpOwpAQCAt
NDQ3NSw4ICs0NDUxLDcgQEAgdm9pZCBNYWNoaW5lOjpjdGlfcmVnaXN0ZXJfZmlsZV9jaGVjayhD
VAogICAgIGlmIChMSUtFTFkoQVJHX3JlZ2lzdGVyRmlsZS0+Z3JvdyhBUkdfY2FsbEZyYW1lICsg
QVJHX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm51bUNhbGxlZVJlZ2lzdGVycykpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBBUkdfc2V0Q2FsbEZyYW1lKEFSR19jYWxsRnJhbWUtPmNhbGxlckZy
YW1lKCkpOwotICAgIHRocm93U3RhY2tPdmVyZmxvd1ByZXZpb3VzRnJhbWUoQVJHX2NhbGxGcmFt
ZSwgQVJHX2dsb2JhbERhdGEsIENUSV9SRVRVUk5fQUREUkVTUyk7CisgICAgQ1RJX1RIUk9XX1NU
QUNLX09WRVJGTE9XKCk7CiB9CiAKIGludCBNYWNoaW5lOjpjdGlfb3BfbG9vcF9pZl9sZXNzKENU
SV9BUkdTKQpAQCAtNDc1Myw4ICs0NzI4LDkgQEAgVm9pZFB0clBhaXIgTWFjaGluZTo6Y3RpX29w
X2NhbGxfYXJpdHlDaAogICAgICAgICBSZWdpc3RlciogciA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkgKyBvbWl0dGVkQXJnQ291bnQ7CiAgICAgICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSByICsgbmV3
Q29kZUJsb2NrLT5udW1DYWxsZWVSZWdpc3RlcnM7CiAgICAgICAgIGlmICghQVJHX3JlZ2lzdGVy
RmlsZS0+Z3JvdyhuZXdFbmQpKSB7Ci0gICAgICAgICAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKG9sZENhbGxGcmFtZSk7Ci0gICAgICAgICAg
ICBWTV9USFJPV19FWENFUFRJT05fMigpOworICAgICAgICAgICAgQ1RJX1RIUk9XX1NUQUNLX09W
RVJGTE9XKCk7CisgICAgICAgICAgICBWb2lkUHRyUGFpclZhbHVlIHBhaXIgPSB7eyAwLCAwIH19
OworICAgICAgICAgICAgcmV0dXJuIHBhaXIuaTsKICAgICAgICAgfQogCiAgICAgICAgIFJlZ2lz
dGVyKiBhcmd2ID0gciAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIG9taXR0
ZWRBcmdDb3VudDsKQEAgLTQ4MjIsNyArNDc5OCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9v
cF9jYWxsX05vdEpTRnVuY3QKICAgICAgICAgewogICAgICAgICAgICAgU2FtcGxpbmdUb29sOjpI
b3N0Q2FsbFJlY29yZCBjYWxsUmVjb3JkKENUSV9TQU1QTEVSKTsKIAotICAgICAgICAgICAgLy8g
QWxsIGhvc3QgbWV0aG9kcyBzaG91bGQgYmUgY2FsbGluZyB0b1RoaXNPYmplY3QsIGJ1dCB0aGlz
IGlzIG5vdCBwcmVzZW50bHkgdGhlIGNhc2UuCisgICAgICAgICAgICAvLyBGSVhNRTogQWxsIGhv
c3QgbWV0aG9kcyBzaG91bGQgYmUgY2FsbGluZyB0b1RoaXNPYmplY3QsIGJ1dCB0aGlzIGlzIG5v
dCBwcmVzZW50bHkgdGhlIGNhc2UuCiAgICAgICAgICAgICBKU1ZhbHVlKiB0aGlzVmFsdWUgPSBh
cmd2WzBdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIGlmICh0aGlzVmFsdWUgPT0g
anNOdWxsKCkpCiAgICAgICAgICAgICAgICAgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT5nbG9iYWxU
aGlzVmFsdWUoKTsKQEAgLTQ5NDYsOCArNDkyMiw4IEBAIEpTT2JqZWN0KiBNYWNoaW5lOjpjdGlf
b3BfY29uc3RydWN0X0pTQ28KICNlbmRpZgogCiAgICAgU3RydWN0dXJlSUQqIHN0cnVjdHVyZTsK
LSAgICBpZiAoQVJHX3NyYzUtPmlzT2JqZWN0KCkpCi0gICAgICAgIHN0cnVjdHVyZSA9IGFzT2Jq
ZWN0KEFSR19zcmM1KS0+aW5oZXJpdG9ySUQoKTsKKyAgICBpZiAoQVJHX3NyYzQtPmlzT2JqZWN0
KCkpCisgICAgICAgIHN0cnVjdHVyZSA9IGFzT2JqZWN0KEFSR19zcmM0KS0+aW5oZXJpdG9ySUQo
KTsKICAgICBlbHNlCiAgICAgICAgIHN0cnVjdHVyZSA9IGFzRnVuY3Rpb24oQVJHX3NyYzEpLT5t
X3Njb3BlQ2hhaW4ubm9kZSgpLT5nbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUo
KTsKICAgICByZXR1cm4gbmV3IChBUkdfZ2xvYmFsRGF0YSkgSlNPYmplY3Qoc3RydWN0dXJlKTsK
QEAgLTQ5NjEsMTMgKzQ5MzcsMTMgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX2NvbnN0cnVj
dF9Ob3RKUwogCiAgICAgSlNWYWx1ZSogY29uc3RyVmFsID0gQVJHX3NyYzE7CiAgICAgaW50IGFy
Z0NvdW50ID0gQVJHX2ludDM7Ci0gICAgaW50IGZpcnN0QXJnID0gQVJHX2ludDY7CisgICAgaW50
IHRoaXNSZWdpc3RlciA9IEFSR19pbnQ1OwogCiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3RE
YXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGNvbnN0clZhbC0+Z2V0Q29u
c3RydWN0RGF0YShjb25zdHJ1Y3REYXRhKTsKIAogICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENv
bnN0cnVjdFR5cGVIb3N0KSB7Ci0gICAgICAgIEFyZ0xpc3QgYXJnTGlzdChjYWxsRnJhbWUtPnJl
Z2lzdGVycygpICsgZmlyc3RBcmcgKyAxLCBhcmdDb3VudCAtIDEpOworICAgICAgICBBcmdMaXN0
IGFyZ0xpc3QoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHRoaXNSZWdpc3RlciArIDEsIGFyZ0Nv
dW50IC0gMSk7CiAKICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWU7CiAgICAgICAgIHsKQEAg
LTQ5ODEsNyArNDk1Nyw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9jb25zdHJ1Y3RfTm90
SlMKIAogICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVOb25lKTsKIAot
ICAgIEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJv
cihjYWxsRnJhbWUsIGNvbnN0clZhbCwgQVJHX2luc3RyNCwgY2FsbEZyYW1lLT5jb2RlQmxvY2so
KSk7CisgICAgQVJHX2dsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFDb25zdHJ1Y3Rv
ckVycm9yKGNhbGxGcmFtZSwgY29uc3RyVmFsLCBBUkdfaW5zdHI2LCBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpKTsKICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIApAQCAtNTU4MCwyMCArNTU1
NiwyMSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpjdGlfb3BfY2FsbF9ldmFsKENUSV9BCiAKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgUmVnaXN0ZXJGaWxlKiBy
ZWdpc3RlckZpbGUgPSBBUkdfcmVnaXN0ZXJGaWxlOwotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
biA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogCiAgICAgTWFjaGluZSogbWFjaGluZSA9IEFS
R19nbG9iYWxEYXRhLT5tYWNoaW5lOwogICAgIAogICAgIEpTVmFsdWUqIGZ1bmNWYWwgPSBBUkdf
c3JjMTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBBUkdfaW50MjsKICAgICBpbnQgYXJnQ291
bnQgPSBBUkdfaW50MzsKLSAgICBKU1ZhbHVlKiBiYXNlVmFsID0gQVJHX3NyYzU7CiAKLSAgICBp
ZiAoYmFzZVZhbCA9PSBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QoKSAmJiBmdW5jVmFsID09IHNj
b3BlQ2hhaW4tPmdsb2JhbE9iamVjdCgpLT5ldmFsRnVuY3Rpb24oKSkgewotICAgICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGNhbGxGcmFtZVtjb2RlQmxvY2stPnRoaXNSZWdpc3Rlcl0uanNW
YWx1ZShjYWxsRnJhbWUpLT50b1RoaXNPYmplY3QoY2FsbEZyYW1lKTsKKyAgICBSZWdpc3Rlciog
bmV3Q2FsbEZyYW1lID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0Owor
ICAgIFJlZ2lzdGVyKiBhcmd2ID0gbmV3Q2FsbEZyYW1lIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplIC0gYXJnQ291bnQ7CisgICAgSlNWYWx1ZSogdGhpc1ZhbHVlID0gYXJndlsw
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKTsKKworICAgIGlmICh0aGlz
VmFsdWUgPT0gZ2xvYmFsT2JqZWN0ICYmIGZ1bmNWYWwgPT0gZ2xvYmFsT2JqZWN0LT5ldmFsRnVu
Y3Rpb24oKSkgewogICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9IG5vVmFsdWUoKTsK
LSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gbWFjaGluZS0+Y2FsbEV2YWwoY2FsbEZyYW1lLCB0
aGlzT2JqZWN0LCBzY29wZUNoYWluLCByZWdpc3RlckZpbGUsIHJlZ2lzdGVyT2Zmc2V0IC0gUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291bnQsIGFyZ0NvdW50LCBleGNl
cHRpb25WYWx1ZSk7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1hY2hpbmUtPmNhbGxFdmFs
KGNhbGxGcmFtZSwgcmVnaXN0ZXJGaWxlLCBhcmd2LCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQs
IGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGV4Y2VwdGlvblZhbHVlICE9
IG5vVmFsdWUoKSkpIHsKICAgICAgICAgICAgIEFSR19nbG9iYWxEYXRhLT5leGNlcHRpb24gPSBl
eGNlcHRpb25WYWx1ZTsKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsK
QEAgLTU5NTYsMTUgKzU5MzMsMTYgQEAgSlNWYWx1ZSogTWFjaGluZTo6Y3RpX3ZtX3Rocm93KENU
SV9BUkdTKQogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSBBUkdfZ2xvYmFsRGF0YTsKIAotICAgIEFTU0VSVChjb2Rl
QmxvY2stPmN0aVJldHVybkFkZHJlc3NWUENNYXAuY29udGFpbnMoQVJHX2dsb2JhbERhdGEtPnRo
cm93UmV0dXJuQWRkcmVzcykpOwotICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5j
dGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChBUkdfZ2xvYmFsRGF0YS0+dGhyb3dSZXR1cm5BZGRy
ZXNzKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmNvbnRh
aW5zKGdsb2JhbERhdGEtPnRocm93UmV0dXJuQWRkcmVzcykpOworICAgIHVuc2lnbmVkIHZQQ0lu
ZGV4ID0gY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBDTWFwLmdldChnbG9iYWxEYXRhLT50
aHJvd1JldHVybkFkZHJlc3MpOwogCi0gICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUgPSBBUkdf
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uOworICAgIEpTVmFsdWUqIGV4Y2VwdGlvblZhbHVlID0gZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uOwogICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7Ci0gICAgQVJH
X2dsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IG5vVmFsdWUoKTsKKyAgICBnbG9iYWxEYXRhLT5leGNl
cHRpb24gPSBub1ZhbHVlKCk7CiAKLSAgICBJbnN0cnVjdGlvbiogaGFuZGxlclZQQyA9IEFSR19n
bG9iYWxEYXRhLT5tYWNoaW5lLT50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlvblZh
bHVlLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgdlBDSW5kZXgsIGZhbHNlKTsK
KyAgICBJbnN0cnVjdGlvbiogaGFuZGxlclZQQyA9IGdsb2JhbERhdGEtPm1hY2hpbmUtPnRocm93
RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zLmJlZ2luKCkgKyB2UENJbmRleCwgZmFsc2UpOwogCiAgICAgaWYgKCFoYW5kbGVyVlBDKSB7
CiAgICAgICAgICpBUkdfZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9WTS9NYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFj
aGluZS5oCShyZXZpc2lvbiAzODIwOSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgyLDggKzI4Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHBy
aXZhdGU6CiAgICAgICAgIGVudW0gRXhlY3V0aW9uRmxhZyB7IE5vcm1hbCwgSW5pdGlhbGl6ZUFu
ZFJldHVybiB9OwogCi0gICAgICAgIE5FVkVSX0lOTElORSBKU1ZhbHVlKiBjYWxsRXZhbChDYWxs
RnJhbWUqLCBKU09iamVjdCogdGhpc09iamVjdCwgU2NvcGVDaGFpbk5vZGUqLCBSZWdpc3RlckZp
bGUqLCBpbnQgYXJndiwgaW50IGFyZ2MsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSk7Ci0gICAg
ICAgIEpTVmFsdWUqIGV4ZWN1dGUoRXZhbE5vZGUqLCBDYWxsRnJhbWUqLCBKU09iamVjdCogdGhp
c09iamVjdCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBTY29wZUNoYWluTm9kZSosIEpTVmFsdWUqKiBl
eGNlcHRpb24pOworICAgICAgICBORVZFUl9JTkxJTkUgSlNWYWx1ZSogY2FsbEV2YWwoQ2FsbEZy
YW1lKiwgUmVnaXN0ZXJGaWxlKiwgUmVnaXN0ZXIqIGFyZ3YsIGludCBhcmdjLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSk7CisgICAgICAgIEpTVmFsdWUqIGV4
ZWN1dGUoRXZhbE5vZGUqLCBDYWxsRnJhbWUqLCBKU09iamVjdCogdGhpc09iamVjdCwgaW50IGds
b2JhbFJlZ2lzdGVyT2Zmc2V0LCBTY29wZUNoYWluTm9kZSosIEpTVmFsdWUqKiBleGNlcHRpb24p
OwogCiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9v
a0lELCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpOwogCkBAIC0zMDQsOCArMzA0LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNWYWx1ZSogcHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aW9uRmxhZywgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7
CiAKLSAgICAgICAgdm9pZCBkdW1wQ2FsbEZyYW1lKGNvbnN0IFJlZ2lzdGVyRmlsZSosIENhbGxG
cmFtZSopOwotICAgICAgICB2b2lkIGR1bXBSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJGaWxlKiwg
Q2FsbEZyYW1lKik7CisgICAgICAgIHZvaWQgZHVtcENhbGxGcmFtZShDYWxsRnJhbWUqKTsKKyAg
ICAgICAgdm9pZCBkdW1wUmVnaXN0ZXJzKENhbGxGcmFtZSopOwogCiAgICAgICAgIEpTVmFsdWUq
IGNoZWNrVGltZW91dChKU0dsb2JhbE9iamVjdCopOwogICAgICAgICB2b2lkIHJlc2V0VGltZW91
dENoZWNrKCk7CkBAIC0zMTgsNyArMzE4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgaXNDYWxsT3Bjb2RlKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBnZXRPcGNv
ZGUob3BfY2FsbCkgfHwgb3Bjb2RlID09IGdldE9wY29kZShvcF9jb25zdHJ1Y3QpIHx8IG9wY29k
ZSA9PSBnZXRPcGNvZGUob3BfY2FsbF9ldmFsKTsgfQogCiAjaWYgRU5BQkxFKENUSSkKLSAgICAg
ICAgc3RhdGljIHZvaWQgdGhyb3dTdGFja092ZXJmbG93UHJldmlvdXNGcmFtZShDYWxsRnJhbWUq
LCBKU0dsb2JhbERhdGEqLCB2b2lkKiYgcmV0dXJuQWRkcmVzcyk7CisgICAgICAgIHN0YXRpYyB2
b2lkIHRocm93U3RhY2tPdmVyZmxvd1ByZXZpb3VzRnJhbWUoQ2FsbEZyYW1lKiosIEpTR2xvYmFs
RGF0YSosIHZvaWQqJiByZXR1cm5BZGRyZXNzKTsKIAogICAgICAgICB2b2lkIHRyeUNUSUNhY2hl
R2V0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCB2b2lkKiByZXR1cm5BZGRyZXNzLCBKU1Zh
bHVlKiBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHZvaWQgdHJ5Q1RJQ2FjaGVQdXRCeUlEKENhbGxGcmFtZSos
IENvZGVCbG9jayosIHZvaWQqIHJldHVybkFkZHJlc3MsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29u
c3QgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Q29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzODIwOSkKKysrIEphdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5NSwy
NSArMTE5NSwyNCBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3RpCiAg
ICAgcmV0dXJuIHIwOwogfQogCi1SZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQqIGJhc2UsIEFyZ3Vt
ZW50c05vZGUqIGFyZ3VtZW50c05vZGUsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1p
dENhbGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdpc3RlcklEKiB0aGlz
UmVnaXN0ZXIsIEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50c05vZGUsIHVuc2lnbmVkIGRpdm90LCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQogewotICAgIHJldHVybiBl
bWl0Q2FsbChvcF9jYWxsLCBkc3QsIGZ1bmMsIGJhc2UsIGFyZ3VtZW50c05vZGUsIGRpdm90LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgZHN0
LCBmdW5jLCB0aGlzUmVnaXN0ZXIsIGFyZ3VtZW50c05vZGUsIGRpdm90LCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0KTsKIH0KIAotUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGxFdmFs
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogYmFzZSwgQXJn
dW1lbnRzTm9kZSogYXJndW1lbnRzTm9kZSwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCitSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpl
bWl0Q2FsbEV2YWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdpc3RlcklE
KiB0aGlzUmVnaXN0ZXIsIEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50c05vZGUsIHVuc2lnbmVkIGRp
dm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQogewotICAgIHJl
dHVybiBlbWl0Q2FsbChvcF9jYWxsX2V2YWwsIGRzdCwgZnVuYywgYmFzZSwgYXJndW1lbnRzTm9k
ZSwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgIHJldHVybiBlbWl0Q2FsbChv
cF9jYWxsX2V2YWwsIGRzdCwgZnVuYywgdGhpc1JlZ2lzdGVyLCBhcmd1bWVudHNOb2RlLCBkaXZv
dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiB9CiAKLVJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXRDYWxsKE9wY29kZUlEIG9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGZ1bmMsIFJlZ2lzdGVySUQqIGJhc2UsIEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50c05vZGUs
IHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
KQorUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQs
IFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lz
dGVyLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHNOb2RlLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKIHsKICAgICBBU1NFUlQob3Bjb2Rl
SUQgPT0gb3BfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpOwogICAgIEFTU0VSVChm
dW5jLT5yZWZDb3VudCgpKTsKLSAgICBBU1NFUlQoIWJhc2UgfHwgYmFzZS0+cmVmQ291bnQoKSk7
CiAgICAgCiAgICAgLy8gR2VuZXJhdGUgY29kZSBmb3IgYXJndW1lbnRzLgogICAgIFZlY3RvcjxS
ZWZQdHI8UmVnaXN0ZXJJRD4sIDE2PiBhcmd2OwotICAgIGFyZ3YuYXBwZW5kKG5ld1RlbXBvcmFy
eSgpKTsgLy8gcmVzZXJ2ZSBzcGFjZSBmb3IgInRoaXMiCisgICAgYXJndi5hcHBlbmQodGhpc1Jl
Z2lzdGVyKTsKICAgICBmb3IgKEFyZ3VtZW50TGlzdE5vZGUqIG4gPSBhcmd1bWVudHNOb2RlLT5t
X2xpc3ROb2RlLmdldCgpOyBuOyBuID0gbi0+bV9uZXh0LmdldCgpKSB7CiAgICAgICAgIGFyZ3Yu
YXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsKICAgICAgICAgZW1pdE5vZGUoYXJndi5sYXN0KCkuZ2V0
KCksIG4pOwpAQCAtMTIzMSwxMiArMTIzMCwxMiBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9y
OjplbWl0Q2FsbChPcGNvCiAKICAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQpOwogICAgIG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm9zLmFwcGVuZChD
YWxsTGlua0luZm8oKSk7CisKKyAgICAvLyBFbWl0IGNhbGwuCiAgICAgZW1pdE9wY29kZShvcGNv
ZGVJRCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChiYXNlID8gYmFzZS0+aW5kZXgoKSA6IG1pc3NpbmdUaGlzT2JqZWN0TWFya2VyKCkpOyAv
LyBXZSBlbmNvZGUgdGhlICJ0aGlzIiB2YWx1ZSBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLCB0
byBhdm9pZCBhbiBleHBsaWNpdCBpbnN0cnVjdGlvbiBmb3IgY29weWluZyBvciBsb2FkaW5nIGl0
LgotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd2WzBdLT5pbmRleCgpKTsgLy8gYXJndgot
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd2LnNpemUoKSk7IC8vIGFyZ2MKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsgLy8gZHN0CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkpOyAvLyBmdW5jCisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGFyZ3Yuc2l6ZSgpKTsgLy8gYXJnQ291bnQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
YXJndlswXS0+aW5kZXgoKSArIGFyZ3Yuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplKTsgLy8gcmVnaXN0ZXJPZmZzZXQKIAogICAgIGlmIChtX3Nob3VsZEVtaXRQcm9m
aWxlSG9va3MpIHsKQEAgLTEyOTUsMTMgKzEyOTQsMTQgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVy
YXRvcjo6ZW1pdENvbnN0cnVjdAogCiAgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KTsKICAgICBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvcy5hcHBl
bmQoQ2FsbExpbmtJbmZvKCkpOworCiAgICAgZW1pdE9wY29kZShvcF9jb25zdHJ1Y3QpOwotICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChmdW5jLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuY1By
b3RvLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndlswXS0+aW5kZXgo
KSk7IC8vIGFyZ3YKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndi5zaXplKCkpOyAvLyBh
cmdjCisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7IC8vIGRzdAorICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVuYworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChhcmd2LnNpemUoKSk7IC8vIGFyZ0NvdW50CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFyZ3ZbMF0tPmluZGV4KCkgKyBhcmd2LnNpemUoKSArIFJlZ2lzdGVyRmls
ZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7IC8vIHJlZ2lzdGVyT2Zmc2V0CisgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGZ1bmNQcm90by0+aW5kZXgoKSk7IC8vIHByb3RvCisgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFyZ3ZbMF0tPmluZGV4KCkpOyAvLyB0aGlzUmVnaXN0ZXIKIAogICAgIGVt
aXRPcGNvZGUob3BfY29uc3RydWN0X3ZlcmlmeSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGRzdC0+aW5kZXgoKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQ29kZUdl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Db2Rl
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDM4MjA5KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0NvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjY4LDggKzI2OCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0R2V0dGVyKFJlZ2lzdGVy
SUQqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRTZXR0ZXIoUmVnaXN0ZXJJRCogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKTsKIAotICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0Q2FsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJl
Z2lzdGVySUQqIGJhc2UsIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRDYWxsRXZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMsIFJlZ2lzdGVySUQq
IGJhc2UsIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVy
LCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBlbmRPZmZzZXQpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbEV2YWwoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIs
IEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGVuZE9mZnNldCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJldHVybihSZWdp
c3RlcklEKiBzcmMpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW5kKFJlZ2lzdGVySUQqIHNy
YykgeyByZXR1cm4gZW1pdFVuYXJ5Tm9Ec3RPcChvcF9lbmQsIHNyYyk7IH0KQEAgLTM0MCw3ICsz
NDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGRvdWJsZSwg
SlNWYWx1ZSo+IE51bWJlck1hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFVTdHJpbmc6OlJl
cCosIEpTU3RyaW5nKiwgSWRlbnRpZmllclJlcEhhc2g+IElkZW50aWZpZXJTdHJpbmdNYXA7CiAK
LSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqLCBSZWdp
c3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25lZCBkaXZvdCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CisgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRDYWxsKE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMs
IFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKICAgICAgICAgCiAg
ICAgICAgIFJlZ2lzdGVySUQqIG5ld1JlZ2lzdGVyKCk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmNwcAkocmV2aXNpb24gMzgyMDkpCisrKyBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODksMzcgKzM4OSw0MSBAQCBSZWdpc3RlcklEKiBOZXdF
eHByTm9kZTo6ZW1pdENvZGUoQ29kZUdlCiAKIFJlZ2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRp
b24oZHN0KTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKTsKLSAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShiYXNlLmdldCgpLCBm
dW5jLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFz
ZS5nZXQoKSksIGZ1bmMuZ2V0KCksIGJhc2UuZ2V0KCksIG1fYXJncy5nZXQoKSwgbV9kaXZvdCwg
bV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5j
ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiB0aGlzUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgZ2VuZXJhdG9y
LmVtaXRSZXNvbHZlV2l0aEJhc2UodGhpc1JlZ2lzdGVyLmdldCgpLCBmdW5jLmdldCgpLCBnZW5l
cmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENh
bGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMu
Z2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0
T2Zmc2V0LCBtX2VuZE9mZnNldCk7CiB9CiAKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZhbHVl
Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9l
eHByLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCksIGZ1bmMuZ2V0KCksIDAsIG1fYXJncy5nZXQoKSwgbV9kaXZvdCwg
bV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlz
UmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBq
c051bGwoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0
KCksIG1fYXJncy5nZXQoKSwgbV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOwog
fQogCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgaWYgKFJlZlB0cjxS
ZWdpc3RlcklEPiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZvcihtX2lkZW50KSkKLSAgICAg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QpLCBsb2NhbC5nZXQoKSwgMCwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0
LCBtX2VuZE9mZnNldCk7CisgICAgaWYgKFJlZlB0cjxSZWdpc3RlcklEPiBsb2NhbCA9IGdlbmVy
YXRvci5yZWdpc3RlckZvcihtX2lkZW50KSkgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
dGhpc1JlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwganNOdWxsKCkpOworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgdGhpc1JlZ2lzdGVyLmdldCgpKSwgbG9jYWwuZ2V0KCks
IHRoaXNSZWdpc3Rlci5nZXQoKSwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0
LCBtX2VuZE9mZnNldCk7CisgICAgfQogCiAgICAgaW50IGluZGV4ID0gMDsKICAgICBzaXplX3Qg
ZGVwdGggPSAwOwogICAgIEpTT2JqZWN0KiBnbG9iYWxPYmplY3QgPSAwOwogICAgIGlmIChnZW5l
cmF0b3IuZmluZFNjb3BlZFByb3BlcnR5KG1faWRlbnQsIGluZGV4LCBkZXB0aCwgZmFsc2UsIGds
b2JhbE9iamVjdCkgJiYgaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7CiAgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXRHZXRTY29wZWRWYXIoZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBkZXB0aCwgaW5kZXgsIGdsb2JhbE9iamVjdCk7Ci0gICAg
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KSwgZnVuYy5nZXQoKSwgMCwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0
LCBtX2VuZE9mZnNldCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlzUmVnaXN0ZXIg
PSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bGwoKSk7
CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBt
X2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKICAgICB9
CiAKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRp
b24oZHN0KTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci50ZW1wRGVz
dGluYXRpb24oZHN0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1JlZ2lzdGVyID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIGludCBpZGVudGlmaWVyU3RhcnQgPSBtX2Rpdm90
IC0gbV9zdGFydE9mZnNldDsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGlkZW50
aWZpZXJTdGFydCArIG1faWRlbnQuc2l6ZSgpLCBtX2lkZW50LnNpemUoKSwgMCk7Ci0gICAgZ2Vu
ZXJhdG9yLmVtaXRSZXNvbHZlRnVuY3Rpb24oYmFzZS5nZXQoKSwgZnVuYy5nZXQoKSwgbV9pZGVu
dCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jLmdldCgpLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0
KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKKyAgICBnZW5lcmF0b3Iu
ZW1pdFJlc29sdmVGdW5jdGlvbih0aGlzUmVnaXN0ZXIuZ2V0KCksIGZ1bmMuZ2V0KCksIG1faWRl
bnQpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBt
X2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKIH0KIAog
UmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDI3LDE2ICs0MzEsMTggQEAgUmVn
aXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaQogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CiAgICAgUmVnaXN0
ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkpOwog
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCAtIG1fc3ViZXhwcmVzc2lv
bkRpdm90T2Zmc2V0LCBtX3N0YXJ0T2Zmc2V0IC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQs
IG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0
aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJh
c2UuZ2V0KCksIHByb3BlcnR5KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSksIGZ1bmN0aW9uLmdldCgpLCBi
YXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zm
c2V0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdl
dEJ5VmFsKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgcHJvcGVy
dHkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlzUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1p
dE1vdmUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpKTsKKyAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rp
b24uZ2V0KCkpLCBmdW5jdGlvbi5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBtX2FyZ3MuZ2V0
KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKIH0KIAogUmVnaXN0ZXJJ
RCogRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKG1fZGl2b3QgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgbV9zdGFydE9mZnNl
dCAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N1YmV4cHJlc3Npb25FbmRPZmZzZXQp
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJ
ZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOwotICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBi
YXNlLmdldCgpKSwgZnVuY3Rpb24uZ2V0KCksIGJhc2UuZ2V0KCksIG1fYXJncy5nZXQoKSwgbV9k
aXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0
aW9uKGRzdCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0
aGlzUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBiYXNlLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpLCBmdW5jdGlvbi5nZXQoKSwgdGhp
c1JlZ2lzdGVyLmdldCgpLCBtX2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1f
ZW5kT2Zmc2V0KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3Rm
aXhSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMzgyMDkpCisrKyBKYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE4NCw5ICsyMTg0LDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgaW50IG5lZWRlZENvbnN0YW50cygpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIFdlIG1heSBuZWVkIDEgbW9yZSBjb25zdGFudCB0aGFuIHRoZSBjb3VudCBnaXZl
biBieSB0aGUgcGFyc2VyLAotICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgdmFyaW91cyB1
c2VzIG9mIGpzVW5kZWZpbmVkKCkuCi0gICAgICAgICAgICByZXR1cm4gbV9udW1Db25zdGFudHMg
KyAxOworICAgICAgICAgICAgLy8gV2UgbWF5IG5lZWQgMiBtb3JlIGNvbnN0YW50cyB0aGFuIHRo
ZSBjb3VudCBnaXZlbiBieSB0aGUgcGFyc2VyLAorICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiB0
aGUgdmFyaW91cyB1c2VzIG9mIGpzVW5kZWZpbmVkKCkgYW5kIGpzTnVsbCgpLgorICAgICAgICAg
ICAgcmV0dXJuIG1fbnVtQ29uc3RhbnRzICsgMjsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVk
OgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMzgyOTIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOC0xMS0xMCAgR2VvZmZyZXkgR2FyZW4g
IDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVXBkYXRlZCBhIHRlc3QgYWZ0ZXIgZml4aW5nIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE3NAorICAgICAgICBTaW1wbGlmaWVk
IG9wX2NhbGwgYnkgbml4aW5nIGl0cyByZXNwb25zaWJpbGl0eSBmb3IgbW92aW5nIHRoZSB2YWx1
ZSBvZgorICAgICAgICAidGhpcyIgaW50byB0aGUgZmlyc3QgYXJndW1lbnQgc2xvdC4KKworICAg
ICAgICAqIGZhc3QvanMvZ2xvYmFsLXJlY3Vyc2lvbi1vbi1mdWxsLXN0YWNrLWV4cGVjdGVkLnR4
dDogVGhpcyB0ZXN0IHBhc3NlcworICAgICAgICBhIGxpdHRsZSBkaWZmZXJlbnRseSBub3csIGJl
Y2F1c2UgdGhlIHJlZ2lzdGVyIGxheW91dCBoYXMgY2hhbmdlZC4KKwogMjAwOC0xMS0xMCAgQWRh
bSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVGVzdCBmb3IgQnVnIDIyMTYx
OiBBc3NlcnRpb24gZmFpbHVyZSBpbiBSZW5kZXJUaGVtZVdpbjo6c3lzdGVtQ29sb3IKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLXJlY3Vyc2lvbi1vbi1mdWxsLXN0YWNrLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1yZWN1cnNp
b24tb24tZnVsbC1zdGFjay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDM4MjA5KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9qcy9nbG9iYWwtcmVjdXJzaW9uLW9uLWZ1bGwtc3RhY2stZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6
IFJhbmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLgogVGhpcyB0ZXN0
cyBnbG9iYWwgY29kZSByZWN1cnNpb24gd2hlbiB0aGUgSlMgc3RhY2sgaXMgZnVsbC4KIFBBU1M6
IEVudGVyaW5nIGdsb2JhbCBjb2RlIHdpdGggYSBmdWxsIEpTIHN0YWNrIGRpZCBub3QgY3Jhc2gs
IGFuZCBkaWQgbm90IGFsbG93IGNvbnRpbnVlZCByZWN1cnNpb24uCg==
</data>
<flag name="review"
          id="11505"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>