<?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>151533</bug_id>
          
          <creation_ts>2015-11-21 11:27:59 -0800</creation_ts>
          <short_desc>[GTK] RenderThemeGtk::platformActiveSelectionBackgroundColor, et. al. should not clobber state of cached GtkStyleContexts</short_desc>
          <delta_ts>2015-12-10 02:16:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>Other</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugzilla.gnome.org/show_bug.cgi?id=758968</see_also>
          <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="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1143955</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-11-21 11:27:59 -0800</bug_when>
    <thetext>platformActiveSelectionBackgroundColor(), platformInactiveSelectionBackgroundColor(), etc. are const functions intended only to return a color used for painting, but they also change the state of the cached GtkStyleContexts we use for GTK_TYPE_ENTRY and GTK_TYPE_TREE_VIEW. This could cause theme colors returned by those GtkStyleContexts to change unexpectedly.

At first I thought this was a regression I introduced in r192723, but it was actually introduced about a year ago.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143957</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-11-21 11:48:10 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; This could cause theme colors returned by those GtkStyleContexts to change unexpectedly.

This didn&apos;t cause any regression only because every place using these style contexts explicitly sets the state of the style contexts before use. In fact, the GtkTreeView style context is not used anywhere else, and the GtkEntry style context is only used in paintTextField, which does set the state before use (and then reverts it using save/restore), so this cannot have broken anything in practice. But it&apos;s a landmine waiting for the next programmer to trip it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143958</commentid>
    <comment_count>2</comment_count>
      <attachid>266029</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-11-21 11:50:38 -0800</bug_when>
    <thetext>Created attachment 266029
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143962</commentid>
    <comment_count>3</comment_count>
      <attachid>266031</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-11-21 12:48:03 -0800</bug_when>
    <thetext>Created attachment 266031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144009</commentid>
    <comment_count>4</comment_count>
      <attachid>266031</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-22 00:50:46 -0800</bug_when>
    <thetext>Comment on attachment 266031
Patch

Clearing flags on attachment: 266031

Committed r192727: &lt;http://trac.webkit.org/changeset/192727&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144010</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-22 00:50:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144027</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-22 02:49:01 -0800</bug_when>
    <thetext>Reverted r192727 for reason:

It made the selections transparent again and broke /webkit2/WebKitWebView/snapshot

Committed r192731: &lt;http://trac.webkit.org/changeset/192731&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144252</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-11-23 17:57:05 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; (In reply to comment #0)
&gt; &gt; This could cause theme colors returned by those GtkStyleContexts to change unexpectedly.
&gt; 
&gt; This didn&apos;t cause any regression only because every place using these style
&gt; contexts explicitly sets the state of the style contexts before use. In
&gt; fact, the GtkTreeView style context is not used anywhere else, and the
&gt; GtkEntry style context is only used in paintTextField, which does set the
&gt; state before use (and then reverts it using save/restore), so this cannot
&gt; have broken anything in practice.

I missed that this function is sometimes called with the GtkButton style context, so I see that this patch could affect the results of RenderThemeGtk::paintButton and RenderThemeGtk::paintMenuList (presumably for the better). But I frankly have no clue how it broke selections. I need to investigate closer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145901</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-12-03 02:17:00 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I missed that this function is sometimes called with the GtkButton style
&gt; context, so I see that this patch could affect the results of
&gt; RenderThemeGtk::paintButton

This might be causing GNOME #758968</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147848</commentid>
    <comment_count>9</comment_count>
      <attachid>267022</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-12-09 10:47:27 -0800</bug_when>
    <thetext>Created attachment 267022
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148088</commentid>
    <comment_count>10</comment_count>
      <attachid>267022</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-12-10 00:20:32 -0800</bug_when>
    <thetext>Comment on attachment 267022
Patch

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

Ok, let&apos;s try it out.

&gt; Source/WebCore/rendering/RenderThemeGtk.cpp:398
&gt; -    GtkStyleContext* context = 0;
&gt; +    GRefPtr&lt;GtkStyleContext&gt; context = nullptr;

GRefPtr is already nullptr initialized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148100</commentid>
    <comment_count>11</comment_count>
      <attachid>267078</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-12-10 01:18:19 -0800</bug_when>
    <thetext>Created attachment 267078
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148108</commentid>
    <comment_count>12</comment_count>
      <attachid>267078</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-10 02:15:57 -0800</bug_when>
    <thetext>Comment on attachment 267078
Patch

Clearing flags on attachment: 267078

Committed r193896: &lt;http://trac.webkit.org/changeset/193896&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148109</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-10 02:16:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266029</attachid>
            <date>2015-11-21 11:50:38 -0800</date>
            <delta_ts>2015-11-21 12:48:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151533-20151121135024.patch</filename>
            <type>text/plain</type>
            <size>2665</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyNzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFhYTIzNmE1ZDU3ZDZm
YTUzYWU2NDllODE3ODIwNjg0YWNjZjY1Zi4uZDY2NWYwZjI4NDE0MDllZDg4YzE4MWE4YjE0Y2Nh
Y2U0MjUxN2E1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI1IEBACiAyMDE1LTExLTIxICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBS
ZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IsIGV0
LiBhbC4gc2hvdWxkIG5vdCBjbG9iYmVyIHN0YXRlIG9mIGNhY2hlZCBHdGtTdHlsZUNvbnRleHRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1MzMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBwbGF0Zm9y
bUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpLCBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCksIGV0Yy4KKyAgICAgICAgYXJlIGNvbnN0IGZ1bmN0aW9ucyBp
bnRlbmRlZCBvbmx5IHRvIHJldHVybiBhIGNvbG9yIHVzZWQgZm9yIHBhaW50aW5nLCBidXQgc2lu
Y2UgcjE3NDkyOQorICAgICAgICB0aGV5IGFsc28gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgY2Fj
aGVkIHN0eWxlIGNvbnRleHRzIHdlIHVzZSBmb3IgR1RLX1RZUEVfRU5UUlkgYW5kCisgICAgICAg
IEdUS19UWVBFX1RSRUVfVklFVy4gVGhhdCdzIHdyb25nOyB0aG9zZSBzdHlsZSBjb250ZXh0cyBz
aG91bGQgbm90IGhhdmUgYW55IHN0YXRlIHNldC4gVGhpcworICAgICAgICBjb3VsZCBjYXVzZSB0
aGVtZSBjb2xvcnMgcmV0dXJuZWQgYnkgdGhvc2UgR3RrU3R5bGVDb250ZXh0cyB0byBjaGFuZ2Ug
dW5leHBlY3RlZGx5LAorICAgICAgICBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgc3RhdGUgaXMg
ZXhwbGljaXRseSBzZXQgYmVmb3JlIGVhY2ggdXNlLCBvciB3aGV0aGVyIHRoZSB0aGVtZQorICAg
ICAgICBhY3R1YWxseSB1c2VzIHRoZSBzdGF0ZXMuCisKKyAgICAgICAgRml4IHRoaXMgd2l0aCBh
IGd0a19zdHlsZV9jb250ZXh0X3NhdmUoKS9ndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKCkgcGFp
ci4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpzdHlsZUNvbG9yKToKKworMjAxNS0xMS0yMSAgTWljaGFlbCBDYXRhbnphcm8gIDxt
Y2F0YW56YXJvQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10gT2ZmLWJ5LW9uZSBlcnJvciBp
biBnZXRTdHlsZUNvbnRleHQoKQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUxNTI0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVHdGsuY3BwCmluZGV4IGRmN2M0MjYzN2Y4YmU1MmM1MTE5M2E5MDFkYTdlYzMzODAyZjAyZWYu
LjA0NTk3Y2FmNDViNzEyNzM5ZTg0MmNjNWZhOTQwYzQxNzJiNjFkMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcApAQCAtMTM0OCw5ICsxMzQ4LDggQEAg
ZW51bSBTdHlsZUNvbG9yVHlwZSB7IFN0eWxlQ29sb3JCYWNrZ3JvdW5kLCBTdHlsZUNvbG9yRm9y
ZWdyb3VuZCB9OwogCiBzdGF0aWMgQ29sb3Igc3R5bGVDb2xvcihHVHlwZSB3aWRnZXRUeXBlLCBH
dGtTdGF0ZUZsYWdzIHN0YXRlLCBTdHlsZUNvbG9yVHlwZSBjb2xvclR5cGUpCiB7Ci0KICAgICBH
dGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7Ci0g
ICAgLy8gUmVjZW50IEdUSysgdmVyc2lvbnMgKD4gMy4xNCkgcmVxdWlyZSB0byBleHBsaWNpdGx5
IHNldCB0aGUgc3RhdGUgYmVmb3JlIGdldHRpbmcgdGhlIGNvbG9yLgorICAgIGd0a19zdHlsZV9j
b250ZXh0X3NhdmUoY29udGV4dCk7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNv
bnRleHQsIHN0YXRlKTsKIAogICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwpAQCAtMTM1OCw2ICsx
MzU3LDggQEAgc3RhdGljIENvbG9yIHN0eWxlQ29sb3IoR1R5cGUgd2lkZ2V0VHlwZSwgR3RrU3Rh
dGVGbGFncyBzdGF0ZSwgU3R5bGVDb2xvclR5cGUgY28KICAgICAgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X2JhY2tncm91bmRfY29sb3IoY29udGV4dCwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0
YXRlKGNvbnRleHQpLCAmZ2RrUkdCQUNvbG9yKTsKICAgICBlbHNlCiAgICAgICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9jb2xvcihjb250ZXh0LCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUo
Y29udGV4dCksICZnZGtSR0JBQ29sb3IpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9y
ZShjb250ZXh0KTsKICAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266031</attachid>
            <date>2015-11-21 12:48:03 -0800</date>
            <delta_ts>2015-12-09 10:47:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151533-20151121144749.patch</filename>
            <type>text/plain</type>
            <size>3058</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyNzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2I5OWY0ODgxOTFjYTIz
MDYxZWQyMGQ3OGU4NzEzMzFkNDUxZTQ2MC4uYjA2MDYzZjM5MjQ0Y2NmZTMwNWIxNzQ0MGQ1YzAz
ZGVjNjc0YTA3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSArMSwyOCBAQAorMjAxNS0xMS0yMSAgTWljaGFl
bCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVu
ZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yLCBldC4g
YWwuIHNob3VsZCBub3QgY2xvYmJlciBzdGF0ZSBvZiBjYWNoZWQgR3RrU3R5bGVDb250ZXh0cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNTMzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcGxhdGZvcm1B
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSwgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpLCBldGMuCisgICAgICAgIGFyZSBjb25zdCBmdW5jdGlvbnMgaW50
ZW5kZWQgb25seSB0byByZXR1cm4gYSBjb2xvciB1c2VkIGZvciBwYWludGluZywgYnV0IHNpbmNl
IHIxNzQ5MjkKKyAgICAgICAgdGhleSBhbHNvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIGNhY2hl
ZCBzdHlsZSBjb250ZXh0cyB3ZSB1c2UgZm9yIEdUS19UWVBFX0VOVFJZIGFuZAorICAgICAgICBH
VEtfVFlQRV9UUkVFX1ZJRVcuIFRoYXQncyB3cm9uZzsgdGhvc2Ugc3R5bGUgY29udGV4dHMgc2hv
dWxkIG5vdCBoYXZlIGFueSBzdGF0ZSBzZXQuIFRoaXMKKyAgICAgICAgY291bGQgY2F1c2UgdGhl
bWUgY29sb3JzIHJldHVybmVkIGJ5IHRob3NlIEd0a1N0eWxlQ29udGV4dHMgdG8gY2hhbmdlIHVu
ZXhwZWN0ZWRseSwKKyAgICAgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHN0YXRlIGlzIGV4
cGxpY2l0bHkgc2V0IGJlZm9yZSBlYWNoIHVzZSwgb3Igd2hldGhlciB0aGUgdGhlbWUKKyAgICAg
ICAgYWN0dWFsbHkgdXNlcyB0aGUgc3RhdGVzLgorCisgICAgICAgIFRoaXMgZGlkbid0IGNhdXNl
IGFueSByZWdyZXNzaW9uIG9ubHkgYmVjYXVzZSBldmVyeSBwbGFjZSB1c2luZyB0aGVzZSBzdHls
ZSBjb250ZXh0cworICAgICAgICBleHBsaWNpdGx5IHNldHMgdGhlIHN0YXRlIG9mIHRoZSBzdHls
ZSBjb250ZXh0cyBiZWZvcmUgdXNlLiBJbiBmYWN0LCB0aGUgR3RrVHJlZVZpZXcgc3R5bGUKKyAg
ICAgICAgY29udGV4dCBpcyBub3QgdXNlZCBhbnl3aGVyZSBlbHNlLCBhbmQgdGhlIEd0a0VudHJ5
IHN0eWxlIGNvbnRleHQgaXMgb25seSB1c2VkIGluCisgICAgICAgIHBhaW50VGV4dEZpZWxkLCB3
aGljaCBkb2VzIHNldCB0aGUgc3RhdGUgYmVmb3JlIHVzZSAoYW5kIHRoZW4gcmV2ZXJ0cyBpdCB1
c2luZworICAgICAgICBzYXZlL3Jlc3RvcmUpLCBzbyB0aGlzIGNhbm5vdCBoYXZlIGJyb2tlbiBh
bnl0aGluZyBpbiBwcmFjdGljZS4gQnV0IGl0J3MgYSBsYW5kbWluZSB3YWl0aW5nCisgICAgICAg
IGZvciB0aGUgbmV4dCBwcm9ncmFtbWVyIHRvIHRyaXAgaXQuCisKKyAgICAgICAgRml4IHRoaXMg
d2l0aCBhIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoKS9ndGtfc3R5bGVfY29udGV4dF9yZXN0b3Jl
KCkgcGFpci4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzdHlsZUNvbG9yKToKKwogPT0gUm9sbGVkIG92ZXIgdG8gQ2hhbmdlTG9n
LTIwMTUtMTEtMjEgPT0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsu
Y3BwCmluZGV4IGRmN2M0MjYzN2Y4YmU1MmM1MTE5M2E5MDFkYTdlYzMzODAyZjAyZWYuLjA0NTk3
Y2FmNDViNzEyNzM5ZTg0MmNjNWZhOTQwYzQxNzJiNjFkMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcApAQCAtMTM0OCw5ICsxMzQ4LDggQEAgZW51bSBT
dHlsZUNvbG9yVHlwZSB7IFN0eWxlQ29sb3JCYWNrZ3JvdW5kLCBTdHlsZUNvbG9yRm9yZWdyb3Vu
ZCB9OwogCiBzdGF0aWMgQ29sb3Igc3R5bGVDb2xvcihHVHlwZSB3aWRnZXRUeXBlLCBHdGtTdGF0
ZUZsYWdzIHN0YXRlLCBTdHlsZUNvbG9yVHlwZSBjb2xvclR5cGUpCiB7Ci0KICAgICBHdGtTdHls
ZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7Ci0gICAgLy8g
UmVjZW50IEdUSysgdmVyc2lvbnMgKD4gMy4xNCkgcmVxdWlyZSB0byBleHBsaWNpdGx5IHNldCB0
aGUgc3RhdGUgYmVmb3JlIGdldHRpbmcgdGhlIGNvbG9yLgorICAgIGd0a19zdHlsZV9jb250ZXh0
X3NhdmUoY29udGV4dCk7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQs
IHN0YXRlKTsKIAogICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwpAQCAtMTM1OCw2ICsxMzU3LDgg
QEAgc3RhdGljIENvbG9yIHN0eWxlQ29sb3IoR1R5cGUgd2lkZ2V0VHlwZSwgR3RrU3RhdGVGbGFn
cyBzdGF0ZSwgU3R5bGVDb2xvclR5cGUgY28KICAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X2JhY2tncm91bmRfY29sb3IoY29udGV4dCwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKGNv
bnRleHQpLCAmZ2RrUkdCQUNvbG9yKTsKICAgICBlbHNlCiAgICAgICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9jb2xvcihjb250ZXh0LCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGV4
dCksICZnZGtSR0JBQ29sb3IpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250
ZXh0KTsKICAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267022</attachid>
            <date>2015-12-09 10:47:27 -0800</date>
            <delta_ts>2015-12-10 01:18:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151533-20151209194655.patch</filename>
            <type>text/plain</type>
            <size>42701</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkzODI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjQ3ZjI4ZTBhMGQ3M2Jm
Zjg5M2Q3NjBjMjMyMjIwOTg3N2M0NWY0Ny4uYjBmY2FiY2E3OWFkZjAwZWRiNTFjMzBmYTAyZjc4
MGQyNTQ3ZjkzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE1LTEyLTA5ICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBS
ZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IsIGV0
LiBhbC4gc2hvdWxkIG5vdCBjbG9iYmVyIHN0YXRlIG9mIGNhY2hlZCBHdGtTdHlsZUNvbnRleHRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1MzMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUg
dGhlIHN0eWxlIGNvbnRleHQgY2FjaGUgdG8gc2ltcGxpZnkgdGhlIGNvZGUsIGRyYXN0aWNhbGx5
IHJlZHVjZSB0aGUgbnVtYmVyIG9mCisgICAgICAgIGV4cGVuc2l2ZSBzYXZlL3Jlc3RvcmUgb3Bl
cmF0aW9ucyBwZXJmb3JtZWQgb24gc3R5bGUgY29udGV4dHMsIGFuZCBhdm9pZCB1bndhbnRlZAor
ICAgICAgICBzaWRlLWVmZmVjdHMgaW4gUmVuZGVyVGhlbWVHdGs6OnN0eWxlQ29sb3IuIFRoaXMg
aXMgYWxzbyBhIHNwZWN1bGF0aXZlIGZpeCBmb3IgaW1wcm9wZXIKKyAgICAgICAgYnV0dG9uIHJl
bmRlcmluZyB3aXRoIGNlcnRhaW4gY3VzdG9tIHRoZW1lcywgYW5kIGEgc2ltcGxpZmljYXRpb24g
dGhhdCB3aWxsIG1ha2UgaXQgZWFzaWVyCisgICAgICAgIHRvIGZpeCBidWcgIzE1MDU1MC4KKwor
ICAgICAgICBUaGlzIGNoYW5nZSBkb2VzIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCB3
aGljaCBJIGludGVuZCB0byBjaGVjayBvbiB0aGUgcGVyZiBib3QKKyAgICAgICAgYWZ0ZXIgbGFu
ZGluZyB0byBlbnN1cmUgdGhhdCByZW1vdmluZyB0aGUgY2FjaGUgZG9lcyBub3QgbmVnYXRpdmVs
eSBpbXBhY3QgcGVyZm9ybWFuY2UuCisgICAgICAgIEhvd2V2ZXIsIHRoaXMgaXMgYSBiaXQgdHJp
Y2t5LCBiZWNhdXNlIHRoZSBib3QgaXMgcnVubmluZyBHVEsrIDMuMTYsIHdoZXJlYXMgSSBleHBl
Y3QKKyAgICAgICAgc2F2ZS9yZXN0b3JlIG1pZ2h0IGJlIG11Y2ggbW9yZSBleHBlbnNpdmUgaW4g
R1RLKyAzLjIwLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZVN0eWxlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFN0b2NrU3lt
Ym9saWNJY29uRm9yV2lkZ2V0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0
azo6aW5pdE1lZGlhQ29sb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjph
ZGp1c3RSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRUb2dnbGVTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhaW50VG9nZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjpzZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
dGs6OnNldFJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFp
bnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q29tYm9Cb3hNZXRyaWNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6c3R5bGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpndGtTdHlsZUNoYW5nZWRDYWxsYmFj
ayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzdHlsZUNvbnRleHRNYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Z2V0U3R5bGVDb250ZXh0KTogRGVsZXRlZC4KKwogMjAxNS0x
Mi0wOSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1Rl
eE1hcF0gVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlIHNob3VsZCBub3RpZnkgdGhlIElt
YWdlT2JzZXJ2ZXIgb2YgdGhlIGRhdGEgYWNjZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lR3RrLmNwcAppbmRleCBkZjdjNDI2MzdmOGJlNTJjNTExOTNhOTAxZGE3ZWMz
MzgwMmYwMmVmLi4wMDhiNWEyNzhmNWUzNjNjOTIxNmY0ZDBjYzgzYWNlMTQ3YTBmYzNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKQEAgLTEzNiwyMCAr
MTM2LDE0IEBAIHN0YXRpYyBjb25zdCBpbnQgbWluQXJyb3dTaXplID0gMTU7CiAvLyBUaGlzIGlz
IHRoZSBkZWZhdWx0IHZhbHVlIGRlZmluZWQgYnkgR1RLKywgd2hlcmUgaXQgd2FzIGRlZmluZWQg
YXMgTUlOX0FSUk9XX1dJRFRIIGluIGd0a3NwaW5idXR0b24uYy4KIHN0YXRpYyBjb25zdCBpbnQg
bWluU3BpbkJ1dHRvbkFycm93U2l6ZSA9IDY7CiAKLXR5cGVkZWYgSGFzaE1hcDxHVHlwZSwgR1Jl
ZlB0cjxHdGtTdHlsZUNvbnRleHQ+PiBTdHlsZUNvbnRleHRNYXA7Ci1zdGF0aWMgU3R5bGVDb250
ZXh0TWFwJiBzdHlsZUNvbnRleHRNYXAoKTsKLQogc3RhdGljIHZvaWQgZ3RrU3R5bGVDaGFuZ2Vk
Q2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMqKQogewotICAgIGZvciAoY29uc3QgYXV0byYg
c3R5bGVDb250ZXh0IDogc3R5bGVDb250ZXh0TWFwKCkpCi0gICAgICAgIGd0a19zdHlsZV9jb250
ZXh0X2ludmFsaWRhdGUoc3R5bGVDb250ZXh0LnZhbHVlLmdldCgpKTsKICAgICBzdGF0aWNfY2Fz
dDxTY3JvbGxiYXJUaGVtZUd0ayY+KFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpKS50aGVtZUNoYW5n
ZWQoKTsKICAgICBQYWdlOjp1cGRhdGVTdHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxDaGFuZ2VJ
bkVudmlyb25tZW50KCk7CiB9CiAKLXN0YXRpYyBTdHlsZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4
dE1hcCgpCitzdGF0aWMgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNyZWF0ZVN0eWxlQ29udGV4
dChHVHlwZSB3aWRnZXRUeXBlKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHlsZUNv
bnRleHRNYXA+IG1hcDsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwogICAg
IGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3Rr
X3NldHRpbmdzX2dldF9kZWZhdWx0KCk7CkBAIC0xNTcsMTQgKzE1MSw2IEBAIHN0YXRpYyBTdHls
ZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4dE1hcCgpCiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
c2V0dGluZ3MsICJub3RpZnk6Omd0ay1jb2xvci1zY2hlbWUiLCBHX0NBTExCQUNLKGd0a1N0eWxl
Q2hhbmdlZENhbGxiYWNrKSwgbnVsbHB0cik7CiAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsK
ICAgICB9Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIEd0a1N0eWxlQ29udGV4dCogZ2V0
U3R5bGVDb250ZXh0KEdUeXBlIHdpZGdldFR5cGUpCi17Ci0gICAgU3R5bGVDb250ZXh0TWFwOjpB
ZGRSZXN1bHQgcmVzdWx0ID0gc3R5bGVDb250ZXh0TWFwKCkuYWRkKHdpZGdldFR5cGUsIG51bGxw
dHIpOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmdldCgpOwogCiAgICAgR3RrV2lkZ2V0UGF0aCogcGF0aCA9IGd0a193
aWRnZXRfcGF0aF9uZXcoKTsKICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aCwg
d2lkZ2V0VHlwZSk7CkBAIC0xOTUsMTggKzE4MSwxNSBAQCBzdGF0aWMgR3RrU3R5bGVDb250ZXh0
KiBnZXRTdHlsZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkKICAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfcGF0aChjb250ZXh0LmdldCgpLCBwYXRoKTsKICAgICBndGtfd2lkZ2V0X3BhdGhfZnJl
ZShwYXRoKTsKIAotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjb250ZXh0OwotICAgIHJl
dHVybiBjb250ZXh0LmdldCgpOworICAgIHJldHVybiBjb250ZXh0OwogfQogCiBzdGF0aWMgR1Jl
ZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0VHlw
ZSwgY29uc3QgY2hhciogaWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50
IGljb25TaXplKQogewogICAgIEFTU0VSVChpY29uTmFtZSk7CiAKLSAgICBHdGtTdHlsZUNvbnRl
eHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7Ci0gICAgR3RrSWNvblNl
dCogaWNvblNldCA9IGd0a19zdHlsZV9jb250ZXh0X2xvb2t1cF9pY29uX3NldChjb250ZXh0LCBp
Y29uTmFtZSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworICAgIEdS
ZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KHdpZGdl
dFR5cGUpOworICAgIEd0a0ljb25TZXQqIGljb25TZXQgPSBndGtfc3R5bGVfY29udGV4dF9sb29r
dXBfaWNvbl9zZXQoY29udGV4dC5nZXQoKSwgaWNvbk5hbWUpOwogCiAgICAgZ3VpbnQgZmxhZ3Mg
PSAwOwogICAgIGlmIChzdGF0ZSA9PSBHVEtfU1RBVEVfUFJFTElHSFQpCkBAIC0yMTQsMjAgKzE5
NywxNiBAQCBzdGF0aWMgR1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrSWNvbkZvcldpZGdldFR5
cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgY2hhcgogICAgIGVsc2UgaWYgKHN0YXRlID09IEdU
S19TVEFURV9JTlNFTlNJVElWRSkKICAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5T
RU5TSVRJVkU7CiAKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVj
dGlvbikpOwotICAgIEdka1BpeGJ1ZiogaWNvbiA9IGd0a19pY29uX3NldF9yZW5kZXJfaWNvbl9w
aXhidWYoaWNvblNldCwgY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrSWNvblNpemU+KGljb25TaXpl
KSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0
ZUZsYWdzPihmbGFncykpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29u
dGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZGlyZWN0aW9uKSk7Cisg
ICAgR2RrUGl4YnVmKiBpY29uID0gZ3RrX2ljb25fc2V0X3JlbmRlcl9pY29uX3BpeGJ1ZihpY29u
U2V0LCBjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtJY29uU2l6ZT4oaWNvblNpemUpKTsK
IAogICAgIHJldHVybiBhZG9wdEdSZWYoaWNvbik7CiB9CiAKIHN0YXRpYyBHUmVmUHRyPEdka1Bp
eGJ1Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUs
IGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIqIGZhbGxiYWNrU3RvY2tJ
Y29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpCiB7Ci0g
ICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KHdpZGdldFR5cGUp
OwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKyAgICBHUmVmUHRyPEd0
a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dCh3aWRnZXRUeXBlKTsK
IAogICAgIGd1aW50IGZsYWdzID0gMDsKICAgICBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX1BSRUxJ
R0hUKQpAQCAtMjM1LDE2ICsyMTQsMTQgQEAgc3RhdGljIEdSZWZQdHI8R2RrUGl4YnVmPiBnZXRT
dG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY28KICAgICBl
bHNlIGlmIChzdGF0ZSA9PSBHVEtfU1RBVEVfSU5TRU5TSVRJVkUpCiAgICAgICAgIGZsYWdzIHw9
IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwogCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0
X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtU
ZXh0RGlyZWN0aW9uPihkaXJlY3Rpb24pKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3Rh
dGUoY29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQuZ2V0KCksIHN0YXRpY19j
YXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVjdGlvbikpOwogCiAgICAgR1VuaXF1ZVB0cjxHdGtJ
Y29uSW5mbz4gaW5mbyhndGtfaWNvbl90aGVtZV9sb29rdXBfaWNvbihndGtfaWNvbl90aGVtZV9n
ZXRfZGVmYXVsdCgpLCBzeW1ib2xpY0ljb25OYW1lLCBpY29uU2l6ZSwKICAgICAgICAgc3RhdGlj
X2Nhc3Q8R3RrSWNvbkxvb2t1cEZsYWdzPihHVEtfSUNPTl9MT09LVVBfRk9SQ0VfU1ZHIHwgR1RL
X0lDT05fTE9PS1VQX0ZPUkNFX1NJWkUpKSk7CiAgICAgR2RrUGl4YnVmKiBpY29uID0gbnVsbHB0
cjsKICAgICBpZiAoaW5mbykKLSAgICAgICAgaWNvbiA9IGd0a19pY29uX2luZm9fbG9hZF9zeW1i
b2xpY19mb3JfY29udGV4dChpbmZvLmdldCgpLCBjb250ZXh0LCBudWxscHRyLCBudWxscHRyKTsK
LQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisgICAgICAgIGljb24g
PSBndGtfaWNvbl9pbmZvX2xvYWRfc3ltYm9saWNfZm9yX2NvbnRleHQoaW5mby5nZXQoKSwgY29u
dGV4dC5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAKICAgICBpZiAoIWljb24pIHsKICAgICAg
ICAgaWYgKCFmYWxsYmFja1N0b2NrSWNvbk5hbWUpCkBAIC0yNzEsMjEgKzI0OCwxNyBAQCBzdGF0
aWMgSFRNTE1lZGlhRWxlbWVudCogZ2V0TWVkaWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChjb25z
dCBSZW5kZXJPYmplY3QmIG8pCiB2b2lkIFJlbmRlclRoZW1lR3RrOjppbml0TWVkaWFDb2xvcnMo
KQogewogICAgIEdka1JHQkEgY29sb3I7Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250YWluZXJD
b250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NPTlRBSU5FUik7CisgICAgR1JlZlB0
cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRhaW5lckNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQo
R1RLX1RZUEVfQ09OVEFJTkVSKTsKIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGFp
bmVyQ29udGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGFpbmVy
Q29udGV4dCwgR1RLX1NUQVRFX0ZMQUdfTk9STUFMKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfYmFja2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LCBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3RhdGUoY29udGFpbmVyQ29udGV4dCksICZjb2xvcik7CisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X3N0YXRlKGNvbnRhaW5lckNvbnRleHQuZ2V0KCksIEdUS19TVEFURV9GTEFHX05PUk1B
TCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoY29udGFpbmVy
Q29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKGNvbnRhaW5lckNvbnRl
eHQuZ2V0KCkpLCAmY29sb3IpOwogICAgIG1fcGFuZWxDb2xvciA9IGNvbG9yOwotICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250YWluZXJDb250ZXh0LCBHVEtfU1RBVEVfRkxBR19B
Q1RJVkUpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRh
aW5lckNvbnRleHQsIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250YWluZXJDb250ZXh0
KSwgJmNvbG9yKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGFpbmVyQ29u
dGV4dC5nZXQoKSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LmdldCgpLCBndGtfc3R5bGVf
Y29udGV4dF9nZXRfc3RhdGUoY29udGFpbmVyQ29udGV4dC5nZXQoKSksICZjb2xvcik7CiAgICAg
bV9zbGlkZXJDb2xvciA9IGNvbG9yOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShj
b250YWluZXJDb250ZXh0LCBHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCk7Ci0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoY29udGFpbmVyQ29udGV4dCwgZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X3N0YXRlKGNvbnRhaW5lckNvbnRleHQpLCAmY29sb3IpOworICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250YWluZXJDb250ZXh0LmdldCgpLCBHVEtfU1RBVEVf
RkxBR19TRUxFQ1RFRCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29s
b3IoY29udGFpbmVyQ29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKGNv
bnRhaW5lckNvbnRleHQuZ2V0KCkpLCAmY29sb3IpOwogICAgIG1fc2xpZGVyVGh1bWJDb2xvciA9
IGNvbG9yOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250YWluZXJDb250ZXh0
KTsKIH0KIAogdm9pZCBSZW5kZXJUaGVtZUd0azo6aW5pdE1lZGlhQnV0dG9ucygpCkBAIC00MjIs
MzIgKzM5NSwzMiBAQCBzdGF0aWMgdm9pZCBhZGp1c3RSZWN0Rm9yRm9jdXMoR3RrU3R5bGVDb250
ZXh0KiBjb250ZXh0LCBGbG9hdFJlY3QmIHJlY3QpCiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFk
anVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gMDsKKyAgICBHUmVm
UHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IG51bGxwdHI7CiAgICAgYm9vbCBjaGVja0lu
dGVyaW9yRm9jdXMgPSBmYWxzZTsKICAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0
LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwogICAgIHN3aXRjaCAocGFydCkgewogICAgIGNhc2UgQ2hl
Y2tib3hQYXJ0OgogICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICBjb250ZXh0ID0gZ2V0U3R5
bGVDb250ZXh0KHBhcnQgPT0gQ2hlY2tib3hQYXJ0ID8gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OIDog
R1RLX1RZUEVfUkFESU9fQlVUVE9OKTsKKyAgICAgICAgY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29u
dGV4dChwYXJ0ID09IENoZWNrYm94UGFydCA/IEdUS19UWVBFX0NIRUNLX0JVVFRPTiA6IEdUS19U
WVBFX1JBRElPX0JVVFRPTik7CiAKICAgICAgICAgZ2ludCBpbmRpY2F0b3JTcGFjaW5nOwotICAg
ICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImluZGljYXRvci1zcGFj
aW5nIiwgJmluZGljYXRvclNwYWNpbmcsIG51bGxwdHIpOworICAgICAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUoY29udGV4dC5nZXQoKSwgImluZGljYXRvci1zcGFjaW5nIiwgJmluZGlj
YXRvclNwYWNpbmcsIG51bGxwdHIpOwogICAgICAgICByZWN0LmluZmxhdGUoaW5kaWNhdG9yU3Bh
Y2luZyk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0Ogog
ICAgIGNhc2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6Ci0gICAgICAgIGNvbnRleHQgPSBnZXRTdHls
ZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpOworICAgICAgICBjb250ZXh0ID0gY3JlYXRlU3R5bGVD
b250ZXh0KEdUS19UWVBFX1NDQUxFKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBCdXR0b25Q
YXJ0OgogICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgogICAgIGNhc2UgTWVudWxpc3RQYXJ0
OgotICAgICAgICBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0JVVFRPTik7Cisg
ICAgICAgIGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKICAg
ICAgICAgY2hlY2tJbnRlcmlvckZvY3VzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBUZXh0RmllbGRQYXJ0OgogICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgICAgICBjb250ZXh0
ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKTsKKyAgICAgICAgY29udGV4dCA9IGNy
ZWF0ZVN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRSWSk7CiAgICAgICAgIGNoZWNrSW50ZXJpb3JG
b2N1cyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC00NTcsMTEgKzQz
MCwxMSBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlck9iamVjdCwgRmxvYXRSZQogICAgIEFTU0VSVChjb250ZXh0KTsKICAg
ICBpZiAoY2hlY2tJbnRlcmlvckZvY3VzKSB7CiAgICAgICAgIGdib29sZWFuIGludGVyaW9yRm9j
dXM7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW50ZXJp
b3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywgbnVsbHB0cik7CisgICAgICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdHlsZShjb250ZXh0LmdldCgpLCAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJp
b3JGb2N1cywgbnVsbHB0cik7CiAgICAgICAgIGlmIChpbnRlcmlvckZvY3VzKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBhZGp1c3RSZWN0Rm9yRm9jdXMoY29udGV4dCwgcmVjdCk7
CisgICAgYWRqdXN0UmVjdEZvckZvY3VzKGNvbnRleHQuZ2V0KCksIHJlY3QpOwogfQogCiB2b2lk
IFJlbmRlclRoZW1lR3RrOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50KikgY29uc3QKQEAgLTQ3MSw4ICs0NDQsMTAgQEAgdm9pZCBS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiBzdHlsZSwgRWxlbWUKICAgICAgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHls
ZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUo
R3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSYgc3R5bGUpCitzdGF0aWMgdm9p
ZCBzZXRUb2dnbGVTaXplKEdUeXBlIHdpZGdldFR5cGUsIFJlbmRlclN0eWxlJiBzdHlsZSkKIHsK
KyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4
dCh3aWRnZXRUeXBlKTsKKwogICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNw
ZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0aGVtLgogICAgIGlmICghc3R5bGUud2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDgxLDcgKzQ1Niw3IEBAIHN0YXRpYyB2b2lkIHNldFRvZ2dsZVNp
emUoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgLy8g
R1RLKyB1c2VycyB0ZW5kIHRvIGRlbWFuZCB0aGUgbmF0aXZlIGxvb2suCiAgICAgLy8gSXQgY291
bGQgYmUgbWFkZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHZhbHVlcyBvdGhlciB0aGFuIDEzIGFj
dHVhbGx5IGJyZWFrIHNpdGUgY29tcGF0aWJpbGl0eS4KICAgICBnaW50IGluZGljYXRvclNpemU7
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc2l6
ZSIsICZpbmRpY2F0b3JTaXplLCBudWxscHRyKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
c3R5bGUoY29udGV4dC5nZXQoKSwgImluZGljYXRvci1zaXplIiwgJmluZGljYXRvclNpemUsIG51
bGxwdHIpOwogCiAgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKICAg
ICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CkBAIC00
OTIsMTUgKzQ2NywxNCBAQCBzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29udGV4
dCogY29udGV4dCwgUmVuZGVyU3R5bGUmIHN0eWxlKQogCiBzdGF0aWMgdm9pZCBwYWludFRvZ2ds
ZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgZnVsbFJlY3QpCiB7Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0g
Z2V0U3R5bGVDb250ZXh0KHdpZGdldFR5cGUpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUo
Y29udGV4dCk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVT
dHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7CiAKICAgICAvLyBTb21lIHRoZW1lcyBkbyBub3QgcmVu
ZGVyIGxhcmdlIHRvZ2dsZSBidXR0b25zIHByb3Blcmx5LCBzbyB3ZSBzaW1wbHkKICAgICAvLyBz
aHJpbmsgdGhlIHJlY3RhbmdsZSBiYWNrIGRvd24gdG8gdGhlIGRlZmF1bHQgc2l6ZSBhbmQgdGhl
biBjZW50ZXIgaXQKICAgICAvLyBpbiB0aGUgZnVsbCB0b2dnbGUgYnV0dG9uIHJlZ2lvbi4gVGhl
IHJlYXNvbiBmb3Igbm90IHNpbXBseSBmb3JjaW5nIHRvZ2dsZQogICAgIC8vIGJ1dHRvbnMgdG8g
YmUgYSBzbWFsbGVyIHNpemUgaXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIHNpdGUgbGF5
b3V0cy4KICAgICBnaW50IGluZGljYXRvclNpemU7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBudWxscHRy
KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dC5nZXQoKSwgImluZGlj
YXRvci1zaXplIiwgJmluZGljYXRvclNpemUsIG51bGxwdHIpOwogICAgIEludFJlY3QgcmVjdChm
dWxsUmVjdCk7CiAgICAgaWYgKHJlY3Qud2lkdGgoKSA+IGluZGljYXRvclNpemUpIHsKICAgICAg
ICAgcmVjdC5pbmZsYXRlWCgtKHJlY3Qud2lkdGgoKSAtIGluZGljYXRvclNpemUpIC8gMik7CkBA
IC01MTIsOCArNDg2LDggQEAgc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhl
bWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBSZW4KICAgICAgICAgcmVjdC5z
ZXRIZWlnaHQoaW5kaWNhdG9yU2l6ZSk7IC8vIEluIGNhc2UgcmVjdC5oZWlnaHQoKSB3YXMgZXF1
YWwgdG8gaW5kaWNhdG9yU2l6ZSArIDEuCiAgICAgfQogCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtU
ZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwotICAgIGd0
a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCB3aWRnZXRUeXBlID09IEdUS19UWVBF
X0NIRUNLX0JVVFRPTiA/IEdUS19TVFlMRV9DTEFTU19DSEVDSyA6IEdUS19TVFlMRV9DTEFTU19S
QURJTyk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LmdldCgp
LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9i
amVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9j
bGFzcyhjb250ZXh0LmdldCgpLCB3aWRnZXRUeXBlID09IEdUS19UWVBFX0NIRUNLX0JVVFRPTiA/
IEdUS19TVFlMRV9DTEFTU19DSEVDSyA6IEdUS19TVFlMRV9DTEFTU19SQURJTyk7CiAKICAgICBn
dWludCBmbGFncyA9IDA7CiAgICAgaWYgKCF0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkp
CkBAIC01MzAsMjggKzUwNCwyNiBAQCBzdGF0aWMgdm9pZCBwYWludFRvZ2dsZShjb25zdCBSZW5k
ZXJUaGVtZUd0ayogdGhlbWUsIEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IFJlbgogI2VuZGlmCiAg
ICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKICAgICAgICAgZmxhZ3MgfD0g
R1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQ7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRl
KGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0a1N0YXRl
RmxhZ3M+KGZsYWdzKSk7CiAKICAgICBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DSEVDS19C
VVRUT04pCi0gICAgICAgIGd0a19yZW5kZXJfY2hlY2soY29udGV4dCwgcGFpbnRJbmZvLmNvbnRl
eHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICBndGtfcmVuZGVyX2NoZWNrKGNvbnRleHQu
Z2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICBlbHNlCi0g
ICAgICAgIGd0a19yZW5kZXJfb3B0aW9uKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZ3RrX3JlbmRlcl9vcHRpb24oY29udGV4dC5nZXQoKSwg
cGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJl
Y3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgaWYgKHRoZW1lLT5p
c0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgewogICAgICAgICBJbnRSZWN0IGluZGljYXRvclJlY3Qo
cmVjdCk7CiAgICAgICAgIGdpbnQgaW5kaWNhdG9yU3BhY2luZzsKLSAgICAgICAgZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc3BhY2luZyIsICZpbmRpY2F0
b3JTcGFjaW5nLCBudWxscHRyKTsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxl
KGNvbnRleHQuZ2V0KCksICJpbmRpY2F0b3Itc3BhY2luZyIsICZpbmRpY2F0b3JTcGFjaW5nLCBu
dWxscHRyKTsKICAgICAgICAgaW5kaWNhdG9yUmVjdC5pbmZsYXRlKGluZGljYXRvclNwYWNpbmcp
OwotICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0KCku
cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGluZGljYXRvclJlY3QueCgpLCBpbmRpY2F0b3JSZWN0
LnkoKSwKKyAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LmdldCgpLCBwYWludEluZm8u
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBpbmRpY2F0b3JSZWN0LngoKSwgaW5k
aWNhdG9yUmVjdC55KCksCiAgICAgICAgICAgICBpbmRpY2F0b3JSZWN0LndpZHRoKCksIGluZGlj
YXRvclJlY3QuaGVpZ2h0KCkpOwogICAgIH0KLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3Rv
cmUoY29udGV4dCk7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShS
ZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgc2V0VG9nZ2xlU2l6ZShnZXRTdHlsZUNv
bnRleHQoR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OKSwgc3R5bGUpOworICAgIHNldFRvZ2dsZVNpemUo
R1RLX1RZUEVfQ0hFQ0tfQlVUVE9OLCBzdHlsZSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtNTYyLDcgKzUzNCw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50CiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJh
ZGlvU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgc2V0VG9nZ2xlU2l6ZShn
ZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfUkFESU9fQlVUVE9OKSwgc3R5bGUpOworICAgIHNldFRv
Z2dsZVNpemUoR1RLX1RZUEVfUkFESU9fQlVUVE9OLCBzdHlsZSk7CiB9CiAKIGJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtNjM5LDE1
ICs2MTEsMTIgQEAgc3RhdGljIHZvaWQgcmVuZGVyQnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwg
R3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW4KIH0KIGJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBHdGtTdHls
ZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKLSAg
ICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihn
dGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVU
VE9OKTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxl
Q29udGV4dChHVEtfVFlQRV9CVVRUT04pOwogCi0gICAgcmVuZGVyQnV0dG9uKHRoaXMsIGNvbnRl
eHQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rp
b24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKSk7
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQuZ2V0KCksIEdUS19TVFlM
RV9DTEFTU19CVVRUT04pOwogCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0
KTsKKyAgICByZW5kZXJCdXR0b24odGhpcywgY29udGV4dC5nZXQoKSwgcmVuZGVyT2JqZWN0LCBw
YWludEluZm8sIHJlY3QpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNjczLDQwICs2NDIs
MzQgQEAgc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlJiBzdHlsZSwg
R3RrQm9yZGVyJiBib3JkZXIsIGludCYgZm9jdXMKICAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgp
ID09IE5vQ29udHJvbFBhcnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEd0a1N0eWxlQ29udGV4
dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DT01CT19CT1gpOwotICAgIGd0
a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRl
eHQ+IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09NQk9fQk9YKTsKIAot
ICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1Nf
QlVUVE9OKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0
YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUuZGlyZWN0
aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQuZ2V0KCks
IEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJl
Y3Rpb24oY29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4
dERpcmVjdGlvbihzdHlsZS5kaXJlY3Rpb24oKSkpKTsKIAotICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSk7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0LCBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3RhdGUoY29udGV4dCksICZib3JkZXIpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9z
dGF0ZShjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSk7CisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3RhdGUoY29udGV4dC5nZXQoKSksICZib3JkZXIpOwogCiAgICAgZ2Jvb2xlYW4g
aW50ZXJpb3JGb2N1czsKICAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwotICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJp
b3JGb2N1cywgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwgImZvY3VzLXBhZGRpbmci
LCAmZm9jdXNQYWQsIG51bGxwdHIpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShj
b250ZXh0LmdldCgpLCAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywgImZvY3VzLWxp
bmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsIG51bGxw
dHIpOwogICAgIGZvY3VzID0gaW50ZXJpb3JGb2N1cyA/IGZvY3VzV2lkdGggKyBmb2N1c1BhZCA6
IDA7CiAKLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0gICAgY29u
dGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TRVBBUkFUT1IpOwotICAgIGd0a19zdHls
ZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisgICAgY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4
dChHVEtfVFlQRV9TRVBBUkFUT1IpOwogCiAgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24g
PSBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLmRp
cmVjdGlvbigpKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0
LCBkaXJlY3Rpb24pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCAi
c2VwYXJhdG9yIik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0
LmdldCgpLCBkaXJlY3Rpb24pOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250
ZXh0LmdldCgpLCAic2VwYXJhdG9yIik7CiAKICAgICBnYm9vbGVhbiB3aWRlU2VwYXJhdG9yczsK
ICAgICBnaW50IHNlcGFyYXRvcldpZHRoOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHls
ZShjb250ZXh0LCAid2lkZS1zZXBhcmF0b3JzIiwgJndpZGVTZXBhcmF0b3JzLCAic2VwYXJhdG9y
LXdpZHRoIiwgJnNlcGFyYXRvcldpZHRoLCBudWxscHRyKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9nZXRfc3R5bGUoY29udGV4dC5nZXQoKSwgIndpZGUtc2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJh
dG9ycywgInNlcGFyYXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwgbnVsbHB0cik7CiAKICAg
ICAvLyBHVEsrIGFsd2F5cyB1c2VzIGJvcmRlci5sZWZ0LCByZWdhcmRsZXNzIG9mIHRleHQgZGly
ZWN0aW9uLiBTZWUgZ3Rrc2VwZXJhdG9yLmMuCiAgICAgaWYgKCF3aWRlU2VwYXJhdG9ycykKICAg
ICAgICAgc2VwYXJhdG9yV2lkdGggPSBib3JkZXIubGVmdDsKIAogICAgIHNlcGFyYXRvciA9IHNl
cGFyYXRvcldpZHRoOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsK
IH0KIAogaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVy
U3R5bGUmIHN0eWxlKSBjb25zdApAQCAtNzU2LDI1ICs3MTksMjQgQEAgYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnQKICAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0
a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGly
ZWN0aW9uKCkpKTsKIAogICAgIC8vIFBhaW50IHRoZSBidXR0b24uCi0gICAgR3RrU3R5bGVDb250
ZXh0KiBidXR0b25TdHlsZUNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9O
KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGJ1dHRvblN0eWxlQ29udGV4dCk7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihidXR0b25TdHlsZUNvbnRleHQsIGRpcmVj
dGlvbik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGJ1dHRvblN0eWxlQ29udGV4
dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0gICAgcmVuZGVyQnV0dG9uKHRoaXMsIGJ1dHRv
blN0eWxlQ29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworICAgIEdSZWZQ
dHI8R3RrU3R5bGVDb250ZXh0PiBidXR0b25TdHlsZUNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRl
eHQoR1RLX1RZUEVfQlVUVE9OKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9u
KGJ1dHRvblN0eWxlQ29udGV4dC5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9hZGRfY2xhc3MoYnV0dG9uU3R5bGVDb250ZXh0LmdldCgpLCBHVEtfU1RZTEVfQ0xBU1Nf
QlVUVE9OKTsKKyAgICByZW5kZXJCdXR0b24odGhpcywgYnV0dG9uU3R5bGVDb250ZXh0LmdldCgp
LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiAKICAgICAvLyBHZXQgdGhlIGlubmVy
IHJlY3RhbmdsZS4KICAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwogICAgIEd0a0JvcmRl
ciogaW5uZXJCb3JkZXJQdHIgPSAwOwogICAgIEd0a0JvcmRlciBpbm5lckJvcmRlciA9IHsgMSwg
MSwgMSwgMSB9OwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShidXR0b25TdHlsZUNv
bnRleHQsICJpbm5lci1ib3JkZXIiLCAmaW5uZXJCb3JkZXJQdHIsICJmb2N1cy1saW5lLXdpZHRo
IiwgJmZvY3VzV2lkdGgsICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBudWxscHRyKTsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoYnV0dG9uU3R5bGVDb250ZXh0LmdldCgpLCAi
aW5uZXItYm9yZGVyIiwgJmlubmVyQm9yZGVyUHRyLCAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1
c1dpZHRoLCAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwgbnVsbHB0cik7CiAgICAgaWYgKGlu
bmVyQm9yZGVyUHRyKSB7CiAgICAgICAgIGlubmVyQm9yZGVyID0gKmlubmVyQm9yZGVyUHRyOwog
ICAgICAgICBndGtfYm9yZGVyX2ZyZWUoaW5uZXJCb3JkZXJQdHIpOwogICAgIH0KIAogICAgIEd0
a0JvcmRlciBib3JkZXJXaWR0aDsKLSAgICBHdGtTdGF0ZUZsYWdzIHN0YXRlID0gZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X3N0YXRlKGJ1dHRvblN0eWxlQ29udGV4dCk7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X2JvcmRlcihidXR0b25TdHlsZUNvbnRleHQsIHN0YXRlLCAmYm9yZGVyV2lkdGgp
OworICAgIEd0a1N0YXRlRmxhZ3Mgc3RhdGUgPSBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUo
YnV0dG9uU3R5bGVDb250ZXh0LmdldCgpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9y
ZGVyKGJ1dHRvblN0eWxlQ29udGV4dC5nZXQoKSwgc3RhdGUsICZib3JkZXJXaWR0aCk7CiAKICAg
ICBmb2N1c1dpZHRoICs9IGZvY3VzUGFkOwogICAgIEludFJlY3QgaW5uZXJSZWN0KApAQCAtNzg2
LDI0ICs3NDgsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnQKICAgICBpZiAoaXNQcmVzc2Vk
KHJlbmRlck9iamVjdCkpIHsKICAgICAgICAgZ2ludCBjaGlsZERpc3BsYWNlbWVudFg7CiAgICAg
ICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRZOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3R5bGUoYnV0dG9uU3R5bGVDb250ZXh0LCAiY2hpbGQtZGlzcGxhY2VtZW50LXgiLCAmY2hp
bGREaXNwbGFjZW1lbnRYLCAiY2hpbGQtZGlzcGxhY2VtZW50LXkiLCAmY2hpbGREaXNwbGFjZW1l
bnRZLCBudWxscHRyKTsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGJ1dHRv
blN0eWxlQ29udGV4dC5nZXQoKSwgImNoaWxkLWRpc3BsYWNlbWVudC14IiwgJmNoaWxkRGlzcGxh
Y2VtZW50WCwgImNoaWxkLWRpc3BsYWNlbWVudC15IiwgJmNoaWxkRGlzcGxhY2VtZW50WSwgbnVs
bHB0cik7CiAgICAgICAgIGlubmVyUmVjdC5tb3ZlKGNoaWxkRGlzcGxhY2VtZW50WCwgY2hpbGRE
aXNwbGFjZW1lbnRZKTsKICAgICB9CiAgICAgaW5uZXJSZWN0LnNldFdpZHRoKHN0ZDo6bWF4KDEs
IGlubmVyUmVjdC53aWR0aCgpKSk7CiAgICAgaW5uZXJSZWN0LnNldEhlaWdodChzdGQ6Om1heCgx
LCBpbm5lclJlY3QuaGVpZ2h0KCkpKTsKIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUo
YnV0dG9uU3R5bGVDb250ZXh0KTsKLQogICAgIC8vIFBhaW50IHRoZSBhcnJvdy4KLSAgICBHdGtT
dHlsZUNvbnRleHQqIGFycm93U3R5bGVDb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X0FSUk9XKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGFycm93U3R5bGVDb250ZXh0KTsK
KyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gYXJyb3dTdHlsZUNvbnRleHQgPSBjcmVhdGVT
dHlsZUNvbnRleHQoR1RLX1RZUEVfQVJST1cpOwogCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0
X2RpcmVjdGlvbihhcnJvd1N0eWxlQ29udGV4dCwgZGlyZWN0aW9uKTsKLSAgICBndGtfc3R5bGVf
Y29udGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNvbnRleHQsICJhcnJvdyIpOwotICAgIGd0a19z
dHlsZV9jb250ZXh0X2FkZF9jbGFzcyhhcnJvd1N0eWxlQ29udGV4dCwgR1RLX1NUWUxFX0NMQVNT
X0JVVFRPTik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihhcnJvd1N0eWxl
Q29udGV4dC5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xh
c3MoYXJyb3dTdHlsZUNvbnRleHQuZ2V0KCksICJhcnJvdyIpOworICAgIGd0a19zdHlsZV9jb250
ZXh0X2FkZF9jbGFzcyhhcnJvd1N0eWxlQ29udGV4dC5nZXQoKSwgR1RLX1NUWUxFX0NMQVNTX0JV
VFRPTik7CiAKICAgICBnZmxvYXQgYXJyb3dTY2FsaW5nOwotICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldF9zdHlsZShhcnJvd1N0eWxlQ29udGV4dCwgImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2Fs
aW5nLCBudWxscHRyKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoYXJyb3dTdHls
ZUNvbnRleHQuZ2V0KCksICJhcnJvdy1zY2FsaW5nIiwgJmFycm93U2NhbGluZywgbnVsbHB0cik7
CiAKICAgICBJbnRTaXplIGFycm93U2l6ZShtaW5BcnJvd1NpemUsIGlubmVyUmVjdC5oZWlnaHQo
KSk7CiAgICAgRmxvYXRQb2ludCBhcnJvd1Bvc2l0aW9uKGlubmVyUmVjdC5sb2NhdGlvbigpKTsK
QEAgLTgxNSwyNyArNzc0LDIyIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3Qo
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50CiAgICAgZ2ludCBl
eHRlbnQgPSBzdGQ6Om1pbihhcnJvd1NpemUud2lkdGgoKSwgYXJyb3dTaXplLmhlaWdodCgpKSAq
IGFycm93U2NhbGluZzsKICAgICBhcnJvd1Bvc2l0aW9uLm1vdmUoKGFycm93U2l6ZS53aWR0aCgp
IC0gZXh0ZW50KSAvIDIsIChhcnJvd1NpemUuaGVpZ2h0KCkgLSBleHRlbnQpIC8gMik7CiAKLSAg
ICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoYXJyb3dTdHlsZUNvbnRleHQsIHN0YXRlKTsK
LSAgICBndGtfcmVuZGVyX2Fycm93KGFycm93U3R5bGVDb250ZXh0LCBjYWlyb0NvbnRleHQsIEdf
UEksIGFycm93UG9zaXRpb24ueCgpLCBhcnJvd1Bvc2l0aW9uLnkoKSwgZXh0ZW50KTsKLQotICAg
IGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoYXJyb3dTdHlsZUNvbnRleHQpOworICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9zdGF0ZShhcnJvd1N0eWxlQ29udGV4dC5nZXQoKSwgc3RhdGUpOwor
ICAgIGd0a19yZW5kZXJfYXJyb3coYXJyb3dTdHlsZUNvbnRleHQuZ2V0KCksIGNhaXJvQ29udGV4
dCwgR19QSSwgYXJyb3dQb3NpdGlvbi54KCksIGFycm93UG9zaXRpb24ueSgpLCBleHRlbnQpOwog
CiAgICAgLy8gUGFpbnQgdGhlIHNlcGFyYXRvciBpZiBuZWVkZWQuCi0gICAgR3RrU3R5bGVDb250
ZXh0KiBzZXBhcmF0b3JTdHlsZUNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09N
Qk9fQk9YKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKHNlcGFyYXRvclN0eWxlQ29udGV4
dCk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHNlcGFyYXRvclN0eWxlQ29udGV4dCA9
IGNyZWF0ZVN0eWxlQ29udGV4dChHVEtfVFlQRV9DT01CT19CT1gpOwogCi0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2V0X2RpcmVjdGlvbihzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGRpcmVjdGlvbik7
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKHNlcGFyYXRvclN0eWxlQ29udGV4dCwg
InNlcGFyYXRvciIpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oc2VwYXJh
dG9yU3R5bGVDb250ZXh0LmdldCgpLCBkaXJlY3Rpb24pOworICAgIGd0a19zdHlsZV9jb250ZXh0
X2FkZF9jbGFzcyhzZXBhcmF0b3JTdHlsZUNvbnRleHQuZ2V0KCksICJzZXBhcmF0b3IiKTsKIAog
ICAgIGdib29sZWFuIHdpZGVTZXBhcmF0b3JzOwogICAgIGdpbnQgc2VwYXJhdG9yV2lkdGg7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgIndp
ZGUtc2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9ycywgInNlcGFyYXRvci13aWR0aCIsICZzZXBh
cmF0b3JXaWR0aCwgbnVsbHB0cik7Ci0gICAgaWYgKHdpZGVTZXBhcmF0b3JzICYmICFzZXBhcmF0
b3JXaWR0aCkgewotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKHNlcGFyYXRvclN0
eWxlQ29udGV4dCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKHNlcGFyYXRvclN0
eWxlQ29udGV4dC5nZXQoKSwgIndpZGUtc2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9ycywgInNl
cGFyYXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwgbnVsbHB0cik7CisgICAgaWYgKHdpZGVT
ZXBhcmF0b3JzICYmICFzZXBhcmF0b3JXaWR0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShzZXBhcmF0b3JTdHlsZUNvbnRl
eHQsIHN0YXRlKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoc2VwYXJhdG9yU3R5
bGVDb250ZXh0LmdldCgpLCBzdGF0ZSk7CiAgICAgSW50UG9pbnQgc2VwYXJhdG9yUG9zaXRpb24o
YXJyb3dQb3NpdGlvbi54KCksIGlubmVyUmVjdC55KCkpOwogICAgIGlmICh3aWRlU2VwYXJhdG9y
cykgewogICAgICAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCkBAIC04NDMs
MTIgKzc5NywxMiBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludAogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3ZlKGFycm93U2l6ZS53aWR0aCgpLCAwKTsKIAot
ICAgICAgICBndGtfcmVuZGVyX2ZyYW1lKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgY2Fpcm9Db250
ZXh0LCBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwgc2VwYXJh
dG9yV2lkdGgsIGlubmVyUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGd0a19yZW5kZXJfZnJhbWUo
c2VwYXJhdG9yU3R5bGVDb250ZXh0LmdldCgpLCBjYWlyb0NvbnRleHQsIHNlcGFyYXRvclBvc2l0
aW9uLngoKSwgc2VwYXJhdG9yUG9zaXRpb24ueSgpLCBzZXBhcmF0b3JXaWR0aCwgaW5uZXJSZWN0
LmhlaWdodCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHdGtCb3JkZXIgcGFkZGluZzsKLSAg
ICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoc2VwYXJhdG9yU3R5bGVDb250ZXh0
LCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoc2VwYXJhdG9yU3R5bGVDb250ZXh0KSwgJnBh
ZGRpbmcpOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhzZXBhcmF0b3JT
dHlsZUNvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShzZXBhcmF0b3JT
dHlsZUNvbnRleHQuZ2V0KCkpLCAmcGFkZGluZyk7CiAgICAgICAgIEd0a0JvcmRlciBib3JkZXI7
Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoc2VwYXJhdG9yU3R5bGVDb250
ZXh0LCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoc2VwYXJhdG9yU3R5bGVDb250ZXh0KSwg
JmJvcmRlcik7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoc2VwYXJhdG9y
U3R5bGVDb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoc2VwYXJhdG9y
U3R5bGVDb250ZXh0LmdldCgpKSwgJmJvcmRlcik7CiAKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9
PSBHVEtfVEVYVF9ESVJfTFRSKQogICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZSgt
KHBhZGRpbmcubGVmdCArIGJvcmRlci5sZWZ0KSwgMCk7CkBAIC04NjAsMTEgKzgxNCwxMCBAQCBi
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludAogICAgICAgICAvLyBBbiBleHRyYSBjbGlwIHByZXZlbnRz
IHRoZSBzZXBhcmF0b3IgYmxlZWRpbmcgb3V0c2lkZSBvZiB0aGUgc3BlY2lmaWVkIHJlY3Rhbmds
ZSBiZWNhdXNlIG9mIHN1YnBpeGVsIHBvc2l0aW9uaW5nLgogICAgICAgICBjYWlyb19yZWN0YW5n
bGUoY2Fpcm9Db250ZXh0LCBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9u
LnkoKSwgYm9yZGVyLmxlZnQsIGlubmVyUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIGNhaXJvX2Ns
aXAoY2Fpcm9Db250ZXh0KTsKLSAgICAgICAgZ3RrX3JlbmRlcl9saW5lKHNlcGFyYXRvclN0eWxl
Q29udGV4dCwgY2Fpcm9Db250ZXh0LCBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBv
c2l0aW9uLnkoKSwgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBpbm5lclJlY3QubWF4WSgpKTsKKyAg
ICAgICAgZ3RrX3JlbmRlcl9saW5lKHNlcGFyYXRvclN0eWxlQ29udGV4dC5nZXQoKSwgY2Fpcm9D
b250ZXh0LCBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwgc2Vw
YXJhdG9yUG9zaXRpb24ueCgpLCBpbm5lclJlY3QubWF4WSgpKTsKICAgICAgICAgY2Fpcm9fcmVz
dG9yZShjYWlyb0NvbnRleHQpOwogICAgIH0KIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3Rv
cmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTg3
NSwzNSArODI4LDMyIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3RCdXR0b25E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJCb3gmIG9iamVjdCwgY29uCiAKIGJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRS
WSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKyAgICBHUmVmUHRyPEd0
a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRS
WSk7CiAKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRp
Y19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0
eWxlKCkuZGlyZWN0aW9uKCkpKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNv
bnRleHQsIEdUS19TVFlMRV9DTEFTU19FTlRSWSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0
X2RpcmVjdGlvbihjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihn
dGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOworICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LmdldCgpLCBHVEtfU1RZTEVfQ0xB
U1NfRU5UUlkpOwogCiAgICAgZ3VpbnQgZmxhZ3MgPSAwOwogICAgIGlmICghaXNFbmFibGVkKHJl
bmRlck9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKICAgICAgICAg
ZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CiAgICAgZWxzZSBpZiAoaXNGb2N1
c2VkKHJlbmRlck9iamVjdCkpCiAgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0ZPQ1VT
RUQ7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0
PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRl
KGNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CiAKLSAg
ICBndGtfcmVuZGVyX2JhY2tncm91bmQoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNv
bnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250
ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgZ3Rr
X3JlbmRlcl9mcmFtZShjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7CiAKICAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkgJiYgaXNFbmFibGVk
KHJlbmRlck9iamVjdCkpIHsKICAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKICAgICAg
ICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X3N0eWxlKGNvbnRleHQsICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLCAiZm9j
dXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLCAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwg
bnVsbHB0cik7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0Lmdl
dCgpLCAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywgImZvY3VzLWxpbmUtd2lkdGgi
LCAmZm9jdXNXaWR0aCwgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsIG51bGxwdHIpOwogICAg
ICAgICBpZiAoIWludGVyaW9yRm9jdXMpIHsKICAgICAgICAgICAgIEludFJlY3QgZm9jdXNSZWN0
KHJlY3QpOwogICAgICAgICAgICAgZm9jdXNSZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3Vz
UGFkKTsKLSAgICAgICAgICAgIGd0a19yZW5kZXJfZm9jdXMoY29udGV4dCwgcGFpbnRJbmZvLmNv
bnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgZm9jdXNSZWN0LngoKSwgZm9jdXNSZWN0
LnkoKSwgZm9jdXNSZWN0LndpZHRoKCksIGZvY3VzUmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAg
ICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIGZvY3VzUmVjdC54KCksIGZvY3VzUmVjdC55KCksIGZvY3Vz
UmVjdC53aWR0aCgpLCBmb2N1c1JlY3QuaGVpZ2h0KCkpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApAQCAtMTEwMywyOCArMTA1MywyNiBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYQog
ICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCk7
CiAgICAgQVNTRVJUX1VOVVNFRChwYXJ0LCBwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8
IHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQ
YXJ0KTsKIAotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9TQ0FMRSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKyAg
ICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChH
VEtfVFlQRV9TQ0FMRSk7CiAKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNv
bnRleHQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkp
KTsKLSAgICBhcHBseVNsaWRlclN0eWxlQ29udGV4dENsYXNzZXMoY29udGV4dCwgcGFydCk7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19U
Uk9VR0gpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dC5nZXQo
KSwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwor
ICAgIGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nlcyhjb250ZXh0LmdldCgpLCBwYXJ0KTsK
KyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dC5nZXQoKSwgR1RLX1NUWUxF
X0NMQVNTX1RST1VHSCk7CiAKICAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpKQotICAg
ICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgR1RLX1NUQVRFX0ZMQUdf
SU5TRU5TSVRJVkUpOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4
dC5nZXQoKSwgR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkUpOwogCi0gICAgZ3RrX3JlbmRlcl9i
YWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
LSAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoY29udGV4dC5nZXQoKSwgcGFp
bnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5kZXJfZnJhbWUo
Y29udGV4dC5nZXQoKSwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAg
ICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKSB7CiAgICAgICAgIGdpbnQgZm9jdXNXaWR0
aCwgZm9jdXNQYWQ7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0
LCAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLCAiZm9jdXMtcGFkZGluZyIsICZmb2N1
c1BhZCwgbnVsbHB0cik7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250
ZXh0LmdldCgpLCAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLCAiZm9jdXMtcGFkZGlu
ZyIsICZmb2N1c1BhZCwgbnVsbHB0cik7CiAgICAgICAgIEludFJlY3QgZm9jdXNSZWN0KHJlY3Qp
OwogICAgICAgICBmb2N1c1JlY3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQpOwotICAg
ICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCktPmNyKCksIGZvY3VzUmVjdC54KCksIGZvY3VzUmVjdC55KCksIGZvY3VzUmVj
dC53aWR0aCgpLCBmb2N1c1JlY3QuaGVpZ2h0KCkpOworICAgICAgICBndGtfcmVuZGVyX2ZvY3Vz
KGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNy
KCksIGZvY3VzUmVjdC54KCksIGZvY3VzUmVjdC55KCksIGZvY3VzUmVjdC53aWR0aCgpLCBmb2N1
c1JlY3QuaGVpZ2h0KCkpOwogICAgIH0KIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUo
Y29udGV4dCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMTMzLDEyICsxMDgxLDExIEBA
IGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhCiAgICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRlck9i
amVjdC5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKICAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVt
Ykhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQgfHwgcGFy
dCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7CiAKLSAgICBHdGtTdHlsZUNvbnRleHQq
IGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpOwotICAgIGd0a19zdHls
ZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNv
bnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpOwogCi0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRl
ck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSk7Ci0gICAgYXBwbHlTbGlkZXJTdHlsZUNvbnRl
eHRDbGFzc2VzKGNvbnRleHQsIHBhcnQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFz
cyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0xJREVSKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQuZ2V0KCksIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2Jq
ZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKKyAgICBhcHBseVNsaWRlclN0eWxlQ29udGV4dENs
YXNzZXMoY29udGV4dC5nZXQoKSwgcGFydCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2Ns
YXNzKGNvbnRleHQuZ2V0KCksIEdUS19TVFlMRV9DTEFTU19TTElERVIpOwogCiAgICAgZ3VpbnQg
ZmxhZ3MgPSAwOwogICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkpCkBAIC0xMTQ3LDEz
ICsxMDk0LDExIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1bWIoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhCiAgICAgICAgIGZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX1BSRUxJR0hUOwogICAgIGlmIChpc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkK
ICAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFn
cykpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LmdldCgpLCBzdGF0
aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwogCi0gICAgZ3RrX3JlbmRlcl9zbGlkZXIo
Y29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksCisgICAgZ3RrX3Jl
bmRlcl9zbGlkZXIoY29udGV4dC5nZXQoKSwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCksCiAgICAgICAgIHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCA/IEdUS19P
UklFTlRBVElPTl9IT1JJWk9OVEFMIDogR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMKTsKIAotICAg
IGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTExNjMsOCArMTEwOCw5IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNs
aWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogICAgIGlm
IChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydCkKICAgICAgICAgcmV0dXJuOwogCisgICAgR1JlZlB0cjxHdGtTdHlsZUNv
bnRleHQ+IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpOwogICAg
IGdpbnQgc2xpZGVyV2lkdGgsIHNsaWRlckxlbmd0aDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3R5bGUoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKSwgInNsaWRlci13aWR0aCIs
ICZzbGlkZXJXaWR0aCwgInNsaWRlci1sZW5ndGgiLCAmc2xpZGVyTGVuZ3RoLCBudWxscHRyKTsK
KyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dC5nZXQoKSwgInNsaWRlci13
aWR0aCIsICZzbGlkZXJXaWR0aCwgInNsaWRlci1sZW5ndGgiLCAmc2xpZGVyTGVuZ3RoLCBudWxs
cHRyKTsKICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7CiAgICAg
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7CiAgICAgICAg
IHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CkBAIC0xMTgwLDIy
ICsxMTI2LDIxIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhCiAgICAgaWYgKCFyZW5kZXJPYmpl
Y3QuaXNQcm9ncmVzcygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEd0a1N0eWxlQ29u
dGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9QUk9HUkVTU19CQVIpOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisgICAgR1JlZlB0cjxHdGtTdHls
ZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoR1RLX1RZUEVfUFJPR1JFU1Nf
QkFSKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQuZ2V0KCkpOwogCi0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19UUk9V
R0gpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LmdldCgpLCBHVEtf
U1RZTEVfQ0xBU1NfVFJPVUdIKTsKIAotICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0
LCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwg
cmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9m
cmFtZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
LCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAg
Z3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCku
cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQuZ2V0KCksIHBh
aW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIAotICAgIGd0a19zdHlsZV9jb250
ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250
ZXh0LmdldCgpKTsKIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19QUk9H
UkVTU0JBUik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRp
Y19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xh
c3MoY29udGV4dC5nZXQoKSwgR1RLX1NUWUxFX0NMQVNTX1BST0dSRVNTQkFSKTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrU3Rh
dGVGbGFncz4oMCkpOwogCiAgICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X3BhZGRpbmcoY29udGV4dCwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKGNv
bnRleHQpLCAmcGFkZGluZyk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoY29u
dGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKGNvbnRleHQuZ2V0KCkpLCAm
cGFkZGluZyk7CiAgICAgSW50UmVjdCBwcm9ncmVzc1JlY3QoCiAgICAgICAgIHJlY3QueCgpICsg
cGFkZGluZy5sZWZ0LAogICAgICAgICByZWN0LnkoKSArIHBhZGRpbmcudG9wLApAQCAtMTIwNSwx
NCArMTE1MCwxMyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYQogCiAgICAgaWYgKCFwcm9ncmVz
c1JlY3QuaXNFbXB0eSgpKSB7CiAjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTMsIDcpCi0gICAg
ICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLCBwcm9ncmVzc1JlY3QueCgpLCBwcm9ncmVzc1JlY3QueSgp
LCBwcm9ncmVzc1JlY3Qud2lkdGgoKSwgcHJvZ3Jlc3NSZWN0LmhlaWdodCgpKTsKLSAgICAgICAg
Z3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpLCBwcm9ncmVzc1JlY3QueCgpLCBwcm9ncmVzc1JlY3QueSgpLCBwcm9ncmVz
c1JlY3Qud2lkdGgoKSwgcHJvZ3Jlc3NSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZ3RrX3JlbmRl
cl9iYWNrZ3JvdW5kKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1D
b250ZXh0KCktPmNyKCksIHByb2dyZXNzUmVjdC54KCksIHByb2dyZXNzUmVjdC55KCksIHByb2dy
ZXNzUmVjdC53aWR0aCgpLCBwcm9ncmVzc1JlY3QuaGVpZ2h0KCkpOworICAgICAgICBndGtfcmVu
ZGVyX2ZyYW1lKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250
ZXh0KCktPmNyKCksIHByb2dyZXNzUmVjdC54KCksIHByb2dyZXNzUmVjdC55KCksIHByb2dyZXNz
UmVjdC53aWR0aCgpLCBwcm9ncmVzc1JlY3QuaGVpZ2h0KCkpOwogI2Vsc2UKLSAgICAgICAgZ3Rr
X3JlbmRlcl9hY3Rpdml0eShjb250ZXh0LCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpLCBwcm9ncmVzc1JlY3QueCgpLCBwcm9ncmVzc1JlY3QueSgpLCBwcm9ncmVz
c1JlY3Qud2lkdGgoKSwgcHJvZ3Jlc3NSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZ3RrX3JlbmRl
cl9hY3Rpdml0eShjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpLCBwcm9ncmVzc1JlY3QueCgpLCBwcm9ncmVzc1JlY3QueSgpLCBwcm9ncmVz
c1JlY3Qud2lkdGgoKSwgcHJvZ3Jlc3NSZWN0LmhlaWdodCgpKTsKICNlbmRpZgogICAgIH0KIAot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCkBAIC0xMjI5LDEyICsxMTczLDEyIEBAIHN0YXRpYyBnaW50IHNwaW5CdXR0b25BcnJv
d1NpemUoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0KQogCiB2b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKIHsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBn
ZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU1BJTl9CVVRUT04pOworICAgIEdSZWZQdHI8R3RrU3R5
bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdUS19UWVBFX1NQSU5fQlVU
VE9OKTsKIAogICAgIEd0a0JvcmRlciBwYWRkaW5nOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9wYWRkaW5nKGNvbnRleHQsIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250ZXh0KSwg
JnBhZGRpbmcpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9wYWRkaW5nKGNvbnRleHQuZ2V0
KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250ZXh0LmdldCgpKSwgJnBhZGRpbmcp
OwogCi0gICAgaW50IHdpZHRoID0gc3BpbkJ1dHRvbkFycm93U2l6ZShjb250ZXh0KSArIHBhZGRp
bmcubGVmdCArIHBhZGRpbmcucmlnaHQ7CisgICAgaW50IHdpZHRoID0gc3BpbkJ1dHRvbkFycm93
U2l6ZShjb250ZXh0LmdldCgpKSArIHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQ7CiAgICAg
c3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwogICAgIHN0eWxlLnNldE1pbldp
ZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKIH0KQEAgLTEzMDcsMjQgKzEyNTEsMjEgQEAgc3Rh
dGljIHZvaWQgcGFpbnRTcGluQXJyb3dCdXR0b24oUmVuZGVyVGhlbWUqIHRoZW1lLCBHdGtTdHls
ZUNvbnRleHQqIGNvbnRleHQsIGMKIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNw
aW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEd0a1N0eWxlQ29udGV4
dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElOX0JVVFRPTik7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29u
dGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElOX0JVVFRPTik7
CiAKICAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHRE
aXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9u
KCkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIGRpcmVj
dGlvbik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LmdldCgp
LCBkaXJlY3Rpb24pOwogCiAgICAgZ3VpbnQgZmxhZ3MgPSAwOwogICAgIGlmICghaXNFbmFibGVk
KHJlbmRlck9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKICAgICAg
ICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CiAgICAgZWxzZSBpZiAoaXNG
b2N1c2VkKHJlbmRlck9iamVjdCkpCiAgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0ZP
Q1VTRUQ7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19j
YXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVtb3Zl
X2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19FTlRSWSk7Ci0KLSAgICBwYWludFNwaW5B
cnJvd0J1dHRvbih0aGlzLCBjb250ZXh0LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCwg
R1RLX0FSUk9XX1VQKTsKLSAgICBwYWludFNwaW5BcnJvd0J1dHRvbih0aGlzLCBjb250ZXh0LCBy
ZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCwgR1RLX0FSUk9XX0RPV04pOworICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0
ZUZsYWdzPihmbGFncykpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3JlbW92ZV9jbGFzcyhjb250
ZXh0LmdldCgpLCBHVEtfU1RZTEVfQ0xBU1NfRU5UUlkpOwogCi0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfcmVzdG9yZShjb250ZXh0KTsKKyAgICBwYWludFNwaW5BcnJvd0J1dHRvbih0aGlzLCBjb250
ZXh0LmdldCgpLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCwgR1RLX0FSUk9XX1VQKTsK
KyAgICBwYWludFNwaW5BcnJvd0J1dHRvbih0aGlzLCBjb250ZXh0LmdldCgpLCByZW5kZXJPYmpl
Y3QsIHBhaW50SW5mbywgcmVjdCwgR1RLX0FSUk9XX0RPV04pOwogCiAgICAgcmV0dXJuIGZhbHNl
OwogfQpAQCAtMTM0OSwxNSArMTI5MCwxNSBAQCBlbnVtIFN0eWxlQ29sb3JUeXBlIHsgU3R5bGVD
b2xvckJhY2tncm91bmQsIFN0eWxlQ29sb3JGb3JlZ3JvdW5kIH07CiBzdGF0aWMgQ29sb3Igc3R5
bGVDb2xvcihHVHlwZSB3aWRnZXRUeXBlLCBHdGtTdGF0ZUZsYWdzIHN0YXRlLCBTdHlsZUNvbG9y
VHlwZSBjb2xvclR5cGUpCiB7CiAKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRT
dHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNv
bnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7CiAgICAgLy8gUmVjZW50IEdU
SysgdmVyc2lvbnMgKD4gMy4xNCkgcmVxdWlyZSB0byBleHBsaWNpdGx5IHNldCB0aGUgc3RhdGUg
YmVmb3JlIGdldHRpbmcgdGhlIGNvbG9yLgotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0
ZShjb250ZXh0LCBzdGF0ZSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRl
eHQuZ2V0KCksIHN0YXRlKTsKIAogICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwogICAgIGlmIChj
b2xvclR5cGUgPT0gU3R5bGVDb2xvckJhY2tncm91bmQpCi0gICAgICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRleHQsIGd0a19zdHlsZV9jb250ZXh0X2dldF9z
dGF0ZShjb250ZXh0KSwgJmdka1JHQkFDb2xvcik7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9zdGF0ZShjb250ZXh0LmdldCgpKSwgJmdka1JHQkFDb2xvcik7CiAgICAgZWxzZQotICAgICAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3IoY29udGV4dCwgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X3N0YXRlKGNvbnRleHQpLCAmZ2RrUkdCQUNvbG9yKTsKKyAgICAgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X2NvbG9yKGNvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0
ZShjb250ZXh0LmdldCgpKSwgJmdka1JHQkFDb2xvcik7CiAgICAgcmV0dXJuIGdka1JHQkFDb2xv
cjsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267078</attachid>
            <date>2015-12-10 01:18:19 -0800</date>
            <delta_ts>2015-12-10 02:15:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151533-20151210101746.patch</filename>
            <type>text/plain</type>
            <size>42942</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkzODk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWY3YWZjNTc2OGNhZjEz
OTI2ZmRjYzIzMzM3NzM0MWU1NDgwNDMzYi4uZjlkYzAxYmQ5YmViMWY3YWJmZDIyY2FlNDMxNGQ3
NGVjYWFhZTZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE1LTEyLTEwICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBS
ZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IsIGV0
LiBhbC4gc2hvdWxkIG5vdCBjbG9iYmVyIHN0YXRlIG9mIGNhY2hlZCBHdGtTdHlsZUNvbnRleHRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1MzMK
KworICAgICAgICBSZXZpZXdlZCBieSBDYXJsb3MgR2FyY2lhIENhbXBvcy4KKworICAgICAgICBS
ZW1vdmUgdGhlIHN0eWxlIGNvbnRleHQgY2FjaGUgdG8gc2ltcGxpZnkgdGhlIGNvZGUsIGRyYXN0
aWNhbGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mCisgICAgICAgIGV4cGVuc2l2ZSBzYXZlL3Jlc3Rv
cmUgb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gc3R5bGUgY29udGV4dHMsIGFuZCBhdm9pZCB1bndh
bnRlZAorICAgICAgICBzaWRlLWVmZmVjdHMgaW4gUmVuZGVyVGhlbWVHdGs6OnN0eWxlQ29sb3Iu
IFRoaXMgaXMgYWxzbyBhIHNwZWN1bGF0aXZlIGZpeCBmb3IgaW1wcm9wZXIKKyAgICAgICAgYnV0
dG9uIHJlbmRlcmluZyB3aXRoIGNlcnRhaW4gY3VzdG9tIHRoZW1lcywgYW5kIGEgc2ltcGxpZmlj
YXRpb24gdGhhdCB3aWxsIG1ha2UgaXQgZWFzaWVyCisgICAgICAgIHRvIGZpeCBidWcgIzE1MDU1
MC4KKworICAgICAgICBUaGlzIGNoYW5nZSBkb2VzIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRp
b25zLCB3aGljaCBJIGludGVuZCB0byBjaGVjayBvbiB0aGUgcGVyZiBib3QKKyAgICAgICAgYWZ0
ZXIgbGFuZGluZyB0byBlbnN1cmUgdGhhdCByZW1vdmluZyB0aGUgY2FjaGUgZG9lcyBub3QgaGF2
ZSBhIHNpZ25pZmljYW50IG5lZ2F0aXZlIGltcGFjdAorICAgICAgICBvbiBwZXJmb3JtYW5jZTsg
SSBoYXZlIG5vIGNsdWUgd2hldGhlciB0aGlzIHdpbGwgYmUgYSBuZXQgcGVyZm9ybWFuY2Ugd2lu
IG9yIGxvc3MuIEhvd2V2ZXIsCisgICAgICAgIHRoaXMgaXMgYSBiaXQgdHJpY2t5LCBiZWNhdXNl
IHRoZSBib3QgaXMgcnVubmluZyBHVEsrIDMuMTYsIHdoZXJlYXMgSSBleHBlY3Qgc2F2ZS9yZXN0
b3JlCisgICAgICAgIG1pZ2h0IGJlIG11Y2ggbW9yZSBleHBlbnNpdmUgaW4gR1RLKyAzLjIwLCBh
bmQgSSBkbyBub3Qgd2FudCB0byBtYWtlIHBlcmZvcm1hbmNlIGRlY2lzaW9ucworICAgICAgICBl
eGNlcHQgYmFzZWQgb24gdGhlIGxhdGVzdCBHVEsrIGR1ZSB0byBsYXJnZSBjaGFuZ2VzIGluIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBHdGtTdHlsZUNvbnRleHQuCisKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
U3R5bGVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFN0b2NrSWNvbkZvcldpZGdldFR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjppbml0TWVkaWFDb2xvcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFRvZ2dsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRU
b2dnbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpnZXRDb21ib0JveE1ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVHdGs6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6
OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWlu
dFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludFNs
aWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlk
ZXJUaHVtYlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50UHJv
Z3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVy
U3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWlu
dElubmVyU3BpbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZUNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6Omd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnN0eWxlQ29udGV4dE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpn
ZXRTdHlsZUNvbnRleHQpOiBEZWxldGVkLgorCiAyMDE1LTEyLTEwICBNeWxlcyBDLiBNYXhmaWVs
ZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgZm9udC12YXJpYW50LWNhcHMgZG9l
cyBub3Qgd29yayBpZiB0aGUgZm9udCBkb2VzIG5vdCBzdXBwb3J0IGZvbnQgZmVhdHVyZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCmluZGV4IGRmN2M0MjYz
N2Y4YmU1MmM1MTE5M2E5MDFkYTdlYzMzODAyZjAyZWYuLjgyOGYyNzdjYjkyMmMwYzUzZDg5NGE5
NTllYTQ4YzBmYWE2NmExZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lR3RrLmNwcApAQCAtMTM2LDIwICsxMzYsMTQgQEAgc3RhdGljIGNvbnN0IGludCBtaW5BcnJv
d1NpemUgPSAxNTsKIC8vIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgZGVmaW5lZCBieSBHVEsr
LCB3aGVyZSBpdCB3YXMgZGVmaW5lZCBhcyBNSU5fQVJST1dfV0lEVEggaW4gZ3Rrc3BpbmJ1dHRv
bi5jLgogc3RhdGljIGNvbnN0IGludCBtaW5TcGluQnV0dG9uQXJyb3dTaXplID0gNjsKIAotdHlw
ZWRlZiBIYXNoTWFwPEdUeXBlLCBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4+IFN0eWxlQ29udGV4
dE1hcDsKLXN0YXRpYyBTdHlsZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4dE1hcCgpOwotCiBzdGF0
aWMgdm9pZCBndGtTdHlsZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyopCiB7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzdHlsZUNvbnRleHQgOiBzdHlsZUNvbnRleHRNYXAoKSkK
LSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShzdHlsZUNvbnRleHQudmFsdWUu
Z2V0KCkpOwogICAgIHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lR3RrJj4oU2Nyb2xsYmFyVGhl
bWU6OnRoZW1lKCkpLnRoZW1lQ2hhbmdlZCgpOwogICAgIFBhZ2U6OnVwZGF0ZVN0eWxlRm9yQWxs
UGFnZXNBZnRlckdsb2JhbENoYW5nZUluRW52aXJvbm1lbnQoKTsKIH0KIAotc3RhdGljIFN0eWxl
Q29udGV4dE1hcCYgc3R5bGVDb250ZXh0TWFwKCkKK3N0YXRpYyBHUmVmUHRyPEd0a1N0eWxlQ29u
dGV4dD4gY3JlYXRlU3R5bGVDb250ZXh0KEdUeXBlIHdpZGdldFR5cGUpCiB7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFN0eWxlQ29udGV4dE1hcD4gbWFwOwogICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkID0gZmFsc2U7CiAgICAgaWYgKCFpbml0aWFsaXplZCkgewogICAgICAgICBHdGtT
ZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKQEAgLTE1Nywx
NCArMTUxLDYgQEAgc3RhdGljIFN0eWxlQ29udGV4dE1hcCYgc3R5bGVDb250ZXh0TWFwKCkKICAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChzZXR0aW5ncywgIm5vdGlmeTo6Z3RrLWNvbG9yLXNjaGVt
ZSIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCBudWxscHRyKTsKICAgICAg
ICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0
aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHlsZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkKLXsK
LSAgICBTdHlsZUNvbnRleHRNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzdHlsZUNvbnRleHRNYXAo
KS5hZGQod2lkZ2V0VHlwZSwgbnVsbHB0cik7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAKICAgICBHdGtX
aWRnZXRQYXRoKiBwYXRoID0gZ3RrX3dpZGdldF9wYXRoX25ldygpOwogICAgIGd0a193aWRnZXRf
cGF0aF9hcHBlbmRfdHlwZShwYXRoLCB3aWRnZXRUeXBlKTsKQEAgLTE5NSwxOCArMTgxLDE1IEBA
IHN0YXRpYyBHdGtTdHlsZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBl
KQogICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKGNvbnRleHQuZ2V0KCksIHBhdGgpOwog
ICAgIGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgpOwogCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IGNvbnRleHQ7Ci0gICAgcmV0dXJuIGNvbnRleHQuZ2V0KCk7CisgICAgcmV0dXJuIGNv
bnRleHQ7CiB9CiAKIHN0YXRpYyBHUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tJY29uRm9yV2lk
Z2V0VHlwZShHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwgZ2ludCBkaXJl
Y3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpCiB7CiAgICAgQVNTRVJUKGljb25OYW1l
KTsKIAotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dCh3aWRn
ZXRUeXBlKTsKLSAgICBHdGtJY29uU2V0KiBpY29uU2V0ID0gZ3RrX3N0eWxlX2NvbnRleHRfbG9v
a3VwX2ljb25fc2V0KGNvbnRleHQsIGljb25OYW1lKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0
X3NhdmUoY29udGV4dCk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBj
cmVhdGVTdHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7CisgICAgR3RrSWNvblNldCogaWNvblNldCA9
IGd0a19zdHlsZV9jb250ZXh0X2xvb2t1cF9pY29uX3NldChjb250ZXh0LmdldCgpLCBpY29uTmFt
ZSk7CiAKICAgICBndWludCBmbGFncyA9IDA7CiAgICAgaWYgKHN0YXRlID09IEdUS19TVEFURV9Q
UkVMSUdIVCkKQEAgLTIxNCwyMCArMTk3LDE2IEBAIHN0YXRpYyBHUmVmUHRyPEdka1BpeGJ1Zj4g
Z2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBjaGFyCiAg
ICAgZWxzZSBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFKQogICAgICAgICBmbGFn
cyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKIAotICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8
R3RrVGV4dERpcmVjdGlvbj4oZGlyZWN0aW9uKSk7Ci0gICAgR2RrUGl4YnVmKiBpY29uID0gZ3Rr
X2ljb25fc2V0X3JlbmRlcl9pY29uX3BpeGJ1ZihpY29uU2V0LCBjb250ZXh0LCBzdGF0aWNfY2Fz
dDxHdGtJY29uU2l6ZT4oaWNvblNpemUpKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3Rv
cmUoY29udGV4dCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQuZ2V0
KCksIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtUZXh0RGly
ZWN0aW9uPihkaXJlY3Rpb24pKTsKKyAgICBHZGtQaXhidWYqIGljb24gPSBndGtfaWNvbl9zZXRf
cmVuZGVyX2ljb25fcGl4YnVmKGljb25TZXQsIGNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0
a0ljb25TaXplPihpY29uU2l6ZSkpOwogCiAgICAgcmV0dXJuIGFkb3B0R1JlZihpY29uKTsKIH0K
IAogc3RhdGljIEdSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja1N5bWJvbGljSWNvbkZvcldpZGdl
dFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgY2hhciogc3ltYm9saWNJY29uTmFtZSwgY29u
c3QgY2hhciogZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBnaW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0
ZSwgZ2ludCBpY29uU2l6ZSkKIHsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRT
dHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNv
bnRleHQpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5
bGVDb250ZXh0KHdpZGdldFR5cGUpOwogCiAgICAgZ3VpbnQgZmxhZ3MgPSAwOwogICAgIGlmIChz
dGF0ZSA9PSBHVEtfU1RBVEVfUFJFTElHSFQpCkBAIC0yMzUsMTYgKzIxNCwxNCBAQCBzdGF0aWMg
R1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShHVHlw
ZSB3aWRnZXRUeXBlLCBjbwogICAgIGVsc2UgaWYgKHN0YXRlID09IEdUS19TVEFURV9JTlNFTlNJ
VElWRSkKICAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CiAKLSAg
ICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3Rh
dGVGbGFncz4oZmxhZ3MpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNv
bnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVjdGlvbikpOworICAgIGd0
a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtT
dGF0ZUZsYWdzPihmbGFncykpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24o
Y29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZGlyZWN0aW9uKSk7
CiAKICAgICBHVW5pcXVlUHRyPEd0a0ljb25JbmZvPiBpbmZvKGd0a19pY29uX3RoZW1lX2xvb2t1
cF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCksIHN5bWJvbGljSWNvbk5hbWUsIGlj
b25TaXplLAogICAgICAgICBzdGF0aWNfY2FzdDxHdGtJY29uTG9va3VwRmxhZ3M+KEdUS19JQ09O
X0xPT0tVUF9GT1JDRV9TVkcgfCBHVEtfSUNPTl9MT09LVVBfRk9SQ0VfU0laRSkpKTsKICAgICBH
ZGtQaXhidWYqIGljb24gPSBudWxscHRyOwogICAgIGlmIChpbmZvKQotICAgICAgICBpY29uID0g
Z3RrX2ljb25faW5mb19sb2FkX3N5bWJvbGljX2Zvcl9jb250ZXh0KGluZm8uZ2V0KCksIGNvbnRl
eHQsIG51bGxwdHIsIG51bGxwdHIpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShj
b250ZXh0KTsKKyAgICAgICAgaWNvbiA9IGd0a19pY29uX2luZm9fbG9hZF9zeW1ib2xpY19mb3Jf
Y29udGV4dChpbmZvLmdldCgpLCBjb250ZXh0LmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKIAog
ICAgIGlmICghaWNvbikgewogICAgICAgICBpZiAoIWZhbGxiYWNrU3RvY2tJY29uTmFtZSkKQEAg
LTI3MSwyMSArMjQ4LDE3IEBAIHN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBnZXRNZWRpYUVsZW1l
bnRGcm9tUmVuZGVyT2JqZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgbykKIHZvaWQgUmVuZGVyVGhl
bWVHdGs6OmluaXRNZWRpYUNvbG9ycygpCiB7CiAgICAgR2RrUkdCQSBjb2xvcjsKLSAgICBHdGtT
dHlsZUNvbnRleHQqIGNvbnRhaW5lckNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVf
Q09OVEFJTkVSKTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGFpbmVyQ29udGV4
dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChHVEtfVFlQRV9DT05UQUlORVIpOwogCi0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2F2ZShjb250YWluZXJDb250ZXh0KTsKLQotICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9zdGF0ZShjb250YWluZXJDb250ZXh0LCBHVEtfU1RBVEVfRkxBR19OT1JNQUwpOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNvbnRl
eHQsIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250YWluZXJDb250ZXh0KSwgJmNvbG9y
KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGFpbmVyQ29udGV4dC5nZXQo
KSwgR1RLX1NUQVRFX0ZMQUdfTk9STUFMKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFj
a2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3RhdGUoY29udGFpbmVyQ29udGV4dC5nZXQoKSksICZjb2xvcik7CiAgICAgbV9wYW5lbENv
bG9yID0gY29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRhaW5lckNv
bnRleHQsIEdUS19TVEFURV9GTEFHX0FDVElWRSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X2JhY2tncm91bmRfY29sb3IoY29udGFpbmVyQ29udGV4dCwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X3N0YXRlKGNvbnRhaW5lckNvbnRleHQpLCAmY29sb3IpOworICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9zdGF0ZShjb250YWluZXJDb250ZXh0LmdldCgpLCBHVEtfU1RBVEVfRkxBR19BQ1RJVkUp
OworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNv
bnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250YWluZXJDb250ZXh0
LmdldCgpKSwgJmNvbG9yKTsKICAgICBtX3NsaWRlckNvbG9yID0gY29sb3I7Ci0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRhaW5lckNvbnRleHQsIEdUS19TVEFURV9GTEFHX1NF
TEVDVEVEKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250
YWluZXJDb250ZXh0LCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGFpbmVyQ29udGV4
dCksICZjb2xvcik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRhaW5lckNv
bnRleHQuZ2V0KCksIEdUS19TVEFURV9GTEFHX1NFTEVDVEVEKTsKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LmdldCgpLCBndGtfc3R5
bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGFpbmVyQ29udGV4dC5nZXQoKSksICZjb2xvcik7CiAg
ICAgbV9zbGlkZXJUaHVtYkNvbG9yID0gY29sb3I7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9y
ZXN0b3JlKGNvbnRhaW5lckNvbnRleHQpOwogfQogCiB2b2lkIFJlbmRlclRoZW1lR3RrOjppbml0
TWVkaWFCdXR0b25zKCkKQEAgLTQyMiwzMiArMzk1LDMyIEBAIHN0YXRpYyB2b2lkIGFkanVzdFJl
Y3RGb3JGb2N1cyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEZsb2F0UmVjdCYgcmVjdCkKIAog
dm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBHdGtTdHlsZUNvbnRleHQq
IGNvbnRleHQgPSAwOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0OwogICAg
IGJvb2wgY2hlY2tJbnRlcmlvckZvY3VzID0gZmFsc2U7CiAgICAgQ29udHJvbFBhcnQgcGFydCA9
IHJlbmRlck9iamVjdC5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKICAgICBzd2l0Y2ggKHBhcnQpIHsK
ICAgICBjYXNlIENoZWNrYm94UGFydDoKICAgICBjYXNlIFJhZGlvUGFydDoKLSAgICAgICAgY29u
dGV4dCA9IGdldFN0eWxlQ29udGV4dChwYXJ0ID09IENoZWNrYm94UGFydCA/IEdUS19UWVBFX0NI
RUNLX0JVVFRPTiA6IEdUS19UWVBFX1JBRElPX0JVVFRPTik7CisgICAgICAgIGNvbnRleHQgPSBj
cmVhdGVTdHlsZUNvbnRleHQocGFydCA9PSBDaGVja2JveFBhcnQgPyBHVEtfVFlQRV9DSEVDS19C
VVRUT04gOiBHVEtfVFlQRV9SQURJT19CVVRUT04pOwogCiAgICAgICAgIGdpbnQgaW5kaWNhdG9y
U3BhY2luZzsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJp
bmRpY2F0b3Itc3BhY2luZyIsICZpbmRpY2F0b3JTcGFjaW5nLCBudWxscHRyKTsKKyAgICAgICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQuZ2V0KCksICJpbmRpY2F0b3Itc3Bh
Y2luZyIsICZpbmRpY2F0b3JTcGFjaW5nLCBudWxscHRyKTsKICAgICAgICAgcmVjdC5pbmZsYXRl
KGluZGljYXRvclNwYWNpbmcpOwogCiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNsaWRlclZl
cnRpY2FsUGFydDoKICAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0OgotICAgICAgICBjb250
ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsKKyAgICAgICAgY29udGV4dCA9
IGNyZWF0ZVN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQnV0dG9uUGFydDoKICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKICAgICBjYXNl
IE1lbnVsaXN0UGFydDoKLSAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQ
RV9CVVRUT04pOworICAgICAgICBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdUS19UWVBF
X0JVVFRPTik7CiAgICAgICAgIGNoZWNrSW50ZXJpb3JGb2N1cyA9IHRydWU7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKICAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAg
ICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRSWSk7CisgICAgICAg
IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpOwogICAgICAgICBj
aGVja0ludGVyaW9yRm9jdXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpA
QCAtNDU3LDExICs0MzAsMTEgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVwYWludFJl
Y3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIEZsb2F0UmUKICAgICBBU1NFUlQo
Y29udGV4dCk7CiAgICAgaWYgKGNoZWNrSW50ZXJpb3JGb2N1cykgewogICAgICAgICBnYm9vbGVh
biBpbnRlcmlvckZvY3VzOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29u
dGV4dCwgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsIG51bGxwdHIpOworICAgICAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dC5nZXQoKSwgImludGVyaW9yLWZv
Y3VzIiwgJmludGVyaW9yRm9jdXMsIG51bGxwdHIpOwogICAgICAgICBpZiAoaW50ZXJpb3JGb2N1
cykKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYWRqdXN0UmVjdEZvckZvY3VzKGNv
bnRleHQsIHJlY3QpOworICAgIGFkanVzdFJlY3RGb3JGb2N1cyhjb250ZXh0LmdldCgpLCByZWN0
KTsKIH0KIAogdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CkBAIC00NzEsOCArNDQ0
LDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lCiAgICAgICAgIHN0eWxlLnNldExpbmVIZWln
aHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQogCi1zdGF0aWMgdm9pZCBz
ZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUmIHN0eWxl
KQorc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShHVHlwZSB3aWRnZXRUeXBlLCBSZW5kZXJTdHls
ZSYgc3R5bGUpCiB7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVh
dGVTdHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7CisKICAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdo
dCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4ndCBjaGFuZ2UgdGhlbS4KICAgICBp
ZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCku
aXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ4MSw3ICs0NTYsNyBAQCBzdGF0aWMgdm9p
ZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUmIHN0
eWxlKQogICAgIC8vIEdUSysgdXNlcnMgdGVuZCB0byBkZW1hbmQgdGhlIG5hdGl2ZSBsb29rLgog
ICAgIC8vIEl0IGNvdWxkIGJlIG1hZGUgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB2YWx1ZXMgb3Ro
ZXIgdGhhbiAxMyBhY3R1YWxseSBicmVhayBzaXRlIGNvbXBhdGliaWxpdHkuCiAgICAgZ2ludCBp
bmRpY2F0b3JTaXplOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAi
aW5kaWNhdG9yLXNpemUiLCAmaW5kaWNhdG9yU2l6ZSwgbnVsbHB0cik7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQuZ2V0KCksICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRp
Y2F0b3JTaXplLCBudWxscHRyKTsKIAogICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCkpCiAgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBG
aXhlZCkpOwpAQCAtNDkyLDE1ICs0NjcsMTQgQEAgc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShH
dGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlclN0eWxlJiBzdHlsZSkKIAogc3RhdGljIHZv
aWQgcGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRnZXRU
eXBlLCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIGZ1bGxSZWN0KQogewotICAgIEd0a1N0eWxlQ29udGV4
dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dCh3aWRnZXRUeXBlKTsKLSAgICBndGtfc3R5bGVf
Y29udGV4dF9zYXZlKGNvbnRleHQpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250
ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KHdpZGdldFR5cGUpOwogCiAgICAgLy8gU29tZSB0aGVt
ZXMgZG8gbm90IHJlbmRlciBsYXJnZSB0b2dnbGUgYnV0dG9ucyBwcm9wZXJseSwgc28gd2Ugc2lt
cGx5CiAgICAgLy8gc2hyaW5rIHRoZSByZWN0YW5nbGUgYmFjayBkb3duIHRvIHRoZSBkZWZhdWx0
IHNpemUgYW5kIHRoZW4gY2VudGVyIGl0CiAgICAgLy8gaW4gdGhlIGZ1bGwgdG9nZ2xlIGJ1dHRv
biByZWdpb24uIFRoZSByZWFzb24gZm9yIG5vdCBzaW1wbHkgZm9yY2luZyB0b2dnbGUKICAgICAv
LyBidXR0b25zIHRvIGJlIGEgc21hbGxlciBzaXplIGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBi
cmVhayBzaXRlIGxheW91dHMuCiAgICAgZ2ludCBpbmRpY2F0b3JTaXplOwotICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNpemUiLCAmaW5kaWNhdG9y
U2l6ZSwgbnVsbHB0cik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQu
Z2V0KCksICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBudWxscHRyKTsKICAgICBJ
bnRSZWN0IHJlY3QoZnVsbFJlY3QpOwogICAgIGlmIChyZWN0LndpZHRoKCkgPiBpbmRpY2F0b3JT
aXplKSB7CiAgICAgICAgIHJlY3QuaW5mbGF0ZVgoLShyZWN0LndpZHRoKCkgLSBpbmRpY2F0b3JT
aXplKSAvIDIpOwpAQCAtNTEyLDggKzQ4Niw4IEBAIHN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKGNv
bnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgUmVuCiAg
ICAgICAgIHJlY3Quc2V0SGVpZ2h0KGluZGljYXRvclNpemUpOyAvLyBJbiBjYXNlIHJlY3QuaGVp
Z2h0KCkgd2FzIGVxdWFsIHRvIGluZGljYXRvclNpemUgKyAxLgogICAgIH0KIAotICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERp
cmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24o
KSkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgd2lkZ2V0VHlw
ZSA9PSBHVEtfVFlQRV9DSEVDS19CVVRUT04gPyBHVEtfU1RZTEVfQ0xBU1NfQ0hFQ0sgOiBHVEtf
U1RZTEVfQ0xBU1NfUkFESU8pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24o
Y29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVj
dGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpKTsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9hZGRfY2xhc3MoY29udGV4dC5nZXQoKSwgd2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9D
SEVDS19CVVRUT04gPyBHVEtfU1RZTEVfQ0xBU1NfQ0hFQ0sgOiBHVEtfU1RZTEVfQ0xBU1NfUkFE
SU8pOwogCiAgICAgZ3VpbnQgZmxhZ3MgPSAwOwogICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChy
ZW5kZXJPYmplY3QpKQpAQCAtNTMwLDI4ICs1MDQsMjYgQEAgc3RhdGljIHZvaWQgcGFpbnRUb2dn
bGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBS
ZW4KICNlbmRpZgogICAgIGlmICh0aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCiAgICAg
ICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1NFTEVDVEVEOwotICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykp
OworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LmdldCgpLCBzdGF0aWNf
Y2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwogCiAgICAgaWYgKHdpZGdldFR5cGUgPT0gR1RL
X1RZUEVfQ0hFQ0tfQlVUVE9OKQotICAgICAgICBndGtfcmVuZGVyX2NoZWNrKGNvbnRleHQsIHBh
aW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZ3RrX3JlbmRlcl9j
aGVjayhjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CiAgICAgZWxzZQotICAgICAgICBndGtfcmVuZGVyX29wdGlvbihjb250ZXh0LCBwYWludEluZm8u
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGd0a19yZW5kZXJfb3B0aW9uKGNv
bnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCks
IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIAogICAg
IGlmICh0aGVtZS0+aXNGb2N1c2VkKHJlbmRlck9iamVjdCkpIHsKICAgICAgICAgSW50UmVjdCBp
bmRpY2F0b3JSZWN0KHJlY3QpOwogICAgICAgICBnaW50IGluZGljYXRvclNwYWNpbmc7Ci0gICAg
ICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNwYWNp
bmciLCAmaW5kaWNhdG9yU3BhY2luZywgbnVsbHB0cik7CisgICAgICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9zdHlsZShjb250ZXh0LmdldCgpLCAiaW5kaWNhdG9yLXNwYWNpbmciLCAmaW5kaWNh
dG9yU3BhY2luZywgbnVsbHB0cik7CiAgICAgICAgIGluZGljYXRvclJlY3QuaW5mbGF0ZShpbmRp
Y2F0b3JTcGFjaW5nKTsKLSAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWludElu
Zm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBpbmRpY2F0b3JSZWN0LngoKSwg
aW5kaWNhdG9yUmVjdC55KCksCisgICAgICAgIGd0a19yZW5kZXJfZm9jdXMoY29udGV4dC5nZXQo
KSwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgaW5kaWNhdG9y
UmVjdC54KCksIGluZGljYXRvclJlY3QueSgpLAogICAgICAgICAgICAgaW5kaWNhdG9yUmVjdC53
aWR0aCgpLCBpbmRpY2F0b3JSZWN0LmhlaWdodCgpKTsKICAgICB9Ci0KLSAgICBndGtfc3R5bGVf
Y29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwogfQogCiB2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRD
aGVja2JveFNpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIHNldFRvZ2dsZVNp
emUoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NIRUNLX0JVVFRPTiksIHN0eWxlKTsKKyAgICBz
ZXRUb2dnbGVTaXplKEdUS19UWVBFX0NIRUNLX0JVVFRPTiwgc3R5bGUpOwogfQogCiBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAg
LTU2Miw3ICs1MzQsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludENoZWNrYm94KGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludAogCiB2b2lkIFJlbmRlclRo
ZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIHNl
dFRvZ2dsZVNpemUoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1JBRElPX0JVVFRPTiksIHN0eWxl
KTsKKyAgICBzZXRUb2dnbGVTaXplKEdUS19UWVBFX1JBRElPX0JVVFRPTiwgc3R5bGUpOwogfQog
CiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKQEAgLTYzOSwxNSArNjExLDEyIEBAIHN0YXRpYyB2b2lkIHJlbmRlckJ1dHRvbihSZW5kZXJU
aGVtZSogdGhlbWUsIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuCiB9CiBib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X0JVVFRPTik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLQotICAgIGd0
a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4
dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rp
b24oKSkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX0JVVFRPTik7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQg
PSBjcmVhdGVTdHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKIAotICAgIHJlbmRlckJ1dHRv
bih0aGlzLCBjb250ZXh0LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxH
dGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRp
cmVjdGlvbigpKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0Lmdl
dCgpLCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jl
c3RvcmUoY29udGV4dCk7CisgICAgcmVuZGVyQnV0dG9uKHRoaXMsIGNvbnRleHQuZ2V0KCksIHJl
bmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAg
LTY3Myw0MCArNjQyLDM0IEBAIHN0YXRpYyB2b2lkIGdldENvbWJvQm94TWV0cmljcyhSZW5kZXJT
dHlsZSYgc3R5bGUsIEd0a0JvcmRlciYgYm9yZGVyLCBpbnQmIGZvY3VzCiAgICAgaWYgKHN0eWxl
LmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQogICAgICAgICByZXR1cm47CiAKLSAgICBH
dGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09NQk9f
Qk9YKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdUS19UWVBFX0NP
TUJPX0JPWCk7CiAKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RL
X1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlv
bihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9u
KHN0eWxlLmRpcmVjdGlvbigpKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhj
b250ZXh0LmdldCgpLCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0a1RleHREaXJl
Y3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUuZGlyZWN0aW9uKCkpKSk7CiAKLSAgICBndGtf
c3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFn
cz4oMCkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoY29udGV4dCwgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3N0YXRlKGNvbnRleHQpLCAmYm9yZGVyKTsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9zZXRfc3RhdGUoY29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFn
cz4oMCkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoY29udGV4dC5nZXQoKSwg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKGNvbnRleHQuZ2V0KCkpLCAmYm9yZGVyKTsKIAog
ICAgIGdib29sZWFuIGludGVyaW9yRm9jdXM7CiAgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1Bh
ZDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImludGVyaW9yLWZv
Y3VzIiwgJmludGVyaW9yRm9jdXMsICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsICJm
b2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBudWxscHRyKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9nZXRfc3R5bGUoY29udGV4dC5nZXQoKSwgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9j
dXMsICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsICJmb2N1cy1wYWRkaW5nIiwgJmZv
Y3VzUGFkLCBudWxscHRyKTsKICAgICBmb2N1cyA9IGludGVyaW9yRm9jdXMgPyBmb2N1c1dpZHRo
ICsgZm9jdXNQYWQgOiAwOwogCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0
KTsKLQotICAgIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsK
LSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworICAgIGNvbnRleHQgPSBjcmVh
dGVTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKIAogICAgIEd0a1RleHREaXJlY3Rp
b24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVj
dGlvbihzdHlsZS5kaXJlY3Rpb24oKSkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJl
Y3Rpb24oY29udGV4dCwgZGlyZWN0aW9uKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xh
c3MoY29udGV4dCwgInNlcGFyYXRvciIpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJl
Y3Rpb24oY29udGV4dC5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9h
ZGRfY2xhc3MoY29udGV4dC5nZXQoKSwgInNlcGFyYXRvciIpOwogCiAgICAgZ2Jvb2xlYW4gd2lk
ZVNlcGFyYXRvcnM7CiAgICAgZ2ludCBzZXBhcmF0b3JXaWR0aDsKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUoY29udGV4dCwgIndpZGUtc2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9y
cywgInNlcGFyYXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwgbnVsbHB0cik7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQuZ2V0KCksICJ3aWRlLXNlcGFyYXRvcnMi
LCAmd2lkZVNlcGFyYXRvcnMsICJzZXBhcmF0b3Itd2lkdGgiLCAmc2VwYXJhdG9yV2lkdGgsIG51
bGxwdHIpOwogCiAgICAgLy8gR1RLKyBhbHdheXMgdXNlcyBib3JkZXIubGVmdCwgcmVnYXJkbGVz
cyBvZiB0ZXh0IGRpcmVjdGlvbi4gU2VlIGd0a3NlcGVyYXRvci5jLgogICAgIGlmICghd2lkZVNl
cGFyYXRvcnMpCiAgICAgICAgIHNlcGFyYXRvcldpZHRoID0gYm9yZGVyLmxlZnQ7CiAKICAgICBz
ZXBhcmF0b3IgPSBzZXBhcmF0b3JXaWR0aDsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3Rv
cmUoY29udGV4dCk7CiB9CiAKIGludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRp
bmdMZWZ0KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKQEAgLTc1NiwyNSArNzE5LDI0IEBAIGJv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50CiAgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBz
dGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVj
dC5zdHlsZSgpLmRpcmVjdGlvbigpKSk7CiAKICAgICAvLyBQYWludCB0aGUgYnV0dG9uLgotICAg
IEd0a1N0eWxlQ29udGV4dCogYnV0dG9uU3R5bGVDb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdU
S19UWVBFX0JVVFRPTik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShidXR0b25TdHlsZUNv
bnRleHQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oYnV0dG9uU3R5bGVD
b250ZXh0LCBkaXJlY3Rpb24pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhidXR0
b25TdHlsZUNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOwotICAgIHJlbmRlckJ1dHRv
bih0aGlzLCBidXR0b25TdHlsZUNvbnRleHQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0
KTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gYnV0dG9uU3R5bGVDb250ZXh0ID0gY3Jl
YXRlU3R5bGVDb250ZXh0KEdUS19UWVBFX0JVVFRPTik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2V0X2RpcmVjdGlvbihidXR0b25TdHlsZUNvbnRleHQuZ2V0KCksIGRpcmVjdGlvbik7CisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGJ1dHRvblN0eWxlQ29udGV4dC5nZXQoKSwgR1RL
X1NUWUxFX0NMQVNTX0JVVFRPTik7CisgICAgcmVuZGVyQnV0dG9uKHRoaXMsIGJ1dHRvblN0eWxl
Q29udGV4dC5nZXQoKSwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogCiAgICAgLy8g
R2V0IHRoZSBpbm5lciByZWN0YW5nbGUuCiAgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsK
ICAgICBHdGtCb3JkZXIqIGlubmVyQm9yZGVyUHRyID0gMDsKICAgICBHdGtCb3JkZXIgaW5uZXJC
b3JkZXIgPSB7IDEsIDEsIDEsIDEgfTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUo
YnV0dG9uU3R5bGVDb250ZXh0LCAiaW5uZXItYm9yZGVyIiwgJmlubmVyQm9yZGVyUHRyLCAiZm9j
dXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLCAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwg
bnVsbHB0cik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGJ1dHRvblN0eWxlQ29u
dGV4dC5nZXQoKSwgImlubmVyLWJvcmRlciIsICZpbm5lckJvcmRlclB0ciwgImZvY3VzLWxpbmUt
d2lkdGgiLCAmZm9jdXNXaWR0aCwgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsIG51bGxwdHIp
OwogICAgIGlmIChpbm5lckJvcmRlclB0cikgewogICAgICAgICBpbm5lckJvcmRlciA9ICppbm5l
ckJvcmRlclB0cjsKICAgICAgICAgZ3RrX2JvcmRlcl9mcmVlKGlubmVyQm9yZGVyUHRyKTsKICAg
ICB9CiAKICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGg7Ci0gICAgR3RrU3RhdGVGbGFncyBzdGF0
ZSA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShidXR0b25TdHlsZUNvbnRleHQpOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoYnV0dG9uU3R5bGVDb250ZXh0LCBzdGF0ZSwg
JmJvcmRlcldpZHRoKTsKKyAgICBHdGtTdGF0ZUZsYWdzIHN0YXRlID0gZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X3N0YXRlKGJ1dHRvblN0eWxlQ29udGV4dC5nZXQoKSk7CisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X2JvcmRlcihidXR0b25TdHlsZUNvbnRleHQuZ2V0KCksIHN0YXRlLCAmYm9yZGVy
V2lkdGgpOwogCiAgICAgZm9jdXNXaWR0aCArPSBmb2N1c1BhZDsKICAgICBJbnRSZWN0IGlubmVy
UmVjdCgKQEAgLTc4NiwyNCArNzQ4LDIxIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVu
dUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50CiAgICAg
aWYgKGlzUHJlc3NlZChyZW5kZXJPYmplY3QpKSB7CiAgICAgICAgIGdpbnQgY2hpbGREaXNwbGFj
ZW1lbnRYOwogICAgICAgICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WTsKLSAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGJ1dHRvblN0eWxlQ29udGV4dCwgImNoaWxkLWRpc3BsYWNl
bWVudC14IiwgJmNoaWxkRGlzcGxhY2VtZW50WCwgImNoaWxkLWRpc3BsYWNlbWVudC15IiwgJmNo
aWxkRGlzcGxhY2VtZW50WSwgbnVsbHB0cik7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9zdHlsZShidXR0b25TdHlsZUNvbnRleHQuZ2V0KCksICJjaGlsZC1kaXNwbGFjZW1lbnQteCIs
ICZjaGlsZERpc3BsYWNlbWVudFgsICJjaGlsZC1kaXNwbGFjZW1lbnQteSIsICZjaGlsZERpc3Bs
YWNlbWVudFksIG51bGxwdHIpOwogICAgICAgICBpbm5lclJlY3QubW92ZShjaGlsZERpc3BsYWNl
bWVudFgsIGNoaWxkRGlzcGxhY2VtZW50WSk7CiAgICAgfQogICAgIGlubmVyUmVjdC5zZXRXaWR0
aChzdGQ6Om1heCgxLCBpbm5lclJlY3Qud2lkdGgoKSkpOwogICAgIGlubmVyUmVjdC5zZXRIZWln
aHQoc3RkOjptYXgoMSwgaW5uZXJSZWN0LmhlaWdodCgpKSk7CiAKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9yZXN0b3JlKGJ1dHRvblN0eWxlQ29udGV4dCk7Ci0KICAgICAvLyBQYWludCB0aGUgYXJy
b3cuCi0gICAgR3RrU3R5bGVDb250ZXh0KiBhcnJvd1N0eWxlQ29udGV4dCA9IGdldFN0eWxlQ29u
dGV4dChHVEtfVFlQRV9BUlJPVyk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShhcnJvd1N0
eWxlQ29udGV4dCk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGFycm93U3R5bGVDb250
ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdUS19UWVBFX0FSUk9XKTsKIAotICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oYXJyb3dTdHlsZUNvbnRleHQsIGRpcmVjdGlvbik7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGFycm93U3R5bGVDb250ZXh0LCAiYXJyb3ci
KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNvbnRleHQsIEdU
S19TVFlMRV9DTEFTU19CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rp
b24oYXJyb3dTdHlsZUNvbnRleHQuZ2V0KCksIGRpcmVjdGlvbik7CisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfYWRkX2NsYXNzKGFycm93U3R5bGVDb250ZXh0LmdldCgpLCAiYXJyb3ciKTsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNvbnRleHQuZ2V0KCksIEdUS19T
VFlMRV9DTEFTU19CVVRUT04pOwogCiAgICAgZ2Zsb2F0IGFycm93U2NhbGluZzsKLSAgICBndGtf
c3R5bGVfY29udGV4dF9nZXRfc3R5bGUoYXJyb3dTdHlsZUNvbnRleHQsICJhcnJvdy1zY2FsaW5n
IiwgJmFycm93U2NhbGluZywgbnVsbHB0cik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0
eWxlKGFycm93U3R5bGVDb250ZXh0LmdldCgpLCAiYXJyb3ctc2NhbGluZyIsICZhcnJvd1NjYWxp
bmcsIG51bGxwdHIpOwogCiAgICAgSW50U2l6ZSBhcnJvd1NpemUobWluQXJyb3dTaXplLCBpbm5l
clJlY3QuaGVpZ2h0KCkpOwogICAgIEZsb2F0UG9pbnQgYXJyb3dQb3NpdGlvbihpbm5lclJlY3Qu
bG9jYXRpb24oKSk7CkBAIC04MTUsMjcgKzc3NCwyMiBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWlu
dAogICAgIGdpbnQgZXh0ZW50ID0gc3RkOjptaW4oYXJyb3dTaXplLndpZHRoKCksIGFycm93U2l6
ZS5oZWlnaHQoKSkgKiBhcnJvd1NjYWxpbmc7CiAgICAgYXJyb3dQb3NpdGlvbi5tb3ZlKChhcnJv
d1NpemUud2lkdGgoKSAtIGV4dGVudCkgLyAyLCAoYXJyb3dTaXplLmhlaWdodCgpIC0gZXh0ZW50
KSAvIDIpOwogCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGFycm93U3R5bGVDb250
ZXh0LCBzdGF0ZSk7Ci0gICAgZ3RrX3JlbmRlcl9hcnJvdyhhcnJvd1N0eWxlQ29udGV4dCwgY2Fp
cm9Db250ZXh0LCBHX1BJLCBhcnJvd1Bvc2l0aW9uLngoKSwgYXJyb3dQb3NpdGlvbi55KCksIGV4
dGVudCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGFycm93U3R5bGVDb250ZXh0
KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoYXJyb3dTdHlsZUNvbnRleHQuZ2V0
KCksIHN0YXRlKTsKKyAgICBndGtfcmVuZGVyX2Fycm93KGFycm93U3R5bGVDb250ZXh0LmdldCgp
LCBjYWlyb0NvbnRleHQsIEdfUEksIGFycm93UG9zaXRpb24ueCgpLCBhcnJvd1Bvc2l0aW9uLnko
KSwgZXh0ZW50KTsKIAogICAgIC8vIFBhaW50IHRoZSBzZXBhcmF0b3IgaWYgbmVlZGVkLgotICAg
IEd0a1N0eWxlQ29udGV4dCogc2VwYXJhdG9yU3R5bGVDb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0
KEdUS19UWVBFX0NPTUJPX0JPWCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShzZXBhcmF0
b3JTdHlsZUNvbnRleHQpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzZXBhcmF0b3JT
dHlsZUNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09NQk9fQk9YKTsKIAot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oc2VwYXJhdG9yU3R5bGVDb250ZXh0
LCBkaXJlY3Rpb24pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhzZXBhcmF0b3JT
dHlsZUNvbnRleHQsICJzZXBhcmF0b3IiKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGly
ZWN0aW9uKHNlcGFyYXRvclN0eWxlQ29udGV4dC5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9hZGRfY2xhc3Moc2VwYXJhdG9yU3R5bGVDb250ZXh0LmdldCgpLCAic2Vw
YXJhdG9yIik7CiAKICAgICBnYm9vbGVhbiB3aWRlU2VwYXJhdG9yczsKICAgICBnaW50IHNlcGFy
YXRvcldpZHRoOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShzZXBhcmF0b3JTdHls
ZUNvbnRleHQsICJ3aWRlLXNlcGFyYXRvcnMiLCAmd2lkZVNlcGFyYXRvcnMsICJzZXBhcmF0b3It
d2lkdGgiLCAmc2VwYXJhdG9yV2lkdGgsIG51bGxwdHIpOwotICAgIGlmICh3aWRlU2VwYXJhdG9y
cyAmJiAhc2VwYXJhdG9yV2lkdGgpIHsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9y
ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHls
ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQuZ2V0KCksICJ3aWRlLXNlcGFyYXRvcnMiLCAmd2lkZVNl
cGFyYXRvcnMsICJzZXBhcmF0b3Itd2lkdGgiLCAmc2VwYXJhdG9yV2lkdGgsIG51bGxwdHIpOwor
ICAgIGlmICh3aWRlU2VwYXJhdG9ycyAmJiAhc2VwYXJhdG9yV2lkdGgpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CiAKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoc2VwYXJh
dG9yU3R5bGVDb250ZXh0LCBzdGF0ZSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRl
KHNlcGFyYXRvclN0eWxlQ29udGV4dC5nZXQoKSwgc3RhdGUpOwogICAgIEludFBvaW50IHNlcGFy
YXRvclBvc2l0aW9uKGFycm93UG9zaXRpb24ueCgpLCBpbm5lclJlY3QueSgpKTsKICAgICBpZiAo
d2lkZVNlcGFyYXRvcnMpIHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJf
TFRSKQpAQCAtODQzLDEyICs3OTcsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51
TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnQKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZShhcnJvd1NpemUud2lk
dGgoKSwgMCk7CiAKLSAgICAgICAgZ3RrX3JlbmRlcl9mcmFtZShzZXBhcmF0b3JTdHlsZUNvbnRl
eHQsIGNhaXJvQ29udGV4dCwgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3NpdGlv
bi55KCksIHNlcGFyYXRvcldpZHRoLCBpbm5lclJlY3QuaGVpZ2h0KCkpOworICAgICAgICBndGtf
cmVuZGVyX2ZyYW1lKHNlcGFyYXRvclN0eWxlQ29udGV4dC5nZXQoKSwgY2Fpcm9Db250ZXh0LCBz
ZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwgc2VwYXJhdG9yV2lk
dGgsIGlubmVyUmVjdC5oZWlnaHQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR3RrQm9yZGVy
IHBhZGRpbmc7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9wYWRkaW5nKHNlcGFyYXRv
clN0eWxlQ29udGV4dCwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKHNlcGFyYXRvclN0eWxl
Q29udGV4dCksICZwYWRkaW5nKTsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRp
bmcoc2VwYXJhdG9yU3R5bGVDb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3Rh
dGUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LmdldCgpKSwgJnBhZGRpbmcpOwogICAgICAgICBHdGtC
b3JkZXIgYm9yZGVyOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKHNlcGFy
YXRvclN0eWxlQ29udGV4dCwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKHNlcGFyYXRvclN0
eWxlQ29udGV4dCksICZib3JkZXIpOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9y
ZGVyKHNlcGFyYXRvclN0eWxlQ29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0
YXRlKHNlcGFyYXRvclN0eWxlQ29udGV4dC5nZXQoKSksICZib3JkZXIpOwogCiAgICAgICAgIGlm
IChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikKICAgICAgICAgICAgIHNlcGFyYXRvclBv
c2l0aW9uLm1vdmUoLShwYWRkaW5nLmxlZnQgKyBib3JkZXIubGVmdCksIDApOwpAQCAtODYwLDEx
ICs4MTQsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnQKICAgICAgICAgLy8gQW4gZXh0cmEg
Y2xpcCBwcmV2ZW50cyB0aGUgc2VwYXJhdG9yIGJsZWVkaW5nIG91dHNpZGUgb2YgdGhlIHNwZWNp
ZmllZCByZWN0YW5nbGUgYmVjYXVzZSBvZiBzdWJwaXhlbCBwb3NpdGlvbmluZy4KICAgICAgICAg
Y2Fpcm9fcmVjdGFuZ2xlKGNhaXJvQ29udGV4dCwgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBzZXBh
cmF0b3JQb3NpdGlvbi55KCksIGJvcmRlci5sZWZ0LCBpbm5lclJlY3QuaGVpZ2h0KCkpOwogICAg
ICAgICBjYWlyb19jbGlwKGNhaXJvQ29udGV4dCk7Ci0gICAgICAgIGd0a19yZW5kZXJfbGluZShz
ZXBhcmF0b3JTdHlsZUNvbnRleHQsIGNhaXJvQ29udGV4dCwgc2VwYXJhdG9yUG9zaXRpb24ueCgp
LCBzZXBhcmF0b3JQb3NpdGlvbi55KCksIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgaW5uZXJSZWN0
Lm1heFkoKSk7CisgICAgICAgIGd0a19yZW5kZXJfbGluZShzZXBhcmF0b3JTdHlsZUNvbnRleHQu
Z2V0KCksIGNhaXJvQ29udGV4dCwgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3Np
dGlvbi55KCksIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgaW5uZXJSZWN0Lm1heFkoKSk7CiAgICAg
ICAgIGNhaXJvX3Jlc3RvcmUoY2Fpcm9Db250ZXh0KTsKICAgICB9CiAKLSAgICBndGtfc3R5bGVf
Y29udGV4dF9yZXN0b3JlKHNlcGFyYXRvclN0eWxlQ29udGV4dCk7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCkBAIC04NzUsMzUgKzgyOCwzMiBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1l
bnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyQm94JiBvYmplY3QsIGNvbgogCiBi
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQo
R1RLX1RZUEVfRU5UUlkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Cisg
ICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQo
R1RLX1RZUEVfRU5UUlkpOwogCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihj
b250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJl
bmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0
X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfRU5UUlkpOworICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrVGV4
dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rp
b24oKSkpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dC5nZXQoKSwg
R1RLX1NUWUxFX0NMQVNTX0VOVFJZKTsKIAogICAgIGd1aW50IGZsYWdzID0gMDsKICAgICBpZiAo
IWlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVj
dCkpCiAgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwogICAgIGVs
c2UgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQogICAgICAgICBmbGFncyB8PSBHVEtfU1RB
VEVfRkxBR19GT0NVU0VEOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOworICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9zdGF0ZShjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihm
bGFncykpOwogCi0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5j
b250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQs
IHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2Jh
Y2tncm91bmQoY29udGV4dC5nZXQoKSwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOworICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dC5nZXQoKSwgcGFpbnRJbmZvLmNvbnRl
eHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3Qp
ICYmIGlzRW5hYmxlZChyZW5kZXJPYmplY3QpKSB7CiAgICAgICAgIGdib29sZWFuIGludGVyaW9y
Rm9jdXM7CiAgICAgICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7Ci0gICAgICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJp
b3JGb2N1cywgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwgImZvY3VzLXBhZGRpbmci
LCAmZm9jdXNQYWQsIG51bGxwdHIpOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5
bGUoY29udGV4dC5nZXQoKSwgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsICJmb2N1
cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBu
dWxscHRyKTsKICAgICAgICAgaWYgKCFpbnRlcmlvckZvY3VzKSB7CiAgICAgICAgICAgICBJbnRS
ZWN0IGZvY3VzUmVjdChyZWN0KTsKICAgICAgICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlKGZvY3Vz
V2lkdGggKyBmb2N1c1BhZCk7Ci0gICAgICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQs
IHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGZvY3VzUmVjdC54
KCksIGZvY3VzUmVjdC55KCksIGZvY3VzUmVjdC53aWR0aCgpLCBmb2N1c1JlY3QuaGVpZ2h0KCkp
OworICAgICAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LmdldCgpLCBwYWludEluZm8u
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBmb2N1c1JlY3QueCgpLCBmb2N1c1Jl
Y3QueSgpLCBmb2N1c1JlY3Qud2lkdGgoKSwgZm9jdXNSZWN0LmhlaWdodCgpKTsKICAgICAgICAg
fQogICAgIH0KIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTExMDMsMjggKzEwNTMsMjYgQEAgYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVj
dCwgY29uc3QgUGEKICAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LnN0eWxlKCku
YXBwZWFyYW5jZSgpOwogICAgIEFTU0VSVF9VTlVTRUQocGFydCwgcGFydCA9PSBTbGlkZXJIb3Jp
em9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlh
Vm9sdW1lU2xpZGVyUGFydCk7CiAKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRT
dHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUo
Y29udGV4dCk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVT
dHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpOwogCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0
X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgp
LmRpcmVjdGlvbigpKSk7Ci0gICAgYXBwbHlTbGlkZXJTdHlsZUNvbnRleHRDbGFzc2VzKGNvbnRl
eHQsIHBhcnQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtf
U1RZTEVfQ0xBU1NfVFJPVUdIKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9u
KGNvbnRleHQuZ2V0KCksIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGly
ZWN0aW9uKCkpKTsKKyAgICBhcHBseVNsaWRlclN0eWxlQ29udGV4dENsYXNzZXMoY29udGV4dC5n
ZXQoKSwgcGFydCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQuZ2V0
KCksIEdUS19TVFlMRV9DTEFTU19UUk9VR0gpOwogCiAgICAgaWYgKCFpc0VuYWJsZWQocmVuZGVy
T2JqZWN0KSkKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIEdU
S19TVEFURV9GTEFHX0lOU0VOU0lUSVZFKTsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0
X3N0YXRlKGNvbnRleHQuZ2V0KCksIEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFKTsKIAotICAg
IGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dCgpLnBsYXRm
b3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29u
dGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRl
eHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJl
Y3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtf
cmVuZGVyX2ZyYW1lKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1D
b250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKIAogICAgIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgewogICAgICAgICBn
aW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
c3R5bGUoY29udGV4dCwgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwgImZvY3VzLXBh
ZGRpbmciLCAmZm9jdXNQYWQsIG51bGxwdHIpOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3R5bGUoY29udGV4dC5nZXQoKSwgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwg
ImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsIG51bGxwdHIpOwogICAgICAgICBJbnRSZWN0IGZv
Y3VzUmVjdChyZWN0KTsKICAgICAgICAgZm9jdXNSZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZv
Y3VzUGFkKTsKLSAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWludEluZm8uY29u
dGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBmb2N1c1JlY3QueCgpLCBmb2N1c1JlY3Qu
eSgpLCBmb2N1c1JlY3Qud2lkdGgoKSwgZm9jdXNSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZ3Rr
X3JlbmRlcl9mb2N1cyhjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpLCBmb2N1c1JlY3QueCgpLCBmb2N1c1JlY3QueSgpLCBmb2N1c1JlY3Qu
d2lkdGgoKSwgZm9jdXNSZWN0LmhlaWdodCgpKTsKICAgICB9CiAKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9yZXN0b3JlKGNvbnRleHQpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTEzMywx
MiArMTA4MSwxMSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYQogICAgIENvbnRyb2xQYXJ0IHBh
cnQgPSByZW5kZXJPYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCk7CiAgICAgQVNTRVJUKHBhcnQg
PT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwogCi0gICAgR3Rr
U3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsK
LSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworICAgIEdSZWZQdHI8R3RrU3R5
bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsK
IAotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZ3RrVGV4dERp
cmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwotICAgIGFwcGx5U2xp
ZGVyU3R5bGVDb250ZXh0Q2xhc3Nlcyhjb250ZXh0LCBwYXJ0KTsKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1NMSURFUik7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LmdldCgpLCBndGtUZXh0RGlyZWN0
aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSk7CisgICAgYXBwbHlTbGlkZXJT
dHlsZUNvbnRleHRDbGFzc2VzKGNvbnRleHQuZ2V0KCksIHBhcnQpOworICAgIGd0a19zdHlsZV9j
b250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LmdldCgpLCBHVEtfU1RZTEVfQ0xBU1NfU0xJREVSKTsK
IAogICAgIGd1aW50IGZsYWdzID0gMDsKICAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3Qp
KQpAQCAtMTE0NywxMyArMTA5NCwxMSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRl
clRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYQogICAgICAg
ICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKICAgICBpZiAoaXNQcmVzc2VkKHJl
bmRlck9iamVjdCkpCiAgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKLSAg
ICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3Rh
dGVGbGFncz4oZmxhZ3MpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4
dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKIAotICAgIGd0a19y
ZW5kZXJfc2xpZGVyKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0
KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
LAorICAgIGd0a19yZW5kZXJfc2xpZGVyKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpLAogICAgICAgICBwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRh
bFBhcnQgPyBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCA6IEdUS19PUklFTlRBVElPTl9WRVJU
SUNBTCk7CiAKLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMTYzLDggKzExMDgsOSBAQCB2b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKICAgICBpZiAocGFydCAhPSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ICYmIHBhcnQg
IT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCiAgICAgICAgIHJldHVybjsKIAorICAgIEdSZWZQ
dHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdUS19UWVBF
X1NDQUxFKTsKICAgICBnaW50IHNsaWRlcldpZHRoLCBzbGlkZXJMZW5ndGg7Ci0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSksICJz
bGlkZXItd2lkdGgiLCAmc2xpZGVyV2lkdGgsICJzbGlkZXItbGVuZ3RoIiwgJnNsaWRlckxlbmd0
aCwgbnVsbHB0cik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQuZ2V0
KCksICJzbGlkZXItd2lkdGgiLCAmc2xpZGVyV2lkdGgsICJzbGlkZXItbGVuZ3RoIiwgJnNsaWRl
ckxlbmd0aCwgbnVsbHB0cik7CiAgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFs
UGFydCkgewogICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBGaXhl
ZCkpOwogICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkp
OwpAQCAtMTE4MCwyMiArMTEyNiwyMSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFByb2dy
ZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYQogICAgIGlm
ICghcmVuZGVyT2JqZWN0LmlzUHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfUFJP
R1JFU1NfQkFSKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworICAgIEdS
ZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdUS19U
WVBFX1BST0dSRVNTX0JBUik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0Lmdl
dCgpKTsKIAotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZ
TEVfQ0xBU1NfVFJPVUdIKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4
dC5nZXQoKSwgR1RLX1NUWUxFX0NMQVNTX1RST1VHSCk7CiAKLSAgICBndGtfcmVuZGVyX2JhY2tn
cm91bmQoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAg
IGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpOworICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LmdldCgpLCBwYWludElu
Zm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgZ3RrX3JlbmRlcl9mcmFtZShjb250
ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworICAgIGd0a19zdHlsZV9jb250ZXh0
X3Jlc3RvcmUoY29udGV4dC5nZXQoKSk7CiAKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNv
bnRleHQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZ
TEVfQ0xBU1NfUFJPR1JFU1NCQVIpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShj
b250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSk7CisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfYWRkX2NsYXNzKGNvbnRleHQuZ2V0KCksIEdUS19TVFlMRV9DTEFTU19QUk9HUkVTU0JB
Uik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQuZ2V0KCksIHN0YXRp
Y19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApKTsKIAogICAgIEd0a0JvcmRlciBwYWRkaW5nOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9wYWRkaW5nKGNvbnRleHQsIGd0a19zdHlsZV9jb250ZXh0
X2dldF9zdGF0ZShjb250ZXh0KSwgJnBhZGRpbmcpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9wYWRkaW5nKGNvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250
ZXh0LmdldCgpKSwgJnBhZGRpbmcpOwogICAgIEludFJlY3QgcHJvZ3Jlc3NSZWN0KAogICAgICAg
ICByZWN0LngoKSArIHBhZGRpbmcubGVmdCwKICAgICAgICAgcmVjdC55KCkgKyBwYWRkaW5nLnRv
cCwKQEAgLTEyMDUsMTQgKzExNTAsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRQcm9n
cmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGEKIAogICAg
IGlmICghcHJvZ3Jlc3NSZWN0LmlzRW1wdHkoKSkgewogI2lmIEdUS19DSEVDS19WRVJTSU9OKDMs
IDEzLCA3KQotICAgICAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoY29udGV4dCwgcGFpbnRJbmZv
LmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcHJvZ3Jlc3NSZWN0LngoKSwgcHJv
Z3Jlc3NSZWN0LnkoKSwgcHJvZ3Jlc3NSZWN0LndpZHRoKCksIHByb2dyZXNzUmVjdC5oZWlnaHQo
KSk7Ci0gICAgICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQo
KS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcHJvZ3Jlc3NSZWN0LngoKSwgcHJvZ3Jlc3NSZWN0
LnkoKSwgcHJvZ3Jlc3NSZWN0LndpZHRoKCksIHByb2dyZXNzUmVjdC5oZWlnaHQoKSk7CisgICAg
ICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4
dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBwcm9ncmVzc1JlY3QueCgpLCBwcm9ncmVzc1Jl
Y3QueSgpLCBwcm9ncmVzc1JlY3Qud2lkdGgoKSwgcHJvZ3Jlc3NSZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgp
LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBwcm9ncmVzc1JlY3QueCgpLCBwcm9ncmVzc1JlY3Qu
eSgpLCBwcm9ncmVzc1JlY3Qud2lkdGgoKSwgcHJvZ3Jlc3NSZWN0LmhlaWdodCgpKTsKICNlbHNl
Ci0gICAgICAgIGd0a19yZW5kZXJfYWN0aXZpdHkoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQo
KS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcHJvZ3Jlc3NSZWN0LngoKSwgcHJvZ3Jlc3NSZWN0
LnkoKSwgcHJvZ3Jlc3NSZWN0LndpZHRoKCksIHByb2dyZXNzUmVjdC5oZWlnaHQoKSk7CisgICAg
ICAgIGd0a19yZW5kZXJfYWN0aXZpdHkoY29udGV4dC5nZXQoKSwgcGFpbnRJbmZvLmNvbnRleHQo
KS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcHJvZ3Jlc3NSZWN0LngoKSwgcHJvZ3Jlc3NSZWN0
LnkoKSwgcHJvZ3Jlc3NSZWN0LndpZHRoKCksIHByb2dyZXNzUmVjdC5oZWlnaHQoKSk7CiAjZW5k
aWYKICAgICB9CiAKLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwogICAg
IHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTIyOSwxMiArMTE3MywxMiBAQCBzdGF0aWMgZ2ludCBz
cGluQnV0dG9uQXJyb3dTaXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCkKIAogdm9pZCBSZW5k
ZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7Ci0gICAgR3RrU3R5bGVDb250ZXh0
KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NQSU5fQlVUVE9OKTsKKyAgICBH
UmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChHVEtf
VFlQRV9TUElOX0JVVFRPTik7CiAKICAgICBHdGtCb3JkZXIgcGFkZGluZzsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfcGFkZGluZyhjb250ZXh0LCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3Rh
dGUoY29udGV4dCksICZwYWRkaW5nKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGlu
Zyhjb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGV4dC5nZXQo
KSksICZwYWRkaW5nKTsKIAotICAgIGludCB3aWR0aCA9IHNwaW5CdXR0b25BcnJvd1NpemUoY29u
dGV4dCkgKyBwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0OworICAgIGludCB3aWR0aCA9IHNw
aW5CdXR0b25BcnJvd1NpemUoY29udGV4dC5nZXQoKSkgKyBwYWRkaW5nLmxlZnQgKyBwYWRkaW5n
LnJpZ2h0OwogICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKICAgICBz
dHlsZS5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CiB9CkBAIC0xMzA3LDI0ICsx
MjUxLDIxIEBAIHN0YXRpYyB2b2lkIHBhaW50U3BpbkFycm93QnV0dG9uKFJlbmRlclRoZW1lKiB0
aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBjCiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBH
dGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU1BJTl9C
VVRUT04pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisgICAgR1JlZlB0
cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoR1RLX1RZUEVf
U1BJTl9CVVRUT04pOwogCiAgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNf
Y2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHls
ZSgpLmRpcmVjdGlvbigpKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihj
b250ZXh0LCBkaXJlY3Rpb24pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24o
Y29udGV4dC5nZXQoKSwgZGlyZWN0aW9uKTsKIAogICAgIGd1aW50IGZsYWdzID0gMDsKICAgICBp
ZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9i
amVjdCkpCiAgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwogICAg
IGVsc2UgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQogICAgICAgICBmbGFncyB8PSBHVEtf
U1RBVEVfRkxBR19GT0NVU0VEOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250
ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X3JlbW92ZV9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfRU5UUlkpOwotCi0g
ICAgcGFpbnRTcGluQXJyb3dCdXR0b24odGhpcywgY29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWlu
dEluZm8sIHJlY3QsIEdUS19BUlJPV19VUCk7Ci0gICAgcGFpbnRTcGluQXJyb3dCdXR0b24odGhp
cywgY29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QsIEdUS19BUlJPV19ET1dO
KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dC5nZXQoKSwgc3RhdGlj
X2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZW1v
dmVfY2xhc3MoY29udGV4dC5nZXQoKSwgR1RLX1NUWUxFX0NMQVNTX0VOVFJZKTsKIAotICAgIGd0
a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisgICAgcGFpbnRTcGluQXJyb3dCdXR0
b24odGhpcywgY29udGV4dC5nZXQoKSwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QsIEdU
S19BUlJPV19VUCk7CisgICAgcGFpbnRTcGluQXJyb3dCdXR0b24odGhpcywgY29udGV4dC5nZXQo
KSwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QsIEdUS19BUlJPV19ET1dOKTsKIAogICAg
IHJldHVybiBmYWxzZTsKIH0KQEAgLTEzNDksMTUgKzEyOTAsMTUgQEAgZW51bSBTdHlsZUNvbG9y
VHlwZSB7IFN0eWxlQ29sb3JCYWNrZ3JvdW5kLCBTdHlsZUNvbG9yRm9yZWdyb3VuZCB9Owogc3Rh
dGljIENvbG9yIHN0eWxlQ29sb3IoR1R5cGUgd2lkZ2V0VHlwZSwgR3RrU3RhdGVGbGFncyBzdGF0
ZSwgU3R5bGVDb2xvclR5cGUgY29sb3JUeXBlKQogewogCi0gICAgR3RrU3R5bGVDb250ZXh0KiBj
b250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KHdpZGdldFR5cGUpOworICAgIEdSZWZQdHI8R3RrU3R5
bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KHdpZGdldFR5cGUpOwogICAg
IC8vIFJlY2VudCBHVEsrIHZlcnNpb25zICg+IDMuMTQpIHJlcXVpcmUgdG8gZXhwbGljaXRseSBz
ZXQgdGhlIHN0YXRlIGJlZm9yZSBnZXR0aW5nIHRoZSBjb2xvci4KLSAgICBndGtfc3R5bGVfY29u
dGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGUpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3Nl
dF9zdGF0ZShjb250ZXh0LmdldCgpLCBzdGF0ZSk7CiAKICAgICBHZGtSR0JBIGdka1JHQkFDb2xv
cjsKICAgICBpZiAoY29sb3JUeXBlID09IFN0eWxlQ29sb3JCYWNrZ3JvdW5kKQotICAgICAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250ZXh0LCBndGtfc3R5bGVf
Y29udGV4dF9nZXRfc3RhdGUoY29udGV4dCksICZnZGtSR0JBQ29sb3IpOworICAgICAgICBndGtf
c3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250ZXh0LmdldCgpLCBndGtfc3R5
bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGV4dC5nZXQoKSksICZnZGtSR0JBQ29sb3IpOwogICAg
IGVsc2UKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGNvbnRleHQsIGd0a19z
dHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250ZXh0KSwgJmdka1JHQkFDb2xvcik7CisgICAgICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihjb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3RhdGUoY29udGV4dC5nZXQoKSksICZnZGtSR0JBQ29sb3IpOwogICAgIHJldHVy
biBnZGtSR0JBQ29sb3I7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>