<?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>211779</bug_id>
          
          <creation_ts>2020-05-12 06:34:42 -0700</creation_ts>
          <short_desc>[GTK4] Add support for drag and drop operations</short_desc>
          <delta_ts>2020-05-20 05:39:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>211723</dependson>
          <blocked>210100</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>bugs-noreply</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1651710</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-12 06:34:42 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651711</commentid>
    <comment_count>1</comment_count>
      <attachid>399123</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-12 06:37:16 -0700</bug_when>
    <thetext>Created attachment 399123
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651990</commentid>
    <comment_count>2</comment_count>
      <attachid>399123</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-05-12 15:55:00 -0700</bug_when>
    <thetext>Comment on attachment 399123
Patch

This was easier to follow after having read all the other patches in the series =)

Patch LGTM, but I see an opportunity to avoid unnecessary copying of data. Please
take a look and consider whether it may be good to apply the suggested change before
landing.

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

&gt; Source/WebCore/platform/graphics/gtk/ImageGtk.cpp:64
&gt; +GdkTexture* BitmapImage::gdkTexture()

Nice refactor :)

&gt; Source/WebKit/UIProcess/API/gtk/DragSourceGtk4.cpp:59
&gt; +        GRefPtr&lt;GBytes&gt; bytes = adoptGRef(g_bytes_new(markup.data(), markup.length()));

This (and the ones below) makes one copy if data into a CString, then another copy
with g_bytes_new(). We could get the inner CStringBuffer from the CString, which
is reference counted, and use that with g_bytes_new_with_free_func(). Rough idea:

  CString markup = m_selectionData-&gt;markup().utf8();
  RefPtr&lt;CStringBuffer&gt; buffer = markup.buffer();
  GRefPtr&lt;GBytes&gt; bytes = adoptGRef(g_bytes_new_with_free_func(buffer-&gt;data(), buffer-&gt;length(),
      [](void* data) { RefPtr&lt;CStringBuffer&gt; buffer = adoptRef(static_cast&lt;CStringBuffer*&gt;(data)); },
      buffer.leakRef()));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654387</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-20 05:39:30 -0700</bug_when>
    <thetext>Committed r261911: &lt;https://trac.webkit.org/changeset/261911&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399123</attachid>
            <date>2020-05-12 06:37:16 -0700</date>
            <delta_ts>2020-05-12 15:55:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkgtk4-dnd.diff</filename>
            <type>text/plain</type>
            <size>25141</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NzNiODA5NTFkYzcuLjQ3OTg5MGI4MGZkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDIwLTA1LTEyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLNF0gQWRkIHN1cHBvcnQgZm9yIGRyYWcgYW5kIGRy
b3Agb3BlcmF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjExNzc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTW92ZSB0aGUgY29kZSB0byBjcmVhdGUgYSBHZGtUZXh0dXJlIGZyb20gYW4gSW1hZ2Ug
ZnJvbSBDdXJzb3JHdGsgdG8gSW1hZ2VHdGsgYW5kIGFkZCBJbWFnZTo6Z2RrVGV4dHVyZSgpLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Omdka1Rl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2RrVGV4dHVyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3RrL0N1cnNvckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDdXN0b21D
dXJzb3IpOgorCiAyMDIwLTA1LTExICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBSZXdvcmsgZHJhZyBhbmQgZHJvcCBoYW5kbGluZyBp
biBwcmVwYXJhdGlvbiBmb3IgR1RLNApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmgKaW5kZXggMWE5YTRiNTRhZWRmLi4wMTUzYzVlMmYzZDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMTMw
LDYgKzEzMCw5IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKEdUSykKICAgICBHZGtQaXhidWYq
IGdldEdka1BpeGJ1ZigpIG92ZXJyaWRlOworI2lmIFVTRShHVEs0KQorICAgIEdka1RleHR1cmUq
IGdka1RleHR1cmUoKSBvdmVycmlkZTsKKyNlbmRpZgogI2VuZGlmCiAKICAgICBXRUJDT1JFX0VY
UE9SVCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqID0g
bnVsbHB0cikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
aAppbmRleCBiNDhmNGUzNWZkYWYuLjc5NGM5YTJkZmY4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oCkBAIC01OCw2ICs1OCw5IEBAIHR5cGVkZWYgc3RydWN0IEhC
SVRNQVBfXyAqSEJJVE1BUDsKIAogI2lmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3RydWN0IF9H
ZGtQaXhidWYgR2RrUGl4YnVmOworI2lmIFVTRShHVEs0KQordHlwZWRlZiBzdHJ1Y3QgX0dka1Rl
eHR1cmUgR2RrVGV4dHVyZTsKKyNlbmRpZgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTE3MCw2ICsxNzMsOSBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShHVEspCiAgICAgdmly
dHVhbCBHZGtQaXhidWYqIGdldEdka1BpeGJ1ZigpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyNpZiBV
U0UoR1RLNCkKKyAgICB2aXJ0dWFsIEdka1RleHR1cmUqIGdka1RleHR1cmUoKSB7IHJldHVybiBu
dWxscHRyOyB9CisjZW5kaWYKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAKaW5kZXggYWZjNDI4Yjc1NDA1Li5jZDUwYTFl
ODZjMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9J
bWFnZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0lt
YWdlR3RrLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNs
dWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KIApAQCAtNTksNCArNjAsMjMgQEAgR2RrUGl4YnVmKiBC
aXRtYXBJbWFnZTo6Z2V0R2RrUGl4YnVmKCkKICAgICByZXR1cm4gc3VyZmFjZSA/IGNhaXJvU3Vy
ZmFjZVRvR2RrUGl4YnVmKHN1cmZhY2UuZ2V0KCkpIDogMDsKIH0KIAorI2lmIFVTRShHVEs0KQor
R2RrVGV4dHVyZSogQml0bWFwSW1hZ2U6Omdka1RleHR1cmUoKQoreworICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAg
IGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9ybWF0KHN1cmZhY2UuZ2V0KCkpID09IENBSVJPX0ZPUk1B
VF9BUkdCMzIpOworICAgIGF1dG8gd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0
aChzdXJmYWNlLmdldCgpKTsKKyAgICBhdXRvIGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChzdXJmYWNlLmdldCgpKTsKKyAgICBhdXRvIHN0cmlkZSA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKTsKKyAgICBhdXRvKiBkYXRhID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKKyAgICBHUmVmUHRyPEdC
eXRlcz4gYnl0ZXMgPSBhZG9wdEdSZWYoZ19ieXRlc19uZXdfd2l0aF9mcmVlX2Z1bmMoZGF0YSwg
aGVpZ2h0ICogc3RyaWRlLCBbXShncG9pbnRlciBkYXRhKSB7CisgICAgICAgIGNhaXJvX3N1cmZh
Y2VfZGVzdHJveShzdGF0aWNfY2FzdDxjYWlyb19zdXJmYWNlX3QqPihkYXRhKSk7CisgICAgfSwg
c3VyZmFjZS5sZWFrUmVmKCkpKTsKKyAgICByZXR1cm4gZ2RrX21lbW9yeV90ZXh0dXJlX25ldyh3
aWR0aCwgaGVpZ2h0LCBHREtfTUVNT1JZX0RFRkFVTFQsIGJ5dGVzLmdldCgpLCBzdHJpZGUpOwor
fQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9D
dXJzb3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAK
aW5kZXggMWJhM2YyNWRmODA0Li41MTBmZmI1YjlkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9DdXJzb3JHdGsuY3BwCkBAIC01OSwyMCArNTksMTkgQEAgc3RhdGljIEdSZWZQdHI8
R2RrQ3Vyc29yPiBjcmVhdGVDdXN0b21DdXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2lu
dCYgaG90U3AKICAgICBpZiAoIXN1cmZhY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgSW50UG9pbnQgZWZmZWN0aXZlSG90U3BvdCA9IGRldGVybWluZUhvdFNwb3QoaW1hZ2UsIGhv
dFNwb3QpOwotCiAjaWYgVVNFKEdUSzQpCi0gICAgQVNTRVJUKGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2Zvcm1hdChzdXJmYWNlLmdldCgpKSA9PSBDQUlST19GT1JNQVRfQVJHQjMyKTsKLSAgICBh
dXRvIHdpZHRoID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZS5nZXQoKSk7
Ci0gICAgYXV0byBoZWlnaHQgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFj
ZS5nZXQoKSk7Ci0gICAgYXV0byBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJp
ZGUoc3VyZmFjZS5nZXQoKSk7Ci0gICAgR1JlZlB0cjxHQnl0ZXM+IGJ5dGVzID0gYWRvcHRHUmVm
KGdfYnl0ZXNfbmV3X3dpdGhfZnJlZV9mdW5jKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
c3VyZmFjZS5nZXQoKSksIGhlaWdodCAqIHN0cmlkZSwKLSAgICAgICAgW10oZ3BvaW50ZXIgZGF0
YSkgewotICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN0YXRpY19jYXN0PGNhaXJv
X3N1cmZhY2VfdCo+KGRhdGEpKTsKLSAgICAgICAgfSwgc3VyZmFjZS5sZWFrUmVmKCkpKTsKLSAg
ICBhdXRvIHRleHR1cmUgPSBhZG9wdEdSZWYoZ2RrX21lbW9yeV90ZXh0dXJlX25ldyh3aWR0aCwg
aGVpZ2h0LCBHREtfTUVNT1JZX0E4UjhHOEI4X1BSRU1VTFRJUExJRUQsIGJ5dGVzLmdldCgpLCBz
dHJpZGUpKTsKKyAgICBhdXRvIHRleHR1cmUgPSBhZG9wdEdSZWYoaW1hZ2UtPmdka1RleHR1cmUo
KSk7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIElu
dFBvaW50IGVmZmVjdGl2ZUhvdFNwb3QgPSBkZXRlcm1pbmVIb3RTcG90KGltYWdlLCBob3RTcG90
KTsKICAgICByZXR1cm4gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3X2Zyb21fdGV4dHVyZSh0ZXh0
dXJlLmdldCgpLCBlZmZlY3RpdmVIb3RTcG90LngoKSwgZWZmZWN0aXZlSG90U3BvdC55KCksIGZh
bGxiYWNrQ3Vyc29yKCkuZ2V0KCkpKTsKICNlbHNlCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlm
ICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRQb2ludCBlZmZl
Y3RpdmVIb3RTcG90ID0gZGV0ZXJtaW5lSG90U3BvdChpbWFnZSwgaG90U3BvdCk7CiAgICAgcmV0
dXJuIGFkb3B0R1JlZihnZGtfY3Vyc29yX25ld19mcm9tX3N1cmZhY2UoZ2RrX2Rpc3BsYXlfZ2V0
X2RlZmF1bHQoKSwgc3VyZmFjZS5nZXQoKSwgZWZmZWN0aXZlSG90U3BvdC54KCksIGVmZmVjdGl2
ZUhvdFNwb3QueSgpKSk7CiAjZW5kaWYgLy8gVVNFKEdUSzQpCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGEwNzQ3
NmMxMjJmZS4uYzc3MmM1MjcxOTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIwLTA1
LTEyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLNF0gQWRkIHN1cHBvcnQgZm9yIGRyYWcgYW5kIGRyb3Agb3BlcmF0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNzc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9EcmFnU291cmNlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvRHJhZ1NvdXJj
ZUd0azQuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmFnU291cmNlOjpiZWdpbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvRHJvcFRhcmdldC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL0Ryb3BUYXJnZXRHdGs0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJvcFRhcmdldDo6
RHJvcFRhcmdldCk6CisgICAgICAgIChXZWJLaXQ6OkRyb3BUYXJnZXQ6On5Ecm9wVGFyZ2V0KToK
KyAgICAgICAgKFdlYktpdDo6RHJvcFRhcmdldDo6YWNjZXB0KToKKyAgICAgICAgKFdlYktpdDo6
RHJvcFJlYWRBc3luY0RhdGE6OkRyb3BSZWFkQXN5bmNEYXRhKToKKyAgICAgICAgKFdlYktpdDo6
RHJvcFRhcmdldDo6bG9hZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpEcm9wVGFyZ2V0OjpkaWRM
b2FkRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkRyb3BUYXJnZXQ6OmVudGVyKToKKyAgICAgICAg
KFdlYktpdDo6RHJvcFRhcmdldDo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6RHJvcFRhcmdl
dDo6ZGlkUGVyZm9ybUFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkRyb3BUYXJnZXQ6OmxlYXZl
KToKKyAgICAgICAgKFdlYktpdDo6RHJvcFRhcmdldDo6ZHJvcCk6CisKIDIwMjAtMDUtMDcgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEs0
XSBBZGQgc3VwcG9ydCBmb3IgY2xpcGJvYXJkIG9wZXJhdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJhZ1NvdXJjZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9EcmFnU291cmNlLmgKaW5kZXggOGM2YTU0ZTk2NzY5Li40ZmI2Nzk1
NGE4MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJhZ1Nv
dXJjZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJhZ1NvdXJjZS5o
CkBAIC0zNCw3ICszNCw5IEBACiAKIHR5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0
OwogCi0jaWYgIVVTRShHVEs0KQorI2lmIFVTRShHVEs0KQordHlwZWRlZiBzdHJ1Y3QgX0dka0Ry
YWcgR2RrRHJhZzsKKyNlbHNlCiB0eXBlZGVmIHN0cnVjdCBfR2RrRHJhZ0NvbnRleHQgR2RrRHJh
Z0NvbnRleHQ7CiAjZW5kaWYKIApAQCAtNTcsNyArNTksOSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgR3RrV2lkZ2V0KiBtX3dlYlZpZXcgeyBudWxscHRyIH07Ci0jaWYgIVVTRShHVEs0KQor
I2lmIFVTRShHVEs0KQorICAgIEdSZWZQdHI8R2RrRHJhZz4gbV9kcmFnOworI2Vsc2UKICAgICBH
UmVmUHRyPEdka0RyYWdDb250ZXh0PiBtX2RyYWc7CiAjZW5kaWYKICAgICBSZWZQdHI8V2ViQ29y
ZTo6U2VsZWN0aW9uRGF0YT4gbV9zZWxlY3Rpb25EYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2d0ay9EcmFnU291cmNlR3RrNC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL0RyYWdTb3VyY2VHdGs0LmNwcAppbmRleCAzMjdhNTBjNTIyOWIu
LmY0OWZiZmUzM2I1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9EcmFnU291cmNlR3RrNC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9EcmFnU291cmNlR3RrNC5jcHAKQEAgLTQ0LDggKzQ0LDk2IEBAIERyYWdTb3VyY2U6On5EcmFn
U291cmNlKCkKIHsKIH0KIAotdm9pZCBEcmFnU291cmNlOjpiZWdpbihSZWY8U2VsZWN0aW9uRGF0
YT4mJiwgRHJhZ09wZXJhdGlvbiwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJikKK3ZvaWQgRHJh
Z1NvdXJjZTo6YmVnaW4oUmVmPFNlbGVjdGlvbkRhdGE+JiYgc2VsZWN0aW9uRGF0YSwgRHJhZ09w
ZXJhdGlvbiBvcGVyYXRpb24sIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+JiYgaW1hZ2UpCiB7Cisg
ICAgaWYgKG1fZHJhZykgeworICAgICAgICBnZGtfZHJhZ19kcm9wX2RvbmUobV9kcmFnLmdldCgp
LCBGQUxTRSk7CisgICAgICAgIG1fZHJhZyA9IG51bGxwdHI7CisgICAgfQorCisgICAgbV9zZWxl
Y3Rpb25EYXRhID0gV1RGTW92ZShzZWxlY3Rpb25EYXRhKTsKKworICAgIFZlY3RvcjxHZGtDb250
ZW50UHJvdmlkZXIqPiBwcm92aWRlcnM7CisgICAgaWYgKG1fc2VsZWN0aW9uRGF0YS0+aGFzTWFy
a3VwKCkpIHsKKyAgICAgICAgQ1N0cmluZyBtYXJrdXAgPSBtX3NlbGVjdGlvbkRhdGEtPm1hcmt1
cCgpLnV0ZjgoKTsKKyAgICAgICAgR1JlZlB0cjxHQnl0ZXM+IGJ5dGVzID0gYWRvcHRHUmVmKGdf
Ynl0ZXNfbmV3KG1hcmt1cC5kYXRhKCksIG1hcmt1cC5sZW5ndGgoKSkpOworICAgICAgICBwcm92
aWRlcnMuYXBwZW5kKGdka19jb250ZW50X3Byb3ZpZGVyX25ld19mb3JfYnl0ZXMoInRleHQvaHRt
bCIsIGJ5dGVzLmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKG1fc2VsZWN0aW9uRGF0YS0+aGFz
VVJJTGlzdCgpKSB7CisgICAgICAgIENTdHJpbmcgdXJpTGlzdCA9IG1fc2VsZWN0aW9uRGF0YS0+
dXJpTGlzdCgpLnV0ZjgoKTsKKyAgICAgICAgR1JlZlB0cjxHQnl0ZXM+IGJ5dGVzID0gYWRvcHRH
UmVmKGdfYnl0ZXNfbmV3KHVyaUxpc3QuZGF0YSgpLCB1cmlMaXN0Lmxlbmd0aCgpKSk7CisgICAg
ICAgIHByb3ZpZGVycy5hcHBlbmQoZ2RrX2NvbnRlbnRfcHJvdmlkZXJfbmV3X2Zvcl9ieXRlcygi
dGV4dC91cmktbGlzdCIsIGJ5dGVzLmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKG1fc2VsZWN0
aW9uRGF0YS0+aGFzVVJMKCkpIHsKKyAgICAgICAgQ1N0cmluZyB1cmxTdHJpbmcgPSBtX3NlbGVj
dGlvbkRhdGEtPnVybCgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICAgICAgZ2NoYXIqIHVybCA9IGdf
c3RyZHVwX3ByaW50ZigiJXNcbiVzIiwgdXJsU3RyaW5nLmRhdGEoKSwgbV9zZWxlY3Rpb25EYXRh
LT5oYXNUZXh0KCkgPyBtX3NlbGVjdGlvbkRhdGEtPnRleHQoKS51dGY4KCkuZGF0YSgpIDogdXJs
U3RyaW5nLmRhdGEoKSk7CisgICAgICAgIEdSZWZQdHI8R0J5dGVzPiBieXRlcyA9IGFkb3B0R1Jl
ZihnX2J5dGVzX25ld190YWtlKHVybCwgc3RybGVuKHVybCkpKTsKKyAgICAgICAgcHJvdmlkZXJz
LmFwcGVuZChnZGtfY29udGVudF9wcm92aWRlcl9uZXdfZm9yX2J5dGVzKCJfTkVUU0NBUEVfVVJM
IiwgYnl0ZXMuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhLT5oYXNJ
bWFnZSgpKSB7CisgICAgICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYo
bV9zZWxlY3Rpb25EYXRhLT5pbWFnZSgpLT5nZXRHZGtQaXhidWYoKSk7CisgICAgICAgIHByb3Zp
ZGVycy5hcHBlbmQoZ2RrX2NvbnRlbnRfcHJvdmlkZXJfbmV3X3R5cGVkKEdES19UWVBFX1BJWEJV
RiwgcGl4YnVmLmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKG1fc2VsZWN0aW9uRGF0YS0+aGFz
VGV4dCgpKQorICAgICAgICBwcm92aWRlcnMuYXBwZW5kKGdka19jb250ZW50X3Byb3ZpZGVyX25l
d190eXBlZChHX1RZUEVfU1RSSU5HLCBtX3NlbGVjdGlvbkRhdGEtPnRleHQoKS51dGY4KCkuZGF0
YSgpKSk7CisKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhLT5jYW5TbWFydFJlcGxhY2UoKSkgewor
ICAgICAgICBHUmVmUHRyPEdCeXRlcz4gYnl0ZXMgPSBhZG9wdEdSZWYoZ19ieXRlc19uZXcobnVs
bHB0ciwgMCkpOworICAgICAgICBwcm92aWRlcnMuYXBwZW5kKGdka19jb250ZW50X3Byb3ZpZGVy
X25ld19mb3JfYnl0ZXMoImFwcGxpY2F0aW9uL3ZuZC53ZWJraXRndGsuc21hcnRwYXN0ZSIsIGJ5
dGVzLmdldCgpKSk7CisgICAgfQorCisgICAgYXV0byogc3VyZmFjZSA9IGd0a19uYXRpdmVfZ2V0
X3N1cmZhY2UoZ3RrX3dpZGdldF9nZXRfbmF0aXZlKG1fd2ViVmlldykpOworICAgIGF1dG8qIGRl
dmljZSA9IGdka19zZWF0X2dldF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NlYXQo
Z3RrX3dpZGdldF9nZXRfZGlzcGxheShtX3dlYlZpZXcpKSk7CisgICAgR1JlZlB0cjxHZGtDb250
ZW50UHJvdmlkZXI+IHByb3ZpZGVyID0gYWRvcHRHUmVmKGdka19jb250ZW50X3Byb3ZpZGVyX25l
d191bmlvbihwcm92aWRlcnMuZGF0YSgpLCBwcm92aWRlcnMuc2l6ZSgpKSk7CisgICAgbV9kcmFn
ID0gYWRvcHRHUmVmKGdka19kcmFnX2JlZ2luKHN1cmZhY2UsIGRldmljZSwgcHJvdmlkZXIuZ2V0
KCksIGRyYWdPcGVyYXRpb25Ub0dka0RyYWdBY3Rpb25zKG9wZXJhdGlvbiksIDAsIDApKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fZHJhZy5nZXQoKSwgImRuZC1maW5pc2hlZCIsIEdfQ0FMTEJB
Q0soK1tdKEdka0RyYWcqIGd0a0RyYWcsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1
dG8mIGRyYWcgPSAqc3RhdGljX2Nhc3Q8RHJhZ1NvdXJjZSo+KHVzZXJEYXRhKTsKKyAgICAgICAg
aWYgKGRyYWcubV9kcmFnLmdldCgpICE9IGd0a0RyYWcpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgZHJhZy5tX3NlbGVjdGlvbkRhdGEgPSBudWxscHRyOworICAgICAgICBkcmFnLm1f
ZHJhZyA9IG51bGxwdHI7CisKKyAgICAgICAgR2RrRGV2aWNlKiBkZXZpY2UgPSBnZGtfZHJhZ19n
ZXRfZGV2aWNlKGd0a0RyYWcpOworICAgICAgICBkb3VibGUgeCA9IDA7CisgICAgICAgIGRvdWJs
ZSB5ID0gMDsKKyAgICAgICAgZ2RrX2RldmljZV9nZXRfc3VyZmFjZV9hdF9wb3NpdGlvbihkZXZp
Y2UsICZ4LCAmeSk7CisKKyAgICAgICAgYXV0byogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0
UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShkcmFnLm1fd2ViVmlldykpOworICAgICAgICBBU1NF
UlQocGFnZSk7CisKKyAgICAgICAgSW50UG9pbnQgcG9pbnQoeCwgeSk7CisgICAgICAgIHBhZ2Ut
PmRyYWdFbmRlZChwb2ludCwgcG9pbnQsIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2Rr
X2RyYWdfZ2V0X3NlbGVjdGVkX2FjdGlvbihndGtEcmFnKSkpOworICAgIH0pLCB0aGlzKTsKKwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kcmFnLmdldCgpLCAiY2FuY2VsIiwgR19DQUxMQkFDSygr
W10oR2RrRHJhZyogZ3RrRHJhZywgR2RrRHJhZ0NhbmNlbFJlYXNvbiwgZ3BvaW50ZXIgdXNlckRh
dGEpIHsKKyAgICAgICAgYXV0byYgZHJhZyA9ICpzdGF0aWNfY2FzdDxEcmFnU291cmNlKj4odXNl
ckRhdGEpOworICAgICAgICBpZiAoZHJhZy5tX2RyYWcuZ2V0KCkgIT0gZ3RrRHJhZykKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBkcmFnLm1fc2VsZWN0aW9uRGF0YSA9IG51bGxwdHI7
CisgICAgICAgIGRyYWcubV9kcmFnID0gbnVsbHB0cjsKKyAgICB9KSwgdGhpcyk7CisKKyAgICBh
dXRvKiBkcmFnSWNvbiA9IGd0a19kcmFnX2ljb25fZ2V0X2Zvcl9kcmFnKG1fZHJhZy5nZXQoKSk7
CisgICAgUmVmUHRyPEltYWdlPiBpY29uSW1hZ2UgPSBpbWFnZSA/IGltYWdlLT5jcmVhdGVJbWFn
ZSgpIDogbnVsbHB0cjsKKyAgICBpZiAoaWNvbkltYWdlKSB7CisgICAgICAgIGlmIChHUmVmUHRy
PEdka1RleHR1cmU+IHRleHR1cmUgPSBhZG9wdEdSZWYoaWNvbkltYWdlLT5nZGtUZXh0dXJlKCkp
KSB7CisgICAgICAgICAgICBnZGtfZHJhZ19zZXRfaG90c3BvdChtX2RyYWcuZ2V0KCksIC1nZGtf
dGV4dHVyZV9nZXRfd2lkdGgodGV4dHVyZS5nZXQoKSkgLyAyLCAtZ2RrX3RleHR1cmVfZ2V0X2hl
aWdodCh0ZXh0dXJlLmdldCgpKSAvIDIpOworICAgICAgICAgICAgYXV0byogcGljdHVyZSA9IGd0
a19waWN0dXJlX25ld19mb3JfcGFpbnRhYmxlKEdES19QQUlOVEFCTEUodGV4dHVyZS5nZXQoKSkp
OworICAgICAgICAgICAgZ3RrX2RyYWdfaWNvbl9zZXRfY2hpbGQoR1RLX0RSQUdfSUNPTihkcmFn
SWNvbiksIHBpY3R1cmUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgZ2RrX2RyYWdfc2V0X2hvdHNwb3QobV9kcmFnLmdldCgpLCAtMiwgLTIpOworICAgIGF1
dG8qIGNoaWxkID0gZ3RrX2ltYWdlX25ld19mcm9tX2ljb25fbmFtZSgidGV4dC14LWdlbmVyaWMi
KTsKKyAgICBndGtfaW1hZ2Vfc2V0X2ljb25fc2l6ZShHVEtfSU1BR0UoY2hpbGQpLCBHVEtfSUNP
Tl9TSVpFX0xBUkdFKTsKKyAgICBndGtfZHJhZ19pY29uX3NldF9jaGlsZChHVEtfRFJBR19JQ09O
KGRyYWdJY29uKSwgY2hpbGQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJvcFRhcmdldC5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9Ecm9wVGFyZ2V0LmgKaW5kZXggODlhMGQyODE5ZGY5
Li4zNzNmNjYwYWVjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
dGsvRHJvcFRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJv
cFRhcmdldC5oCkBAIC0zNiw3ICszNiw5IEBACiAKIHR5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQg
R3RrV2lkZ2V0OwogCi0jaWYgIVVTRShHVEs0KQorI2lmIFVTRShHVEs0KQordHlwZWRlZiBzdHJ1
Y3QgX0dka0Ryb3AgR2RrRHJvcDsKKyNlbHNlCiB0eXBlZGVmIHN0cnVjdCBfR2RrRHJhZ0NvbnRl
eHQgR2RrRHJhZ0NvbnRleHQ7CiB0eXBlZGVmIHN0cnVjdCBfR3RrU2VsZWN0aW9uRGF0YSBHdGtT
ZWxlY3Rpb25EYXRhOwogI2VuZGlmCkBAIC02NCwyMCArNjYsMjcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGxlYXZlKCk7CiAgICAgdm9pZCBkcm9wKFdlYkNvcmU6OkludFBvaW50JiYsIHVuc2lnbmVk
ID0gMCk7CiAKLSNpZiAhVVNFKEdUSzQpCisjaWYgVVNFKEdUSzQpCisgICAgdm9pZCBsb2FkRGF0
YShjb25zdCBjaGFyKiBtaW1lVHlwZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChHUmVmUHRyPEdC
eXRlcz4mJik+JiYpOworICAgIHZvaWQgZGlkTG9hZERhdGEoKTsKKyNlbHNlCiAgICAgdm9pZCBk
YXRhUmVjZWl2ZWQoV2ViQ29yZTo6SW50UG9pbnQmJiwgR3RrU2VsZWN0aW9uRGF0YSosIHVuc2ln
bmVkLCB1bnNpZ25lZCk7CiAgICAgdm9pZCBsZWF2ZVRpbWVyRmlyZWQoKTsKICNlbmRpZgogCiAg
ICAgR3RrV2lkZ2V0KiBtX3dlYlZpZXcgeyBudWxscHRyIH07Ci0jaWYgIVVTRShHVEs0KQorI2lm
IFVTRShHVEs0KQorICAgIEdSZWZQdHI8R2RrRHJvcD4gbV9kcm9wOworI2Vsc2UKICAgICBHUmVm
UHRyPEdka0RyYWdDb250ZXh0PiBtX2Ryb3A7CiAjZW5kaWYKICAgICBPcHRpb25hbDxXZWJDb3Jl
OjpJbnRQb2ludD4gbV9wb3NpdGlvbjsKICAgICB1bnNpZ25lZCBtX2RhdGFSZXF1ZXN0Q291bnQg
eyAwIH07CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+IG1fc2VsZWN0aW9uRGF0
YTsKICAgICBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uIG1fb3BlcmF0aW9uIHsgV2ViQ29yZTo6RHJh
Z09wZXJhdGlvbk5vbmUgfTsKLSNpZiAhVVNFKEdUSzQpCisjaWYgVVNFKEdUSzQpCisgICAgR1Jl
ZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7CisjZWxzZQogICAgIFJ1bkxvb3A6OlRp
bWVyPERyb3BUYXJnZXQ+IG1fbGVhdmVUaW1lcjsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJvcFRhcmdldEd0azQuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9Ecm9wVGFyZ2V0R3RrNC5jcHAKaW5kZXggNzE0ZTYz
ZjFmNDljLi5iZDc0M2EyMDY5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9ndGsvRHJvcFRhcmdldEd0azQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9ndGsvRHJvcFRhcmdldEd0azQuY3BwCkBAIC0zNyw0NSArMzcsMjY3IEBACiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitlbnVtIERyb3BUYXJnZXRU
eXBlIHsgTWFya3VwLCBUZXh0LCBVUklMaXN0LCBOZXRzY2FwZVVSTCwgU21hcnRQYXN0ZSB9Owor
CiBEcm9wVGFyZ2V0OjpEcm9wVGFyZ2V0KEd0a1dpZGdldCogd2ViVmlldykKICAgICA6IG1fd2Vi
Vmlldyh3ZWJWaWV3KQogeworICAgIGF1dG8qIGZvcm1hdHNCdWlsZGVyID0gZ2RrX2NvbnRlbnRf
Zm9ybWF0c19idWlsZGVyX25ldygpOworICAgIGdka19jb250ZW50X2Zvcm1hdHNfYnVpbGRlcl9h
ZGRfZ3R5cGUoZm9ybWF0c0J1aWxkZXIsIEdfVFlQRV9TVFJJTkcpOworICAgIGdka19jb250ZW50
X2Zvcm1hdHNfYnVpbGRlcl9hZGRfbWltZV90eXBlKGZvcm1hdHNCdWlsZGVyLCAidGV4dC9odG1s
Iik7CisgICAgZ2RrX2NvbnRlbnRfZm9ybWF0c19idWlsZGVyX2FkZF9taW1lX3R5cGUoZm9ybWF0
c0J1aWxkZXIsICJ0ZXh0L3VyaS1saXN0Iik7CisgICAgZ2RrX2NvbnRlbnRfZm9ybWF0c19idWls
ZGVyX2FkZF9taW1lX3R5cGUoZm9ybWF0c0J1aWxkZXIsICJfTkVUU0NBUEVfVVJMIik7CisgICAg
Z2RrX2NvbnRlbnRfZm9ybWF0c19idWlsZGVyX2FkZF9taW1lX3R5cGUoZm9ybWF0c0J1aWxkZXIs
ICJhcHBsaWNhdGlvbi92bmQud2Via2l0Z3RrLnNtYXJ0cGFzdGUiKTsKKyAgICBhdXRvKiB0YXJn
ZXQgPSBndGtfZHJvcF90YXJnZXRfYXN5bmNfbmV3KGdka19jb250ZW50X2Zvcm1hdHNfYnVpbGRl
cl9mcmVlX3RvX2Zvcm1hdHMoZm9ybWF0c0J1aWxkZXIpLAorICAgICAgICBzdGF0aWNfY2FzdDxH
ZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0NPUFkgfCBHREtfQUNUSU9OX01PVkUgfCBHREtfQUNU
SU9OX0xJTkspKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRhcmdldCwgImFjY2VwdCIsIEdfQ0FM
TEJBQ0soK1tdKEd0a0Ryb3BUYXJnZXRBc3luYyosIEdka0Ryb3AqIGdka0Ryb3AsIGdwb2ludGVy
IHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgIGF1dG8mIGRyb3AgPSAqc3RhdGljX2Nh
c3Q8RHJvcFRhcmdldCo+KHVzZXJEYXRhKTsKKyAgICAgICAgZHJvcC5tX2Ryb3AgPSBnZGtEcm9w
OworICAgICAgICBkcm9wLmFjY2VwdCgpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9KSwg
dGhpcyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRhcmdldCwgImRyYWctZW50ZXIiLCBHX0NB
TExCQUNLKCtbXShHdGtEcm9wVGFyZ2V0QXN5bmMqLCBHZGtEcm9wKiBnZGtEcm9wLCBkb3VibGUg
eCwgZG91YmxlIHksIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHZGtEcmFnQWN0aW9uIHsKKyAgICAg
ICAgYXV0byYgZHJvcCA9ICpzdGF0aWNfY2FzdDxEcm9wVGFyZ2V0Kj4odXNlckRhdGEpOworICAg
ICAgICBpZiAoZHJvcC5tX2Ryb3AgIT0gZ2RrRHJvcCkKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKKworICAgICAgICBkcm9wLmVudGVyKHsgY2xhbXBU
b0ludGVnZXIoeCksIGNsYW1wVG9JbnRlZ2VyKHkpIH0pOworICAgICAgICByZXR1cm4gZHJhZ09w
ZXJhdGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihkcm9wLm1fb3BlcmF0aW9uKTsKKyAgICB9KSwg
dGhpcyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRhcmdldCwgImRyYWctbW90aW9uIiwgR19D
QUxMQkFDSygrW10oR3RrRHJvcFRhcmdldEFzeW5jKiwgR2RrRHJvcCogZ2RrRHJvcCwgZG91Ymxl
IHgsIGRvdWJsZSB5LCBncG9pbnRlciB1c2VyRGF0YSkgLT4gR2RrRHJhZ0FjdGlvbiB7CisgICAg
ICAgIGF1dG8mIGRyb3AgPSAqc3RhdGljX2Nhc3Q8RHJvcFRhcmdldCo+KHVzZXJEYXRhKTsKKyAg
ICAgICAgaWYgKGRyb3AubV9kcm9wICE9IGdka0Ryb3ApCisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oMCk7CisKKyAgICAgICAgZHJvcC51cGRhdGUoeyBjbGFt
cFRvSW50ZWdlcih4KSwgY2xhbXBUb0ludGVnZXIoeSkgfSk7CisgICAgICAgIHJldHVybiBkcmFn
T3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKGRyb3AubV9vcGVyYXRpb24pOworICAgIH0p
LCB0aGlzKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGFyZ2V0LCAiZHJhZy1sZWF2ZSIsIEdf
Q0FMTEJBQ0soK1tdKEd0a0Ryb3BUYXJnZXRBc3luYyosIEdka0Ryb3AqIGdka0Ryb3AsIGdwb2lu
dGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8mIGRyb3AgPSAqc3RhdGljX2Nhc3Q8RHJvcFRh
cmdldCo+KHVzZXJEYXRhKTsKKyAgICAgICAgaWYgKGRyb3AubV9kcm9wICE9IGdka0Ryb3ApCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZHJvcC5sZWF2ZSgpOworICAgIH0pLCB0aGlz
KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGFyZ2V0LCAiZHJvcCIsIEdfQ0FMTEJBQ0soK1td
KEd0a0Ryb3BUYXJnZXRBc3luYyosIEdka0Ryb3AqIGdka0Ryb3AsIGRvdWJsZSB4LCBkb3VibGUg
eSwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsKKyAgICAgICAgYXV0byYgZHJvcCA9
ICpzdGF0aWNfY2FzdDxEcm9wVGFyZ2V0Kj4odXNlckRhdGEpOworICAgICAgICBpZiAoZHJvcC5t
X2Ryb3AgIT0gZ2RrRHJvcCkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICBk
cm9wLmRyb3AoeyBjbGFtcFRvSW50ZWdlcih4KSwgY2xhbXBUb0ludGVnZXIoeSkgfSk7CisgICAg
ICAgIHJldHVybiBUUlVFOworICAgIH0pLCB0aGlzKTsKKworICAgIGd0a193aWRnZXRfYWRkX2Nv
bnRyb2xsZXIobV93ZWJWaWV3LCBHVEtfRVZFTlRfQ09OVFJPTExFUih0YXJnZXQpKTsKIH0KIAog
RHJvcFRhcmdldDo6fkRyb3BUYXJnZXQoKQogeworICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1f
Y2FuY2VsbGFibGUuZ2V0KCkpOwogfQogCiB2b2lkIERyb3BUYXJnZXQ6OmFjY2VwdCh1bnNpZ25l
ZCkKIHsKKyAgICBtX3Bvc2l0aW9uID0gV1RGOjpudWxsb3B0OworICAgIG1fc2VsZWN0aW9uRGF0
YSA9IFNlbGVjdGlvbkRhdGE6OmNyZWF0ZSgpOworICAgIG1fZGF0YVJlcXVlc3RDb3VudCA9IDA7
CisgICAgbV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKwor
ICAgIC8vIFdlYkNvcmUgbmVlZHMgdGhlIHNlbGVjdGlvbiBkYXRhIHRvIGRlY2lkZSwgc28gd2Ug
bmVlZCB0byBwcmVsb2FkIHRoZQorICAgIC8vIGRhdGEgb2YgdGFyZ2V0cyB3ZSBzdXBwb3J0LiBP
bmNlIGFsbCBkYXRhIHJlcXVlc3RzIGFyZSBkb25lIHdlIHN0YXJ0CisgICAgLy8gbm90aWZ5aW5n
IHRoZSB3ZWIgcHJvY2VzcyBhYm91dCB0aGUgRE5EIGV2ZW50cy4KKyAgICBhdXRvKiBmb3JtYXRz
ID0gZ2RrX2Ryb3BfZ2V0X2Zvcm1hdHMobV9kcm9wLmdldCgpKTsKKyAgICBpZiAoZ2RrX2NvbnRl
bnRfZm9ybWF0c19jb250YWluX2d0eXBlKGZvcm1hdHMsIEdfVFlQRV9TVFJJTkcpKSB7CisgICAg
ICAgIG1fZGF0YVJlcXVlc3RDb3VudCsrOworICAgICAgICBnZGtfZHJvcF9yZWFkX3ZhbHVlX2Fz
eW5jKG1fZHJvcC5nZXQoKSwgR19UWVBFX1NUUklORywgR19QUklPUklUWV9ERUZBVUxULCBtX2Nh
bmNlbGxhYmxlLmdldCgpLCBbXShHT2JqZWN0KiBnZGtEcm9wLCBHQXN5bmNSZXN1bHQqIHJlc3Vs
dCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9y
PiBlcnJvcjsKKyAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnZGtfZHJvcF9yZWFk
X3ZhbHVlX2ZpbmlzaChHREtfRFJPUChnZGtEcm9wKSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkp
OworICAgICAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJP
UiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgYXV0byYgZHJvcCA9ICpzdGF0aWNfY2FzdDxEcm9wVGFyZ2V0Kj4odXNlckRhdGEp
OworICAgICAgICAgICAgaWYgKHZhbHVlICYmIEdfVkFMVUVfSE9MRFModmFsdWUsIEdfVFlQRV9T
VFJJTkcpKQorICAgICAgICAgICAgICAgIGRyb3AubV9zZWxlY3Rpb25EYXRhLT5zZXRUZXh0KFN0
cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOworICAgICAgICAgICAg
ZHJvcC5kaWRMb2FkRGF0YSgpOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgY29uc3QgY2hhciogY29uc3Qgc3VwcG9ydGVkTWltZVR5cGVzW10gPSB7CisgICAgICAgICJ0
ZXh0L2h0bWwiLAorICAgICAgICAiX05FVFNDQVBFX1VSTCIsCisgICAgICAgICJ0ZXh0L3VyaS1s
aXN0IiwKKyAgICAgICAgImFwcGxpY2F0aW9uL3ZuZC53ZWJraXRndGsuc21hcnRwYXN0ZSIKKyAg
ICB9OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhzdXBwb3J0
ZWRNaW1lVHlwZXMpOyArK2kpIHsKKyAgICAgICAgaWYgKCFnZGtfY29udGVudF9mb3JtYXRzX2Nv
bnRhaW5fbWltZV90eXBlKGZvcm1hdHMsIHN1cHBvcnRlZE1pbWVUeXBlc1tpXSkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBtX2RhdGFSZXF1ZXN0Q291bnQrKzsKKyAgICAgICAg
bG9hZERhdGEoc3VwcG9ydGVkTWltZVR5cGVzW2ldLCBbdGhpcywgbWltZVR5cGUgPSBTdHJpbmc6
OmZyb21VVEY4KHN1cHBvcnRlZE1pbWVUeXBlc1tpXSksIGNhbmNlbGxhYmxlID0gbV9jYW5jZWxs
YWJsZV0oR1JlZlB0cjxHQnl0ZXM+JiYgZGF0YSkgeworICAgICAgICAgICAgaWYgKGdfY2FuY2Vs
bGFibGVfaXNfY2FuY2VsbGVkKGNhbmNlbGxhYmxlLmdldCgpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIGlmICghZGF0YSkgeworICAgICAgICAgICAgICAgIGRpZExv
YWREYXRhKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAobWltZVR5cGUgPT0gInRleHQvaHRtbCJfcykgeworICAgICAgICAgICAgICAg
IGdzaXplIGxlbmd0aDsKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvKiBtYXJrdXBEYXRhID0g
Z19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCAmbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBp
ZiAobGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIGRhdGEgc3RhcnRzIHdpdGgg
VVRGLTE2IEJPTSBhc3N1bWUgaXQncyBVVEYtMTYsIG90aGVyd2lzZSBhc3N1bWUgVVRGLTguCisg
ICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPj0gMiAmJiByZWludGVycHJldF9jYXN0PGNv
bnN0IFVDaGFyKj4obWFya3VwRGF0YSlbMF0gPT0gMHhGRUZGKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRNYXJrdXAoU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUNoYXIqPihtYXJrdXBEYXRhKSArIDEsIChsZW5ndGggLyAyKSAtIDEpKTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25E
YXRhLT5zZXRNYXJrdXAoU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihtYXJrdXBEYXRhKSwgbGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIGlmIChtaW1lVHlwZSA9PSAiX05FVFNDQVBFX1VSTCIpIHsKKyAgICAgICAgICAg
ICAgICBnc2l6ZSBsZW5ndGg7CisgICAgICAgICAgICAgICAgY29uc3QgYXV0byogdXJsRGF0YSA9
IGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgJmxlbmd0aCk7CisgICAgICAgICAgICAgICAg
aWYgKGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiB0b2tlbnMg
PSBTdHJpbmc6OmZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHVybERhdGEp
LCBsZW5ndGgpLnNwbGl0KCdcbicpOworICAgICAgICAgICAgICAgICAgICBVUkwgdXJsKHsgfSwg
dG9rZW5zWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldFVSTCh1cmwsIHRva2Vucy5z
aXplKCkgPiAxID8gdG9rZW5zWzFdIDogU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAobWltZVR5cGUgPT0gInRleHQvdXJpLWxpc3QiKSB7CisgICAg
ICAgICAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8qIHVy
aUxpc3REYXRhID0gZ19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCAmbGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtX3NlbGVjdGlvbkRh
dGEtPnNldFVSSUxpc3QoU3RyaW5nOjpmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPih1cmlMaXN0RGF0YSksIGxlbmd0aCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtaW1l
VHlwZSA9PSAiYXBwbGljYXRpb24vdm5kLndlYmtpdGd0ay5zbWFydHBhc3RlIikKKyAgICAgICAg
ICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldENhblNtYXJ0UmVwbGFjZSh0cnVlKTsKKworICAg
ICAgICAgICAgZGlkTG9hZERhdGEoKTsKKyAgICAgICAgfSk7CisgICAgfQogfQogCi12b2lkIERy
b3BUYXJnZXQ6OmxvYWREYXRhKGNvbnN0IGNoYXIqLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEdS
ZWZQdHI8R0J5dGVzPiYmKT4mJikKK3N0cnVjdCBEcm9wUmVhZEFzeW5jRGF0YSB7CisgICAgV1RG
X01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgRHJvcFJlYWRBc3luY0RhdGEoR0Nh
bmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChHUmVmUHRyPEdC
eXRlcz4mJik+JiYgaGFuZGxlcikKKyAgICAgICAgOiBjYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkK
KyAgICAgICAgLCBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZXIpKQorICAgIHsKKyAg
ICB9CisKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGU7CisgICAgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChHUmVmUHRyPEdCeXRlcz4mJik+IGNvbXBsZXRpb25IYW5kbGVyOwor
fTsKKwordm9pZCBEcm9wVGFyZ2V0Ojpsb2FkRGF0YShjb25zdCBjaGFyKiBtaW1lVHlwZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChHUmVmUHRyPEdCeXRlcz4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CisgICAgY29uc3QgY2hhciogbWltZVR5cGVzW10gPSB7IG1pbWVUeXBlLCBudWxscHRy
IH07CisgICAgZ2RrX2Ryb3BfcmVhZF9hc3luYyhtX2Ryb3AuZ2V0KCksIG1pbWVUeXBlcywgR19Q
UklPUklUWV9ERUZBVUxULCBtX2NhbmNlbGxhYmxlLmdldCgpLCBbXShHT2JqZWN0KiBnZGtEcm9w
LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPERyb3BSZWFkQXN5bmNEYXRhPiBkYXRhKHN0YXRpY19jYXN0PERyb3BSZWFk
QXN5bmNEYXRhKj4odXNlckRhdGEpKTsKKyAgICAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlu
cHV0U3RyZWFtID0gYWRvcHRHUmVmKGdka19kcm9wX3JlYWRfZmluaXNoKEdES19EUk9QKGdka0Ry
b3ApLCByZXN1bHQsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFpbnB1dFN0cmVh
bSkgeworICAgICAgICAgICAgZGF0YS0+Y29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvKiBjYW5jZWxsYWJsZSA9
IGRhdGEtPmNhbmNlbGxhYmxlLmdldCgpOworICAgICAgICBHUmVmUHRyPEdPdXRwdXRTdHJlYW0+
IG91dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX21lbW9yeV9vdXRwdXRfc3RyZWFtX25ld19yZXNp
emFibGUoKSk7CisgICAgICAgIGdfb3V0cHV0X3N0cmVhbV9zcGxpY2VfYXN5bmMob3V0cHV0U3Ry
ZWFtLmdldCgpLCBpbnB1dFN0cmVhbS5nZXQoKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdP
dXRwdXRTdHJlYW1TcGxpY2VGbGFncz4oR19PVVRQVVRfU1RSRUFNX1NQTElDRV9DTE9TRV9TT1VS
Q0UgfCBHX09VVFBVVF9TVFJFQU1fU1BMSUNFX0NMT1NFX1RBUkdFVCksCisgICAgICAgICAgICBH
X1BSSU9SSVRZX0RFRkFVTFQsIGNhbmNlbGxhYmxlLCBbXShHT2JqZWN0KiBzdHJlYW0sIEdBc3lu
Y1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxEcm9wUmVhZEFzeW5jRGF0YT4gZGF0YShzdGF0aWNfY2FzdDxEcm9wUmVh
ZEFzeW5jRGF0YSo+KHVzZXJEYXRhKSk7CisgICAgICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxH
RXJyb3I+IGVycm9yOworICAgICAgICAgICAgICAgIGdzc2l6ZSB3cml0dGVuQnl0ZXMgPSBnX291
dHB1dF9zdHJlYW1fc3BsaWNlX2ZpbmlzaChHX09VVFBVVF9TVFJFQU0oc3RyZWFtKSwgcmVzdWx0
LCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICAgICAgICAgIGlmICh3cml0dGVuQnl0ZXMgPD0g
MCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhLT5jb21wbGV0aW9uSGFuZGxlcihudWxscHRy
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBHUmVmUHRyPEdCeXRlcz4gYnl0ZXMgPSBhZG9wdEdSZWYoZ19tZW1vcnlfb3V0
cHV0X3N0cmVhbV9zdGVhbF9hc19ieXRlcyhHX01FTU9SWV9PVVRQVVRfU1RSRUFNKHN0cmVhbSkp
KTsKKyAgICAgICAgICAgICAgICBkYXRhLT5jb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGJ5dGVz
KSk7CisgICAgICAgICAgICB9LCBkYXRhLnJlbGVhc2UoKSk7CisgICAgfSwgbmV3IERyb3BSZWFk
QXN5bmNEYXRhKG1fY2FuY2VsbGFibGUuZ2V0KCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KSk7CiB9CiAKIHZvaWQgRHJvcFRhcmdldDo6ZGlkTG9hZERhdGEoKQogeworICAgIGlmICgtLW1f
ZGF0YVJlcXVlc3RDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jYW5jZWxsYWJsZSA9
IG51bGxwdHI7CisKKyAgICBpZiAoIW1fcG9zaXRpb24pIHsKKyAgICAgICAgLy8gRW50ZXIgaGFz
bid0IGJlZW4gZW1pdHRlZCB5ZXQsIHNvIGp1c3Qgd2FpdCBmb3IgaXQuCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBDYWxsIGVudGVyIGFnYWluLgorICAgIGVudGVyKEludFBvaW50
KG1fcG9zaXRpb24udmFsdWUoKSkpOwogfQogCi12b2lkIERyb3BUYXJnZXQ6OmVudGVyKEludFBv
aW50JiYsIHVuc2lnbmVkKQordm9pZCBEcm9wVGFyZ2V0OjplbnRlcihJbnRQb2ludCYmIHBvc2l0
aW9uLCB1bnNpZ25lZCkKIHsKKyAgICBtX3Bvc2l0aW9uID0gV1RGTW92ZShwb3NpdGlvbik7Cisg
ICAgaWYgKG1fY2FuY2VsbGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHBhZ2Ug
PSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3
KSk7CisgICAgQVNTRVJUKHBhZ2UpOworICAgIHBhZ2UtPnJlc2V0Q3VycmVudERyYWdJbmZvcm1h
dGlvbigpOworCisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEobV9zZWxlY3Rpb25EYXRhLmdldCgpLCAq
bV9wb3NpdGlvbiwgKm1fcG9zaXRpb24sIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2Rr
X2Ryb3BfZ2V0X2FjdGlvbnMobV9kcm9wLmdldCgpKSkpOworICAgIHBhZ2UtPmRyYWdFbnRlcmVk
KGRyYWdEYXRhKTsKIH0KIAotdm9pZCBEcm9wVGFyZ2V0Ojp1cGRhdGUoSW50UG9pbnQmJiwgdW5z
aWduZWQpCit2b2lkIERyb3BUYXJnZXQ6OnVwZGF0ZShJbnRQb2ludCYmIHBvc2l0aW9uLCB1bnNp
Z25lZCkKIHsKKyAgICBtX3Bvc2l0aW9uID0gV1RGTW92ZShwb3NpdGlvbik7CisgICAgaWYgKG1f
Y2FuY2VsbGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHBhZ2UgPSB3ZWJraXRX
ZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSk7CisgICAg
QVNTRVJUKHBhZ2UpOworCisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEobV9zZWxlY3Rpb25EYXRhLmdl
dCgpLCAqbV9wb3NpdGlvbiwgKm1fcG9zaXRpb24sIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRp
b24oZ2RrX2Ryb3BfZ2V0X2FjdGlvbnMobV9kcm9wLmdldCgpKSkpOworICAgIHBhZ2UtPmRyYWdV
cGRhdGVkKGRyYWdEYXRhKTsKIH0KIAogdm9pZCBEcm9wVGFyZ2V0OjpkaWRQZXJmb3JtQWN0aW9u
KCkKIHsKKyAgICBpZiAoIW1fZHJvcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogcGFn
ZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3dlYlZp
ZXcpKTsKKyAgICBBU1NFUlQocGFnZSk7CisKKyAgICBhdXRvIG9wZXJhdGlvbiA9IHBhZ2UtPmN1
cnJlbnREcmFnT3BlcmF0aW9uKCk7CisgICAgaWYgKG9wZXJhdGlvbiA9PSBtX29wZXJhdGlvbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9vcGVyYXRpb24gPSBvcGVyYXRpb247CisgICAgZ2Rr
X2Ryb3Bfc3RhdHVzKG1fZHJvcC5nZXQoKSwgZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMo
bV9vcGVyYXRpb24pLCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG1fb3BlcmF0
aW9uKSk7CiB9CiAKIHZvaWQgRHJvcFRhcmdldDo6bGVhdmUoKQogeworICAgIGdfY2FuY2VsbGFi
bGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOworICAgIG1fZHJvcCA9IG51bGxwdHI7Cisg
ICAgbV9wb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsKKyAgICBtX3NlbGVjdGlvbkRhdGEgPSBudWxs
cHRyOworICAgIG1fY2FuY2VsbGFibGUgPSBudWxscHRyOwogfQogCi12b2lkIERyb3BUYXJnZXQ6
OmRyb3AoSW50UG9pbnQmJiwgdW5zaWduZWQpCit2b2lkIERyb3BUYXJnZXQ6OmRyb3AoSW50UG9p
bnQmJiBwb3NpdGlvbiwgdW5zaWduZWQpCiB7CisgICAgbV9wb3NpdGlvbiA9IFdURk1vdmUocG9z
aXRpb24pOworICAgIGF1dG8qIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSk7CisgICAgQVNTRVJUKHBhZ2UpOworCisgICAgRHJh
Z0RhdGEgZHJhZ0RhdGEobV9zZWxlY3Rpb25EYXRhLmdldCgpLCAqbV9wb3NpdGlvbiwgKm1fcG9z
aXRpb24sIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2Ryb3BfZ2V0X2FjdGlvbnMo
bV9kcm9wLmdldCgpKSkpOworICAgIHBhZ2UtPnBlcmZvcm1EcmFnT3BlcmF0aW9uKGRyYWdEYXRh
LCB7IH0sIHsgfSwgeyB9KTsKKyAgICBnZGtfZHJvcF9maW5pc2gobV9kcm9wLmdldCgpLCBnZGtf
ZHJvcF9nZXRfYWN0aW9ucyhtX2Ryb3AuZ2V0KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Cg==
</data>
<flag name="review"
          id="414544"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>