<?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>128632</bug_id>
          
          <creation_ts>2014-02-11 16:13:33 -0800</creation_ts>
          <short_desc>GIF animations should be suspended when outside of viewport</short_desc>
          <delta_ts>2017-08-24 15:54:57 -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>Layout and Rendering</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hnandor</cc>
    
    <cc>japhet</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>979649</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-11 16:13:33 -0800</bug_when>
    <thetext>Animations are driven by the paint cycle. Speculative tiles keep animations outside the actual viewport going.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979650</commentid>
    <comment_count>1</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-11 16:13:52 -0800</bug_when>
    <thetext>&lt;rdar://problem/15895090&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979684</commentid>
    <comment_count>2</comment_count>
      <attachid>223923</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-11 17:36:41 -0800</bug_when>
    <thetext>Created attachment 223923
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979686</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-11 17:38:55 -0800</bug_when>
    <thetext>Attachment 223923 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderView.cpp:1181:  Extra space after ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 13 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>979689</commentid>
    <comment_count>4</comment_count>
      <attachid>223923</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-02-11 17:47:39 -0800</bug_when>
    <thetext>Comment on attachment 223923
patch

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

r=me

&gt; Source/WebCore/page/Page.cpp:1149
&gt; +        if (frame-&gt;contentRenderer())
&gt; +            frame-&gt;contentRenderer()-&gt;resumePausedImageAnimationsIfNeeded();

I&apos;d put the renderer in a local.

&gt; Source/WebCore/rendering/RenderElement.cpp:1287
&gt; +    if (document.view()-&gt;isOffscreen())
&gt; +        return false;

renderer.frameView().isOffscreen()

&gt; Source/WebCore/rendering/RenderElement.cpp:1290
&gt; +    if (document.frame()-&gt;timersPaused())
&gt; +        return false;

renderer.frame().timersPaused()

&gt; Source/WebCore/rendering/RenderElement.cpp:1304
&gt; +    auto visibleRect = document().view()-&gt;visibleContentRect();

frameView().visibleContentRect()

&gt; Source/WebCore/rendering/RenderElement.h:206
&gt; +    virtual void newImageAnimationFrameAvailable(CachedImage&amp;) override;

This should be final, too!

&gt; Source/WebCore/rendering/RenderView.cpp:1181
&gt; +void RenderView::addRendererWithPausedImageAnimations( RenderElement&amp; renderer)

Weird space here!

&gt; Source/WebCore/rendering/RenderView.cpp:1203
&gt; +    Vector&lt;RenderElement*&gt; toRemove;

I&apos;d give this some token inline capacity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979709</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-11 18:51:24 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/163928</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979711</commentid>
    <comment_count>6</comment_count>
      <attachid>223923</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-11 19:04:50 -0800</bug_when>
    <thetext>Comment on attachment 223923
patch

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

&gt; Source/WebCore/rendering/RenderElement.cpp:1296
&gt; +    if (!visibleRect.intersects(renderer.absoluteBoundingBoxRect()))

Sad that you have to call renderer.absoluteBoundingBoxRect() here; that walks up the tree!

&gt; LayoutTests/ChangeLog:9
&gt; +        * fast/repaint/no-animation-outside-viewport.html: Added.

Doesn&apos;t this need to be a tiled drawing test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979738</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-11 19:57:23 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Sad that you have to call renderer.absoluteBoundingBoxRect() here; that walks up the tree!

Kinda unavoidable.

&gt; Doesn&apos;t this need to be a tiled drawing test?

The test works as expected in wk2. I don&apos;t know what is tiled drawing test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979751</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-11 20:44:17 -0800</bug_when>
    <thetext>I guess all WK2 tests are in tiled drawing mode now. That used to not be the case (which is why some tests live in LayoutTests/platform/mac-wk2/tiled-drawing/).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342210</commentid>
    <comment_count>9</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-24 15:54:57 -0700</bug_when>
    <thetext>*** Bug 112327 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223923</attachid>
            <date>2014-02-11 17:36:41 -0800</date>
            <delta_ts>2014-02-11 19:04:50 -0800</delta_ts>
            <desc>patch</desc>
            <filename>animation-outside-viewport-pause.patch</filename>
            <type>text/plain</type>
            <size>22018</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDE0LTAyLTExICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBHSUYgYW5pbWF0aW9ucyBzaG91
bGQgYmUgc3VzcGVuZGVkIHdoZW4gb3V0c2lkZSBvZiB2aWV3cG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4NjMyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBbmltYXRpb25zIGFyZSBk
cml2ZW4gYnkgdGhlIHBhaW50IGN5Y2xlLiBTcGVjdWxhdGl2ZSB0aWxlcyBrZWVwIGFuaW1hdGlv
bnMgb3V0c2lkZSB0aGUgYWN0dWFsIHZpZXdwb3J0IGdvaW5nLgorICAgICAgICAKKyAgICAgICAg
UGF1c2UgYW5pbWF0aW9ucyB3aGVuIHRoZXkgYXJlIG91dHNpZGUgdGhlIHZpZXdwb3J0IGJ5IG5v
dCBwYWludGluZyB0aGVtLgorCisgICAgICAgIFRlc3Q6IGZhc3QvcmVwYWludC9uby1hbmltYXRp
b24tb3V0c2lkZS12aWV3cG9ydC5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVk
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmFuaW1hdGlvbkFkdmFu
Y2VkKToKKyAgICAgICAgCisgICAgICAgICAgICBDYWxsIGFuaW1hdGlvbiBzcGVjaWZpYyBuZXdJ
bWFnZUFuaW1hdGlvbkZyYW1lQXZhaWxhYmxlIGluc3RlYWQgb2YgdGhlIGdlbmVyaWMgbm90aWZ5
T2JzZXJ2ZXJzLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAg
ICAgIAorICAgICAgICAgICAgUmVtb3ZlZCBub3cgdW5uZWNlc3NhcnkgcmVzdW1lQW5pbWF0aW5n
SW1hZ2VzRm9yTG9hZGVyIG1lY2hhbmlzbS4KKyAgICAgICAgICAgIFJlbW92ZSB1bm5lY2Vzc2Fy
eSBzaG91bGRQYXVzZUFuaW1hdGlvbi4gUGF1c2luZyBpcyBub3cgYWx3YXlzIGRvbmUgd2hlbiBi
eSBhdm9pZGluZyByZXBhaW50LgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
Q2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZUNsaWVudDo6bmV3SW1hZ2VB
bmltYXRpb25GcmFtZUF2YWlsYWJsZSk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQpOgorICAg
ICAgICAKKyAgICAgICAgICAgIENoZWNrIGlmIHdlIGhhdmUgaW1hZ2UgYW5pbWF0aW9ucyB0byBy
ZXN1bWUgd2hlbiBzY3JvbGwgcG9zaXRpb24gY2hhbmdlcy4KKworICAgICAgICAqIHBhZ2UvUGFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZXN1bWVBbmltYXRpbmdJbWFnZXMpOgor
ICAgICAgICAKKyAgICAgICAgICAgIFVzZSB0aGUgc2FtZSBtZWNoYW5pc20gd2hlbiByZXN1bWlu
ZyBiYWNrZ3JvdW5kIHRhYnMgZXRjLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmludGVybmFsQWR2
YW5jZUFuaW1hdGlvbik6CisgICAgICAgIAorICAgICAgICAgICAgUmVtb3ZlIHRoZSBzaG91bGRQ
YXVzZUFuaW1hdGlvbiB0ZXN0LCBhbHdheXMgcmVseSBvbiBwYXVzaW5nIG9uIGludmFsaWRhdGlv
bi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6
OlJlbmRlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6flJlbmRl
ckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkUmVwYWludEZvckltYWdlQW5pbWF0
aW9uKToKKyAgICAgICAgCisgICAgICAgICAgICBGYWN0b3IgdGhlIHBhdXNpbmcgY29uZGl0aW9u
cyB0byBhIGZ1bmN0aW9uLiBUZXN0IHRoYXQgdGhlIGFuaW1hdGlvbiBpcyB3aXRoaW5nIHRoZQor
ICAgICAgICAgICAgdmlzaWJsZSByZWN0LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVt
ZW50OjpuZXdJbWFnZUFuaW1hdGlvbkZyYW1lQXZhaWxhYmxlKToKKyAgICAgICAgCisgICAgICAg
ICAgICBBZGQgcmVuZGVyZXIgdG8gdGhlIHBhdXNlZCBhbmltYXRpb24gc2V0IGlmIHdlIGRvbid0
IGNvbnRpbnVlIHRoZSBhbmltYXRpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1l
bnQ6OnJlcGFpbnRGb3JQYXVzZWRJbWFnZUFuaW1hdGlvbnNJZk5lZWRlZCk6CisgICAgICAgIAor
ICAgICAgICAgICAgUmVzdW1lIHRoZSBwYXVzZWQgYW5pbWF0aW9ucyBieSB0cmlnZ2VyaW5nIHJl
cGFpbnQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c2V0SGFzUGF1c2VkSW1hZ2VBbmltYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6Omhhc1BhdXNlZEltYWdlQW5pbWF0aW9ucyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmFkZFJlbmRlcmVyV2l0aFBhdXNlZEltYWdl
QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpyZW1vdmVSZW5kZXJl
cldpdGhQYXVzZWRJbWFnZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6cmVzdW1lUGF1c2VkSW1hZ2VBbmltYXRpb25zSWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJWaWV3Lmg6CisKIDIwMTQtMDItMTEgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdA
YXBwbGUuY29tPgogCiAgICAgICAgIENUVEU6IFJlbmRlck5hbWVkRmxvd1RocmVhZCBhbHdheXMg
aGFzIGEgV2ViS2l0TmFtZWRGbG93LgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAxNjM5MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTksMjUgKzQ5
OSwxMyBAQCB2b2lkIENhY2hlZEltYWdlOjpkaWREcmF3KGNvbnN0IEltYWdlKiBpCiAgICAgQ2Fj
aGVkUmVzb3VyY2U6OmRpZEFjY2Vzc0RlY29kZWREYXRhKHRpbWVTdGFtcCk7CiB9CiAKLWJvb2wg
Q2FjaGVkSW1hZ2U6OnNob3VsZFBhdXNlQW5pbWF0aW9uKGNvbnN0IEltYWdlKiBpbWFnZSkKLXsK
LSAgICBpZiAoIWltYWdlIHx8IGltYWdlICE9IG1faW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRJbWFnZUNsaWVu
dD4gdyhtX2NsaWVudHMpOwotICAgIHdoaWxlIChDYWNoZWRJbWFnZUNsaWVudCogYyA9IHcubmV4
dCgpKSB7Ci0gICAgICAgIGlmIChjLT53aWxsUmVuZGVySW1hZ2UodGhpcykpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgQ2Fj
aGVkSW1hZ2U6OmFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKiBpbWFnZSkKIHsKICAgICBp
ZiAoIWltYWdlIHx8IGltYWdlICE9IG1faW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBub3Rp
ZnlPYnNlcnZlcnMoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRJbWFn
ZUNsaWVudD4gY2xpZW50V2Fsa2VyKG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZEltYWdl
Q2xpZW50KiBjbGllbnQgPSBjbGllbnRXYWxrZXIubmV4dCgpKQorICAgICAgICBjbGllbnQtPm5l
d0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUoKnRoaXMpOwogfQogCiB2b2lkIENhY2hlZElt
YWdlOjpjaGFuZ2VkSW5SZWN0KGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgcmVj
dCkKQEAgLTUyNywyNyArNTE1LDYgQEAgdm9pZCBDYWNoZWRJbWFnZTo6Y2hhbmdlZEluUmVjdChj
b25zdCBJbQogICAgIG5vdGlmeU9ic2VydmVycygmcmVjdCk7CiB9CiAKLXZvaWQgQ2FjaGVkSW1h
Z2U6OnJlc3VtZUFuaW1hdGluZ0ltYWdlc0ZvckxvYWRlcihDYWNoZWRSZXNvdXJjZUxvYWRlciog
bG9hZGVyKQotewotICAgIGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291
cmNlTWFwJiByZXNvdXJjZXMgPSBsb2FkZXItPmFsbENhY2hlZFJlc291cmNlcygpOwotCi0gICAg
Zm9yIChDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSByZXNvdXJjZXMuYmVnaW4oKSwgZW5kID0gcmVzb3VyY2VzLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
UmVzb3VyY2U+JiByZXNvdXJjZSA9IGl0LT52YWx1ZTsKLSAgICAgICAgaWYgKCFyZXNvdXJjZSB8
fCAhcmVzb3VyY2UtPmlzSW1hZ2UoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBD
YWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSB0b0NhY2hlZEltYWdlKHJlc291cmNlLmdldCgpKTsK
LSAgICAgICAgaWYgKCFjYWNoZWRJbWFnZS0+aGFzSW1hZ2UoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKLSAgICAg
ICAgaWYgKCFpbWFnZS0+aXNCaXRtYXBJbWFnZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIEJpdG1hcEltYWdlKiBiaXRtYXBJbWFnZSA9IHRvQml0bWFwSW1hZ2UoaW1hZ2UpOwot
ICAgICAgICBpZiAoIWJpdG1hcEltYWdlLT5jYW5BbmltYXRlKCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgY2FjaGVkSW1hZ2UtPmFuaW1hdGlvbkFkdmFuY2VkKGJpdG1hcEltYWdl
KTsKLSAgICB9Ci19Ci0KIGJvb2wgQ2FjaGVkSW1hZ2U6OmN1cnJlbnRGcmFtZUtub3duVG9CZU9w
YXF1ZShjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlcikKIHsKICAgICBJbWFnZSogaW1hZ2Ug
PSBpbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRJbWFnZS5oCShyZXZpc2lvbiAxNjM5MDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODQsOCArODQs
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc01hbnVhbGx5Q2FjaGVkKCkgY29uc3QgeyByZXR1cm4g
bV9pc01hbnVhbGx5Q2FjaGVkOyB9CiAgICAgdmlydHVhbCBib29sIG11c3RSZXZhbGlkYXRlRHVl
VG9DYWNoZUhlYWRlcnMoQ2FjaGVQb2xpY3kpIGNvbnN0OwogCi0gICAgc3RhdGljIHZvaWQgcmVz
dW1lQW5pbWF0aW5nSW1hZ2VzRm9yTG9hZGVyKENhY2hlZFJlc291cmNlTG9hZGVyKik7Ci0KICNp
ZiBFTkFCTEUoRElTS19JTUFHRV9DQUNIRSkKICAgICB2aXJ0dWFsIGJvb2wgY2FuVXNlRGlza0lt
YWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdXNlRGlza0ltYWdl
Q2FjaGUoKSBvdmVycmlkZTsKQEAgLTEyOCw3ICsxMjYsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBkZWNvZGVkU2l6ZUNoYW5nZWQoY29uc3QgSW1hZ2UqLCBpbnQgZGVsdGEpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWREcmF3KGNvbnN0IEltYWdlKikgb3ZlcnJpZGU7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGF1c2VBbmltYXRpb24oY29uc3QgSW1hZ2UqKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQWR2YW5jZWQoY29uc3QgSW1hZ2UqKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSosIGNv
bnN0IEludFJlY3QmKSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZEltYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZEltYWdlQ2xpZW50LmgJKHJldmlzaW9uIDE2MzkwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiwxNSArMzYsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNs
aWVudFR5cGUgZXhwZWN0ZWRUeXBlKCkgeyByZXR1cm4gSW1hZ2VUeXBlOyB9CiAgICAgdmlydHVh
bCBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgcmVzb3VyY2VDbGllbnRUeXBlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZXhwZWN0ZWRUeXBlKCk7IH0KIAotICAgIC8vIENhbGxlZCB3aGVuZXZl
ciBhIGZyYW1lIG9mIGFuIGltYWdlIGNoYW5nZXMsIGVpdGhlciBiZWNhdXNlIHdlIGdvdCBtb3Jl
IGRhdGEgZnJvbSB0aGUgbmV0d29yayBvcgotICAgIC8vIGJlY2F1c2Ugd2UgYXJlIGFuaW1hdGlu
Zy4gSWYgbm90IG51bGwsIHRoZSBJbnRSZWN0IGlzIHRoZSBjaGFuZ2VkIHJlY3Qgb2YgdGhlIGlt
YWdlLgorICAgIC8vIENhbGxlZCB3aGVuZXZlciBhIGZyYW1lIG9mIGFuIGltYWdlIGNoYW5nZXMg
YmVjYXVzZSB3ZSBnb3QgbW9yZSBkYXRhIGZyb20gdGhlIG5ldHdvcmsuCisgICAgLy8gSWYgbm90
IG51bGwsIHRoZSBJbnRSZWN0IGlzIHRoZSBjaGFuZ2VkIHJlY3Qgb2YgdGhlIGltYWdlLgogICAg
IHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRSZWN0KiA9
IDApIHsgfQogCi0gICAgLy8gQ2FsbGVkIHRvIGZpbmQgb3V0IGlmIHRoaXMgY2xpZW50IHdhbnRz
IHRvIGFjdHVhbGx5IGRpc3BsYXkgdGhlIGltYWdlLiBVc2VkIHRvIHRlbGwgd2hlbiB3ZQotICAg
IC8vIGNhbiBoYWx0IGFuaW1hdGlvbi4gQ29udGVudCBub2RlcyB0aGF0IGhvbGQgaW1hZ2UgcmVm
cyBmb3IgZXhhbXBsZSB3b3VsZCBub3QgcmVuZGVyIHRoZSBpbWFnZSwKLSAgICAvLyBidXQgUmVu
ZGVySW1hZ2VzIHdvdWxkIChhc3N1bWluZyB0aGV5IGhhdmUgdmlzaWJpbGl0eTogdmlzaWJsZSBh
bmQgdGhlaXIgcmVuZGVyIHRyZWUgaXNuJ3QgaGlkZGVuCi0gICAgLy8gZS5nLiwgaW4gdGhlIGIv
ZiBjYWNoZSBvciBpbiBhIGJhY2tncm91bmQgdGFiKS4KLSAgICB2aXJ0dWFsIGJvb2wgd2lsbFJl
bmRlckltYWdlKENhY2hlZEltYWdlKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAvLyBDYWxsZWQg
d2hlbiBHSUYgYW5pbWF0aW9uIHByb2dyZXNzZXMuCisgICAgdmlydHVhbCB2b2lkIG5ld0ltYWdl
QW5pbWF0aW9uRnJhbWVBdmFpbGFibGUoQ2FjaGVkSW1hZ2UmIGltYWdlKSB7IGltYWdlQ2hhbmdl
ZCgmaW1hZ2UpOyB9CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShy
ZXZpc2lvbiAxNjM5MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5NDcsNiArMTk0Nyw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxQ
b3NpdGlvbkNoYW5nZWQoY28KICAgICBzZW5kV2lsbFJldmVhbEVkZ2VFdmVudHNJZk5lZWRlZChv
bGRQb3NpdGlvbiwgbmV3UG9zaXRpb24pOwogCiAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZp
ZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCkpIHsKKyAgICAgICAgcmVuZGVyVmlldy0+cmVzdW1lUGF1
c2VkSW1hZ2VBbmltYXRpb25zSWZOZWVkZWQoKTsKICAgICAgICAgaWYgKHJlbmRlclZpZXctPnVz
ZXNDb21wb3NpdGluZygpKQogICAgICAgICAgICAgcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpLmZy
YW1lVmlld0RpZFNjcm9sbCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNp
b24gMTYzOTA5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE0NCw4ICsxMTQ0LDEwIEBAIHZvaWQgUGFnZTo6cmVzdW1lQW5pbWF0aW5nSW1hZ2Vz
KCkKICAgICAvLyBEcmF3aW5nIG1vZGVscyB3aGljaCBjYWNoZSBwYWludGVkIGNvbnRlbnQgd2hp
bGUgb3V0LW9mLXdpbmRvdyAoV2ViS2l0MidzIGNvbXBvc2l0ZWQgZHJhd2luZyBhcmVhcywgZXRj
LikKICAgICAvLyByZXF1aXJlIHRoYXQgd2UgcmVwYWludCBhbmltYXRlZCBpbWFnZXMgdG8ga2lj
a3N0YXJ0IHRoZSBhbmltYXRpb24gbG9vcC4KIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9t
YWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0
KCkpCi0gICAgICAgIENhY2hlZEltYWdlOjpyZXN1bWVBbmltYXRpbmdJbWFnZXNGb3JMb2FkZXIo
ZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOworICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5jb250ZW50UmVuZGVyZXIo
KSkKKyAgICAgICAgICAgIGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKS0+cmVzdW1lUGF1c2VkSW1h
Z2VBbmltYXRpb25zSWZOZWVkZWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgUGFnZTo6c2V0Vmlld1N0
YXRlKFZpZXdTdGF0ZTo6RmxhZ3Mgdmlld1N0YXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMTYzOTA5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MDksMTMgKzcwOSw2IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmludGVybmFs
QWR2YW5jZUFuaW1hdGkKICAgICAvLyBTdG9wIHRoZSBhbmltYXRpb24uCiAgICAgc3RvcEFuaW1h
dGlvbigpOwogICAgIAotI2lmICFQTEFURk9STShJT1MpCi0gICAgLy8gU2VlIGlmIGFueW9uZSBp
cyBzdGlsbCBwYXlpbmcgYXR0ZW50aW9uIHRvIHRoaXMgYW5pbWF0aW9uLiAgSWYgbm90LCB3ZSBk
b24ndAotICAgIC8vIGFkdmFuY2UgYW5kIHdpbGwgcmVtYWluIHN1c3BlbmRlZCBhdCB0aGUgY3Vy
cmVudCBmcmFtZSB1bnRpbCB0aGUgYW5pbWF0aW9uIGlzIHJlc3VtZWQuCi0gICAgaWYgKCFza2lw
cGluZ0ZyYW1lcyAmJiBpbWFnZU9ic2VydmVyKCktPnNob3VsZFBhdXNlQW5pbWF0aW9uKHRoaXMp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQogICAgICsrbV9jdXJyZW50RnJhbWU7
CiAgICAgYm9vbCBhZHZhbmNlZEFuaW1hdGlvbiA9IHRydWU7CiAgICAgYm9vbCBkZXN0cm95QWxs
ID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9i
c2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VPYnNlcnZlci5oCShyZXZpc2lvbiAxNjM5MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVkU2l6ZUNoYW5nZWQoY29uc3Qg
SW1hZ2UqLCBpbnQgZGVsdGEpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRHJhdyhjb25zdCBJ
bWFnZSopID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQYXVzZUFuaW1hdGlvbihjb25z
dCBJbWFnZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQWR2YW5jZWQoY29uc3Qg
SW1hZ2UqKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlZEluUmVjdChjb25zdCBJbWFn
ZSosIGNvbnN0IEludFJlY3QmKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDE2MzkwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVjdC5o
IgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MzkwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBA
QCBSZW5kZXJFbGVtZW50OjpSZW5kZXJFbGVtZW50KEVsZW1lbnQmIGVsCiAgICAgLCBtX2FuY2Vz
dG9yTGluZUJveERpcnR5KGZhbHNlKQogICAgICwgbV9oYXNJbml0aWFsaXplZFN0eWxlKGZhbHNl
KQogICAgICwgbV9yZW5kZXJJbmxpbmVBbHdheXNDcmVhdGVzTGluZUJveGVzKGZhbHNlKQorICAg
ICwgbV9oYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMoZmFsc2UpCiAgICAgLCBtX2ZpcnN0Q2hpbGQo
bnVsbHB0cikKICAgICAsIG1fbGFzdENoaWxkKG51bGxwdHIpCiAgICAgLCBtX3N0eWxlKHN0ZDo6
bW92ZShzdHlsZSkpCkBAIC04MCw2ICs4MSw3IEBAIFJlbmRlckVsZW1lbnQ6OlJlbmRlckVsZW1l
bnQoRG9jdW1lbnQmIGQKICAgICAsIG1fYW5jZXN0b3JMaW5lQm94RGlydHkoZmFsc2UpCiAgICAg
LCBtX2hhc0luaXRpYWxpemVkU3R5bGUoZmFsc2UpCiAgICAgLCBtX3JlbmRlcklubGluZUFsd2F5
c0NyZWF0ZXNMaW5lQm94ZXMoZmFsc2UpCisgICAgLCBtX2hhc1BhdXNlZEltYWdlQW5pbWF0aW9u
cyhmYWxzZSkKICAgICAsIG1fZmlyc3RDaGlsZChudWxscHRyKQogICAgICwgbV9sYXN0Q2hpbGQo
bnVsbHB0cikKICAgICAsIG1fc3R5bGUoc3RkOjptb3ZlKHN0eWxlKSkKQEAgLTExOCw2ICsxMjAs
OCBAQCBSZW5kZXJFbGVtZW50Ojp+UmVuZGVyRWxlbWVudCgpCiAgICAgICAgIH0KICNlbmRpZgog
ICAgIH0KKyAgICBpZiAobV9oYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMpCisgICAgICAgIHZpZXco
KS5yZW1vdmVSZW5kZXJlcldpdGhQYXVzZWRJbWFnZUFuaW1hdGlvbnMoKnRoaXMpOwogfQogCiBS
ZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gUmVuZGVyRWxlbWVudDo6Y3JlYXRlRm9yKEVsZW1lbnQm
IGVsZW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxlKQpAQCAtMTI3NCw0ICsxMjc4LDQ0
IEBAIGJvb2wgUmVuZGVyRWxlbWVudDo6Ym9yZGVySW1hZ2VJc0xvYWRlZEEKICAgICByZXR1cm4g
Ym9yZGVySW1hZ2UgJiYgYm9yZGVySW1hZ2UtPmNhblJlbmRlcih0aGlzLCBzdHlsZSgpLmVmZmVj
dGl2ZVpvb20oKSkgJiYgYm9yZGVySW1hZ2UtPmlzTG9hZGVkKCk7CiB9CiAKK3N0YXRpYyBib29s
IHNob3VsZFJlcGFpbnRGb3JJbWFnZUFuaW1hdGlvbihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpCit7CisgICAgY29uc3QgRG9jdW1lbnQm
IGRvY3VtZW50ID0gcmVuZGVyZXIuZG9jdW1lbnQoKTsKKyAgICBpZiAoZG9jdW1lbnQuaW5QYWdl
Q2FjaGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChkb2N1bWVudC52aWV3KCkt
PmlzT2Zmc2NyZWVuKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgaWYgKGRvY3VtZW50LmZyYW1lKCktPnRpbWVyc1BhdXNlZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKKyAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRE9NT2JqZWN0c0FyZVN1
c3BlbmRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVyLnN0eWxl
KCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIXZpc2libGVSZWN0LmludGVyc2VjdHMocmVuZGVyZXIuYWJzb2x1dGVCb3VuZGluZ0JveFJl
Y3QoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFJlbmRlckVsZW1lbnQ6Om5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUoQ2FjaGVk
SW1hZ2UmIGltYWdlKQoreworICAgIGF1dG8gdmlzaWJsZVJlY3QgPSBkb2N1bWVudCgpLnZpZXco
KS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgaWYgKCFzaG91bGRSZXBhaW50Rm9ySW1hZ2VB
bmltYXRpb24oKnRoaXMsIHZpc2libGVSZWN0KSkgeworICAgICAgICB2aWV3KCkuYWRkUmVuZGVy
ZXJXaXRoUGF1c2VkSW1hZ2VBbmltYXRpb25zKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpbWFnZUNoYW5nZWQoJmltYWdlKTsKK30KKworYm9vbCBSZW5kZXJFbGVtZW50Ojpy
ZXBhaW50Rm9yUGF1c2VkSW1hZ2VBbmltYXRpb25zSWZOZWVkZWQoY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QpCit7CisgICAgQVNTRVJUKG1faGFzUGF1c2VkSW1hZ2VBbmltYXRpb25zKTsKKyAg
ICBpZiAoIXNob3VsZFJlcGFpbnRGb3JJbWFnZUFuaW1hdGlvbigqdGhpcywgdmlzaWJsZVJlY3Qp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVwYWludCgpOworICAgIHJldHVybiB0cnVl
OworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJ
KHJldmlzaW9uIDE2MzkwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsMTEgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzQmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAg
Ym9vbCByZXBhaW50Rm9yUGF1c2VkSW1hZ2VBbmltYXRpb25zSWZOZWVkZWQoY29uc3QgSW50UmVj
dCYgdmlzaWJsZVJlY3QpOworCisgICAgdm9pZCBzZXRIYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMo
Ym9vbCBiKSB7IG1faGFzUGF1c2VkSW1hZ2VBbmltYXRpb25zID0gYjsgfQorICAgIGJvb2wgaGFz
UGF1c2VkSW1hZ2VBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9oYXNQYXVzZWRJbWFnZUFu
aW1hdGlvbnM7IH0KKwogcHJvdGVjdGVkOgogICAgIGVudW0gQmFzZVR5cGVGbGFncyB7CiAgICAg
ICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3RGbGFnID0gMSA8PCAwLApAQCAtMTk4LDEyICsyMDMs
MTQgQEAgcHJpdmF0ZToKICAgICBTdHlsZURpZmZlcmVuY2UgYWRqdXN0U3R5bGVEaWZmZXJlbmNl
KFN0eWxlRGlmZmVyZW5jZSwgdW5zaWduZWQgY29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMpIGNv
bnN0OwogICAgIFJlbmRlclN0eWxlKiBjYWNoZWRGaXJzdExpbmVTdHlsZSgpIGNvbnN0OwogCisg
ICAgdmlydHVhbCB2b2lkIG5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUoQ2FjaGVkSW1h
Z2UmKSBvdmVycmlkZTsKKwogICAgIHVuc2lnbmVkIG1fYmFzZVR5cGVGbGFncyA6IDY7CiAgICAg
Ym9vbCBtX2FuY2VzdG9yTGluZUJveERpcnR5IDogMTsKICAgICBib29sIG1faGFzSW5pdGlhbGl6
ZWRTdHlsZSA6IDE7CiAKLSAgICAvLyBTcGVjaWZpYyB0byBSZW5kZXJJbmxpbmUuCiAgICAgYm9v
bCBtX3JlbmRlcklubGluZUFsd2F5c0NyZWF0ZXNMaW5lQm94ZXMgOiAxOworICAgIGJvb2wgbV9o
YXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMgOiAxOwogCiAgICAgUmVuZGVyT2JqZWN0KiBtX2ZpcnN0
Q2hpbGQ7CiAgICAgUmVuZGVyT2JqZWN0KiBtX2xhc3RDaGlsZDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNjM5MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIxMiwyNiArMjIxMiw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpjb2xsZWN0QW5ub3RhdGVkUmVn
aW8KIH0KICNlbmRpZgogCi1ib29sIFJlbmRlck9iamVjdDo6d2lsbFJlbmRlckltYWdlKENhY2hl
ZEltYWdlKikKLXsKLSAgICAvLyBXaXRob3V0IHZpc2liaWxpdHkgd2Ugd29uJ3QgcmVuZGVyIChh
bmQgdGhlcmVmb3JlIGRvbid0IGNhcmUgYWJvdXQgYW5pbWF0aW9uKS4KLSAgICBpZiAoc3R5bGUo
KS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYg
UExBVEZPUk0oSU9TKQotICAgIGlmIChkb2N1bWVudCgpLmZyYW1lKCktPnRpbWVyc1BhdXNlZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIC8vIFdlIHdpbGwgbm90IHJlbmRl
ciBhIG5ldyBpbWFnZSB3aGVuIEFjdGl2ZSBET00gaXMgc3VzcGVuZGVkCi0gICAgaWYgKGRvY3Vt
ZW50KCkuYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKLQotICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBhIHdpbmRvdyAoaS5lLiwgd2Un
cmUgZG9ybWFudCBmcm9tIGJlaW5nIHB1dCBpbiB0aGUgYi9mIGNhY2hlIG9yIGluIGEgYmFja2dy
b3VuZCB0YWIpCi0gICAgLy8gdGhlbiB3ZSBkb24ndCB3YW50IHRvIHJlbmRlciBlaXRoZXIuCi0g
ICAgcmV0dXJuICFkb2N1bWVudCgpLmluUGFnZUNhY2hlKCkgJiYgIWRvY3VtZW50KCkudmlldygp
LT5pc09mZnNjcmVlbigpOwotfQotCiBpbnQgUmVuZGVyT2JqZWN0OjptYXhpbWFsT3V0bGluZVNp
emUoUGFpbnRQaGFzZSBwKSBjb25zdAogewogICAgIGlmIChwICE9IFBhaW50UGhhc2VPdXRsaW5l
ICYmIHAgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lICYmIHAgIT0gUGFpbnRQaGFzZUNoaWxkT3V0
bGluZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZp
c2lvbiAxNjM5MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg0OSw3ICs4NDksNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgaW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29uc3QgSW50UmVjdCogPSAwKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29u
c3QgSW50UmVjdCogPSAwKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgd2lsbFJlbmRlckltYWdlKENh
Y2hlZEltYWdlKikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYg
c3BvcywgaW50JiBlcG9zKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDE2MzkwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3OCw2ICsxMTc4LDM3
IEBAIEltYWdlUXVhbGl0eUNvbnRyb2xsZXImIFJlbmRlclZpZXc6OmltYWcKICAgICByZXR1cm4g
Km1faW1hZ2VRdWFsaXR5Q29udHJvbGxlcjsKIH0KIAordm9pZCBSZW5kZXJWaWV3OjphZGRSZW5k
ZXJlcldpdGhQYXVzZWRJbWFnZUFuaW1hdGlvbnMoIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQor
eworICAgIGlmIChyZW5kZXJlci5oYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMoKSkgeworICAgICAg
ICBBU1NFUlQobV9yZW5kZXJlcnNXaXRoUGF1c2VkSW1hZ2VBbmltYXRpb24uY29udGFpbnMoJnJl
bmRlcmVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVuZGVyZXIuc2V0SGFzUGF1
c2VkSW1hZ2VBbmltYXRpb25zKHRydWUpOworICAgIG1fcmVuZGVyZXJzV2l0aFBhdXNlZEltYWdl
QW5pbWF0aW9uLmFkZCgmcmVuZGVyZXIpOworfQorCit2b2lkIFJlbmRlclZpZXc6OnJlbW92ZVJl
bmRlcmVyV2l0aFBhdXNlZEltYWdlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlcikK
K3sKKyAgICBBU1NFUlQocmVuZGVyZXIuaGFzUGF1c2VkSW1hZ2VBbmltYXRpb25zKCkpOworICAg
IEFTU0VSVChtX3JlbmRlcmVyc1dpdGhQYXVzZWRJbWFnZUFuaW1hdGlvbi5jb250YWlucygmcmVu
ZGVyZXIpKTsKKworICAgIHJlbmRlcmVyLnNldEhhc1BhdXNlZEltYWdlQW5pbWF0aW9ucyhmYWxz
ZSk7CisgICAgbV9yZW5kZXJlcnNXaXRoUGF1c2VkSW1hZ2VBbmltYXRpb24ucmVtb3ZlKCZyZW5k
ZXJlcik7Cit9CisKK3ZvaWQgUmVuZGVyVmlldzo6cmVzdW1lUGF1c2VkSW1hZ2VBbmltYXRpb25z
SWZOZWVkZWQoKQoreworICAgIGF1dG8gdmlzaWJsZVJlY3QgPSBmcmFtZVZpZXcoKS52aXNpYmxl
Q29udGVudFJlY3QoKTsKKyAgICBWZWN0b3I8UmVuZGVyRWxlbWVudCo+IHRvUmVtb3ZlOworICAg
IGZvciAoYXV0byYgcmVuZGVyZXIgOiBtX3JlbmRlcmVyc1dpdGhQYXVzZWRJbWFnZUFuaW1hdGlv
bikgeworICAgICAgICBpZiAocmVuZGVyZXItPnJlcGFpbnRGb3JQYXVzZWRJbWFnZUFuaW1hdGlv
bnNJZk5lZWRlZCh2aXNpYmxlUmVjdCkpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQocmVu
ZGVyZXIpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDogdG9SZW1vdmUpCisgICAg
ICAgIHJlbW92ZVJlbmRlcmVyV2l0aFBhdXNlZEltYWdlQW5pbWF0aW9ucygqcmVuZGVyZXIpOwor
fQorCiBSZW5kZXJWaWV3OjpSZXBhaW50UmVnaW9uQWNjdW11bGF0b3I6OlJlcGFpbnRSZWdpb25B
Y2N1bXVsYXRvcihSZW5kZXJWaWV3KiB2aWV3KQogICAgIDogbV9yb290Vmlldyh2aWV3ID8gdmll
dy0+ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgpLnJlbmRlclZpZXcoKSA6IG51bGxwdHIpCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDE2MzkwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJQT0RGcmVlTGlzdEFyZW5hLmgiCiAjaW5jbHVk
ZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTIxOSw2ICsyMjAsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZGlkQ3JlYXRlUmVuZGVy
ZXIoKSB7ICsrbV9yZW5kZXJlckNvdW50OyB9CiAgICAgdm9pZCBkaWREZXN0cm95UmVuZGVyZXIo
KSB7IC0tbV9yZW5kZXJlckNvdW50OyB9CiAKKyAgICB2b2lkIHJlc3VtZVBhdXNlZEltYWdlQW5p
bWF0aW9uc0lmTmVlZGVkKCk7CisgICAgdm9pZCBhZGRSZW5kZXJlcldpdGhQYXVzZWRJbWFnZUFu
aW1hdGlvbnMoUmVuZGVyRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlUmVuZGVyZXJXaXRoUGF1
c2VkSW1hZ2VBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmKTsKKwogICAgIGNsYXNzIFJlcGFpbnRS
ZWdpb25BY2N1bXVsYXRvciB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlcGFpbnRS
ZWdpb25BY2N1bXVsYXRvcik7CiAgICAgcHVibGljOgpAQCAtMzQwLDYgKzM0NSw4IEBAIHByaXZh
dGU6CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgIGJvb2wgbV9oYXNTb2Z0d2FyZUZpbHRl
cnM7CiAjZW5kaWYKKworICAgIEhhc2hTZXQ8UmVuZGVyRWxlbWVudCo+IG1fcmVuZGVyZXJzV2l0
aFBhdXNlZEltYWdlQW5pbWF0aW9uOwogfTsKIAogUkVOREVSX09CSkVDVF9UWVBFX0NBU1RTKFJl
bmRlclZpZXcsIGlzUmVuZGVyVmlldygpKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzOTE4KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTQtMDItMTEgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIEdJ
RiBhbmltYXRpb25zIHNob3VsZCBiZSBzdXNwZW5kZWQgd2hlbiBvdXRzaWRlIG9mIHZpZXdwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg2MzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3Qv
cmVwYWludC9uby1hbmltYXRpb24tb3V0c2lkZS12aWV3cG9ydC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvcmVwYWludC9uby1hbmltYXRpb24tb3V0c2lkZS12aWV3cG9ydC5o
dG1sOiBBZGRlZC4KKwogMjAxNC0wMi0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRA
YXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgcG9zaXRpb246c3RpY2t5IGFuZCBwb3NpdGlv
bjpmaXhlZCBwcm9wZXJ0aWVzIHRvIHBvc2l0aW9uOnN0YXRpYyBhbmQgcG9zaXRpb246YWJzb2x1
dGUgdXBvbiBjb3B5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3JlcGFpbnQvbm8tYW5pbWF0aW9u
LW91dHNpZGUtdmlld3BvcnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvcmVwYWludC9uby1hbmltYXRpb24tb3V0c2lkZS12aWV3cG9ydC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3JlcGFpbnQvbm8tYW5pbWF0aW9uLW91
dHNpZGUtdmlld3BvcnQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAg
QEAKK1Rlc3QgdGhhdCBhbmltYXRlZCBnaWYgb3V0c2lkZSB2aWV3cG9ydCBkb2VzIG5vdCB0cmln
Z2VyIHJlcGFpbnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHJlcGFp
bnRSZWN0cyBpcyAiIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcmVwYWludC9uby1hbmltYXRpb24tb3V0
c2lkZS12aWV3cG9ydC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcmVwYWlu
dC9uby1hbmltYXRpb24tb3V0c2lkZS12aWV3cG9ydC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9yZXBhaW50L25vLWFuaW1hdGlvbi1vdXRzaWRlLXZpZXdwb3J0Lmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+
anNUZXN0SXNBc3luYyA9IHRydWU7PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24o
IlRlc3QgdGhhdCBhbmltYXRlZCBnaWYgb3V0c2lkZSB2aWV3cG9ydCBkb2VzIG5vdCB0cmlnZ2Vy
IHJlcGFpbnQuIik7CisgICAgZnVuY3Rpb24gc3RhcnRUcmFja2luZ1JlcGFpbnRzKCkKKyAgICB7
CisgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworICAgICAgICB3aW5kb3cuaW50ZXJu
YWxzLnN0YXJ0VHJhY2tpbmdSZXBhaW50cygpOworICAgICAgICB0ZXN0UnVubmVyLmRpc3BsYXko
KTsKKyAgICAgICAgc2V0VGltZW91dChsb2dSZXBhaW50cywgMjAwKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBsb2dSZXBhaW50cygpCisgICAgeworICAgICAgICByZXBhaW50UmVjdHMgPSB3aW5k
b3cuaW50ZXJuYWxzLnJlcGFpbnRSZWN0c0FzVGV4dCgpOworICAgICAgICB3aW5kb3cuaW50ZXJu
YWxzLnN0b3BUcmFja2luZ1JlcGFpbnRzKCk7CisKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJyZXBhaW50UmVjdHMiLCAiIik7CisKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGlmICghd2luZG93LnRlc3RSdW5u
ZXIgfHwgIXdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dmFyIGltZyA9IG5ldyBJbWFnZSgpOworICAgICAgICBpbWcub25sb2FkID0gc3RhcnRUcmFja2lu
Z1JlcGFpbnRzOworICAgICAgICBpbWcuc3JjID0gInJlc291cmNlcy9hbmltYXRlZC5naWYiOwor
ICAgIH0KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJzdGFydCgpIj4KKzxkaXYg
c3R5bGU9ImhlaWdodDo2MDBweCI+PC9kaXY+Cis8aW1nIHNyYz0icmVzb3VyY2VzL2FuaW1hdGVk
LmdpZiI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="247996"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>