<?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>164100</bug_id>
          
          <creation_ts>2016-10-27 18:08:19 -0700</creation_ts>
          <short_desc>Wasm starts a new stack whenever it adds a new block and has return types for blocks.</short_desc>
          <delta_ts>2016-11-03 13:58:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1245379</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-27 18:08:19 -0700</bug_when>
    <thetext>We do this wrong at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247459</commentid>
    <comment_count>1</comment_count>
      <attachid>293693</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-02 13:56:36 -0700</bug_when>
    <thetext>Created attachment 293693
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247672</commentid>
    <comment_count>2</comment_count>
      <attachid>293753</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 00:15:28 -0700</bug_when>
    <thetext>Created attachment 293753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247728</commentid>
    <comment_count>3</comment_count>
      <attachid>293753</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-03 09:47:22 -0700</bug_when>
    <thetext>Comment on attachment 293753
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        return value. Most of the control flow operators needed to be rewritten in able to

&quot;in able to&quot;

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:84
&gt; +        ControlData(Procedure&amp; proc, Type signature, BlockType type, BasicBlock* continuation, BasicBlock* special = nullptr)

What&apos;s special?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:571
&gt; +        entry.expressionStack.append(m_currentBlock-&gt;appendNew&lt;VariableValue&gt;(m_proc, B3::Get, Origin(), result));

This can fail, right? I think we should use all the `try` variants everywhere so we soft-fail and bail out.

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:54
&gt; +        ExpressionList expressionStack;

Rename this to avoid the comment above.

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:158
&gt; +        returnValues.append(returnValue);

Same on allocation.

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:314
&gt; +        m_controlStack.append({ WTFMove(m_expressionStack), m_context.addBlock(inlineSignature) });

ditto (and then the other ones below, I&apos;m lazy)

&gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:319
&gt; +    // Think of this as penance for the sin of bad error messages.

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247729</commentid>
    <comment_count>4</comment_count>
      <attachid>293753</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-03 09:48:37 -0700</bug_when>
    <thetext>Comment on attachment 293753
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:10
&gt;&gt; +        return value. Most of the control flow operators needed to be rewritten in able to
&gt; 
&gt; &quot;in able to&quot;

/rewritten in able to/rewritten to/.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:132
&gt; +        void makeBlock()
&gt; +        {
&gt; +            ASSERT(type() == BlockType::If);
&gt; +            blockType = BlockType::Block;
&gt; +            special = nullptr;

Why is this assert true?  Seems pretty random.  If the sole purpose of this function is to convert an If ControlData to a Block ControlData, I suggest renaming the function to &quot;convertIfToBlock&quot; or &quot;makeBlockFromIf&quot;.  That would make the assertion meaningful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247734</commentid>
    <comment_count>5</comment_count>
      <attachid>293753</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 10:09:09 -0700</bug_when>
    <thetext>Comment on attachment 293753
Patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:132
&gt;&gt; +            special = nullptr;
&gt; 
&gt; Why is this assert true?  Seems pretty random.  If the sole purpose of this function is to convert an If ControlData to a Block ControlData, I suggest renaming the function to &quot;convertIfToBlock&quot; or &quot;makeBlockFromIf&quot;.  That would make the assertion meaningful.

Sure, I&apos;ll change it to convertIfToBlock.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:571
&gt;&gt; +        entry.expressionStack.append(m_currentBlock-&gt;appendNew&lt;VariableValue&gt;(m_proc, B3::Get, Origin(), result));
&gt; 
&gt; This can fail, right? I think we should use all the `try` variants everywhere so we soft-fail and bail out.

Yeah, that&apos;s a fair point. I think we should do that in a follow up patch though.

&gt;&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:54
&gt;&gt; +        ExpressionList expressionStack;
&gt; 
&gt; Rename this to avoid the comment above.

Fair enough. I changed it to enclosedExpressionStack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247735</commentid>
    <comment_count>6</comment_count>
      <attachid>293771</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 10:10:45 -0700</bug_when>
    <thetext>Created attachment 293771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247773</commentid>
    <comment_count>7</comment_count>
      <attachid>293771</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-03 11:42:32 -0700</bug_when>
    <thetext>Comment on attachment 293771
Patch

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

r=me with a couple comments

&gt; Source/JavaScriptCore/testWasm.cpp:310
&gt; +        Vector&lt;uint8_t&gt; vector = {

It&apos;ll be nice once we can make tests not using this API.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:611
&gt; +    for (size_t i = 0; i &lt; result.size(); ++i)

This loop doesn&apos;t look right to me. I think you want to be going from top of stack downwards on both, for result.size() iterations.
Maybe something like:
(unsigned i = 0; i &lt; result.size(); i++) unify(result[result.size() - 1 - i], resultStack[resultStack.size() - 1 - i)

Can you add a test for this?

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:146
&gt; +    RELEASE_ASSERT_NOT_REACHED();

Why is this RELEASE_ASSERT_NOT_REACHED, if it is, maybe the above if (!parseUnreachableExpression(static_cast&lt;OpType&gt;(op))) should be an assertion.

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:476
&gt; +    if (m_expressionStack.size()) {

that makes sense.

&gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:319
&gt; +    // Think of this as penance for the sin of bad error messages.

lol</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247788</commentid>
    <comment_count>8</comment_count>
      <attachid>293771</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 12:10:47 -0700</bug_when>
    <thetext>Comment on attachment 293771
Patch

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

&gt;&gt; Source/JavaScriptCore/testWasm.cpp:310
&gt;&gt; +        Vector&lt;uint8_t&gt; vector = {
&gt; 
&gt; It&apos;ll be nice once we can make tests not using this API.

+1

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:611
&gt;&gt; +    for (size_t i = 0; i &lt; result.size(); ++i)
&gt; 
&gt; This loop doesn&apos;t look right to me. I think you want to be going from top of stack downwards on both, for result.size() iterations.
&gt; Maybe something like:
&gt; (unsigned i = 0; i &lt; result.size(); i++) unify(result[result.size() - 1 - i], resultStack[resultStack.size() - 1 - i)
&gt; 
&gt; Can you add a test for this?

Yeah, that&apos;s right. It&apos;s a little tricky to add a test for this since the only time this is wrong is when the sizes are not equal. The current version of the ML-proto I&apos;m using to generate tests does not support extra stack values. I&apos;ll file a bug for it though in the future.

&gt;&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:146
&gt;&gt; +    RELEASE_ASSERT_NOT_REACHED();
&gt; 
&gt; Why is this RELEASE_ASSERT_NOT_REACHED, if it is, maybe the above if (!parseUnreachableExpression(static_cast&lt;OpType&gt;(op))) should be an assertion.

We don&apos;t want the if to be an assert since it might fail in the validator. Also, every exit from the above loop is a return so unless there is a compiler bug this assert is trivially dead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247794</commentid>
    <comment_count>9</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 12:18:22 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 293771 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293771&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/testWasm.cpp:310
&gt; &gt;&gt; +        Vector&lt;uint8_t&gt; vector = {
&gt; &gt; 
&gt; &gt; It&apos;ll be nice once we can make tests not using this API.
&gt; 
&gt; +1
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:611
&gt; &gt;&gt; +    for (size_t i = 0; i &lt; result.size(); ++i)
&gt; &gt; 
&gt; &gt; This loop doesn&apos;t look right to me. I think you want to be going from top of stack downwards on both, for result.size() iterations.
&gt; &gt; Maybe something like:
&gt; &gt; (unsigned i = 0; i &lt; result.size(); i++) unify(result[result.size() - 1 - i], resultStack[resultStack.size() - 1 - i)
&gt; &gt; 
&gt; &gt; Can you add a test for this?
&gt; 
&gt; Yeah, that&apos;s right. It&apos;s a little tricky to add a test for this since the
&gt; only time this is wrong is when the sizes are not equal. The current version
&gt; of the ML-proto I&apos;m using to generate tests does not support extra stack
&gt; values. I&apos;ll file a bug for it though in the future.

I should note that updating the ml-proto would require changing all the opcode numbers in the existing tests. That would be an unfortunately large amount of work.

&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:146
&gt; &gt;&gt; +    RELEASE_ASSERT_NOT_REACHED();
&gt; &gt; 
&gt; &gt; Why is this RELEASE_ASSERT_NOT_REACHED, if it is, maybe the above if (!parseUnreachableExpression(static_cast&lt;OpType&gt;(op))) should be an assertion.
&gt; 
&gt; We don&apos;t want the if to be an assert since it might fail in the validator.
&gt; Also, every exit from the above loop is a return so unless there is a
&gt; compiler bug this assert is trivially dead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247798</commentid>
    <comment_count>10</comment_count>
      <attachid>293786</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 12:23:52 -0700</bug_when>
    <thetext>Created attachment 293786
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247826</commentid>
    <comment_count>11</comment_count>
      <attachid>293796</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 13:34:58 -0700</bug_when>
    <thetext>Created attachment 293796
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247842</commentid>
    <comment_count>12</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 13:58:54 -0700</bug_when>
    <thetext>Initially committed in r208341: &lt;http://trac.webkit.org/changeset/208341&gt;

Changelog was fixed in r208343: &lt;http://trac.webkit.org/changeset/208343&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293693</attachid>
            <date>2016-11-02 13:56:36 -0700</date>
            <delta_ts>2016-11-03 00:15:26 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-164100-20161102135237.patch</filename>
            <type>text/plain</type>
            <size>18186</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
NjMzZTdhZjU1NDJkYmFhYzYzZGZhOGEzNjg3YjExMTcxZGNmNWM5Li5jYjU5ZTEzZDk5NzI1YmFm
Y2E5NmZkOTg2YjYwMTBlNzRiZjc1N2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwyNiBAQAogMjAxNi0xMS0wMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KIAorICAgICAgICBXYXNtIHN0YXJ0cyBhIG5ldyBzdGFjayB3aGVuZXZlciBpdCBhZGRz
IGEgbmV3IGJsb2NrLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0MTAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB0ZXN0V2FzbS5jcHA6CisgICAgICAgIChydW5XYXNtVGVzdHMpOgorICAgICAgICAq
IHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9u
UGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OmFkZFJldHVybik6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNt
OjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cG9wRXhwcmVzc2lvblN0YWNrKToKKyAgICAgICAg
KiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpD
b250cm9sRGF0YTo6aGFzTm9uVm9pZFNpZ25hdHVyZSk6CisgICAgICAgIChKU0M6Oldhc206OmR1
bXBFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6ZHVtcCk6
CisKKzIwMTYtMTEtMDIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisK
ICAgICAgICAgV2Ugc2hvdWxkIG5vdCBwb3AgZnJvbSBhbiBlbXB0eSBzdGFjayBpbiB0aGUgV2Fz
bSBmdW5jdGlvbiBwYXJzZXIuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjQyNzUKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RXYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAKaW5kZXggZDFi
ODhkOGQ1NzhmMzdjYTdiNTNkMzU2MzJkOGVhNjQ2N2U3YzNkMy4uMWVlYTBiYWMzYjkwMDIwNjZl
YzRhMTI2ZTM3ZjkxODFkNmI1YTgwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RXYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwCkBA
IC0yOTMsNiArMjkzLDg3IEBAIHN0YXRpYyB2b2lkIGNoZWNrUGxhbihQbGFuJiBwbGFuLCB1bnNp
Z25lZCBleHBlY3RlZE51bWJlck9mRnVuY3Rpb25zKQogLy8gRm9yIG5vdyB3ZSBpbmxpbmUgdGhl
IHRlc3QgZmlsZXMuCiBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogeworICAgIHsKKyAgICAg
ICAgLy8gR2VuZXJhdGVkIGZyb206CisgICAgICAgIC8vICAgIChtb2R1bGUKKyAgICAgICAgLy8g
ICAgIChmdW5jIChleHBvcnQgImR1bWItbGVzcy10aGFuIikgKHBhcmFtICR4IGkzMikgKHBhcmFt
ICR5IGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8vICAgICAgKGxvb3AgJGxvb3AgaTMyCisg
ICAgICAgIC8vICAgICAgIChpMzIuZXEgKGdldF9sb2NhbCAkeCkgKGdldF9sb2NhbCAkeSkpCisg
ICAgICAgIC8vICAgICAgIChpZiBpMzIKKyAgICAgICAgLy8gICAgICAgICh0aGVuIChyZXR1cm4g
KGkzMi5jb25zdCAwKSkpCisgICAgICAgIC8vICAgICAgICAoZWxzZQorICAgICAgICAvLyAgICAg
ICAgIChnZXRfbG9jYWwgJHgpCisgICAgICAgIC8vICAgICAgICAgKHNldF9sb2NhbCAkeCAoaTMy
LnN1YiAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEpKSkKKyAgICAgICAgLy8gICAgICAgICAo
aTMyLmNvbnN0IDApCisgICAgICAgIC8vICAgICAgICAgKGkzMi5uZSkKKyAgICAgICAgLy8gICAg
ICAgICAoYnJfaWYgJGxvb3ApCisgICAgICAgIC8vICAgICAgICAgKGkzMi5jb25zdCAxKQorICAg
ICAgICAvLyAgICAgICAgICkKKyAgICAgICAgLy8gICAgICAgICkKKyAgICAgICAgLy8gICAgICAg
KQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4
MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAw
eDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDky
LCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwZSwgMHg2NCwg
MHg3NSwgMHg2ZCwgMHg2MiwgMHgyZCwgMHg2YywgMHg2NSwgMHg3MywgMHg3MywgMHgyZCwgMHg3
NCwKKyAgICAgICAgICAgIDB4NjgsIDB4NjEsIDB4NmUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4YTcs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4YTEsIDB4ODAsIDB4ODAsIDB4ODAsCisg
ICAgICAgICAgICAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweDE0LCAweDAwLCAweDE0LCAweDAx
LCAweDRkLCAweDAzLCAweDAxLCAweDEwLCAweDAwLCAweDA5LCAweDA0LCAweDE0LAorICAgICAg
ICAgICAgMHgwMCwgMHgxNCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MSwgMHgxNSwgMHgwMCwgMHgx
MCwgMHgwMCwgMHg0ZSwgMHgwNywgMHgwMSwgMHgxMCwgMHgwMSwgMHgwZiwKKyAgICAgICAgICAg
IDB4MGYsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3Ip
OworICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBi
b3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwg
Ym94KDIpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSks
IGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
MCksIGJveCg2KSB9KSwgMCk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQg
ZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9y
dCAiZHVtYi1sZXNzLXRoYW4iKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVzdWx0
IGkzMikKKyAgICAgICAgLy8gICAgICAobG9vcAorICAgICAgICAvLyAgICAgICAoaWYgKGkzMi5l
cSAoZ2V0X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkKKyAgICAgICAgLy8gICAgICAgICh0aGVu
IChyZXR1cm4gKGkzMi5jb25zdCAwKSkpCisgICAgICAgIC8vICAgICAgICAoZWxzZSAoaWYgKGkz
Mi5lcSAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDApKQorICAgICAgICAvLyAgICAgICAgICAg
ICAgIChyZXR1cm4gKGkzMi5jb25zdCAxKSkpKSkKKyAgICAgICAgLy8gICAgICAgKHNldF9sb2Nh
bCAkeCAoaTMyLnN1YiAoZ2V0X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEpKSkKKyAgICAgICAgLy8g
ICAgICAgKGJyIDApCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICApCisgICAg
ICAgIC8vICAgICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAg
ICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAx
LCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAg
MHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MiwgMHg4MCwKKyAgICAgICAgICAgIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQsIDB4
NmMsIDB4NjUsIDB4NzMsIDB4NzMsIDB4MmQsIDB4NzQsCisgICAgICAgICAgICAweDY4LCAweDYx
LCAweDZlLCAweDAwLCAweDAwLCAweDBhLCAweGFjLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAw
eDAxLCAweGE2LCAweDgwLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgw
MiwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0ZCwgMHgwMywgMHgwMCwgMHgxMCwg
MHgwMCwgMHgwOSwgMHgwNCwgMHgxNCwKKyAgICAgICAgICAgIDB4MDAsIDB4MTAsIDB4MDAsIDB4
NGQsIDB4MDMsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDksIDB4MGYsIDB4MGYsIDB4MTQsIDB4MDAs
IDB4MTAsIDB4MDEsIDB4NDEsCisgICAgICAgICAgICAweDE1LCAweDAwLCAweDA2LCAweDAwLCAw
eDBmLCAweDAwLCAweDBmCisgICAgICAgIH07CisKKyAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVj
dG9yKTsKKyAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOworCisgICAgICAgIC8vIFRlc3QgdGhp
cyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDApOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
MSksIGJveCgyKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwgMSk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMDApLCBib3goNikgfSksIDApOworICAgIH0KIAogICAgIHsKICAgICAgICAgLy8gR2VuZXJh
dGVkIGZyb206CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAKaW5kZXggMWRlNmUyNzc0NDJjMTNjYWU5OTAxOWUxMGFjNWZlNjYyYTEyMGNjMS4u
ZWFhNDIwODg2MmMwMGI4N2QxNWFjYTlkMzE0MDFjODE0MTgxNmE0NiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMTU1LDYgKzE1
NSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBCbG9ja1R5cGU6Okxvb3A7CiAgICAg
ICAgIH0KIAorICAgICAgICBib29sIGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7IHJldHVy
biByZXN1bHQuc2l6ZSgpOyB9CisKICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2tGb3JC
cmFuY2goUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAodHlwZSgp
ID09IEJsb2NrVHlwZTo6TG9vcCkKQEAgLTIxMCw3ICsyMTIsNyBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGlzQ29udGludWF0aW9uUmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKLSAgICB2b2lkIGR1
bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPEZ1
bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ss
IGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwogCiAgICAgdm9pZCBzZXRF
cnJvck1lc3NhZ2UoU3RyaW5nJiYpIHsgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7IH0KIApA
QCAtNjQzLDE3ICs2NDUsMjkgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhC
bG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIFJlc3UKICAgICAgICAgdW5p
ZnkocmVzdWx0W2ldLCByZXN1bHRTdGFja1tpXSk7CiB9CiAKLXZvaWQgQjNJUkdlbmVyYXRvcjo6
ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbFR5cGU+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJl
c3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCitzdGF0aWMgdm9pZCBkdW1wRXhwcmVzc2lvblN0
YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEIzSVJHZW5lcmF0b3I6OkV4cHJl
c3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCit7CisgICAgZGF0YUxvZ0xuKGNvbW1hLCAiRXhw
cmVzc2lvblN0YWNrOiIpOworICAgIGZvciAoY29uc3QgYXV0byYgZXhwcmVzc2lvbiA6IGV4cHJl
c3Npb25TdGFjaykKKyAgICAgICAgZGF0YUxvZ0xuKGNvbW1hLCAqZXhwcmVzc2lvbik7Cit9CisK
K3ZvaWQgQjNJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8RnVuY3Rpb25QYXJzZXI8QjNJ
UkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjaykKIHsKICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgR3Jh
cGg6Iik7CiAgICAgZGF0YUxvZyhtX3Byb2MpOwogICAgIGRhdGFMb2dMbigiV2l0aCBjdXJyZW50
IGJsb2NrOiIsICptX2N1cnJlbnRCbG9jayk7CiAgICAgZGF0YUxvZ0xuKCJDb250cm9sIHN0YWNr
OiIpOwotICAgIGZvciAoY29uc3QgQ29udHJvbFR5cGUmIGRhdGEgOiBjb250cm9sU3RhY2spCi0g
ICAgICAgIGRhdGFMb2dMbigiICAiLCBkYXRhKTsKLSAgICBkYXRhTG9nTG4oIkV4cHJlc3Npb25T
dGFjazoiKTsKLSAgICBmb3IgKGNvbnN0IEV4cHJlc3Npb25UeXBlJiBleHByZXNzaW9uIDogZXhw
cmVzc2lvblN0YWNrKQotICAgICAgICBkYXRhTG9nTG4oIiAgIiwgKmV4cHJlc3Npb24pOworICAg
IGZvciAoYXV0byYgZGF0YSA6IGNvbnRyb2xTdGFjaykgeworICAgICAgICBkYXRhTG9nTG4oIiAg
IiwgZGF0YS5jb250cm9sRGF0YSk7CisgICAgICAgIGlmIChkYXRhLmV4cHJlc3Npb25TdGFjay5z
aXplKCkpIHsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiICAgICIsICIgIHdpdGgg
Iik7CisgICAgICAgICAgICBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbW1hLCBkYXRhLmV4cHJlc3Np
b25TdGFjayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDb21tYVByaW50ZXIgY29tbWEoIiAg
IiwgIiIpOworICAgIGR1bXBFeHByZXNzaW9uU3RhY2soY29tbWEsIGV4cHJlc3Npb25TdGFjayk7
CiAgICAgZGF0YUxvZ0xuKCJcbiIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCmluZGV4IDQyMzg2OTY1NjRiMTYyM2QwYmE2OWMwMTc5
NzNkMGQwYzdkODc2MmYuLmU4ZmI5YThjZmQzOTBhY2MxYzJhNzVhNTczZmYzY2U4MzdkY2FkNjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5o
CkBAIC00MywyNCArNDMsMzIgQEAgY2xhc3MgRnVuY3Rpb25QYXJzZXIgOiBwdWJsaWMgUGFyc2Vy
IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkV4cHJlc3Npb25UeXBl
IEV4cHJlc3Npb25UeXBlOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGV4dDo6Q29udHJvbFR5
cGUgQ29udHJvbFR5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9u
TGlzdCBFeHByZXNzaW9uTGlzdDsKIAogICAgIEZ1bmN0aW9uUGFyc2VyKENvbnRleHQmLCBjb25z
dCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNp
Z25hdHVyZSosIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVuY3Rpb25zKTsK
IAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CiAKKyAgICBzdHJ1Y3QgQ29u
dHJvbEVudHJ5IHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgZXhwcmVzc2lvbiBzdGFjayBmb3Ig
dGhlIGVuY2xvc2luZyBzY29wZS4KKyAgICAgICAgRXhwcmVzc2lvbkxpc3QgZXhwcmVzc2lvblN0
YWNrOworICAgICAgICBDb250cm9sVHlwZSBjb250cm9sRGF0YTsKKyAgICB9OworCiBwcml2YXRl
OgotICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCB2ZXJib3NlID0gdHJ1ZTsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlQmxvY2soKTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUV4cHJlc3Npb24o
T3BUeXBlKTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVucmVhY2hhYmxlRXhw
cmVzc2lvbihPcFR5cGUpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybigp
OwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5Q29udHJvbChWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiwgdW5zaWduZWQgbGV2ZWwpOwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcG9wRXhwcmVzc2lvblN0YWNrKEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogCiAgICAgQ29u
dGV4dCYgbV9jb250ZXh0OwotICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gbV9leHByZXNz
aW9uU3RhY2s7Ci0gICAgVmVjdG9yPENvbnRyb2xUeXBlPiBtX2NvbnRyb2xTdGFjazsKKyAgICBF
eHByZXNzaW9uTGlzdCBtX2V4cHJlc3Npb25TdGFjazsKKyAgICBWZWN0b3I8Q29udHJvbEVudHJ5
PiBtX2NvbnRyb2xTdGFjazsKICAgICBjb25zdCBTaWduYXR1cmUqIG1fc2lnbmF0dXJlOwogICAg
IGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgbV9mdW5jdGlvbnM7CiAgICAgdW5z
aWduZWQgbV91bnJlYWNoYWJsZUJsb2NrcyB7IDAgfTsKQEAgLTEyMCw3ICsxMjgsNyBAQCBib29s
IEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUJsb2NrKCkKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChvcCA9PSBPcFR5cGU6OkVuZCAmJiAhbV9jb250cm9sU3RhY2suc2l6ZSgpKQotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gYWRkUmV0dXJuKCk7CiAKICAgICAg
ICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MpIHsKICAgICAgICAgICAgIGlmICghcGFyc2VVbnJl
YWNoYWJsZUV4cHJlc3Npb24oc3RhdGljX2Nhc3Q8T3BUeXBlPihvcCkpKSB7CkBAIC0xMzYsOSAr
MTQ0LDI0IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQmxvY2soKQogCiAg
ICAgfQogCi0gICAgLy8gSSdtIG5vdCBzdXJlIGlmIHdlIHNob3VsZCBjaGVjayB0aGUgZXhwcmVz
c2lvbiBzdGFjayBoZXJlLi4uCi0gICAgcmV0dXJuIHRydWU7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK2Jvb2wgRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OmFkZFJldHVybigpCit7CisgICAgRXhwcmVzc2lvbkxpc3Qg
cmV0dXJuVmFsdWVzOworICAgIGlmIChtX3NpZ25hdHVyZS0+cmV0dXJuVHlwZSAhPSBWb2lkKSB7
CisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJldHVyblZhbHVlOworICAgICAgICBpZiAoIXBvcEV4
cHJlc3Npb25TdGFjayhyZXR1cm5WYWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVyblZhbHVlcy5hcHBlbmQocmV0dXJuVmFsdWUpOworICAgIH0KKworICAgIG1f
dW5yZWFjaGFibGVCbG9ja3MgPSAxOworICAgIHJldHVybiBtX2NvbnRleHQuYWRkUmV0dXJuKHJl
dHVyblZhbHVlcyk7CiB9CisKICNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3ApIGNh
c2UgbmFtZToKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KQEAgLTI4OCw3ICszMTEsOCBA
QCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9w
KQogICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKGlubGluZVNpZ25hdHVyZSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbV9jb250cm9sU3RhY2suYXBwZW5kKG1fY29u
dGV4dC5hZGRCbG9jayhpbmxpbmVTaWduYXR1cmUpKTsKKyAgICAgICAgbV9jb250cm9sU3RhY2su
YXBwZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIG1fY29udGV4dC5hZGRCbG9jayhp
bmxpbmVTaWduYXR1cmUpIH0pOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IEV4cHJlc3Np
b25MaXN0KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjk3LDcgKzMyMSw4
IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUg
b3ApCiAgICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUoaW5saW5lU2lnbmF0dXJlKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBlbmQobV9j
b250ZXh0LmFkZExvb3AoaW5saW5lU2lnbmF0dXJlKSk7CisgICAgICAgIG1fY29udHJvbFN0YWNr
LmFwcGVuZCh7IFdURk1vdmUobV9leHByZXNzaW9uU3RhY2spLCBtX2NvbnRleHQuYWRkTG9vcChp
bmxpbmVTaWduYXR1cmUpIH0pOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IEV4cHJlc3Np
b25MaXN0KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzE0LDcgKzMzOSw4
IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUg
b3ApCiAgICAgICAgIGlmICghbV9jb250ZXh0LmFkZElmKGNvbmRpdGlvbiwgaW5saW5lU2lnbmF0
dXJlLCBjb250cm9sKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX2Nv
bnRyb2xTdGFjay5hcHBlbmQoY29udHJvbCk7CisgICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVu
ZCh7IFdURk1vdmUobV9leHByZXNzaW9uU3RhY2spLCBjb250cm9sIH0pOworICAgICAgICBtX2V4
cHJlc3Npb25TdGFjayA9IEV4cHJlc3Npb25MaXN0KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtMzIzLDcgKzM0OSwxMSBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQogICAgICAgICAgICAgbV9jb250ZXh0LnNldEVy
cm9yTWVzc2FnZSgiQXR0ZW1wdGVkIHRvIHVzZSBlbHNlIGJsb2NrIGF0IHRoZSB0b3AtbGV2ZWwg
b2YgYSBmdW5jdGlvbiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkRWxzZShtX2NvbnRyb2xTdGFjay5sYXN0KCksIG1f
ZXhwcmVzc2lvblN0YWNrKTsKKworICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRFbHNlKG1fY29u
dHJvbFN0YWNrLmxhc3QoKS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJpbmsobV9l
eHByZXNzaW9uU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAg
ICAgY2FzZSBPcFR5cGU6OkJyOgpAQCAtMzM5LDI2ICszNjksMjEgQEAgYm9vbCBGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKIAotICAgICAgICBDb250cm9s
VHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0
YXJnZXRdOworICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29u
dHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOwogCiAgICAgICAgIHJl
dHVybiBtX2NvbnRleHQuYWRkQnJhbmNoKGRhdGEsIGNvbmRpdGlvbiwgbV9leHByZXNzaW9uU3Rh
Y2spOwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpSZXR1cm46IHsKLSAgICAgICAgVmVjdG9y
PEV4cHJlc3Npb25UeXBlLCAxPiByZXR1cm5WYWx1ZXM7Ci0gICAgICAgIGlmIChtX3NpZ25hdHVy
ZS0+cmV0dXJuVHlwZSAhPSBWb2lkKSB7Ci0gICAgICAgICAgICBFeHByZXNzaW9uVHlwZSByZXR1
cm5WYWx1ZTsKLSAgICAgICAgICAgIGlmICghcG9wRXhwcmVzc2lvblN0YWNrKHJldHVyblZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVyblZhbHVlcy5hcHBlbmQocmV0dXJuVmFsdWUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7Ci0gICAgICAgIHJldHVybiBt
X2NvbnRleHQuYWRkUmV0dXJuKHJldHVyblZhbHVlcyk7CisgICAgICAgIHJldHVybiBhZGRSZXR1
cm4oKTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6RW5kOiB7Ci0gICAgICAgIENvbnRyb2xU
eXBlIGRhdGEgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOwotICAgICAgICByZXR1cm4gbV9j
b250ZXh0LmVuZEJsb2NrKGRhdGEsIG1fZXhwcmVzc2lvblN0YWNrKTsKKyAgICAgICAgQ29udHJv
bEVudHJ5IGRhdGEgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICBpZiAoIW1f
Y29udGV4dC5lbmRCbG9jayhkYXRhLmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAo
ZGF0YS5leHByZXNzaW9uU3RhY2spOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAg
ICBjYXNlIE9wVHlwZTo6VW5yZWFjaGFibGU6CkBAIC0zODYsMTcgKzQxMSwyMCBAQCBib29sIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUg
b3ApCiAgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3RhY2su
bGFzdCgpOwotICAgICAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZik7Cisg
ICAgICAgIENvbnRyb2xFbnRyeSYgZGF0YSA9IG1fY29udHJvbFN0YWNrLmxhc3QoKTsKICAgICAg
ICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDA7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRk
RWxzZShkYXRhLCBtX2V4cHJlc3Npb25TdGFjayk7CisgICAgICAgIGlmICghbV9jb250ZXh0LmFk
ZEVsc2UoZGF0YS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJpbmsobV9leHByZXNz
aW9uU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgY2Fz
ZSBPcFR5cGU6OkVuZDogewogICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcyA9PSAxKSB7
Ci0gICAgICAgICAgICBDb250cm9sVHlwZSBkYXRhID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3Qo
KTsKLSAgICAgICAgICAgIGlmICghbV9jb250ZXh0LmlzQ29udGludWF0aW9uUmVhY2hhYmxlKGRh
dGEpKQorICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBtX2NvbnRyb2xTdGFjay50YWtl
TGFzdCgpOworICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuaXNDb250aW51YXRpb25SZWFjaGFi
bGUoZGF0YS5jb250cm9sRGF0YSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGRhdGEuZXhwcmVzc2lvblN0YWNrKTsKICAg
ICAgICAgfQogICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzLS07CiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtNDM5LDEyICs0NjcsMTIgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oT3BUeXBlIG9wKQogdGVtcGxhdGU8dHlwZW5hbWUg
Q29udGV4dD4KIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBvcEV4cHJlc3Npb25TdGFj
ayhFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQogewotICAgIGlmICghbV9leHByZXNzaW9uU3RhY2su
c2l6ZSgpKSB7CisgICAgaWYgKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkgewogICAgICAgICBy
ZXN1bHQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICBtX2NvbnRleHQuc2V0RXJyb3JNZXNzYWdlKCJBdHRlbXB0ZWQgdG8g
dXNlIGFuIHN0YWNrIHZhbHVlIHdoZW4gbm9uZSBleGlzdGVkIik7CisgICAgbV9jb250ZXh0LnNl
dEVycm9yTWVzc2FnZSgiQXR0ZW1wdGVkIHRvIHVzZSBhIHN0YWNrIHZhbHVlIHdoZW4gbm9uZSBl
eGlzdGVkIik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVZhbGlkYXRlLmNwcAppbmRleCBiODA5Y2RkMDY4YjE4MWExYmZlOTY4ZDhhMDk4
ZTE1ZjE4OTlkZTBmLi5hYTg0ODlmNzRkNWEzYmI2ODg4YzkxNDkwMTU2MTgxNDFlMmVkZTg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKQEAgLTMwLDYg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTYyLDYgKzYzLDggQEAgcHVi
bGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lk
U2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUgIT0gVm9pZDsgfQorCiAgICAg
ICAgIEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja1R5cGU7IH0KICAgICAg
ICAgVHlwZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQogICAgIHBy
aXZhdGU6CkBAIC0xMDIsNyArMTA1LDcgQEAgcHVibGljOgogICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5kZXgsIGNvbnN0IEZ1bmN0aW9uSW5mb3Jt
YXRpb24mLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBpc0NvbnRpbnVhdGlvblJl
YWNoYWJsZShDb250cm9sRGF0YSYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgZHVtcChj
b25zdCBWZWN0b3I8Q29udHJvbFR5cGU+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25M
aXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8RnVuY3Rp
b25QYXJzZXI8VmFsaWRhdGU+OjpDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4
cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwogCiAgICAgdm9pZCBzZXRFcnJvck1lc3Nh
Z2UoU3RyaW5nJiYgbWVzc2FnZSkgeyBBU1NFUlQobV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpOyBt
X2Vycm9yTWVzc2FnZSA9IFdURk1vdmUobWVzc2FnZSk7IH0KICAgICBTdHJpbmcgZXJyb3JNZXNz
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KQEAgLTI4OCw5ICsyOTEsMjcg
QEAgYm9vbCBWYWxpZGF0ZTo6dW5pZnkoY29uc3QgRXhwcmVzc2lvbkxpc3QmIHZhbHVlcywgY29u
c3QgQ29udHJvbFR5cGUmIGJsb2NrKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBWYWxp
ZGF0ZTo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbFR5cGU+JiwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmKQorc3RhdGljIHZvaWQgZHVtcEV4cHJlc3Npb25TdGFjayhjb25zdCBDb21tYVByaW50ZXIm
IGNvbW1hLCBjb25zdCBWYWxpZGF0ZTo6RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykK
K3sKKyAgICBkYXRhTG9nTG4oY29tbWEsICJFeHByZXNzaW9uU3RhY2s6Iik7CisgICAgZm9yIChj
b25zdCBhdXRvJiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKQorICAgICAgICBkYXRhTG9n
TG4oY29tbWEsIHRvU3RyaW5nKGV4cHJlc3Npb24pKTsKK30KKwordm9pZCBWYWxpZGF0ZTo6ZHVt
cChjb25zdCBWZWN0b3I8RnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+OjpDb250cm9sRW50cnk+JiBj
b250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCiB7Ci0g
ICAgZGF0YUxvZ0xuKCJWYWxpZGF0aW5nIik7CisgICAgZGF0YUxvZ0xuKCJDb250cm9sIHN0YWNr
OiIpOworICAgIGZvciAoYXV0byYgZGF0YSA6IGNvbnRyb2xTdGFjaykgeworICAgICAgICBkYXRh
TG9nTG4oIiAgIiwgZGF0YS5jb250cm9sRGF0YSk7CisgICAgICAgIGlmIChkYXRhLmV4cHJlc3Np
b25TdGFjay5zaXplKCkpIHsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiICAgICIs
ICIgIHdpdGggIik7CisgICAgICAgICAgICBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbW1hLCBkYXRh
LmV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDb21tYVByaW50ZXIg
Y29tbWEoIiAgIiwgIiIpOworICAgIGR1bXBFeHByZXNzaW9uU3RhY2soY29tbWEsIGV4cHJlc3Np
b25TdGFjayk7CisgICAgZGF0YUxvZ0xuKCJcbiIpOwogfQogCiBTdHJpbmcgdmFsaWRhdGVGdW5j
dGlvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBsZW5ndGgsIGNvbnN0IFNpZ25hdHVy
ZSogc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9u
cykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293753</attachid>
            <date>2016-11-03 00:15:28 -0700</date>
            <delta_ts>2016-11-03 10:10:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164100-20161103001128.patch</filename>
            <type>text/plain</type>
            <size>33462</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
NjMzZTdhZjU1NDJkYmFhYzYzZGZhOGEzNjg3YjExMTcxZGNmNWM5Li5mMjdlMjk2YWVjYTFkNDFk
NDU5NTI3ZDI1YTRlMTNiYzBmOTJjNDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw0NSBAQAogMjAxNi0xMS0wMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KIAorICAgICAgICBXYXNtIHN0YXJ0cyBhIG5ldyBzdGFjayB3aGVuZXZlciBpdCBhZGRz
IGEgbmV3IGJsb2NrIGFuZCBoYXMgcmV0dXJuIHR5cGVzIGZvciBibG9ja3MuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG92ZXJoYXVs
cyBtdWNoIG9mIHRoZSBXYXNtIGZ1bmN0aW9uIHBhcnNlciwgdmFsaWRhdG9yLCBhbmQgQjMgSVIg
Z2VuZXJhdG9yCisgICAgICAgIHRvIHdvcmsgd2l0aCBibG9jayByZXR1cm4gdHlwZXMuIEluIFdh
c20sIGJsb2NrcyBjYW4gYWN0IGFzIGV4cHJlc3Npb25zIGFuZCBoYXZlIGEKKyAgICAgICAgcmV0
dXJuIHZhbHVlLiBNb3N0IG9mIHRoZSBjb250cm9sIGZsb3cgb3BlcmF0b3JzIG5lZWRlZCB0byBi
ZSByZXdyaXR0ZW4gaW4gYWJsZSB0bworICAgICAgICBzdXBwb3J0IHRoaXMgZmVhdHVyZS4gVG8g
ZW5hYmxlIHJldHVybiB0eXBlcyB0aGUgZnVuY3Rpb24gcGFyc2VyIG5lZWRlZCB0byBiZSBhYmxl
CisgICAgICAgIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGV4cHJlc3Npb24gc3RhY2sgZnJvbSBw
cmV2aW91cyBibG9ja3MsIHdoaWNoIGlzIGRvbmUgdmlhIHRoZQorICAgICAgICBjb250cm9sIHN0
YWNrLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBsYXp5IGNvbnRpbnVh
dGlvbiBibG9jayBzeXN0ZW0gYWRkZWQgcHJldmlvdXNseS4gSXQncworICAgICAgICBub3QgY2xl
YXIgaWYgdGhlcmUgd291bGQgYmUgYW55IHBlcmZvcm1hbmNlIHdpbiBmcm9tIHN1Y2ggYSBzeXN0
ZW0uIFRoZXJlIGFyZSBsaWtlbHkKKyAgICAgICAgbWFueSBvdGhlciB0aGluZ3Mgd2l0aCBvcmRl
cnMgb2YgbWFnbml0dWRlIG1vcmUgaW1wYWN0IG9uIEIzIElSIGdlbmVyYXRpb24uIFRoZQorICAg
ICAgICBjb21wbGV4aXR5IGNvc3Qgb2Ygc3VjaCBhIHN5c3RlbSBpcyBub3Qgd29ydGggdGhlIGVm
Zm9ydCB3aXRob3V0IHN1ZmZpY2llbnQgZXZpZGVuY2UKKyAgICAgICAgb3RoZXJ3aXNlLgorCisg
ICAgICAgICogdGVzdFdhc20uY3BwOgorICAgICAgICAocnVuV2FzbVRlc3RzKToKKyAgICAgICAg
KiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlv
blBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBvcEV4cHJlc3Npb25TdGFjayk6CisgICAgICAg
ICogd2FzbS9XYXNtVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6
Q29udHJvbERhdGE6Omhhc05vblZvaWRTaWduYXR1cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpW
YWxpZGF0ZTo6YWRkRWxzZSk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRFbHNl
VG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRCcmFuY2gp
OgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6ZW5kQmxvY2spOgorICAgICAgICAoSlND
OjpXYXNtOjpWYWxpZGF0ZTo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldh
c206OlZhbGlkYXRlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6dmFsaWRhdGVGdW5jdGlv
bik6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjppc0NvbnRpbnVhdGlvblJlYWNoYWJs
ZSk6IERlbGV0ZWQuCisKKzIwMTYtMTEtMDIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBh
cHBsZS5jb20+CisKICAgICAgICAgV2Ugc2hvdWxkIG5vdCBwb3AgZnJvbSBhbiBlbXB0eSBzdGFj
ayBpbiB0aGUgV2FzbSBmdW5jdGlvbiBwYXJzZXIuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQyNzUKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RXYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5j
cHAKaW5kZXggZDFiODhkOGQ1NzhmMzdjYTdiNTNkMzU2MzJkOGVhNjQ2N2U3YzNkMy4uNmUzZjVk
MmQwYjljMmFjYWZkNDEzMTY3ZDdlZGI0ODkxYTI1ZDkyYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dFdhc20uY3BwCkBAIC0yOTMsNiArMjkzLDEwNyBAQCBzdGF0aWMgdm9pZCBjaGVja1BsYW4oUGxh
biYgcGxhbiwgdW5zaWduZWQgZXhwZWN0ZWROdW1iZXJPZkZ1bmN0aW9ucykKIC8vIEZvciBub3cg
d2UgaW5saW5lIHRoZSB0ZXN0IGZpbGVzLgogc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIHsK
KyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxl
CisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJpZi10aGVuLWJvdGgtZmFsbHRocm91Z2gi
KSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAgLy8g
ICAgICAoYmxvY2sgJGJsb2NrIGkzMgorICAgICAgICAvLyAgICAgICAoaWYgaTMyIChpMzIuZXEg
KGdldF9sb2NhbCAkeCkgKGkzMi5jb25zdCAwKSkKKyAgICAgICAgLy8gICAgICAgICh0aGVuIChp
MzIuY29uc3QgMSkpCisgICAgICAgIC8vICAgICAgICAoZWxzZQorICAgICAgICAvLyAgICAgICAg
IChpMzIuY29uc3QgMikKKyAgICAgICAgLy8gICAgICAgICAoYnIgJGJsb2NrKSkKKyAgICAgICAg
Ly8gICAgICAgICkKKyAgICAgICAgLy8gICAgICAgKQorICAgICAgICAvLyAgICAgICkKKyAgICAg
ICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAg
ICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEs
IDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAw
eDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDljLCAweDgwLAorICAgICAgICAgICAgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHgxOCwgMHg2OSwgMHg2NiwgMHgyZCwgMHg3NCwgMHg2OCwgMHg2
NSwgMHg2ZSwgMHgyZCwgMHg2MiwgMHg2ZiwgMHg3NCwKKyAgICAgICAgICAgIDB4NjgsIDB4MmQs
IDB4NjYsIDB4NjEsIDB4NmMsIDB4NmMsIDB4NzQsIDB4NjgsIDB4NzIsIDB4NmYsIDB4NzUsIDB4
NjcsIDB4NjgsIDB4MDAsIDB4MDAsIDB4MGEsCisgICAgICAgICAgICAweDlhLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDk0LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAw
eDAxLCAweDAxLCAweDE0LCAweDAwLAorICAgICAgICAgICAgMHgxMCwgMHgwMCwgMHg0ZCwgMHgw
MywgMHgwMSwgMHgxMCwgMHgwMSwgMHgwNCwgMHgxMCwgMHgwMiwgMHgwNiwgMHgwMSwgMHgwZiwg
MHgwZiwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7
CisgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwKSwgYm94ZigzMikgfSksIDEpKTsKKyAg
ICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94ZigxKSwgYm94ZigzMikgfSksIDIpKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAg
IC8vICAgICAoZnVuYyAoZXhwb3J0ICJpZi10aGVuLWJvdGgtZmFsbHRocm91Z2giKSAocGFyYW0g
JHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAgLy8gICAgICAoaWYg
aTMyIChpMzIuZXEgKGdldF9sb2NhbCAkeCkgKGkzMi5jb25zdCAwKSkKKyAgICAgICAgLy8gICAg
ICAgKHRoZW4gKGkzMi5jb25zdCAxKSkKKyAgICAgICAgLy8gICAgICAgKGVsc2UgKGkzMi5jb25z
dCAyKSkKKyAgICAgICAgLy8gICAgICAgKQorICAgICAgICAvLyAgICAgICkKKyAgICAgICAgLy8g
ICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4
MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAyLCAw
eDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDAwLCAweDA3LCAweDljLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgxOCwgMHg2OSwgMHg2NiwgMHgyZCwgMHg3NCwgMHg2OCwgMHg2NSwgMHg2
ZSwgMHgyZCwgMHg2MiwgMHg2ZiwgMHg3NCwKKyAgICAgICAgICAgIDB4NjgsIDB4MmQsIDB4NjYs
IDB4NjEsIDB4NmMsIDB4NmMsIDB4NzQsIDB4NjgsIDB4NzIsIDB4NmYsIDB4NzUsIDB4NjcsIDB4
NjgsIDB4MDAsIDB4MDAsIDB4MGEsCisgICAgICAgICAgICAweDk1LCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAw
eDAwLCAweDEwLCAweDAwLAorICAgICAgICAgICAgMHg0ZCwgMHgwMywgMHgwMSwgMHgxMCwgMHgw
MSwgMHgwNCwgMHgxMCwgMHgwMiwgMHgwZiwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBs
YW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKKworICAg
ICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0soaXNJZGVudGlj
YWwoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwKSwg
Ym94ZigzMikgfSksIDEpKTsKKyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigxKSwgYm94ZigzMikgfSksIDIp
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgorICAgICAgICAv
LyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJkdW1iLWxlc3MtdGhh
biIpIChwYXJhbSAkeCBpMzIpIChwYXJhbSAkeSBpMzIpIChyZXN1bHQgaTMyKQorICAgICAgICAv
LyAgICAgIChsb29wICRsb29wIGkzMgorICAgICAgICAvLyAgICAgICAoaTMyLmVxIChnZXRfbG9j
YWwgJHgpIChnZXRfbG9jYWwgJHkpKQorICAgICAgICAvLyAgICAgICAoaWYgaTMyCisgICAgICAg
IC8vICAgICAgICAodGhlbiAocmV0dXJuIChpMzIuY29uc3QgMCkpKQorICAgICAgICAvLyAgICAg
ICAgKGVsc2UKKyAgICAgICAgLy8gICAgICAgICAoZ2V0X2xvY2FsICR4KQorICAgICAgICAvLyAg
ICAgICAgIChzZXRfbG9jYWwgJHggKGkzMi5zdWIgKGdldF9sb2NhbCAkeCkgKGkzMi5jb25zdCAx
KSkpCisgICAgICAgIC8vICAgICAgICAgKGkzMi5jb25zdCAwKQorICAgICAgICAvLyAgICAgICAg
IChpMzIubmUpCisgICAgICAgIC8vICAgICAgICAgKGJyX2lmICRsb29wKQorICAgICAgICAvLyAg
ICAgICAgIChpMzIuY29uc3QgMSkKKyAgICAgICAgLy8gICAgICAgICApCisgICAgICAgIC8vICAg
ICAgICApCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICApCisgICAgICAgIC8v
ICAgICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAw
eDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MiwgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4MGUsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQsIDB4NmMsIDB4
NjUsIDB4NzMsIDB4NzMsIDB4MmQsIDB4NzQsCisgICAgICAgICAgICAweDY4LCAweDYxLCAweDZl
LCAweDAwLCAweDAwLCAweDBhLCAweGE3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAw
eGExLCAweDgwLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMiwgMHgw
MSwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0ZCwgMHgwMywgMHgwMSwgMHgxMCwgMHgwMCwg
MHgwOSwgMHgwNCwgMHgxNCwKKyAgICAgICAgICAgIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTAsIDB4
MDEsIDB4NDEsIDB4MTUsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NGUsIDB4MDcsIDB4MDEsIDB4MTAs
IDB4MDEsIDB4MGYsCisgICAgICAgICAgICAweDBmLCAweDBmCisgICAgICAgIH07CisKKyAgICAg
ICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKKyAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwor
CisgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgx
KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3go
MSkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94
KDIpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJv
eCg2KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOworICAgIH0KIAogICAg
IHsKICAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMWRlNmUyNzc0NDJjMTNjYWU5OTAx
OWUxMGFjNWZlNjYyYTEyMGNjMS4uNjUxNTY5MjFmOGE5MTA4NWQ1M2M0ZTUzMTA5MTZjNDdhYzg4
MzEwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcApAQCAtNzksNDMgKzc5LDExIEBAIGlubGluZSBCMzo6T3Bjb2RlIHRvQjNPcChVbmFy
eU9wVHlwZSBvcCkKIH0KIAogY2xhc3MgQjNJUkdlbmVyYXRvciB7Ci1wcml2YXRlOgotICAgIGNs
YXNzIExhenlCbG9jayB7Ci0gICAgcHVibGljOgotICAgICAgICBMYXp5QmxvY2soQmFzaWNCbG9j
ayogYmxvY2spCi0gICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIExhenlCbG9jaygpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYmxvY2s7IH0K
LQotICAgICAgICBCYXNpY0Jsb2NrKiBnZXQoUHJvY2VkdXJlJiBwcm9jKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIW1fYmxvY2spCi0gICAgICAgICAgICAgICAgbV9ibG9jayA9IHByb2Mu
YWRkQmxvY2soKTsKLSAgICAgICAgICAgIHJldHVybiBtX2Jsb2NrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtX2Jsb2NrKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgqbV9ibG9jayk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb3V0LnByaW50KCJVbmluaXRpYWxp
emVkIik7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEJhc2ljQmxvY2sqIG1f
YmxvY2sgeyBudWxscHRyIH07Ci0gICAgfTsKLQogcHVibGljOgogICAgIHN0cnVjdCBDb250cm9s
RGF0YSB7Ci0gICAgICAgIENvbnRyb2xEYXRhKFByb2NlZHVyZSYgcHJvYywgVHlwZSBzaWduYXR1
cmUsIEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBudWxscHRyLCBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24gPSBudWxscHRyKQotICAgICAgICAgICAgOiBjb250aW51YXRpb24oY29udGludWF0aW9uKQor
ICAgICAgICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIFR5cGUgc2lnbmF0dXJlLCBCbG9j
a1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFs
ID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAs
IGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCiAgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lh
bCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSAhPSBWb2lkKQpAQCAtMTM5
LDM1ICsxMDcsMzUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG91dC5wcmludCgiTG9vcDog
ICIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
b3V0LnByaW50KCJDb250aW51YXRpb246ICIsIGNvbnRpbnVhdGlvbiwgIiwgU3BlY2lhbDogIik7
CisgICAgICAgICAgICBvdXQucHJpbnQoIkNvbnRpbnVhdGlvbjogIiwgKmNvbnRpbnVhdGlvbiwg
IiwgU3BlY2lhbDogIik7CiAgICAgICAgICAgICBpZiAoc3BlY2lhbCkKICAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoKnNwZWNpYWwpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IG91dC5wcmludCgiTm9uZSIpOwogICAgICAgICB9CiAKLSAgICAgICAgQmxvY2tUeXBlIHR5cGUo
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXNwZWNpYWwpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEJsb2NrVHlwZTo6QmxvY2s7Ci0gICAgICAgICAgICBpZiAoY29udGludWF0
aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiBCbG9ja1R5cGU6OklmOwotICAgICAgICAgICAg
cmV0dXJuIEJsb2NrVHlwZTo6TG9vcDsKLSAgICAgICAgfQorICAgICAgICBCbG9ja1R5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIGJsb2NrVHlwZTsgfQogCi0gICAgICAgIEJhc2ljQmxvY2sqIHRh
cmdldEJsb2NrRm9yQnJhbmNoKFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgYm9vbCBoYXNOb25W
b2lkU2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gcmVzdWx0LnNpemUoKTsgfQorCisgICAgICAg
IEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrRm9yQnJhbmNoKCkKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKHR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHNwZWNpYWw7Ci0gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uLmdldChwcm9jKTsKKyAg
ICAgICAgICAgIHJldHVybiBjb250aW51YXRpb247CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IG1ha2VCbG9jaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlKCkgPT0gQmxv
Y2tUeXBlOjpJZik7CisgICAgICAgICAgICBibG9ja1R5cGUgPSBCbG9ja1R5cGU6OkJsb2NrOwor
ICAgICAgICAgICAgc3BlY2lhbCA9IG51bGxwdHI7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBCM0lSR2VuZXJhdG9yOwotICAgICAgICAvLyBXZSB1c2Ug
YSBMYXp5QmxvY2sgZm9yIHRoZSBjb250aW51YXRpb24gc2luY2UgQjM6OnZhbGlkYXRlIGRvZXMg
bm90IGxpa2Ugb3JwaGFuZWQgYmxvY2tzLiBOb3RlLAotICAgICAgICAvLyBpdCdzIHBvc3NpYmxl
IHRvIGNyZWF0ZSBhbiBvcnBoYW5lZCBibG9jayBieSBkb2luZyBzb21ldGhpbmcgbGlrZSAoYmxv
Y2sgKHJldHVybiAoLi4uKSkpLiBJbgotICAgICAgICAvLyB0aGF0IGV4YW1wbGUsIGlmIHdlIGVh
Z2VybHkgYWxsb2NhdGUgYSBCYXNpY0Jsb2NrIGZvciB0aGUgY29udGludWF0aW9uIGl0IHdpbGwg
bmV2ZXIgYmUgcmVhY2hhYmxlLgotICAgICAgICBMYXp5QmxvY2sgY29udGludWF0aW9uOworICAg
ICAgICBCbG9ja1R5cGUgYmxvY2tUeXBlOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b247CiAgICAgICAgIEJhc2ljQmxvY2sqIHNwZWNpYWw7CiAgICAgICAgIFZlY3RvcjxWYXJpYWJs
ZSosIDE+IHJlc3VsdDsKICAgICB9OwpAQCAtMTc2LDYgKzE0NCw4IEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIENvbnRyb2xEYXRhIENvbnRyb2xUeXBlOwogICAgIHR5cGVkZWYgVmVjdG9yPEV4cHJl
c3Npb25UeXBlLCAxPiBFeHByZXNzaW9uTGlzdDsKICAgICB0eXBlZGVmIFZlY3RvcjxWYXJpYWJs
ZSosIDE+IFJlc3VsdExpc3Q7CisgICAgdHlwZWRlZiBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPjo6Q29udHJvbEVudHJ5IENvbnRyb2xFbnRyeTsKKwogICAgIHN0YXRpYyBjb25zdGV4cHIg
RXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0gbnVsbHB0cjsKIAogICAgIEIzSVJHZW5l
cmF0b3IoTWVtb3J5KiwgUHJvY2VkdXJlJiwgVmVjdG9yPFVubGlua2VkQ2FsbD4mIHVubGlua2Vk
Q2FsbHMpOwpAQCAtMjAxLDE2ICsxNzEsMTYgQEAgcHVibGljOgogICAgIENvbnRyb2xEYXRhIFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0dXJlKTsKICAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0
dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwogCiAg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IEV4cHJlc3Npb25MaXN0
JiByZXR1cm5WYWx1ZXMpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChD
b250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmIHJldHVyblZhbHVlcyk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2so
Q29udHJvbERhdGEmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlz
dCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRU
b1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlv
biYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OwogCi0gICAgYm9vbCBpc0NvbnRpbnVhdGlvblJlYWNoYWJsZShDb250cm9sRGF0YSYpOwotCi0g
ICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZT4mIGNvbnRyb2xTdGFjaywgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgdm9pZCBkdW1wKGNvbnN0
IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0
JiBleHByZXNzaW9uU3RhY2spOwogCiAgICAgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYp
IHsgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7IH0KIApAQCAtNDk4LDE2ICs0NjgsMTcgQEAg
QjNJUkdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgQjNJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQo
VHlwZSB0eXBlLCB1aW50NjRfdCB2YWwKIAogQjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJ
UkdlbmVyYXRvcjo6YWRkQmxvY2soVHlwZSBzaWduYXR1cmUpCiB7Ci0gICAgcmV0dXJuIENvbnRy
b2xEYXRhKG1fcHJvYywgc2lnbmF0dXJlKTsKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9j
LCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6QmxvY2ssIG1fcHJvYy5hZGRCbG9jaygpKTsKIH0KIAog
QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBlIHNp
Z25hdHVyZSkKIHsKICAgICBCYXNpY0Jsb2NrKiBib2R5ID0gbV9wcm9jLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIE9yaWdpbigp
LCBib2R5KTsKICAgICBib2R5LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CiAgICAg
bV9jdXJyZW50QmxvY2sgPSBib2R5OwotICAgIHJldHVybiBDb250cm9sRGF0YShtX3Byb2MsIHNp
Z25hdHVyZSwgYm9keSk7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0dXJl
LCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwgYm9keSk7CiB9CiAKIGJvb2wgQjNJUkdl
bmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwg
Q29udHJvbFR5cGUmIHJlc3VsdCkKQEAgLTUyNCwxNyArNDk1LDIyIEBAIGJvb2wgQjNJUkdlbmVy
YXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29u
dHJvbFR5cGUmCiAgICAgbm90VGFrZW4tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsK
IAogICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47Ci0gICAgcmVzdWx0ID0gQ29udHJvbERhdGEo
bV9wcm9jLCBzaWduYXR1cmUsIG5vdFRha2VuLCBjb250aW51YXRpb24pOworICAgIHJlc3VsdCA9
IENvbnRyb2xEYXRhKG1fcHJvYywgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OklmLCBjb250aW51YXRp
b24sIG5vdFRha2VuKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9y
OjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpCitib29s
IEIzSVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Np
b25MaXN0JiBjdXJyZW50U3RhY2spCit7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVu
dFN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShtX3Byb2MsIEp1bXAsIE9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CisgICAg
cmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEpOworfQorCitib29sIEIzSVJHZW5lcmF0
b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJiBkYXRhKQogewotICAgIEFTU0VS
VChkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgQVNTRVJUKGRhdGEudHlwZSgpID09IEJsb2NrVHlw
ZTo6SWYpOwogICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5zcGVjaWFsOwotICAgIC8vIENsZWFy
IHRoZSBzcGVjaWFsIHBvaW50ZXIgc28gdGhhdCB3aGVuIHdlIHBhcnNlIHRoZSBlbmQgd2UgZG9u
J3QgdGhpbmsgdGhhdCB0aGlzIGJsb2NrIGlzIGFuIGlmIGJsb2NrLgotICAgIGRhdGEuc3BlY2lh
bCA9IG51bGxwdHI7Ci0gICAgQVNTRVJUKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6QmxvY2sp
OworICAgIGRhdGEubWFrZUJsb2NrKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTU1MCw4
ICs1MjYsMTAgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJldHVyblZhbHVlcykKIAogYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29u
dHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJldHVyblZhbHVlcykKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRh
cmdldEJsb2NrRm9yQnJhbmNoKG1fcHJvYyk7Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0
dXJuVmFsdWVzLCBkYXRhLnJlc3VsdCk7CisgICAgaWYgKGRhdGEudHlwZSgpICE9IEJsb2NrVHlw
ZTo6TG9vcCkKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRh
LnJlc3VsdCk7CisKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9y
QnJhbmNoKCk7CiAgICAgaWYgKGNvbmRpdGlvbikgewogICAgICAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBPcmlnaW4oKSwgY29uZGl0aW9uKTsK
QEAgLTU2NywyNCArNTQ1LDMxIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRy
b2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbERhdGEmIGRh
dGEsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCitib29sIEIzSVJHZW5lcmF0b3I6
OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9u
U3RhY2spCiB7Ci0gICAgaWYgKCFkYXRhLmNvbnRpbnVhdGlvbikKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKKworICAgIHVu
aWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YS5yZXN1bHQpOworICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4o
KSwgZGF0YS5jb250aW51YXRpb24pOworICAgIGRhdGEuY29udGludWF0aW9uLT5hZGRQcmVkZWNl
c3NvcihtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1cm4gYWRkRW5kVG9VbnJlYWNoYWJsZShl
bnRyeSk7Cit9CisKKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENv
bnRyb2xFbnRyeSYgZW50cnkpCit7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250
cm9sRGF0YTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0aW9uOwogCi0gICAg
QmFzaWNCbG9jayogY29udGludWF0aW9uID0gZGF0YS5jb250aW51YXRpb24uZ2V0KG1fcHJvYyk7
CiAgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgQVNTRVJU
KCFkYXRhLnNwZWNpYWwtPnNpemUoKSAmJiAhZGF0YS5zcGVjaWFsLT5zdWNjZXNzb3JzKCkuc2l6
ZSgpKTsKLSAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgZWxzZSBibG9jayB3ZSBu
ZWVkIHRvIHBvaW50IHRoZSBub3RUYWtlbiBicmFuY2ggdG8gdGhlIGNvbnRpbnVhdGlvbi4KLSAg
ICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBP
cmlnaW4oKSk7Ci0gICAgICAgIGRhdGEuc3BlY2lhbC0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVk
QmxvY2soY29udGludWF0aW9uKSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbi0+YWRkUHJlZGVjZXNz
b3IoZGF0YS5zcGVjaWFsKTsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250cm9s
VmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsKICAgICB9CiAKLSAg
ICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEucmVzdWx0KTsKLSAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3Jp
Z2luKCksIGNvbnRpbnVhdGlvbik7Ci0gICAgY29udGludWF0aW9uLT5hZGRQcmVkZWNlc3Nvciht
X2N1cnJlbnRCbG9jayk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAg
Zm9yIChWYXJpYWJsZSogcmVzdWx0IDogZGF0YS5yZXN1bHQpCisgICAgICAgIGVudHJ5LmV4cHJl
c3Npb25TdGFjay5hcHBlbmQobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVl
PihtX3Byb2MsIEIzOjpHZXQsIE9yaWdpbigpLCByZXN1bHQpKTsKKwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC02MTQsMjIgKzU5OSw2IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1
bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6aXNDb250aW51YXRpb25SZWFj
aGFibGUoQ29udHJvbERhdGEmIGRhdGEpCi17Ci0gICAgLy8gSWYgbm90aGluZyB0YXJnZXRzIHRo
ZSBjb250aW51YXRpb24gb2YgdGhlIGN1cnJlbnQgYmxvY2sgdGhlbiB3ZSBkb24ndCB3YW50IHRv
IGNyZWF0ZQotICAgIC8vIGFuIG9ycGhhbmVkIEJhc2ljQmxvY2sgc2luY2UgaXQgY2FuJ3QgYmUg
cmVhY2hlZCBieSBmYWxsdGhyb3VnaC4KLSAgICBpZiAoIWRhdGEuY29udGludWF0aW9uKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0
aW9uLmdldChtX3Byb2MpOwotICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKSB7
Ci0gICAgICAgIGRhdGEuc3BlY2lhbC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVt
cCwgT3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFk
ZFByZWRlY2Vzc29yKGRhdGEuc3BlY2lhbCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KIHZvaWQgQjNJUkdlbmVyYXRvcjo6dW5pZnkoVmFyaWFibGUqIHZhcmlhYmxlLCBFeHByZXNz
aW9uVHlwZSBzb3VyY2UpCiB7CiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIHZhcmlhYmxlLCBzb3VyY2UpOwpAQCAtNjM3
LDIzICs2MDYsMzUgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeShWYXJpYWJsZSogdmFyaWFi
bGUsIEV4cHJlc3Npb25UeXBlIHNvdXJjZSkKIAogdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeVZh
bHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIFJlc3VsdExp
c3QmIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA+PSByZXN1bHRTdGFjay5z
aXplKCkpOworICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IHJlc3VsdFN0YWNrLnNpemUoKSk7
CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdFN0YWNrLnNpemUoKTsgKytpKQor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQogICAgICAgICB1
bmlmeShyZXN1bHRbaV0sIHJlc3VsdFN0YWNrW2ldKTsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9y
OjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKK3N0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9u
U3RhY2soY29uc3QgQ29tbWFQcmludGVyJiBjb21tYSwgY29uc3QgQjNJUkdlbmVyYXRvcjo6RXhw
cmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKK3sKKyAgICBkYXRhTG9nTG4oY29tbWEsICJF
eHByZXNzaW9uU3RhY2s6Iik7CisgICAgZm9yIChjb25zdCBhdXRvJiBleHByZXNzaW9uIDogZXhw
cmVzc2lvblN0YWNrKQorICAgICAgICBkYXRhTG9nTG4oY29tbWEsICpleHByZXNzaW9uKTsKK30K
Kwordm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBj
b250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCiB7CiAg
ICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIEdyYXBoOiIpOwogICAgIGRhdGFMb2cobV9wcm9jKTsK
ICAgICBkYXRhTG9nTG4oIldpdGggY3VycmVudCBibG9jazoiLCAqbV9jdXJyZW50QmxvY2spOwog
ICAgIGRhdGFMb2dMbigiQ29udHJvbCBzdGFjazoiKTsKLSAgICBmb3IgKGNvbnN0IENvbnRyb2xU
eXBlJiBkYXRhIDogY29udHJvbFN0YWNrKQotICAgICAgICBkYXRhTG9nTG4oIiAgIiwgZGF0YSk7
Ci0gICAgZGF0YUxvZ0xuKCJFeHByZXNzaW9uU3RhY2s6Iik7Ci0gICAgZm9yIChjb25zdCBFeHBy
ZXNzaW9uVHlwZSYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKLSAgICAgICAgZGF0YUxv
Z0xuKCIgICIsICpleHByZXNzaW9uKTsKKyAgICBmb3IgKGF1dG8mIGRhdGEgOiBjb250cm9sU3Rh
Y2spIHsKKyAgICAgICAgZGF0YUxvZ0xuKCIgICIsIGRhdGEuY29udHJvbERhdGEpOworICAgICAg
ICBpZiAoZGF0YS5leHByZXNzaW9uU3RhY2suc2l6ZSgpKSB7CisgICAgICAgICAgICBDb21tYVBy
aW50ZXIgY29tbWEoIiAgICAiLCAiICB3aXRoICIpOworICAgICAgICAgICAgZHVtcEV4cHJlc3Np
b25TdGFjayhjb21tYSwgZGF0YS5leHByZXNzaW9uU3RhY2spOworICAgICAgICB9CisgICAgfQor
CisgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgICIsICIiKTsKKyAgICBkdW1wRXhwcmVzc2lvblN0
YWNrKGNvbW1hLCBleHByZXNzaW9uU3RhY2spOwogICAgIGRhdGFMb2dMbigiXG4iKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2Vy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRl
eCA0MjM4Njk2NTY0YjE2MjNkMGJhNjljMDE3OTczZDBkMGM3ZDg3NjJmLi5hNWExNzg2NDIyYTQy
OTJkOWZkMmMyMmFhN2Q0YTdkMzA5NzYwZjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtNDMsMjQgKzQzLDMyIEBAIGNsYXNzIEZ1
bmN0aW9uUGFyc2VyIDogcHVibGljIFBhcnNlciB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiB0eXBl
bmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZSBFeHByZXNzaW9uVHlwZTsKICAgICB0eXBlZGVm
IHR5cGVuYW1lIENvbnRleHQ6OkNvbnRyb2xUeXBlIENvbnRyb2xUeXBlOworICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvbkxpc3QgRXhwcmVzc2lvbkxpc3Q7CiAKICAgICBG
dW5jdGlvblBhcnNlcihDb250ZXh0JiwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6
ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqLCBjb25zdCBWZWN0b3I8RnVuY3Rp
b25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucyk7CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZSgpOwogCisgICAgc3RydWN0IENvbnRyb2xFbnRyeSB7CisgICAgICAgIC8vIFRoaXMg
aXMgdGhlIGV4cHJlc3Npb24gc3RhY2sgZm9yIHRoZSBlbmNsb3Npbmcgc2NvcGUuCisgICAgICAg
IEV4cHJlc3Npb25MaXN0IGV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgQ29udHJvbFR5cGUgY29u
dHJvbERhdGE7CisgICAgfTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUJsb2NrKCk7
CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHByZXNzaW9uKE9wVHlwZSk7CiAg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oT3BU
eXBlKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oKTsKICAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeUNvbnRyb2woVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYs
IHVuc2lnbmVkIGxldmVsKTsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBvcEV4cHJl
c3Npb25TdGFjayhFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIENvbnRleHQmIG1fY29u
dGV4dDsKLSAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IG1fZXhwcmVzc2lvblN0YWNrOwot
ICAgIFZlY3RvcjxDb250cm9sVHlwZT4gbV9jb250cm9sU3RhY2s7CisgICAgRXhwcmVzc2lvbkxp
c3QgbV9leHByZXNzaW9uU3RhY2s7CisgICAgVmVjdG9yPENvbnRyb2xFbnRyeT4gbV9jb250cm9s
U3RhY2s7CiAgICAgY29uc3QgU2lnbmF0dXJlKiBtX3NpZ25hdHVyZTsKICAgICBjb25zdCBWZWN0
b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIG1fZnVuY3Rpb25zOwogICAgIHVuc2lnbmVkIG1fdW5y
ZWFjaGFibGVCbG9ja3MgeyAwIH07CkBAIC0xMjAsNyArMTI4LDcgQEAgYm9vbCBGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6cGFyc2VCbG9jaygpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAob3Ag
PT0gT3BUeXBlOjpFbmQgJiYgIW1fY29udHJvbFN0YWNrLnNpemUoKSkKLSAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgcmV0dXJuIG1fdW5yZWFjaGFibGVCbG9ja3MgPyB0cnVlIDogYWRk
UmV0dXJuKCk7CiAKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MpIHsKICAgICAgICAg
ICAgIGlmICghcGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oc3RhdGljX2Nhc3Q8T3BUeXBlPihv
cCkpKSB7CkBAIC0xMzYsOSArMTQ0LDI0IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlQmxvY2soKQogCiAgICAgfQogCi0gICAgLy8gSSdtIG5vdCBzdXJlIGlmIHdlIHNob3Vs
ZCBjaGVjayB0aGUgZXhwcmVzc2lvbiBzdGFjayBoZXJlLi4uCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29udGV4dD4KK2Jvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OmFkZFJldHVybigpCit7Cisg
ICAgRXhwcmVzc2lvbkxpc3QgcmV0dXJuVmFsdWVzOworICAgIGlmIChtX3NpZ25hdHVyZS0+cmV0
dXJuVHlwZSAhPSBWb2lkKSB7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJldHVyblZhbHVlOwor
ICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhyZXR1cm5WYWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVyblZhbHVlcy5hcHBlbmQocmV0dXJuVmFsdWUp
OworICAgIH0KKworICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOworICAgIHJldHVybiBtX2Nv
bnRleHQuYWRkUmV0dXJuKHJldHVyblZhbHVlcyk7Cit9CisKICNkZWZpbmUgQ1JFQVRFX0NBU0Uo
bmFtZSwgaWQsIGIzb3ApIGNhc2UgbmFtZToKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4K
QEAgLTI4OCw3ICszMTEsOCBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4
cHJlc3Npb24oT3BUeXBlIG9wKQogICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKGlubGluZVNp
Z25hdHVyZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbV9jb250cm9s
U3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRCbG9jayhpbmxpbmVTaWduYXR1cmUpKTsKKyAgICAg
ICAgbV9jb250cm9sU3RhY2suYXBwZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIG1f
Y29udGV4dC5hZGRCbG9jayhpbmxpbmVTaWduYXR1cmUpIH0pOworICAgICAgICBtX2V4cHJlc3Np
b25TdGFjayA9IEV4cHJlc3Npb25MaXN0KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMjk3LDcgKzMyMSw4IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNl
RXhwcmVzc2lvbihPcFR5cGUgb3ApCiAgICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUoaW5saW5l
U2lnbmF0dXJlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX2NvbnRy
b2xTdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZExvb3AoaW5saW5lU2lnbmF0dXJlKSk7CisgICAg
ICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUobV9leHByZXNzaW9uU3RhY2spLCBt
X2NvbnRleHQuYWRkTG9vcChpbmxpbmVTaWduYXR1cmUpIH0pOworICAgICAgICBtX2V4cHJlc3Np
b25TdGFjayA9IEV4cHJlc3Npb25MaXN0KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMzE0LDcgKzMzOSw4IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNl
RXhwcmVzc2lvbihPcFR5cGUgb3ApCiAgICAgICAgIGlmICghbV9jb250ZXh0LmFkZElmKGNvbmRp
dGlvbiwgaW5saW5lU2lnbmF0dXJlLCBjb250cm9sKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBlbmQoY29udHJvbCk7CisgICAgICAgIG1f
Y29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUobV9leHByZXNzaW9uU3RhY2spLCBjb250cm9s
IH0pOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IEV4cHJlc3Npb25MaXN0KCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzIzLDcgKzM0OSwxMSBAQCBib29sIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQogICAgICAgICAg
ICAgbV9jb250ZXh0LnNldEVycm9yTWVzc2FnZSgiQXR0ZW1wdGVkIHRvIHVzZSBlbHNlIGJsb2Nr
IGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBmdW5jdGlvbiIpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkRWxzZShtX2NvbnRy
b2xTdGFjay5sYXN0KCksIG1fZXhwcmVzc2lvblN0YWNrKTsKKworICAgICAgICBpZiAoIW1fY29u
dGV4dC5hZGRFbHNlKG1fY29udHJvbFN0YWNrLmxhc3QoKS5jb250cm9sRGF0YSwgbV9leHByZXNz
aW9uU3RhY2spKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay5zaHJpbmsoMCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGNh
c2UgT3BUeXBlOjpCcjoKQEAgLTMzOSwyOSArMzY5LDMxIEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7CiAKLSAgICAgICAgQ29udHJvbFR5cGUm
IGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0
XTsKKyAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xT
dGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YTsKIAogICAgICAgICByZXR1cm4g
bV9jb250ZXh0LmFkZEJyYW5jaChkYXRhLCBjb25kaXRpb24sIG1fZXhwcmVzc2lvblN0YWNrKTsK
ICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6UmV0dXJuOiB7Ci0gICAgICAgIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZSwgMT4gcmV0dXJuVmFsdWVzOwotICAgICAgICBpZiAobV9zaWduYXR1cmUtPnJl
dHVyblR5cGUgIT0gVm9pZCkgewotICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmV0dXJuVmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhyZXR1cm5WYWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm5WYWx1ZXMuYXBwZW5kKHJldHVyblZhbHVlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOwotICAgICAgICByZXR1cm4gbV9jb250
ZXh0LmFkZFJldHVybihyZXR1cm5WYWx1ZXMpOworICAgICAgICByZXR1cm4gYWRkUmV0dXJuKCk7
CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkVuZDogewotICAgICAgICBDb250cm9sVHlwZSBk
YXRhID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgcmV0dXJuIG1fY29udGV4
dC5lbmRCbG9jayhkYXRhLCBtX2V4cHJlc3Npb25TdGFjayk7CisgICAgICAgIENvbnRyb2xFbnRy
eSBkYXRhID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgYSBsaXR0bGUgd2VpcmQgaW4gdGhhdCBpdCB3aWxsIG1vZGlmeSB0aGUgZXhwcmVzc2lv
blN0YWNrIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBibG9jay4KKyAgICAgICAgLy8gVGhhdCdzIGEg
bGl0dGxlIHRvbyBlZmZlY3RmdWwgZm9yIG1lIGJ1dCBJIGRvbid0IGhhdmUgYSBiZXR0ZXIgQVBJ
IHJpZ2h0IG5vdy4KKyAgICAgICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0MzUzCisgICAgICAgIGlmICghbV9jb250ZXh0LmVuZEJsb2NrKGRhdGEs
IG1fZXhwcmVzc2lvblN0YWNrKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
bV9leHByZXNzaW9uU3RhY2suc3dhcChkYXRhLmV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgT3BUeXBlOjpVbnJlYWNoYWJsZTogeworICAg
ICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgY2FzZSBPcFR5cGU6OlVucmVhY2hhYmxlOgogICAgIGNhc2UgT3BUeXBlOjpTZWxl
Y3Q6CiAgICAgY2FzZSBPcFR5cGU6OkJyVGFibGU6CiAgICAgY2FzZSBPcFR5cGU6Ok5vcDoKQEAg
LTM4NiwxNyArNDE4LDIwIEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5y
ZWFjaGFibGVFeHByZXNzaW9uKE9wVHlwZSBvcCkKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVC
bG9ja3MgPiAxKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgQ29udHJvbFR5
cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7Ci0gICAgICAgIEFTU0VSVChkYXRhLnR5
cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICAgICAgQ29udHJvbEVudHJ5JiBkYXRhID0gbV9j
b250cm9sU3RhY2subGFzdCgpOwogICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMDsKLSAg
ICAgICAgcmV0dXJuIG1fY29udGV4dC5hZGRFbHNlKGRhdGEsIG1fZXhwcmVzc2lvblN0YWNrKTsK
KyAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YS5jb250cm9s
RGF0YSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fZXhwcmVzc2lvblN0
YWNrLnNocmluaygwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgY2FzZSBP
cFR5cGU6OkVuZDogewogICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcyA9PSAxKSB7Ci0g
ICAgICAgICAgICBDb250cm9sVHlwZSBkYXRhID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3QoKTsK
LSAgICAgICAgICAgIGlmICghbV9jb250ZXh0LmlzQ29udGludWF0aW9uUmVhY2hhYmxlKGRhdGEp
KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgQ29udHJvbEVudHJ5
IGRhdGEgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOworICAgICAgICAgICAgaWYgKCFtX2Nv
bnRleHQuYWRkRW5kVG9VbnJlYWNoYWJsZShkYXRhKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKGRhdGEuZXhwcmVzc2lv
blN0YWNrKTsKICAgICAgICAgfQogICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzLS07CiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNDM5LDEyICs0NzQsMTIgQEAgYm9vbCBGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oT3BUeXBlIG9wKQogdGVtcGxh
dGU8dHlwZW5hbWUgQ29udGV4dD4KIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBvcEV4
cHJlc3Npb25TdGFjayhFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQogewotICAgIGlmICghbV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpKSB7CisgICAgaWYgKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkg
ewogICAgICAgICByZXN1bHQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBtX2NvbnRleHQuc2V0RXJyb3JNZXNzYWdlKCJB
dHRlbXB0ZWQgdG8gdXNlIGFuIHN0YWNrIHZhbHVlIHdoZW4gbm9uZSBleGlzdGVkIik7CisgICAg
bV9jb250ZXh0LnNldEVycm9yTWVzc2FnZSgiQXR0ZW1wdGVkIHRvIHVzZSBhIHN0YWNrIHZhbHVl
IHdoZW4gbm9uZSBleGlzdGVkIik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAppbmRleCBiODA5Y2RkMDY4YjE4MWEx
YmZlOTY4ZDhhMDk4ZTE1ZjE4OTlkZTBmLi42MWIwZGVmYWRhOWFlM2EzYzFmNGRkMDM2YzQ1Mjk2
ODRhM2I1MzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFs
aWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRl
ICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewpAQCAtNjIsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAorICAgICAgICBib29sIGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3NpZ25hdHVyZSAhPSBWb2lkOyB9CisKICAgICAgICAgQmxvY2tUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX2Jsb2NrVHlwZTsgfQogICAgICAgICBUeXBlIHNpZ25hdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlOyB9CiAgICAgcHJpdmF0ZToKQEAgLTcxLDYgKzc0LDgg
QEAgcHVibGljOgogICAgIHR5cGVkZWYgVHlwZSBFeHByZXNzaW9uVHlwZTsKICAgICB0eXBlZGVm
IENvbnRyb2xEYXRhIENvbnRyb2xUeXBlOwogICAgIHR5cGVkZWYgVmVjdG9yPEV4cHJlc3Npb25U
eXBlLCAxPiBFeHByZXNzaW9uTGlzdDsKKyAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2VyPFZhbGlk
YXRlPjo6Q29udHJvbEVudHJ5IENvbnRyb2xFbnRyeTsKKwogICAgIHN0YXRpYyBjb25zdCBFeHBy
ZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBWb2lkOwogCiAgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYpOwpAQCAtOTQsMTUgKzk5
LDE3IEBAIHB1YmxpYzoKICAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9v
cChUeXBlIHNpZ25hdHVyZSk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhw
cmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbERhdGEmIHJlc3Vs
dCk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNv
bnN0IEV4cHJlc3Npb25MaXN0Jik7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxz
ZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFJldHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKICAgICBi
b29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwotICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5k
QmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Cisg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50
cnkmKTsKKwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBj
YWxsZWVJbmRleCwgY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGlzQ29udGludWF0aW9uUmVhY2hhYmxlKENvbnRyb2xEYXRhJikgeyBy
ZXR1cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZT4m
IGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Cisg
ICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwogCiAgICAgdm9pZCBzZXRFcnJv
ck1lc3NhZ2UoU3RyaW5nJiYgbWVzc2FnZSkgeyBBU1NFUlQobV9lcnJvck1lc3NhZ2UuaXNOdWxs
KCkpOyBtX2Vycm9yTWVzc2FnZSA9IFdURk1vdmUobWVzc2FnZSk7IH0KICAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KQEAgLTE4NCwxMyAr
MTkxLDE4IEBAIGJvb2wgVmFsaWRhdGU6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
VHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1CiAKIGJvb2wgVmFsaWRhdGU6OmFkZEVs
c2UoQ29udHJvbFR5cGUmIGN1cnJlbnQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiB2YWx1ZXMpCiB7
Ci0gICAgaWYgKGN1cnJlbnQudHlwZSgpICE9IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgbV9l
cnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIGFkZCBlbHNlIGJsb2NrIHRv
IHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIGlmIik7CisgICAgaWYgKCF1bmlmeSh2YWx1ZXMsIGN1
cnJlbnQpKSB7CisgICAgICAgIEFTU0VSVChlcnJvck1lc3NhZ2UoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoIXVuaWZ5KHZhbHVlcywgY3VycmVudCkpIHsKLSAg
ICAgICAgQVNTRVJUKGVycm9yTWVzc2FnZSgpKTsKKyAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFj
aGFibGUoY3VycmVudCk7Cit9CisKK2Jvb2wgVmFsaWRhdGU6OmFkZEVsc2VUb1VucmVhY2hhYmxl
KENvbnRyb2xUeXBlJiBjdXJyZW50KQoreworICAgIGlmIChjdXJyZW50LnR5cGUoKSAhPSBCbG9j
a1R5cGU6OklmKSB7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1w
dGluZyB0byBhZGQgZWxzZSBibG9jayB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBpZiIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yMTksNyArMjMxLDcgQEAgYm9vbCBW
YWxpZGF0ZTo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiB0YXJnZXQsIEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgY29uc3QgRXgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlm
ICh0YXJnZXQudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpCisgICAgaWYgKHRhcmdldC50eXBlKCkg
PT0gQmxvY2tUeXBlOjpMb29wKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICh0YXJn
ZXQuc2lnbmF0dXJlKCkgPT0gVm9pZCkKQEAgLTIzMywyMCArMjQ1LDMzIEBAIGJvb2wgVmFsaWRh
dGU6OmFkZEJyYW5jaChDb250cm9sVHlwZSYgdGFyZ2V0LCBFeHByZXNzaW9uVHlwZSBjb25kaXRp
b24sIGNvbnN0IEV4CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFZhbGlkYXRlOjplbmRC
bG9jayhDb250cm9sVHlwZSYgYmxvY2ssIEV4cHJlc3Npb25MaXN0JiBzdGFjaykKK2Jvb2wgVmFs
aWRhdGU6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBzdGFj
aykKIHsKKyAgICBDb250cm9sRGF0YSYgYmxvY2sgPSBlbnRyeS5jb250cm9sRGF0YTsKICAgICBp
ZiAoYmxvY2suc2lnbmF0dXJlKCkgPT0gVm9pZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAg
ICBpZiAoIXN0YWNrLnNpemUoKSkgeworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJp
bmcoIkJsb2NrIGZhbGx0aG91Z2ggZXhwZWN0ZWQgdHlwZTogIiwgdG9TdHJpbmcoYmxvY2suc2ln
bmF0dXJlKCkpLCAiIGJ1dCB0aGUgc3RhY2sgd2FzIGVtcHR5Iik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAKLSAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID09IDEpOwotICAgIGlmIChi
bG9jay5zaWduYXR1cmUoKSA9PSBzdGFja1swXSkKKyAgICBpZiAoYmxvY2suc2lnbmF0dXJlKCkg
PT0gc3RhY2subGFzdCgpKSB7CisgICAgICAgIGVudHJ5LmV4cHJlc3Npb25TdGFjay5hcHBlbmQo
YmxvY2suc2lnbmF0dXJlKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBt
X2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkJsb2NrIGZhbGx0aHJvdWdoIGhhcyBleHBlY3Rl
ZCB0eXBlOiAiLCB0b1N0cmluZyhibG9jay5zaWduYXR1cmUoKSksICIgYnV0IHByb2R1Y2VkIHR5
cGU6ICIsIHRvU3RyaW5nKGJsb2NrLnNpZ25hdHVyZSgpKSk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitib29sIFZhbGlkYXRlOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50
cnkpCit7CisgICAgaWYgKGVudHJ5LmNvbnRyb2xEYXRhLnNpZ25hdHVyZSgpICE9IFZvaWQpCisg
ICAgICAgIGVudHJ5LmV4cHJlc3Npb25TdGFjay5hcHBlbmQoZW50cnkuY29udHJvbERhdGEuc2ln
bmF0dXJlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCiBib29sIFZhbGlkYXRlOjphZGRDYWxs
KHVuc2lnbmVkLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQogewogICAgIGlm
IChpbmZvLnNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSAhPSBhcmdzLnNpemUoKSkgewpAQCAt
Mjg4LDkgKzMxMywxMCBAQCBib29sIFZhbGlkYXRlOjp1bmlmeShjb25zdCBFeHByZXNzaW9uTGlz
dCYgdmFsdWVzLCBjb25zdCBDb250cm9sVHlwZSYgYmxvY2spCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZT4mLCBjb25z
dCBFeHByZXNzaW9uTGlzdCYpCit2b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250
cm9sRW50cnk+JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKQogewotICAgIGRhdGFMb2dMbigiVmFs
aWRhdGluZyIpOworICAgIC8vIElmIHlvdSBuZWVkIHRoaXMgdGhlbiB5b3Ugc2hvdWxkIGZpeCB0
aGUgdmFsaWRhdG9yJ3MgZXJyb3IgbWVzc2FnZXMgaW5zdGVhZC4uLgorICAgIC8vIFRoaW5rIG9m
IHRoaXMgYXMgcGVuYW5jZSBmb3IgdGhlIHNpbiBvZiBiYWQgZXJyb3IgbWVzc2FnZXMuCiB9CiAK
IFN0cmluZyB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGxl
bmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxGdW5jdGlvbklu
Zm9ybWF0aW9uPiYgZnVuY3Rpb25zKQpAQCAtMjk5LDYgKzMyNSwxMCBAQCBTdHJpbmcgdmFsaWRh
dGVGdW5jdGlvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBsZW5ndGgsIGNvbnN0IFNp
Z25hdHVyZSogcwogICAgIEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiB2YWxpZGF0b3IoY29udGV4
dCwgc291cmNlLCBsZW5ndGgsIHNpZ25hdHVyZSwgZnVuY3Rpb25zKTsKICAgICBpZiAoIXZhbGlk
YXRvci5wYXJzZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBhZGQgYmV0dGVyIGxvY2F0aW9uIGlu
Zm9ybWF0aW9uIGhlcmUuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDI4OAorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5ldmVyIG5vdCBoYXZlIGFu
IGVycm9yIG1lc3NhZ2UgaWYgd2UgcmV0dXJuIGZhbHNlLgorICAgICAgICAvLyBzZWU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzNTQKKyAgICAgICAgaWYgKGNv
bnRleHQuZXJyb3JNZXNzYWdlKCkuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gIlVua25v
d24gZXJyb3IiOwogICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvck1lc3NhZ2UoKTsKICAgICB9
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293771</attachid>
            <date>2016-11-03 10:10:45 -0700</date>
            <delta_ts>2016-11-03 12:23:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164100-20161103100643.patch</filename>
            <type>text/plain</type>
            <size>33475</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
NjMzZTdhZjU1NDJkYmFhYzYzZGZhOGEzNjg3YjExMTcxZGNmNWM5Li5iNzJmNjcwMTBjMjc0YmM2
YzBmMjFiMWNkOGUyNmQ4YzMwZDViMDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw0NSBAQAogMjAxNi0xMS0wMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KIAorICAgICAgICBXYXNtIHN0YXJ0cyBhIG5ldyBzdGFjayB3aGVuZXZlciBpdCBhZGRz
IGEgbmV3IGJsb2NrIGFuZCBoYXMgcmV0dXJuIHR5cGVzIGZvciBibG9ja3MuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG92ZXJoYXVs
cyBtdWNoIG9mIHRoZSBXYXNtIGZ1bmN0aW9uIHBhcnNlciwgdmFsaWRhdG9yLCBhbmQgQjMgSVIg
Z2VuZXJhdG9yCisgICAgICAgIHRvIHdvcmsgd2l0aCBibG9jayByZXR1cm4gdHlwZXMuIEluIFdh
c20sIGJsb2NrcyBjYW4gYWN0IGFzIGV4cHJlc3Npb25zIGFuZCBoYXZlIGEKKyAgICAgICAgcmV0
dXJuIHZhbHVlLiBNb3N0IG9mIHRoZSBjb250cm9sIGZsb3cgb3BlcmF0b3JzIG5lZWRlZCB0byBi
ZSByZXdyaXR0ZW4gaW4gb3JkZXIgdG8KKyAgICAgICAgc3VwcG9ydCB0aGlzIGZlYXR1cmUuIFRv
IGVuYWJsZSByZXR1cm4gdHlwZXMgdGhlIGZ1bmN0aW9uIHBhcnNlciBuZWVkZWQgdG8gYmUgYWJs
ZQorICAgICAgICB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSBleHByZXNzaW9uIHN0YWNrIGZyb20g
cHJldmlvdXMgYmxvY2tzLCB3aGljaCBpcyBkb25lIHZpYSB0aGUKKyAgICAgICAgY29udHJvbCBz
dGFjay4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVtb3ZlcyB0aGUgbGF6eSBjb250aW51
YXRpb24gYmxvY2sgc3lzdGVtIGFkZGVkIHByZXZpb3VzbHkuIEl0J3MKKyAgICAgICAgbm90IGNs
ZWFyIGlmIHRoZXJlIHdvdWxkIGJlIGFueSBwZXJmb3JtYW5jZSB3aW4gZnJvbSBzdWNoIGEgc3lz
dGVtLiBUaGVyZSBhcmUgbGlrZWx5CisgICAgICAgIG1hbnkgb3RoZXIgdGhpbmdzIHdpdGggb3Jk
ZXJzIG9mIG1hZ25pdHVkZSBtb3JlIGltcGFjdCBvbiBCMyBJUiBnZW5lcmF0aW9uLiBUaGUKKyAg
ICAgICAgY29tcGxleGl0eSBjb3N0IG9mIHN1Y2ggYSBzeXN0ZW0gaXMgbm90IHdvcnRoIHRoZSBl
ZmZvcnQgd2l0aG91dCBzdWZmaWNpZW50IGV2aWRlbmNlCisgICAgICAgIG90aGVyd2lzZS4KKwor
ICAgICAgICAqIHRlc3RXYXNtLmNwcDoKKyAgICAgICAgKHJ1bldhc21UZXN0cyk6CisgICAgICAg
ICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpwb3BFeHByZXNzaW9uU3RhY2spOgorICAgICAg
ICAqIHdhc20vV2FzbVZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6
OkNvbnRyb2xEYXRhOjpoYXNOb25Wb2lkU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
VmFsaWRhdGU6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkRWxz
ZVRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkQnJhbmNo
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmVuZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6VmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpWYWxpZGF0ZTo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OnZhbGlkYXRlRnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6aXNDb250aW51YXRpb25SZWFjaGFi
bGUpOiBEZWxldGVkLgorCisyMDE2LTExLTAyICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgorCiAgICAgICAgIFdlIHNob3VsZCBub3QgcG9wIGZyb20gYW4gZW1wdHkgc3Rh
Y2sgaW4gdGhlIFdhc20gZnVuY3Rpb24gcGFyc2VyLgogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0Mjc1CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20u
Y3BwCmluZGV4IGQxYjg4ZDhkNTc4ZjM3Y2E3YjUzZDM1NjMyZDhlYTY0NjdlN2MzZDMuLjZlM2Y1
ZDJkMGI5YzJhY2FmZDQxMzE2N2Q3ZWRiNDg5MWEyNWQ5MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RXYXNtLmNwcApAQCAtMjkzLDYgKzI5MywxMDcgQEAgc3RhdGljIHZvaWQgY2hlY2tQbGFuKFBs
YW4mIHBsYW4sIHVuc2lnbmVkIGV4cGVjdGVkTnVtYmVyT2ZGdW5jdGlvbnMpCiAvLyBGb3Igbm93
IHdlIGlubGluZSB0aGUgdGVzdCBmaWxlcy4KIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiB7
CisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVs
ZQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaWYtdGhlbi1ib3RoLWZhbGx0aHJvdWdo
IikgKHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8v
ICAgICAgKGJsb2NrICRibG9jayBpMzIKKyAgICAgICAgLy8gICAgICAgKGlmIGkzMiAoaTMyLmVx
IChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgICAodGhlbiAo
aTMyLmNvbnN0IDEpKQorICAgICAgICAvLyAgICAgICAgKGVsc2UKKyAgICAgICAgLy8gICAgICAg
ICAoaTMyLmNvbnN0IDIpCisgICAgICAgIC8vICAgICAgICAgKGJyICRibG9jaykpCisgICAgICAg
IC8vICAgICAgICApCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICApCisgICAg
ICAgIC8vICAgICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAg
ICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAx
LCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAg
MHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5YywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4NjksIDB4NjYsIDB4MmQsIDB4NzQsIDB4NjgsIDB4
NjUsIDB4NmUsIDB4MmQsIDB4NjIsIDB4NmYsIDB4NzQsCisgICAgICAgICAgICAweDY4LCAweDJk
LCAweDY2LCAweDYxLCAweDZjLCAweDZjLCAweDc0LCAweDY4LCAweDcyLCAweDZmLCAweDc1LCAw
eDY3LCAweDY4LCAweDAwLCAweDAwLCAweDBhLAorICAgICAgICAgICAgMHg5YSwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg5NCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwg
MHgwMSwgMHgwMSwgMHgxNCwgMHgwMCwKKyAgICAgICAgICAgIDB4MTAsIDB4MDAsIDB4NGQsIDB4
MDMsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MDQsIDB4MTAsIDB4MDIsIDB4MDYsIDB4MDEsIDB4MGYs
IDB4MGYsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3Ip
OworICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMCksIGJveGYoMzIpIH0pLCAxKSk7Cisg
ICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveGYoMSksIGJveGYoMzIpIH0pLCAyKSk7CisgICAgfQorCisgICAgewor
ICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAg
ICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaWYtdGhlbi1ib3RoLWZhbGx0aHJvdWdoIikgKHBhcmFt
ICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8vICAgICAgKGlm
IGkzMiAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAg
ICAgICh0aGVuIChpMzIuY29uc3QgMSkpCisgICAgICAgIC8vICAgICAgIChlbHNlIChpMzIuY29u
c3QgMikpCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICApCisgICAgICAgIC8v
ICAgICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAw
eDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwg
MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5YywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4MTgsIDB4NjksIDB4NjYsIDB4MmQsIDB4NzQsIDB4NjgsIDB4NjUsIDB4
NmUsIDB4MmQsIDB4NjIsIDB4NmYsIDB4NzQsCisgICAgICAgICAgICAweDY4LCAweDJkLCAweDY2
LCAweDYxLCAweDZjLCAweDZjLCAweDc0LCAweDY4LCAweDcyLCAweDZmLCAweDc1LCAweDY3LCAw
eDY4LCAweDAwLCAweDAwLCAweDBhLAorICAgICAgICAgICAgMHg5NSwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwg
MHgwMCwgMHgxMCwgMHgwMCwKKyAgICAgICAgICAgIDB4NGQsIDB4MDMsIDB4MDEsIDB4MTAsIDB4
MDEsIDB4MDQsIDB4MTAsIDB4MDIsIDB4MGYsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQ
bGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CisKKyAg
ICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLKGlzSWRlbnRp
Y2FsKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMCks
IGJveGYoMzIpIH0pLCAxKSk7CisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMSksIGJveGYoMzIpIH0pLCAy
KSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAg
Ly8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiZHVtYi1sZXNzLXRo
YW4iKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAg
Ly8gICAgICAobG9vcCAkbG9vcCBpMzIKKyAgICAgICAgLy8gICAgICAgKGkzMi5lcSAoZ2V0X2xv
Y2FsICR4KSAoZ2V0X2xvY2FsICR5KSkKKyAgICAgICAgLy8gICAgICAgKGlmIGkzMgorICAgICAg
ICAvLyAgICAgICAgKHRoZW4gKHJldHVybiAoaTMyLmNvbnN0IDApKSkKKyAgICAgICAgLy8gICAg
ICAgIChlbHNlCisgICAgICAgIC8vICAgICAgICAgKGdldF9sb2NhbCAkeCkKKyAgICAgICAgLy8g
ICAgICAgICAoc2V0X2xvY2FsICR4IChpMzIuc3ViIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3Qg
MSkpKQorICAgICAgICAvLyAgICAgICAgIChpMzIuY29uc3QgMCkKKyAgICAgICAgLy8gICAgICAg
ICAoaTMyLm5lKQorICAgICAgICAvLyAgICAgICAgIChicl9pZiAkbG9vcCkKKyAgICAgICAgLy8g
ICAgICAgICAoaTMyLmNvbnN0IDEpCisgICAgICAgIC8vICAgICAgICAgKQorICAgICAgICAvLyAg
ICAgICAgKQorICAgICAgICAvLyAgICAgICApCisgICAgICAgIC8vICAgICAgKQorICAgICAgICAv
LyAgICAgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAg
MHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4
NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDIs
IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OTIsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDBlLCAweDY0LCAweDc1LCAweDZkLCAweDYyLCAweDJkLCAweDZjLCAw
eDY1LCAweDczLCAweDczLCAweDJkLCAweDc0LAorICAgICAgICAgICAgMHg2OCwgMHg2MSwgMHg2
ZSwgMHgwMCwgMHgwMCwgMHgwYSwgMHhhNywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHhhMSwgMHg4MCwgMHg4MCwgMHg4MCwKKyAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDIsIDB4
MDEsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NGQsIDB4MDMsIDB4MDEsIDB4MTAsIDB4MDAs
IDB4MDksIDB4MDQsIDB4MTQsCisgICAgICAgICAgICAweDAwLCAweDE0LCAweDAwLCAweDEwLCAw
eDAxLCAweDQxLCAweDE1LCAweDAwLCAweDEwLCAweDAwLCAweDRlLCAweDA3LCAweDAxLCAweDEw
LCAweDAxLCAweDBmLAorICAgICAgICAgICAgMHgwZiwgMHgwZgorICAgICAgICB9OworCisgICAg
ICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsK
KworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3go
MSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94
KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDEpOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJv
eCgyKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBi
b3goNikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAwKTsKKyAgICB9CiAKICAg
ICB7CiAgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDFkZTZlMjc3NDQyYzEzY2FlOTkw
MTllMTBhYzVmZTY2MmExMjBjYzEuLmQwZjMxMTQ5YWZiNjY2NDNhNWYzZWFhZWZlMjI3NzllNTgx
OGQ4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAKQEAgLTc5LDQzICs3OSwxMSBAQCBpbmxpbmUgQjM6Ok9wY29kZSB0b0IzT3AoVW5h
cnlPcFR5cGUgb3ApCiB9CiAKIGNsYXNzIEIzSVJHZW5lcmF0b3IgewotcHJpdmF0ZToKLSAgICBj
bGFzcyBMYXp5QmxvY2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgTGF6eUJsb2NrKEJhc2ljQmxv
Y2sqIGJsb2NrKQotICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQotICAgICAgICB7Ci0gICAg
ICAgIH0KLQotICAgICAgICBMYXp5QmxvY2soKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2Jsb2NrOyB9
Ci0KLSAgICAgICAgQmFzaWNCbG9jayogZ2V0KFByb2NlZHVyZSYgcHJvYykKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKCFtX2Jsb2NrKQotICAgICAgICAgICAgICAgIG1fYmxvY2sgPSBwcm9j
LmFkZEJsb2NrKCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9ibG9jazsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobV9ibG9jaykKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoKm1fYmxvY2sp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiVW5pbml0aWFs
aXplZCIpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBCYXNpY0Jsb2NrKiBt
X2Jsb2NrIHsgbnVsbHB0ciB9OwotICAgIH07Ci0KIHB1YmxpYzoKICAgICBzdHJ1Y3QgQ29udHJv
bERhdGEgewotICAgICAgICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIFR5cGUgc2lnbmF0
dXJlLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0ciwgQmFzaWNCbG9jayogY29udGludWF0
aW9uID0gbnVsbHB0cikKLSAgICAgICAgICAgIDogY29udGludWF0aW9uKGNvbnRpbnVhdGlvbikK
KyAgICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBUeXBlIHNpZ25hdHVyZSwgQmxv
Y2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lh
bCA9IG51bGxwdHIpCisgICAgICAgICAgICA6IGJsb2NrVHlwZSh0eXBlKQorICAgICAgICAgICAg
LCBjb250aW51YXRpb24oY29udGludWF0aW9uKQogICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNp
YWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChzaWduYXR1cmUgIT0gVm9pZCkKQEAgLTEz
OSwzNSArMTA3LDM1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkxvb3A6
ICAiKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG91dC5wcmludCgiQ29udGludWF0aW9uOiAiLCBjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIp
OworICAgICAgICAgICAgb3V0LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24s
ICIsIFNwZWNpYWw6ICIpOwogICAgICAgICAgICAgaWYgKHNwZWNpYWwpCiAgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCpzcGVjaWFsKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIk5vbmUiKTsKICAgICAgICAgfQogCi0gICAgICAgIEJsb2NrVHlwZSB0eXBl
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFzcGVjaWFsKQotICAgICAgICAg
ICAgICAgIHJldHVybiBCbG9ja1R5cGU6OkJsb2NrOwotICAgICAgICAgICAgaWYgKGNvbnRpbnVh
dGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gQmxvY2tUeXBlOjpJZjsKLSAgICAgICAgICAg
IHJldHVybiBCbG9ja1R5cGU6Okxvb3A7Ci0gICAgICAgIH0KKyAgICAgICAgQmxvY2tUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBibG9ja1R5cGU7IH0KIAotICAgICAgICBCYXNpY0Jsb2NrKiB0
YXJnZXRCbG9ja0ZvckJyYW5jaChQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIGJvb2wgaGFzTm9u
Vm9pZFNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIHJlc3VsdC5zaXplKCk7IH0KKworICAgICAg
ICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9ja0ZvckJyYW5jaCgpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmICh0eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQogICAgICAgICAgICAgICAgIHJldHVy
biBzcGVjaWFsOwotICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbi5nZXQocHJvYyk7Cisg
ICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBjb252ZXJ0SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUo
KSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6
QmxvY2s7CisgICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIEIzSVJHZW5lcmF0b3I7Ci0gICAgICAgIC8v
IFdlIHVzZSBhIExhenlCbG9jayBmb3IgdGhlIGNvbnRpbnVhdGlvbiBzaW5jZSBCMzo6dmFsaWRh
dGUgZG9lcyBub3QgbGlrZSBvcnBoYW5lZCBibG9ja3MuIE5vdGUsCi0gICAgICAgIC8vIGl0J3Mg
cG9zc2libGUgdG8gY3JlYXRlIGFuIG9ycGhhbmVkIGJsb2NrIGJ5IGRvaW5nIHNvbWV0aGluZyBs
aWtlIChibG9jayAocmV0dXJuICguLi4pKSkuIEluCi0gICAgICAgIC8vIHRoYXQgZXhhbXBsZSwg
aWYgd2UgZWFnZXJseSBhbGxvY2F0ZSBhIEJhc2ljQmxvY2sgZm9yIHRoZSBjb250aW51YXRpb24g
aXQgd2lsbCBuZXZlciBiZSByZWFjaGFibGUuCi0gICAgICAgIExhenlCbG9jayBjb250aW51YXRp
b247CisgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGU7CisgICAgICAgIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbjsKICAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKICAgICAgICAgVmVjdG9y
PFZhcmlhYmxlKiwgMT4gcmVzdWx0OwogICAgIH07CkBAIC0xNzYsNiArMTQ0LDggQEAgcHVibGlj
OgogICAgIHR5cGVkZWYgQ29udHJvbERhdGEgQ29udHJvbFR5cGU7CiAgICAgdHlwZWRlZiBWZWN0
b3I8RXhwcmVzc2lvblR5cGUsIDE+IEV4cHJlc3Npb25MaXN0OwogICAgIHR5cGVkZWYgVmVjdG9y
PFZhcmlhYmxlKiwgMT4gUmVzdWx0TGlzdDsKKyAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2VyPEIz
SVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnkgQ29udHJvbEVudHJ5OworCiAgICAgc3RhdGljIGNv
bnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxscHRyOwogCiAgICAg
QjNJUkdlbmVyYXRvcihNZW1vcnkqLCBQcm9jZWR1cmUmLCBWZWN0b3I8VW5saW5rZWRDYWxsPiYg
dW5saW5rZWRDYWxscyk7CkBAIC0yMDEsMTYgKzE3MSwxNiBAQCBwdWJsaWM6CiAgICAgQ29udHJv
bERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOwogICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlw
ZSBzaWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOwogICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRh
Jik7CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgRXhwcmVz
c2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
QnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBl
bmRCbG9jayhDb250cm9sRGF0YSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwor
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJl
c3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CiAKICAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRDYWxsKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBGdW5jdGlvbklu
Zm9ybWF0aW9uJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CiAKLSAgICBib29sIGlzQ29udGludWF0aW9uUmVhY2hhYmxlKENvbnRyb2xEYXRh
Jik7Ci0KLSAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYgY29udHJvbFN0
YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICB2b2lkIGR1
bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVz
c2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAKICAgICB2b2lkIHNldEVycm9yTWVzc2FnZShT
dHJpbmcmJikgeyBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsgfQogCkBAIC00OTgsMTYgKzQ2
OCwxNyBAQCBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRD
b25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbAogCiBCM0lSR2VuZXJhdG9yOjpDb250cm9s
RGF0YSBCM0lSR2VuZXJhdG9yOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKIHsKLSAgICByZXR1
cm4gQ29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUpOworICAgIHJldHVybiBDb250cm9sRGF0
YShtX3Byb2MsIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgbV9wcm9jLmFkZEJsb2NrKCkp
OwogfQogCiBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRMb29w
KFR5cGUgc2lnbmF0dXJlKQogewogICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX3Byb2MuYWRkQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsK
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwg
T3JpZ2luKCksIGJvZHkpOwogICAgIGJvZHktPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2Nr
KTsKICAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7Ci0gICAgcmV0dXJuIENvbnRyb2xEYXRhKG1f
cHJvYywgc2lnbmF0dXJlLCBib2R5KTsKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBz
aWduYXR1cmUsIEJsb2NrVHlwZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsKIH0KIAogYm9v
bCBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2ln
bmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KQpAQCAtNTI0LDE3ICs0OTUsMjIgQEAgYm9vbCBC
M0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0
dXJlLCBDb250cm9sVHlwZSYKICAgICBub3RUYWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50
QmxvY2spOwogCiAgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKLSAgICByZXN1bHQgPSBDb250
cm9sRGF0YShtX3Byb2MsIHNpZ25hdHVyZSwgbm90VGFrZW4sIGNvbnRpbnVhdGlvbik7CisgICAg
cmVzdWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6SWYsIGNv
bnRpbnVhdGlvbiwgbm90VGFrZW4pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEIzSVJH
ZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0
JikKK2Jvb2wgQjNJUkdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9sRGF0YSYgZGF0YSwgY29uc3Qg
RXhwcmVzc2lvbkxpc3QmIGN1cnJlbnRTdGFjaykKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGRhdGEuY29udGludWF0aW9u
KTsKKyAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2Jvb2wgQjNJ
UkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpCiB7Ci0g
ICAgQVNTRVJUKGRhdGEuY29udGludWF0aW9uKTsKKyAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0g
QmxvY2tUeXBlOjpJZik7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7Ci0gICAg
Ly8gQ2xlYXIgdGhlIHNwZWNpYWwgcG9pbnRlciBzbyB0aGF0IHdoZW4gd2UgcGFyc2UgdGhlIGVu
ZCB3ZSBkb24ndCB0aGluayB0aGF0IHRoaXMgYmxvY2sgaXMgYW4gaWYgYmxvY2suCi0gICAgZGF0
YS5zcGVjaWFsID0gbnVsbHB0cjsKLSAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBl
OjpCbG9jayk7CisgICAgZGF0YS5jb252ZXJ0SWZUb0Jsb2NrKCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTU1MCw4ICs1MjYsMTAgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4o
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykKIAogYm9vbCBCM0lSR2VuZXJhdG9y
OjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykKIHsKLSAgICBCYXNpY0Jsb2NrKiB0
YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKG1fcHJvYyk7Ci0gICAgdW5pZnlWYWx1
ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnJlc3VsdCk7CisgICAgaWYgKGRhdGEudHlw
ZSgpICE9IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0
dXJuVmFsdWVzLCBkYXRhLnJlc3VsdCk7CisKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRh
LnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CiAgICAgaWYgKGNvbmRpdGlvbikgewogICAgICAgICBC
YXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBPcmlnaW4o
KSwgY29uZGl0aW9uKTsKQEAgLTU2NywyNCArNTQ1LDMxIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6
YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNv
bnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2so
Q29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCitib29s
IEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25M
aXN0JiBleHByZXNzaW9uU3RhY2spCiB7Ci0gICAgaWYgKCFkYXRhLmNvbnRpbnVhdGlvbikKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9s
RGF0YTsKKworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YS5y
ZXN1bHQpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBKdW1wLCBPcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOworICAgIGRhdGEuY29udGludWF0
aW9uLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1cm4gYWRkRW5k
VG9VbnJlYWNoYWJsZShlbnRyeSk7Cit9CisKKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRFbmRU
b1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpCit7CisgICAgQ29udHJvbERhdGEmIGRh
dGEgPSBlbnRyeS5jb250cm9sRGF0YTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuY29udGlu
dWF0aW9uOwogCi0gICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gZGF0YS5jb250aW51YXRp
b24uZ2V0KG1fcHJvYyk7CiAgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsK
LSAgICAgICAgQVNTRVJUKCFkYXRhLnNwZWNpYWwtPnNpemUoKSAmJiAhZGF0YS5zcGVjaWFsLT5z
dWNjZXNzb3JzKCkuc2l6ZSgpKTsKLSAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkg
ZWxzZSBibG9jayB3ZSBuZWVkIHRvIHBvaW50IHRoZSBub3RUYWtlbiBicmFuY2ggdG8gdGhlIGNv
bnRpbnVhdGlvbi4KLSAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBKdW1wLCBPcmlnaW4oKSk7Ci0gICAgICAgIGRhdGEuc3BlY2lhbC0+c2V0U3VjY2Vz
c29ycyhGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7Ci0gICAgICAgIGNvbnRpbnVhdGlv
bi0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5h
cHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgbV9jdXJyZW50Qmxv
Y2spOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFs
KTsKICAgICB9CiAKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRh
dGEucmVzdWx0KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1f
cHJvYywgSnVtcCwgT3JpZ2luKCksIGNvbnRpbnVhdGlvbik7Ci0gICAgY29udGludWF0aW9uLT5h
ZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBjb250
aW51YXRpb247CisgICAgZm9yIChWYXJpYWJsZSogcmVzdWx0IDogZGF0YS5yZXN1bHQpCisgICAg
ICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHJlc3Vs
dCkpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTYxNCwyMiArNTk5LDYgQEAgYm9vbCBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IEZ1bmN0
aW9uSW5mb3JtYXRpb24mIGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBCM0lSR2VuZXJh
dG9yOjppc0NvbnRpbnVhdGlvblJlYWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkKLXsKLSAgICAv
LyBJZiBub3RoaW5nIHRhcmdldHMgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgY3VycmVudCBibG9j
ayB0aGVuIHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlCi0gICAgLy8gYW4gb3JwaGFuZWQgQmFzaWNC
bG9jayBzaW5jZSBpdCBjYW4ndCBiZSByZWFjaGVkIGJ5IGZhbGx0aHJvdWdoLgotICAgIGlmICgh
ZGF0YS5jb250aW51YXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fY3VycmVu
dEJsb2NrID0gZGF0YS5jb250aW51YXRpb24uZ2V0KG1fcHJvYyk7Ci0gICAgaWYgKGRhdGEudHlw
ZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdD
b250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwotICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeShWYXJp
YWJsZSogdmFyaWFibGUsIEV4cHJlc3Npb25UeXBlIHNvdXJjZSkKIHsKICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgdmFy
aWFibGUsIHNvdXJjZSk7CkBAIC02MzcsMjMgKzYwNiwzNSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6
OnVuaWZ5KFZhcmlhYmxlKiB2YXJpYWJsZSwgRXhwcmVzc2lvblR5cGUgc291cmNlKQogCiB2b2lk
IEIzSVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0
JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgcmVzdWx0KQogewotICAgIEFTU0VSVChyZXN1bHQu
c2l6ZSgpID49IHJlc3VsdFN0YWNrLnNpemUoKSk7CisgICAgQVNTRVJUKHJlc3VsdC5zaXplKCkg
PD0gcmVzdWx0U3RhY2suc2l6ZSgpKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVz
dWx0U3RhY2suc2l6ZSgpOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQu
c2l6ZSgpOyArK2kpCiAgICAgICAgIHVuaWZ5KHJlc3VsdFtpXSwgcmVzdWx0U3RhY2tbaV0pOwog
fQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYg
Y29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQorc3Rh
dGljIHZvaWQgZHVtcEV4cHJlc3Npb25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBj
b25zdCBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQorewor
ICAgIGRhdGFMb2dMbihjb21tYSwgIkV4cHJlc3Npb25TdGFjazoiKTsKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgIGRhdGFMb2dMbihj
b21tYSwgKmV4cHJlc3Npb24pOworfQorCit2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3Qg
VmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3Qm
IGV4cHJlc3Npb25TdGFjaykKIHsKICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgR3JhcGg6Iik7
CiAgICAgZGF0YUxvZyhtX3Byb2MpOwogICAgIGRhdGFMb2dMbigiV2l0aCBjdXJyZW50IGJsb2Nr
OiIsICptX2N1cnJlbnRCbG9jayk7CiAgICAgZGF0YUxvZ0xuKCJDb250cm9sIHN0YWNrOiIpOwot
ICAgIGZvciAoY29uc3QgQ29udHJvbFR5cGUmIGRhdGEgOiBjb250cm9sU3RhY2spCi0gICAgICAg
IGRhdGFMb2dMbigiICAiLCBkYXRhKTsKLSAgICBkYXRhTG9nTG4oIkV4cHJlc3Npb25TdGFjazoi
KTsKLSAgICBmb3IgKGNvbnN0IEV4cHJlc3Npb25UeXBlJiBleHByZXNzaW9uIDogZXhwcmVzc2lv
blN0YWNrKQotICAgICAgICBkYXRhTG9nTG4oIiAgIiwgKmV4cHJlc3Npb24pOworICAgIGZvciAo
YXV0byYgZGF0YSA6IGNvbnRyb2xTdGFjaykgeworICAgICAgICBkYXRhTG9nTG4oIiAgIiwgZGF0
YS5jb250cm9sRGF0YSk7CisgICAgICAgIGlmIChkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNr
LnNpemUoKSkgeworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgICAgIiwgIiAgd2l0
aCAiKTsKKyAgICAgICAgICAgIGR1bXBFeHByZXNzaW9uU3RhY2soY29tbWEsIGRhdGEuZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2spOworICAgICAgICB9CisgICAgfQorCisgICAgQ29tbWFQcmludGVy
IGNvbW1hKCIgICIsICIiKTsKKyAgICBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbW1hLCBleHByZXNz
aW9uU3RhY2spOwogICAgIGRhdGFMb2dMbigiXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCA0MjM4Njk2NTY0YjE2MjNk
MGJhNjljMDE3OTczZDBkMGM3ZDg3NjJmLi41ZjIwODE3ODkwMmJmNjY3OWQxMjIzNWQ0MDljOTM4
ZDgzZjMwOGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVu
Y3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaApAQCAtNDMsMjQgKzQzLDMxIEBAIGNsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVi
bGljIFBhcnNlciB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHBy
ZXNzaW9uVHlwZSBFeHByZXNzaW9uVHlwZTsKICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6
OkNvbnRyb2xUeXBlIENvbnRyb2xUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGV4dDo6
RXhwcmVzc2lvbkxpc3QgRXhwcmVzc2lvbkxpc3Q7CiAKICAgICBGdW5jdGlvblBhcnNlcihDb250
ZXh0JiwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3Ro
LCBjb25zdCBTaWduYXR1cmUqLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1
bmN0aW9ucyk7CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOwogCisgICAg
c3RydWN0IENvbnRyb2xFbnRyeSB7CisgICAgICAgIEV4cHJlc3Npb25MaXN0IGVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrOworICAgICAgICBDb250cm9sVHlwZSBjb250cm9sRGF0YTsKKyAgICB9Owor
CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQmxvY2soKTsKICAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZUV4cHJlc3Npb24oT3BUeXBlKTsKICAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUpOworICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZFJldHVybigpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHVuaWZ5Q29udHJvbChWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiwgdW5zaWduZWQgbGV2ZWwpOwog
CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcG9wRXhwcmVzc2lvblN0YWNrKEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOwogCiAgICAgQ29udGV4dCYgbV9jb250ZXh0OwotICAgIFZlY3RvcjxF
eHByZXNzaW9uVHlwZSwgMT4gbV9leHByZXNzaW9uU3RhY2s7Ci0gICAgVmVjdG9yPENvbnRyb2xU
eXBlPiBtX2NvbnRyb2xTdGFjazsKKyAgICBFeHByZXNzaW9uTGlzdCBtX2V4cHJlc3Npb25TdGFj
azsKKyAgICBWZWN0b3I8Q29udHJvbEVudHJ5PiBtX2NvbnRyb2xTdGFjazsKICAgICBjb25zdCBT
aWduYXR1cmUqIG1fc2lnbmF0dXJlOwogICAgIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0
aW9uPiYgbV9mdW5jdGlvbnM7CiAgICAgdW5zaWduZWQgbV91bnJlYWNoYWJsZUJsb2NrcyB7IDAg
fTsKQEAgLTEyMCw3ICsxMjcsNyBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJz
ZUJsb2NrKCkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChvcCA9PSBPcFR5cGU6OkVuZCAmJiAh
bV9jb250cm9sU3RhY2suc2l6ZSgpKQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBy
ZXR1cm4gbV91bnJlYWNoYWJsZUJsb2NrcyA/IHRydWUgOiBhZGRSZXR1cm4oKTsKIAogICAgICAg
ICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcykgewogICAgICAgICAgICAgaWYgKCFwYXJzZVVucmVh
Y2hhYmxlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSkpIHsKQEAgLTEzNiw5ICsx
NDMsMjQgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCbG9jaygpCiAKICAg
ICB9CiAKLSAgICAvLyBJJ20gbm90IHN1cmUgaWYgd2Ugc2hvdWxkIGNoZWNrIHRoZSBleHByZXNz
aW9uIHN0YWNrIGhlcmUuLi4KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYm9vbCBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6YWRkUmV0dXJuKCkKK3sKKyAgICBFeHByZXNzaW9uTGlzdCBy
ZXR1cm5WYWx1ZXM7CisgICAgaWYgKG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlICE9IFZvaWQpIHsK
KyAgICAgICAgRXhwcmVzc2lvblR5cGUgcmV0dXJuVmFsdWU7CisgICAgICAgIGlmICghcG9wRXhw
cmVzc2lvblN0YWNrKHJldHVyblZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChyZXR1cm5WYWx1ZSk7CisgICAgfQorCisgICAgbV91
bnJlYWNoYWJsZUJsb2NrcyA9IDE7CisgICAgcmV0dXJuIG1fY29udGV4dC5hZGRSZXR1cm4ocmV0
dXJuVmFsdWVzKTsKK30KKwogI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCkgY2Fz
ZSBuYW1lOgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgpAQCAtMjg4LDcgKzMxMCw4IEBA
IGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3Ap
CiAgICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUoaW5saW5lU2lnbmF0dXJlKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBlbmQobV9jb250
ZXh0LmFkZEJsb2NrKGlubGluZVNpZ25hdHVyZSkpOworICAgICAgICBtX2NvbnRyb2xTdGFjay5h
cHBlbmQoeyBXVEZNb3ZlKG1fZXhwcmVzc2lvblN0YWNrKSwgbV9jb250ZXh0LmFkZEJsb2NrKGlu
bGluZVNpZ25hdHVyZSkgfSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gRXhwcmVzc2lv
bkxpc3QoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yOTcsNyArMzIwLDgg
QEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBv
cCkKICAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZShpbmxpbmVTaWduYXR1cmUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZChtX2Nv
bnRleHQuYWRkTG9vcChpbmxpbmVTaWduYXR1cmUpKTsKKyAgICAgICAgbV9jb250cm9sU3RhY2su
YXBwZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIG1fY29udGV4dC5hZGRMb29wKGlu
bGluZVNpZ25hdHVyZSkgfSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gRXhwcmVzc2lv
bkxpc3QoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zMTQsNyArMzM4LDgg
QEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBv
cCkKICAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkSWYoY29uZGl0aW9uLCBpbmxpbmVTaWduYXR1
cmUsIGNvbnRyb2wpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1fY29u
dHJvbFN0YWNrLmFwcGVuZChjb250cm9sKTsKKyAgICAgICAgbV9jb250cm9sU3RhY2suYXBwZW5k
KHsgV1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIGNvbnRyb2wgfSk7CisgICAgICAgIG1fZXhw
cmVzc2lvblN0YWNrID0gRXhwcmVzc2lvbkxpc3QoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC0zMjMsNyArMzQ4LDExIEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAgICAgICAgICAgICBtX2NvbnRleHQuc2V0RXJy
b3JNZXNzYWdlKCJBdHRlbXB0ZWQgdG8gdXNlIGVsc2UgYmxvY2sgYXQgdGhlIHRvcC1sZXZlbCBv
ZiBhIGZ1bmN0aW9uIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG1fY29udGV4dC5hZGRFbHNlKG1fY29udHJvbFN0YWNrLmxhc3QoKSwgbV9l
eHByZXNzaW9uU3RhY2spOworCisgICAgICAgIGlmICghbV9jb250ZXh0LmFkZEVsc2UobV9jb250
cm9sU3RhY2subGFzdCgpLmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluaygwKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkJyOgpAQCAt
MzM5LDI5ICszNjgsMzEgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHBy
ZXNzaW9uKE9wVHlwZSBvcCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX3VucmVhY2hh
YmxlQmxvY2tzID0gMTsKIAotICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0
YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdOworICAgICAgICBDb250cm9s
VHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0
YXJnZXRdLmNvbnRyb2xEYXRhOwogCiAgICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkQnJhbmNo
KGRhdGEsIGNvbmRpdGlvbiwgbV9leHByZXNzaW9uU3RhY2spOwogICAgIH0KIAogICAgIGNhc2Ug
T3BUeXBlOjpSZXR1cm46IHsKLSAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiByZXR1
cm5WYWx1ZXM7Ci0gICAgICAgIGlmIChtX3NpZ25hdHVyZS0+cmV0dXJuVHlwZSAhPSBWb2lkKSB7
Ci0gICAgICAgICAgICBFeHByZXNzaW9uVHlwZSByZXR1cm5WYWx1ZTsKLSAgICAgICAgICAgIGlm
ICghcG9wRXhwcmVzc2lvblN0YWNrKHJldHVyblZhbHVlKSkKLSAgICAgICAgICAgIHJldHVyblZh
bHVlcy5hcHBlbmQocmV0dXJuVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV91bnJlYWNo
YWJsZUJsb2NrcyA9IDE7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkUmV0dXJuKHJldHVy
blZhbHVlcyk7CisgICAgICAgIHJldHVybiBhZGRSZXR1cm4oKTsKICAgICB9CiAKICAgICBjYXNl
IE9wVHlwZTo6RW5kOiB7Ci0gICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2NvbnRyb2xTdGFj
ay50YWtlTGFzdCgpOwotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmVuZEJsb2NrKGRhdGEsIG1f
ZXhwcmVzc2lvblN0YWNrKTsKKyAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBtX2NvbnRyb2xT
dGFjay50YWtlTGFzdCgpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGxpdHRsZSB3ZWly
ZCBpbiB0aGF0IGl0IHdpbGwgbW9kaWZ5IHRoZSBleHByZXNzaW9uU3RhY2sgZm9yIHRoZSByZXN1
bHQgb2YgdGhlIGJsb2NrLgorICAgICAgICAvLyBUaGF0J3MgYSBsaXR0bGUgdG9vIGVmZmVjdGZ1
bCBmb3IgbWUgYnV0IEkgZG9uJ3QgaGF2ZSBhIGJldHRlciBBUEkgcmlnaHQgbm93LgorICAgICAg
ICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzNTMK
KyAgICAgICAgaWYgKCFtX2NvbnRleHQuZW5kQmxvY2soZGF0YSwgbV9leHByZXNzaW9uU3RhY2sp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5z
d2FwKGRhdGEuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBjYXNlIE9wVHlwZTo6VW5yZWFjaGFibGU6IHsKKyAgICAgICAgbV91bnJl
YWNoYWJsZUJsb2NrcyA9IDE7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNh
c2UgT3BUeXBlOjpVbnJlYWNoYWJsZToKICAgICBjYXNlIE9wVHlwZTo6U2VsZWN0OgogICAgIGNh
c2UgT3BUeXBlOjpCclRhYmxlOgogICAgIGNhc2UgT3BUeXBlOjpOb3A6CkBAIC0zODYsMTcgKzQx
NywyMCBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhw
cmVzc2lvbihPcFR5cGUgb3ApCiAgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0g
bV9jb250cm9sU3RhY2subGFzdCgpOwotICAgICAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxv
Y2tUeXBlOjpJZik7CisgICAgICAgIENvbnRyb2xFbnRyeSYgZGF0YSA9IG1fY29udHJvbFN0YWNr
Lmxhc3QoKTsKICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDA7Ci0gICAgICAgIHJldHVy
biBtX2NvbnRleHQuYWRkRWxzZShkYXRhLCBtX2V4cHJlc3Npb25TdGFjayk7CisgICAgICAgIGlm
ICghbV9jb250ZXh0LmFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEuY29udHJvbERhdGEpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJpbmso
MCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpFbmQ6
IHsKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MgPT0gMSkgewotICAgICAgICAgICAg
Q29udHJvbFR5cGUgZGF0YSA9IG1fY29udHJvbFN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgICAg
ICBpZiAoIW1fY29udGV4dC5pc0NvbnRpbnVhdGlvblJlYWNoYWJsZShkYXRhKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIENvbnRyb2xFbnRyeSBkYXRhID0gbV9j
b250cm9sU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGlmICghbV9jb250ZXh0LmFkZEVu
ZFRvVW5yZWFjaGFibGUoZGF0YSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc3dhcChkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0
YWNrKTsKICAgICAgICAgfQogICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzLS07CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtNDM5LDEyICs0NzMsMTIgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oT3BUeXBlIG9wKQogdGVtcGxhdGU8
dHlwZW5hbWUgQ29udGV4dD4KIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBvcEV4cHJl
c3Npb25TdGFjayhFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQogewotICAgIGlmICghbV9leHByZXNz
aW9uU3RhY2suc2l6ZSgpKSB7CisgICAgaWYgKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkgewog
ICAgICAgICByZXN1bHQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBtX2NvbnRleHQuc2V0RXJyb3JNZXNzYWdlKCJBdHRl
bXB0ZWQgdG8gdXNlIGFuIHN0YWNrIHZhbHVlIHdoZW4gbm9uZSBleGlzdGVkIik7CisgICAgbV9j
b250ZXh0LnNldEVycm9yTWVzc2FnZSgiQXR0ZW1wdGVkIHRvIHVzZSBhIHN0YWNrIHZhbHVlIHdo
ZW4gbm9uZSBleGlzdGVkIik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAppbmRleCBiODA5Y2RkMDY4YjE4MWExYmZl
OTY4ZDhhMDk4ZTE1ZjE4OTlkZTBmLi4zOTgzYjdhMjE2NzFjOWMyYmI4M2Y1MDczNTExZmE4MGZh
Y2JlOGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRh
dGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAK
QEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJX
YXNtRnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewpAQCAtNjIsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAorICAgICAgICBib29sIGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7IHJldHVy
biBtX3NpZ25hdHVyZSAhPSBWb2lkOyB9CisKICAgICAgICAgQmxvY2tUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX2Jsb2NrVHlwZTsgfQogICAgICAgICBUeXBlIHNpZ25hdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2lnbmF0dXJlOyB9CiAgICAgcHJpdmF0ZToKQEAgLTcxLDYgKzc0LDggQEAg
cHVibGljOgogICAgIHR5cGVkZWYgVHlwZSBFeHByZXNzaW9uVHlwZTsKICAgICB0eXBlZGVmIENv
bnRyb2xEYXRhIENvbnRyb2xUeXBlOwogICAgIHR5cGVkZWYgVmVjdG9yPEV4cHJlc3Npb25UeXBl
LCAxPiBFeHByZXNzaW9uTGlzdDsKKyAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRl
Pjo6Q29udHJvbEVudHJ5IENvbnRyb2xFbnRyeTsKKwogICAgIHN0YXRpYyBjb25zdCBFeHByZXNz
aW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBWb2lkOwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYpOwpAQCAtOTQsMTUgKzk5LDE3
IEBAIHB1YmxpYzoKICAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9vcChU
eXBlIHNpZ25hdHVyZSk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVz
c2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbERhdGEmIHJlc3VsdCk7
CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0
IEV4cHJlc3Npb25MaXN0Jik7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRv
VW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFJldHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKICAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvbkxp
c3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxv
Y2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkm
KTsKKwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxs
ZWVJbmRleCwgY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIGlzQ29udGludWF0aW9uUmVhY2hhYmxlKENvbnRyb2xEYXRhJikgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZT4mIGNv
bnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAg
dm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0
IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwogCiAgICAgdm9pZCBzZXRFcnJvck1l
c3NhZ2UoU3RyaW5nJiYgbWVzc2FnZSkgeyBBU1NFUlQobV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkp
OyBtX2Vycm9yTWVzc2FnZSA9IFdURk1vdmUobWVzc2FnZSk7IH0KICAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KQEAgLTE4NCwxMyArMTkx
LDE4IEBAIGJvb2wgVmFsaWRhdGU6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlw
ZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1CiAKIGJvb2wgVmFsaWRhdGU6OmFkZEVsc2Uo
Q29udHJvbFR5cGUmIGN1cnJlbnQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiB2YWx1ZXMpCiB7Ci0g
ICAgaWYgKGN1cnJlbnQudHlwZSgpICE9IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgbV9lcnJv
ck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIGFkZCBlbHNlIGJsb2NrIHRvIHNv
bWV0aGluZyBvdGhlciB0aGFuIGFuIGlmIik7CisgICAgaWYgKCF1bmlmeSh2YWx1ZXMsIGN1cnJl
bnQpKSB7CisgICAgICAgIEFTU0VSVChlcnJvck1lc3NhZ2UoKSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBpZiAoIXVuaWZ5KHZhbHVlcywgY3VycmVudCkpIHsKLSAgICAg
ICAgQVNTRVJUKGVycm9yTWVzc2FnZSgpKTsKKyAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFi
bGUoY3VycmVudCk7Cit9CisKK2Jvb2wgVmFsaWRhdGU6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENv
bnRyb2xUeXBlJiBjdXJyZW50KQoreworICAgIGlmIChjdXJyZW50LnR5cGUoKSAhPSBCbG9ja1R5
cGU6OklmKSB7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdGlu
ZyB0byBhZGQgZWxzZSBibG9jayB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBpZiIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yMTksNyArMjMxLDcgQEAgYm9vbCBWYWxp
ZGF0ZTo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiB0YXJnZXQsIEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgY29uc3QgRXgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICh0
YXJnZXQudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpCisgICAgaWYgKHRhcmdldC50eXBlKCkgPT0g
QmxvY2tUeXBlOjpMb29wKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICh0YXJnZXQu
c2lnbmF0dXJlKCkgPT0gVm9pZCkKQEAgLTIzMywyMCArMjQ1LDMzIEBAIGJvb2wgVmFsaWRhdGU6
OmFkZEJyYW5jaChDb250cm9sVHlwZSYgdGFyZ2V0LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IGNvbnN0IEV4CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFZhbGlkYXRlOjplbmRCbG9j
ayhDb250cm9sVHlwZSYgYmxvY2ssIEV4cHJlc3Npb25MaXN0JiBzdGFjaykKK2Jvb2wgVmFsaWRh
dGU6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBzdGFjaykK
IHsKKyAgICBDb250cm9sRGF0YSYgYmxvY2sgPSBlbnRyeS5jb250cm9sRGF0YTsKICAgICBpZiAo
YmxvY2suc2lnbmF0dXJlKCkgPT0gVm9pZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICBp
ZiAoIXN0YWNrLnNpemUoKSkgeworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmco
IkJsb2NrIGZhbGx0aG91Z2ggZXhwZWN0ZWQgdHlwZTogIiwgdG9TdHJpbmcoYmxvY2suc2lnbmF0
dXJlKCkpLCAiIGJ1dCB0aGUgc3RhY2sgd2FzIGVtcHR5Iik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CiAKLSAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID09IDEpOwotICAgIGlmIChibG9j
ay5zaWduYXR1cmUoKSA9PSBzdGFja1swXSkKKyAgICBpZiAoYmxvY2suc2lnbmF0dXJlKCkgPT0g
c3RhY2subGFzdCgpKSB7CisgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFw
cGVuZChibG9jay5zaWduYXR1cmUoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAog
ICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQmxvY2sgZmFsbHRocm91Z2ggaGFzIGV4
cGVjdGVkIHR5cGU6ICIsIHRvU3RyaW5nKGJsb2NrLnNpZ25hdHVyZSgpKSwgIiBidXQgcHJvZHVj
ZWQgdHlwZTogIiwgdG9TdHJpbmcoYmxvY2suc2lnbmF0dXJlKCkpKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK2Jvb2wgVmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5
JiBlbnRyeSkKK3sKKyAgICBpZiAoZW50cnkuY29udHJvbERhdGEuc2lnbmF0dXJlKCkgIT0gVm9p
ZCkKKyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGVudHJ5LmNv
bnRyb2xEYXRhLnNpZ25hdHVyZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBWYWxp
ZGF0ZTo6YWRkQ2FsbCh1bnNpZ25lZCwgY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbywg
Y29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkKIHsKICAgICBpZiAoaW5mby5zaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgIT0gYXJncy5z
aXplKCkpIHsKQEAgLTI4OCw5ICszMTMsMTAgQEAgYm9vbCBWYWxpZGF0ZTo6dW5pZnkoY29uc3Qg
RXhwcmVzc2lvbkxpc3QmIHZhbHVlcywgY29uc3QgQ29udHJvbFR5cGUmIGJsb2NrKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBWYWxpZGF0ZTo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJv
bFR5cGU+JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKQordm9pZCBWYWxpZGF0ZTo6ZHVtcChjb25z
dCBWZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JikKIHsKLSAgICBk
YXRhTG9nTG4oIlZhbGlkYXRpbmciKTsKKyAgICAvLyBJZiB5b3UgbmVlZCB0aGlzIHRoZW4geW91
IHNob3VsZCBmaXggdGhlIHZhbGlkYXRvcidzIGVycm9yIG1lc3NhZ2VzIGluc3RlYWQuLi4KKyAg
ICAvLyBUaGluayBvZiB0aGlzIGFzIHBlbmFuY2UgZm9yIHRoZSBzaW4gb2YgYmFkIGVycm9yIG1l
c3NhZ2VzLgogfQogCiBTdHJpbmcgdmFsaWRhdGVGdW5jdGlvbihjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHNpemVfdCBsZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBWZWN0
b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucykKQEAgLTI5OSw2ICszMjUsMTAgQEAg
U3RyaW5nIHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3QgbGVu
Z3RoLCBjb25zdCBTaWduYXR1cmUqIHMKICAgICBGdW5jdGlvblBhcnNlcjxWYWxpZGF0ZT4gdmFs
aWRhdG9yKGNvbnRleHQsIHNvdXJjZSwgbGVuZ3RoLCBzaWduYXR1cmUsIGZ1bmN0aW9ucyk7CiAg
ICAgaWYgKCF2YWxpZGF0b3IucGFyc2UoKSkgewogICAgICAgICAvLyBGSVhNRTogYWRkIGJldHRl
ciBsb2NhdGlvbiBpbmZvcm1hdGlvbiBoZXJlLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjQyODgKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBuZXZl
ciBub3QgaGF2ZSBhbiBlcnJvciBtZXNzYWdlIGlmIHdlIHJldHVybiBmYWxzZS4KKyAgICAgICAg
Ly8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzU0Cisg
ICAgICAgIGlmIChjb250ZXh0LmVycm9yTWVzc2FnZSgpLmlzTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuICJVbmtub3duIGVycm9yIjsKICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3JNZXNz
YWdlKCk7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293786</attachid>
            <date>2016-11-03 12:23:52 -0700</date>
            <delta_ts>2016-11-03 13:34:45 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-164100-20161103121952.patch</filename>
            <type>text/plain</type>
            <size>33472</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
NjMzZTdhZjU1NDJkYmFhYzYzZGZhOGEzNjg3YjExMTcxZGNmNWM5Li5iMDJmOTVjNzU3MzlkZWJh
MThhNTY0NmIzNGIwZGJkMWZmMGIwM2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw0NSBAQAogMjAxNi0xMS0wMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KIAorICAgICAgICBXYXNtIHN0YXJ0cyBhIG5ldyBzdGFjayB3aGVuZXZlciBpdCBhZGRz
IGEgbmV3IGJsb2NrIGFuZCBoYXMgcmV0dXJuIHR5cGVzIGZvciBibG9ja3MuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBUaGlzIHBhdGNoIG92ZXJoYXVscyBt
dWNoIG9mIHRoZSBXYXNtIGZ1bmN0aW9uIHBhcnNlciwgdmFsaWRhdG9yLCBhbmQgQjMgSVIgZ2Vu
ZXJhdG9yCisgICAgICAgIHRvIHdvcmsgd2l0aCBibG9jayByZXR1cm4gdHlwZXMuIEluIFdhc20s
IGJsb2NrcyBjYW4gYWN0IGFzIGV4cHJlc3Npb25zIGFuZCBoYXZlIGEKKyAgICAgICAgcmV0dXJu
IHZhbHVlLiBNb3N0IG9mIHRoZSBjb250cm9sIGZsb3cgb3BlcmF0b3JzIG5lZWRlZCB0byBiZSBy
ZXdyaXR0ZW4gaW4gb3JkZXIgdG8KKyAgICAgICAgc3VwcG9ydCB0aGlzIGZlYXR1cmUuIFRvIGVu
YWJsZSByZXR1cm4gdHlwZXMgdGhlIGZ1bmN0aW9uIHBhcnNlciBuZWVkZWQgdG8gYmUgYWJsZQor
ICAgICAgICB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSBleHByZXNzaW9uIHN0YWNrIGZyb20gcHJl
dmlvdXMgYmxvY2tzLCB3aGljaCBpcyBkb25lIHZpYSB0aGUKKyAgICAgICAgY29udHJvbCBzdGFj
ay4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVtb3ZlcyB0aGUgbGF6eSBjb250aW51YXRp
b24gYmxvY2sgc3lzdGVtIGFkZGVkIHByZXZpb3VzbHkuIEl0J3MKKyAgICAgICAgbm90IGNsZWFy
IGlmIHRoZXJlIHdvdWxkIGJlIGFueSBwZXJmb3JtYW5jZSB3aW4gZnJvbSBzdWNoIGEgc3lzdGVt
LiBUaGVyZSBhcmUgbGlrZWx5CisgICAgICAgIG1hbnkgb3RoZXIgdGhpbmdzIHdpdGggb3JkZXJz
IG9mIG1hZ25pdHVkZSBtb3JlIGltcGFjdCBvbiBCMyBJUiBnZW5lcmF0aW9uLiBUaGUKKyAgICAg
ICAgY29tcGxleGl0eSBjb3N0IG9mIHN1Y2ggYSBzeXN0ZW0gaXMgbm90IHdvcnRoIHRoZSBlZmZv
cnQgd2l0aG91dCBzdWZmaWNpZW50IGV2aWRlbmNlCisgICAgICAgIG90aGVyd2lzZS4KKworICAg
ICAgICAqIHRlc3RXYXNtLmNwcDoKKyAgICAgICAgKHJ1bldhc21UZXN0cyk6CisgICAgICAgICog
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBh
cnNlQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Oldhc206
OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpwb3BFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAq
IHdhc20vV2FzbVZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OkNv
bnRyb2xEYXRhOjpoYXNOb25Wb2lkU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFs
aWRhdGU6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkRWxzZVRv
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkQnJhbmNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmVuZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpWYWxpZGF0ZTo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OnZhbGlkYXRlRnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6aXNDb250aW51YXRpb25SZWFjaGFibGUp
OiBEZWxldGVkLgorCisyMDE2LTExLTAyICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBw
bGUuY29tPgorCiAgICAgICAgIFdlIHNob3VsZCBub3QgcG9wIGZyb20gYW4gZW1wdHkgc3RhY2sg
aW4gdGhlIFdhc20gZnVuY3Rpb24gcGFyc2VyLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0Mjc1CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0V2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3Bw
CmluZGV4IGQxYjg4ZDhkNTc4ZjM3Y2E3YjUzZDM1NjMyZDhlYTY0NjdlN2MzZDMuLjZlM2Y1ZDJk
MGI5YzJhY2FmZDQxMzE2N2Q3ZWRiNDg5MWEyNWQ5MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RX
YXNtLmNwcApAQCAtMjkzLDYgKzI5MywxMDcgQEAgc3RhdGljIHZvaWQgY2hlY2tQbGFuKFBsYW4m
IHBsYW4sIHVuc2lnbmVkIGV4cGVjdGVkTnVtYmVyT2ZGdW5jdGlvbnMpCiAvLyBGb3Igbm93IHdl
IGlubGluZSB0aGUgdGVzdCBmaWxlcy4KIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiB7Cisg
ICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQor
ICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaWYtdGhlbi1ib3RoLWZhbGx0aHJvdWdoIikg
KHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8vICAg
ICAgKGJsb2NrICRibG9jayBpMzIKKyAgICAgICAgLy8gICAgICAgKGlmIGkzMiAoaTMyLmVxIChn
ZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgICAodGhlbiAoaTMy
LmNvbnN0IDEpKQorICAgICAgICAvLyAgICAgICAgKGVsc2UKKyAgICAgICAgLy8gICAgICAgICAo
aTMyLmNvbnN0IDIpCisgICAgICAgIC8vICAgICAgICAgKGJyICRibG9jaykpCisgICAgICAgIC8v
ICAgICAgICApCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICApCisgICAgICAg
IC8vICAgICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAg
ICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAw
eDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgw
MiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5YywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4NjksIDB4NjYsIDB4MmQsIDB4NzQsIDB4NjgsIDB4NjUs
IDB4NmUsIDB4MmQsIDB4NjIsIDB4NmYsIDB4NzQsCisgICAgICAgICAgICAweDY4LCAweDJkLCAw
eDY2LCAweDYxLCAweDZjLCAweDZjLCAweDc0LCAweDY4LCAweDcyLCAweDZmLCAweDc1LCAweDY3
LCAweDY4LCAweDAwLCAweDAwLCAweDBhLAorICAgICAgICAgICAgMHg5YSwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHg5NCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgw
MSwgMHgwMSwgMHgxNCwgMHgwMCwKKyAgICAgICAgICAgIDB4MTAsIDB4MDAsIDB4NGQsIDB4MDMs
IDB4MDEsIDB4MTAsIDB4MDEsIDB4MDQsIDB4MTAsIDB4MDIsIDB4MDYsIDB4MDEsIDB4MGYsIDB4
MGYsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwor
ICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMCksIGJveGYoMzIpIH0pLCAxKSk7CisgICAg
ICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveGYoMSksIGJveGYoMzIpIH0pLCAyKSk7CisgICAgfQorCisgICAgeworICAg
ICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAv
LyAgICAgKGZ1bmMgKGV4cG9ydCAiaWYtdGhlbi1ib3RoLWZhbGx0aHJvdWdoIikgKHBhcmFtICR4
IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8vICAgICAgKGlmIGkz
MiAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAg
ICh0aGVuIChpMzIuY29uc3QgMSkpCisgICAgICAgIC8vICAgICAgIChlbHNlIChpMzIuY29uc3Qg
MikpCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICApCisgICAgICAgIC8vICAg
ICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAw
LCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHgwMCwgMHgwNywgMHg5YywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MTgsIDB4NjksIDB4NjYsIDB4MmQsIDB4NzQsIDB4NjgsIDB4NjUsIDB4NmUs
IDB4MmQsIDB4NjIsIDB4NmYsIDB4NzQsCisgICAgICAgICAgICAweDY4LCAweDJkLCAweDY2LCAw
eDYxLCAweDZjLCAweDZjLCAweDc0LCAweDY4LCAweDcyLCAweDZmLCAweDc1LCAweDY3LCAweDY4
LCAweDAwLCAweDAwLCAweDBhLAorICAgICAgICAgICAgMHg5NSwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgw
MCwgMHgxMCwgMHgwMCwKKyAgICAgICAgICAgIDB4NGQsIDB4MDMsIDB4MDEsIDB4MTAsIDB4MDEs
IDB4MDQsIDB4MTAsIDB4MDIsIDB4MGYsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFu
IHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CisKKyAgICAg
ICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLKGlzSWRlbnRpY2Fs
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMCksIGJv
eGYoMzIpIH0pLCAxKSk7CisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMSksIGJveGYoMzIpIH0pLCAyKSk7
CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8g
ICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiZHVtYi1sZXNzLXRoYW4i
KSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAgLy8g
ICAgICAobG9vcCAkbG9vcCBpMzIKKyAgICAgICAgLy8gICAgICAgKGkzMi5lcSAoZ2V0X2xvY2Fs
ICR4KSAoZ2V0X2xvY2FsICR5KSkKKyAgICAgICAgLy8gICAgICAgKGlmIGkzMgorICAgICAgICAv
LyAgICAgICAgKHRoZW4gKHJldHVybiAoaTMyLmNvbnN0IDApKSkKKyAgICAgICAgLy8gICAgICAg
IChlbHNlCisgICAgICAgIC8vICAgICAgICAgKGdldF9sb2NhbCAkeCkKKyAgICAgICAgLy8gICAg
ICAgICAoc2V0X2xvY2FsICR4IChpMzIuc3ViIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMSkp
KQorICAgICAgICAvLyAgICAgICAgIChpMzIuY29uc3QgMCkKKyAgICAgICAgLy8gICAgICAgICAo
aTMyLm5lKQorICAgICAgICAvLyAgICAgICAgIChicl9pZiAkbG9vcCkKKyAgICAgICAgLy8gICAg
ICAgICAoaTMyLmNvbnN0IDEpCisgICAgICAgIC8vICAgICAgICAgKQorICAgICAgICAvLyAgICAg
ICAgKQorICAgICAgICAvLyAgICAgICApCisgICAgICAgIC8vICAgICAgKQorICAgICAgICAvLyAg
ICAgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAgMHgw
MCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4Nywg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDIsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4MDAsIDB4MDcsIDB4OTIsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDBlLCAweDY0LCAweDc1LCAweDZkLCAweDYyLCAweDJkLCAweDZjLCAweDY1
LCAweDczLCAweDczLCAweDJkLCAweDc0LAorICAgICAgICAgICAgMHg2OCwgMHg2MSwgMHg2ZSwg
MHgwMCwgMHgwMCwgMHgwYSwgMHhhNywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHhh
MSwgMHg4MCwgMHg4MCwgMHg4MCwKKyAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDEs
IDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NGQsIDB4MDMsIDB4MDEsIDB4MTAsIDB4MDAsIDB4
MDksIDB4MDQsIDB4MTQsCisgICAgICAgICAgICAweDAwLCAweDE0LCAweDAwLCAweDEwLCAweDAx
LCAweDQxLCAweDE1LCAweDAwLCAweDEwLCAweDAwLCAweDRlLCAweDA3LCAweDAxLCAweDEwLCAw
eDAxLCAweDBmLAorICAgICAgICAgICAgMHgwZiwgMHgwZgorICAgICAgICB9OworCisgICAgICAg
IFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKKwor
ICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkg
fSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEp
IH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDEpOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgy
KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3go
NikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAwKTsKKyAgICB9CiAKICAgICB7
CiAgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDFkZTZlMjc3NDQyYzEzY2FlOTkwMTll
MTBhYzVmZTY2MmExMjBjYzEuLmQwZjMxMTQ5YWZiNjY2NDNhNWYzZWFhZWZlMjI3NzllNTgxOGQ4
ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKQEAgLTc5LDQzICs3OSwxMSBAQCBpbmxpbmUgQjM6Ok9wY29kZSB0b0IzT3AoVW5hcnlP
cFR5cGUgb3ApCiB9CiAKIGNsYXNzIEIzSVJHZW5lcmF0b3IgewotcHJpdmF0ZToKLSAgICBjbGFz
cyBMYXp5QmxvY2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgTGF6eUJsb2NrKEJhc2ljQmxvY2sq
IGJsb2NrKQotICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICBMYXp5QmxvY2soKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2Jsb2NrOyB9Ci0K
LSAgICAgICAgQmFzaWNCbG9jayogZ2V0KFByb2NlZHVyZSYgcHJvYykKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKCFtX2Jsb2NrKQotICAgICAgICAgICAgICAgIG1fYmxvY2sgPSBwcm9jLmFk
ZEJsb2NrKCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9ibG9jazsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobV9ibG9jaykKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoKm1fYmxvY2spOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiVW5pbml0aWFsaXpl
ZCIpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBCYXNpY0Jsb2NrKiBtX2Js
b2NrIHsgbnVsbHB0ciB9OwotICAgIH07Ci0KIHB1YmxpYzoKICAgICBzdHJ1Y3QgQ29udHJvbERh
dGEgewotICAgICAgICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIFR5cGUgc2lnbmF0dXJl
LCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0ciwgQmFzaWNCbG9jayogY29udGludWF0aW9u
ID0gbnVsbHB0cikKLSAgICAgICAgICAgIDogY29udGludWF0aW9uKGNvbnRpbnVhdGlvbikKKyAg
ICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBUeXBlIHNpZ25hdHVyZSwgQmxvY2tU
eXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9
IG51bGxwdHIpCisgICAgICAgICAgICA6IGJsb2NrVHlwZSh0eXBlKQorICAgICAgICAgICAgLCBj
b250aW51YXRpb24oY29udGludWF0aW9uKQogICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChzaWduYXR1cmUgIT0gVm9pZCkKQEAgLTEzOSwz
NSArMTA3LDM1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkxvb3A6ICAi
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91
dC5wcmludCgiQ29udGludWF0aW9uOiAiLCBjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOwor
ICAgICAgICAgICAgb3V0LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIs
IFNwZWNpYWw6ICIpOwogICAgICAgICAgICAgaWYgKHNwZWNpYWwpCiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCpzcGVjaWFsKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIk5vbmUiKTsKICAgICAgICAgfQogCi0gICAgICAgIEJsb2NrVHlwZSB0eXBlKCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFzcGVjaWFsKQotICAgICAgICAgICAg
ICAgIHJldHVybiBCbG9ja1R5cGU6OkJsb2NrOwotICAgICAgICAgICAgaWYgKGNvbnRpbnVhdGlv
bikKLSAgICAgICAgICAgICAgICByZXR1cm4gQmxvY2tUeXBlOjpJZjsKLSAgICAgICAgICAgIHJl
dHVybiBCbG9ja1R5cGU6Okxvb3A7Ci0gICAgICAgIH0KKyAgICAgICAgQmxvY2tUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBibG9ja1R5cGU7IH0KIAotICAgICAgICBCYXNpY0Jsb2NrKiB0YXJn
ZXRCbG9ja0ZvckJyYW5jaChQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIGJvb2wgaGFzTm9uVm9p
ZFNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIHJlc3VsdC5zaXplKCk7IH0KKworICAgICAgICBC
YXNpY0Jsb2NrKiB0YXJnZXRCbG9ja0ZvckJyYW5jaCgpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmICh0eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQogICAgICAgICAgICAgICAgIHJldHVybiBz
cGVjaWFsOwotICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbi5nZXQocHJvYyk7CisgICAg
ICAgICAgICByZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBj
b252ZXJ0SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9
PSBCbG9ja1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6Qmxv
Y2s7CisgICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIEIzSVJHZW5lcmF0b3I7Ci0gICAgICAgIC8vIFdl
IHVzZSBhIExhenlCbG9jayBmb3IgdGhlIGNvbnRpbnVhdGlvbiBzaW5jZSBCMzo6dmFsaWRhdGUg
ZG9lcyBub3QgbGlrZSBvcnBoYW5lZCBibG9ja3MuIE5vdGUsCi0gICAgICAgIC8vIGl0J3MgcG9z
c2libGUgdG8gY3JlYXRlIGFuIG9ycGhhbmVkIGJsb2NrIGJ5IGRvaW5nIHNvbWV0aGluZyBsaWtl
IChibG9jayAocmV0dXJuICguLi4pKSkuIEluCi0gICAgICAgIC8vIHRoYXQgZXhhbXBsZSwgaWYg
d2UgZWFnZXJseSBhbGxvY2F0ZSBhIEJhc2ljQmxvY2sgZm9yIHRoZSBjb250aW51YXRpb24gaXQg
d2lsbCBuZXZlciBiZSByZWFjaGFibGUuCi0gICAgICAgIExhenlCbG9jayBjb250aW51YXRpb247
CisgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGU7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbjsKICAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKICAgICAgICAgVmVjdG9yPFZh
cmlhYmxlKiwgMT4gcmVzdWx0OwogICAgIH07CkBAIC0xNzYsNiArMTQ0LDggQEAgcHVibGljOgog
ICAgIHR5cGVkZWYgQ29udHJvbERhdGEgQ29udHJvbFR5cGU7CiAgICAgdHlwZWRlZiBWZWN0b3I8
RXhwcmVzc2lvblR5cGUsIDE+IEV4cHJlc3Npb25MaXN0OwogICAgIHR5cGVkZWYgVmVjdG9yPFZh
cmlhYmxlKiwgMT4gUmVzdWx0TGlzdDsKKyAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2VyPEIzSVJH
ZW5lcmF0b3I+OjpDb250cm9sRW50cnkgQ29udHJvbEVudHJ5OworCiAgICAgc3RhdGljIGNvbnN0
ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxscHRyOwogCiAgICAgQjNJ
UkdlbmVyYXRvcihNZW1vcnkqLCBQcm9jZWR1cmUmLCBWZWN0b3I8VW5saW5rZWRDYWxsPiYgdW5s
aW5rZWRDYWxscyk7CkBAIC0yMDEsMTYgKzE3MSwxNiBAQCBwdWJsaWM6CiAgICAgQ29udHJvbERh
dGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOwogICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBz
aWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7
CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJldHVyblZhbHVlcyk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJh
bmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRC
bG9jayhDb250cm9sRGF0YSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Np
b25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CiAKICAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYWxsKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBGdW5jdGlvbkluZm9y
bWF0aW9uJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7CiAKLSAgICBib29sIGlzQ29udGludWF0aW9uUmVhY2hhYmxlKENvbnRyb2xEYXRhJik7
Ci0KLSAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYgY29udHJvbFN0YWNr
LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICB2b2lkIGR1bXAo
Y29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAKICAgICB2b2lkIHNldEVycm9yTWVzc2FnZShTdHJp
bmcmJikgeyBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsgfQogCkBAIC00OTgsMTYgKzQ2OCwx
NyBAQCBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25z
dGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbAogCiBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YSBCM0lSR2VuZXJhdG9yOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKIHsKLSAgICByZXR1cm4g
Q29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUpOworICAgIHJldHVybiBDb250cm9sRGF0YSht
X3Byb2MsIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgbV9wcm9jLmFkZEJsb2NrKCkpOwog
fQogCiBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRMb29wKFR5
cGUgc2lnbmF0dXJlKQogewogICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX3Byb2MuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3Jp
Z2luKCksIGJvZHkpOwogICAgIGJvZHktPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsK
ICAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7Ci0gICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJv
Yywgc2lnbmF0dXJlLCBib2R5KTsKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBzaWdu
YXR1cmUsIEJsb2NrVHlwZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsKIH0KIAogYm9vbCBC
M0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0
dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KQpAQCAtNTI0LDE3ICs0OTUsMjIgQEAgYm9vbCBCM0lS
R2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJl
LCBDb250cm9sVHlwZSYKICAgICBub3RUYWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50Qmxv
Y2spOwogCiAgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKLSAgICByZXN1bHQgPSBDb250cm9s
RGF0YShtX3Byb2MsIHNpZ25hdHVyZSwgbm90VGFrZW4sIGNvbnRpbnVhdGlvbik7CisgICAgcmVz
dWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6SWYsIGNvbnRp
bnVhdGlvbiwgbm90VGFrZW4pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEIzSVJHZW5l
cmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JikK
K2Jvb2wgQjNJUkdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIGN1cnJlbnRTdGFjaykKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhj
dXJyZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsK
KyAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2Jvb2wgQjNJUkdl
bmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpCiB7Ci0gICAg
QVNTRVJUKGRhdGEuY29udGludWF0aW9uKTsKKyAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxv
Y2tUeXBlOjpJZik7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7Ci0gICAgLy8g
Q2xlYXIgdGhlIHNwZWNpYWwgcG9pbnRlciBzbyB0aGF0IHdoZW4gd2UgcGFyc2UgdGhlIGVuZCB3
ZSBkb24ndCB0aGluayB0aGF0IHRoaXMgYmxvY2sgaXMgYW4gaWYgYmxvY2suCi0gICAgZGF0YS5z
cGVjaWFsID0gbnVsbHB0cjsKLSAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpC
bG9jayk7CisgICAgZGF0YS5jb252ZXJ0SWZUb0Jsb2NrKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTU1MCw4ICs1MjYsMTAgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29u
c3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykKIAogYm9vbCBCM0lSR2VuZXJhdG9yOjph
ZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YXJn
ZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKG1fcHJvYyk7Ci0gICAgdW5pZnlWYWx1ZXNX
aXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnJlc3VsdCk7CisgICAgaWYgKGRhdGEudHlwZSgp
ICE9IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJu
VmFsdWVzLCBkYXRhLnJlc3VsdCk7CisKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRh
cmdldEJsb2NrRm9yQnJhbmNoKCk7CiAgICAgaWYgKGNvbmRpdGlvbikgewogICAgICAgICBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBPcmlnaW4oKSwg
Y29uZGl0aW9uKTsKQEAgLTU2NywyNCArNTQ1LDMxIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRk
QnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29u
dHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCitib29sIEIz
SVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0
JiBleHByZXNzaW9uU3RhY2spCiB7Ci0gICAgaWYgKCFkYXRhLmNvbnRpbnVhdGlvbikKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0
YTsKKworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YS5yZXN1
bHQpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBK
dW1wLCBPcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOworICAgIGRhdGEuY29udGludWF0aW9u
LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1cm4gYWRkRW5kVG9V
bnJlYWNoYWJsZShlbnRyeSk7Cit9CisKKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpCit7CisgICAgQ29udHJvbERhdGEmIGRhdGEg
PSBlbnRyeS5jb250cm9sRGF0YTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0
aW9uOwogCi0gICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gZGF0YS5jb250aW51YXRpb24u
Z2V0KG1fcHJvYyk7CiAgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKLSAg
ICAgICAgQVNTRVJUKCFkYXRhLnNwZWNpYWwtPnNpemUoKSAmJiAhZGF0YS5zcGVjaWFsLT5zdWNj
ZXNzb3JzKCkuc2l6ZSgpKTsKLSAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgZWxz
ZSBibG9jayB3ZSBuZWVkIHRvIHBvaW50IHRoZSBub3RUYWtlbiBicmFuY2ggdG8gdGhlIGNvbnRp
bnVhdGlvbi4KLSAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9w
cm9jLCBKdW1wLCBPcmlnaW4oKSk7Ci0gICAgICAgIGRhdGEuc3BlY2lhbC0+c2V0U3VjY2Vzc29y
cyhGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbi0+
YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBl
bmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2sp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsK
ICAgICB9CiAKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEu
cmVzdWx0KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgSnVtcCwgT3JpZ2luKCksIGNvbnRpbnVhdGlvbik7Ci0gICAgY29udGludWF0aW9uLT5hZGRQ
cmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51
YXRpb247CisgICAgZm9yIChWYXJpYWJsZSogcmVzdWx0IDogZGF0YS5yZXN1bHQpCisgICAgICAg
IGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHJlc3VsdCkp
OworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTYxNCwyMiArNTk5LDYgQEAgYm9vbCBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IEZ1bmN0aW9u
SW5mb3JtYXRpb24mIGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9y
Ojppc0NvbnRpbnVhdGlvblJlYWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkKLXsKLSAgICAvLyBJ
ZiBub3RoaW5nIHRhcmdldHMgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgY3VycmVudCBibG9jayB0
aGVuIHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlCi0gICAgLy8gYW4gb3JwaGFuZWQgQmFzaWNCbG9j
ayBzaW5jZSBpdCBjYW4ndCBiZSByZWFjaGVkIGJ5IGZhbGx0aHJvdWdoLgotICAgIGlmICghZGF0
YS5jb250aW51YXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fY3VycmVudEJs
b2NrID0gZGF0YS5jb250aW51YXRpb24uZ2V0KG1fcHJvYyk7Ci0gICAgaWYgKGRhdGEudHlwZSgp
ID09IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250
cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwotICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeShWYXJpYWJs
ZSogdmFyaWFibGUsIEV4cHJlc3Npb25UeXBlIHNvdXJjZSkKIHsKICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgdmFyaWFi
bGUsIHNvdXJjZSk7CkBAIC02MzcsMjMgKzYwNiwzNSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnVu
aWZ5KFZhcmlhYmxlKiB2YXJpYWJsZSwgRXhwcmVzc2lvblR5cGUgc291cmNlKQogCiB2b2lkIEIz
SVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiBy
ZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgcmVzdWx0KQogewotICAgIEFTU0VSVChyZXN1bHQuc2l6
ZSgpID49IHJlc3VsdFN0YWNrLnNpemUoKSk7CisgICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPD0g
cmVzdWx0U3RhY2suc2l6ZSgpKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0
U3RhY2suc2l6ZSgpOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6
ZSgpOyArK2kpCiAgICAgICAgIHVuaWZ5KHJlc3VsdFtpXSwgcmVzdWx0U3RhY2tbaV0pOwogfQog
Ci12b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYgY29u
dHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQorc3RhdGlj
IHZvaWQgZHVtcEV4cHJlc3Npb25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBjb25z
dCBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQoreworICAg
IGRhdGFMb2dMbihjb21tYSwgIkV4cHJlc3Npb25TdGFjazoiKTsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgIGRhdGFMb2dMbihjb21t
YSwgKmV4cHJlc3Npb24pOworfQorCit2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVj
dG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4
cHJlc3Npb25TdGFjaykKIHsKICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgR3JhcGg6Iik7CiAg
ICAgZGF0YUxvZyhtX3Byb2MpOwogICAgIGRhdGFMb2dMbigiV2l0aCBjdXJyZW50IGJsb2NrOiIs
ICptX2N1cnJlbnRCbG9jayk7CiAgICAgZGF0YUxvZ0xuKCJDb250cm9sIHN0YWNrOiIpOwotICAg
IGZvciAoY29uc3QgQ29udHJvbFR5cGUmIGRhdGEgOiBjb250cm9sU3RhY2spCi0gICAgICAgIGRh
dGFMb2dMbigiICAiLCBkYXRhKTsKLSAgICBkYXRhTG9nTG4oIkV4cHJlc3Npb25TdGFjazoiKTsK
LSAgICBmb3IgKGNvbnN0IEV4cHJlc3Npb25UeXBlJiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0
YWNrKQotICAgICAgICBkYXRhTG9nTG4oIiAgIiwgKmV4cHJlc3Npb24pOworICAgIGZvciAoYXV0
byYgZGF0YSA6IGNvbnRyb2xTdGFjaykgeworICAgICAgICBkYXRhTG9nTG4oIiAgIiwgZGF0YS5j
b250cm9sRGF0YSk7CisgICAgICAgIGlmIChkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLnNp
emUoKSkgeworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgICAgIiwgIiAgd2l0aCAi
KTsKKyAgICAgICAgICAgIGR1bXBFeHByZXNzaW9uU3RhY2soY29tbWEsIGRhdGEuZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2spOworICAgICAgICB9CisgICAgfQorCisgICAgQ29tbWFQcmludGVyIGNv
bW1hKCIgICIsICIiKTsKKyAgICBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbW1hLCBleHByZXNzaW9u
U3RhY2spOwogICAgIGRhdGFMb2dMbigiXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCA0MjM4Njk2NTY0YjE2MjNkMGJh
NjljMDE3OTczZDBkMGM3ZDg3NjJmLi41ZjIwODE3ODkwMmJmNjY3OWQxMjIzNWQ0MDljOTM4ZDgz
ZjMwOGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Q
YXJzZXIuaApAQCAtNDMsMjQgKzQzLDMxIEBAIGNsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGlj
IFBhcnNlciB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNz
aW9uVHlwZSBFeHByZXNzaW9uVHlwZTsKICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkNv
bnRyb2xUeXBlIENvbnRyb2xUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGV4dDo6RXhw
cmVzc2lvbkxpc3QgRXhwcmVzc2lvbkxpc3Q7CiAKICAgICBGdW5jdGlvblBhcnNlcihDb250ZXh0
JiwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBj
b25zdCBTaWduYXR1cmUqLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0
aW9ucyk7CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOwogCisgICAgc3Ry
dWN0IENvbnRyb2xFbnRyeSB7CisgICAgICAgIEV4cHJlc3Npb25MaXN0IGVuY2xvc2VkRXhwcmVz
c2lvblN0YWNrOworICAgICAgICBDb250cm9sVHlwZSBjb250cm9sRGF0YTsKKyAgICB9OworCiBw
cml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQmxvY2soKTsKICAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZUV4cHJlc3Npb24oT3BUeXBlKTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbihPcFR5cGUpOworICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFJldHVybigpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHVu
aWZ5Q29udHJvbChWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiwgdW5zaWduZWQgbGV2ZWwpOwogCiAg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcG9wRXhwcmVzc2lvblN0YWNrKEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOwogCiAgICAgQ29udGV4dCYgbV9jb250ZXh0OwotICAgIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZSwgMT4gbV9leHByZXNzaW9uU3RhY2s7Ci0gICAgVmVjdG9yPENvbnRyb2xUeXBl
PiBtX2NvbnRyb2xTdGFjazsKKyAgICBFeHByZXNzaW9uTGlzdCBtX2V4cHJlc3Npb25TdGFjazsK
KyAgICBWZWN0b3I8Q29udHJvbEVudHJ5PiBtX2NvbnRyb2xTdGFjazsKICAgICBjb25zdCBTaWdu
YXR1cmUqIG1fc2lnbmF0dXJlOwogICAgIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9u
PiYgbV9mdW5jdGlvbnM7CiAgICAgdW5zaWduZWQgbV91bnJlYWNoYWJsZUJsb2NrcyB7IDAgfTsK
QEAgLTEyMCw3ICsxMjcsNyBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUJs
b2NrKCkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChvcCA9PSBPcFR5cGU6OkVuZCAmJiAhbV9j
b250cm9sU3RhY2suc2l6ZSgpKQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1
cm4gbV91bnJlYWNoYWJsZUJsb2NrcyA/IHRydWUgOiBhZGRSZXR1cm4oKTsKIAogICAgICAgICBp
ZiAobV91bnJlYWNoYWJsZUJsb2NrcykgewogICAgICAgICAgICAgaWYgKCFwYXJzZVVucmVhY2hh
YmxlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxPcFR5cGU+KG9wKSkpIHsKQEAgLTEzNiw5ICsxNDMs
MjQgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCbG9jaygpCiAKICAgICB9
CiAKLSAgICAvLyBJJ20gbm90IHN1cmUgaWYgd2Ugc2hvdWxkIGNoZWNrIHRoZSBleHByZXNzaW9u
IHN0YWNrIGhlcmUuLi4KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYm9vbCBGdW5jdGlv
blBhcnNlcjxDb250ZXh0Pjo6YWRkUmV0dXJuKCkKK3sKKyAgICBFeHByZXNzaW9uTGlzdCByZXR1
cm5WYWx1ZXM7CisgICAgaWYgKG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlICE9IFZvaWQpIHsKKyAg
ICAgICAgRXhwcmVzc2lvblR5cGUgcmV0dXJuVmFsdWU7CisgICAgICAgIGlmICghcG9wRXhwcmVz
c2lvblN0YWNrKHJldHVyblZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuVmFsdWVzLmFwcGVuZChyZXR1cm5WYWx1ZSk7CisgICAgfQorCisgICAgbV91bnJl
YWNoYWJsZUJsb2NrcyA9IDE7CisgICAgcmV0dXJuIG1fY29udGV4dC5hZGRSZXR1cm4ocmV0dXJu
VmFsdWVzKTsKK30KKwogI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCkgY2FzZSBu
YW1lOgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgpAQCAtMjg4LDcgKzMxMCw4IEBAIGJv
b2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAg
ICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUoaW5saW5lU2lnbmF0dXJlKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBlbmQobV9jb250ZXh0
LmFkZEJsb2NrKGlubGluZVNpZ25hdHVyZSkpOworICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBl
bmQoeyBXVEZNb3ZlKG1fZXhwcmVzc2lvblN0YWNrKSwgbV9jb250ZXh0LmFkZEJsb2NrKGlubGlu
ZVNpZ25hdHVyZSkgfSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gRXhwcmVzc2lvbkxp
c3QoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yOTcsNyArMzIwLDggQEAg
Ym9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkK
ICAgICAgICAgaWYgKCFwYXJzZVZhbHVlVHlwZShpbmxpbmVTaWduYXR1cmUpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZChtX2NvbnRl
eHQuYWRkTG9vcChpbmxpbmVTaWduYXR1cmUpKTsKKyAgICAgICAgbV9jb250cm9sU3RhY2suYXBw
ZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIG1fY29udGV4dC5hZGRMb29wKGlubGlu
ZVNpZ25hdHVyZSkgfSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gRXhwcmVzc2lvbkxp
c3QoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zMTQsNyArMzM4LDggQEAg
Ym9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkK
ICAgICAgICAgaWYgKCFtX2NvbnRleHQuYWRkSWYoY29uZGl0aW9uLCBpbmxpbmVTaWduYXR1cmUs
IGNvbnRyb2wpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1fY29udHJv
bFN0YWNrLmFwcGVuZChjb250cm9sKTsKKyAgICAgICAgbV9jb250cm9sU3RhY2suYXBwZW5kKHsg
V1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIGNvbnRyb2wgfSk7CisgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrID0gRXhwcmVzc2lvbkxpc3QoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC0zMjMsNyArMzQ4LDExIEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBh
cnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAgICAgICAgICAgICBtX2NvbnRleHQuc2V0RXJyb3JN
ZXNzYWdlKCJBdHRlbXB0ZWQgdG8gdXNlIGVsc2UgYmxvY2sgYXQgdGhlIHRvcC1sZXZlbCBvZiBh
IGZ1bmN0aW9uIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIG1fY29udGV4dC5hZGRFbHNlKG1fY29udHJvbFN0YWNrLmxhc3QoKSwgbV9leHBy
ZXNzaW9uU3RhY2spOworCisgICAgICAgIGlmICghbV9jb250ZXh0LmFkZEVsc2UobV9jb250cm9s
U3RhY2subGFzdCgpLmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluaygwKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkJyOgpAQCAtMzM5
LDI5ICszNjgsMzEgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNz
aW9uKE9wVHlwZSBvcCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX3VucmVhY2hhYmxl
QmxvY2tzID0gMTsKIAotICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNr
W21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdOworICAgICAgICBDb250cm9sVHlw
ZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJn
ZXRdLmNvbnRyb2xEYXRhOwogCiAgICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkQnJhbmNoKGRh
dGEsIGNvbmRpdGlvbiwgbV9leHByZXNzaW9uU3RhY2spOwogICAgIH0KIAogICAgIGNhc2UgT3BU
eXBlOjpSZXR1cm46IHsKLSAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiByZXR1cm5W
YWx1ZXM7Ci0gICAgICAgIGlmIChtX3NpZ25hdHVyZS0+cmV0dXJuVHlwZSAhPSBWb2lkKSB7Ci0g
ICAgICAgICAgICBFeHByZXNzaW9uVHlwZSByZXR1cm5WYWx1ZTsKLSAgICAgICAgICAgIGlmICgh
cG9wRXhwcmVzc2lvblN0YWNrKHJldHVyblZhbHVlKSkKLSAgICAgICAgICAgIHJldHVyblZhbHVl
cy5hcHBlbmQocmV0dXJuVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV91bnJlYWNoYWJs
ZUJsb2NrcyA9IDE7Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkUmV0dXJuKHJldHVyblZh
bHVlcyk7CisgICAgICAgIHJldHVybiBhZGRSZXR1cm4oKTsKICAgICB9CiAKICAgICBjYXNlIE9w
VHlwZTo6RW5kOiB7Ci0gICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2NvbnRyb2xTdGFjay50
YWtlTGFzdCgpOwotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmVuZEJsb2NrKGRhdGEsIG1fZXhw
cmVzc2lvblN0YWNrKTsKKyAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBtX2NvbnRyb2xTdGFj
ay50YWtlTGFzdCgpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGxpdHRsZSB3ZWlyZCBp
biB0aGF0IGl0IHdpbGwgbW9kaWZ5IHRoZSBleHByZXNzaW9uU3RhY2sgZm9yIHRoZSByZXN1bHQg
b2YgdGhlIGJsb2NrLgorICAgICAgICAvLyBUaGF0J3MgYSBsaXR0bGUgdG9vIGVmZmVjdGZ1bCBm
b3IgbWUgYnV0IEkgZG9uJ3QgaGF2ZSBhIGJldHRlciBBUEkgcmlnaHQgbm93LgorICAgICAgICAv
LyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzNTMKKyAg
ICAgICAgaWYgKCFtX2NvbnRleHQuZW5kQmxvY2soZGF0YSwgbV9leHByZXNzaW9uU3RhY2spKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2Fw
KGRhdGEuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBjYXNlIE9wVHlwZTo6VW5yZWFjaGFibGU6IHsKKyAgICAgICAgbV91bnJlYWNo
YWJsZUJsb2NrcyA9IDE7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNhc2Ug
T3BUeXBlOjpVbnJlYWNoYWJsZToKICAgICBjYXNlIE9wVHlwZTo6U2VsZWN0OgogICAgIGNhc2Ug
T3BUeXBlOjpCclRhYmxlOgogICAgIGNhc2UgT3BUeXBlOjpOb3A6CkBAIC0zODYsMTcgKzQxNywy
MCBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVz
c2lvbihPcFR5cGUgb3ApCiAgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9j
b250cm9sU3RhY2subGFzdCgpOwotICAgICAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxvY2tU
eXBlOjpJZik7CisgICAgICAgIENvbnRyb2xFbnRyeSYgZGF0YSA9IG1fY29udHJvbFN0YWNrLmxh
c3QoKTsKICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDA7Ci0gICAgICAgIHJldHVybiBt
X2NvbnRleHQuYWRkRWxzZShkYXRhLCBtX2V4cHJlc3Npb25TdGFjayk7CisgICAgICAgIGlmICgh
bV9jb250ZXh0LmFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEuY29udHJvbERhdGEpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJpbmsoMCk7
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGNhc2UgT3BUeXBlOjpFbmQ6IHsK
ICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MgPT0gMSkgewotICAgICAgICAgICAgQ29u
dHJvbFR5cGUgZGF0YSA9IG1fY29udHJvbFN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29udGV4dC5pc0NvbnRpbnVhdGlvblJlYWNoYWJsZShkYXRhKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIENvbnRyb2xFbnRyeSBkYXRhID0gbV9jb250
cm9sU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGlmICghbV9jb250ZXh0LmFkZEVuZFRv
VW5yZWFjaGFibGUoZGF0YSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2suc3dhcChkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNr
KTsKICAgICAgICAgfQogICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzLS07CiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtNDM5LDEyICs0NzMsMTIgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oT3BUeXBlIG9wKQogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGV4dD4KIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBvcEV4cHJlc3Np
b25TdGFjayhFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQogewotICAgIGlmICghbV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpKSB7CisgICAgaWYgKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkgewogICAg
ICAgICByZXN1bHQgPSBtX2V4cHJlc3Npb25TdGFjay50YWtlTGFzdCgpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBtX2NvbnRleHQuc2V0RXJyb3JNZXNzYWdlKCJBdHRlbXB0
ZWQgdG8gdXNlIGFuIHN0YWNrIHZhbHVlIHdoZW4gbm9uZSBleGlzdGVkIik7CisgICAgbV9jb250
ZXh0LnNldEVycm9yTWVzc2FnZSgiQXR0ZW1wdGVkIHRvIHVzZSBhIHN0YWNrIHZhbHVlIHdoZW4g
bm9uZSBleGlzdGVkIik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAppbmRleCBiODA5Y2RkMDY4YjE4MWExYmZlOTY4
ZDhhMDk4ZTE1ZjE4OTlkZTBmLi4zOTgzYjdhMjE2NzFjOWMyYmI4M2Y1MDczNTExZmE4MGZhY2Jl
OGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNt
RnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewpAQCAtNjIsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAorICAgICAgICBib29sIGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBt
X3NpZ25hdHVyZSAhPSBWb2lkOyB9CisKICAgICAgICAgQmxvY2tUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2Jsb2NrVHlwZTsgfQogICAgICAgICBUeXBlIHNpZ25hdHVyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2lnbmF0dXJlOyB9CiAgICAgcHJpdmF0ZToKQEAgLTcxLDYgKzc0LDggQEAgcHVi
bGljOgogICAgIHR5cGVkZWYgVHlwZSBFeHByZXNzaW9uVHlwZTsKICAgICB0eXBlZGVmIENvbnRy
b2xEYXRhIENvbnRyb2xUeXBlOwogICAgIHR5cGVkZWYgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAx
PiBFeHByZXNzaW9uTGlzdDsKKyAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPjo6
Q29udHJvbEVudHJ5IENvbnRyb2xFbnRyeTsKKwogICAgIHN0YXRpYyBjb25zdCBFeHByZXNzaW9u
VHlwZSBlbXB0eUV4cHJlc3Npb24gPSBWb2lkOwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYpOwpAQCAtOTQsMTUgKzk5LDE3IEBA
IHB1YmxpYzoKICAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9vcChUeXBl
IHNpZ25hdHVyZSk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbERhdGEmIHJlc3VsdCk7CiAg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IEV4
cHJlc3Npb25MaXN0Jik7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5y
ZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFJldHVybihjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKICAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvbkxpc3Qm
IGV4cHJlc3Npb25TdGFjayk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2so
Q29udHJvbEVudHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmKTsK
KwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJ
bmRleCwgY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIGlzQ29udGludWF0aW9uUmVhY2hhYmxlKENvbnRyb2xEYXRhJikgeyByZXR1cm4g
dHJ1ZTsgfQogCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sVHlwZT4mIGNvbnRy
b2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgdm9p
ZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4
cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwogCiAgICAgdm9pZCBzZXRFcnJvck1lc3Nh
Z2UoU3RyaW5nJiYgbWVzc2FnZSkgeyBBU1NFUlQobV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpOyBt
X2Vycm9yTWVzc2FnZSA9IFdURk1vdmUobWVzc2FnZSk7IH0KICAgICBTdHJpbmcgZXJyb3JNZXNz
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KQEAgLTE4NCwxMyArMTkxLDE4
IEBAIGJvb2wgVmFsaWRhdGU6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBz
aWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1CiAKIGJvb2wgVmFsaWRhdGU6OmFkZEVsc2UoQ29u
dHJvbFR5cGUmIGN1cnJlbnQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiB2YWx1ZXMpCiB7Ci0gICAg
aWYgKGN1cnJlbnQudHlwZSgpICE9IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgbV9lcnJvck1l
c3NhZ2UgPSBtYWtlU3RyaW5nKCJBdHRlbXB0aW5nIHRvIGFkZCBlbHNlIGJsb2NrIHRvIHNvbWV0
aGluZyBvdGhlciB0aGFuIGFuIGlmIik7CisgICAgaWYgKCF1bmlmeSh2YWx1ZXMsIGN1cnJlbnQp
KSB7CisgICAgICAgIEFTU0VSVChlcnJvck1lc3NhZ2UoKSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBpZiAoIXVuaWZ5KHZhbHVlcywgY3VycmVudCkpIHsKLSAgICAgICAg
QVNTRVJUKGVycm9yTWVzc2FnZSgpKTsKKyAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUo
Y3VycmVudCk7Cit9CisKK2Jvb2wgVmFsaWRhdGU6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRy
b2xUeXBlJiBjdXJyZW50KQoreworICAgIGlmIChjdXJyZW50LnR5cGUoKSAhPSBCbG9ja1R5cGU6
OklmKSB7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1wdGluZyB0
byBhZGQgZWxzZSBibG9jayB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBpZiIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yMTksNyArMjMxLDcgQEAgYm9vbCBWYWxpZGF0
ZTo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiB0YXJnZXQsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgY29uc3QgRXgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICh0YXJn
ZXQudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpCisgICAgaWYgKHRhcmdldC50eXBlKCkgPT0gQmxv
Y2tUeXBlOjpMb29wKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICh0YXJnZXQuc2ln
bmF0dXJlKCkgPT0gVm9pZCkKQEAgLTIzMywyMCArMjQ1LDMzIEBAIGJvb2wgVmFsaWRhdGU6OmFk
ZEJyYW5jaChDb250cm9sVHlwZSYgdGFyZ2V0LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNv
bnN0IEV4CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFZhbGlkYXRlOjplbmRCbG9jayhD
b250cm9sVHlwZSYgYmxvY2ssIEV4cHJlc3Npb25MaXN0JiBzdGFjaykKK2Jvb2wgVmFsaWRhdGU6
OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBzdGFjaykKIHsK
KyAgICBDb250cm9sRGF0YSYgYmxvY2sgPSBlbnRyeS5jb250cm9sRGF0YTsKICAgICBpZiAoYmxv
Y2suc2lnbmF0dXJlKCkgPT0gVm9pZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICBpZiAo
IXN0YWNrLnNpemUoKSkgeworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkJs
b2NrIGZhbGx0aG91Z2ggZXhwZWN0ZWQgdHlwZTogIiwgdG9TdHJpbmcoYmxvY2suc2lnbmF0dXJl
KCkpLCAiIGJ1dCB0aGUgc3RhY2sgd2FzIGVtcHR5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CiAKLSAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID09IDEpOwotICAgIGlmIChibG9jay5z
aWduYXR1cmUoKSA9PSBzdGFja1swXSkKKyAgICBpZiAoYmxvY2suc2lnbmF0dXJlKCkgPT0gc3Rh
Y2subGFzdCgpKSB7CisgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVu
ZChibG9jay5zaWduYXR1cmUoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAg
IG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQmxvY2sgZmFsbHRocm91Z2ggaGFzIGV4cGVj
dGVkIHR5cGU6ICIsIHRvU3RyaW5nKGJsb2NrLnNpZ25hdHVyZSgpKSwgIiBidXQgcHJvZHVjZWQg
dHlwZTogIiwgdG9TdHJpbmcoYmxvY2suc2lnbmF0dXJlKCkpKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK2Jvb2wgVmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBl
bnRyeSkKK3sKKyAgICBpZiAoZW50cnkuY29udHJvbERhdGEuc2lnbmF0dXJlKCkgIT0gVm9pZCkK
KyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGVudHJ5LmNvbnRy
b2xEYXRhLnNpZ25hdHVyZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBWYWxpZGF0
ZTo6YWRkQ2FsbCh1bnNpZ25lZCwgY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbywgY29u
c3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkK
IHsKICAgICBpZiAoaW5mby5zaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkgIT0gYXJncy5zaXpl
KCkpIHsKQEAgLTI4OCw5ICszMTMsMTAgQEAgYm9vbCBWYWxpZGF0ZTo6dW5pZnkoY29uc3QgRXhw
cmVzc2lvbkxpc3QmIHZhbHVlcywgY29uc3QgQ29udHJvbFR5cGUmIGJsb2NrKQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBWYWxpZGF0ZTo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbFR5
cGU+JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKQordm9pZCBWYWxpZGF0ZTo6ZHVtcChjb25zdCBW
ZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JikKIHsKLSAgICBkYXRh
TG9nTG4oIlZhbGlkYXRpbmciKTsKKyAgICAvLyBJZiB5b3UgbmVlZCB0aGlzIHRoZW4geW91IHNo
b3VsZCBmaXggdGhlIHZhbGlkYXRvcidzIGVycm9yIG1lc3NhZ2VzIGluc3RlYWQuLi4KKyAgICAv
LyBUaGluayBvZiB0aGlzIGFzIHBlbmFuY2UgZm9yIHRoZSBzaW4gb2YgYmFkIGVycm9yIG1lc3Nh
Z2VzLgogfQogCiBTdHJpbmcgdmFsaWRhdGVGdW5jdGlvbihjb25zdCB1aW50OF90KiBzb3VyY2Us
IHNpemVfdCBsZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8
RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucykKQEAgLTI5OSw2ICszMjUsMTAgQEAgU3Ry
aW5nIHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3QgbGVuZ3Ro
LCBjb25zdCBTaWduYXR1cmUqIHMKICAgICBGdW5jdGlvblBhcnNlcjxWYWxpZGF0ZT4gdmFsaWRh
dG9yKGNvbnRleHQsIHNvdXJjZSwgbGVuZ3RoLCBzaWduYXR1cmUsIGZ1bmN0aW9ucyk7CiAgICAg
aWYgKCF2YWxpZGF0b3IucGFyc2UoKSkgewogICAgICAgICAvLyBGSVhNRTogYWRkIGJldHRlciBs
b2NhdGlvbiBpbmZvcm1hdGlvbiBoZXJlLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQyODgKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBuZXZlciBu
b3QgaGF2ZSBhbiBlcnJvciBtZXNzYWdlIGlmIHdlIHJldHVybiBmYWxzZS4KKyAgICAgICAgLy8g
c2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzU0CisgICAg
ICAgIGlmIChjb250ZXh0LmVycm9yTWVzc2FnZSgpLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuICJVbmtub3duIGVycm9yIjsKICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3JNZXNzYWdl
KCk7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293796</attachid>
            <date>2016-11-03 13:34:58 -0700</date>
            <delta_ts>2016-11-03 13:35:21 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-164100-20161103133057.patch</filename>
            <type>text/plain</type>
            <size>33560</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
NjMzZTdhZjU1NDJkYmFhYzYzZGZhOGEzNjg3YjExMTcxZGNmNWM5Li5iMDJmOTVjNzU3MzlkZWJh
MThhNTY0NmIzNGIwZGJkMWZmMGIwM2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw0NSBAQAogMjAxNi0xMS0wMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KIAorICAgICAgICBXYXNtIHN0YXJ0cyBhIG5ldyBzdGFjayB3aGVuZXZlciBpdCBhZGRz
IGEgbmV3IGJsb2NrIGFuZCBoYXMgcmV0dXJuIHR5cGVzIGZvciBibG9ja3MuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBUaGlzIHBhdGNoIG92ZXJoYXVscyBt
dWNoIG9mIHRoZSBXYXNtIGZ1bmN0aW9uIHBhcnNlciwgdmFsaWRhdG9yLCBhbmQgQjMgSVIgZ2Vu
ZXJhdG9yCisgICAgICAgIHRvIHdvcmsgd2l0aCBibG9jayByZXR1cm4gdHlwZXMuIEluIFdhc20s
IGJsb2NrcyBjYW4gYWN0IGFzIGV4cHJlc3Npb25zIGFuZCBoYXZlIGEKKyAgICAgICAgcmV0dXJu
IHZhbHVlLiBNb3N0IG9mIHRoZSBjb250cm9sIGZsb3cgb3BlcmF0b3JzIG5lZWRlZCB0byBiZSBy
ZXdyaXR0ZW4gaW4gb3JkZXIgdG8KKyAgICAgICAgc3VwcG9ydCB0aGlzIGZlYXR1cmUuIFRvIGVu
YWJsZSByZXR1cm4gdHlwZXMgdGhlIGZ1bmN0aW9uIHBhcnNlciBuZWVkZWQgdG8gYmUgYWJsZQor
ICAgICAgICB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSBleHByZXNzaW9uIHN0YWNrIGZyb20gcHJl
dmlvdXMgYmxvY2tzLCB3aGljaCBpcyBkb25lIHZpYSB0aGUKKyAgICAgICAgY29udHJvbCBzdGFj
ay4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVtb3ZlcyB0aGUgbGF6eSBjb250aW51YXRp
b24gYmxvY2sgc3lzdGVtIGFkZGVkIHByZXZpb3VzbHkuIEl0J3MKKyAgICAgICAgbm90IGNsZWFy
IGlmIHRoZXJlIHdvdWxkIGJlIGFueSBwZXJmb3JtYW5jZSB3aW4gZnJvbSBzdWNoIGEgc3lzdGVt
LiBUaGVyZSBhcmUgbGlrZWx5CisgICAgICAgIG1hbnkgb3RoZXIgdGhpbmdzIHdpdGggb3JkZXJz
IG9mIG1hZ25pdHVkZSBtb3JlIGltcGFjdCBvbiBCMyBJUiBnZW5lcmF0aW9uLiBUaGUKKyAgICAg
ICAgY29tcGxleGl0eSBjb3N0IG9mIHN1Y2ggYSBzeXN0ZW0gaXMgbm90IHdvcnRoIHRoZSBlZmZv
cnQgd2l0aG91dCBzdWZmaWNpZW50IGV2aWRlbmNlCisgICAgICAgIG90aGVyd2lzZS4KKworICAg
ICAgICAqIHRlc3RXYXNtLmNwcDoKKyAgICAgICAgKHJ1bldhc21UZXN0cyk6CisgICAgICAgICog
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBh
cnNlQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Oldhc206
OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpwb3BFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAq
IHdhc20vV2FzbVZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OkNv
bnRyb2xEYXRhOjpoYXNOb25Wb2lkU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFs
aWRhdGU6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkRWxzZVRv
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkQnJhbmNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmVuZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpWYWxpZGF0ZTo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OnZhbGlkYXRlRnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6aXNDb250aW51YXRpb25SZWFjaGFibGUp
OiBEZWxldGVkLgorCisyMDE2LTExLTAyICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBw
bGUuY29tPgorCiAgICAgICAgIFdlIHNob3VsZCBub3QgcG9wIGZyb20gYW4gZW1wdHkgc3RhY2sg
aW4gdGhlIFdhc20gZnVuY3Rpb24gcGFyc2VyLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0Mjc1CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0V2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3Bw
CmluZGV4IGQxYjg4ZDhkNTc4ZjM3Y2E3YjUzZDM1NjMyZDhlYTY0NjdlN2MzZDMuLjZlM2Y1ZDJk
MGI5YzJhY2FmZDQxMzE2N2Q3ZWRiNDg5MWEyNWQ5MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RX
YXNtLmNwcApAQCAtMjkzLDYgKzI5MywxMDcgQEAgc3RhdGljIHZvaWQgY2hlY2tQbGFuKFBsYW4m
IHBsYW4sIHVuc2lnbmVkIGV4cGVjdGVkTnVtYmVyT2ZGdW5jdGlvbnMpCiAvLyBGb3Igbm93IHdl
IGlubGluZSB0aGUgdGVzdCBmaWxlcy4KIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiB7Cisg
ICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQor
ICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaWYtdGhlbi1ib3RoLWZhbGx0aHJvdWdoIikg
KHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8vICAg
ICAgKGJsb2NrICRibG9jayBpMzIKKyAgICAgICAgLy8gICAgICAgKGlmIGkzMiAoaTMyLmVxIChn
ZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAgICAodGhlbiAoaTMy
LmNvbnN0IDEpKQorICAgICAgICAvLyAgICAgICAgKGVsc2UKKyAgICAgICAgLy8gICAgICAgICAo
aTMyLmNvbnN0IDIpCisgICAgICAgIC8vICAgICAgICAgKGJyICRibG9jaykpCisgICAgICAgIC8v
ICAgICAgICApCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICApCisgICAgICAg
IC8vICAgICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAg
ICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAw
eDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgw
MiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5YywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4NjksIDB4NjYsIDB4MmQsIDB4NzQsIDB4NjgsIDB4NjUs
IDB4NmUsIDB4MmQsIDB4NjIsIDB4NmYsIDB4NzQsCisgICAgICAgICAgICAweDY4LCAweDJkLCAw
eDY2LCAweDYxLCAweDZjLCAweDZjLCAweDc0LCAweDY4LCAweDcyLCAweDZmLCAweDc1LCAweDY3
LCAweDY4LCAweDAwLCAweDAwLCAweDBhLAorICAgICAgICAgICAgMHg5YSwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHg5NCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgw
MSwgMHgwMSwgMHgxNCwgMHgwMCwKKyAgICAgICAgICAgIDB4MTAsIDB4MDAsIDB4NGQsIDB4MDMs
IDB4MDEsIDB4MTAsIDB4MDEsIDB4MDQsIDB4MTAsIDB4MDIsIDB4MDYsIDB4MDEsIDB4MGYsIDB4
MGYsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwor
ICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMCksIGJveGYoMzIpIH0pLCAxKSk7CisgICAg
ICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveGYoMSksIGJveGYoMzIpIH0pLCAyKSk7CisgICAgfQorCisgICAgeworICAg
ICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAv
LyAgICAgKGZ1bmMgKGV4cG9ydCAiaWYtdGhlbi1ib3RoLWZhbGx0aHJvdWdoIikgKHBhcmFtICR4
IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCisgICAgICAgIC8vICAgICAgKGlmIGkz
MiAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpCisgICAgICAgIC8vICAgICAg
ICh0aGVuIChpMzIuY29uc3QgMSkpCisgICAgICAgIC8vICAgICAgIChlbHNlIChpMzIuY29uc3Qg
MikpCisgICAgICAgIC8vICAgICAgICkKKyAgICAgICAgLy8gICAgICApCisgICAgICAgIC8vICAg
ICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAweDAw
LCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQwLAorICAgICAgICAgICAgMHgwMiwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHgwMCwgMHgwNywgMHg5YywgMHg4MCwKKyAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4MTgsIDB4NjksIDB4NjYsIDB4MmQsIDB4NzQsIDB4NjgsIDB4NjUsIDB4NmUs
IDB4MmQsIDB4NjIsIDB4NmYsIDB4NzQsCisgICAgICAgICAgICAweDY4LCAweDJkLCAweDY2LCAw
eDYxLCAweDZjLCAweDZjLCAweDc0LCAweDY4LCAweDcyLCAweDZmLCAweDc1LCAweDY3LCAweDY4
LCAweDAwLCAweDAwLCAweDBhLAorICAgICAgICAgICAgMHg5NSwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgw
MCwgMHgxMCwgMHgwMCwKKyAgICAgICAgICAgIDB4NGQsIDB4MDMsIDB4MDEsIDB4MTAsIDB4MDEs
IDB4MDQsIDB4MTAsIDB4MDIsIDB4MGYsIDB4MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFu
IHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CisKKyAgICAg
ICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLKGlzSWRlbnRpY2Fs
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMCksIGJv
eGYoMzIpIH0pLCAxKSk7CisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMSksIGJveGYoMzIpIH0pLCAyKSk7
CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8g
ICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiZHVtYi1sZXNzLXRoYW4i
KSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVzdWx0IGkzMikKKyAgICAgICAgLy8g
ICAgICAobG9vcCAkbG9vcCBpMzIKKyAgICAgICAgLy8gICAgICAgKGkzMi5lcSAoZ2V0X2xvY2Fs
ICR4KSAoZ2V0X2xvY2FsICR5KSkKKyAgICAgICAgLy8gICAgICAgKGlmIGkzMgorICAgICAgICAv
LyAgICAgICAgKHRoZW4gKHJldHVybiAoaTMyLmNvbnN0IDApKSkKKyAgICAgICAgLy8gICAgICAg
IChlbHNlCisgICAgICAgIC8vICAgICAgICAgKGdldF9sb2NhbCAkeCkKKyAgICAgICAgLy8gICAg
ICAgICAoc2V0X2xvY2FsICR4IChpMzIuc3ViIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMSkp
KQorICAgICAgICAvLyAgICAgICAgIChpMzIuY29uc3QgMCkKKyAgICAgICAgLy8gICAgICAgICAo
aTMyLm5lKQorICAgICAgICAvLyAgICAgICAgIChicl9pZiAkbG9vcCkKKyAgICAgICAgLy8gICAg
ICAgICAoaTMyLmNvbnN0IDEpCisgICAgICAgIC8vICAgICAgICAgKQorICAgICAgICAvLyAgICAg
ICAgKQorICAgICAgICAvLyAgICAgICApCisgICAgICAgIC8vICAgICAgKQorICAgICAgICAvLyAg
ICAgKQorICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0geworICAgICAgICAgICAgMHgw
MCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4Nywg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKKyAgICAgICAgICAgIDB4MDIsIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4MDAsIDB4MDcsIDB4OTIsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDBlLCAweDY0LCAweDc1LCAweDZkLCAweDYyLCAweDJkLCAweDZjLCAweDY1
LCAweDczLCAweDczLCAweDJkLCAweDc0LAorICAgICAgICAgICAgMHg2OCwgMHg2MSwgMHg2ZSwg
MHgwMCwgMHgwMCwgMHgwYSwgMHhhNywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHhh
MSwgMHg4MCwgMHg4MCwgMHg4MCwKKyAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDEs
IDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NGQsIDB4MDMsIDB4MDEsIDB4MTAsIDB4MDAsIDB4
MDksIDB4MDQsIDB4MTQsCisgICAgICAgICAgICAweDAwLCAweDE0LCAweDAwLCAweDEwLCAweDAx
LCAweDQxLCAweDE1LCAweDAwLCAweDEwLCAweDAwLCAweDRlLCAweDA3LCAweDAxLCAweDEwLCAw
eDAxLCAweDBmLAorICAgICAgICAgICAgMHgwZiwgMHgwZgorICAgICAgICB9OworCisgICAgICAg
IFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKKwor
ICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkg
fSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEp
IH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDEpOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgy
KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3go
NikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAwKTsKKyAgICB9CiAKICAgICB7
CiAgICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDFkZTZlMjc3NDQyYzEzY2FlOTkwMTll
MTBhYzVmZTY2MmExMjBjYzEuLjc0MzI1NjM4YjA3ZDA1MTc5ZWFkMGM1OTNiN2I2NWIyMWE0MjQw
NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKQEAgLTc5LDQzICs3OSwxMSBAQCBpbmxpbmUgQjM6Ok9wY29kZSB0b0IzT3AoVW5hcnlP
cFR5cGUgb3ApCiB9CiAKIGNsYXNzIEIzSVJHZW5lcmF0b3IgewotcHJpdmF0ZToKLSAgICBjbGFz
cyBMYXp5QmxvY2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgTGF6eUJsb2NrKEJhc2ljQmxvY2sq
IGJsb2NrKQotICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICBMYXp5QmxvY2soKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2Jsb2NrOyB9Ci0K
LSAgICAgICAgQmFzaWNCbG9jayogZ2V0KFByb2NlZHVyZSYgcHJvYykKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKCFtX2Jsb2NrKQotICAgICAgICAgICAgICAgIG1fYmxvY2sgPSBwcm9jLmFk
ZEJsb2NrKCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9ibG9jazsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobV9ibG9jaykKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoKm1fYmxvY2spOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiVW5pbml0aWFsaXpl
ZCIpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBCYXNpY0Jsb2NrKiBtX2Js
b2NrIHsgbnVsbHB0ciB9OwotICAgIH07Ci0KIHB1YmxpYzoKICAgICBzdHJ1Y3QgQ29udHJvbERh
dGEgewotICAgICAgICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIFR5cGUgc2lnbmF0dXJl
LCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0ciwgQmFzaWNCbG9jayogY29udGludWF0aW9u
ID0gbnVsbHB0cikKLSAgICAgICAgICAgIDogY29udGludWF0aW9uKGNvbnRpbnVhdGlvbikKKyAg
ICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBUeXBlIHNpZ25hdHVyZSwgQmxvY2tU
eXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9
IG51bGxwdHIpCisgICAgICAgICAgICA6IGJsb2NrVHlwZSh0eXBlKQorICAgICAgICAgICAgLCBj
b250aW51YXRpb24oY29udGludWF0aW9uKQogICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChzaWduYXR1cmUgIT0gVm9pZCkKQEAgLTEzOSwz
NSArMTA3LDM1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkxvb3A6ICAi
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91
dC5wcmludCgiQ29udGludWF0aW9uOiAiLCBjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOwor
ICAgICAgICAgICAgb3V0LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIs
IFNwZWNpYWw6ICIpOwogICAgICAgICAgICAgaWYgKHNwZWNpYWwpCiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCpzcGVjaWFsKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIk5vbmUiKTsKICAgICAgICAgfQogCi0gICAgICAgIEJsb2NrVHlwZSB0eXBlKCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFzcGVjaWFsKQotICAgICAgICAgICAg
ICAgIHJldHVybiBCbG9ja1R5cGU6OkJsb2NrOwotICAgICAgICAgICAgaWYgKGNvbnRpbnVhdGlv
bikKLSAgICAgICAgICAgICAgICByZXR1cm4gQmxvY2tUeXBlOjpJZjsKLSAgICAgICAgICAgIHJl
dHVybiBCbG9ja1R5cGU6Okxvb3A7Ci0gICAgICAgIH0KKyAgICAgICAgQmxvY2tUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBibG9ja1R5cGU7IH0KIAotICAgICAgICBCYXNpY0Jsb2NrKiB0YXJn
ZXRCbG9ja0ZvckJyYW5jaChQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIGJvb2wgaGFzTm9uVm9p
ZFNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIHJlc3VsdC5zaXplKCk7IH0KKworICAgICAgICBC
YXNpY0Jsb2NrKiB0YXJnZXRCbG9ja0ZvckJyYW5jaCgpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmICh0eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQogICAgICAgICAgICAgICAgIHJldHVybiBz
cGVjaWFsOwotICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbi5nZXQocHJvYyk7CisgICAg
ICAgICAgICByZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBj
b252ZXJ0SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9
PSBCbG9ja1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6Qmxv
Y2s7CisgICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIEIzSVJHZW5lcmF0b3I7Ci0gICAgICAgIC8vIFdl
IHVzZSBhIExhenlCbG9jayBmb3IgdGhlIGNvbnRpbnVhdGlvbiBzaW5jZSBCMzo6dmFsaWRhdGUg
ZG9lcyBub3QgbGlrZSBvcnBoYW5lZCBibG9ja3MuIE5vdGUsCi0gICAgICAgIC8vIGl0J3MgcG9z
c2libGUgdG8gY3JlYXRlIGFuIG9ycGhhbmVkIGJsb2NrIGJ5IGRvaW5nIHNvbWV0aGluZyBsaWtl
IChibG9jayAocmV0dXJuICguLi4pKSkuIEluCi0gICAgICAgIC8vIHRoYXQgZXhhbXBsZSwgaWYg
d2UgZWFnZXJseSBhbGxvY2F0ZSBhIEJhc2ljQmxvY2sgZm9yIHRoZSBjb250aW51YXRpb24gaXQg
d2lsbCBuZXZlciBiZSByZWFjaGFibGUuCi0gICAgICAgIExhenlCbG9jayBjb250aW51YXRpb247
CisgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGU7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbjsKICAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKICAgICAgICAgVmVjdG9yPFZh
cmlhYmxlKiwgMT4gcmVzdWx0OwogICAgIH07CkBAIC0xNzYsNiArMTQ0LDggQEAgcHVibGljOgog
ICAgIHR5cGVkZWYgQ29udHJvbERhdGEgQ29udHJvbFR5cGU7CiAgICAgdHlwZWRlZiBWZWN0b3I8
RXhwcmVzc2lvblR5cGUsIDE+IEV4cHJlc3Npb25MaXN0OwogICAgIHR5cGVkZWYgVmVjdG9yPFZh
cmlhYmxlKiwgMT4gUmVzdWx0TGlzdDsKKyAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2VyPEIzSVJH
ZW5lcmF0b3I+OjpDb250cm9sRW50cnkgQ29udHJvbEVudHJ5OworCiAgICAgc3RhdGljIGNvbnN0
ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxscHRyOwogCiAgICAgQjNJ
UkdlbmVyYXRvcihNZW1vcnkqLCBQcm9jZWR1cmUmLCBWZWN0b3I8VW5saW5rZWRDYWxsPiYgdW5s
aW5rZWRDYWxscyk7CkBAIC0yMDEsMTYgKzE3MSwxNiBAQCBwdWJsaWM6CiAgICAgQ29udHJvbERh
dGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOwogICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBz
aWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7
CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJldHVyblZhbHVlcyk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJh
bmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRC
bG9jayhDb250cm9sRGF0YSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Np
b25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CiAKICAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYWxsKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBGdW5jdGlvbkluZm9y
bWF0aW9uJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7CiAKLSAgICBib29sIGlzQ29udGludWF0aW9uUmVhY2hhYmxlKENvbnRyb2xEYXRhJik7
Ci0KLSAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYgY29udHJvbFN0YWNr
LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICB2b2lkIGR1bXAo
Y29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAKICAgICB2b2lkIHNldEVycm9yTWVzc2FnZShTdHJp
bmcmJikgeyBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsgfQogCkBAIC00OTgsMTYgKzQ2OCwx
NyBAQCBCM0lSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBCM0lSR2VuZXJhdG9yOjphZGRDb25z
dGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbAogCiBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0
YSBCM0lSR2VuZXJhdG9yOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKIHsKLSAgICByZXR1cm4g
Q29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUpOworICAgIHJldHVybiBDb250cm9sRGF0YSht
X3Byb2MsIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgbV9wcm9jLmFkZEJsb2NrKCkpOwog
fQogCiBCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBCM0lSR2VuZXJhdG9yOjphZGRMb29wKFR5
cGUgc2lnbmF0dXJlKQogewogICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX3Byb2MuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3Jp
Z2luKCksIGJvZHkpOwogICAgIGJvZHktPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsK
ICAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7Ci0gICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJv
Yywgc2lnbmF0dXJlLCBib2R5KTsKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBzaWdu
YXR1cmUsIEJsb2NrVHlwZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsKIH0KIAogYm9vbCBC
M0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0
dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KQpAQCAtNTI0LDE3ICs0OTUsMjIgQEAgYm9vbCBCM0lS
R2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJl
LCBDb250cm9sVHlwZSYKICAgICBub3RUYWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50Qmxv
Y2spOwogCiAgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKLSAgICByZXN1bHQgPSBDb250cm9s
RGF0YShtX3Byb2MsIHNpZ25hdHVyZSwgbm90VGFrZW4sIGNvbnRpbnVhdGlvbik7CisgICAgcmVz
dWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6SWYsIGNvbnRp
bnVhdGlvbiwgbm90VGFrZW4pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEIzSVJHZW5l
cmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JikK
K2Jvb2wgQjNJUkdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIGN1cnJlbnRTdGFjaykKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhj
dXJyZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgT3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsK
KyAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2Jvb2wgQjNJUkdl
bmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpCiB7Ci0gICAg
QVNTRVJUKGRhdGEuY29udGludWF0aW9uKTsKKyAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxv
Y2tUeXBlOjpJZik7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7Ci0gICAgLy8g
Q2xlYXIgdGhlIHNwZWNpYWwgcG9pbnRlciBzbyB0aGF0IHdoZW4gd2UgcGFyc2UgdGhlIGVuZCB3
ZSBkb24ndCB0aGluayB0aGF0IHRoaXMgYmxvY2sgaXMgYW4gaWYgYmxvY2suCi0gICAgZGF0YS5z
cGVjaWFsID0gbnVsbHB0cjsKLSAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpC
bG9jayk7CisgICAgZGF0YS5jb252ZXJ0SWZUb0Jsb2NrKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTU1MCw4ICs1MjYsMTAgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29u
c3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykKIAogYm9vbCBCM0lSR2VuZXJhdG9yOjph
ZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YXJn
ZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKG1fcHJvYyk7Ci0gICAgdW5pZnlWYWx1ZXNX
aXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnJlc3VsdCk7CisgICAgaWYgKGRhdGEudHlwZSgp
ICE9IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJu
VmFsdWVzLCBkYXRhLnJlc3VsdCk7CisKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRh
cmdldEJsb2NrRm9yQnJhbmNoKCk7CiAgICAgaWYgKGNvbmRpdGlvbikgewogICAgICAgICBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBPcmlnaW4oKSwg
Y29uZGl0aW9uKTsKQEAgLTU2NywyNCArNTQ1LDMxIEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRk
QnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29u
dHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCitib29sIEIz
SVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0
JiBleHByZXNzaW9uU3RhY2spCiB7Ci0gICAgaWYgKCFkYXRhLmNvbnRpbnVhdGlvbikKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0
YTsKKworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YS5yZXN1
bHQpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBK
dW1wLCBPcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOworICAgIGRhdGEuY29udGludWF0aW9u
LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1cm4gYWRkRW5kVG9V
bnJlYWNoYWJsZShlbnRyeSk7Cit9CisKKworYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpCit7CisgICAgQ29udHJvbERhdGEmIGRhdGEg
PSBlbnRyeS5jb250cm9sRGF0YTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0
aW9uOwogCi0gICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gZGF0YS5jb250aW51YXRpb24u
Z2V0KG1fcHJvYyk7CiAgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKLSAg
ICAgICAgQVNTRVJUKCFkYXRhLnNwZWNpYWwtPnNpemUoKSAmJiAhZGF0YS5zcGVjaWFsLT5zdWNj
ZXNzb3JzKCkuc2l6ZSgpKTsKLSAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgZWxz
ZSBibG9jayB3ZSBuZWVkIHRvIHBvaW50IHRoZSBub3RUYWtlbiBicmFuY2ggdG8gdGhlIGNvbnRp
bnVhdGlvbi4KLSAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9w
cm9jLCBKdW1wLCBPcmlnaW4oKSk7Ci0gICAgICAgIGRhdGEuc3BlY2lhbC0+c2V0U3VjY2Vzc29y
cyhGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbi0+
YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBl
bmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2sp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsK
ICAgICB9CiAKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEu
cmVzdWx0KTsKLSAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgSnVtcCwgT3JpZ2luKCksIGNvbnRpbnVhdGlvbik7Ci0gICAgY29udGludWF0aW9uLT5hZGRQ
cmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51
YXRpb247CisgICAgZm9yIChWYXJpYWJsZSogcmVzdWx0IDogZGF0YS5yZXN1bHQpCisgICAgICAg
IGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgT3JpZ2luKCksIHJlc3VsdCkp
OworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTYxNCwyMiArNTk5LDYgQEAgYm9vbCBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IEZ1bmN0aW9u
SW5mb3JtYXRpb24mIGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBCM0lSR2VuZXJhdG9y
Ojppc0NvbnRpbnVhdGlvblJlYWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkKLXsKLSAgICAvLyBJ
ZiBub3RoaW5nIHRhcmdldHMgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgY3VycmVudCBibG9jayB0
aGVuIHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlCi0gICAgLy8gYW4gb3JwaGFuZWQgQmFzaWNCbG9j
ayBzaW5jZSBpdCBjYW4ndCBiZSByZWFjaGVkIGJ5IGZhbGx0aHJvdWdoLgotICAgIGlmICghZGF0
YS5jb250aW51YXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fY3VycmVudEJs
b2NrID0gZGF0YS5jb250aW51YXRpb24uZ2V0KG1fcHJvYyk7Ci0gICAgaWYgKGRhdGEudHlwZSgp
ID09IEJsb2NrVHlwZTo6SWYpIHsKLSAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250
cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwotICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeShWYXJpYWJs
ZSogdmFyaWFibGUsIEV4cHJlc3Npb25UeXBlIHNvdXJjZSkKIHsKICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwgdmFyaWFi
bGUsIHNvdXJjZSk7CkBAIC02MzcsMjMgKzYwNiwzNSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnVu
aWZ5KFZhcmlhYmxlKiB2YXJpYWJsZSwgRXhwcmVzc2lvblR5cGUgc291cmNlKQogCiB2b2lkIEIz
SVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiBy
ZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgcmVzdWx0KQogewotICAgIEFTU0VSVChyZXN1bHQuc2l6
ZSgpID49IHJlc3VsdFN0YWNrLnNpemUoKSk7CisgICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPD0g
cmVzdWx0U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0
LnNpemUoKTsgKytpKQorICAgICAgICB1bmlmeShyZXN1bHRbcmVzdWx0LnNpemUoKSAtIDEgLSBp
XSwgcmVzdWx0U3RhY2tbcmVzdWx0U3RhY2suc2l6ZSgpIC0gMSAtIGldKTsKK30KIAotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0U3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIHVu
aWZ5KHJlc3VsdFtpXSwgcmVzdWx0U3RhY2tbaV0pOworc3RhdGljIHZvaWQgZHVtcEV4cHJlc3Np
b25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBjb25zdCBCM0lSR2VuZXJhdG9yOjpF
eHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQoreworICAgIGRhdGFMb2dMbihjb21tYSwg
IkV4cHJlc3Npb25TdGFjazoiKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cHJlc3Npb24gOiBl
eHByZXNzaW9uU3RhY2spCisgICAgICAgIGRhdGFMb2dMbihjb21tYSwgKmV4cHJlc3Npb24pOwog
fQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYg
Y29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQordm9p
ZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9s
U3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCiB7CiAgICAgZGF0
YUxvZ0xuKCJQcm9jZXNzaW5nIEdyYXBoOiIpOwogICAgIGRhdGFMb2cobV9wcm9jKTsKICAgICBk
YXRhTG9nTG4oIldpdGggY3VycmVudCBibG9jazoiLCAqbV9jdXJyZW50QmxvY2spOwogICAgIGRh
dGFMb2dMbigiQ29udHJvbCBzdGFjazoiKTsKLSAgICBmb3IgKGNvbnN0IENvbnRyb2xUeXBlJiBk
YXRhIDogY29udHJvbFN0YWNrKQotICAgICAgICBkYXRhTG9nTG4oIiAgIiwgZGF0YSk7Ci0gICAg
ZGF0YUxvZ0xuKCJFeHByZXNzaW9uU3RhY2s6Iik7Ci0gICAgZm9yIChjb25zdCBFeHByZXNzaW9u
VHlwZSYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKLSAgICAgICAgZGF0YUxvZ0xuKCIg
ICIsICpleHByZXNzaW9uKTsKKyAgICBmb3IgKGF1dG8mIGRhdGEgOiBjb250cm9sU3RhY2spIHsK
KyAgICAgICAgZGF0YUxvZ0xuKCIgICIsIGRhdGEuY29udHJvbERhdGEpOworICAgICAgICBpZiAo
ZGF0YS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5zaXplKCkpIHsKKyAgICAgICAgICAgIENvbW1h
UHJpbnRlciBjb21tYSgiICAgICIsICIgIHdpdGggIik7CisgICAgICAgICAgICBkdW1wRXhwcmVz
c2lvblN0YWNrKGNvbW1hLCBkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIENvbW1hUHJpbnRlciBjb21tYSgiICAiLCAiIik7CisgICAgZHVtcEV4
cHJlc3Npb25TdGFjayhjb21tYSwgZXhwcmVzc2lvblN0YWNrKTsKICAgICBkYXRhTG9nTG4oIlxu
Iik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFy
c2VyLmgKaW5kZXggNDIzODY5NjU2NGIxNjIzZDBiYTY5YzAxNzk3M2QwZDBjN2Q4NzYyZi4uNWYy
MDgxNzg5MDJiZjY2NzlkMTIyMzVkNDA5YzkzOGQ4M2YzMDhlNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTQzLDI0ICs0MywzMSBA
QCBjbGFzcyBGdW5jdGlvblBhcnNlciA6IHB1YmxpYyBQYXJzZXIgewogcHVibGljOgogICAgIHR5
cGVkZWYgdHlwZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvblR5cGUgRXhwcmVzc2lvblR5cGU7CiAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpDb250cm9sVHlwZSBDb250cm9sVHlwZTsKKyAg
ICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkV4cHJlc3Npb25MaXN0IEV4cHJlc3Npb25MaXN0
OwogCiAgICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9u
U3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVj
dG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMpOwogCiAgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2UoKTsKIAorICAgIHN0cnVjdCBDb250cm9sRW50cnkgeworICAgICAg
ICBFeHByZXNzaW9uTGlzdCBlbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgQ29udHJv
bFR5cGUgY29udHJvbERhdGE7CisgICAgfTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZUJsb2NrKCk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHByZXNzaW9uKE9w
VHlwZSk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVbnJlYWNoYWJsZUV4cHJl
c3Npb24oT3BUeXBlKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oKTsK
ICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeUNvbnRyb2woVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYsIHVuc2lnbmVkIGxldmVsKTsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBvcEV4cHJlc3Npb25TdGFjayhFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIENvbnRl
eHQmIG1fY29udGV4dDsKLSAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IG1fZXhwcmVzc2lv
blN0YWNrOwotICAgIFZlY3RvcjxDb250cm9sVHlwZT4gbV9jb250cm9sU3RhY2s7CisgICAgRXhw
cmVzc2lvbkxpc3QgbV9leHByZXNzaW9uU3RhY2s7CisgICAgVmVjdG9yPENvbnRyb2xFbnRyeT4g
bV9jb250cm9sU3RhY2s7CiAgICAgY29uc3QgU2lnbmF0dXJlKiBtX3NpZ25hdHVyZTsKICAgICBj
b25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIG1fZnVuY3Rpb25zOwogICAgIHVuc2ln
bmVkIG1fdW5yZWFjaGFibGVCbG9ja3MgeyAwIH07CkBAIC0xMjAsNyArMTI3LDcgQEAgYm9vbCBG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCbG9jaygpCiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAob3AgPT0gT3BUeXBlOjpFbmQgJiYgIW1fY29udHJvbFN0YWNrLnNpemUoKSkKLSAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1fdW5yZWFjaGFibGVCbG9ja3MgPyB0
cnVlIDogYWRkUmV0dXJuKCk7CiAKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MpIHsK
ICAgICAgICAgICAgIGlmICghcGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oc3RhdGljX2Nhc3Q8
T3BUeXBlPihvcCkpKSB7CkBAIC0xMzYsOSArMTQzLDI0IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlQmxvY2soKQogCiAgICAgfQogCi0gICAgLy8gSSdtIG5vdCBzdXJlIGlm
IHdlIHNob3VsZCBjaGVjayB0aGUgZXhwcmVzc2lvbiBzdGFjayBoZXJlLi4uCi0gICAgcmV0dXJu
IHRydWU7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ29udGV4dD4KK2Jvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OmFkZFJldHVy
bigpCit7CisgICAgRXhwcmVzc2lvbkxpc3QgcmV0dXJuVmFsdWVzOworICAgIGlmIChtX3NpZ25h
dHVyZS0+cmV0dXJuVHlwZSAhPSBWb2lkKSB7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJldHVy
blZhbHVlOworICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhyZXR1cm5WYWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVyblZhbHVlcy5hcHBlbmQocmV0
dXJuVmFsdWUpOworICAgIH0KKworICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOworICAgIHJl
dHVybiBtX2NvbnRleHQuYWRkUmV0dXJuKHJldHVyblZhbHVlcyk7Cit9CisKICNkZWZpbmUgQ1JF
QVRFX0NBU0UobmFtZSwgaWQsIGIzb3ApIGNhc2UgbmFtZToKIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q29udGV4dD4KQEAgLTI4OCw3ICszMTAsOCBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQogICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBl
KGlubGluZVNpZ25hdHVyZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
bV9jb250cm9sU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRCbG9jayhpbmxpbmVTaWduYXR1cmUp
KTsKKyAgICAgICAgbV9jb250cm9sU3RhY2suYXBwZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25T
dGFjayksIG1fY29udGV4dC5hZGRCbG9jayhpbmxpbmVTaWduYXR1cmUpIH0pOworICAgICAgICBt
X2V4cHJlc3Npb25TdGFjayA9IEV4cHJlc3Npb25MaXN0KCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIApAQCAtMjk3LDcgKzMyMCw4IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAgICAgICAgIGlmICghcGFyc2VWYWx1ZVR5
cGUoaW5saW5lU2lnbmF0dXJlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICBtX2NvbnRyb2xTdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZExvb3AoaW5saW5lU2lnbmF0dXJl
KSk7CisgICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUobV9leHByZXNzaW9u
U3RhY2spLCBtX2NvbnRleHQuYWRkTG9vcChpbmxpbmVTaWduYXR1cmUpIH0pOworICAgICAgICBt
X2V4cHJlc3Npb25TdGFjayA9IEV4cHJlc3Npb25MaXN0KCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIApAQCAtMzE0LDcgKzMzOCw4IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAgICAgICAgIGlmICghbV9jb250ZXh0LmFk
ZElmKGNvbmRpdGlvbiwgaW5saW5lU2lnbmF0dXJlLCBjb250cm9sKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBlbmQoY29udHJvbCk7Cisg
ICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUobV9leHByZXNzaW9uU3RhY2sp
LCBjb250cm9sIH0pOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IEV4cHJlc3Npb25MaXN0
KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzIzLDcgKzM0OCwxMSBAQCBi
b29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQog
ICAgICAgICAgICAgbV9jb250ZXh0LnNldEVycm9yTWVzc2FnZSgiQXR0ZW1wdGVkIHRvIHVzZSBl
bHNlIGJsb2NrIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBmdW5jdGlvbiIpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2NvbnRleHQuYWRkRWxz
ZShtX2NvbnRyb2xTdGFjay5sYXN0KCksIG1fZXhwcmVzc2lvblN0YWNrKTsKKworICAgICAgICBp
ZiAoIW1fY29udGV4dC5hZGRFbHNlKG1fY29udHJvbFN0YWNrLmxhc3QoKS5jb250cm9sRGF0YSwg
bV9leHByZXNzaW9uU3RhY2spKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBt
X2V4cHJlc3Npb25TdGFjay5zaHJpbmsoMCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogICAgIGNhc2UgT3BUeXBlOjpCcjoKQEAgLTMzOSwyOSArMzY4LDMxIEBAIGJvb2wgRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7CiAKLSAgICAgICAgQ29u
dHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAx
IC0gdGFyZ2V0XTsKKyAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1tt
X2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YTsKIAogICAgICAg
ICByZXR1cm4gbV9jb250ZXh0LmFkZEJyYW5jaChkYXRhLCBjb25kaXRpb24sIG1fZXhwcmVzc2lv
blN0YWNrKTsKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6UmV0dXJuOiB7Ci0gICAgICAgIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gcmV0dXJuVmFsdWVzOwotICAgICAgICBpZiAobV9zaWdu
YXR1cmUtPnJldHVyblR5cGUgIT0gVm9pZCkgewotICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUg
cmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXBvcEV4cHJlc3Npb25TdGFjayhyZXR1cm5W
YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm5WYWx1ZXMuYXBwZW5kKHJldHVyblZhbHVlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOwotICAgICAgICByZXR1
cm4gbV9jb250ZXh0LmFkZFJldHVybihyZXR1cm5WYWx1ZXMpOworICAgICAgICByZXR1cm4gYWRk
UmV0dXJuKCk7CiAgICAgfQogCiAgICAgY2FzZSBPcFR5cGU6OkVuZDogewotICAgICAgICBDb250
cm9sVHlwZSBkYXRhID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgcmV0dXJu
IG1fY29udGV4dC5lbmRCbG9jayhkYXRhLCBtX2V4cHJlc3Npb25TdGFjayk7CisgICAgICAgIENv
bnRyb2xFbnRyeSBkYXRhID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSBsaXR0bGUgd2VpcmQgaW4gdGhhdCBpdCB3aWxsIG1vZGlmeSB0aGUg
ZXhwcmVzc2lvblN0YWNrIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBibG9jay4KKyAgICAgICAgLy8g
VGhhdCdzIGEgbGl0dGxlIHRvbyBlZmZlY3RmdWwgZm9yIG1lIGJ1dCBJIGRvbid0IGhhdmUgYSBi
ZXR0ZXIgQVBJIHJpZ2h0IG5vdy4KKyAgICAgICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzUzCisgICAgICAgIGlmICghbV9jb250ZXh0LmVuZEJs
b2NrKGRhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc3dhcChkYXRhLmVuY2xvc2VkRXhwcmVzc2lvblN0
YWNrKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBPcFR5cGU6OlVu
cmVhY2hhYmxlOiB7CisgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBjYXNlIE9wVHlwZTo6VW5yZWFjaGFibGU6CiAgICAg
Y2FzZSBPcFR5cGU6OlNlbGVjdDoKICAgICBjYXNlIE9wVHlwZTo6QnJUYWJsZToKICAgICBjYXNl
IE9wVHlwZTo6Tm9wOgpAQCAtMzg2LDE3ICs0MTcsMjAgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oT3BUeXBlIG9wKQogICAgICAgICBp
ZiAobV91bnJlYWNoYWJsZUJsb2NrcyA+IDEpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrLmxhc3QoKTsKLSAgICAg
ICAgQVNTRVJUKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOworICAgICAgICBDb250cm9s
RW50cnkmIGRhdGEgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CiAgICAgICAgIG1fdW5yZWFjaGFi
bGVCbG9ja3MgPSAwOwotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmFkZEVsc2UoZGF0YSwgbV9l
eHByZXNzaW9uU3RhY2spOworICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRFbHNlVG9VbnJlYWNo
YWJsZShkYXRhLmNvbnRyb2xEYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKICAgICBjYXNlIE9wVHlwZTo6RW5kOiB7CiAgICAgICAgIGlmIChtX3VucmVhY2hhYmxl
QmxvY2tzID09IDEpIHsKLSAgICAgICAgICAgIENvbnRyb2xUeXBlIGRhdGEgPSBtX2NvbnRyb2xT
dGFjay50YWtlTGFzdCgpOwotICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuaXNDb250aW51YXRp
b25SZWFjaGFibGUoZGF0YSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBDb250cm9sRW50cnkgZGF0YSA9IG1fY29udHJvbFN0YWNrLnRha2VMYXN0KCk7CisgICAg
ICAgICAgICBpZiAoIW1fY29udGV4dC5hZGRFbmRUb1VucmVhY2hhYmxlKGRhdGEpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3
YXAoZGF0YS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CiAgICAgICAgIH0KICAgICAgICAgbV91
bnJlYWNoYWJsZUJsb2Nrcy0tOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQzOSwxMiArNDcz
LDEyIEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHBy
ZXNzaW9uKE9wVHlwZSBvcCkKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CiBib29sIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+Ojpwb3BFeHByZXNzaW9uU3RhY2soRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkKIHsKLSAgICBpZiAoIW1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSkgeworICAgIGlmICht
X2V4cHJlc3Npb25TdGFjay5zaXplKCkpIHsKICAgICAgICAgcmVzdWx0ID0gbV9leHByZXNzaW9u
U3RhY2sudGFrZUxhc3QoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgbV9j
b250ZXh0LnNldEVycm9yTWVzc2FnZSgiQXR0ZW1wdGVkIHRvIHVzZSBhbiBzdGFjayB2YWx1ZSB3
aGVuIG5vbmUgZXhpc3RlZCIpOworICAgIG1fY29udGV4dC5zZXRFcnJvck1lc3NhZ2UoIkF0dGVt
cHRlZCB0byB1c2UgYSBzdGFjayB2YWx1ZSB3aGVuIG5vbmUgZXhpc3RlZCIpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5j
cHAKaW5kZXggYjgwOWNkZDA2OGIxODFhMWJmZTk2OGQ4YTA5OGUxNWYxODk5ZGUwZi4uMzk4M2I3
YTIxNjcxYzljMmJiODNmNTA3MzUxMWZhODBmYWNiZThkYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVk
ZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTYyLDYgKzYzLDggQEAg
cHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBoYXNOb25W
b2lkU2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUgIT0gVm9pZDsgfQorCiAg
ICAgICAgIEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja1R5cGU7IH0KICAg
ICAgICAgVHlwZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQogICAg
IHByaXZhdGU6CkBAIC03MSw2ICs3NCw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFR5cGUgRXhw
cmVzc2lvblR5cGU7CiAgICAgdHlwZWRlZiBDb250cm9sRGF0YSBDb250cm9sVHlwZTsKICAgICB0
eXBlZGVmIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gRXhwcmVzc2lvbkxpc3Q7CisgICAgdHlw
ZWRlZiBGdW5jdGlvblBhcnNlcjxWYWxpZGF0ZT46OkNvbnRyb2xFbnRyeSBDb250cm9sRW50cnk7
CisKICAgICBzdGF0aWMgY29uc3QgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0gVm9p
ZDsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBWZWN0
b3I8VHlwZT4mKTsKQEAgLTk0LDE1ICs5OSwxNyBAQCBwdWJsaWM6CiAgICAgQ29udHJvbERhdGEg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOwogICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWdu
YXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAK
ICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgRXhwcmVzc2lvbkxp
c3QmIHJldHVyblZhbHVlcyk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNo
KENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYgcmV0dXJuVmFsdWVzKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9j
ayhDb250cm9sRGF0YSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25M
aXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVu
ZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CisKIAogICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5kZXgsIGNvbnN0IEZ1bmN0aW9uSW5mb3Jt
YXRpb24mLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBpc0NvbnRpbnVhdGlvblJl
YWNoYWJsZShDb250cm9sRGF0YSYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgZHVtcChj
b25zdCBWZWN0b3I8Q29udHJvbFR5cGU+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25M
aXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJv
bEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0
YWNrKTsKIAogICAgIHZvaWQgc2V0RXJyb3JNZXNzYWdlKFN0cmluZyYmIG1lc3NhZ2UpIHsgQVNT
RVJUKG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpKTsgbV9lcnJvck1lc3NhZ2UgPSBXVEZNb3ZlKG1l
c3NhZ2UpOyB9CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJy
b3JNZXNzYWdlOyB9CkBAIC0xODQsMTMgKzE5MSwxOCBAQCBib29sIFZhbGlkYXRlOjphZGRJZihF
eHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgcmVz
dQogCiBib29sIFZhbGlkYXRlOjphZGRFbHNlKENvbnRyb2xUeXBlJiBjdXJyZW50LCBjb25zdCBF
eHByZXNzaW9uTGlzdCYgdmFsdWVzKQogewotICAgIGlmIChjdXJyZW50LnR5cGUoKSAhPSBCbG9j
a1R5cGU6OklmKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQXR0ZW1w
dGluZyB0byBhZGQgZWxzZSBibG9jayB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBpZiIpOwor
ICAgIGlmICghdW5pZnkodmFsdWVzLCBjdXJyZW50KSkgeworICAgICAgICBBU1NFUlQoZXJyb3JN
ZXNzYWdlKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCF1bmlm
eSh2YWx1ZXMsIGN1cnJlbnQpKSB7Ci0gICAgICAgIEFTU0VSVChlcnJvck1lc3NhZ2UoKSk7Cisg
ICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGN1cnJlbnQpOworfQorCitib29sIFZhbGlk
YXRlOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYgY3VycmVudCkKK3sKKyAgICBp
ZiAoY3VycmVudC50eXBlKCkgIT0gQmxvY2tUeXBlOjpJZikgeworICAgICAgICBtX2Vycm9yTWVz
c2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHRpbmcgdG8gYWRkIGVsc2UgYmxvY2sgdG8gc29tZXRo
aW5nIG90aGVyIHRoYW4gYW4gaWYiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApA
QCAtMjE5LDcgKzIzMSw3IEBAIGJvb2wgVmFsaWRhdGU6OmFkZEJyYW5jaChDb250cm9sVHlwZSYg
dGFyZ2V0LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAodGFyZ2V0LnR5cGUoKSA9PSBCbG9ja1R5cGU6Oklm
KQorICAgIGlmICh0YXJnZXQudHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBpZiAodGFyZ2V0LnNpZ25hdHVyZSgpID09IFZvaWQpCkBAIC0yMzMs
MjAgKzI0NSwzMyBAQCBib29sIFZhbGlkYXRlOjphZGRCcmFuY2goQ29udHJvbFR5cGUmIHRhcmdl
dCwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBWYWxpZGF0ZTo6ZW5kQmxvY2soQ29udHJvbFR5cGUmIGJsb2NrLCBFeHByZXNz
aW9uTGlzdCYgc3RhY2spCitib29sIFZhbGlkYXRlOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVu
dHJ5LCBFeHByZXNzaW9uTGlzdCYgc3RhY2spCiB7CisgICAgQ29udHJvbERhdGEmIGJsb2NrID0g
ZW50cnkuY29udHJvbERhdGE7CiAgICAgaWYgKGJsb2NrLnNpZ25hdHVyZSgpID09IFZvaWQpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCisgICAgaWYgKCFzdGFjay5zaXplKCkpIHsKKyAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJCbG9jayBmYWxsdGhvdWdoIGV4cGVjdGVkIHR5
cGU6ICIsIHRvU3RyaW5nKGJsb2NrLnNpZ25hdHVyZSgpKSwgIiBidXQgdGhlIHN0YWNrIHdhcyBl
bXB0eSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgQVNTRVJUKHN0YWNr
LnNpemUoKSA9PSAxKTsKLSAgICBpZiAoYmxvY2suc2lnbmF0dXJlKCkgPT0gc3RhY2tbMF0pCisg
ICAgaWYgKGJsb2NrLnNpZ25hdHVyZSgpID09IHN0YWNrLmxhc3QoKSkgeworICAgICAgICBlbnRy
eS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoYmxvY2suc2lnbmF0dXJlKCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBtX2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJp
bmcoIkJsb2NrIGZhbGx0aHJvdWdoIGhhcyBleHBlY3RlZCB0eXBlOiAiLCB0b1N0cmluZyhibG9j
ay5zaWduYXR1cmUoKSksICIgYnV0IHByb2R1Y2VkIHR5cGU6ICIsIHRvU3RyaW5nKGJsb2NrLnNp
Z25hdHVyZSgpKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIFZhbGlkYXRlOjphZGRF
bmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpCit7CisgICAgaWYgKGVudHJ5LmNv
bnRyb2xEYXRhLnNpZ25hdHVyZSgpICE9IFZvaWQpCisgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrLmFwcGVuZChlbnRyeS5jb250cm9sRGF0YS5zaWduYXR1cmUoKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKIGJvb2wgVmFsaWRhdGU6OmFkZENhbGwodW5zaWduZWQsIGNvbnN0
IEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8sIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4m
IGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCiB7CiAgICAgaWYgKGluZm8uc2lnbmF0dXJl
LT5hcmd1bWVudHMuc2l6ZSgpICE9IGFyZ3Muc2l6ZSgpKSB7CkBAIC0yODgsOSArMzEzLDEwIEBA
IGJvb2wgVmFsaWRhdGU6OnVuaWZ5KGNvbnN0IEV4cHJlc3Npb25MaXN0JiB2YWx1ZXMsIGNvbnN0
IENvbnRyb2xUeXBlJiBibG9jaykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgVmFsaWRh
dGU6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYsIGNvbnN0IEV4cHJlc3Npb25MaXN0
JikKK3ZvaWQgVmFsaWRhdGU6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25z
dCBFeHByZXNzaW9uTGlzdCYpCiB7Ci0gICAgZGF0YUxvZ0xuKCJWYWxpZGF0aW5nIik7CisgICAg
Ly8gSWYgeW91IG5lZWQgdGhpcyB0aGVuIHlvdSBzaG91bGQgZml4IHRoZSB2YWxpZGF0b3IncyBl
cnJvciBtZXNzYWdlcyBpbnN0ZWFkLi4uCisgICAgLy8gVGhpbmsgb2YgdGhpcyBhcyBwZW5hbmNl
IGZvciB0aGUgc2luIG9mIGJhZCBlcnJvciBtZXNzYWdlcy4KIH0KIAogU3RyaW5nIHZhbGlkYXRl
RnVuY3Rpb24oY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBTaWdu
YXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5j
dGlvbnMpCkBAIC0yOTksNiArMzI1LDEwIEBAIFN0cmluZyB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzCiAgICAg
RnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+IHZhbGlkYXRvcihjb250ZXh0LCBzb3VyY2UsIGxlbmd0
aCwgc2lnbmF0dXJlLCBmdW5jdGlvbnMpOwogICAgIGlmICghdmFsaWRhdG9yLnBhcnNlKCkpIHsK
ICAgICAgICAgLy8gRklYTUU6IGFkZCBiZXR0ZXIgbG9jYXRpb24gaW5mb3JtYXRpb24gaGVyZS4g
c2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0Mjg4CisgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbmV2ZXIgbm90IGhhdmUgYW4gZXJyb3IgbWVzc2FnZSBp
ZiB3ZSByZXR1cm4gZmFsc2UuCisgICAgICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDM1NAorICAgICAgICBpZiAoY29udGV4dC5lcnJvck1lc3Nh
Z2UoKS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiAiVW5rbm93biBlcnJvciI7CiAgICAg
ICAgIHJldHVybiBjb250ZXh0LmVycm9yTWVzc2FnZSgpOwogICAgIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>