<?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>73074</bug_id>
          
          <creation_ts>2011-11-24 02:26:25 -0800</creation_ts>
          <short_desc>StyleGeneratedImage should ref CSSImageGeneratorValue</short_desc>
          <delta_ts>2011-11-25 10:12:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>508684</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-24 02:26:25 -0800</bug_when>
    <thetext>RenderStyle owns StyleImage objects. However StyleGeneratedImage does not ref the CSSImageGeneratorValue it holds. It should do this to guarantee that the CSSImageGeneratorValue does not die before the RenderStyle does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508710</commentid>
    <comment_count>1</comment_count>
      <attachid>116497</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-24 04:28:27 -0800</bug_when>
    <thetext>Created attachment 116497
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508712</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-24 04:29:51 -0800</bug_when>
    <thetext>Attachment 116497 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/css/CSSStyleSelector.h:346:  The return type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSStyleApplyProperty.cpp:889:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/css/CSSStyleSelector.cpp:5743:  The return type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 9 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>508742</commentid>
    <comment_count>3</comment_count>
      <attachid>116497</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-24 06:13:30 -0800</bug_when>
    <thetext>Comment on attachment 116497
patch

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

Much nicer approach! Though style bot &amp; me still see some issues:

&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:898
&gt; -    setPropertyHandler(CSSPropertyBackgroundImage, ApplyPropertyFillLayer&lt;StyleImage*, CSSPropertyBackgroundImage, BackgroundFillLayer, &amp;RenderStyle::accessBackgroundLayers, &amp;RenderStyle::backgroundLayers,
&gt; +    setPropertyHandler(CSSPropertyBackgroundImage, ApplyPropertyFillLayer&lt;StyleImage*, PassRefPtr&lt;StyleImage&gt;, CSSPropertyBackgroundImage, BackgroundFillLayer, &amp;RenderStyle::accessBackgroundLayers, &amp;RenderStyle::backgroundLayers,
&gt;                         &amp;FillLayer::isImageSet, &amp;FillLayer::image, &amp;FillLayer::setImage, &amp;FillLayer::clearImage, &amp;FillLayer::initialFillImage, &amp;CSSStyleSelector::mapFillImage&gt;::createHandler());
&gt;  
&gt; -    setPropertyHandler(CSSPropertyBackgroundOrigin, ApplyPropertyFillLayer&lt;EFillBox, CSSPropertyBackgroundOrigin, BackgroundFillLayer, &amp;RenderStyle::accessBackgroundLayers, &amp;RenderStyle::backgroundLayers,
&gt; +    setPropertyHandler(CSSPropertyBackgroundOrigin, ApplyPropertyFillLayer&lt;EFillBox, EFillBox, CSSPropertyBackgroundOrigin, BackgroundFillLayer, &amp;RenderStyle::accessBackgroundLayers, &amp;RenderStyle::backgroundLayers,

I don&apos;t like this kind of mechanic change, instead you could use a &quot;decorator&quot; which figures out the right type.
template&lt;typename T&gt;
struct Decorator {
     typedef typename T Setter;
     typedef typename T Getter;
};

template&lt;&gt;
struct Decorator&lt;StyleImage&gt; {
    typedef typename PassRefPtr&lt;StyleImage&gt; Setter;
    typedef typename StyleImage* Getter;
};

What do you think?

&gt; Source/WebCore/css/CSSStyleSelector.cpp:5775
&gt; +                        RefPtr&lt;StyleImage&gt; loadedImage = loadPendingImage(static_cast&lt;StylePendingImage*&gt;(backgroundLayer-&gt;image()));
&gt; +                        backgroundLayer-&gt;setImage(loadedImage.release());

I&apos;d combine this to avoid a unncessary ref&apos;ing.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:5787
&gt; -                            StyleImage* loadedImage = loadPendingImage(static_cast&lt;StylePendingImage*&gt;(image));
&gt; +                            RefPtr&lt;StyleImage&gt; loadedImage = loadPendingImage(static_cast&lt;StylePendingImage*&gt;(image));
&gt;                              if (loadedImage)
&gt; -                                static_cast&lt;ImageContentData*&gt;(contentData)-&gt;setImage(loadedImage);
&gt; +                                static_cast&lt;ImageContentData*&gt;(contentData)-&gt;setImage(loadedImage.release());

If we handle null images in ImageContentData::setImage(), this could turn into a simple
static_cast&lt;ImageContentData*&gt;(contentData)-&gt;setImage(loadPendingImage(...

&gt; Source/WebCore/css/CSSStyleSelector.cpp:5800
&gt; +                                RefPtr&lt;StyleImage&gt; loadedImage = loadPendingImage(static_cast&lt;StylePendingImage*&gt;(image));
&gt; +                                currentCursor.setImage(loadedImage.release());

Could be combined into a single statement.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:5810
&gt; +                    RefPtr&lt;StyleImage&gt; loadedImage = loadPendingImage(static_cast&lt;StylePendingImage*&gt;(m_style-&gt;listStyleImage()));
&gt; +                    m_style-&gt;setListStyleImage(loadedImage.release());

Ditto.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:5817
&gt; +                    RefPtr&lt;StyleImage&gt; loadedImage = loadPendingImage(static_cast&lt;StylePendingImage*&gt;(m_style-&gt;borderImageSource()));
&gt; +                    m_style-&gt;setBorderImageSource(loadedImage.release());

Ditto.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:5826
&gt; +                        RefPtr&lt;StyleImage&gt; loadedImage = loadPendingImage(static_cast&lt;StylePendingImage*&gt;(maskImage.image()));
&gt; +                        reflection-&gt;setMask(NinePieceImage(loadedImage.release(), maskImage.imageSlices(), maskImage.fill(), maskImage.borderSlices(), maskImage.outset(), maskImage.horizontalRule(), maskImage.verticalRule()));

Ditto (though here it would really hurt the readability)

&gt; Source/WebCore/css/CSSStyleSelector.cpp:5834
&gt; +                    RefPtr&lt;StyleImage&gt; loadedImage = loadPendingImage(static_cast&lt;StylePendingImage*&gt;(m_style-&gt;maskBoxImageSource()));
&gt; +                    m_style-&gt;setMaskBoxImageSource(loadedImage.release());

Ditto.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:5842
&gt; +                        RefPtr&lt;StyleImage&gt; loadedImage = loadPendingImage(static_cast&lt;StylePendingImage*&gt;(maskLayer-&gt;image()));
&gt; +                        maskLayer-&gt;setImage(loadedImage.release());

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508749</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-24 06:27:57 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; I&apos;d combine this to avoid a unncessary ref&apos;ing.
To correct myself: unnecessary conversion from PassRefPtr to RefPtr and then again to PassRefPtr, where we could instead just pass on the PassRefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509104</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-25 05:14:07 -0800</bug_when>
    <thetext>(In reply to comment #3)

&gt; I don&apos;t like this kind of mechanic change, instead you could use a &quot;decorator&quot; which figures out the right type.
&gt; template&lt;typename T&gt;
&gt; struct Decorator {
&gt;      typedef typename T Setter;
&gt;      typedef typename T Getter;
&gt; };
&gt; 
&gt; template&lt;&gt;
&gt; struct Decorator&lt;StyleImage&gt; {
&gt;     typedef typename PassRefPtr&lt;StyleImage&gt; Setter;
&gt;     typedef typename StyleImage* Getter;
&gt; };
&gt; 
&gt; What do you think?

Good idea. Did this.

&gt; 
&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:5775
&gt; &gt; +                        RefPtr&lt;StyleImage&gt; loadedImage = loadPendingImage(static_cast&lt;StylePendingImage*&gt;(backgroundLayer-&gt;image()));
&gt; &gt; +                        backgroundLayer-&gt;setImage(loadedImage.release());
&gt; 
&gt; I&apos;d combine this to avoid a unncessary ref&apos;ing.

I don&apos;t think there is unnecessary reffing as release() is used consistently. However you are right that the lines can be combined. Did some of this.

&gt; If we handle null images in ImageContentData::setImage(), this could turn into a simple
&gt; static_cast&lt;ImageContentData*&gt;(contentData)-&gt;setImage(loadPendingImage(…

I don&apos;t think that&apos;s a good idea. Setters that silently ignore some values (null in this case) are confusing. It might be a behavior change too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509113</commentid>
    <comment_count>6</comment_count>
      <attachid>116604</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-25 05:30:57 -0800</bug_when>
    <thetext>Created attachment 116604
patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509115</commentid>
    <comment_count>7</comment_count>
      <attachid>116604</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-11-25 05:36:11 -0800</bug_when>
    <thetext>Comment on attachment 116604
patch2

Attachment 116604 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10642368</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509116</commentid>
    <comment_count>8</comment_count>
      <attachid>116606</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-25 05:37:11 -0800</bug_when>
    <thetext>Created attachment 116606
patch3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509195</commentid>
    <comment_count>9</comment_count>
      <attachid>116631</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-25 09:08:48 -0800</bug_when>
    <thetext>Created attachment 116631
patch4

Got rid of the CSSImageGeneratorValue::generatedOrPendingImage() and CSSImageGeneratorValue::generatedImage() as those are now rather pointless. Also cleaned up the CSSImageGeneratorValue constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509198</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-25 09:27:33 -0800</bug_when>
    <thetext>I mean StyleGeneratedImage constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509204</commentid>
    <comment_count>11</comment_count>
      <attachid>116631</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-11-25 09:57:19 -0800</bug_when>
    <thetext>Comment on attachment 116631
patch4

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

r=me. Patch looks great, and I believe you&apos;ve addressed the issues Nikolas brought up.

&gt; Source/WebCore/css/CSSImageGeneratorValue.cpp:40
&gt;  CSSImageGeneratorValue::CSSImageGeneratorValue(ClassType classType)

Unrelated to this patch: CSSImageGeneratorValue&apos;s ctor and dtor could be inlined.

&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:394
&gt; +    typedef T Setter;
&gt; +    typedef T Getter;

I think Setter/Getter are poor names here. SetterType/GetterType perhaps?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509206</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-25 10:09:16 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/101177</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509208</commentid>
    <comment_count>13</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-25 10:12:41 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:394
&gt; &gt; +    typedef T Setter;
&gt; &gt; +    typedef T Getter;
&gt; 
&gt; I think Setter/Getter are poor names here. SetterType/GetterType perhaps?

As discussed, I kept these as is as the names are in the FillLayerAccessorTypes namespace.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116497</attachid>
            <date>2011-11-24 04:28:27 -0800</date>
            <delta_ts>2011-11-25 05:30:57 -0800</delta_ts>
            <desc>patch</desc>
            <filename>generated-image-ref.patch</filename>
            <type>text/plain</type>
            <size>32414</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTEzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDExLTExLTI0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTdHlsZUdlbmVyYXRlZEltYWdl
IHNob3VsZCByZWYgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNzQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFJlbmRlclN0eWxlIG93bnMgYSBidW5j
aCBvZiBTdHlsZUltYWdlIG9iamVjdHMuIEhvd2V2ZXIgU3R5bGVHZW5lcmF0ZWRJbWFnZSBkb2Vz
IG5vdCByZWYgdGhlCisgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUgaXQgaG9sZHMgc28g
d2UgY3VycmVudGx5IHJlbHkgb24gdGhlIHN0eWxlc2hlZXQgdG8ga2VlcCB0aGUgQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZXMKKyAgICAgICAgYWxpdmUgYXMgbG9uZyBhcyBSZW5kZXJTdHlsZSBzdGF5
cyBhbGl2ZS4gV2hpbGUgdGhpcyB3b3JrcyAoUmVuZGVyU3R5bGVzIGFyZSB0aHJvd24gYXdheSBp
ZiBzdHlsZXNoZWV0cworICAgICAgICBjaGFuZ2UpIGl0IGlzIG5vdCBwYXJ0aWN1bGFybHkgcm9i
dXN0IG9yIG5pY2UuCisKKyAgICAgICAgLSBVc2UgUmVmUHRyPENTU0ltYWdlR2VuZXJhdG9yVmFs
dWU+IGluIFN0eWxlR2VuZXJhdGVkSW1hZ2UKKyAgICAgICAgLSBSZW1vdmUgdGhlIFJlZlB0cjxT
dHlsZUdlbmVyYXRlZEltYWdlPiBmcm9tIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUuCisgICAgICAg
ICAgVGhlcmUgaXMgbm8gZ29vZCByZWFzb24gdG8gY2FjaGUgU3R5bGVHZW5lcmF0ZWRJbWFnZSBh
cyBpdCBpcyBhIHNtYWxsIGFuZAorICAgICAgICAgIHVuY29tbW9uIG9iamVjdC4gV2l0aCB0aGF0
IHRoZSB3aG9sZSBiYWNrLXJlZmVyZW5jZSBiZWNvbWVzIHVubmVjZXNzYXJ5LgorICAgICAgICAt
IFN3aXRjaCBtb3JlIHBsYWNlcyB0byB1c2UgKFBhc3MpUmVmUHRyPFN0eWxlSW1hZ2U+IGZvciBj
b25zaXN0ZW5jeS4KKworICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OkNTU0ltYWdlR2VuZXJh
dG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Z2Vu
ZXJhdGVkT3JQZW5kaW5nSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZTo6Z2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRv
clZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZUFwcGx5UHJvcGVydHk6OkNTU1N0eWxlQXBwbHlQcm9wZXJ0
eSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvYWRQZW5kaW5nSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bG9hZFBlbmRpbmdJbWFnZXMpOgorICAgICAg
ICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0Zp
bGxMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVyOjpzZXRJbWFnZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOaW5lUGllY2VJbWFnZTo6TmluZVBpZWNlSW1hZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUdlbmVy
YXRlZEltYWdlOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlR2VuZXJhdGVkSW1hZ2U6
OlN0eWxlR2VuZXJhdGVkSW1hZ2UpOgorCiAyMDExLTExLTI0ICBQaGlsaXBwZSBOb3JtYW5kICA8
cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBGaXggQVNTRVJUcyBhZGRlZCBpbiByMTAx
MDgyLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVl
LmNwcAkocmV2aXNpb24gMTAxMTMwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Q1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZShDbGFzc1R5cGUgY2xhc3NUeXBlKQogICAgIDogQ1NTVmFsdWUoY2xhc3NUeXBlKQotICAg
ICwgbV9hY2Nlc3NlZEltYWdlKGZhbHNlKQogewogfQogCkBAIC0xMTEsMjYgKzExMCwxNiBAQCB2
b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnB1dEltYWdlKGNvCiAgICAgbV9pbWFnZXMuYWRk
KHNpemUsIGltYWdlKTsKIH0KIAotU3R5bGVJbWFnZSogQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6
Z2VuZXJhdGVkT3JQZW5kaW5nSW1hZ2UoKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlOjpnZW5lcmF0ZWRPclBlbmRpbmdJbWFnZSgpCiB7CiAgICAgaWYgKGlz
UGVuZGluZygpKQotICAgICAgICBtX2ltYWdlID0gU3R5bGVQZW5kaW5nSW1hZ2U6OmNyZWF0ZSh0
aGlzKS5nZXQoKTsKLSAgICBlbHNlIGlmICghbV9hY2Nlc3NlZEltYWdlKSB7Ci0gICAgICAgIG1f
YWNjZXNzZWRJbWFnZSA9IHRydWU7Ci0gICAgICAgIG1faW1hZ2UgPSBTdHlsZUdlbmVyYXRlZElt
YWdlOjpjcmVhdGUodGhpcywgaXNGaXhlZFNpemUoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1f
aW1hZ2UuZ2V0KCk7CisgICAgICAgIHJldHVybiBTdHlsZVBlbmRpbmdJbWFnZTo6Y3JlYXRlKHRo
aXMpLmdldCgpOworICAgIHJldHVybiBnZW5lcmF0ZWRJbWFnZSgpOwogfQogCi1TdHlsZUdlbmVy
YXRlZEltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZW5lcmF0ZWRJbWFnZSgpCitQYXNz
UmVmUHRyPFN0eWxlR2VuZXJhdGVkSW1hZ2U+IENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdlbmVy
YXRlZEltYWdlKCkKIHsKLSAgICBpZiAoIW1fYWNjZXNzZWRJbWFnZSkgewotICAgICAgICBtX2Fj
Y2Vzc2VkSW1hZ2UgPSB0cnVlOwotICAgICAgICBtX2ltYWdlID0gU3R5bGVHZW5lcmF0ZWRJbWFn
ZTo6Y3JlYXRlKHRoaXMsIGlzRml4ZWRTaXplKCkpOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxTdHlsZUdlbmVyYXRlZEltYWdlKj4obV9pbWFnZS5nZXQoKSk7CisgICAgcmV0dXJu
IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSh0aGlzLCBpc0ZpeGVkU2l6ZSgpKTsKIH0KIAog
UGFzc1JlZlB0cjxJbWFnZT4gQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aW1hZ2UoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaAkocmV2aXNpb24gMTAxMTMwKQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVDbGllbnQoUmVuZGVyT2Jq
ZWN0Kik7CiAgICAgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
SW50U2l6ZSYpOwogCi0gICAgU3R5bGVJbWFnZSogZ2VuZXJhdGVkT3JQZW5kaW5nSW1hZ2UoKTsK
LSAgICBTdHlsZUdlbmVyYXRlZEltYWdlKiBnZW5lcmF0ZWRJbWFnZSgpOworICAgIFBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nSW1hZ2UoKTsKKyAgICBQYXNzUmVmUHRy
PFN0eWxlR2VuZXJhdGVkSW1hZ2U+IGdlbmVyYXRlZEltYWdlKCk7CiAKICAgICBib29sIGlzRml4
ZWRTaXplKCkgY29uc3Q7CiAgICAgSW50U2l6ZSBmaXhlZFNpemUoY29uc3QgUmVuZGVyT2JqZWN0
Kik7CkBAIC03Nyw5ICs3Nyw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHB1dEltYWdlKGNvbnN0
IEludFNpemUmLCBQYXNzUmVmUHRyPEltYWdlPik7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0U2l6
ZUNvdW50TWFwJiBjbGllbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRzOyB9CiAKLSAgICBS
ZWZQdHI8U3R5bGVJbWFnZT4gbV9pbWFnZTsKLSAgICBib29sIG1fYWNjZXNzZWRJbWFnZTsKLQog
ICAgIEhhc2hDb3VudGVkU2V0PEludFNpemU+IG1fc2l6ZXM7IC8vIEEgY291bnQgb2YgaG93IG1h
bnkgdGltZXMgYSBnaXZlbiBpbWFnZSBzaXplIGlzIGluIHVzZS4KICAgICBSZW5kZXJPYmplY3RT
aXplQ291bnRNYXAgbV9jbGllbnRzOyAvLyBBIG1hcCBmcm9tIFJlbmRlck9iamVjdHMgKHdpdGgg
ZW50cnkgY291bnQpIHRvIGltYWdlIHNpemVzLgogICAgIEhhc2hNYXA8SW50U2l6ZSwgUmVmUHRy
PEltYWdlPiA+IG1faW1hZ2VzOyAvLyBBIGNhY2hlIG9mIEltYWdlIG9iamVjdHMgYnkgaW1hZ2Ug
c2l6ZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJvcGVydHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJvcGVydHku
Y3BwCShyZXZpc2lvbiAxMDExMzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBs
eVByb3BlcnR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5LDEzICszODksMTQgQEAgcHVibGlj
OgogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsCisgICAgICAgICAgdHlwZW5hbWUgU2V0dGVy
VCwKICAgICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsCiAgICAgICAgICAgRUZpbGxM
YXllclR5cGUgZmlsbExheWVyVHlwZSwKICAgICAgICAgICBGaWxsTGF5ZXIqIChSZW5kZXJTdHls
ZTo6KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpLAogICAgICAgICAgIGNvbnN0IEZpbGxMYXllciog
KFJlbmRlclN0eWxlOjoqbGF5ZXJzRnVuY3Rpb24pKCkgY29uc3QsCiAgICAgICAgICAgYm9vbCAo
RmlsbExheWVyOjoqdGVzdEZ1bmN0aW9uKSgpIGNvbnN0LAogICAgICAgICAgIFQgKEZpbGxMYXll
cjo6KmdldEZ1bmN0aW9uKSgpIGNvbnN0LAotICAgICAgICAgIHZvaWQgKEZpbGxMYXllcjo6KnNl
dEZ1bmN0aW9uKShUKSwKKyAgICAgICAgICB2b2lkIChGaWxsTGF5ZXI6OipzZXRGdW5jdGlvbiko
U2V0dGVyVCksCiAgICAgICAgICAgdm9pZCAoRmlsbExheWVyOjoqY2xlYXJGdW5jdGlvbikoKSwK
ICAgICAgICAgICBUICgqaW5pdGlhbEZ1bmN0aW9uKShFRmlsbExheWVyVHlwZSksCiAgICAgICAg
ICAgdm9pZCAoQ1NTU3R5bGVTZWxlY3Rvcjo6Km1hcEZpbGxGdW5jdGlvbikoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKT4KQEAgLTg4Myw2MSArODg0LDYxIEBAIENTU1N0eWxl
QXBwbHlQcm9wZXJ0eTo6Q1NTU3R5bGVBcHBseVByb3AKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlDb2xvciwgQXBwbHlQcm9wZXJ0eUNvbG9yPEluaGVyaXRGcm9tUGFyZW50LCAm
UmVuZGVyU3R5bGU6OmNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldFZpc2l0ZWRMaW5rQ29sb3IsICZSZW5kZXJTdHlsZTo6aW52YWxpZENvbG9yLCBSZW5kZXJT
dHlsZTo6aW5pdGlhbENvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIEFwcGx5UHJvcGVydHlEaXJlY3Rpb248JlJlbmRl
clN0eWxlOjpkaXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6c2V0RGlyZWN0aW9uLCBSZW5kZXJTdHls
ZTo6aW5pdGlhbERpcmVjdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7CiAKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudCwgQXBwbHlQcm9wZXJ0eUZp
bGxMYXllcjxFRmlsbEF0dGFjaG1lbnQsIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQs
IEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVy
cywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLAorICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50LCBBcHBseVByb3BlcnR5RmlsbExheWVy
PEVGaWxsQXR0YWNobWVudCwgRUZpbGxBdHRhY2htZW50LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRB
dHRhY2htZW50LCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tn
cm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywKICAgICAgICAgICAg
ICAgICAgICAgICAgJkZpbGxMYXllcjo6aXNBdHRhY2htZW50U2V0LCAmRmlsbExheWVyOjphdHRh
Y2htZW50LCAmRmlsbExheWVyOjpzZXRBdHRhY2htZW50LCAmRmlsbExheWVyOjpjbGVhckF0dGFj
aG1lbnQsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQXR0YWNobWVudCwgJkNTU1N0eWxlU2VsZWN0
b3I6Om1hcEZpbGxBdHRhY2htZW50Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXll
cjxFRmlsbEJveCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCwgQmFja2dyb3VuZEZpbGxMYXll
ciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJh
Y2tncm91bmRMYXllcnMsCisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dy
b3VuZENsaXAsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxCb3gsIEVGaWxsQm94LENTU1By
b3BlcnR5QmFja2dyb3VuZENsaXAsIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6
YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLAog
ICAgICAgICAgICAgICAgICAgICAgICAmRmlsbExheWVyOjppc0NsaXBTZXQsICZGaWxsTGF5ZXI6
OmNsaXAsICZGaWxsTGF5ZXI6OnNldENsaXAsICZGaWxsTGF5ZXI6OmNsZWFyQ2xpcCwgJkZpbGxM
YXllcjo6aW5pdGlhbEZpbGxDbGlwLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbENsaXA+Ojpj
cmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dEJhY2tncm91bmRDbGlwLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlLCBBcHBseVBy
b3BlcnR5RmlsbExheWVyPENvbXBvc2l0ZU9wZXJhdG9yLCBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tn
cm91bmRDb21wb3NpdGUsIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNz
QmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLAorICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGUsIEFw
cGx5UHJvcGVydHlGaWxsTGF5ZXI8Q29tcG9zaXRlT3BlcmF0b3IsIENvbXBvc2l0ZU9wZXJhdG9y
LCBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGUsIEJhY2tncm91bmRGaWxsTGF5
ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpi
YWNrZ3JvdW5kTGF5ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAmRmlsbExheWVyOjppc0Nv
bXBvc2l0ZVNldCwgJkZpbGxMYXllcjo6Y29tcG9zaXRlLCAmRmlsbExheWVyOjpzZXRDb21wb3Np
dGUsICZGaWxsTGF5ZXI6OmNsZWFyQ29tcG9zaXRlLCAmRmlsbExheWVyOjppbml0aWFsRmlsbENv
bXBvc2l0ZSwgJkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxDb21wb3NpdGU+OjpjcmVhdGVIYW5k
bGVyKCkpOwogCi0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZElt
YWdlLCBBcHBseVByb3BlcnR5RmlsbExheWVyPFN0eWxlSW1hZ2UqLCBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRJbWFnZSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNr
Z3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsCisgICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCBBcHBseVByb3BlcnR5Rmls
bExheWVyPFN0eWxlSW1hZ2UqLCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+LCBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRJbWFnZSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NC
YWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICZGaWxsTGF5ZXI6OmlzSW1hZ2VTZXQsICZGaWxsTGF5ZXI6OmltYWdl
LCAmRmlsbExheWVyOjpzZXRJbWFnZSwgJkZpbGxMYXllcjo6Y2xlYXJJbWFnZSwgJkZpbGxMYXll
cjo6aW5pdGlhbEZpbGxJbWFnZSwgJkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxJbWFnZT46OmNy
ZWF0ZUhhbmRsZXIoKSk7CiAKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kT3JpZ2luLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEVGaWxsQm94LCBDU1NQcm9wZXJ0
eUJhY2tncm91bmRPcmlnaW4sIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNj
ZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLAorICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4sIEFwcGx5UHJv
cGVydHlGaWxsTGF5ZXI8RUZpbGxCb3gsIEVGaWxsQm94LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRP
cmlnaW4sIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3Vu
ZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLAogICAgICAgICAgICAgICAg
ICAgICAgICAmRmlsbExheWVyOjppc09yaWdpblNldCwgJkZpbGxMYXllcjo6b3JpZ2luLCAmRmls
bExheWVyOjpzZXRPcmlnaW4sICZGaWxsTGF5ZXI6OmNsZWFyT3JpZ2luLCAmRmlsbExheWVyOjpp
bml0aWFsRmlsbE9yaWdpbiwgJkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxPcmlnaW4+OjpjcmVh
dGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJh
Y2tncm91bmRPcmlnaW4sIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbik7CiAKLSAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCBBcHBseVByb3Bl
cnR5RmlsbExheWVyPExlbmd0aCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCBCYWNr
Z3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZS
ZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCBBcHBseVByb3BlcnR5RmlsbExheWVyPExlbmd0
aCwgTGVuZ3RoLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsIEJhY2tncm91bmRGaWxs
TGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxl
OjpiYWNrZ3JvdW5kTGF5ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAmRmlsbExheWVyOjpp
c1hQb3NpdGlvblNldCwgJkZpbGxMYXllcjo6eFBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRYUG9z
aXRpb24sICZGaWxsTGF5ZXI6OmNsZWFyWFBvc2l0aW9uLCAmRmlsbExheWVyOjppbml0aWFsRmls
bFhQb3NpdGlvbiwgJkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxYUG9zaXRpb24+OjpjcmVhdGVI
YW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQ
b3NpdGlvblksIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8TGVuZ3RoLCBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRQb3NpdGlvblksIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNz
QmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLAorICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblksIEFwcGx5UHJv
cGVydHlGaWxsTGF5ZXI8TGVuZ3RoLCBMZW5ndGgsIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0
aW9uWSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5k
TGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICZGaWxsTGF5ZXI6OmlzWVBvc2l0aW9uU2V0LCAmRmlsbExheWVyOjp5UG9zaXRpb24s
ICZGaWxsTGF5ZXI6OnNldFlQb3NpdGlvbiwgJkZpbGxMYXllcjo6Y2xlYXJZUG9zaXRpb24sICZG
aWxsTGF5ZXI6OmluaXRpYWxGaWxsWVBvc2l0aW9uLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmls
bFlQb3NpdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uLCBBcHBseVByb3BlcnR5RXhwYW5kaW5nPFN1cHBy
ZXNzVmFsdWUsIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kUG9zaXRpb25ZPjo6Y3JlYXRlSGFuZGxlcigpKTsKIAotICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLCBBcHBseVByb3BlcnR5RmlsbExheWVy
PEVGaWxsUmVwZWF0LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLCBCYWNrZ3JvdW5kRmls
bExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHls
ZTo6YmFja2dyb3VuZExheWVycywKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUmVwZWF0WCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbFJlcGVhdCwgRUZp
bGxSZXBlYXQsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFgsIEJhY2tncm91bmRGaWxsTGF5
ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpi
YWNrZ3JvdW5kTGF5ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAmRmlsbExheWVyOjppc1Jl
cGVhdFhTZXQsICZGaWxsTGF5ZXI6OnJlcGVhdFgsICZGaWxsTGF5ZXI6OnNldFJlcGVhdFgsICZG
aWxsTGF5ZXI6OmNsZWFyUmVwZWF0WCwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxSZXBlYXRYLCAm
Q1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFJlcGVhdFg+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZLCBBcHBseVBy
b3BlcnR5RmlsbExheWVyPEVGaWxsUmVwZWF0LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZ
LCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXll
cnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywKKyAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxF
RmlsbFJlcGVhdCwgRUZpbGxSZXBlYXQsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksIEJh
Y2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywg
JlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAm
RmlsbExheWVyOjppc1JlcGVhdFlTZXQsICZGaWxsTGF5ZXI6OnJlcGVhdFksICZGaWxsTGF5ZXI6
OnNldFJlcGVhdFksICZGaWxsTGF5ZXI6OmNsZWFyUmVwZWF0WSwgJkZpbGxMYXllcjo6aW5pdGlh
bEZpbGxSZXBlYXRZLCAmQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFJlcGVhdFk+OjpjcmVhdGVI
YW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRS
ZXBlYXQsIEFwcGx5UHJvcGVydHlFeHBhbmRpbmc8U3VwcHJlc3NWYWx1ZSwgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUmVwZWF0WCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WT46OmNyZWF0ZUhh
bmRsZXIoKSk7CiAKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
U2l6ZSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxGaWxsU2l6ZSwgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kU2l6ZSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3Jv
dW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsCisgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsIEFwcGx5UHJvcGVydHlGaWxsTGF5
ZXI8RmlsbFNpemUsIEZpbGxTaXplLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplLCBCYWNrZ3Jv
dW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5k
ZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywKICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGxM
YXllcjo6aXNTaXplU2V0LCAmRmlsbExheWVyOjpzaXplLCAmRmlsbExheWVyOjpzZXRTaXplLCAm
RmlsbExheWVyOjpjbGVhclNpemUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsU2l6ZSwgJkNTU1N0
eWxlU2VsZWN0b3I6Om1hcEZpbGxTaXplPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSwgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kU2l6ZSk7CiAKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQXR0YWNobWVudCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbEF0dGFjaG1lbnQs
IENTU1Byb3BlcnR5V2Via2l0TWFza0F0dGFjaG1lbnQsIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJT
dHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLAorICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tBdHRhY2htZW50LCBBcHBseVBy
b3BlcnR5RmlsbExheWVyPEVGaWxsQXR0YWNobWVudCwgRUZpbGxBdHRhY2htZW50LCBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tBdHRhY2htZW50LCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFj
Y2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywKICAgICAgICAgICAgICAg
ICAgICAgICAgJkZpbGxMYXllcjo6aXNBdHRhY2htZW50U2V0LCAmRmlsbExheWVyOjphdHRhY2ht
ZW50LCAmRmlsbExheWVyOjpzZXRBdHRhY2htZW50LCAmRmlsbExheWVyOjpjbGVhckF0dGFjaG1l
bnQsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQXR0YWNobWVudCwgJkNTU1N0eWxlU2VsZWN0b3I6
Om1hcEZpbGxBdHRhY2htZW50Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxF
RmlsbEJveCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCwgTWFza0ZpbGxMYXllciwgJlJlbmRl
clN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsCisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXAsIEFwcGx5UHJvcGVy
dHlGaWxsTGF5ZXI8RUZpbGxCb3gsIEVGaWxsQm94LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlw
LCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJT
dHlsZTo6bWFza0xheWVycywKICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGxMYXllcjo6aXND
bGlwU2V0LCAmRmlsbExheWVyOjpjbGlwLCAmRmlsbExheWVyOjpzZXRDbGlwLCAmRmlsbExheWVy
OjpjbGVhckNsaXAsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ2xpcCwgJkNTU1N0eWxlU2VsZWN0
b3I6Om1hcEZpbGxDbGlwPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQ29tcG9zaXRlLCBBcHBseVByb3BlcnR5RmlsbExheWVy
PENvbXBvc2l0ZU9wZXJhdG9yLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGUsIE1hc2tG
aWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjpt
YXNrTGF5ZXJzLAorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tD
b21wb3NpdGUsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8Q29tcG9zaXRlT3BlcmF0b3IsIENvbXBv
c2l0ZU9wZXJhdG9yLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGUsIE1hc2tGaWxsTGF5
ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5
ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAmRmlsbExheWVyOjppc0NvbXBvc2l0ZVNldCwg
JkZpbGxMYXllcjo6Y29tcG9zaXRlLCAmRmlsbExheWVyOjpzZXRDb21wb3NpdGUsICZGaWxsTGF5
ZXI6OmNsZWFyQ29tcG9zaXRlLCAmRmlsbExheWVyOjppbml0aWFsRmlsbENvbXBvc2l0ZSwgJkNT
U1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxDb21wb3NpdGU+OjpjcmVhdGVIYW5kbGVyKCkpOwogCi0g
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlLCBBcHBseVBy
b3BlcnR5RmlsbExheWVyPFN0eWxlSW1hZ2UqLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwg
TWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5
bGU6Om1hc2tMYXllcnMsCisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
TWFza0ltYWdlLCBBcHBseVByb3BlcnR5RmlsbExheWVyPFN0eWxlSW1hZ2UqLCBQYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgTWFza0ZpbGxMYXllciwg
JlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMs
CiAgICAgICAgICAgICAgICAgICAgICAgICZGaWxsTGF5ZXI6OmlzSW1hZ2VTZXQsICZGaWxsTGF5
ZXI6OmltYWdlLCAmRmlsbExheWVyOjpzZXRJbWFnZSwgJkZpbGxMYXllcjo6Y2xlYXJJbWFnZSwg
JkZpbGxMYXllcjo6aW5pdGlhbEZpbGxJbWFnZSwgJkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxJ
bWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7CiAKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRNYXNrT3JpZ2luLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEVGaWxsQm94LCBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4sIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6
YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLAorICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4sIEFwcGx5UHJvcGVydHlGaWxs
TGF5ZXI8RUZpbGxCb3gsIEVGaWxsQm94LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4sIE1h
c2tGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxl
OjptYXNrTGF5ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAmRmlsbExheWVyOjppc09yaWdp
blNldCwgJkZpbGxMYXllcjo6b3JpZ2luLCAmRmlsbExheWVyOjpzZXRPcmlnaW4sICZGaWxsTGF5
ZXI6OmNsZWFyT3JpZ2luLCAmRmlsbExheWVyOjppbml0aWFsRmlsbE9yaWdpbiwgJkNTU1N0eWxl
U2VsZWN0b3I6Om1hcEZpbGxPcmlnaW4+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplLCBBcHBseVByb3BlcnR5RmlsbExh
eWVyPEZpbGxTaXplLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplLCBNYXNrRmlsbExheWVyLCAm
UmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywK
KyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZSwgQXBwbHlQ
cm9wZXJ0eUZpbGxMYXllcjxGaWxsU2l6ZSwgRmlsbFNpemUsIENTU1Byb3BlcnR5V2Via2l0TWFz
a1NpemUsIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJl
bmRlclN0eWxlOjptYXNrTGF5ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAmRmlsbExheWVy
Ojppc1NpemVTZXQsICZGaWxsTGF5ZXI6OnNpemUsICZGaWxsTGF5ZXI6OnNldFNpemUsICZGaWxs
TGF5ZXI6OmNsZWFyU2l6ZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxTaXplLCAmQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWFwRmlsbFNpemU+OjpjcmVhdGVIYW5kbGVyKCkpOwogCi0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgQXBwbHlQcm9wZXJ0eUZp
bGxMYXllcjxMZW5ndGgsIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgTWFza0ZpbGxM
YXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tM
YXllcnMsCisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uWCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxMZW5ndGgsIExlbmd0aCwgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUG9zaXRpb25YLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01h
c2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywKICAgICAgICAgICAgICAgICAgICAg
ICAgJkZpbGxMYXllcjo6aXNYUG9zaXRpb25TZXQsICZGaWxsTGF5ZXI6OnhQb3NpdGlvbiwgJkZp
bGxMYXllcjo6c2V0WFBvc2l0aW9uLCAmRmlsbExheWVyOjpjbGVhclhQb3NpdGlvbiwgJkZpbGxM
YXllcjo6aW5pdGlhbEZpbGxYUG9zaXRpb24sICZDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsWFBv
c2l0aW9uPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRNYXNrUG9zaXRpb25ZLCBBcHBseVByb3BlcnR5RmlsbExheWVyPExlbmd0aCwg
Q1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5
bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZLCBBcHBseVByb3Bl
cnR5RmlsbExheWVyPExlbmd0aCwgTGVuZ3RoLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlv
blksIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRl
clN0eWxlOjptYXNrTGF5ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAmRmlsbExheWVyOjpp
c1lQb3NpdGlvblNldCwgJkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRZUG9z
aXRpb24sICZGaWxsTGF5ZXI6OmNsZWFyWVBvc2l0aW9uLCAmRmlsbExheWVyOjppbml0aWFsRmls
bFlQb3NpdGlvbiwgJkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxZUG9zaXRpb24+OjpjcmVhdGVI
YW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQ
b3NpdGlvbiwgQXBwbHlQcm9wZXJ0eUV4cGFuZGluZzxTdXBwcmVzc1ZhbHVlLCBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tQb3NpdGlvblgsIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWT46OmNy
ZWF0ZUhhbmRsZXIoKSk7CiAKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRNYXNrUmVwZWF0WCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbFJlcGVhdCwgQ1NTUHJv
cGVydHlXZWJraXRNYXNrUmVwZWF0WCwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nl
c3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsCisgICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFgsIEFwcGx5UHJvcGVydHlGaWxsTGF5
ZXI8RUZpbGxSZXBlYXQsIEVGaWxsUmVwZWF0LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRY
LCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJT
dHlsZTo6bWFza0xheWVycywKICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGxMYXllcjo6aXNS
ZXBlYXRYU2V0LCAmRmlsbExheWVyOjpyZXBlYXRYLCAmRmlsbExheWVyOjpzZXRSZXBlYXRYLCAm
RmlsbExheWVyOjpjbGVhclJlcGVhdFgsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WCwg
JkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxSZXBlYXRYPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WSwgQXBwbHlQ
cm9wZXJ0eUZpbGxMYXllcjxFRmlsbFJlcGVhdCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0
WSwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVy
U3R5bGU6Om1hc2tMYXllcnMsCisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0TWFza1JlcGVhdFksIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxSZXBlYXQsIEVGaWxs
UmVwZWF0LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZLCBNYXNrRmlsbExheWVyLCAmUmVu
ZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywKICAg
ICAgICAgICAgICAgICAgICAgICAgJkZpbGxMYXllcjo6aXNSZXBlYXRZU2V0LCAmRmlsbExheWVy
OjpyZXBlYXRZLCAmRmlsbExheWVyOjpzZXRSZXBlYXRZLCAmRmlsbExheWVyOjpjbGVhclJlcGVh
dFksICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WSwgJkNTU1N0eWxlU2VsZWN0b3I6Om1h
cEZpbGxSZXBlYXRZPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0LCBBcHBseVByb3BlcnR5RXhwYW5kaW5nPFN1cHBy
ZXNzVmFsdWUsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFgsIENTU1Byb3BlcnR5QmFja2dy
b3VuZFJlcGVhdFk+OjpjcmVhdGVIYW5kbGVyKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAxMDExMzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyODgsNyArNDI4
OCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbE9yaWdpbihDU1MKICAgICBsYXll
ci0+c2V0T3JpZ2luKCpwcmltaXRpdmVWYWx1ZSk7CiB9CiAKLVN0eWxlSW1hZ2UqIENTU1N0eWxl
U2VsZWN0b3I6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZh
bHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUltYWdl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFs
dWUtPmlzSW1hZ2VWYWx1ZSgpKQogICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZh
bHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4odmFsdWUpKTsKQEAgLTQy
OTksMjAgKzQyOTksMjAgQEAgU3R5bGVJbWFnZSogQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVJbWFn
ZQogICAgIHJldHVybiAwOwogfQogCi1TdHlsZUltYWdlKiBDU1NTdHlsZVNlbGVjdG9yOjpjYWNo
ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VWYWx1
ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1N0eWxlU2VsZWN0b3I6OmNhY2hl
ZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVl
KiB2YWx1ZSkKIHsKLSAgICBTdHlsZUltYWdlKiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRp
bmdJbWFnZSgpOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRP
clBlbmRpbmdJbWFnZSgpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2Uo
KSkKICAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7Ci0gICAg
cmV0dXJuIGltYWdlOworICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKLVN0eWxlSW1h
Z2UqIENTU1N0eWxlU2VsZWN0b3I6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVl
KQogewotICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gdmFsdWUtPmdlbmVyYXRlZE9yUGVuZGluZ0lt
YWdlKCk7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmdlbmVyYXRlZE9y
UGVuZGluZ0ltYWdlKCk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgp
KQogICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuYWRkKHByb3BlcnR5KTsKLSAgICBy
ZXR1cm4gaW1hZ2U7CisgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXBGaWxsSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgRmlsbExh
eWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtNTc0MCw3ICs1NzQwLDcgQEAgYm9vbCBD
U1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVGaWx0ZXJPcGVyYQogCiAjZW5kaWYKIAotU3R5bGVJbWFn
ZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSog
cGVuZGluZ0ltYWdlKQorUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1N0eWxlU2VsZWN0b3I6OmxvYWRQ
ZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbmdJbWFnZSkKIHsKICAgICBDYWNo
ZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2VsZW1lbnQtPmRvY3Vt
ZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKQEAgLTU3NzEsODIgKzU3NzEsNzUgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpsb2FkUGVuZGluZ0ltYWdlcwogICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZTogewogICAgICAgICAgICAgICAgIGZvciAoRmls
bExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBtX3N0eWxlLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJz
KCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5u
ZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmRMYXllci0+aW1hZ2Uo
KSAmJiBiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFN0eWxlSW1hZ2UqIGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJ
bWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGJhY2tncm91bmRMYXllci0+aW1h
Z2UoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZExheWVyLT5zZXRJbWFn
ZShsb2FkZWRJbWFnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFn
ZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGlu
Z0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFnZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRlZEltYWdlLnJlbGVhc2UoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb250
ZW50OiB7CiAgICAgICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBj
b25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnRE
YXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNv
bnRlbnREYXRhKS0+aW1hZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+
aXNQZW5kaW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlSW1h
Z2UqIGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRp
bmdJbWFnZSo+KGltYWdlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0
eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHls
ZVBlbmRpbmdJbWFnZSo+KGltYWdlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGxvYWRlZEltYWdlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5zZXRJbWFnZShsb2FkZWRJbWFnZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEltYWdlQ29udGVu
dERhdGEqPihjb250ZW50RGF0YSktPnNldEltYWdlKGxvYWRlZEltYWdlLnJlbGVhc2UoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KICAgICAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDdXJzb3I6IHsKICAgICAgICAgICAgICAgICBpZiAoQ3Vy
c29yTGlzdCogY3Vyc29yTGlzdCA9IG1fc3R5bGUtPmN1cnNvcnMoKSkgewogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBjdXJyZW50Q3Vyc29yID0gY3Vy
c29yTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSog
aW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3R5bGVJbWFnZSogbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0
YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudEN1cnNvci5zZXRJbWFnZShsb2FkZWRJbWFnZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFn
ZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFn
ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29yLnNldElt
YWdlKGxvYWRlZEltYWdlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCiAg
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6IHsKICAgICAgICAgICAg
ICAgICBpZiAobV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0eWxlLT5saXN0U3R5bGVJ
bWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0eWxlSW1h
Z2UqIGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRp
bmdJbWFnZSo+KG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZGVkSW1hZ2UpOworICAgICAgICAgICAg
ICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdl
KHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2Uo
KSkpOworICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShsb2Fk
ZWRJbWFnZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
ckltYWdlU291cmNlOiB7CiAgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmJvcmRlckltYWdl
U291cmNlKCkgJiYgbV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2Uo
KSkgewotICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBsb2FkZWRJbWFnZSA9IGxvYWRQ
ZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5ib3Jk
ZXJJbWFnZVNvdXJjZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRl
ckltYWdlU291cmNlKGxvYWRlZEltYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0
eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHls
ZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZGVkSW1hZ2UucmVs
ZWFzZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0KICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0
OiB7CiAgICAgICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1f
c3R5bGUtPmJveFJlZmxlY3QoKSkgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBOaW5lUGll
Y2VJbWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAobWFza0ltYWdlLmltYWdlKCkgJiYgbWFza0ltYWdlLmltYWdlKCktPmlzUGVuZGlu
Z0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlSW1hZ2UqIGxvYWRlZElt
YWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1h
c2tJbWFnZS5pbWFnZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWZsZWN0aW9uLT5z
ZXRNYXNrKE5pbmVQaWVjZUltYWdlKGxvYWRlZEltYWdlLCBtYXNrSW1hZ2UuaW1hZ2VTbGljZXMo
KSwgbWFza0ltYWdlLmZpbGwoKSwgbWFza0ltYWdlLmJvcmRlclNsaWNlcygpLCBtYXNrSW1hZ2Uu
b3V0c2V0KCksIG1hc2tJbWFnZS5ob3Jpem9udGFsUnVsZSgpLCBtYXNrSW1hZ2UudmVydGljYWxS
dWxlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2Fk
ZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2Uq
PihtYXNrSW1hZ2UuaW1hZ2UoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVmbGVjdGlv
bi0+c2V0TWFzayhOaW5lUGllY2VJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCksIG1hc2tJbWFn
ZS5pbWFnZVNsaWNlcygpLCBtYXNrSW1hZ2UuZmlsbCgpLCBtYXNrSW1hZ2UuYm9yZGVyU2xpY2Vz
KCksIG1hc2tJbWFnZS5vdXRzZXQoKSwgbWFza0ltYWdlLmhvcml6b250YWxSdWxlKCksIG1hc2tJ
bWFnZS52ZXJ0aWNhbFJ1bGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCiAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOiB7CiAgICAgICAg
ICAgICAgICAgaWYgKG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPm1h
c2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFN0eWxlSW1hZ2UqIGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2Fz
dDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkZWRJ
bWFnZSk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFn
ZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0
eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpOworICAgICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZGVkSW1hZ2UucmVsZWFzZSgpKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KICAgICAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2U6IHsKICAgICAgICAgICAgICAg
ICBmb3IgKEZpbGxMYXllciogbWFza0xheWVyID0gbV9zdHlsZS0+YWNjZXNzTWFza0xheWVycygp
OyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFnZSgpLT5p
c1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBs
b2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tM
YXllci0+c2V0SW1hZ2UobG9hZGVkSW1hZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgUmVm
UHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2Fz
dDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tMYXllci0+aW1hZ2UoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbWFza0xheWVyLT5zZXRJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCkpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lv
biAxMDExMzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTQsOSArMjk0LDkgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5v
dFlldEF2YWlsYWJsZTsgfQogCi0gICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZShDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSopOwotICAgIFN0eWxlSW1hZ2UqIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1
ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7Ci0gICAgU3R5bGVJbWFnZSogZ2VuZXJh
dGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUqKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJ
RCwgQ1NTVmFsdWUqKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGlu
Z0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7CisgICAgUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwg
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSopOwogCiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsg
fQogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQpAQCAtMzQzLDcgKzM0Myw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBseVNWR1Byb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUq
KTsKICNlbmRpZgogCi0gICAgU3R5bGVJbWFnZSogbG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRp
bmdJbWFnZSopOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkUGVuZGluZ0ltYWdlKFN0eWxl
UGVuZGluZ0ltYWdlKik7CiAgICAgdm9pZCBsb2FkUGVuZGluZ0ltYWdlcygpOwogCiAgICAgc3Ry
dWN0IE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9GaWxsTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvRmlsbExheWVyLmgJKHJldmlzaW9uIDEwMTEzMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyAr
OTIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NvbXBvc2l0ZVNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29tcG9zaXRlU2V0OyB9CiAgICAgYm9vbCBpc1NpemVTZXQoKSBjb25zdCB7IHJldHVybiBt
X3NpemVUeXBlICE9IFNpemVOb25lOyB9CiAgICAgCi0gICAgdm9pZCBzZXRJbWFnZShTdHlsZUlt
YWdlKiBpKSB7IG1faW1hZ2UgPSBpOyBtX2ltYWdlU2V0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0
SW1hZ2UoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpKSB7IG1faW1hZ2UgPSBpOyBtX2ltYWdlU2V0
ID0gdHJ1ZTsgfQogICAgIHZvaWQgc2V0WFBvc2l0aW9uKExlbmd0aCBsKSB7IG1feFBvc2l0aW9u
ID0gbDsgbV94UG9zU2V0ID0gdHJ1ZTsgfQogICAgIHZvaWQgc2V0WVBvc2l0aW9uKExlbmd0aCBs
KSB7IG1feVBvc2l0aW9uID0gbDsgbV95UG9zU2V0ID0gdHJ1ZTsgfQogICAgIHZvaWQgc2V0QXR0
YWNobWVudChFRmlsbEF0dGFjaG1lbnQgYXR0YWNobWVudCkgeyBtX2F0dGFjaG1lbnQgPSBhdHRh
Y2htZW50OyBtX2F0dGFjaG1lbnRTZXQgPSB0cnVlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuaAkocmV2aXNpb24gMTAxMTMwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBO
aW5lUGllY2VJbWFnZShTdHlsZUltYWdlKiBpbWFnZSwgTGVuZ3RoQm94IGltYWdlU2xpY2VzLCBi
b29sIGZpbGwsIExlbmd0aEJveCBib3JkZXJTbGljZXMsIExlbmd0aEJveCBvdXRzZXQsIEVOaW5l
UGllY2VJbWFnZVJ1bGUgaCwgRU5pbmVQaWVjZUltYWdlUnVsZSB2KSAKKyAgICBOaW5lUGllY2VJ
bWFnZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlLCBMZW5ndGhCb3ggaW1hZ2VTbGljZXMs
IGJvb2wgZmlsbCwgTGVuZ3RoQm94IGJvcmRlclNsaWNlcywgTGVuZ3RoQm94IG91dHNldCwgRU5p
bmVQaWVjZUltYWdlUnVsZSBoLCBFTmluZVBpZWNlSW1hZ2VSdWxlIHYpIAogICAgICAgOiBtX2lt
YWdlKGltYWdlKQogICAgICAgLCBtX2ltYWdlU2xpY2VzKGltYWdlU2xpY2VzKQogICAgICAgLCBt
X2JvcmRlclNsaWNlcyhib3JkZXJTbGljZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmgJKHJldmlzaW9uIDEwMTEz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFN0eWxlR2VuZXJhdGVkSW1hZ2UodmFsLCBmaXhlZFNpemUpKTsKICAg
ICB9CiAKLSAgICB2aXJ0dWFsIFdyYXBwZWRJbWFnZVB0ciBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9nZW5lcmF0b3I7IH0KKyAgICB2aXJ0dWFsIFdyYXBwZWRJbWFnZVB0ciBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9nZW5lcmF0b3IuZ2V0KCk7IH0KIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gY3NzVmFsdWUoKSBjb25zdDsKIApAQCAtNTMsMTQgKzUzLDE0IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0
IEludFNpemUmKSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgU3R5bGVHZW5lcmF0ZWRJbWFn
ZShDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiB2YWwsIGJvb2wgZml4ZWRTaXplKQorICAgIFN0eWxl
R2VuZXJhdGVkSW1hZ2UoUGFzc1JlZlB0cjxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPiB2YWwsIGJv
b2wgZml4ZWRTaXplKQogICAgICAgICA6IG1fZ2VuZXJhdG9yKHZhbCkKICAgICAgICAgLCBtX2Zp
eGVkU2l6ZShmaXhlZFNpemUpCiAgICAgewogICAgICAgICAgbV9pc0dlbmVyYXRlZEltYWdlID0g
dHJ1ZTsKICAgICB9CiAgICAgCi0gICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogbV9nZW5lcmF0
b3I7IC8vIFRoZSBnZW5lcmF0b3IgaG9sZHMgYSByZWZlcmVuY2UgdG8gdXMuCisgICAgUmVmUHRy
PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+IG1fZ2VuZXJhdG9yOwogICAgIEludFNpemUgbV9jb250
YWluZXJTaXplOwogICAgIGJvb2wgbV9maXhlZFNpemU7CiB9Owo=
</data>
<flag name="review"
          id="115680"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116604</attachid>
            <date>2011-11-25 05:30:57 -0800</date>
            <delta_ts>2011-11-25 05:37:11 -0800</delta_ts>
            <desc>patch2</desc>
            <filename>generated-image-ref-2.patch</filename>
            <type>text/plain</type>
            <size>19164</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTE2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDExLTExLTI1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTdHlsZUdlbmVyYXRlZEltYWdl
IHNob3VsZCByZWYgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNzQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFJlbmRlclN0eWxlIG93bnMgYSBidW5j
aCBvZiBTdHlsZUltYWdlIG9iamVjdHMuIEhvd2V2ZXIgU3R5bGVHZW5lcmF0ZWRJbWFnZSBkb2Vz
IG5vdCByZWYgdGhlCisgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUgaXQgaG9sZHMgc28g
d2UgY3VycmVudGx5IHJlbHkgb24gdGhlIHN0eWxlc2hlZXQgdG8ga2VlcCB0aGUgQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZXMKKyAgICAgICAgYWxpdmUgYXMgbG9uZyBhcyBSZW5kZXJTdHlsZSBzdGF5
cyBhbGl2ZS4gV2hpbGUgdGhpcyB3b3JrcyAoUmVuZGVyU3R5bGVzIGFyZSB0aHJvd24gYXdheSBp
ZiBzdHlsZXNoZWV0cworICAgICAgICBjaGFuZ2UpIGl0IGlzIG5vdCBwYXJ0aWN1bGFybHkgcm9i
dXN0IG9yIG5pY2UuCisKKyAgICAgICAgLSBVc2UgUmVmUHRyPENTU0ltYWdlR2VuZXJhdG9yVmFs
dWU+IGluIFN0eWxlR2VuZXJhdGVkSW1hZ2UKKyAgICAgICAgLSBSZW1vdmUgdGhlIFJlZlB0cjxT
dHlsZUdlbmVyYXRlZEltYWdlPiBmcm9tIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUuCisgICAgICAg
ICAgVGhlcmUgaXMgbm8gZ29vZCByZWFzb24gdG8gY2FjaGUgU3R5bGVHZW5lcmF0ZWRJbWFnZSBh
cyBpdCBpcyBhIHNtYWxsIGFuZAorICAgICAgICAgIHVuY29tbW9uIG9iamVjdC4gV2l0aCB0aGF0
IHRoZSB3aG9sZSBiYWNrLXJlZmVyZW5jZSBiZWNvbWVzIHVubmVjZXNzYXJ5LgorICAgICAgICAt
IFN3aXRjaCBtb3JlIHBsYWNlcyB0byB1c2UgKFBhc3MpUmVmUHRyPFN0eWxlSW1hZ2U+IGZvciBj
b25zaXN0ZW5jeS4KKworICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OkNTU0ltYWdlR2VuZXJh
dG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Z2Vu
ZXJhdGVkT3JQZW5kaW5nSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZTo6Z2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRv
clZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHA6CisgICAg
ICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6c3R5bGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvYWRQZW5kaW5nSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bG9hZFBlbmRpbmdJbWFnZXMpOgorICAgICAgICAqIGNzcy9D
U1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5o
OgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVyOjpzZXRJbWFnZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGll
Y2VJbWFnZTo6TmluZVBpZWNlSW1hZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHls
ZUdlbmVyYXRlZEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUdlbmVyYXRlZEltYWdl
OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlR2VuZXJhdGVkSW1hZ2U6OlN0eWxlR2Vu
ZXJhdGVkSW1hZ2UpOgorCiAyMDExLTExLTI1ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGRvbid0IHNlbmQgQ29uc29sZS5t
ZXNzYWdlc0NsZWFyZWQgb24gZnJvbnQtZW5kIGNvbm5lY3Rpb24gaWYgY29uc29sZSBhZ2VudCBp
cyBub3QgZW5hYmxlZApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9y
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVy
YXRvclZhbHVlLmNwcAkocmV2aXNpb24gMTAxMTMwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZShDbGFzc1R5cGUgY2xhc3NUeXBlKQogICAgIDogQ1NTVmFsdWUoY2xhc3NU
eXBlKQotICAgICwgbV9hY2Nlc3NlZEltYWdlKGZhbHNlKQogewogfQogCkBAIC0xMTEsMjYgKzEx
MCwxNiBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnB1dEltYWdlKGNvCiAgICAgbV9p
bWFnZXMuYWRkKHNpemUsIGltYWdlKTsKIH0KIAotU3R5bGVJbWFnZSogQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZTo6Z2VuZXJhdGVkT3JQZW5kaW5nSW1hZ2UoKQorUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZW5lcmF0ZWRPclBlbmRpbmdJbWFnZSgpCiB7CiAg
ICAgaWYgKGlzUGVuZGluZygpKQotICAgICAgICBtX2ltYWdlID0gU3R5bGVQZW5kaW5nSW1hZ2U6
OmNyZWF0ZSh0aGlzKS5nZXQoKTsKLSAgICBlbHNlIGlmICghbV9hY2Nlc3NlZEltYWdlKSB7Ci0g
ICAgICAgIG1fYWNjZXNzZWRJbWFnZSA9IHRydWU7Ci0gICAgICAgIG1faW1hZ2UgPSBTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUodGhpcywgaXNGaXhlZFNpemUoKSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1faW1hZ2UuZ2V0KCk7CisgICAgICAgIHJldHVybiBTdHlsZVBlbmRpbmdJbWFnZTo6
Y3JlYXRlKHRoaXMpLmdldCgpOworICAgIHJldHVybiBnZW5lcmF0ZWRJbWFnZSgpOwogfQogCi1T
dHlsZUdlbmVyYXRlZEltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZW5lcmF0ZWRJbWFn
ZSgpCitQYXNzUmVmUHRyPFN0eWxlR2VuZXJhdGVkSW1hZ2U+IENTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OmdlbmVyYXRlZEltYWdlKCkKIHsKLSAgICBpZiAoIW1fYWNjZXNzZWRJbWFnZSkgewotICAg
ICAgICBtX2FjY2Vzc2VkSW1hZ2UgPSB0cnVlOwotICAgICAgICBtX2ltYWdlID0gU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKHRoaXMsIGlzRml4ZWRTaXplKCkpOwotICAgIH0KLQotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxTdHlsZUdlbmVyYXRlZEltYWdlKj4obV9pbWFnZS5nZXQoKSk7Cisg
ICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSh0aGlzLCBpc0ZpeGVkU2l6ZSgp
KTsKIH0KIAogUGFzc1JlZlB0cjxJbWFnZT4gQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aW1hZ2Uo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaAkocmV2aXNpb24gMTAxMTMw
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVDbGllbnQo
UmVuZGVyT2JqZWN0Kik7CiAgICAgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0
KiwgY29uc3QgSW50U2l6ZSYpOwogCi0gICAgU3R5bGVJbWFnZSogZ2VuZXJhdGVkT3JQZW5kaW5n
SW1hZ2UoKTsKLSAgICBTdHlsZUdlbmVyYXRlZEltYWdlKiBnZW5lcmF0ZWRJbWFnZSgpOworICAg
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nSW1hZ2UoKTsKKyAgICBQ
YXNzUmVmUHRyPFN0eWxlR2VuZXJhdGVkSW1hZ2U+IGdlbmVyYXRlZEltYWdlKCk7CiAKICAgICBi
b29sIGlzRml4ZWRTaXplKCkgY29uc3Q7CiAgICAgSW50U2l6ZSBmaXhlZFNpemUoY29uc3QgUmVu
ZGVyT2JqZWN0Kik7CkBAIC03Nyw5ICs3Nyw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHB1dElt
YWdlKGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPEltYWdlPik7CiAgICAgY29uc3QgUmVuZGVy
T2JqZWN0U2l6ZUNvdW50TWFwJiBjbGllbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRzOyB9
CiAKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9pbWFnZTsKLSAgICBib29sIG1fYWNjZXNzZWRJ
bWFnZTsKLQogICAgIEhhc2hDb3VudGVkU2V0PEludFNpemU+IG1fc2l6ZXM7IC8vIEEgY291bnQg
b2YgaG93IG1hbnkgdGltZXMgYSBnaXZlbiBpbWFnZSBzaXplIGlzIGluIHVzZS4KICAgICBSZW5k
ZXJPYmplY3RTaXplQ291bnRNYXAgbV9jbGllbnRzOyAvLyBBIG1hcCBmcm9tIFJlbmRlck9iamVj
dHMgKHdpdGggZW50cnkgY291bnQpIHRvIGltYWdlIHNpemVzLgogICAgIEhhc2hNYXA8SW50U2l6
ZSwgUmVmUHRyPEltYWdlPiA+IG1faW1hZ2VzOyAvLyBBIGNhY2hlIG9mIEltYWdlIG9iamVjdHMg
YnkgaW1hZ2Ugc2l6ZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJv
cGVydHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5
UHJvcGVydHkuY3BwCShyZXZpc2lvbiAxMDExMzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVBcHBseVByb3BlcnR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDE2ICszODgsMjgg
QEAgcHVibGljOgogICAgIH0KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgRmls
bExheWVyQWNjZXNzb3JUeXBlcyB7CisgICAgdHlwZWRlZiBUIFNldHRlcjsKKyAgICB0eXBlZGVm
IFQgR2V0dGVyOworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEZpbGxMYXllckFjY2Vzc29yVHlw
ZXM8U3R5bGVJbWFnZSo+IHsKKyAgICB0eXBlZGVmIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU2V0
dGVyOworICAgIHR5cGVkZWYgU3R5bGVJbWFnZSogR2V0dGVyOworfTsKKwogdGVtcGxhdGUgPHR5
cGVuYW1lIFQsCiAgICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLAogICAgICAgICAg
IEVGaWxsTGF5ZXJUeXBlIGZpbGxMYXllclR5cGUsCiAgICAgICAgICAgRmlsbExheWVyKiAoUmVu
ZGVyU3R5bGU6OiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKSwKICAgICAgICAgICBjb25zdCBGaWxs
TGF5ZXIqIChSZW5kZXJTdHlsZTo6KmxheWVyc0Z1bmN0aW9uKSgpIGNvbnN0LAotICAgICAgICAg
IGJvb2wgKEZpbGxMYXllcjo6KnRlc3RGdW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICBUIChG
aWxsTGF5ZXI6OipnZXRGdW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICB2b2lkIChGaWxsTGF5
ZXI6OipzZXRGdW5jdGlvbikoVCksCisgICAgICAgICAgdHlwZWRlZiBib29sIChGaWxsTGF5ZXI6
Oip0ZXN0RnVuY3Rpb24pKCkgY29uc3QsCisgICAgICAgICAgdHlwZW5hbWUgRmlsbExheWVyQWNj
ZXNzb3JUeXBlczxUPjo6R2V0dGVyIChGaWxsTGF5ZXI6OipnZXRGdW5jdGlvbikoKSBjb25zdCwK
KyAgICAgICAgICB2b2lkIChGaWxsTGF5ZXI6OipzZXRGdW5jdGlvbikodHlwZW5hbWUgRmlsbExh
eWVyQWNjZXNzb3JUeXBlczxUPjo6U2V0dGVyKSwKICAgICAgICAgICB2b2lkIChGaWxsTGF5ZXI6
OipjbGVhckZ1bmN0aW9uKSgpLAotICAgICAgICAgIFQgKCppbml0aWFsRnVuY3Rpb24pKEVGaWxs
TGF5ZXJUeXBlKSwKKyAgICAgICAgICB0eXBlbmFtZSBGaWxsTGF5ZXJBY2Nlc3NvclR5cGVzPFQ+
OjpHZXR0ZXIgKCppbml0aWFsRnVuY3Rpb24pKEVGaWxsTGF5ZXJUeXBlKSwKICAgICAgICAgICB2
b2lkIChDU1NTdHlsZVNlbGVjdG9yOjoqbWFwRmlsbEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqLCBDU1NWYWx1ZSopPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUZpbGxMYXllciB7CiBw
dWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZp
c2lvbiAxMDExMzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyODgsNyArNDI4OCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWFwRmlsbE9yaWdpbihDU1MKICAgICBsYXllci0+c2V0T3JpZ2luKCpwcmltaXRpdmVWYWx1
ZSk7CiB9CiAKLVN0eWxlSW1hZ2UqIENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlSW1hZ2UoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENT
U1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQogICAgICAg
ICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxD
U1NJbWFnZVZhbHVlKj4odmFsdWUpKTsKQEAgLTQyOTksMjAgKzQyOTksMjAgQEAgU3R5bGVJbWFn
ZSogQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVJbWFnZQogICAgIHJldHVybiAwOwogfQogCi1TdHls
ZUltYWdlKiBDU1NTdHlsZVNlbGVjdG9yOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IENTU1N0eWxlU2VsZWN0b3I6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKIHsKLSAgICBTdHlsZUltYWdl
KiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgIFJlZlB0cjxTdHls
ZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOwogICAgIGlmIChp
bWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKICAgICAgICAgbV9wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7Ci0gICAgcmV0dXJuIGltYWdlOworICAgIHJldHVybiBp
bWFnZS5yZWxlYXNlKCk7CiB9CiAKLVN0eWxlSW1hZ2UqIENTU1N0eWxlU2VsZWN0b3I6OmdlbmVy
YXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdl
bmVyYXRvclZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gQ1NTU3R5bGVTZWxl
Y3Rvcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQogewotICAgIFN0eWxlSW1hZ2UqIGltYWdl
ID0gdmFsdWUtPmdlbmVyYXRlZE9yUGVuZGluZ0ltYWdlKCk7CisgICAgUmVmUHRyPFN0eWxlSW1h
Z2U+IGltYWdlID0gdmFsdWUtPmdlbmVyYXRlZE9yUGVuZGluZ0ltYWdlKCk7CiAgICAgaWYgKGlt
YWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICBtX3BlbmRpbmdJbWFnZVBy
b3BlcnRpZXMuYWRkKHByb3BlcnR5KTsKLSAgICByZXR1cm4gaW1hZ2U7CisgICAgcmV0dXJuIGlt
YWdlLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsSW1hZ2Uo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVl
KQpAQCAtNTc0MCw3ICs1NzQwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVGaWx0
ZXJPcGVyYQogCiAjZW5kaWYKIAotU3R5bGVJbWFnZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9hZFBl
bmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdlKQorUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBDU1NTdHlsZVNlbGVjdG9yOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGlu
Z0ltYWdlKiBwZW5kaW5nSW1hZ2UpCiB7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpOwogCkBAIC01NzcwLDg0ICs1NzcwLDY1IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
bG9hZFBlbmRpbmdJbWFnZXMKICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKICAg
ICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsKICAgICAgICAgICAg
ICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdHlsZS0+YWNjZXNzQmFj
a2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tn
cm91bmRMYXllci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5k
TGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFn
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBsb2FkZWRJbWFnZSA9
IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3Jv
dW5kTGF5ZXItPmltYWdlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRM
YXllci0+c2V0SW1hZ2UobG9hZGVkSW1hZ2UpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3Vu
ZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0
PFN0eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFnZSgpKSkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQogICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgICBmb3Ig
KENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0
eWxlLT5jb250ZW50RGF0YSgpKTsgY29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29udGVudERh
dGEtPm5leHQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudERhdGEtPmlzSW1h
Z2UoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0
aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGlu
Z0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2Fk
UGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGVkSW1hZ2UpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEltYWdlQ29udGVudERhdGEqPihjb250ZW50
RGF0YSktPnNldEltYWdlKGxvYWRlZEltYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+c2V0SW1h
Z2UobG9hZGVkSW1hZ2UucmVsZWFzZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNv
cjogewogICAgICAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gbV9zdHls
ZS0+Y3Vyc29ycygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEN1
cnNvckRhdGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBpbWFnZSA9IGN1cnJlbnRDdXJzb3IuaW1hZ2Uo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1h
Z2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBsb2Fk
ZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2Uq
PihpbWFnZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29y
LnNldEltYWdlKGxvYWRlZEltYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29yLnNldEltYWdlKGxv
YWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQogICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9zdHlsZS0+bGlzdFN0eWxlSW1h
Z2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdl
KiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnNldExpc3RTdHlsZUltYWdlKGxvYWRlZEltYWdlKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9z
dHlsZS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNf
Y2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgICAgIGlmIChtX3N0
eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkt
PmlzUGVuZGluZ0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogbG9h
ZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdl
Kj4obV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSkpOwotICAgICAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkZWRJbWFnZSk7Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYm
IG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAg
ICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1h
Z2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5ib3JkZXJJbWFnZVNv
dXJjZSgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCiAgICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICAgICAg
ICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0eWxlLT5ib3hSZWZsZWN0
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tJbWFn
ZSA9IHJlZmxlY3Rpb24tPm1hc2soKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2tJbWFn
ZS5pbWFnZSgpICYmIG1hc2tJbWFnZS5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5n
SW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0TWFzayhOaW5lUGllY2VJ
bWFnZShsb2FkZWRJbWFnZSwgbWFza0ltYWdlLmltYWdlU2xpY2VzKCksIG1hc2tJbWFnZS5maWxs
KCksIG1hc2tJbWFnZS5ib3JkZXJTbGljZXMoKSwgbWFza0ltYWdlLm91dHNldCgpLCBtYXNrSW1h
Z2UuaG9yaXpvbnRhbFJ1bGUoKSwgbWFza0ltYWdlLnZlcnRpY2FsUnVsZSgpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVu
ZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0ltYWdlLmltYWdl
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2soTmluZVBp
ZWNlSW1hZ2UobG9hZGVkSW1hZ2UucmVsZWFzZSgpLCBtYXNrSW1hZ2UuaW1hZ2VTbGljZXMoKSwg
bWFza0ltYWdlLmZpbGwoKSwgbWFza0ltYWdlLmJvcmRlclNsaWNlcygpLCBtYXNrSW1hZ2Uub3V0
c2V0KCksIG1hc2tJbWFnZS5ob3Jpem9udGFsUnVsZSgpLCBtYXNrSW1hZ2UudmVydGljYWxSdWxl
KCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgICAgIGlmIChtX3N0
eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2Uo
KS0+aXNQZW5kaW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBs
b2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpOwotICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZGVkSW1hZ2UpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9zdHlsZS0+bWFza0JveEltYWdlU291cmNl
KCkgJiYgbV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisg
ICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVu
ZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bWFza0Jv
eEltYWdlU291cmNlKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
LQogICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogewogICAgICAg
ICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBtX3N0eWxlLT5hY2Nlc3NNYXNr
TGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0gbWFza0xheWVyLT5uZXh0KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmlt
YWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxl
SW1hZ2UqIGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBl
bmRpbmdJbWFnZSo+KG1hc2tMYXllci0+aW1hZ2UoKSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbWFza0xheWVyLT5zZXRJbWFnZShsb2FkZWRJbWFnZSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1hZ2UoKSAmJiBtYXNrTGF5
ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBt
YXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5k
aW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAxMDExMzApCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsOSArMjk0LDkgQEAg
cHJpdmF0ZToKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZh
aWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCi0gICAgU3R5bGVJ
bWFnZSogc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwotICAgIFN0eWxlSW1h
Z2UqIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVl
Kik7Ci0gICAgU3R5bGVJbWFnZSogZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3Bl
cnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKKyAgICBQYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJ
bWFnZVZhbHVlKik7CisgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRp
bmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSopOwogCiAg
ICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2Fw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsgfQogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZTsgfQpAQCAtMzQzLDcgKzM0Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBseVNW
R1Byb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUqKTsKICNlbmRpZgogCi0gICAgU3R5bGVJbWFnZSog
bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSopOworICAgIFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gbG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSopOwogICAgIHZvaWQg
bG9hZFBlbmRpbmdJbWFnZXMoKTsKIAogICAgIHN0cnVjdCBNYXRjaGVkU3R5bGVEZWNsYXJhdGlv
biB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oCShy
ZXZpc2lvbiAxMDExMzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExh
eWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgcHVibGljOgogICAgIGJvb2wg
aXNDb21wb3NpdGVTZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZVNldDsgfQogICAgIGJv
b2wgaXNTaXplU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplVHlwZSAhPSBTaXplTm9uZTsgfQog
ICAgIAotICAgIHZvaWQgc2V0SW1hZ2UoU3R5bGVJbWFnZSogaSkgeyBtX2ltYWdlID0gaTsgbV9p
bWFnZVNldCA9IHRydWU7IH0KKyAgICB2b2lkIHNldEltYWdlKFBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gaSkgeyBtX2ltYWdlID0gaTsgbV9pbWFnZVNldCA9IHRydWU7IH0KICAgICB2b2lkIHNldFhQ
b3NpdGlvbihMZW5ndGggbCkgeyBtX3hQb3NpdGlvbiA9IGw7IG1feFBvc1NldCA9IHRydWU7IH0K
ICAgICB2b2lkIHNldFlQb3NpdGlvbihMZW5ndGggbCkgeyBtX3lQb3NpdGlvbiA9IGw7IG1feVBv
c1NldCA9IHRydWU7IH0KICAgICB2b2lkIHNldEF0dGFjaG1lbnQoRUZpbGxBdHRhY2htZW50IGF0
dGFjaG1lbnQpIHsgbV9hdHRhY2htZW50ID0gYXR0YWNobWVudDsgbV9hdHRhY2htZW50U2V0ID0g
dHJ1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUlt
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQ
aWVjZUltYWdlLmgJKHJldmlzaW9uIDEwMTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9OaW5lUGllY2VJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgTmluZVBpZWNlSW1hZ2UoU3R5bGVJbWFnZSog
aW1hZ2UsIExlbmd0aEJveCBpbWFnZVNsaWNlcywgYm9vbCBmaWxsLCBMZW5ndGhCb3ggYm9yZGVy
U2xpY2VzLCBMZW5ndGhCb3ggb3V0c2V0LCBFTmluZVBpZWNlSW1hZ2VSdWxlIGgsIEVOaW5lUGll
Y2VJbWFnZVJ1bGUgdikgCisgICAgTmluZVBpZWNlSW1hZ2UoUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBpbWFnZSwgTGVuZ3RoQm94IGltYWdlU2xpY2VzLCBib29sIGZpbGwsIExlbmd0aEJveCBib3Jk
ZXJTbGljZXMsIExlbmd0aEJveCBvdXRzZXQsIEVOaW5lUGllY2VJbWFnZVJ1bGUgaCwgRU5pbmVQ
aWVjZUltYWdlUnVsZSB2KSAKICAgICAgIDogbV9pbWFnZShpbWFnZSkKICAgICAgICwgbV9pbWFn
ZVNsaWNlcyhpbWFnZVNsaWNlcykKICAgICAgICwgbV9ib3JkZXJTbGljZXMoYm9yZGVyU2xpY2Vz
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1h
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVH
ZW5lcmF0ZWRJbWFnZS5oCShyZXZpc2lvbiAxMDExMzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZUdlbmVy
YXRlZEltYWdlKHZhbCwgZml4ZWRTaXplKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBXcmFwcGVk
SW1hZ2VQdHIgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2VuZXJhdG9yOyB9CisgICAgdmlydHVh
bCBXcmFwcGVkSW1hZ2VQdHIgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2VuZXJhdG9yLmdldCgp
OyB9CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlKCkgY29uc3Q7
CiAKQEAgLTUzLDE0ICs1MywxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElt
YWdlPiBpbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgCiBw
cml2YXRlOgotICAgIFN0eWxlR2VuZXJhdGVkSW1hZ2UoQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSog
dmFsLCBib29sIGZpeGVkU2l6ZSkKKyAgICBTdHlsZUdlbmVyYXRlZEltYWdlKFBhc3NSZWZQdHI8
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4gdmFsLCBib29sIGZpeGVkU2l6ZSkKICAgICAgICAgOiBt
X2dlbmVyYXRvcih2YWwpCiAgICAgICAgICwgbV9maXhlZFNpemUoZml4ZWRTaXplKQogICAgIHsK
ICAgICAgICAgIG1faXNHZW5lcmF0ZWRJbWFnZSA9IHRydWU7CiAgICAgfQogICAgIAotICAgIENT
U0ltYWdlR2VuZXJhdG9yVmFsdWUqIG1fZ2VuZXJhdG9yOyAvLyBUaGUgZ2VuZXJhdG9yIGhvbGRz
IGEgcmVmZXJlbmNlIHRvIHVzLgorICAgIFJlZlB0cjxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPiBt
X2dlbmVyYXRvcjsKICAgICBJbnRTaXplIG1fY29udGFpbmVyU2l6ZTsKICAgICBib29sIG1fZml4
ZWRTaXplOwogfTsK
</data>
<flag name="commit-queue"
          id="115809"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116606</attachid>
            <date>2011-11-25 05:37:11 -0800</date>
            <delta_ts>2011-11-25 09:08:48 -0800</delta_ts>
            <desc>patch3</desc>
            <filename>generated-image-ref-3.patch</filename>
            <type>text/plain</type>
            <size>19105</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTE2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDExLTExLTI1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTdHlsZUdlbmVyYXRlZEltYWdl
IHNob3VsZCByZWYgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNzQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFJlbmRlclN0eWxlIG93bnMgYSBidW5j
aCBvZiBTdHlsZUltYWdlIG9iamVjdHMuIEhvd2V2ZXIgU3R5bGVHZW5lcmF0ZWRJbWFnZSBkb2Vz
IG5vdCByZWYgdGhlCisgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUgaXQgaG9sZHMgc28g
d2UgY3VycmVudGx5IHJlbHkgb24gdGhlIHN0eWxlc2hlZXQgdG8ga2VlcCB0aGUgQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZXMKKyAgICAgICAgYWxpdmUgYXMgbG9uZyBhcyBSZW5kZXJTdHlsZSBzdGF5
cyBhbGl2ZS4gV2hpbGUgdGhpcyB3b3JrcyAoUmVuZGVyU3R5bGVzIGFyZSB0aHJvd24gYXdheSBp
ZiBzdHlsZXNoZWV0cworICAgICAgICBjaGFuZ2UpIGl0IGlzIG5vdCBwYXJ0aWN1bGFybHkgcm9i
dXN0IG9yIG5pY2UuCisKKyAgICAgICAgLSBVc2UgUmVmUHRyPENTU0ltYWdlR2VuZXJhdG9yVmFs
dWU+IGluIFN0eWxlR2VuZXJhdGVkSW1hZ2UKKyAgICAgICAgLSBSZW1vdmUgdGhlIFJlZlB0cjxT
dHlsZUdlbmVyYXRlZEltYWdlPiBmcm9tIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUuCisgICAgICAg
ICAgVGhlcmUgaXMgbm8gZ29vZCByZWFzb24gdG8gY2FjaGUgU3R5bGVHZW5lcmF0ZWRJbWFnZSBh
cyBpdCBpcyBhIHNtYWxsIGFuZAorICAgICAgICAgIHVuY29tbW9uIG9iamVjdC4gV2l0aCB0aGF0
IHRoZSB3aG9sZSBiYWNrLXJlZmVyZW5jZSBiZWNvbWVzIHVubmVjZXNzYXJ5LgorICAgICAgICAt
IFN3aXRjaCBtb3JlIHBsYWNlcyB0byB1c2UgKFBhc3MpUmVmUHRyPFN0eWxlSW1hZ2U+IGZvciBj
b25zaXN0ZW5jeS4KKworICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OkNTU0ltYWdlR2VuZXJh
dG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Z2Vu
ZXJhdGVkT3JQZW5kaW5nSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZTo6Z2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRv
clZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHA6CisgICAg
ICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6c3R5bGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvYWRQZW5kaW5nSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bG9hZFBlbmRpbmdJbWFnZXMpOgorICAgICAgICAqIGNzcy9D
U1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5o
OgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVyOjpzZXRJbWFnZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGll
Y2VJbWFnZTo6TmluZVBpZWNlSW1hZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHls
ZUdlbmVyYXRlZEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUdlbmVyYXRlZEltYWdl
OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlR2VuZXJhdGVkSW1hZ2U6OlN0eWxlR2Vu
ZXJhdGVkSW1hZ2UpOgorCiAyMDExLTExLTI1ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGRvbid0IHNlbmQgQ29uc29sZS5t
ZXNzYWdlc0NsZWFyZWQgb24gZnJvbnQtZW5kIGNvbm5lY3Rpb24gaWYgY29uc29sZSBhZ2VudCBp
cyBub3QgZW5hYmxlZApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9y
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVy
YXRvclZhbHVlLmNwcAkocmV2aXNpb24gMTAxMTMwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZShDbGFzc1R5cGUgY2xhc3NUeXBlKQogICAgIDogQ1NTVmFsdWUoY2xhc3NU
eXBlKQotICAgICwgbV9hY2Nlc3NlZEltYWdlKGZhbHNlKQogewogfQogCkBAIC0xMTEsMjYgKzEx
MCwxNiBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnB1dEltYWdlKGNvCiAgICAgbV9p
bWFnZXMuYWRkKHNpemUsIGltYWdlKTsKIH0KIAotU3R5bGVJbWFnZSogQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZTo6Z2VuZXJhdGVkT3JQZW5kaW5nSW1hZ2UoKQorUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZW5lcmF0ZWRPclBlbmRpbmdJbWFnZSgpCiB7CiAg
ICAgaWYgKGlzUGVuZGluZygpKQotICAgICAgICBtX2ltYWdlID0gU3R5bGVQZW5kaW5nSW1hZ2U6
OmNyZWF0ZSh0aGlzKS5nZXQoKTsKLSAgICBlbHNlIGlmICghbV9hY2Nlc3NlZEltYWdlKSB7Ci0g
ICAgICAgIG1fYWNjZXNzZWRJbWFnZSA9IHRydWU7Ci0gICAgICAgIG1faW1hZ2UgPSBTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUodGhpcywgaXNGaXhlZFNpemUoKSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1faW1hZ2UuZ2V0KCk7CisgICAgICAgIHJldHVybiBTdHlsZVBlbmRpbmdJbWFnZTo6
Y3JlYXRlKHRoaXMpLmdldCgpOworICAgIHJldHVybiBnZW5lcmF0ZWRJbWFnZSgpOwogfQogCi1T
dHlsZUdlbmVyYXRlZEltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpnZW5lcmF0ZWRJbWFn
ZSgpCitQYXNzUmVmUHRyPFN0eWxlR2VuZXJhdGVkSW1hZ2U+IENTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OmdlbmVyYXRlZEltYWdlKCkKIHsKLSAgICBpZiAoIW1fYWNjZXNzZWRJbWFnZSkgewotICAg
ICAgICBtX2FjY2Vzc2VkSW1hZ2UgPSB0cnVlOwotICAgICAgICBtX2ltYWdlID0gU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKHRoaXMsIGlzRml4ZWRTaXplKCkpOwotICAgIH0KLQotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxTdHlsZUdlbmVyYXRlZEltYWdlKj4obV9pbWFnZS5nZXQoKSk7Cisg
ICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSh0aGlzLCBpc0ZpeGVkU2l6ZSgp
KTsKIH0KIAogUGFzc1JlZlB0cjxJbWFnZT4gQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aW1hZ2Uo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaAkocmV2aXNpb24gMTAxMTMw
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVDbGllbnQo
UmVuZGVyT2JqZWN0Kik7CiAgICAgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyT2JqZWN0
KiwgY29uc3QgSW50U2l6ZSYpOwogCi0gICAgU3R5bGVJbWFnZSogZ2VuZXJhdGVkT3JQZW5kaW5n
SW1hZ2UoKTsKLSAgICBTdHlsZUdlbmVyYXRlZEltYWdlKiBnZW5lcmF0ZWRJbWFnZSgpOworICAg
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nSW1hZ2UoKTsKKyAgICBQ
YXNzUmVmUHRyPFN0eWxlR2VuZXJhdGVkSW1hZ2U+IGdlbmVyYXRlZEltYWdlKCk7CiAKICAgICBi
b29sIGlzRml4ZWRTaXplKCkgY29uc3Q7CiAgICAgSW50U2l6ZSBmaXhlZFNpemUoY29uc3QgUmVu
ZGVyT2JqZWN0Kik7CkBAIC03Nyw5ICs3Nyw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHB1dElt
YWdlKGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPEltYWdlPik7CiAgICAgY29uc3QgUmVuZGVy
T2JqZWN0U2l6ZUNvdW50TWFwJiBjbGllbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRzOyB9
CiAKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9pbWFnZTsKLSAgICBib29sIG1fYWNjZXNzZWRJ
bWFnZTsKLQogICAgIEhhc2hDb3VudGVkU2V0PEludFNpemU+IG1fc2l6ZXM7IC8vIEEgY291bnQg
b2YgaG93IG1hbnkgdGltZXMgYSBnaXZlbiBpbWFnZSBzaXplIGlzIGluIHVzZS4KICAgICBSZW5k
ZXJPYmplY3RTaXplQ291bnRNYXAgbV9jbGllbnRzOyAvLyBBIG1hcCBmcm9tIFJlbmRlck9iamVj
dHMgKHdpdGggZW50cnkgY291bnQpIHRvIGltYWdlIHNpemVzLgogICAgIEhhc2hNYXA8SW50U2l6
ZSwgUmVmUHRyPEltYWdlPiA+IG1faW1hZ2VzOyAvLyBBIGNhY2hlIG9mIEltYWdlIG9iamVjdHMg
YnkgaW1hZ2Ugc2l6ZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJv
cGVydHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5
UHJvcGVydHkuY3BwCShyZXZpc2lvbiAxMDExMzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVBcHBseVByb3BlcnR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDE2ICszODgsMjgg
QEAgcHVibGljOgogICAgIH0KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgRmls
bExheWVyQWNjZXNzb3JUeXBlcyB7CisgICAgdHlwZWRlZiBUIFNldHRlcjsKKyAgICB0eXBlZGVm
IFQgR2V0dGVyOworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEZpbGxMYXllckFjY2Vzc29yVHlw
ZXM8U3R5bGVJbWFnZSo+IHsKKyAgICB0eXBlZGVmIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU2V0
dGVyOworICAgIHR5cGVkZWYgU3R5bGVJbWFnZSogR2V0dGVyOworfTsKKwogdGVtcGxhdGUgPHR5
cGVuYW1lIFQsCiAgICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLAogICAgICAgICAg
IEVGaWxsTGF5ZXJUeXBlIGZpbGxMYXllclR5cGUsCiAgICAgICAgICAgRmlsbExheWVyKiAoUmVu
ZGVyU3R5bGU6OiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKSwKICAgICAgICAgICBjb25zdCBGaWxs
TGF5ZXIqIChSZW5kZXJTdHlsZTo6KmxheWVyc0Z1bmN0aW9uKSgpIGNvbnN0LAogICAgICAgICAg
IGJvb2wgKEZpbGxMYXllcjo6KnRlc3RGdW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICBUIChG
aWxsTGF5ZXI6OipnZXRGdW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICB2b2lkIChGaWxsTGF5
ZXI6OipzZXRGdW5jdGlvbikoVCksCisgICAgICAgICAgdHlwZW5hbWUgRmlsbExheWVyQWNjZXNz
b3JUeXBlczxUPjo6R2V0dGVyIChGaWxsTGF5ZXI6OipnZXRGdW5jdGlvbikoKSBjb25zdCwKKyAg
ICAgICAgICB2b2lkIChGaWxsTGF5ZXI6OipzZXRGdW5jdGlvbikodHlwZW5hbWUgRmlsbExheWVy
QWNjZXNzb3JUeXBlczxUPjo6U2V0dGVyKSwKICAgICAgICAgICB2b2lkIChGaWxsTGF5ZXI6Oipj
bGVhckZ1bmN0aW9uKSgpLAotICAgICAgICAgIFQgKCppbml0aWFsRnVuY3Rpb24pKEVGaWxsTGF5
ZXJUeXBlKSwKKyAgICAgICAgICB0eXBlbmFtZSBGaWxsTGF5ZXJBY2Nlc3NvclR5cGVzPFQ+OjpH
ZXR0ZXIgKCppbml0aWFsRnVuY3Rpb24pKEVGaWxsTGF5ZXJUeXBlKSwKICAgICAgICAgICB2b2lk
IChDU1NTdHlsZVNlbGVjdG9yOjoqbWFwRmlsbEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBGaWxs
TGF5ZXIqLCBDU1NWYWx1ZSopPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUZpbGxMYXllciB7CiBwdWJs
aWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lv
biAxMDExMzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyODgsNyArNDI4OCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
bWFwRmlsbE9yaWdpbihDU1MKICAgICBsYXllci0+c2V0T3JpZ2luKCpwcmltaXRpdmVWYWx1ZSk7
CiB9CiAKLVN0eWxlSW1hZ2UqIENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBD
U1NTdHlsZVNlbGVjdG9yOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1Zh
bHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQogICAgICAgICBy
ZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJ
bWFnZVZhbHVlKj4odmFsdWUpKTsKQEAgLTQyOTksMjAgKzQyOTksMjAgQEAgU3R5bGVJbWFnZSog
Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVJbWFnZQogICAgIHJldHVybiAwOwogfQogCi1TdHlsZUlt
YWdlKiBDU1NTdHlsZVNlbGVjdG9yOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+IENTU1N0eWxlU2VsZWN0b3I6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKIHsKLSAgICBTdHlsZUltYWdlKiBp
bWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgIFJlZlB0cjxTdHlsZUlt
YWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOwogICAgIGlmIChpbWFn
ZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKICAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLmFkZChwcm9wZXJ0eSk7Ci0gICAgcmV0dXJuIGltYWdlOworICAgIHJldHVybiBpbWFn
ZS5yZWxlYXNlKCk7CiB9CiAKLVN0eWxlSW1hZ2UqIENTU1N0eWxlU2VsZWN0b3I6OmdlbmVyYXRl
ZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVy
YXRvclZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gQ1NTU3R5bGVTZWxlY3Rv
cjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENT
U0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQogewotICAgIFN0eWxlSW1hZ2UqIGltYWdlID0g
dmFsdWUtPmdlbmVyYXRlZE9yUGVuZGluZ0ltYWdlKCk7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+
IGltYWdlID0gdmFsdWUtPmdlbmVyYXRlZE9yUGVuZGluZ0ltYWdlKCk7CiAgICAgaWYgKGltYWdl
ICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICBtX3BlbmRpbmdJbWFnZVByb3Bl
cnRpZXMuYWRkKHByb3BlcnR5KTsKLSAgICByZXR1cm4gaW1hZ2U7CisgICAgcmV0dXJuIGltYWdl
LnJlbGVhc2UoKTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsSW1hZ2UoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpA
QCAtNTc0MCw3ICs1NzQwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVGaWx0ZXJP
cGVyYQogCiAjZW5kaWYKIAotU3R5bGVJbWFnZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9hZFBlbmRp
bmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdlKQorUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBDU1NTdHlsZVNlbGVjdG9yOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0lt
YWdlKiBwZW5kaW5nSW1hZ2UpCiB7CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJl
c291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpOwogCkBAIC01NzcwLDg0ICs1NzcwLDY1IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bG9h
ZFBlbmRpbmdJbWFnZXMKICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKICAgICAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsKICAgICAgICAgICAgICAg
ICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdHlsZS0+YWNjZXNzQmFja2dy
b3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91
bmRMYXllci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5
ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBsb2FkZWRJbWFnZSA9IGxv
YWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5k
TGF5ZXItPmltYWdlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXll
ci0+c2V0SW1hZ2UobG9hZGVkSW1hZ2UpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExh
eWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
YmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQogICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgICBmb3IgKENv
bnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0eWxl
LT5jb250ZW50RGF0YSgpKTsgY29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29udGVudERhdGEt
Pm5leHQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudERhdGEtPmlzSW1hZ2Uo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNf
Y2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0lt
YWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVu
ZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGVkSW1hZ2UpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0
YSktPnNldEltYWdlKGxvYWRlZEltYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+c2V0SW1hZ2Uo
bG9hZGVkSW1hZ2UucmVsZWFzZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjog
ewogICAgICAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gbV9zdHlsZS0+
Y3Vyc29ycygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnNv
ckRhdGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBpbWFnZSA9IGN1cnJlbnRDdXJzb3IuaW1hZ2UoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2Uo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBsb2FkZWRJ
bWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihp
bWFnZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29yLnNl
dEltYWdlKGxvYWRlZEltYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29yLnNldEltYWdlKGxvYWRQ
ZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQogICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9zdHlsZS0+bGlzdFN0eWxlSW1hZ2Uo
KS0+aXNQZW5kaW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBs
b2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldExpc3RTdHlsZUltYWdlKGxvYWRlZEltYWdlKTsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkgJiYgbV9zdHls
ZS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2Fz
dDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgICAgIGlmIChtX3N0eWxl
LT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlz
UGVuZGluZ0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogbG9hZGVk
SW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4o
bV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3N0
eWxlLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkZWRJbWFnZSk7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1f
c3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAg
ICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uo
c3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJj
ZSgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCiAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICAgICAgICAg
IGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0eWxlLT5ib3hSZWZsZWN0KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tJbWFnZSA9
IHJlZmxlY3Rpb24tPm1hc2soKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2tJbWFnZS5p
bWFnZSgpICYmIG1hc2tJbWFnZS5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1h
Z2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0TWFzayhOaW5lUGllY2VJbWFn
ZShsb2FkZWRJbWFnZSwgbWFza0ltYWdlLmltYWdlU2xpY2VzKCksIG1hc2tJbWFnZS5maWxsKCks
IG1hc2tJbWFnZS5ib3JkZXJTbGljZXMoKSwgbWFza0ltYWdlLm91dHNldCgpLCBtYXNrSW1hZ2Uu
aG9yaXpvbnRhbFJ1bGUoKSwgbWFza0ltYWdlLnZlcnRpY2FsUnVsZSgpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGlu
Z0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0ltYWdlLmltYWdlKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2soTmluZVBpZWNl
SW1hZ2UobG9hZGVkSW1hZ2UucmVsZWFzZSgpLCBtYXNrSW1hZ2UuaW1hZ2VTbGljZXMoKSwgbWFz
a0ltYWdlLmZpbGwoKSwgbWFza0ltYWdlLmJvcmRlclNsaWNlcygpLCBtYXNrSW1hZ2Uub3V0c2V0
KCksIG1hc2tJbWFnZS5ob3Jpem9udGFsUnVsZSgpLCBtYXNrSW1hZ2UudmVydGljYWxSdWxlKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgICAgIGlmIChtX3N0eWxl
LT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+
aXNQZW5kaW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBsb2Fk
ZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2Uq
PihtX3N0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpOwotICAgICAgICAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZGVkSW1hZ2UpOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCkg
JiYgbV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAg
ICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGlu
Z0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+bWFza0JveElt
YWdlU291cmNlKCkpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0K
ICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2U6IHsKICAgICAgICAg
ICAgICAgICBmb3IgKEZpbGxMYXllciogbWFza0xheWVyID0gbV9zdHlsZS0+YWNjZXNzTWFza0xh
eWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFn
ZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHlsZUlt
YWdlKiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5k
aW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1hc2tMYXllci0+c2V0SW1hZ2UobG9hZGVkSW1hZ2UpOwotICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVy
LT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbWFz
a0xheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGlu
Z0ltYWdlKj4obWFza0xheWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gMTAxMTMwKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDkgKzI5NCw5IEBAIHBy
aXZhdGU6CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFlldEF2YWls
YWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KIAotICAgIFN0eWxlSW1h
Z2UqIHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLSAgICBTdHlsZUltYWdl
KiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSop
OwotICAgIFN0eWxlSW1hZ2UqIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0
eUlELCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKik7CisgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAgUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1h
Z2VWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5n
RnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqKTsKIAogICAg
IGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0KICAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGU7IH0KQEAgLTM0Myw3ICszNDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBwbHlTVkdQ
cm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlKik7CiAjZW5kaWYKIAotICAgIFN0eWxlSW1hZ2UqIGxv
YWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqKTsKICAgICB2b2lkIGxv
YWRQZW5kaW5nSW1hZ2VzKCk7CiAKICAgICBzdHJ1Y3QgTWF0Y2hlZFN0eWxlRGVjbGFyYXRpb24g
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaAkocmV2
aXNpb24gMTAxMTMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGlz
Q29tcG9zaXRlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVTZXQ7IH0KICAgICBib29s
IGlzU2l6ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZVR5cGUgIT0gU2l6ZU5vbmU7IH0KICAg
ICAKLSAgICB2b2lkIHNldEltYWdlKFN0eWxlSW1hZ2UqIGkpIHsgbV9pbWFnZSA9IGk7IG1faW1h
Z2VTZXQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRJbWFnZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IGkpIHsgbV9pbWFnZSA9IGk7IG1faW1hZ2VTZXQgPSB0cnVlOyB9CiAgICAgdm9pZCBzZXRYUG9z
aXRpb24oTGVuZ3RoIGwpIHsgbV94UG9zaXRpb24gPSBsOyBtX3hQb3NTZXQgPSB0cnVlOyB9CiAg
ICAgdm9pZCBzZXRZUG9zaXRpb24oTGVuZ3RoIGwpIHsgbV95UG9zaXRpb24gPSBsOyBtX3lQb3NT
ZXQgPSB0cnVlOyB9CiAgICAgdm9pZCBzZXRBdHRhY2htZW50KEVGaWxsQXR0YWNobWVudCBhdHRh
Y2htZW50KSB7IG1fYXR0YWNobWVudCA9IGF0dGFjaG1lbnQ7IG1fYXR0YWNobWVudFNldCA9IHRy
dWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGll
Y2VJbWFnZS5oCShyZXZpc2lvbiAxMDExMzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvTmluZVBpZWNlSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIE5pbmVQaWVjZUltYWdlKFN0eWxlSW1hZ2UqIGlt
YWdlLCBMZW5ndGhCb3ggaW1hZ2VTbGljZXMsIGJvb2wgZmlsbCwgTGVuZ3RoQm94IGJvcmRlclNs
aWNlcywgTGVuZ3RoQm94IG91dHNldCwgRU5pbmVQaWVjZUltYWdlUnVsZSBoLCBFTmluZVBpZWNl
SW1hZ2VSdWxlIHYpIAorICAgIE5pbmVQaWVjZUltYWdlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
aW1hZ2UsIExlbmd0aEJveCBpbWFnZVNsaWNlcywgYm9vbCBmaWxsLCBMZW5ndGhCb3ggYm9yZGVy
U2xpY2VzLCBMZW5ndGhCb3ggb3V0c2V0LCBFTmluZVBpZWNlSW1hZ2VSdWxlIGgsIEVOaW5lUGll
Y2VJbWFnZVJ1bGUgdikgCiAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCiAgICAgICAsIG1faW1hZ2VT
bGljZXMoaW1hZ2VTbGljZXMpCiAgICAgICAsIG1fYm9yZGVyU2xpY2VzKGJvcmRlclNsaWNlcykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2Vu
ZXJhdGVkSW1hZ2UuaAkocmV2aXNpb24gMTAxMTMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVHZW5lcmF0
ZWRJbWFnZSh2YWwsIGZpeGVkU2l6ZSkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgV3JhcHBlZElt
YWdlUHRyIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2dlbmVyYXRvcjsgfQorICAgIHZpcnR1YWwg
V3JhcHBlZEltYWdlUHRyIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2dlbmVyYXRvci5nZXQoKTsg
fQogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSgpIGNvbnN0Owog
CkBAIC01MywxNCArNTMsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFn
ZT4gaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OwogICAgIAogcHJp
dmF0ZToKLSAgICBTdHlsZUdlbmVyYXRlZEltYWdlKENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZh
bCwgYm9vbCBmaXhlZFNpemUpCisgICAgU3R5bGVHZW5lcmF0ZWRJbWFnZShQYXNzUmVmUHRyPENT
U0ltYWdlR2VuZXJhdG9yVmFsdWU+IHZhbCwgYm9vbCBmaXhlZFNpemUpCiAgICAgICAgIDogbV9n
ZW5lcmF0b3IodmFsKQogICAgICAgICAsIG1fZml4ZWRTaXplKGZpeGVkU2l6ZSkKICAgICB7CiAg
ICAgICAgICBtX2lzR2VuZXJhdGVkSW1hZ2UgPSB0cnVlOwogICAgIH0KICAgICAKLSAgICBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlKiBtX2dlbmVyYXRvcjsgLy8gVGhlIGdlbmVyYXRvciBob2xkcyBh
IHJlZmVyZW5jZSB0byB1cy4KKyAgICBSZWZQdHI8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4gbV9n
ZW5lcmF0b3I7CiAgICAgSW50U2l6ZSBtX2NvbnRhaW5lclNpemU7CiAgICAgYm9vbCBtX2ZpeGVk
U2l6ZTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116631</attachid>
            <date>2011-11-25 09:08:48 -0800</date>
            <delta_ts>2011-11-25 09:57:19 -0800</delta_ts>
            <desc>patch4</desc>
            <filename>generated-image-ref-4.patch</filename>
            <type>text/plain</type>
            <size>22001</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDExLTExLTI1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTdHlsZUdlbmVyYXRlZEltYWdl
IHNob3VsZCByZWYgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNzQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFJlbmRlclN0eWxlIG93bnMgYSBidW5j
aCBvZiBTdHlsZUltYWdlIG9iamVjdHMuIEhvd2V2ZXIgU3R5bGVHZW5lcmF0ZWRJbWFnZSBkb2Vz
IG5vdCByZWYgdGhlCisgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUgaXQgaG9sZHMgc28g
d2UgY3VycmVudGx5IHJlbHkgb24gdGhlIHN0eWxlc2hlZXQgdG8ga2VlcCB0aGUgQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZXMKKyAgICAgICAgYWxpdmUgYXMgbG9uZyBhcyBSZW5kZXJTdHlsZSBzdGF5
cyBhbGl2ZS4gV2hpbGUgdGhpcyB3b3JrcyAoUmVuZGVyU3R5bGVzIGFyZSB0aHJvd24gYXdheSBp
ZiBzdHlsZXNoZWV0cworICAgICAgICBjaGFuZ2UpIGl0IGlzIG5vdCBwYXJ0aWN1bGFybHkgcm9i
dXN0IG9yIG5pY2UuCisKKyAgICAgICAgLSBVc2UgUmVmUHRyPENTU0ltYWdlR2VuZXJhdG9yVmFs
dWU+IGluIFN0eWxlR2VuZXJhdGVkSW1hZ2UKKyAgICAgICAgLSBSZW1vdmUgdGhlIFJlZlB0cjxT
dHlsZUdlbmVyYXRlZEltYWdlPiBmcm9tIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUuCisgICAgICAg
ICAgVGhlcmUgaXMgbm8gZ29vZCByZWFzb24gdG8gY2FjaGUgU3R5bGVHZW5lcmF0ZWRJbWFnZSBh
cyBpdCBpcyBhIHNtYWxsIGFuZAorICAgICAgICAgIHVuY29tbW9uIG9iamVjdC4gV2l0aCB0aGF0
IHRoZSB3aG9sZSBiYWNrLXJlZmVyZW5jZSBiZWNvbWVzIHVubmVjZXNzYXJ5LgorICAgICAgICAt
IFN3aXRjaCBtb3JlIHBsYWNlcyB0byB1c2UgKFBhc3MpUmVmUHRyPFN0eWxlSW1hZ2U+IGZvciBj
b25zaXN0ZW5jeS4KKworICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OkNTU0ltYWdlR2VuZXJh
dG9yVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmg6CisgICAg
ICAgICogY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHA6CisgICAgICAgICogY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBw
bHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNhY2hlZE9yUGVuZGlu
Z0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpnZW5lcmF0
ZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9y
Ojpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxsTGF5ZXI6OnNldEltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvTmluZVBp
ZWNlSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUltYWdlOjpOaW5lUGllY2VJ
bWFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVHZW5lcmF0ZWRJbWFnZTo6U3R5bGVHZW5lcmF0ZWRJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUdlbmVyYXRlZEltYWdlOjpjc3NWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUdlbmVyYXRlZEltYWdlOjppbWFnZVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVHZW5lcmF0ZWRJbWFnZTo6YWRkQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlR2VuZXJhdGVkSW1hZ2U6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUdlbmVyYXRlZEltYWdlOjppbWFnZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL1N0eWxlR2VuZXJhdGVkSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUdlbmVyYXRlZElt
YWdlOjpkYXRhKToKKwogMjAxMS0xMS0yNSAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmVtb3ZlIHJlZHVuZGFudCBzZXRTdHJpY3RQYXJzaW5nKGZhbHNlKSBj
YWxscyBvbiBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbnMuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCShyZXZpc2lvbiAxMDExMzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlKENsYXNzVHlwZSBjbGFzc1R5
cGUpCiAgICAgOiBDU1NWYWx1ZShjbGFzc1R5cGUpCi0gICAgLCBtX2FjY2Vzc2VkSW1hZ2UoZmFs
c2UpCiB7CiB9CiAKQEAgLTExMSwyOCArMTEwLDYgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZh
bHVlOjpwdXRJbWFnZShjbwogICAgIG1faW1hZ2VzLmFkZChzaXplLCBpbWFnZSk7CiB9CiAKLVN0
eWxlSW1hZ2UqIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmdlbmVyYXRlZE9yUGVuZGluZ0ltYWdl
KCkKLXsKLSAgICBpZiAoaXNQZW5kaW5nKCkpCi0gICAgICAgIG1faW1hZ2UgPSBTdHlsZVBlbmRp
bmdJbWFnZTo6Y3JlYXRlKHRoaXMpLmdldCgpOwotICAgIGVsc2UgaWYgKCFtX2FjY2Vzc2VkSW1h
Z2UpIHsKLSAgICAgICAgbV9hY2Nlc3NlZEltYWdlID0gdHJ1ZTsKLSAgICAgICAgbV9pbWFnZSA9
IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSh0aGlzLCBpc0ZpeGVkU2l6ZSgpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKLX0KLQotU3R5bGVHZW5lcmF0ZWRJbWFnZSog
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Z2VuZXJhdGVkSW1hZ2UoKQotewotICAgIGlmICghbV9h
Y2Nlc3NlZEltYWdlKSB7Ci0gICAgICAgIG1fYWNjZXNzZWRJbWFnZSA9IHRydWU7Ci0gICAgICAg
IG1faW1hZ2UgPSBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUodGhpcywgaXNGaXhlZFNpemUo
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2Uq
PihtX2ltYWdlLmdldCgpKTsKLX0KLQogUGFzc1JlZlB0cjxJbWFnZT4gQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZTo6aW1hZ2UoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKIHsKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgJKHJldmlzaW9uIDEwMTEzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYwLDkgKzYwLDYgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9iamVj
dCopOwogICAgIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IElu
dFNpemUmKTsKIAotICAgIFN0eWxlSW1hZ2UqIGdlbmVyYXRlZE9yUGVuZGluZ0ltYWdlKCk7Ci0g
ICAgU3R5bGVHZW5lcmF0ZWRJbWFnZSogZ2VuZXJhdGVkSW1hZ2UoKTsKLQogICAgIGJvb2wgaXNG
aXhlZFNpemUoKSBjb25zdDsKICAgICBJbnRTaXplIGZpeGVkU2l6ZShjb25zdCBSZW5kZXJPYmpl
Y3QqKTsKIApAQCAtNzcsOSArNzQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBwdXRJbWFnZShj
b25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxJbWFnZT4pOwogICAgIGNvbnN0IFJlbmRlck9iamVj
dFNpemVDb3VudE1hcCYgY2xpZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50czsgfQogCi0g
ICAgUmVmUHRyPFN0eWxlSW1hZ2U+IG1faW1hZ2U7Ci0gICAgYm9vbCBtX2FjY2Vzc2VkSW1hZ2U7
Ci0KICAgICBIYXNoQ291bnRlZFNldDxJbnRTaXplPiBtX3NpemVzOyAvLyBBIGNvdW50IG9mIGhv
dyBtYW55IHRpbWVzIGEgZ2l2ZW4gaW1hZ2Ugc2l6ZSBpcyBpbiB1c2UuCiAgICAgUmVuZGVyT2Jq
ZWN0U2l6ZUNvdW50TWFwIG1fY2xpZW50czsgLy8gQSBtYXAgZnJvbSBSZW5kZXJPYmplY3RzICh3
aXRoIGVudHJ5IGNvdW50KSB0byBpbWFnZSBzaXplcy4KICAgICBIYXNoTWFwPEludFNpemUsIFJl
ZlB0cjxJbWFnZT4gPiBtX2ltYWdlczsgLy8gQSBjYWNoZSBvZiBJbWFnZSBvYmplY3RzIGJ5IGlt
YWdlIHNpemUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3Bl
cnR5LmNwcAkocmV2aXNpb24gMTAxMTMwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
QXBwbHlQcm9wZXJ0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OCwxNiArMzg4LDI4IEBAIHB1
YmxpYzoKICAgICB9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEZpbGxMYXll
ckFjY2Vzc29yVHlwZXMgeworICAgIHR5cGVkZWYgVCBTZXR0ZXI7CisgICAgdHlwZWRlZiBUIEdl
dHRlcjsKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBGaWxsTGF5ZXJBY2Nlc3NvclR5cGVzPFN0
eWxlSW1hZ2UqPiB7CisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFNldHRlcjsK
KyAgICB0eXBlZGVmIFN0eWxlSW1hZ2UqIEdldHRlcjsKK307CisKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBULAogICAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwKICAgICAgICAgICBFRmls
bExheWVyVHlwZSBmaWxsTGF5ZXJUeXBlLAogICAgICAgICAgIEZpbGxMYXllciogKFJlbmRlclN0
eWxlOjoqYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCksCiAgICAgICAgICAgY29uc3QgRmlsbExheWVy
KiAoUmVuZGVyU3R5bGU6OipsYXllcnNGdW5jdGlvbikoKSBjb25zdCwKICAgICAgICAgICBib29s
IChGaWxsTGF5ZXI6Oip0ZXN0RnVuY3Rpb24pKCkgY29uc3QsCi0gICAgICAgICAgVCAoRmlsbExh
eWVyOjoqZ2V0RnVuY3Rpb24pKCkgY29uc3QsCi0gICAgICAgICAgdm9pZCAoRmlsbExheWVyOjoq
c2V0RnVuY3Rpb24pKFQpLAorICAgICAgICAgIHR5cGVuYW1lIEZpbGxMYXllckFjY2Vzc29yVHlw
ZXM8VD46OkdldHRlciAoRmlsbExheWVyOjoqZ2V0RnVuY3Rpb24pKCkgY29uc3QsCisgICAgICAg
ICAgdm9pZCAoRmlsbExheWVyOjoqc2V0RnVuY3Rpb24pKHR5cGVuYW1lIEZpbGxMYXllckFjY2Vz
c29yVHlwZXM8VD46OlNldHRlciksCiAgICAgICAgICAgdm9pZCAoRmlsbExheWVyOjoqY2xlYXJG
dW5jdGlvbikoKSwKLSAgICAgICAgICBUICgqaW5pdGlhbEZ1bmN0aW9uKShFRmlsbExheWVyVHlw
ZSksCisgICAgICAgICAgdHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxUPjo6R2V0dGVy
ICgqaW5pdGlhbEZ1bmN0aW9uKShFRmlsbExheWVyVHlwZSksCiAgICAgICAgICAgdm9pZCAoQ1NT
U3R5bGVTZWxlY3Rvcjo6Km1hcEZpbGxGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVy
KiwgQ1NTVmFsdWUqKT4KIGNsYXNzIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXIgewogcHVibGljOgpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTAx
MTMwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODYwLDcgKzI4NjAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
UHJvcGVydHkoaW50CiAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVl
OyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVt
ID0gaS52YWx1ZSgpOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JWYWx1
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChzdGF0aWNfY2FzdDxD
U1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSktPmdlbmVyYXRlZEltYWdlKCksIGRpZFNldCk7
CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdl
OjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlk
U2V0KTsKICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgfQogCkBA
IC00Mjg4LDcgKzQyODgsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxPcmlnaW4o
Q1NTCiAgICAgbGF5ZXItPnNldE9yaWdpbigqcHJpbWl0aXZlVmFsdWUpOwogfQogCi1TdHlsZUlt
YWdlKiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IENTU1ZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gQ1NTU3R5bGVTZWxlY3Rv
cjo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUpCiB7
CiAgICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGNhY2hlZE9y
UGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZh
bHVlKSk7CkBAIC00Mjk5LDIwICs0Mjk5LDIxIEBAIFN0eWxlSW1hZ2UqIENTU1N0eWxlU2VsZWN0
b3I6OnN0eWxlSW1hZ2UKICAgICByZXR1cm4gMDsKIH0KIAotU3R5bGVJbWFnZSogQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IENTU0ltYWdlVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBDU1NTdHlsZVNl
bGVjdG9yOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
Q1NTSW1hZ2VWYWx1ZSogdmFsdWUpCiB7Ci0gICAgU3R5bGVJbWFnZSogaW1hZ2UgPSB2YWx1ZS0+
Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2
YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlz
UGVuZGluZ0ltYWdlKCkpCiAgICAgICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5hZGQocHJv
cGVydHkpOwotICAgIHJldHVybiBpbWFnZTsKKyAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwog
fQogCi1TdHlsZUltYWdlKiBDU1NTdHlsZVNlbGVjdG9yOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9t
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFs
dWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1N0eWxlU2VsZWN0b3I6OmdlbmVyYXRlZE9y
UGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVyYXRv
clZhbHVlKiB2YWx1ZSkKIHsKLSAgICBTdHlsZUltYWdlKiBpbWFnZSA9IHZhbHVlLT5nZW5lcmF0
ZWRPclBlbmRpbmdJbWFnZSgpOwotICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1h
Z2UoKSkKKyAgICBpZiAodmFsdWUtPmlzUGVuZGluZygpKSB7CiAgICAgICAgIG1fcGVuZGluZ0lt
YWdlUHJvcGVydGllcy5hZGQocHJvcGVydHkpOwotICAgIHJldHVybiBpbWFnZTsKKyAgICAgICAg
cmV0dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOworICAgIH0KKyAgICByZXR1
cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKIH0KIAogdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjptYXBGaWxsSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgRmlsbExheWVy
KiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtNTc0MCw3ICs1NzQxLDcgQEAgYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjpjcmVhdGVGaWx0ZXJPcGVyYQogCiAjZW5kaWYKIAotU3R5bGVJbWFnZSog
Q1NTU3R5bGVTZWxlY3Rvcjo6bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVu
ZGluZ0ltYWdlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBDU1NTdHlsZVNlbGVjdG9yOjpsb2Fk
UGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1hZ2UpCiB7CiAgICAgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCkBAIC01NzUyLDcgKzU3NTMsNyBAQCBT
dHlsZUltYWdlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2FkUGVuZGluCiAgICAgaWYgKHBlbmRpbmdJ
bWFnZS0+Y3NzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7CiAgICAgICAgIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUqIGltYWdlR2VuZXJhdG9yVmFsdWUgPSBwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlR2Vu
ZXJhdG9yVmFsdWUoKTsKICAgICAgICAgaW1hZ2VHZW5lcmF0b3JWYWx1ZS0+bG9hZFN1YmltYWdl
cyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7Ci0gICAgICAgIHJldHVybiBpbWFnZUdlbmVyYXRvclZh
bHVlLT5nZW5lcmF0ZWRJbWFnZSgpOworICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFn
ZTo6Y3JlYXRlKGltYWdlR2VuZXJhdG9yVmFsdWUpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpA
QCAtNTc3MCw4NCArNTc3MSw2NSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmxvYWRQZW5kaW5n
SW1hZ2VzCiAgICAgICAgIHN3aXRjaCAoY3VycmVudFByb3BlcnR5KSB7CiAgICAgICAgICAgICBj
YXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOiB7CiAgICAgICAgICAgICAgICAgZm9yIChG
aWxsTGF5ZXIqIGJhY2tncm91bmRMYXllciA9IG1fc3R5bGUtPmFjY2Vzc0JhY2tncm91bmRMYXll
cnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXIt
Pm5leHQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZExheWVyLT5pbWFn
ZSgpICYmIGJhY2tncm91bmRMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGlu
Z0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5p
bWFnZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldElt
YWdlKGxvYWRlZEltYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBpZiAoYmFja2dyb3VuZExheWVyLT5pbWFnZSgpICYmIGJhY2tncm91bmRMYXllci0+aW1h
Z2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91
bmRMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRp
bmdJbWFnZSo+KGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlDb250ZW50OiB7CiAgICAgICAgICAgICAgICAgZm9yIChDb250ZW50RGF0
YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9zdHlsZS0+Y29udGVu
dERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8SW1h
Z2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+aW1hZ2UoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0eWxlSW1hZ2UqIGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0
aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGltYWdlKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFn
ZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGltYWdlKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGxvYWRlZEltYWdlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5zZXRJ
bWFnZShsb2FkZWRJbWFnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0YSktPnNldEltYWdlKGxvYWRlZElt
YWdlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0KICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDdXJzb3I6IHsKICAgICAg
ICAgICAgICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IG1fc3R5bGUtPmN1cnNvcnMo
KSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxp
c3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3JEYXRhJiBj
dXJyZW50Q3Vyc29yID0gY3Vyc29yTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoU3R5bGVJbWFnZSogaW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmltYWdlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogbG9hZGVkSW1hZ2UgPSBs
b2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEN1cnNvci5zZXRJbWFnZShs
b2FkZWRJbWFnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudEN1cnNvci5zZXRJbWFnZShsb2FkUGVuZGluZ0lt
YWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZTogewotICAgICAgICAgICAgICAgIGlmIChtX3N0
eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3R5bGUtPmxpc3RTdHlsZUltYWdlKCktPmlzUGVu
ZGluZ0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogbG9hZGVkSW1h
Z2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9z
dHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3N0eWxlLT5z
ZXRMaXN0U3R5bGVJbWFnZShsb2FkZWRJbWFnZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3R5bGUtPmxpc3RT
dHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnNldExpc3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQ
ZW5kaW5nSW1hZ2UqPihtX3N0eWxlLT5saXN0U3R5bGVJbWFnZSgpKSkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgICAgICBpZiAobV9zdHlsZS0+Ym9yZGVy
SW1hZ2VTb3VyY2UoKSAmJiBtX3N0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJ
bWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0eWxlSW1hZ2UqIGxvYWRlZEltYWdlID0g
bG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUt
PmJvcmRlckltYWdlU291cmNlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
Qm9yZGVySW1hZ2VTb3VyY2UobG9hZGVkSW1hZ2UpOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAobV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0eWxlLT5i
b3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19j
YXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSkpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKICAgICAgICAgICAgICAgICBpZiAoU3R5
bGVSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbV9zdHlsZS0+Ym94UmVmbGVjdCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBtYXNrSW1hZ2UgPSByZWZsZWN0
aW9uLT5tYXNrKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAm
JiBtYXNrSW1hZ2UuaW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgU3R5bGVJbWFnZSogbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRp
Y19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0ltYWdlLmltYWdlKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2soTmluZVBpZWNlSW1hZ2UobG9hZGVk
SW1hZ2UsIG1hc2tJbWFnZS5pbWFnZVNsaWNlcygpLCBtYXNrSW1hZ2UuZmlsbCgpLCBtYXNrSW1h
Z2UuYm9yZGVyU2xpY2VzKCksIG1hc2tJbWFnZS5vdXRzZXQoKSwgbWFza0ltYWdlLmhvcml6b250
YWxSdWxlKCksIG1hc2tJbWFnZS52ZXJ0aWNhbFJ1bGUoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShz
dGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKE5pbmVQaWVjZUltYWdlKGxv
YWRlZEltYWdlLnJlbGVhc2UoKSwgbWFza0ltYWdlLmltYWdlU2xpY2VzKCksIG1hc2tJbWFnZS5m
aWxsKCksIG1hc2tJbWFnZS5ib3JkZXJTbGljZXMoKSwgbWFza0ltYWdlLm91dHNldCgpLCBtYXNr
SW1hZ2UuaG9yaXpvbnRhbFJ1bGUoKSwgbWFza0ltYWdlLnZlcnRpY2FsUnVsZSgpKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXNrQm94SW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgICAgICBpZiAobV9zdHlsZS0+bWFza0Jv
eEltYWdlU291cmNlKCkgJiYgbV9zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGlu
Z0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogbG9hZGVkSW1hZ2Ug
PSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdHls
ZS0+bWFza0JveEltYWdlU291cmNlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9zdHlsZS0+
c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRlZEltYWdlKTsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYmIG1fc3R5
bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShz
dGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJj
ZSgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCiAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOiB7CiAgICAgICAgICAgICAgICAg
Zm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3R5bGUtPmFjY2Vzc01hc2tMYXllcnMoKTsg
bWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAobWFza0xheWVyLT5pbWFnZSgpICYmIG1hc2tMYXllci0+aW1hZ2UoKS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogbG9h
ZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdl
Kj4obWFza0xheWVyLT5pbWFnZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXNrTGF5
ZXItPnNldEltYWdlKGxvYWRlZEltYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAobWFza0xheWVyLT5pbWFnZSgpICYmIG1hc2tMYXllci0+aW1hZ2Uo
KS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tMYXllci0+
c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+
KG1hc2tMYXllci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmgJKHJldmlzaW9uIDEwMTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw5ICsyOTQsOSBAQCBwcml2YXRlOgog
cHVibGljOgogICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFibGUoKSB7
IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9CiAKLSAgICBTdHlsZUltYWdlKiBzdHls
ZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0gICAgU3R5bGVJbWFnZSogY2FjaGVk
T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlVmFsdWUqKTsKLSAgICBT
dHlsZUltYWdlKiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJ
bWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlVmFsdWUq
KTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1
ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKik7CiAKICAgICBib29sIGFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlOyB9CiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9
CkBAIC0zNDMsNyArMzQzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHko
aW50IGlkLCBDU1NWYWx1ZSopOwogI2VuZGlmCiAKLSAgICBTdHlsZUltYWdlKiBsb2FkUGVuZGlu
Z0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKik7CisgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBs
b2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKik7CiAgICAgdm9pZCBsb2FkUGVuZGlu
Z0ltYWdlcygpOwogCiAgICAgc3RydWN0IE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmgJKHJldmlzaW9uIDEw
MTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NvbXBvc2l0
ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlU2V0OyB9CiAgICAgYm9vbCBpc1NpemVT
ZXQoKSBjb25zdCB7IHJldHVybiBtX3NpemVUeXBlICE9IFNpemVOb25lOyB9CiAgICAgCi0gICAg
dm9pZCBzZXRJbWFnZShTdHlsZUltYWdlKiBpKSB7IG1faW1hZ2UgPSBpOyBtX2ltYWdlU2V0ID0g
dHJ1ZTsgfQorICAgIHZvaWQgc2V0SW1hZ2UoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpKSB7IG1f
aW1hZ2UgPSBpOyBtX2ltYWdlU2V0ID0gdHJ1ZTsgfQogICAgIHZvaWQgc2V0WFBvc2l0aW9uKExl
bmd0aCBsKSB7IG1feFBvc2l0aW9uID0gbDsgbV94UG9zU2V0ID0gdHJ1ZTsgfQogICAgIHZvaWQg
c2V0WVBvc2l0aW9uKExlbmd0aCBsKSB7IG1feVBvc2l0aW9uID0gbDsgbV95UG9zU2V0ID0gdHJ1
ZTsgfQogICAgIHZvaWQgc2V0QXR0YWNobWVudChFRmlsbEF0dGFjaG1lbnQgYXR0YWNobWVudCkg
eyBtX2F0dGFjaG1lbnQgPSBhdHRhY2htZW50OyBtX2F0dGFjaG1lbnRTZXQgPSB0cnVlOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2Uu
aAkocmV2aXNpb24gMTAxMTMwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05p
bmVQaWVjZUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgog
ICAgIHsKICAgICB9CiAKLSAgICBOaW5lUGllY2VJbWFnZShTdHlsZUltYWdlKiBpbWFnZSwgTGVu
Z3RoQm94IGltYWdlU2xpY2VzLCBib29sIGZpbGwsIExlbmd0aEJveCBib3JkZXJTbGljZXMsIExl
bmd0aEJveCBvdXRzZXQsIEVOaW5lUGllY2VJbWFnZVJ1bGUgaCwgRU5pbmVQaWVjZUltYWdlUnVs
ZSB2KSAKKyAgICBOaW5lUGllY2VJbWFnZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlLCBM
ZW5ndGhCb3ggaW1hZ2VTbGljZXMsIGJvb2wgZmlsbCwgTGVuZ3RoQm94IGJvcmRlclNsaWNlcywg
TGVuZ3RoQm94IG91dHNldCwgRU5pbmVQaWVjZUltYWdlUnVsZSBoLCBFTmluZVBpZWNlSW1hZ2VS
dWxlIHYpIAogICAgICAgOiBtX2ltYWdlKGltYWdlKQogICAgICAgLCBtX2ltYWdlU2xpY2VzKGlt
YWdlU2xpY2VzKQogICAgICAgLCBtX2JvcmRlclNsaWNlcyhib3JkZXJTbGljZXMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlR2VuZXJhdGVk
SW1hZ2UuY3BwCShyZXZpc2lvbiAxMDExMzApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVHZW5lcmF0ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE2ICsy
OSwyMyBAQAogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CisgICAgCitTdHlsZUdlbmVyYXRlZEltYWdlOjpTdHlsZUdlbmVyYXRlZEltYWdlKFBhc3NSZWZQ
dHI8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4gdmFsdWUpCisgICAgOiBtX2ltYWdlR2VuZXJhdG9y
VmFsdWUodmFsdWUpICAKKyAgICAsIG1fZml4ZWRTaXplKG1faW1hZ2VHZW5lcmF0b3JWYWx1ZS0+
aXNGaXhlZFNpemUoKSkKK3sKKyAgICBtX2lzR2VuZXJhdGVkSW1hZ2UgPSB0cnVlOworfQogCiBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjc3NWYWx1ZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fZ2VuZXJhdG9yOworICAgIHJldHVybiBtX2ltYWdlR2VuZXJhdG9y
VmFsdWU7CiB9CiAKIEludFNpemUgU3R5bGVHZW5lcmF0ZWRJbWFnZTo6aW1hZ2VTaXplKGNvbnN0
IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0CiB7CiAgICAg
aWYgKG1fZml4ZWRTaXplKSB7Ci0gICAgICAgIEludFNpemUgZml4ZWRTaXplID0gbV9nZW5lcmF0
b3ItPmZpeGVkU2l6ZShyZW5kZXJlcik7CisgICAgICAgIEludFNpemUgZml4ZWRTaXplID0gbV9p
bWFnZUdlbmVyYXRvclZhbHVlLT5maXhlZFNpemUocmVuZGVyZXIpOwogICAgICAgICBpZiAobXVs
dGlwbGllciA9PSAxLjBmKQogICAgICAgICAgICAgcmV0dXJuIGZpeGVkU2l6ZTsKIApAQCAtNjgs
MTggKzc1LDE4IEBAIHZvaWQgU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y29tcHV0ZUludHJpbnMKIAog
dm9pZCBTdHlsZUdlbmVyYXRlZEltYWdlOjphZGRDbGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKIHsKLSAgICBtX2dlbmVyYXRvci0+YWRkQ2xpZW50KHJlbmRlcmVyLCBJbnRTaXplKCkpOwor
ICAgIG1faW1hZ2VHZW5lcmF0b3JWYWx1ZS0+YWRkQ2xpZW50KHJlbmRlcmVyLCBJbnRTaXplKCkp
OwogfQogCiB2b2lkIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OnJlbW92ZUNsaWVudChSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKQogewotICAgIG1fZ2VuZXJhdG9yLT5yZW1vdmVDbGllbnQocmVuZGVyZXIp
OworICAgIG1faW1hZ2VHZW5lcmF0b3JWYWx1ZS0+cmVtb3ZlQ2xpZW50KHJlbmRlcmVyKTsKIH0K
IAogUGFzc1JlZlB0cjxJbWFnZT4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6aW1hZ2UoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICByZW5kZXJl
ci0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zZXRTdHlsZShyZW5kZXJlci0+c3R5bGUo
KSk7Ci0gICAgcmV0dXJuIG1fZ2VuZXJhdG9yLT5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CisgICAg
cmV0dXJuIG1faW1hZ2VHZW5lcmF0b3JWYWx1ZS0+aW1hZ2UocmVuZGVyZXIsIHNpemUpOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVHZW5lcmF0ZWRJ
bWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUdlbmVyYXRlZEltYWdlLmgJKHJldmlzaW9uIDEwMTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZUdlbmVyYXRlZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDEyICszMywxMiBAQCBjbGFzcyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOwogCiBjbGFzcyBTdHls
ZUdlbmVyYXRlZEltYWdlIDogcHVibGljIFN0eWxlSW1hZ2UgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0eWxlR2VuZXJhdGVkSW1hZ2U+IGNyZWF0ZShDU1NJbWFnZUdlbmVyYXRv
clZhbHVlKiB2YWwsIGJvb2wgZml4ZWRTaXplKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxl
R2VuZXJhdGVkSW1hZ2U+IGNyZWF0ZShDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiB2YWx1ZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVHZW5lcmF0ZWRJbWFnZSh2YWws
IGZpeGVkU2l6ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlR2VuZXJhdGVk
SW1hZ2UodmFsdWUpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFdyYXBwZWRJbWFnZVB0ciBkYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9nZW5lcmF0b3I7IH0KKyAgICB2aXJ0dWFsIFdyYXBwZWRJbWFn
ZVB0ciBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUdlbmVyYXRvclZhbHVlLmdldCgpOyB9
CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlKCkgY29uc3Q7CiAK
QEAgLTUzLDE0ICs1Myw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+
IGltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSBjb25zdDsKICAgICAKIHByaXZh
dGU6Ci0gICAgU3R5bGVHZW5lcmF0ZWRJbWFnZShDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiB2YWws
IGJvb2wgZml4ZWRTaXplKQotICAgICAgICA6IG1fZ2VuZXJhdG9yKHZhbCkKLSAgICAgICAgLCBt
X2ZpeGVkU2l6ZShmaXhlZFNpemUpCi0gICAgewotICAgICAgICAgbV9pc0dlbmVyYXRlZEltYWdl
ID0gdHJ1ZTsKLSAgICB9CisgICAgU3R5bGVHZW5lcmF0ZWRJbWFnZShQYXNzUmVmUHRyPENTU0lt
YWdlR2VuZXJhdG9yVmFsdWU+KTsKICAgICAKLSAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiBt
X2dlbmVyYXRvcjsgLy8gVGhlIGdlbmVyYXRvciBob2xkcyBhIHJlZmVyZW5jZSB0byB1cy4KKyAg
ICBSZWZQdHI8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4gbV9pbWFnZUdlbmVyYXRvclZhbHVlOwog
ICAgIEludFNpemUgbV9jb250YWluZXJTaXplOwogICAgIGJvb2wgbV9maXhlZFNpemU7CiB9Owo=
</data>
<flag name="review"
          id="115839"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="115843"
          type_id="3"
          status="-"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>