<?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>91350</bug_id>
          
          <creation_ts>2012-07-15 17:26:39 -0700</creation_ts>
          <short_desc>[chromium] Unify compositor quad transforms into content space</short_desc>
          <delta_ts>2012-07-16 16:45:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>91417</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrienne Walker">enne</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>senorblanco</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>670022</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-15 17:26:39 -0700</bug_when>
    <thetext>[chromium] Unify compositor quad transforms into content space</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670023</commentid>
    <comment_count>1</comment_count>
      <attachid>152466</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-15 17:42:39 -0700</bug_when>
    <thetext>Created attachment 152466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670024</commentid>
    <comment_count>2</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-15 17:44:28 -0700</bug_when>
    <thetext>shawnsingh, danakj: Could one or both of y&apos;all unofficially review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670149</commentid>
    <comment_count>3</comment_count>
      <attachid>152466</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-16 00:22:04 -0700</bug_when>
    <thetext>Comment on attachment 152466
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:160
&gt; +    if (contentBounds().isEmpty())
&gt; +        quadTransformation.scale(1 / contentsScale());
&gt; +    else {
&gt; +        quadTransformation.scaleNonUniform(bounds().width() / static_cast&lt;double&gt;(contentBounds().width()),
&gt; +                                  bounds().height() / static_cast&lt;double&gt;(contentBounds().height()));
&gt; +        quadTransformation.translate(-contentBounds().width() / 2.0, -contentBounds().height() / 2.0);
&gt; +    }

In retrospect, I don&apos;t think this is always right, but I&apos;m not sure how to reconcile contentsScale which is a single value and the contentBounds/bounds ratio that handles different integer rounding in width and height.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670341</commentid>
    <comment_count>4</comment_count>
      <attachid>152466</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-16 07:57:36 -0700</bug_when>
    <thetext>Comment on attachment 152466
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:154
&gt; +    if (contentBounds().isEmpty())

Do we even need to return anything other than nullptr in this case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670383</commentid>
    <comment_count>5</comment_count>
      <attachid>152466</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-16 09:07:26 -0700</bug_when>
    <thetext>Comment on attachment 152466
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:160
&gt;&gt; +    }
&gt; 
&gt; In retrospect, I don&apos;t think this is always right, but I&apos;m not sure how to reconcile contentsScale which is a single value and the contentBounds/bounds ratio that handles different integer rounding in width and height.

What&apos;s an example of a case where this isn&apos;t right?  The few times I&apos;ve encountered this pattern, contentsScale wasn&apos;t good enough because of ImageLayers in particular, which have different horizontal and vertical scaling.   But it seemed to me like this code would handle all the cases I was aware of?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670396</commentid>
    <comment_count>6</comment_count>
      <attachid>152466</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-16 09:21:17 -0700</bug_when>
    <thetext>Comment on attachment 152466
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:154
&gt;&gt; +    if (contentBounds().isEmpty())
&gt; 
&gt; Do we even need to return anything other than nullptr in this case?

Yeah.  The gutter quads use the root layer (the real root, not the NCCH) to generate a shared quad state.  Maybe we should just create that manually.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:160
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; In retrospect, I don&apos;t think this is always right, but I&apos;m not sure how to reconcile contentsScale which is a single value and the contentBounds/bounds ratio that handles different integer rounding in width and height.
&gt; 
&gt; What&apos;s an example of a case where this isn&apos;t right?  The few times I&apos;ve encountered this pattern, contentsScale wasn&apos;t good enough because of ImageLayers in particular, which have different horizontal and vertical scaling.   But it seemed to me like this code would handle all the cases I was aware of?

It may just be an issue in tests, where contentBounds is not always up to date with contentsScale.  I&apos;ll take another look and see if there&apos;s something I can clean up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670557</commentid>
    <comment_count>7</comment_count>
      <attachid>152586</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-16 12:27:17 -0700</bug_when>
    <thetext>Created attachment 152586
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670579</commentid>
    <comment_count>8</comment_count>
      <attachid>152593</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-16 12:55:24 -0700</bug_when>
    <thetext>Created attachment 152593
Handle empty bounds in create quad state</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670581</commentid>
    <comment_count>9</comment_count>
      <attachid>152593</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-16 12:56:26 -0700</bug_when>
    <thetext>Comment on attachment 152593
Handle empty bounds in create quad state

lgtm!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670730</commentid>
    <comment_count>10</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-16 15:40:11 -0700</bug_when>
    <thetext>kbr, senorblanco: Would one of you mind taking a look at this compositor patch that has an unofficial lgtm from danakj?

It&apos;s just a refactoring that shouldn&apos;t cause any change in behavior.  All layers other than tiled layers have bounds == contentBounds, so the extra code in createSharedQuadState generates the same quadTransform that it used to for both tiled layers and non-tiled layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670744</commentid>
    <comment_count>11</comment_count>
      <attachid>152593</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-07-16 15:56:07 -0700</bug_when>
    <thetext>Comment on attachment 152593
Handle empty bounds in create quad state

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

Mostly a rubber stamp, though I did look through the code. One question. Go ahead and cq+ if this isn&apos;t an issue.

&gt; Source/WebKit/chromium/tests/CCQuadCullerTest.cpp:202
&gt; +    ASSERT_EQ(quadList.size(), 12u);

Will this get run in non-debug builds?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670752</commentid>
    <comment_count>12</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-16 16:04:39 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 152593 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=152593&amp;action=review
&gt; 
&gt; Mostly a rubber stamp, though I did look through the code. One question. Go ahead and cq+ if this isn&apos;t an issue.

Thanks.  :)

&gt; &gt; Source/WebKit/chromium/tests/CCQuadCullerTest.cpp:202
&gt; &gt; +    ASSERT_EQ(quadList.size(), 12u);
&gt; 
&gt; Will this get run in non-debug builds?

Yeah.  ASSERT_EQ aborts the test if it doesn&apos;t pass.  Since later checks reference quadList[i], if that&apos;s wrong, then those will assert.  See http://code.google.com/p/googletest/wiki/Primer#Basic_Assertions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670778</commentid>
    <comment_count>13</comment_count>
      <attachid>152593</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-16 16:45:50 -0700</bug_when>
    <thetext>Comment on attachment 152593
Handle empty bounds in create quad state

Clearing flags on attachment: 152593

Committed r122776: &lt;http://trac.webkit.org/changeset/122776&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670779</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-16 16:45:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152466</attachid>
            <date>2012-07-15 17:42:39 -0700</date>
            <delta_ts>2012-07-16 12:27:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91350-20120715174238.patch</filename>
            <type>text/plain</type>
            <size>13542</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZhOTc4NzQxYzdhOTU2
MDU0MTI2NDUwYjE2ZTVhMmMzMDcyZTc4My4uYWU5ZjA1Yzk0Y2VlMzQ3YjY0NzQwZWM5Y2E0MDRl
NTA3NjdjOTJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTA3LTE1ICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBVbmlm
eSBjb21wb3NpdG9yIHF1YWQgdHJhbnNmb3JtcyBpbnRvIGNvbnRlbnQgc3BhY2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMzUwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIHRoZSBwdXJwb3NlIG9m
IHNpbXBsaWZpY2F0aW9uIGFuZCBhcyBhIGZpcnN0IHN0ZXAgdG93YXJkcyByZW1vdmluZworICAg
ICAgICBhbnkgdHJhbnNmb3JtIHRoYXQgdGFrZXMgYSBjZW50ZXJlZCByZWN0LCByZW1vdmUgdGhl
IGFiaWxpdHkgb2YgbGF5ZXJzCisgICAgICAgIHRvIG92ZXJyaWRlIHRoZSBxdWFkIHRyYW5zZm9y
bS4gQWxsIHF1YWRzIGFuZCBxdWFkIHRyYW5zZm9ybXMgb3BlcmF0ZQorICAgICAgICBvbiBjb250
ZW50IHNwYWNlIHdpdGggdGhlIG9yaWdpbiBpbiB0aGUgdG9wIGxlZnQuCisKKyAgICAgICAgTm8g
Y2hhbmdlIGluIGZ1bmN0aW9uYWxpdHk7IHRlc3RlZCBieSBleGlzdGluZyBsYXlvdXQgYW5kIHVu
aXQgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lP
U3VyZmFjZUxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0lPU3VyZmFjZUxheWVy
SW1wbDo6YXBwZW5kUXVhZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpjcmVh
dGVTaGFyZWRRdWFkU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU29saWRDb2xvckxheWVySW1wbDo6YXBwZW5kUXVhZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1w
bC5oOgorICAgICAgICAoQ0NTb2xpZENvbG9yTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUZXh0dXJlTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oOgorICAg
ICAgICAoQ0NUaWxlZExheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVv
TGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisKIDIwMTItMDctMTIgIERhbmEgSmFuc2VucyAgPGRh
bmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBUaGUgcm9vdCBsYXllciBz
aG91bGQgbm90IHRyeSBjcmVhdGUgYSBzZWNvbmQgUmVuZGVyU3VyZmFjZSBmb3IgaXRzZWxmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGZhZjI2YTc3YWE2NTU2OGEyZDA2N2U2NzhlMzUy
NjAxYzkyYTNhZWQuLjAyNDNjN2EwZGMxMjJjZmJlNWE4Njg5OTE4YmFlMzdkOGEwNGUxYjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDctMTUgIEFk
cmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFVu
aWZ5IGNvbXBvc2l0b3IgcXVhZCB0cmFuc2Zvcm1zIGludG8gY29udGVudCBzcGFjZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEzNTAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGVzdCB0byBm
aWxsIG91dCBtb3JlIG5lZWRlZCBwcm9wZXJ0aWVzIG9uIGxheWVycy4KKworICAgICAgICAqIHRl
c3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwOgorICAgICAgICAoQ0NMYXllclRlc3RD
b21tb246OlRFU1QpOgorCiAyMDEyLTA3LTEyICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCB0
cnkgY3JlYXRlIGEgc2Vjb25kIFJlbmRlclN1cmZhY2UgZm9yIGl0c2VsZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJT1N1cmZhY2VM
YXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NJT1N1cmZhY2VMYXllckltcGwuY3BwCmluZGV4IGNlM2IzOGU5NjRhNDVjMWRhMTg1OTNj
ZjYyZmJmMjk2MDNiOWU2MGIuLmQxMTU3ZWQwMzc5Nzk4MTU0YWQxMTdhOGUyOWMyYzM0MDkwMTFh
MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSU9TdXJmYWNlTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lPU3VyZmFjZUxheWVySW1wbC5jcHAKQEAgLTk4LDcg
Kzk4LDcgQEAgdm9pZCBDQ0lPU3VyZmFjZUxheWVySW1wbDo6d2lsbERyYXcoQ0NSZW5kZXJlciog
bGF5ZXJSZW5kZXJlciwgQ0NHcmFwaGljc0NvbnRleHQKIAogdm9pZCBDQ0lPU3VyZmFjZUxheWVy
SW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCYpCiB7Ci0gICAgSW50UmVjdCBxdWFkUmVj
dChJbnRQb2ludCgpLCBib3VuZHMoKSk7CisgICAgSW50UmVjdCBxdWFkUmVjdChJbnRQb2ludCgp
LCBjb250ZW50Qm91bmRzKCkpOwogICAgIHF1YWRMaXN0LmFwcGVuZChDQ0lPU3VyZmFjZURyYXdR
dWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbV9pb1N1cmZhY2VTaXplLCBt
X2lvU3VyZmFjZVRleHR1cmVJZCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXgg
OWE4ODM3NmMyZDYxNWQ4NzBhYWVlZWM3ZjQyYTY3MGIwOTg0OTkwZC4uM2U5YjYzNTA4ZTRlMzc1
M2VjOWJjODQ4M2Q4NDAxODVmNDg3ZjIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAt
MTQ3LDcgKzE0NywxOSBAQCBib29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50RHJhd3NDb250ZW50
KCkKIAogUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NMYXllckltcGw6OmNyZWF0ZVNo
YXJlZFF1YWRTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpj
cmVhdGUocXVhZFRyYW5zZm9ybSgpLCBtX3Zpc2libGVDb250ZW50UmVjdCwgbV9zY2lzc29yUmVj
dCwgbV9kcmF3T3BhY2l0eSwgbV9vcGFxdWUpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IHF1YWRUcmFuc2Zvcm1hdGlvbiA9IGRyYXdUcmFuc2Zvcm0oKTsKKyAgICAvLyBGb3IgbGF5ZXJz
IHdpdGggYm91bmRzLCB1c2UgdGhlIGNvbnRlbnRCb3VuZHMoKSB0byBib3VuZHMoKSByYXRpbywK
KyAgICAvLyBiZWNhdXNlIGl0IGlzIG1vcmUgYWNjdXJhdGUgYW5kIGFjY291bnRzIGZvciBpbnRl
Z2VyIHJvdW5kLW9mZi4gV2hlbgorICAgIC8vIHRoZXJlIGFyZSBubyBib3VuZHMsIGp1c3QgdXNl
IGNvbnRlbnRzIHNjYWxlLCBhcyBpdCdzIGp1c3QgYXMgYWNjdXJhdGUuCisgICAgaWYgKGNvbnRl
bnRCb3VuZHMoKS5pc0VtcHR5KCkpCisgICAgICAgIHF1YWRUcmFuc2Zvcm1hdGlvbi5zY2FsZSgx
IC8gY29udGVudHNTY2FsZSgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcXVhZFRyYW5zZm9ybWF0
aW9uLnNjYWxlTm9uVW5pZm9ybShib3VuZHMoKS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91Ymxl
Pihjb250ZW50Qm91bmRzKCkud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm91bmRzKCkuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3Vu
ZHMoKS5oZWlnaHQoKSkpOworICAgICAgICBxdWFkVHJhbnNmb3JtYXRpb24udHJhbnNsYXRlKC1j
b250ZW50Qm91bmRzKCkud2lkdGgoKSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSAv
IDIuMCk7CisgICAgfQorCisgICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocXVh
ZFRyYW5zZm9ybWF0aW9uLCBtX3Zpc2libGVDb250ZW50UmVjdCwgbV9zY2lzc29yUmVjdCwgbV9k
cmF3T3BhY2l0eSwgbV9vcGFxdWUpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjp3aWxsRHJhdyhD
Q1JlbmRlcmVyKiwgQ0NHcmFwaGljc0NvbnRleHQqKQpAQCAtMjM1LDE3ICsyNDcsNiBAQCBjb25z
dCBJbnRSZWN0IENDTGF5ZXJJbXBsOjpnZXREcmF3UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1h
cHBlZFJlY3Q7CiB9CiAKLVdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IENDTGF5ZXJJbXBsOjpxdWFk
VHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJh
bnNmb3JtYXRpb24gPSBkcmF3VHJhbnNmb3JtKCk7Ci0KLSAgICBmbG9hdCBvZmZzZXRYID0gLTAu
NSAqIGJvdW5kcygpLndpZHRoKCk7Ci0gICAgZmxvYXQgb2Zmc2V0WSA9IC0wLjUgKiBib3VuZHMo
KS5oZWlnaHQoKTsKLSAgICBxdWFkVHJhbnNmb3JtYXRpb24udHJhbnNsYXRlKG9mZnNldFgsIG9m
ZnNldFkpOwotCi0gICAgcmV0dXJuIHF1YWRUcmFuc2Zvcm1hdGlvbjsKLX0KLQogdm9pZCBDQ0xh
eWVySW1wbDo6d3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCiB7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgIT0gaW5kZW50OyArK2kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRl
eCAyYjlhNDliZDMwMzZmZGZmNGI4Yzk3MWQ2MmYwMzE5ZDU2NzgxMzUzLi40YzgwYzRjNTUyNzAw
YzJmMGE4ZDFlZmI3ZGViNTdjZjI1MDc1NDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTI3
OCw5ICsyNzgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3Bl
cnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIHdy
aXRlSW5kZW50KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KTsKIAotICAgIC8vIFRyYW5zZm9ybWF0
aW9uIHVzZWQgdG8gdHJhbnNmb3JtIHF1YWRzIHByb3ZpZGVkIGluIGFwcGVuZFF1YWRzLgotICAg
IHZpcnR1YWwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJhbnNmb3JtKCkg
Y29uc3Q7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQYXJlbnQoQ0NMYXllckltcGwqIHBhcmVu
dCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQogICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25p
emVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1wbC5jcHAKaW5kZXggOTU1
NjRiNjM1NjE3OTVkZDhlNmQ1MTQwMDk2MzAyZjZhMjU3MTgwMC4uNGQ1MmMxNWRkNDJmMjNkYWFm
ZjZjNTQzOGJlNGY3OWVmNzg2NDZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JM
YXllckltcGwuY3BwCkBAIC00OSwyMCArNDksMTIgQEAgQ0NTb2xpZENvbG9yTGF5ZXJJbXBsOjp+
Q0NTb2xpZENvbG9yTGF5ZXJJbXBsKCkKIHsKIH0KIAotV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
Q0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBzb2xpZENvbG9yVHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgp
OwotICAgIHNvbGlkQ29sb3JUcmFuc2Zvcm0udHJhbnNsYXRlKC1ib3VuZHMoKS53aWR0aCgpIC8g
Mi4wLCAtYm91bmRzKCkuaGVpZ2h0KCkgLyAyLjApOwotCi0gICAgcmV0dXJuIHNvbGlkQ29sb3JU
cmFuc2Zvcm07Ci19Ci0KIHZvaWQgQ0NTb2xpZENvbG9yTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhD
Q1F1YWRDdWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVh
ZFN0YXRlLCBib29sJikKIHsKICAgICAvLyBXZSBjcmVhdGUgYSBzZXJpZXMgb2Ygc21hbGxlciBx
dWFkcyBpbnN0ZWFkIG9mIGp1c3Qgb25lIGxhcmdlIG9uZSBzbyB0aGF0IHRoZQogICAgIC8vIGN1
bGxlciBjYW4gcmVkdWNlIHRoZSB0b3RhbCBwaXhlbHMgZHJhd24uCi0gICAgaW50IHdpZHRoID0g
Ym91bmRzKCkud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gYm91bmRzKCkuaGVpZ2h0KCk7Cisg
ICAgaW50IHdpZHRoID0gY29udGVudEJvdW5kcygpLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9
IGNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKTsKICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4ICs9IG1fdGlsZVNpemUpIHsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkgKz0gbV90aWxlU2l6ZSkgewogICAgICAgICAgICAgSW50UmVjdCBzb2xpZFRpbGVSZWN0KHgs
IHksIG1pbih3aWR0aCAtIHgsIG1fdGlsZVNpemUpLCBtaW4oaGVpZ2h0IC0geSwgbV90aWxlU2l6
ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaAppbmRleCA2NDI5MTI1
NWZkYmQyODg0ZDczYTQ5Y2U2YTI2MzgwMDk0ODRhYjI0Li5lMzAwNTg0NWU2ZGU2YjIwZGFjNWZl
ZTY0OWE1MTU3MWY2YTEwYzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllcklt
cGwuaApAQCAtNDEsNyArNDEsNiBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfkNDU29s
aWRDb2xvckxheWVySW1wbCgpOwogCi0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IHF1YWRUcmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgYXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBi
b29sJiBoYWRNaXNzaW5nVGlsZXMpIE9WRVJSSURFOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVM
YXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmNwcAppbmRleCBjYWQzNzYwNzZlM2ZlNTk5MWU1ZTEwNjdm
OTEwNzdiZDFkZDQ2NDAzLi42ZGYyZmI2YmQ2NGM2ZDM2OWUwODljNzExMTYxY2Y4YjFhYWU3OTBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RleHR1cmVMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZUxheWVySW1wbC5jcHAKQEAgLTUwLDcgKzUwLDcg
QEAgQ0NUZXh0dXJlTGF5ZXJJbXBsOjp+Q0NUZXh0dXJlTGF5ZXJJbXBsKCkKIAogdm9pZCBDQ1Rl
eHR1cmVMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wmKQogewotICAgIEludFJl
Y3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOworICAgIEludFJlY3QgcXVhZFJlY3Qo
SW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsKICAgICBxdWFkTGlzdC5hcHBlbmQoQ0NUZXh0
dXJlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBtX3RleHR1cmVJ
ZCwgbV9wcmVtdWx0aXBsaWVkQWxwaGEsIG1fdXZSZWN0LCBtX2ZsaXBwZWQpKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRleCAxYjIxMDg5MTJmNzk4OTcwMjRlNGUy
MjYwZWVlOTFmMDJlMDU1YTNjLi5kYTlhMTBhOTlkOGM3YmYyMmQ4N2M4NDdiOTU3ZjIzNTBmNWQz
ZTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAtMTIzLDIxICsxMjMs
NiBAQCBEcmF3YWJsZVRpbGUqIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZVRpbGUoaW50IGksIGlu
dCBqKQogICAgIHJldHVybiBhZGRlZFRpbGU7CiB9CiAKLVdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IENDVGlsZWRMYXllckltcGw6OnF1YWRUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChj
b250ZW50Qm91bmRzKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJhbnNmb3JtOwotCi0g
ICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShib3VuZHMoKS53aWR0aCgpIC8gc3RhdGljX2Nh
c3Q8ZG91YmxlPihjb250ZW50Qm91bmRzKCkud2lkdGgoKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3VuZHMoKS5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVu
dEJvdW5kcygpLmhlaWdodCgpKSk7Ci0KLSAgICAvLyBUaWxlciBkcmF3cyB3aXRoIGEgZGlmZmVy
ZW50IG9yaWdpbiBmcm9tIG90aGVyIGxheWVycy4KLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1j
b250ZW50Qm91bmRzKCkud2lkdGgoKSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSAv
IDIuMCk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybTsKLX0KLQogdm9pZCBDQ1RpbGVkTGF5ZXJJbXBs
OjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRT
dGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBib29sJiBoYWRNaXNzaW5nVGlsZXMpCiB7CiAgICAgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QgPSB2aXNpYmxlQ29udGVudFJlY3QoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRM
YXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuaAppbmRleCA0YzgyY2RjOGNhZjdlNzFiOTY5NzE2YzRhZjVlMTk2
YzI3OTEwNDg1Li40MDUyZmU5N2NlYzIzMzU4ZGNmODk3MmM0NWVlM2I2ZDQxYTczNzcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rp
bGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC02NCw4ICs2NCw2IEBAIHByb3RlY3RlZDoK
ICAgICBib29sIGhhc1RpbGVBdChpbnQsIGludCkgY29uc3Q7CiAgICAgYm9vbCBoYXNUZXh0dXJl
SWRGb3JUaWxlQXQoaW50LCBpbnQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IHF1YWRUcmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERTsKLQogcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiAiQ29udGVudExheWVyIjsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
TGF5ZXJJbXBsLmNwcAppbmRleCBjYzM0OWM4ZTVkMTdlMWRkYmNhZTk2NTkwZTliYWE5YzczZjEz
MmQ3Li5iNTI0NTk2ZjBkZWE2MDc3YTRjNzRhNTYxZTVlOTk0MmUxZGUxODczIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgQ0NWaWRl
b0xheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NT
aGFyZWRRdWFkU3RhCiAgICAgLy8gRklYTUU6IFdoZW4gd2UgcGFzcyBxdWFkcyBvdXQgb2YgcHJv
Y2Vzcywgd2UgbmVlZCB0byBkb3VibGUtYnVmZmVyLCBvcgogICAgIC8vIG90aGVyd2lzZSBzeW5j
aG9uaXplIHVzZSBvZiBhbGwgdGV4dHVyZXMgaW4gdGhlIHF1YWQuCiAKLSAgICBJbnRSZWN0IHF1
YWRSZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBJbnRSZWN0IHF1YWRSZWN0KEludFBv
aW50KCksIGNvbnRlbnRCb3VuZHMoKSk7CiAKICAgICBzd2l0Y2ggKG1fZm9ybWF0KSB7CiAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NvbGlkQ29sb3JMYXllckltcGxUZXN0LmNwcApp
bmRleCAxYmZjODFkOGM1ZmU1ZmYxOTUzOGEzMTcxNjkxMzFjMjg3MTVkYzE3Li5mOWE5MjkyYjc3
ZDYwZGIzN2JlNzUxODkxNDM0NGQyOTAwMWRmYmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHAKQEAg
LTUwLDYgKzUwLDcgQEAgVEVTVChDQ1NvbGlkQ29sb3JMYXllckltcGxUZXN0LCB2ZXJpZnlUaWxp
bmdDb21wbGV0ZUFuZE5vT3ZlcmxhcCkKICAgICBPd25QdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBs
PiBsYXllciA9IENDU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgIGxheWVyLT5z
ZXRWaXNpYmxlQ29udGVudFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KTsKICAgICBsYXllci0+c2V0
Qm91bmRzKGxheWVyU2l6ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRCb3VuZHMobGF5ZXJTaXpl
KTsKIAogICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlID0gbGF5
ZXItPmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpOwogICAgIGJvb2wgaGFkTWlzc2luZ1RpbGVzID0g
ZmFsc2U7CkBAIC03MSw2ICs3Miw3IEBAIFRFU1QoQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdCwg
dmVyaWZ5Q29ycmVjdEJhY2tncm91bmRDb2xvckluUXVhZCkKICAgICBPd25QdHI8Q0NTb2xpZENv
bG9yTGF5ZXJJbXBsPiBsYXllciA9IENDU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKDEpOwog
ICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KTsKICAg
ICBsYXllci0+c2V0Qm91bmRzKGxheWVyU2l6ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRCb3Vu
ZHMobGF5ZXJTaXplKTsKICAgICBsYXllci0+c2V0QmFja2dyb3VuZENvbG9yKHRlc3RDb2xvcik7
CiAKICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IGxheWVy
LT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKQEAgLTk0LDYgKzk2LDcgQEAgVEVTVChDQ1NvbGlk
Q29sb3JMYXllckltcGxUZXN0LCB2ZXJpZnlDb3JyZWN0T3BhY2l0eUluUXVhZCkKICAgICBPd25Q
dHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBsYXllciA9IENDU29saWRDb2xvckxheWVySW1wbDo6
Y3JlYXRlKDEpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QodmlzaWJsZUNvbnRl
bnRSZWN0KTsKICAgICBsYXllci0+c2V0Qm91bmRzKGxheWVyU2l6ZSk7CisgICAgbGF5ZXItPnNl
dENvbnRlbnRCb3VuZHMobGF5ZXJTaXplKTsKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkob3Bh
Y2l0eSk7CiAKICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9
IGxheWVyLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152586</attachid>
            <date>2012-07-16 12:27:17 -0700</date>
            <delta_ts>2012-07-16 12:55:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91350-20120716122716.patch</filename>
            <type>text/plain</type>
            <size>18396</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZhOTc4NzQxYzdhOTU2
MDU0MTI2NDUwYjE2ZTVhMmMzMDcyZTc4My4uNjg2ODJlYTA4YTQzZDdhZDVmNmIxYjFkZjJlYzQ5
ZDdhMzM0ZTc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA3LTE2ICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBVbmlm
eSBjb21wb3NpdG9yIHF1YWQgdHJhbnNmb3JtcyBpbnRvIGNvbnRlbnQgc3BhY2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMzUwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIHRoZSBwdXJwb3NlIG9m
IHNpbXBsaWZpY2F0aW9uIGFuZCBhcyBhIGZpcnN0IHN0ZXAgdG93YXJkcyByZW1vdmluZworICAg
ICAgICBhbnkgdHJhbnNmb3JtIHRoYXQgdGFrZXMgYSBjZW50ZXJlZCByZWN0LCByZW1vdmUgdGhl
IGFiaWxpdHkgb2YgbGF5ZXJzCisgICAgICAgIHRvIG92ZXJyaWRlIHRoZSBxdWFkIHRyYW5zZm9y
bS4gQWxsIHF1YWRzIGFuZCBxdWFkIHRyYW5zZm9ybXMgb3BlcmF0ZQorICAgICAgICBvbiBjb250
ZW50IHNwYWNlIHdpdGggdGhlIG9yaWdpbiBpbiB0aGUgdG9wIGxlZnQuCisKKyAgICAgICAgVGhl
IGd1dHRlciBxdWFkcyB1c2VkIHRvIHVzZSB0aGUgcm9vdCBsYXllciAodGhhdCBkb2Vzbid0IGRy
YXcKKyAgICAgICAgY29udGVudCkgYXMgdGhlIGxheWVyIHRvIGNyZWF0ZSB0aGUgc2hhcmVkIHF1
YWQgc3RhdGUgZnJvbS4gVGhpcyBpcworICAgICAgICBub3cgY3JlYXRlZCBtYW51YWxseSBhcyBh
IGxheWVyIHdpdGhvdXQgYm91bmRzIHNob3VsZCBuZXZlciBpbiBnZW5lcmFsCisgICAgICAgIG5l
ZWQgYSBzaGFyZWQgcXVhZCBzdGF0ZSBjcmVhdGVkIGZvciBpdC4KKworICAgICAgICBObyBjaGFu
Z2UgaW4gZnVuY3Rpb25hbGl0eTsgdGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQgdW5pdCB0
ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSU9TdXJm
YWNlTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSU9TdXJmYWNlTGF5ZXJJbXBs
OjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmNyZWF0ZVNo
YXJlZFF1YWRTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc1RvRmlsbFNjcmVlbik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU29saWRDb2xvckxheWVySW1wbDo6YXBwZW5kUXVhZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1w
bC5oOgorICAgICAgICAoQ0NTb2xpZENvbG9yTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUZXh0dXJlTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oOgorICAg
ICAgICAoQ0NUaWxlZExheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVv
TGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisKIDIwMTItMDctMTIgIERhbmEgSmFuc2VucyAgPGRh
bmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBUaGUgcm9vdCBsYXllciBz
aG91bGQgbm90IHRyeSBjcmVhdGUgYSBzZWNvbmQgUmVuZGVyU3VyZmFjZSBmb3IgaXRzZWxmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGZhZjI2YTc3YWE2NTU2OGEyZDA2N2U2NzhlMzUy
NjAxYzkyYTNhZWQuLjc2ZGJkNmM5NzcyMzIzZjMyMmRhZjkzYzJkNTU1ODM1YTZkMTc1YTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMDctMTYgIEFk
cmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFVu
aWZ5IGNvbXBvc2l0b3IgcXVhZCB0cmFuc2Zvcm1zIGludG8gY29udGVudCBzcGFjZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEzNTAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGVzdHMgdG8g
YWRkIGJvdW5kcy9jb250ZW50Qm91bmRzIHByb3BlcnRpZXMgdG8gbGF5ZXJzLiBUaGlzCisgICAg
ICAgIGV4cG9zZWQgYSBidWcgaW4gdGhlIHF1YWQgY3VsbGVyIHRlc3RzIHdoZXJlIHRoZSBkcmF3
IHRyYW5zZm9ybSB3YXMKKyAgICAgICAgaW5jb3JyZWN0bHkgYmVpbmcgc2V0IHRvIHRoZSBvcmln
aW4gdHJhbnNmb3JtIHJhdGhlciB0aGFuIGJlaW5nIGEKKyAgICAgICAgdHJhbnNmb3JtIHRoYXQg
b3BlcmF0ZXMgb24gY2VudGVyZWQgbGF5ZXIgcmVjdHMuIEZpeGVkIHRoaXMgYnVnLgorCisgICAg
ICAgICogdGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NTb2xp
ZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChDQ0xheWVyVGVzdENvbW1vbjo6VEVT
VCk6CisgICAgICAgICogdGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwOgorICAgICAgICAo
Q0NMYXllclRlc3RDb21tb246OmNyZWF0ZUxheWVyKToKKwogMjAxMi0wNy0xMiAgRGFuYSBKYW5z
ZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFRoZSByb290
IGxheWVyIHNob3VsZCBub3QgdHJ5IGNyZWF0ZSBhIHNlY29uZCBSZW5kZXJTdXJmYWNlIGZvciBp
dHNlbGYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSU9TdXJmYWNlTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSU9TdXJmYWNlTGF5ZXJJbXBsLmNwcAppbmRleCBjZTNi
MzhlOTY0YTQ1YzFkYTE4NTkzY2Y2MmZiZjI5NjAzYjllNjBiLi5kMTE1N2VkMDM3OTc5ODE1NGFk
MTE3YThlMjljMmMzNDA5MDExYTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lPU3VyZmFjZUxheWVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJT1N1cmZhY2VMYXll
ckltcGwuY3BwCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgQ0NJT1N1cmZhY2VMYXllckltcGw6Ondp
bGxEcmF3KENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIsIENDR3JhcGhpY3NDb250ZXh0CiAKIHZv
aWQgQ0NJT1N1cmZhY2VMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExp
c3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wmKQogewot
ICAgIEludFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOworICAgIEludFJlY3Qg
cXVhZFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsKICAgICBxdWFkTGlzdC5hcHBl
bmQoQ0NJT1N1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3Qs
IG1faW9TdXJmYWNlU2l6ZSwgbV9pb1N1cmZhY2VUZXh0dXJlSWQpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCmluZGV4IDlhODgzNzZjMmQ2MTVkODcwYWFlZWVjN2Y0MmE2NzBiMDk4NDk5
MGQuLjRhNTJlMThlMGU2ZDMxYWNhN2IyYzgxMWRiNWQzZTcxMGYyYzFlY2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAKQEAgLTE0Nyw3ICsxNDcsMTkgQEAgYm9vbCBDQ0xheWVySW1wbDo6ZGVz
Y2VuZGFudERyYXdzQ29udGVudCgpCiAKIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IEND
TGF5ZXJJbXBsOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUoKSBjb25zdAogewotICAgIHJldHVybiBD
Q1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHF1YWRUcmFuc2Zvcm0oKSwgbV92aXNpYmxlQ29udGVu
dFJlY3QsIG1fc2Npc3NvclJlY3QsIG1fZHJhd09wYWNpdHksIG1fb3BhcXVlKTsKKyAgICBpZiAo
Y29udGVudEJvdW5kcygpLmlzRW1wdHkoKSB8fCBib3VuZHMoKS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIC8vIERyYXcgdHJhbnNmb3JtIG9wZXJhdGVzIG9uIGEgY2VudGVyZWQgbGF5ZXIgcmVj
dC4gUXVhZCB0cmFuc2Zvcm1zCisgICAgLy8gb3BlcmF0ZSBvbiBjb250ZW50IHJlY3RzIHdpdGgg
dGhlIG9yaWdpbiBpbiB0aGUgdG9wIGxlZnQuCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
cXVhZFRyYW5zZm9ybWF0aW9uID0gZHJhd1RyYW5zZm9ybSgpOworICAgIHF1YWRUcmFuc2Zvcm1h
dGlvbi5zY2FsZU5vblVuaWZvcm0oYm91bmRzKCkud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRvdWJs
ZT4oY29udGVudEJvdW5kcygpLndpZHRoKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm91bmRzKCkuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRl
bnRCb3VuZHMoKS5oZWlnaHQoKSkpOworICAgIHF1YWRUcmFuc2Zvcm1hdGlvbi50cmFuc2xhdGUo
LWNvbnRlbnRCb3VuZHMoKS53aWR0aCgpIC8gMi4wLCAtY29udGVudEJvdW5kcygpLmhlaWdodCgp
IC8gMi4wKTsKKworICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHF1YWRUcmFu
c2Zvcm1hdGlvbiwgbV92aXNpYmxlQ29udGVudFJlY3QsIG1fc2Npc3NvclJlY3QsIG1fZHJhd09w
YWNpdHksIG1fb3BhcXVlKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6d2lsbERyYXcoQ0NSZW5k
ZXJlciosIENDR3JhcGhpY3NDb250ZXh0KikKQEAgLTIzNSwxNyArMjQ3LDYgQEAgY29uc3QgSW50
UmVjdCBDQ0xheWVySW1wbDo6Z2V0RHJhd1JlY3QoKSBjb25zdAogICAgIHJldHVybiBtYXBwZWRS
ZWN0OwogfQogCi1XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ0xheWVySW1wbDo6cXVhZFRyYW5z
Zm9ybSgpIGNvbnN0Ci17Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9y
bWF0aW9uID0gZHJhd1RyYW5zZm9ybSgpOwotCi0gICAgZmxvYXQgb2Zmc2V0WCA9IC0wLjUgKiBi
b3VuZHMoKS53aWR0aCgpOwotICAgIGZsb2F0IG9mZnNldFkgPSAtMC41ICogYm91bmRzKCkuaGVp
Z2h0KCk7Ci0gICAgcXVhZFRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZShvZmZzZXRYLCBvZmZzZXRZ
KTsKLQotICAgIHJldHVybiBxdWFkVHJhbnNmb3JtYXRpb247Ci19Ci0KIHZvaWQgQ0NMYXllcklt
cGw6OndyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQogewogICAgIGZvciAo
aW50IGkgPSAwOyBpICE9IGluZGVudDsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMmI5
YTQ5YmQzMDM2ZmRmZjRiOGM5NzFkNjJmMDMxOWQ1Njc4MTM1My4uNGM4MGM0YzU1MjcwMGMyZjBh
OGQxZWZiN2RlYjU3Y2YyNTA3NTQ4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0yNzgsOSAr
Mjc4LDYgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVz
KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKICAgICBzdGF0aWMgdm9pZCB3cml0ZUlu
ZGVudChUZXh0U3RyZWFtJiwgaW50IGluZGVudCk7CiAKLSAgICAvLyBUcmFuc2Zvcm1hdGlvbiB1
c2VkIHRvIHRyYW5zZm9ybSBxdWFkcyBwcm92aWRlZCBpbiBhcHBlbmRRdWFkcy4KLSAgICB2aXJ0
dWFsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybSgpIGNvbnN0
OwotCiBwcml2YXRlOgogICAgIHZvaWQgc2V0UGFyZW50KENDTGF5ZXJJbXBsKiBwYXJlbnQpIHsg
bV9wYXJlbnQgPSBwYXJlbnQ7IH0KICAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCmluZGV4IDkwYTZlZTYwYWQ3NWY2NWE3YzUxZjAxOTc4
MzA1NTRkNmUzNWVhZjYuLmRkMGI4NjRmYTdjNWUyZWNlOGE1OTI3YWM2NGM2OTgyODU0NmE2OTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApAQCAtOTQsNyArOTQsOSBAQCB2b2lkIENDUmVu
ZGVyUGFzczo6YXBwZW5kUXVhZHNUb0ZpbGxTY3JlZW4oQ0NMYXllckltcGwqIHJvb3RMYXllciwg
U2tDb2xvciBzY3JlZQogICAgIGlmIChmaWxsUmVnaW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUgPSBy
b290TGF5ZXItPmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpOworICAgIC8vIE1hbnVhbGx5IGNyZWF0
ZSB0aGUgcXVhZCBzdGF0ZSBmb3IgdGhlIGd1dHRlciBxdWFkcywgYXMgdGhlIHJvb3QgbGF5ZXIK
KyAgICAvLyBkb2Vzbid0IGhhdmUgYW55IGJvdW5kcyBhbmQgc28gY2FuJ3QgZ2VuZXJhdGUgdGhp
cyBpdHNlbGYuCisgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUg
PSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHJvb3RMYXllci0+ZHJhd1RyYW5zZm9ybSgpLCBy
b290TGF5ZXItPnZpc2libGVDb250ZW50UmVjdCgpLCByb290TGF5ZXItPnNjaXNzb3JSZWN0KCks
IHJvb3RMYXllci0+ZHJhd09wYWNpdHkoKSwgcm9vdExheWVyLT5vcGFxdWUoKSk7CiAgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtVG9MYXllclNwYWNlID0gcm9vdExheWVyLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKTsKICAgICBWZWN0b3I8SW50UmVjdD4gZmls
bFJlY3RzID0gZmlsbFJlZ2lvbi5yZWN0cygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZmlsbFJlY3RzLnNpemUoKTsgKytpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5
ZXJJbXBsLmNwcAppbmRleCA5NTU2NGI2MzU2MTc5NWRkOGU2ZDUxNDAwOTYzMDJmNmEyNTcxODAw
Li40ZDUyYzE1ZGQ0MmYyM2RhYWZmNmM1NDM4YmU0Zjc5ZWY3ODY0NmEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JM
YXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU29saWRDb2xvckxheWVySW1wbC5jcHAKQEAgLTQ5LDIwICs0OSwxMiBAQCBDQ1Nv
bGlkQ29sb3JMYXllckltcGw6On5DQ1NvbGlkQ29sb3JMYXllckltcGwoKQogewogfQogCi1XZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ1NvbGlkQ29sb3JMYXllckltcGw6OnF1YWRUcmFuc2Zvcm0o
KSBjb25zdAotewotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNvbGlkQ29sb3JUcmFuc2Zv
cm0gPSBkcmF3VHJhbnNmb3JtKCk7Ci0gICAgc29saWRDb2xvclRyYW5zZm9ybS50cmFuc2xhdGUo
LWJvdW5kcygpLndpZHRoKCkgLyAyLjAsIC1ib3VuZHMoKS5oZWlnaHQoKSAvIDIuMCk7Ci0KLSAg
ICByZXR1cm4gc29saWRDb2xvclRyYW5zZm9ybTsKLX0KLQogdm9pZCBDQ1NvbGlkQ29sb3JMYXll
ckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVk
UXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wmKQogewogICAgIC8vIFdlIGNyZWF0ZSBh
IHNlcmllcyBvZiBzbWFsbGVyIHF1YWRzIGluc3RlYWQgb2YganVzdCBvbmUgbGFyZ2Ugb25lIHNv
IHRoYXQgdGhlCiAgICAgLy8gY3VsbGVyIGNhbiByZWR1Y2UgdGhlIHRvdGFsIHBpeGVscyBkcmF3
bi4KLSAgICBpbnQgd2lkdGggPSBib3VuZHMoKS53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBi
b3VuZHMoKS5oZWlnaHQoKTsKKyAgICBpbnQgd2lkdGggPSBjb250ZW50Qm91bmRzKCkud2lkdGgo
KTsKKyAgICBpbnQgaGVpZ2h0ID0gY29udGVudEJvdW5kcygpLmhlaWdodCgpOwogICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gbV90aWxlU2l6ZSkgewogICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBtX3RpbGVTaXplKSB7CiAgICAgICAgICAgICBJbnRS
ZWN0IHNvbGlkVGlsZVJlY3QoeCwgeSwgbWluKHdpZHRoIC0geCwgbV90aWxlU2l6ZSksIG1pbiho
ZWlnaHQgLSB5LCBtX3RpbGVTaXplKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVy
SW1wbC5oCmluZGV4IDY0MjkxMjU1ZmRiZDI4ODRkNzNhNDljZTZhMjYzODAwOTQ4NGFiMjQuLmUz
MDA1ODQ1ZTZkZTZiMjBkYWM1ZmVlNjQ5YTUxNTcxZjZhMTBjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVy
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU29saWRDb2xvckxheWVySW1wbC5oCkBAIC00MSw3ICs0MSw2IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgdmlydHVhbCB+Q0NTb2xpZENvbG9yTGF5ZXJJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybSgpIGNvbnN0IE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImLCBjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSosIGJvb2wmIGhhZE1pc3NpbmdUaWxlcykgT1ZFUlJJREU7CiAKIHBy
b3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZUxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuY3BwCmluZGV4IGNhZDM3
NjA3NmUzZmU1OTkxZTVlMTA2N2Y5MTA3N2JkMWRkNDY0MDMuLjZkZjJmYjZiZDY0YzZkMzY5ZTA4
OWM3MTExNjFjZjhiMWFhZTc5MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZUxheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlTGF5ZXJJbXBs
LmNwcApAQCAtNTAsNyArNTAsNyBAQCBDQ1RleHR1cmVMYXllckltcGw6On5DQ1RleHR1cmVMYXll
ckltcGwoKQogCiB2b2lkIENDVGV4dHVyZUxheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3Vs
bGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwg
Ym9vbCYpCiB7Ci0gICAgSW50UmVjdCBxdWFkUmVjdChJbnRQb2ludCgpLCBib3VuZHMoKSk7Cisg
ICAgSW50UmVjdCBxdWFkUmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpOwogICAgIHF1
YWRMaXN0LmFwcGVuZChDQ1RleHR1cmVEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwg
cXVhZFJlY3QsIG1fdGV4dHVyZUlkLCBtX3ByZW11bHRpcGxpZWRBbHBoYSwgbV91dlJlY3QsIG1f
ZmxpcHBlZCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IDFi
MjEwODkxMmY3OTg5NzAyNGU0ZTIyNjBlZWU5MWYwMmUwNTVhM2MuLmRhOWExMGE5OWQ4YzdiZjIy
ZDg3Yzg0N2I5NTdmMjM1MGY1ZDNlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwu
Y3BwCkBAIC0xMjMsMjEgKzEyMyw2IEBAIERyYXdhYmxlVGlsZSogQ0NUaWxlZExheWVySW1wbDo6
Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCiAgICAgcmV0dXJuIGFkZGVkVGlsZTsKIH0KIAotV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggQ0NUaWxlZExheWVySW1wbDo6cXVhZFRyYW5zZm9ybSgpIGNv
bnN0Ci17Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gZHJhd1RyYW5z
Zm9ybSgpOwotCi0gICAgaWYgKGNvbnRlbnRCb3VuZHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiB0cmFuc2Zvcm07Ci0KLSAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kcygp
LndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMoKS53aWR0aCgpKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLmhlaWdodCgpIC8gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzKCkuaGVpZ2h0KCkpKTsKLQotICAgIC8vIFRpbGVy
IGRyYXdzIHdpdGggYSBkaWZmZXJlbnQgb3JpZ2luIGZyb20gb3RoZXIgbGF5ZXJzLgotICAgIHRy
YW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMoKS53aWR0aCgpIC8gMi4wLCAtY29udGVu
dEJvdW5kcygpLmhlaWdodCgpIC8gMi4wKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtOwotfQotCiB2
b2lkIENDVGlsZWRMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3Qs
IGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wmIGhhZE1pc3Np
bmdUaWxlcykKIHsKICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCA9IHZpc2libGVDb250
ZW50UmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCmluZGV4IDRjODJjZGM4Y2Fm
N2U3MWI5Njk3MTZjNGFmNWUxOTZjMjc5MTA0ODUuLjQwNTJmZTk3Y2VjMjMzNThkY2Y4OTcyYzQ1
ZWUzYjZkNDFhNzM3NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKQEAgLTY0LDgg
KzY0LDYgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgaGFzVGlsZUF0KGludCwgaW50KSBjb25zdDsK
ICAgICBib29sIGhhc1RleHR1cmVJZEZvclRpbGVBdChpbnQsIGludCkgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybSgpIGNv
bnN0IE9WRVJSSURFOwotCiBwcml2YXRlOgogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXll
clR5cGVBc1N0cmluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuICJDb250ZW50TGF5ZXIiOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IGNjMzQ5YzhlNWQxN2UxZGRi
Y2FlOTY1OTBlOWJhYTljNzNmMTMyZDcuLmI1MjQ1OTZmMGRlYTYwNzdhNGM3NGE1NjFlNWU5OTQy
ZTFkZTE4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBAIC0xODMsNyAr
MTgzLDcgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXIm
IHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGEKICAgICAvLyBGSVhNRTogV2hlbiB3ZSBw
YXNzIHF1YWRzIG91dCBvZiBwcm9jZXNzLCB3ZSBuZWVkIHRvIGRvdWJsZS1idWZmZXIsIG9yCiAg
ICAgLy8gb3RoZXJ3aXNlIHN5bmNob25pemUgdXNlIG9mIGFsbCB0ZXh0dXJlcyBpbiB0aGUgcXVh
ZC4KIAotICAgIEludFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOworICAgIElu
dFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsKIAogICAgIHN3aXRj
aCAobV9mb3JtYXQpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFkQ3VsbGVyVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUXVhZEN1bGxlclRlc3QuY3Bw
CmluZGV4IDYyNGQyNDcxMTQ5YWIwNmM2ODgyZDhkNmJjOGI5OWM4ZjhlZjkyOWQuLjAwNzIyMDRj
MWY5NzMwMjFjNTQ1YjlhNDQ3MzM5YjQ3NTUyYzI0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcApAQCAtNTgsMTggKzU4LDIyIEBA
IHByaXZhdGU6CiAKIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPENDTGF5ZXJJbXBsLCBWZWN0b3I8
Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpG
cm9udFRvQmFjaz4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKIAotc3RhdGljIFBhc3NPd25QdHI8Q0NU
aWxlZExheWVySW1wbD4gbWFrZUxheWVyKENDVGlsZWRMYXllckltcGwqIHBhcmVudCwgY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxh
eWVyUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUsIGNvbnN0IEludFJlY3QmIGxheWVy
T3BhcXVlUmVjdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHN1cmZhY2VMYXllckxpc3QpCitzdGF0
aWMgUGFzc093blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiBtYWtlTGF5ZXIoQ0NUaWxlZExheWVySW1w
bCogcGFyZW50LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3JpZ2luVHJhbnNmb3Jt
LCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlLCBj
b25zdCBJbnRSZWN0JiBsYXllck9wYXF1ZVJlY3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBzdXJm
YWNlTGF5ZXJMaXN0KQogewogICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllciA9IEND
VGlsZWRMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICBPd25QdHI8Q0NMYXllclRpbGluZ0RhdGE+
IHRpbGVyID0gQ0NMYXllclRpbGluZ0RhdGE6OmNyZWF0ZShJbnRTaXplKDEwMCwgMTAwKSwgQ0NM
YXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzKTsKICAgICB0aWxlci0+c2V0Qm91bmRzKGxh
eWVyUmVjdC5zaXplKCkpOwogICAgIGxheWVyLT5zZXRUaWxpbmdEYXRhKCp0aWxlcik7CiAgICAg
bGF5ZXItPnNldFNraXBzRHJhdyhmYWxzZSk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
ZHJhd1RyYW5zZm9ybSA9IG9yaWdpblRyYW5zZm9ybTsKKyAgICBkcmF3VHJhbnNmb3JtLnRyYW5z
bGF0ZSgwLjUgKiBsYXllclJlY3Qud2lkdGgoKSwgMC41ICogbGF5ZXJSZWN0LmhlaWdodCgpKTsK
ICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKLSAgICBsYXllci0+
c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldFNj
cmVlblNwYWNlVHJhbnNmb3JtKG9yaWdpblRyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFZpc2li
bGVDb250ZW50UmVjdChsYXllclJlY3QpOwogICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eShvcGFj
aXR5KTsKICAgICBsYXllci0+c2V0T3BhcXVlKG9wYXF1ZSk7CisgICAgbGF5ZXItPnNldEJvdW5k
cyhsYXllclJlY3Quc2l6ZSgpKTsKKyAgICBsYXllci0+c2V0Q29udGVudEJvdW5kcyhsYXllclJl
Y3Quc2l6ZSgpKTsKIAogICAgIGludCB0ZXh0dXJlSWQgPSAxOwogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdGlsZXItPm51bVRpbGVzWCgpOyArK2kpCkBAIC0xOTUsNyArMTk5LDcgQEAgVEVTVChD
Q1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlDdWxsQ2VudGVyVGlsZU9ubHkpCiAKICAgICBhcHBlbmRR
dWFkcyhxdWFkTGlzdCwgc2hhcmVkU3RhdGVMaXN0LCBjaGlsZExheWVyLmdldCgpLCBpdCwgb2Nj
bHVzaW9uVHJhY2tlcik7CiAgICAgYXBwZW5kUXVhZHMocXVhZExpc3QsIHNoYXJlZFN0YXRlTGlz
dCwgcm9vdExheWVyLmdldCgpLCBpdCwgb2NjbHVzaW9uVHJhY2tlcik7Ci0gICAgRVhQRUNUX0VR
KHF1YWRMaXN0LnNpemUoKSwgMTJ1KTsKKyAgICBBU1NFUlRfRVEocXVhZExpc3Quc2l6ZSgpLCAx
MnUpOwogCiAgICAgSW50UmVjdCBxdWFkVmlzaWJsZVJlY3QxID0gcXVhZExpc3RbNV0uZ2V0KCkt
PnF1YWRWaXNpYmxlUmVjdCgpOwogICAgIEVYUEVDVF9FUShxdWFkVmlzaWJsZVJlY3QxLmhlaWdo
dCgpLCA1MCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU29s
aWRDb2xvckxheWVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q1NvbGlkQ29sb3JMYXllckltcGxUZXN0LmNwcAppbmRleCAxYmZjODFkOGM1ZmU1ZmYxOTUzOGEz
MTcxNjkxMzFjMjg3MTVkYzE3Li5mOWE5MjkyYjc3ZDYwZGIzN2JlNzUxODkxNDM0NGQyOTAwMWRm
YmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU29saWRDb2xv
ckxheWVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NT
b2xpZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHAKQEAgLTUwLDYgKzUwLDcgQEAgVEVTVChDQ1NvbGlk
Q29sb3JMYXllckltcGxUZXN0LCB2ZXJpZnlUaWxpbmdDb21wbGV0ZUFuZE5vT3ZlcmxhcCkKICAg
ICBPd25QdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBsYXllciA9IENDU29saWRDb2xvckxheWVy
SW1wbDo6Y3JlYXRlKDEpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QodmlzaWJs
ZUNvbnRlbnRSZWN0KTsKICAgICBsYXllci0+c2V0Qm91bmRzKGxheWVyU2l6ZSk7CisgICAgbGF5
ZXItPnNldENvbnRlbnRCb3VuZHMobGF5ZXJTaXplKTsKIAogICAgIE93blB0cjxDQ1NoYXJlZFF1
YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlID0gbGF5ZXItPmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgp
OwogICAgIGJvb2wgaGFkTWlzc2luZ1RpbGVzID0gZmFsc2U7CkBAIC03MSw2ICs3Miw3IEBAIFRF
U1QoQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5Q29ycmVjdEJhY2tncm91bmRDb2xv
ckluUXVhZCkKICAgICBPd25QdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBsYXllciA9IENDU29s
aWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVu
dFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KTsKICAgICBsYXllci0+c2V0Qm91bmRzKGxheWVyU2l6
ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRCb3VuZHMobGF5ZXJTaXplKTsKICAgICBsYXllci0+
c2V0QmFja2dyb3VuZENvbG9yKHRlc3RDb2xvcik7CiAKICAgICBPd25QdHI8Q0NTaGFyZWRRdWFk
U3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IGxheWVyLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsK
QEAgLTk0LDYgKzk2LDcgQEAgVEVTVChDQ1NvbGlkQ29sb3JMYXllckltcGxUZXN0LCB2ZXJpZnlD
b3JyZWN0T3BhY2l0eUluUXVhZCkKICAgICBPd25QdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBs
YXllciA9IENDU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgIGxheWVyLT5zZXRW
aXNpYmxlQ29udGVudFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KTsKICAgICBsYXllci0+c2V0Qm91
bmRzKGxheWVyU2l6ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRCb3VuZHMobGF5ZXJTaXplKTsK
ICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkob3BhY2l0eSk7CiAKICAgICBPd25QdHI8Q0NTaGFy
ZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IGxheWVyLT5jcmVhdGVTaGFyZWRRdWFkU3Rh
dGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExh
eWVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5
ZXJJbXBsVGVzdC5jcHAKaW5kZXggNTg4YzBmZjA4MzFhMjg5MzkzZDk3N2JhMzg0NmY4YTMxODYw
MjBhNC4uMDBkMzhhN2VjN2Y0YjI3NWJmOTFhYjY3ZDNkMTQ0YjVhNzRlMDcwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJJbXBsVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJJbXBsVGVzdC5j
cHAKQEAgLTUwLDYgKzUwLDggQEAgc3RhdGljIFBhc3NPd25QdHI8Q0NUaWxlZExheWVySW1wbD4g
Y3JlYXRlTGF5ZXIoY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEkKICAgICBsYXllci0+
c2V0U2tpcHNEcmF3KGZhbHNlKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgbGF5ZXJTaXplKSk7CiAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5
KDEpOworICAgIGxheWVyLT5zZXRCb3VuZHMobGF5ZXJTaXplKTsKKyAgICBsYXllci0+c2V0Q29u
dGVudEJvdW5kcyhsYXllclNpemUpOwogCiAgICAgaW50IHRleHR1cmVJZCA9IDE7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB0aWxlci0+bnVtVGlsZXNYKCk7ICsraSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152593</attachid>
            <date>2012-07-16 12:55:24 -0700</date>
            <delta_ts>2012-07-16 16:45:49 -0700</delta_ts>
            <desc>Handle empty bounds in create quad state</desc>
            <filename>bug-91350-20120716125523.patch</filename>
            <type>text/plain</type>
            <size>17949</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZhOTc4NzQxYzdhOTU2
MDU0MTI2NDUwYjE2ZTVhMmMzMDcyZTc4My4uNjg2ODJlYTA4YTQzZDdhZDVmNmIxYjFkZjJlYzQ5
ZDdhMzM0ZTc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA3LTE2ICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBVbmlm
eSBjb21wb3NpdG9yIHF1YWQgdHJhbnNmb3JtcyBpbnRvIGNvbnRlbnQgc3BhY2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMzUwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIHRoZSBwdXJwb3NlIG9m
IHNpbXBsaWZpY2F0aW9uIGFuZCBhcyBhIGZpcnN0IHN0ZXAgdG93YXJkcyByZW1vdmluZworICAg
ICAgICBhbnkgdHJhbnNmb3JtIHRoYXQgdGFrZXMgYSBjZW50ZXJlZCByZWN0LCByZW1vdmUgdGhl
IGFiaWxpdHkgb2YgbGF5ZXJzCisgICAgICAgIHRvIG92ZXJyaWRlIHRoZSBxdWFkIHRyYW5zZm9y
bS4gQWxsIHF1YWRzIGFuZCBxdWFkIHRyYW5zZm9ybXMgb3BlcmF0ZQorICAgICAgICBvbiBjb250
ZW50IHNwYWNlIHdpdGggdGhlIG9yaWdpbiBpbiB0aGUgdG9wIGxlZnQuCisKKyAgICAgICAgVGhl
IGd1dHRlciBxdWFkcyB1c2VkIHRvIHVzZSB0aGUgcm9vdCBsYXllciAodGhhdCBkb2Vzbid0IGRy
YXcKKyAgICAgICAgY29udGVudCkgYXMgdGhlIGxheWVyIHRvIGNyZWF0ZSB0aGUgc2hhcmVkIHF1
YWQgc3RhdGUgZnJvbS4gVGhpcyBpcworICAgICAgICBub3cgY3JlYXRlZCBtYW51YWxseSBhcyBh
IGxheWVyIHdpdGhvdXQgYm91bmRzIHNob3VsZCBuZXZlciBpbiBnZW5lcmFsCisgICAgICAgIG5l
ZWQgYSBzaGFyZWQgcXVhZCBzdGF0ZSBjcmVhdGVkIGZvciBpdC4KKworICAgICAgICBObyBjaGFu
Z2UgaW4gZnVuY3Rpb25hbGl0eTsgdGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCBhbmQgdW5pdCB0
ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSU9TdXJm
YWNlTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSU9TdXJmYWNlTGF5ZXJJbXBs
OjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmNyZWF0ZVNo
YXJlZFF1YWRTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJQYXNzOjphcHBlbmRRdWFkc1RvRmlsbFNjcmVlbik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU29saWRDb2xvckxheWVySW1wbDo6YXBwZW5kUXVhZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1w
bC5oOgorICAgICAgICAoQ0NTb2xpZENvbG9yTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUZXh0dXJlTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oOgorICAg
ICAgICAoQ0NUaWxlZExheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVv
TGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisKIDIwMTItMDctMTIgIERhbmEgSmFuc2VucyAgPGRh
bmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBUaGUgcm9vdCBsYXllciBz
aG91bGQgbm90IHRyeSBjcmVhdGUgYSBzZWNvbmQgUmVuZGVyU3VyZmFjZSBmb3IgaXRzZWxmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGZhZjI2YTc3YWE2NTU2OGEyZDA2N2U2NzhlMzUy
NjAxYzkyYTNhZWQuLjc2ZGJkNmM5NzcyMzIzZjMyMmRhZjkzYzJkNTU1ODM1YTZkMTc1YTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMDctMTYgIEFk
cmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFVu
aWZ5IGNvbXBvc2l0b3IgcXVhZCB0cmFuc2Zvcm1zIGludG8gY29udGVudCBzcGFjZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEzNTAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGVzdHMgdG8g
YWRkIGJvdW5kcy9jb250ZW50Qm91bmRzIHByb3BlcnRpZXMgdG8gbGF5ZXJzLiBUaGlzCisgICAg
ICAgIGV4cG9zZWQgYSBidWcgaW4gdGhlIHF1YWQgY3VsbGVyIHRlc3RzIHdoZXJlIHRoZSBkcmF3
IHRyYW5zZm9ybSB3YXMKKyAgICAgICAgaW5jb3JyZWN0bHkgYmVpbmcgc2V0IHRvIHRoZSBvcmln
aW4gdHJhbnNmb3JtIHJhdGhlciB0aGFuIGJlaW5nIGEKKyAgICAgICAgdHJhbnNmb3JtIHRoYXQg
b3BlcmF0ZXMgb24gY2VudGVyZWQgbGF5ZXIgcmVjdHMuIEZpeGVkIHRoaXMgYnVnLgorCisgICAg
ICAgICogdGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NTb2xp
ZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChDQ0xheWVyVGVzdENvbW1vbjo6VEVT
VCk6CisgICAgICAgICogdGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwOgorICAgICAgICAo
Q0NMYXllclRlc3RDb21tb246OmNyZWF0ZUxheWVyKToKKwogMjAxMi0wNy0xMiAgRGFuYSBKYW5z
ZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFRoZSByb290
IGxheWVyIHNob3VsZCBub3QgdHJ5IGNyZWF0ZSBhIHNlY29uZCBSZW5kZXJTdXJmYWNlIGZvciBp
dHNlbGYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSU9TdXJmYWNlTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSU9TdXJmYWNlTGF5ZXJJbXBsLmNwcAppbmRleCBjZTNi
MzhlOTY0YTQ1YzFkYTE4NTkzY2Y2MmZiZjI5NjAzYjllNjBiLi5kMTE1N2VkMDM3OTc5ODE1NGFk
MTE3YThlMjljMmMzNDA5MDExYTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lPU3VyZmFjZUxheWVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJT1N1cmZhY2VMYXll
ckltcGwuY3BwCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgQ0NJT1N1cmZhY2VMYXllckltcGw6Ondp
bGxEcmF3KENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIsIENDR3JhcGhpY3NDb250ZXh0CiAKIHZv
aWQgQ0NJT1N1cmZhY2VMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExp
c3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wmKQogewot
ICAgIEludFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOworICAgIEludFJlY3Qg
cXVhZFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsKICAgICBxdWFkTGlzdC5hcHBl
bmQoQ0NJT1N1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3Qs
IG1faW9TdXJmYWNlU2l6ZSwgbV9pb1N1cmZhY2VUZXh0dXJlSWQpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCmluZGV4IDlhODgzNzZjMmQ2MTVkODcwYWFlZWVjN2Y0MmE2NzBiMDk4NDk5
MGQuLjE1YzNlYTIyNTlmOWYyNDE0YmU2Yzg0MTI2ZjdkMzRkN2YxZjhkYWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAKQEAgLTE0Nyw3ICsxNDcsMTQgQEAgYm9vbCBDQ0xheWVySW1wbDo6ZGVz
Y2VuZGFudERyYXdzQ29udGVudCgpCiAKIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IEND
TGF5ZXJJbXBsOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUoKSBjb25zdAogewotICAgIHJldHVybiBD
Q1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHF1YWRUcmFuc2Zvcm0oKSwgbV92aXNpYmxlQ29udGVu
dFJlY3QsIG1fc2Npc3NvclJlY3QsIG1fZHJhd09wYWNpdHksIG1fb3BhcXVlKTsKKyAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJhbnNmb3JtYXRpb24gPSBkcmF3VHJhbnNmb3JtKCk7
CisgICAgaWYgKCFjb250ZW50Qm91bmRzKCkuaXNFbXB0eSgpICYmICFib3VuZHMoKS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgcXVhZFRyYW5zZm9ybWF0aW9uLnNjYWxlTm9uVW5pZm9ybShib3VuZHMo
KS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzKCkud2lkdGgoKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkuaGVp
Z2h0KCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSkpOwor
ICAgICAgICBxdWFkVHJhbnNmb3JtYXRpb24udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzKCkud2lk
dGgoKSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSAvIDIuMCk7CisgICAgfQorCisg
ICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocXVhZFRyYW5zZm9ybWF0aW9uLCBt
X3Zpc2libGVDb250ZW50UmVjdCwgbV9zY2lzc29yUmVjdCwgbV9kcmF3T3BhY2l0eSwgbV9vcGFx
dWUpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjp3aWxsRHJhdyhDQ1JlbmRlcmVyKiwgQ0NHcmFw
aGljc0NvbnRleHQqKQpAQCAtMjM1LDE3ICsyNDIsNiBAQCBjb25zdCBJbnRSZWN0IENDTGF5ZXJJ
bXBsOjpnZXREcmF3UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1hcHBlZFJlY3Q7CiB9CiAKLVdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IENDTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKCkgY29uc3QK
LXsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJhbnNmb3JtYXRpb24gPSBkcmF3
VHJhbnNmb3JtKCk7Ci0KLSAgICBmbG9hdCBvZmZzZXRYID0gLTAuNSAqIGJvdW5kcygpLndpZHRo
KCk7Ci0gICAgZmxvYXQgb2Zmc2V0WSA9IC0wLjUgKiBib3VuZHMoKS5oZWlnaHQoKTsKLSAgICBx
dWFkVHJhbnNmb3JtYXRpb24udHJhbnNsYXRlKG9mZnNldFgsIG9mZnNldFkpOwotCi0gICAgcmV0
dXJuIHF1YWRUcmFuc2Zvcm1hdGlvbjsKLX0KLQogdm9pZCBDQ0xheWVySW1wbDo6d3JpdGVJbmRl
bnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
IT0gaW5kZW50OyArK2kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCAyYjlhNDliZDMwMzZmZGZm
NGI4Yzk3MWQ2MmYwMzE5ZDU2NzgxMzUzLi40YzgwYzRjNTUyNzAwYzJmMGE4ZDFlZmI3ZGViNTdj
ZjI1MDc1NDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTI3OCw5ICsyNzgsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYs
IGludCBpbmRlbnQpIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJl
YW0mLCBpbnQgaW5kZW50KTsKIAotICAgIC8vIFRyYW5zZm9ybWF0aW9uIHVzZWQgdG8gdHJhbnNm
b3JtIHF1YWRzIHByb3ZpZGVkIGluIGFwcGVuZFF1YWRzLgotICAgIHZpcnR1YWwgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJhbnNmb3JtKCkgY29uc3Q7Ci0KIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRQYXJlbnQoQ0NMYXllckltcGwqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBh
cmVudDsgfQogICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyUGFzcy5jcHAKaW5kZXggOTBhNmVlNjBhZDc1ZjY1YTdjNTFmMDE5NzgzMDU1NGQ2ZTM1ZWFm
Ni4uOTkyMDg3NmUwZTdiN2RjYzA3MjYwNTBlMDNmYjhjMGMyNTZmZjE1OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclBhc3MuY3BwCkBAIC05NCw2ICs5NCw4IEBAIHZvaWQgQ0NSZW5kZXJQYXNzOjphcHBl
bmRRdWFkc1RvRmlsbFNjcmVlbihDQ0xheWVySW1wbCogcm9vdExheWVyLCBTa0NvbG9yIHNjcmVl
CiAgICAgaWYgKGZpbGxSZWdpb24uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICAv
LyBNYW51YWxseSBjcmVhdGUgdGhlIHF1YWQgc3RhdGUgZm9yIHRoZSBndXR0ZXIgcXVhZHMsIGFz
IHRoZSByb290IGxheWVyCisgICAgLy8gZG9lc24ndCBoYXZlIGFueSBib3VuZHMgYW5kIHNvIGNh
bid0IGdlbmVyYXRlIHRoaXMgaXRzZWxmLgogICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4g
c2hhcmVkUXVhZFN0YXRlID0gcm9vdExheWVyLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKICAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1Ub0xheWVyU3BhY2UgPSByb290TGF5
ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkuaW52ZXJzZSgpOwogICAgIFZlY3RvcjxJbnRSZWN0
PiBmaWxsUmVjdHMgPSBmaWxsUmVnaW9uLnJlY3RzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xp
ZENvbG9yTGF5ZXJJbXBsLmNwcAppbmRleCA5NTU2NGI2MzU2MTc5NWRkOGU2ZDUxNDAwOTYzMDJm
NmEyNTcxODAwLi40ZDUyYzE1ZGQ0MmYyM2RhYWZmNmM1NDM4YmU0Zjc5ZWY3ODY0NmEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Nv
bGlkQ29sb3JMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1wbC5jcHAKQEAgLTQ5LDIwICs0OSwx
MiBAQCBDQ1NvbGlkQ29sb3JMYXllckltcGw6On5DQ1NvbGlkQ29sb3JMYXllckltcGwoKQogewog
fQogCi1XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ1NvbGlkQ29sb3JMYXllckltcGw6OnF1YWRU
cmFuc2Zvcm0oKSBjb25zdAotewotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNvbGlkQ29s
b3JUcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtKCk7Ci0gICAgc29saWRDb2xvclRyYW5zZm9ybS50
cmFuc2xhdGUoLWJvdW5kcygpLndpZHRoKCkgLyAyLjAsIC1ib3VuZHMoKS5oZWlnaHQoKSAvIDIu
MCk7Ci0KLSAgICByZXR1cm4gc29saWRDb2xvclRyYW5zZm9ybTsKLX0KLQogdm9pZCBDQ1NvbGlk
Q29sb3JMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wmKQogewogICAgIC8vIFdl
IGNyZWF0ZSBhIHNlcmllcyBvZiBzbWFsbGVyIHF1YWRzIGluc3RlYWQgb2YganVzdCBvbmUgbGFy
Z2Ugb25lIHNvIHRoYXQgdGhlCiAgICAgLy8gY3VsbGVyIGNhbiByZWR1Y2UgdGhlIHRvdGFsIHBp
eGVscyBkcmF3bi4KLSAgICBpbnQgd2lkdGggPSBib3VuZHMoKS53aWR0aCgpOwotICAgIGludCBo
ZWlnaHQgPSBib3VuZHMoKS5oZWlnaHQoKTsKKyAgICBpbnQgd2lkdGggPSBjb250ZW50Qm91bmRz
KCkud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gY29udGVudEJvdW5kcygpLmhlaWdodCgpOwog
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gbV90aWxlU2l6ZSkgewogICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBtX3RpbGVTaXplKSB7CiAgICAgICAg
ICAgICBJbnRSZWN0IHNvbGlkVGlsZVJlY3QoeCwgeSwgbWluKHdpZHRoIC0geCwgbV90aWxlU2l6
ZSksIG1pbihoZWlnaHQgLSB5LCBtX3RpbGVTaXplKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRD
b2xvckxheWVySW1wbC5oCmluZGV4IDY0MjkxMjU1ZmRiZDI4ODRkNzNhNDljZTZhMjYzODAwOTQ4
NGFiMjQuLmUzMDA1ODQ1ZTZkZTZiMjBkYWM1ZmVlNjQ5YTUxNTcxZjZhMTBjMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRD
b2xvckxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1wbC5oCkBAIC00MSw3ICs0MSw2IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgdmlydHVhbCB+Q0NTb2xpZENvbG9yTGF5ZXJJbXBsKCk7CiAKLSAgICB2
aXJ0dWFsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybSgpIGNv
bnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXIm
LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGJvb2wmIGhhZE1pc3NpbmdUaWxlcykgT1ZFUlJJ
REU7CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZUxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuY3BwCmlu
ZGV4IGNhZDM3NjA3NmUzZmU1OTkxZTVlMTA2N2Y5MTA3N2JkMWRkNDY0MDMuLjZkZjJmYjZiZDY0
YzZkMzY5ZTA4OWM3MTExNjFjZjhiMWFhZTc5MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZUxheWVySW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJl
TGF5ZXJJbXBsLmNwcApAQCAtNTAsNyArNTAsNyBAQCBDQ1RleHR1cmVMYXllckltcGw6On5DQ1Rl
eHR1cmVMYXllckltcGwoKQogCiB2b2lkIENDVGV4dHVyZUxheWVySW1wbDo6YXBwZW5kUXVhZHMo
Q0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1
YWRTdGF0ZSwgYm9vbCYpCiB7Ci0gICAgSW50UmVjdCBxdWFkUmVjdChJbnRQb2ludCgpLCBib3Vu
ZHMoKSk7CisgICAgSW50UmVjdCBxdWFkUmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkp
OwogICAgIHF1YWRMaXN0LmFwcGVuZChDQ1RleHR1cmVEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1
YWRTdGF0ZSwgcXVhZFJlY3QsIG1fdGV4dHVyZUlkLCBtX3ByZW11bHRpcGxpZWRBbHBoYSwgbV91
dlJlY3QsIG1fZmxpcHBlZCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3Bw
CmluZGV4IDFiMjEwODkxMmY3OTg5NzAyNGU0ZTIyNjBlZWU5MWYwMmUwNTVhM2MuLmRhOWExMGE5
OWQ4YzdiZjIyZDg3Yzg0N2I5NTdmMjM1MGY1ZDNlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRM
YXllckltcGwuY3BwCkBAIC0xMjMsMjEgKzEyMyw2IEBAIERyYXdhYmxlVGlsZSogQ0NUaWxlZExh
eWVySW1wbDo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCiAgICAgcmV0dXJuIGFkZGVkVGlsZTsK
IH0KIAotV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NUaWxlZExheWVySW1wbDo6cXVhZFRyYW5z
Zm9ybSgpIGNvbnN0Ci17Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0g
ZHJhd1RyYW5zZm9ybSgpOwotCi0gICAgaWYgKGNvbnRlbnRCb3VuZHMoKS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiB0cmFuc2Zvcm07Ci0KLSAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3Jt
KGJvdW5kcygpLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMoKS53
aWR0aCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLmhlaWdodCgp
IC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzKCkuaGVpZ2h0KCkpKTsKLQotICAg
IC8vIFRpbGVyIGRyYXdzIHdpdGggYSBkaWZmZXJlbnQgb3JpZ2luIGZyb20gb3RoZXIgbGF5ZXJz
LgotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMoKS53aWR0aCgpIC8gMi4w
LCAtY29udGVudEJvdW5kcygpLmhlaWdodCgpIC8gMi4wKTsKLSAgICByZXR1cm4gdHJhbnNmb3Jt
OwotfQotCiB2b2lkIENDVGlsZWRMYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYg
cXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wm
IGhhZE1pc3NpbmdUaWxlcykKIHsKICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCA9IHZp
c2libGVDb250ZW50UmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCmluZGV4IDRj
ODJjZGM4Y2FmN2U3MWI5Njk3MTZjNGFmNWUxOTZjMjc5MTA0ODUuLjQwNTJmZTk3Y2VjMjMzNThk
Y2Y4OTcyYzQ1ZWUzYjZkNDFhNzM3NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgK
QEAgLTY0LDggKzY0LDYgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgaGFzVGlsZUF0KGludCwgaW50
KSBjb25zdDsKICAgICBib29sIGhhc1RleHR1cmVJZEZvclRpbGVBdChpbnQsIGludCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5z
Zm9ybSgpIGNvbnN0IE9WRVJSSURFOwotCiBwcml2YXRlOgogCiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuICJDb250ZW50
TGF5ZXIiOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IGNjMzQ5Yzhl
NWQxN2UxZGRiY2FlOTY1OTBlOWJhYTljNzNmMTMyZDcuLmI1MjQ1OTZmMGRlYTYwNzdhNGM3NGE1
NjFlNWU5OTQyZTFkZTE4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBA
IC0xODMsNyArMTgzLDcgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1
YWRDdWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGEKICAgICAvLyBGSVhNRTog
V2hlbiB3ZSBwYXNzIHF1YWRzIG91dCBvZiBwcm9jZXNzLCB3ZSBuZWVkIHRvIGRvdWJsZS1idWZm
ZXIsIG9yCiAgICAgLy8gb3RoZXJ3aXNlIHN5bmNob25pemUgdXNlIG9mIGFsbCB0ZXh0dXJlcyBp
biB0aGUgcXVhZC4KIAotICAgIEludFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkp
OworICAgIEludFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsKIAog
ICAgIHN3aXRjaCAobV9mb3JtYXQpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1J
TkFOQ0U6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFk
Q3VsbGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUXVhZEN1bGxl
clRlc3QuY3BwCmluZGV4IDYyNGQyNDcxMTQ5YWIwNmM2ODgyZDhkNmJjOGI5OWM4ZjhlZjkyOWQu
LjAwNzIyMDRjMWY5NzMwMjFjNTQ1YjlhNDQ3MzM5YjQ3NTUyYzI0ZTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcApAQCAtNTgsMTgg
KzU4LDIyIEBAIHByaXZhdGU6CiAKIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPENDTGF5ZXJJbXBs
LCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpGcm9udFRvQmFjaz4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKIAotc3RhdGljIFBhc3NP
d25QdHI8Q0NUaWxlZExheWVySW1wbD4gbWFrZUxheWVyKENDVGlsZWRMYXllckltcGwqIHBhcmVu
dCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IElu
dFJlY3QmIGxheWVyUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUsIGNvbnN0IEludFJl
Y3QmIGxheWVyT3BhcXVlUmVjdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHN1cmZhY2VMYXllckxp
c3QpCitzdGF0aWMgUGFzc093blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiBtYWtlTGF5ZXIoQ0NUaWxl
ZExheWVySW1wbCogcGFyZW50LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3JpZ2lu
VHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wg
b3BhcXVlLCBjb25zdCBJbnRSZWN0JiBsYXllck9wYXF1ZVJlY3QsIFZlY3RvcjxDQ0xheWVySW1w
bCo+JiBzdXJmYWNlTGF5ZXJMaXN0KQogewogICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiBs
YXllciA9IENDVGlsZWRMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICBPd25QdHI8Q0NMYXllclRp
bGluZ0RhdGE+IHRpbGVyID0gQ0NMYXllclRpbGluZ0RhdGE6OmNyZWF0ZShJbnRTaXplKDEwMCwg
MTAwKSwgQ0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzKTsKICAgICB0aWxlci0+c2V0
Qm91bmRzKGxheWVyUmVjdC5zaXplKCkpOwogICAgIGxheWVyLT5zZXRUaWxpbmdEYXRhKCp0aWxl
cik7CiAgICAgbGF5ZXItPnNldFNraXBzRHJhdyhmYWxzZSk7CisgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggZHJhd1RyYW5zZm9ybSA9IG9yaWdpblRyYW5zZm9ybTsKKyAgICBkcmF3VHJhbnNm
b3JtLnRyYW5zbGF0ZSgwLjUgKiBsYXllclJlY3Qud2lkdGgoKSwgMC41ICogbGF5ZXJSZWN0Lmhl
aWdodCgpKTsKICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKLSAg
ICBsYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7CisgICAgbGF5
ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKG9yaWdpblRyYW5zZm9ybSk7CiAgICAgbGF5ZXIt
PnNldFZpc2libGVDb250ZW50UmVjdChsYXllclJlY3QpOwogICAgIGxheWVyLT5zZXREcmF3T3Bh
Y2l0eShvcGFjaXR5KTsKICAgICBsYXllci0+c2V0T3BhcXVlKG9wYXF1ZSk7CisgICAgbGF5ZXIt
PnNldEJvdW5kcyhsYXllclJlY3Quc2l6ZSgpKTsKKyAgICBsYXllci0+c2V0Q29udGVudEJvdW5k
cyhsYXllclJlY3Quc2l6ZSgpKTsKIAogICAgIGludCB0ZXh0dXJlSWQgPSAxOwogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgdGlsZXItPm51bVRpbGVzWCgpOyArK2kpCkBAIC0xOTUsNyArMTk5LDcg
QEAgVEVTVChDQ1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlDdWxsQ2VudGVyVGlsZU9ubHkpCiAKICAg
ICBhcHBlbmRRdWFkcyhxdWFkTGlzdCwgc2hhcmVkU3RhdGVMaXN0LCBjaGlsZExheWVyLmdldCgp
LCBpdCwgb2NjbHVzaW9uVHJhY2tlcik7CiAgICAgYXBwZW5kUXVhZHMocXVhZExpc3QsIHNoYXJl
ZFN0YXRlTGlzdCwgcm9vdExheWVyLmdldCgpLCBpdCwgb2NjbHVzaW9uVHJhY2tlcik7Ci0gICAg
RVhQRUNUX0VRKHF1YWRMaXN0LnNpemUoKSwgMTJ1KTsKKyAgICBBU1NFUlRfRVEocXVhZExpc3Qu
c2l6ZSgpLCAxMnUpOwogCiAgICAgSW50UmVjdCBxdWFkVmlzaWJsZVJlY3QxID0gcXVhZExpc3Rb
NV0uZ2V0KCktPnF1YWRWaXNpYmxlUmVjdCgpOwogICAgIEVYUEVDVF9FUShxdWFkVmlzaWJsZVJl
Y3QxLmhlaWdodCgpLCA1MCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1NvbGlkQ29sb3JMYXllckltcGxUZXN0LmNwcAppbmRleCAxYmZjODFkOGM1ZmU1
ZmYxOTUzOGEzMTcxNjkxMzFjMjg3MTVkYzE3Li5mOWE5MjkyYjc3ZDYwZGIzN2JlNzUxODkxNDM0
NGQyOTAwMWRmYmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
U29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHAKQEAgLTUwLDYgKzUwLDcgQEAgVEVT
VChDQ1NvbGlkQ29sb3JMYXllckltcGxUZXN0LCB2ZXJpZnlUaWxpbmdDb21wbGV0ZUFuZE5vT3Zl
cmxhcCkKICAgICBPd25QdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBsYXllciA9IENDU29saWRD
b2xvckxheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJl
Y3QodmlzaWJsZUNvbnRlbnRSZWN0KTsKICAgICBsYXllci0+c2V0Qm91bmRzKGxheWVyU2l6ZSk7
CisgICAgbGF5ZXItPnNldENvbnRlbnRCb3VuZHMobGF5ZXJTaXplKTsKIAogICAgIE93blB0cjxD
Q1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlID0gbGF5ZXItPmNyZWF0ZVNoYXJlZFF1
YWRTdGF0ZSgpOwogICAgIGJvb2wgaGFkTWlzc2luZ1RpbGVzID0gZmFsc2U7CkBAIC03MSw2ICs3
Miw3IEBAIFRFU1QoQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5Q29ycmVjdEJhY2tn
cm91bmRDb2xvckluUXVhZCkKICAgICBPd25QdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBsYXll
ciA9IENDU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgIGxheWVyLT5zZXRWaXNp
YmxlQ29udGVudFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KTsKICAgICBsYXllci0+c2V0Qm91bmRz
KGxheWVyU2l6ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRCb3VuZHMobGF5ZXJTaXplKTsKICAg
ICBsYXllci0+c2V0QmFja2dyb3VuZENvbG9yKHRlc3RDb2xvcik7CiAKICAgICBPd25QdHI8Q0NT
aGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IGxheWVyLT5jcmVhdGVTaGFyZWRRdWFk
U3RhdGUoKTsKQEAgLTk0LDYgKzk2LDcgQEAgVEVTVChDQ1NvbGlkQ29sb3JMYXllckltcGxUZXN0
LCB2ZXJpZnlDb3JyZWN0T3BhY2l0eUluUXVhZCkKICAgICBPd25QdHI8Q0NTb2xpZENvbG9yTGF5
ZXJJbXBsPiBsYXllciA9IENDU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgIGxh
eWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KTsKICAgICBsYXll
ci0+c2V0Qm91bmRzKGxheWVyU2l6ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRCb3VuZHMobGF5
ZXJTaXplKTsKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkob3BhY2l0eSk7CiAKICAgICBPd25Q
dHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IGxheWVyLT5jcmVhdGVTaGFy
ZWRRdWFkU3RhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NUaWxlZExheWVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q1RpbGVkTGF5ZXJJbXBsVGVzdC5jcHAKaW5kZXggNTg4YzBmZjA4MzFhMjg5MzkzZDk3N2JhMzg0
NmY4YTMxODYwMjBhNC4uMDBkMzhhN2VjN2Y0YjI3NWJmOTFhYjY3ZDNkMTQ0YjVhNzRlMDcwMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJJbXBs
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJJ
bXBsVGVzdC5jcHAKQEAgLTUwLDYgKzUwLDggQEAgc3RhdGljIFBhc3NPd25QdHI8Q0NUaWxlZExh
eWVySW1wbD4gY3JlYXRlTGF5ZXIoY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEkKICAg
ICBsYXllci0+c2V0U2tpcHNEcmF3KGZhbHNlKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRl
bnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXJTaXplKSk7CiAgICAgbGF5ZXItPnNldERy
YXdPcGFjaXR5KDEpOworICAgIGxheWVyLT5zZXRCb3VuZHMobGF5ZXJTaXplKTsKKyAgICBsYXll
ci0+c2V0Q29udGVudEJvdW5kcyhsYXllclNpemUpOwogCiAgICAgaW50IHRleHR1cmVJZCA9IDE7
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aWxlci0+bnVtVGlsZXNYKCk7ICsraSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>