<?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>116472</bug_id>
          
          <creation_ts>2013-05-20 15:54:51 -0700</creation_ts>
          <short_desc>Add WTF::NeverDestroyed and start using it in WTF</short_desc>
          <delta_ts>2015-10-06 11:55:24 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>891373</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-20 15:54:51 -0700</bug_when>
    <thetext>Add WTF::NeverDestroyed and start using it in WTF</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891375</commentid>
    <comment_count>1</comment_count>
      <attachid>202330</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-20 15:58:22 -0700</bug_when>
    <thetext>Created attachment 202330
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891377</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-20 16:01:25 -0700</bug_when>
    <thetext>Attachment 202330 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/GNUmakefile.list.am&apos;, u&apos;Source/WTF/WTF.vcproj/WTF.vcproj&apos;, u&apos;Source/WTF/WTF.vcxproj/WTF.vcxproj&apos;, u&apos;Source/WTF/WTF.vcxproj/WTF.vcxproj.filters&apos;, u&apos;Source/WTF/WTF.xcodeproj/project.pbxproj&apos;, u&apos;Source/WTF/wtf/Compiler.h&apos;, u&apos;Source/WTF/wtf/CryptographicallyRandomNumber.cpp&apos;, u&apos;Source/WTF/wtf/NeverDestroyed.h&apos;, u&apos;Source/WTF/wtf/Noncopyable.h&apos;, u&apos;Source/WTF/wtf/text/WTFString.cpp&apos;]&quot; exit_code: 1
Source/WTF/wtf/NeverDestroyed.h:53:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
Source/WTF/wtf/NeverDestroyed.h:74:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891378</commentid>
    <comment_count>3</comment_count>
      <attachid>202330</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-05-20 16:02:41 -0700</bug_when>
    <thetext>Comment on attachment 202330
Patch

I love it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891852</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-21 09:55:47 -0700</bug_when>
    <thetext>Committed r150450: &lt;http://trac.webkit.org/changeset/150450&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891855</commentid>
    <comment_count>5</comment_count>
      <attachid>202330</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-21 09:57:52 -0700</bug_when>
    <thetext>Comment on attachment 202330
Patch

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

&gt; Source/WTF/ChangeLog:10
&gt; +        NeverDestroyed is a class template that can be used for singletons and other objects that we never
&gt; +        want to destroy. It&apos;s intended as a replacement for WTF_STATIC_LOCAL with the advantage that it doesn&apos;t
&gt; +        fragment the heap.

Are we going to change DEFINE_STATIC_LOCAL to use this, at least as an initial step? Or just globally replace DEFINE_STATIC_LOCAL with this and delete DEFINE_STATIC_LOCAL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891887</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-21 10:40:40 -0700</bug_when>
    <thetext>&gt; Are we going to change DEFINE_STATIC_LOCAL to use this, at least as an initial step? Or just globally replace DEFINE_STATIC_LOCAL with this and delete DEFINE_STATIC_LOCAL?

I guess it&apos;s blocked on the FIXME, as fragmenting the DATA segment is pretty bad too, maybe even worse than fragmenting the heap.

+    // FIXME: Investigate whether we should allocate a hunk of virtual memory
+    // and hand out chunks of it to NeverDestroyed instead, to reduce fragmentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891895</commentid>
    <comment_count>7</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-21 10:57:15 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Are we going to change DEFINE_STATIC_LOCAL to use this, at least as an initial step? Or just globally replace DEFINE_STATIC_LOCAL with this and delete DEFINE_STATIC_LOCAL?
&gt; 
&gt; I guess it&apos;s blocked on the FIXME, as fragmenting the DATA segment is pretty bad too, maybe even worse than fragmenting the heap.

I don’t think this is true. The current size of the __bss section in WebCore is 30k and I expect the fastMalloc heap to be much bigger than this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891983</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-21 13:34:53 -0700</bug_when>
    <thetext>&gt; I don’t think this is true. The current size of the __bss section in WebCore is 30k and I expect the fastMalloc heap to be much bigger than this.

I&apos;m not sure how this addresses the concern.

1. The current size is not the right metric, since DEFINE_STATIC_LOCAL just stores pointers, and NeverDestroyed will increase the size quite a bit.

2. Total size is not a good metric. Heap can be large, but that does not mean that we suffer from its fragmentation enough to make such a change a win.

The downside of growing static data is that unlike with heap, empty space can never be used for something else, it&apos;s statically allocated.

3. Why only measure WebCore, not the other frameworks?

4. There is no data suggesting that switching to NeverDestroyed will improve heap fragmentation. With the notable exception of emptyString, objects tend to have heap-allocated fields.

One thing I don&apos;t know is what exactly goes to __bss. We have noticeably more dirty memory in __DATA/__data. What&apos;s that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893026</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-23 13:38:53 -0700</bug_when>
    <thetext>I’m not sure that “fragmenting” is the real issue here. Here are the memory pros and cons that I know of:

Allocation on the heap
- Memory cost: malloc overhead in addition to the object size
- Memory cost: pointer in global data in addition to the object size
- Speed cost: must dereference a pointer to get at the object
- Speed cost: must page in part of the heap to get at the object

Allocation in a global
- Memory cost: object size memory is always allocated even for code paths that are never used
- Speed cost: more memory to zero when initializing the library
- Speed cost: less locality between other globals since these globals are larger, so possibly more paging to access globals

I personally think we should drop the heap-based solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893043</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-23 14:28:01 -0700</bug_when>
    <thetext>&gt; - Memory cost: object size memory is always allocated

This is almost the same what I&apos;m saying, but not quite the same. This memory is not only allocated, but it&apos;s also copied on write and dirtied. A single static boolean that&apos;s modified will dirty 4K of otherwise unused memory reserved for some never-used feature if we get unlucky.

There are some ways to reorder the data segment, but they are of course only helping as long as the scenarios we used to record usage match actual user scenarios.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893050</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-05-23 14:49:41 -0700</bug_when>
    <thetext>&gt; There are some ways to reorder the data segment, but they are of course only helping as long as the scenarios we used to record usage match actual user scenarios.

Personally, this is my main concern.

I think static allocation on the heap introduces too many problems, which is why I like NeverDestroyed. But I would like all the startup statics on the same pages or we may dirty pages all over the place.

Another option is to allocate a dense memory zone just for statics. This is more work for us but solve fragmenting in both cases (and probably help with locality).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893101</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-23 19:13:04 -0700</bug_when>
    <thetext>I think that most of these static locals are not for never-used features. The use of the heap for these was simply a hack to avoid the destructor, not an attempt to reduce the cost when the function is never called. It seems unfortunate we got attached to possible benefits of the accidental side effect of using heap allocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893122</commentid>
    <comment_count>13</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-23 21:29:02 -0700</bug_when>
    <thetext>Ignoring heap vs non-heap, I vastly prefer the class template syntax over the macro and that&apos;s really my mai reason for wanting to switch. If we find out that using the data segment is worse than the heap we can always change the NeverDestroyed implementation.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202330</attachid>
            <date>2013-05-20 15:58:22 -0700</date>
            <delta_ts>2013-05-21 09:57:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116472-20130520155710.patch</filename>
            <type>text/plain</type>
            <size>12545</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVlNjQ4ZmJiNDQxNWVjODA5Zjg3YTky
NDU4OTU4OTM1OGJhYTA3M2UuLmVkZGIwOWU2NTE1ODNjOGY5NmY4ODAwY2U0MDlkYmQ1OGI3OWE5
Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTMtMDUtMjAgIEFuZGVycyBDYXJsc3NvbiAgPGFu
ZGVyc2NhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgV1RGOjpOZXZlckRlc3Ryb3llZCBhbmQg
c3RhcnQgdXNpbmcgaXQgaW4gV1RGCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTY0NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBOZXZlckRlc3Ryb3llZCBpcyBhIGNsYXNzIHRlbXBsYXRlIHRoYXQgY2Fu
IGJlIHVzZWQgZm9yIHNpbmdsZXRvbnMgYW5kIG90aGVyIG9iamVjdHMgdGhhdCB3ZSBuZXZlcgor
ICAgICAgICB3YW50IHRvIGRlc3Ryb3kuIEl0J3MgaW50ZW5kZWQgYXMgYSByZXBsYWNlbWVudCBm
b3IgV1RGX1NUQVRJQ19MT0NBTCB3aXRoIHRoZSBhZHZhbnRhZ2UgdGhhdCBpdCBkb2Vzbid0Cisg
ICAgICAgIGZyYWdtZW50IHRoZSBoZWFwLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5h
bToKKyAgICAgICAgKiBXVEYudmNwcm9qL1dURi52Y3Byb2o6CisgICAgICAgICogV1RGLnZjeHBy
b2ovV1RGLnZjeHByb2o6CisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVy
czoKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRk
IE5ldmVyRGVzdHJveWVkLmgKKworICAgICAgICAqIHd0Zi9Db21waWxlci5oOgorICAgICAgICBB
ZGQgYSBoZWxwZXIgbWFjcm8sIFdURl9ERUxFVEVEX0ZVTkNUSU9OLgorCisgICAgICAgICogd3Rm
L0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcDoKKyAgICAgICAgVXNlIE5ldmVyRGVz
dHJveWVkLgorCisgICAgICAgICogd3RmL05ldmVyRGVzdHJveWVkLmg6IEFkZGVkLgorCisgICAg
ICAgICogd3RmL05vbmNvcHlhYmxlLmg6CisgICAgICAgIFVzZSBXVEZfREVMRVRFRF9GVU5DVElP
Ti4KKworICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5jcHA6CisgICAgICAgIChXVEY6OmVt
cHR5U3RyaW5nKToKKyAgICAgICAgVXNlIAorCiAyMDEzLTA1LTE5ICBBbmRlcnMgQ2FybHNzb24g
IDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGxpbmsgcHJlcmVuZGVyaW5n
IGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJj
ZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA5Yjc0ZWJlYWJhZTU3NzRkMGZkMGFjN2Q2
NTRkYjQ4ZjI4ZDEwNTMwLi4xZDdmMGIzNjJhMmZmNWFhZjM0ZWRjNzg2NjVkYzFhNGVmMzU4NTQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC04OSw2ICs4OSw3IEBAIHd0Zl9zb3VyY2VzICs9
IFwKICAgICBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBcCiAgICAgU291cmNlL1dU
Ri93dGYvTWV0YUFsbG9jYXRvci5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9y
SGFuZGxlLmggXAorICAgIFNvdXJjZS9XVEYvd3RmL05ldmVyRGVzdHJveWVkLmggXAogICAgIFNv
dXJjZS9XVEYvd3RmL05vbkNvcHlpbmdTb3J0LmggXAogICAgIFNvdXJjZS9XVEYvd3RmL05vbmNv
cHlhYmxlLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL05vdEZvdW5kLmggXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi9XVEYudmNwcm9qL1dURi52Y3Byb2ogYi9Tb3VyY2UvV1RGL1dURi52Y3Byb2ov
V1RGLnZjcHJvagppbmRleCA1MDkxZmQzODY1N2FjNjA4NzBhOWY4YTI3YmE3YWYxYWNkMzUzOTM3
Li4zMDFhOGJmZGJjYzNlNWU1NWIxNGVhZDg5NGE3YjJiMTUwYzc3MWUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi52Y3By
b2ovV1RGLnZjcHJvagpAQCAtOTM1LDYgKzkzNSwxMCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxG
aWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0ZlxOZXZlckRlc3Ryb3llZC5oIgorCQkJPgorCQk8
L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0ZlxOb25jb3B5YWJsZS5oIgog
CQkJPgogCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52
Y3hwcm9qIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagppbmRleCAzMTY4M2Nk
OWM2MDA5ODQwZWUyYTc0YWRkNzdkNDM2ZDY0YzIyNTk3Li4xNWU4YzQyZjhjYTk0NTNmMWI0ZDMx
MDJiOGM2ZjRjZTI1NDdmMDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dU
Ri52Y3hwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKQEAgLTE2
Niw2ICsxNjYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXE1lc3NhZ2VRdWV1
ZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxNZXRhQWxsb2NhdG9yLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXE1ldGFBbGxvY2F0b3JIYW5kbGUu
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTmV2ZXJEZXN0cm95ZWQuaCIg
Lz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTm9uY29weWFibGUuaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTm9uQ29weWluZ1NvcnQuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTm90Rm91bmQuaCIgLz4NCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV1RGL1dU
Ri52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggMWE1NjZiMjYyNDY1MTZjZGIyNWY0
YTY0ZThjYWViMjk0OWI2MDNlMy4uYTBhZGQwNTgyM2Q4ZTgwYjdhNzA5Zjc1NWRhYTM1OGViMDE2
N2E1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0
ZXJzCisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwpAQCAt
NTAxLDYgKzUwMSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTWV0YUFsbG9j
YXRvckhhbmRsZS5oIj4NCiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPg0KICAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTmV2ZXJEZXN0cm95ZWQuaCI+
DQorICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXE5vbmNvcHlhYmxlLmgiPg0KICAgICAgIDxGaWx0ZXI+
d3RmPC9GaWx0ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGY0Nzc3MThkMTFkNDc2OGZkMTBiNjgxMjIxODRmZDc2MWY1
NDc5NmIuLjVjMmJhMWZkNzcxOTY3NWZkMWJkNzFlN2I1ZmViOWFjMTcwNTBmOTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzA2LDYgKzMwNiw3IEBACiAJ
CTE0RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhdHVyYXRlZEFyaXRobWV0aWMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUExRDhCOUIxNzMxODZDRTAwMTQxREE0IC8qIEZ1bmN0
aW9uRGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlv
bkRpc3BhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUExRDhCOUQxNzMx
ODc5ODAwMTQxREE0IC8qIEZ1bmN0aW9uRGlzcGF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbkRpc3BhdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQTNGNkJFNjE3NEFEQTIxMDBCMkVFQTcgLyogTmV2ZXJEZXN0cm95
ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTmV2ZXJEZXN0cm95ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUE2QkI3NjgxNjJGMzAwNTAwREQxNkRCIC8qIFN0cmVhbUJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJlYW1CdWZmZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYxNDdCMDgxNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJU
b1N0cmluZ0NvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50
ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
QzA1Mzg1MzE1QkM4MTkwMDBGMjFCOTYgLyogR3JlZ29yaWFuRGF0ZVRpbWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JlZ29yaWFuRGF0ZVRpbWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTY5MCw2ICs2OTEsNyBAQAogCQkJCUE4QTQ3MkNEMTUxQTgyNUIw
MDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLywKIAkJCQlBOEE0NzJDRTE1MUE4MjVCMDA0
MTIzRkYgLyogTWV0YUFsbG9jYXRvci5oICovLAogCQkJCUE4QTQ3MkNGMTUxQTgyNUIwMDQxMjNG
RiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8sCisJCQkJMUEzRjZCRTYxNzRBREEyMTAwQjJF
RUE3IC8qIE5ldmVyRGVzdHJveWVkLmggKi8sCiAJCQkJQThBNDcyRDAxNTFBODI1QjAwNDEyM0ZG
IC8qIE5vbmNvcHlhYmxlLmggKi8sCiAJCQkJQThBNDcyRDExNTFBODI1QjAwNDEyM0ZGIC8qIE5v
bkNvcHlpbmdTb3J0LmggKi8sCiAJCQkJQThBNDcyRDIxNTFBODI1QjAwNDEyM0ZGIC8qIE5vdEZv
dW5kLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Db21waWxlci5oIGIvU291cmNl
L1dURi93dGYvQ29tcGlsZXIuaAppbmRleCBlNWY3NmI3MzlkY2NiZDU3NjhiZmYwMDFiNmU3ZjRj
YTNhMDA4ZjM1Li5kMWE5ZWQ3ZWZmMWRiZWQ4ODEzZDI3MDQ2OTZmY2ZiMTRkM2M0NjRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Db21waWxlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Nv
bXBpbGVyLmgKQEAgLTY1LDcgKzY1LDYgQEAKICNkZWZpbmUgV1RGX0NPTVBJTEVSX1NVUFBPUlRT
X0hBU19UUklWSUFMX0RFU1RSVUNUT1IgX19oYXNfZXh0ZW5zaW9uKGhhc190cml2aWFsX2Rlc3Ry
dWN0b3IpCiAjZGVmaW5lIFdURl9DT01QSUxFUl9TVVBQT1JUU19DWFhfU1RST05HX0VOVU1TIF9f
aGFzX2V4dGVuc2lvbihjeHhfc3Ryb25nX2VudW1zKQogI2RlZmluZSBXVEZfQ09NUElMRVJfU1VQ
UE9SVFNfQ1hYX1JFRkVSRU5DRV9RVUFMSUZJRURfRlVOQ1RJT05TIF9faGFzX2V4dGVuc2lvbihj
eHhfcmVmZXJlbmNlX3F1YWxpZmllZF9mdW5jdGlvbnMpCi0KICNlbmRpZgogCiAjaWZuZGVmIENM
QU5HX1BSQUdNQQpAQCAtMjc2LDYgKzI3NSwxMiBAQAogI2RlZmluZSBGSU5BTAogI2VuZGlmCiAK
KyNpZiBDT01QSUxFUl9TVVBQT1JUUyhDWFhfREVMRVRFRF9GVU5DVElPTlMpCisjZGVmaW5lIFdU
Rl9ERUxFVEVEX0ZVTkNUSU9OID0gZGVsZXRlCisjZWxzZQorI2RlZmluZSBXVEZfREVMRVRFRF9G
VU5DVElPTgorI2VuZGlmCisKIC8qIFJFRkVSRU5DRURfRlJPTV9BU00gKi8KIAogI2lmbmRlZiBS
RUZFUkVOQ0VEX0ZST01fQVNNCkBAIC0zMjAsNCArMzI1LDYgQEAgaW5saW5lIHZvaWQgdW51c2Vk
UGFyYW0oVCYgeCkgeyAodm9pZCl4OyB9CiAjZGVmaW5lIFVOVVNFRF9MQUJFTChsYWJlbCkgVU5V
U0VEX1BBUkFNKCYmIGxhYmVsKQogI2VuZGlmCiAKKworCiAjZW5kaWYgLyogV1RGX0NvbXBpbGVy
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9t
TnVtYmVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVy
LmNwcAppbmRleCBmZTQ0NWQ2YjAzMjVmNWE2Y2NiZDZkODAyMWRmNWQ3NGY3NjNiZjljLi5hMGFl
Y2ZlOTk2M2IzZDk3NGYwMTJjYTFjMGFlMDRhMWU5Yjc3MDU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwCkBAIC0zMCw4ICszMCw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21O
dW1iZXIuaCIKIAorI2luY2x1ZGUgIk5ldmVyRGVzdHJveWVkLmgiCiAjaW5jbHVkZSAiT1NSYW5k
b21Tb3VyY2UuaCIKLSNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKICNpbmNsdWRlICJUaHJlYWRp
bmdQcmltaXRpdmVzLmgiCiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMTU4LDcgKzE1OCw4IEBAIHZv
aWQgQVJDNFJhbmRvbU51bWJlckdlbmVyYXRvcjo6cmFuZG9tVmFsdWVzKHZvaWQqIGJ1ZmZlciwg
c2l6ZV90IGxlbmd0aCkKIAogQVJDNFJhbmRvbU51bWJlckdlbmVyYXRvciYgc2hhcmVkUmFuZG9t
TnVtYmVyR2VuZXJhdG9yKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEFSQzRSYW5kb21O
dW1iZXJHZW5lcmF0b3IsIHJhbmRvbU51bWJlckdlbmVyYXRvciwgKCkpOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBUkM0UmFuZG9tTnVtYmVyR2VuZXJhdG9yPiByYW5kb21OdW1iZXJHZW5l
cmF0b3I7CisKICAgICByZXR1cm4gcmFuZG9tTnVtYmVyR2VuZXJhdG9yOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9OZXZlckRlc3Ryb3llZC5oIGIvU291cmNlL1dURi93dGYvTmV2
ZXJEZXN0cm95ZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYTU1OGJiMTkxZjY0MGM4ODFiNDc5NWI4MGRjYTQ0
YTMzZjcyNzE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvTmV2ZXJEZXN0cm95
ZWQuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXZlckRlc3Ryb3ll
ZF9oCisjZGVmaW5lIE5ldmVyRGVzdHJveWVkX2gKKworI2luY2x1ZGUgPHd0Zi9BbGlnbm1lbnQu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KKworLy8gTmV2ZXJEZXN0cm95ZWQg
aXMgYSBzbWFydCBwb2ludGVyIGxpa2UgY2xhc3Mgd2hvIGVuc3VyZXMgdGhhdCB0aGUgZGVzdHJ1
Y3RvcgorLy8gZm9yIHRoZSBnaXZlbiBvYmplY3QgaXMgbmV2ZXIgY2FsbGVkLCBidXQgZG9lc24n
dCB1c2UgdGhlIGhlYXAgdG8gYWxsb2NhdGUgaXQuCisvLyBJdCdzIHVzZWZ1bCBmb3Igc3RhdGlj
IGxvY2FsIHZhcmlhYmxlcywgYW5kIGNhbiBiZSB1c2VkIGxpa2Ugc286CisvLworLy8gTXlTaGFy
ZWRHbG9iYWwmIG15U2hhcmVkR2xvYmFsKCkKKy8vIHsKKy8vICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPE15U2hhcmVkR2xvYmFsPiBteUdsb2JhbCgiSGVsbG8iLCA0Mik7CisvLyAgIHJldHVybiBt
eUdsb2JhbDsKKy8vIH0KKy8vCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBOZXZlckRlc3Ryb3llZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmV2
ZXJEZXN0cm95ZWQpOworCitwdWJsaWM6CisjaWYgQ09NUElMRVJfU1VQUE9SVFMoQ1hYX1ZBUklB
RElDX1RFTVBMQVRFUykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIE5ldmVy
RGVzdHJveWVkKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgbmV3IChhc1B0cigpKSBU
KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorI2Vsc2UKKyAgICBOZXZlckRl
c3Ryb3llZCgpCisgICAgeworICAgICAgICBuZXcgKE5vdE51bGwsIGFzUHRyKCkpIFQ7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDE+CisgICAgTmV2ZXJEZXN0cm95ZWQoY29uc3Qg
UDEmIHAxKQorICAgIHsKKyAgICAgICAgbmV3IChOb3ROdWxsLCBhc1B0cigpKSBUKHAxKTsKKyAg
ICB9CisjZW5kaWYKKworICAgIG9wZXJhdG9yIFQmKCkgeyByZXR1cm4gKmFzUHRyKCk7IH0KKwor
cHJpdmF0ZToKKyNpZiBDT01QSUxFUl9TVVBQT1JUUyhDWFhfUlZBTFVFX1JFRkVSRU5DRVMpCisg
ICAgTmV2ZXJEZXN0cm95ZWQoTmV2ZXJEZXN0cm95ZWQmJikgV1RGX0RFTEVURURfRlVOQ1RJT047
CisjZW5kaWYKKworICAgIHR5cGVkZWYgdHlwZW5hbWUgV1RGOjpSZW1vdmVDb25zdDxUPjo6VHlw
ZSAqUG9pbnRlclR5cGU7CisKKyAgICBQb2ludGVyVHlwZSBhc1B0cigpIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8UG9pbnRlclR5cGU+KCZtX3N0b3JhZ2UpOyB9CisKKyAgICAvLyBGSVhNRTog
SW52ZXN0aWdhdGUgd2hldGhlciB3ZSBzaG91bGQgYWxsb2NhdGUgYSBodW5rIG9mIHZpcnR1YWwg
bWVtb3J5CisgICAgLy8gYW5kIGhhbmQgb3V0IGNodW5rcyBvZiBpdCB0byBOZXZlckRlc3Ryb3ll
ZCBpbnN0ZWFkLCB0byByZWR1Y2UgZnJhZ21lbnRhdGlvbi4KKyAgICBBbGlnbmVkQnVmZmVyPHNp
emVvZihUKSwgV1RGX0FMSUdOX09GKFQpPiBtX3N0b3JhZ2U7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEY7CisKK3VzaW5nIFdURjo6TmV2ZXJEZXN0cm95ZWQ7CisKKyNlbmRpZiAvLyBOZXZlckRl
c3Ryb3llZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Ob25jb3B5YWJsZS5oIGIvU291
cmNlL1dURi93dGYvTm9uY29weWFibGUuaAppbmRleCBmNmJkZmJiNDBiYTllNDZjYWExZGU1ZGQ2
NmMzOTQ4ZWZiZmZjNzE3Li5jNjRjZjYzYzIwMDg3ZjU2ZDFiZjFmN2NjYTEwZDU0NmRmNTA5ODYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Ob25jb3B5YWJsZS5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL05vbmNvcHlhYmxlLmgKQEAgLTIzLDE2ICsyMyw5IEBACiAKICNpbmNsdWRlIDx3dGYv
Q29tcGlsZXIuaD4KIAotI2lmIENPTVBJTEVSX1NVUFBPUlRTKENYWF9ERUxFVEVEX0ZVTkNUSU9O
UykKLSAgICAjZGVmaW5lIFdURl9NQUtFX05PTkNPUFlBQkxFKENsYXNzTmFtZSkgXAotICAgICAg
ICBwcml2YXRlOiBcCi0gICAgICAgICAgICBDbGFzc05hbWUoY29uc3QgQ2xhc3NOYW1lJikgPSBk
ZWxldGU7IFwKLSAgICAgICAgICAgIENsYXNzTmFtZSYgb3BlcmF0b3I9KGNvbnN0IENsYXNzTmFt
ZSYpID0gZGVsZXRlOwotI2Vsc2UKLSAgICAjZGVmaW5lIFdURl9NQUtFX05PTkNPUFlBQkxFKENs
YXNzTmFtZSkgXAotICAgICAgICBwcml2YXRlOiBcCi0gICAgICAgICAgICBDbGFzc05hbWUoY29u
c3QgQ2xhc3NOYW1lJik7IFwKLSAgICAgICAgICAgIENsYXNzTmFtZSYgb3BlcmF0b3I9KGNvbnN0
IENsYXNzTmFtZSYpCi0jZW5kaWYKKyNkZWZpbmUgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2xhc3NO
YW1lKSBcCisgICAgcHJpdmF0ZTogXAorICAgICAgICBDbGFzc05hbWUoY29uc3QgQ2xhc3NOYW1l
JikgV1RGX0RFTEVURURfRlVOQ1RJT047IFwKKyAgICAgICAgQ2xhc3NOYW1lJiBvcGVyYXRvcj0o
Y29uc3QgQ2xhc3NOYW1lJikgV1RGX0RFTEVURURfRlVOQ1RJT047IFwKIAogI2VuZGlmIC8vIFdU
Rl9Ob25jb3B5YWJsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmlu
Zy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKaW5kZXggYjk3OWM1ODVi
ZDhiNjM0MzhjYjkxYWRhNzViY2Q4NzNmNDY3ZWY5OS4uMzExZWQyNjVkODM0ZmY4M2E4MmU0NTNm
MTY1NjZhNDkyMTEyOTA4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcApAQCAtMjgsNiAr
MjgsNyBAQAogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJl
ci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9T
dHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0xMjQyLDcgKzEyNDMs
OCBAQCBmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBVQ2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCwgc2l6ZV90JiBwYXJzZWRMZW5ndGgpCiAKIGNvbnN0IFN0cmluZyYgZW1wdHlTdHJpbmco
KQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBlbXB0eVN0cmluZywgKFN0cmlu
Z0ltcGw6OmVtcHR5KCkpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBlbXB0
eVN0cmluZyhTdHJpbmdJbXBsOjplbXB0eSgpKTsKKwogICAgIHJldHVybiBlbXB0eVN0cmluZzsK
IH0KIAo=
</data>
<flag name="review"
          id="223758"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>