<?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>133217</bug_id>
          
          <creation_ts>2014-05-23 09:05:04 -0700</creation_ts>
          <short_desc>Add type-checked casts for TransformOperations</short_desc>
          <delta_ts>2014-05-25 11:10:14 -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>WebCore Misc.</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="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>abucur</cc>
    
    <cc>bunhere</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1011247</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-05-23 09:05:04 -0700</bug_when>
    <thetext>Add type-checked casts for TransformOperations, and give some C++11 love to the TransformOperation class and its subclasses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011264</commentid>
    <comment_count>1</comment_count>
      <attachid>231969</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-05-23 09:55:35 -0700</bug_when>
    <thetext>Created attachment 231969
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011265</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-23 09:57:28 -0700</bug_when>
    <thetext>Attachment 231969 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/transforms/SkewTransformOperation.h:43:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/graphics/transforms/RotateTransformOperation.h:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/graphics/transforms/MatrixTransformOperation.h:48:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3 in 20 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>1011510</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-05-24 10:14:26 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 231969 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WebCore/platform/graphics/transforms/SkewTransformOperation.h:43:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; ERROR: Source/WebCore/platform/graphics/transforms/RotateTransformOperation.h:50:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; ERROR: Source/WebCore/platform/graphics/transforms/MatrixTransformOperation.h:48:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; Total errors found: 3 in 20 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

I think the code is more readable with the explicit use of &apos;0 in these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011518</commentid>
    <comment_count>4</comment_count>
      <attachid>231969</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-05-24 11:34:15 -0700</bug_when>
    <thetext>Comment on attachment 231969
Patch v1

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

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:180
&gt; +        value.setX(transformOp ? narrowPrecisionToFloat(toScaleTransformOperation(transformOp)-&gt;x()) : 1);
&gt; +        value.setY(transformOp ? narrowPrecisionToFloat(toScaleTransformOperation(transformOp)-&gt;y()) : 1);
&gt; +        value.setZ(transformOp ? narrowPrecisionToFloat(toScaleTransformOperation(transformOp)-&gt;z()) : 1);

Would be better to have a local var for the casted transform op.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:186
&gt; +        value.setX(transformOp ? narrowPrecisionToFloat(toTranslateTransformOperation(transformOp)-&gt;x(size)) : 0);
&gt; +        value.setY(transformOp ? narrowPrecisionToFloat(toTranslateTransformOperation(transformOp)-&gt;y(size)) : 0);
&gt; +        value.setZ(transformOp ? narrowPrecisionToFloat(toTranslateTransformOperation(transformOp)-&gt;z(size)) : 0);

Ditto.

&gt; Source/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.h:74
&gt; +inline bool Matrix3DTransformOperation::operator==(const TransformOperation&amp; o) const
&gt; +{
&gt; +    if (!isSameType(o))
&gt; +        return false;
&gt; +    const Matrix3DTransformOperation&amp; m = toMatrix3DTransformOperation(o);
&gt; +    return m_matrix == m.m_matrix;
&gt; +}

This is virtual so I&apos;m not sure there&apos;s any point making it inline.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:191
&gt; +            encoder &lt;&lt; toScaleTransformOperation(operation)-&gt;x();
&gt; +            encoder &lt;&lt; toScaleTransformOperation(operation)-&gt;y();
&gt; +            encoder &lt;&lt; toScaleTransformOperation(operation)-&gt;z();

Would be bit cleaner to have encoders for each subclass here I think, but this is OK for now.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:205
&gt; +        case TransformOperation::ROTATE_Z:

ROTATE==ROTATE_Z if you look at TransformOperation.h Maybe just add a comment next to ROTATE.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:281
&gt; +        case TransformOperation::ROTATE_Z:

ROTATE==ROTATE_Z if you look at TransformOperation.h Maybe just add a comment next to ROTATE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011575</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-05-25 10:13:24 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 231969 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=231969&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:180
&gt; &gt; +        value.setX(transformOp ? narrowPrecisionToFloat(toScaleTransformOperation(transformOp)-&gt;x()) : 1);
&gt; &gt; +        value.setY(transformOp ? narrowPrecisionToFloat(toScaleTransformOperation(transformOp)-&gt;y()) : 1);
&gt; &gt; +        value.setZ(transformOp ? narrowPrecisionToFloat(toScaleTransformOperation(transformOp)-&gt;z()) : 1);
&gt; 
&gt; Would be better to have a local var for the casted transform op.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:186
&gt; &gt; +        value.setX(transformOp ? narrowPrecisionToFloat(toTranslateTransformOperation(transformOp)-&gt;x(size)) : 0);
&gt; &gt; +        value.setY(transformOp ? narrowPrecisionToFloat(toTranslateTransformOperation(transformOp)-&gt;y(size)) : 0);
&gt; &gt; +        value.setZ(transformOp ? narrowPrecisionToFloat(toTranslateTransformOperation(transformOp)-&gt;z(size)) : 0);
&gt; 
&gt; Ditto.

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.h:74
&gt; &gt; +inline bool Matrix3DTransformOperation::operator==(const TransformOperation&amp; o) const
&gt; &gt; +{
&gt; &gt; +    if (!isSameType(o))
&gt; &gt; +        return false;
&gt; &gt; +    const Matrix3DTransformOperation&amp; m = toMatrix3DTransformOperation(o);
&gt; &gt; +    return m_matrix == m.m_matrix;
&gt; &gt; +}
&gt; 
&gt; This is virtual so I&apos;m not sure there&apos;s any point making it inline.

Will move this to the implementation source file (and all the other subclasses).

&gt; &gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:191
&gt; &gt; +            encoder &lt;&lt; toScaleTransformOperation(operation)-&gt;x();
&gt; &gt; +            encoder &lt;&lt; toScaleTransformOperation(operation)-&gt;y();
&gt; &gt; +            encoder &lt;&lt; toScaleTransformOperation(operation)-&gt;z();
&gt; 
&gt; Would be bit cleaner to have encoders for each subclass here I think, but this is OK for now.

This feels like a separate patch, but I agree this would be cleaner.

&gt; &gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:205
&gt; &gt; +        case TransformOperation::ROTATE_Z:
&gt; 
&gt; ROTATE==ROTATE_Z if you look at TransformOperation.h Maybe just add a comment next to ROTATE.
&gt; 
&gt; &gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:281
&gt; &gt; +        case TransformOperation::ROTATE_Z:
&gt; 
&gt; ROTATE==ROTATE_Z if you look at TransformOperation.h Maybe just add a comment next to ROTATE.

I covered why I did this in the ChangeLog, but I don&apos;t feel strongly about it, so I&apos;ll just remove these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011581</commentid>
    <comment_count>6</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-05-25 11:10:14 -0700</bug_when>
    <thetext>Committed r169320: &lt;http://trac.webkit.org/changeset/169320&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231969</attachid>
            <date>2014-05-23 09:55:35 -0700</date>
            <delta_ts>2014-05-24 11:34:14 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-133217-20140523095511.patch</filename>
            <type>text/plain</type>
            <size>45557</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5MjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk5NjIxZmZmYTM4MWU0
ZGRiZDIzOWYwMTNlMTkyODE2OTg2ZDE5YS4uOGIxY2E0NjU4YmJjYWY3MzEyYTUzNjFjMGVkZGJi
ZGQzMTQ0MmRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE0LTA1LTIzICBEYXZp
ZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHR5cGUtY2hlY2tl
ZCBjYXN0cyBmb3IgVHJhbnNmb3JtT3BlcmF0aW9ucworICAgICAgICA8aHR0cDovL3dlYmtpdC5v
cmcvYi8xMzMyMTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWUpOgorICAgICAgICAtIFN3aXRjaCB0
byB0eXBlLWNoZWNrZWQgY2FzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uLmg6CisgICAgICAgIC0gQWRkICdmaW5hbCcgdG8gY2xhc3MgZGVjbGFyYXRpb24uCisgICAg
ICAgIC0gQWRkICdvdmVycmlkZScgdG8gb3ZlcnJpZGRlbiBtZXRob2RzLgorICAgICAgICAtIEFk
ZCB0eXBlLWNoZWNrZWQgY2FzdCB2aWEgVFJBTlNGT1JNT1BFUkFUSU9OX1RZUEVfQ0FTVFMgbWFj
cm8uCisgICAgICAgIC0gTW92ZSBpbXBsZW1lbnRhdGlvbiBvZiBvcGVyYXRvcj09KGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbiYpCisgICAgICAgICAgb3V0IG9mIGNsYXNzIHNvIGl0IGlzIGFibGUg
dG8gdXNlIGEgdHlwZS1jaGVja2VkIGNhc3QsIGFuZAorICAgICAgICAgIHN3aXRjaCBiYWNrIHRv
IHVzaW5nIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLgorICAgICAgICAtIEFkZCBv
ciB1cGRhdGUgQVNTRVJUIGluIHByaXZhdGUgY29uc3RydWN0b3IgdG8gY2hlY2sgZm9yCisgICAg
ICAgICAgY29ycmVjdCBPcGVyYXRpb25UeXBlIGluIGNsYXNzZXMgdGhhdCByZXByZXNlbnQgbXVs
dGlwbGUKKyAgICAgICAgICB0eXBlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAtIFN3aXRjaCB0byB0
eXBlLWNoZWNrZWQgY2FzdHMgYW5kIHVzZSBhIHJlZmVyZW5jZS4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5k
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpibGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNrZXdUcmFu
c2Zvcm1PcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAgLSBTd2l0Y2gg
dG8gdHlwZS1jaGVja2VkIGNhc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9y
bU9wZXJhdGlvbjo6aXNSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6aXNTY2FsZVRyYW5zZm9ybU9wZXJhdGlvblR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uOjppc1NrZXdUcmFuc2Zvcm1P
cGVyYXRpb25UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6aXNU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKToKKyAgICAgICAgLSBBZGQgdHlwZS1jaGVj
a2luZyBtZXRob2RzIHVzZWQgaW4gY29uc3RydWN0b3JzIGFuZCB0eXBlLWNoZWNrZWQKKyAgICAg
ICAgICBjYXN0cy4KKyAgICAgICAgLSBEZWZpbmUgVFJBTlNGT1JNT1BFUkFUSU9OX1RZUEVfQ0FT
VFMgbWFjcm8gdXNlZCBieSBzdWJjbGFzc2VzLgorCiAyMDE0LTA1LTIyICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxNjM3
MTIpOiBbR1RLXSBNaXNzcGVsbGluZyBhbmQgZ3JhbW1hciB1bmRlcmxpbmUgbWFya3MgYXJlIG5v
IGxvbmdlciBkcmF3bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDk5NGFhZjlmOWFhMDRhN2QwMjRlNzAyNjg5ZDY0
ZDg4NzlmNjM3ZmIuLjE4NGZiYmM0ZTAwMmIwODM0YjQyMTQ4ZWRmOWY1ZTU3ZmZmYzZlMzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNC0wNS0yMyAgRGF2aWQgS2lsemVyICA8ZGRr
aWx6ZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0eXBlLWNoZWNrZWQgY2FzdHMgZm9yIFRy
YW5zZm9ybU9wZXJhdGlvbnMKKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTMzMjE3Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNw
cDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZW5j
b2RlKToKKyAgICAgICAgLSBTd2l0Y2ggdG8gdHlwZS1jaGVja2VkIGNhc3RzLgorICAgICAgICAt
IEFkZCBjYXNlIHN0YXRlbWVudCBmb3IgUk9UQVRFX1ogKHNpbmNlIGl0J3MgYW4gaW1wbGVtZW50
YXRpb24KKyAgICAgICAgICBkZXRhaWwgdGhhdCBpdCdzIHRoZSBzYW1lIGFzIFJPVEFURSkuCisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtT3BlcmF0aW9ucz46OmRlY29kZSk6
CisgICAgICAgIC0gQWRkIGNhc2Ugc3RhdGVtZW50IGZvciBST1RBVEVfWiAoc2luY2UgaXQncyBh
biBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgIGRldGFpbCB0aGF0IGl0J3MgdGhlIHNhbWUgYXMg
Uk9UQVRFKS4KKwogMjAxNC0wNS0yMiAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIFVzZSB0eXBlLWNoZWNraW5nIEZpbHRlck9wZXJhdGlvbiBjYXN0cyBpbiBD
b29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDg2OWFlMTQ1N2Yy
YWQxMjAzMmY4N2U4MWExODY3ODFjY2Y2YTVkOGEuLjlkNTQwMDFmY2EyMzJkOWJiMGQ4NWY5Y2E0
MzA1OWNiNjY0YzhiZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuY3BwCkBAIC01MTYsMTQgKzUxNiwxNCBAQCBpbnQgR3JhcGhpY3NM
YXllcjo6dmFsaWRhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0
JiB2YWx1ZUxpcwogICAgICAgICAgICAgdHlwZSA9PSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFU
RV9ZIHx8CiAgICAgICAgICAgICB0eXBlID09IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1og
fHwKICAgICAgICAgICAgIHR5cGUgPT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0QpIHsK
LSAgICAgICAgICAgIGxhc3RSb3RBbmdsZSA9IHN0YXRpY19jYXN0PFJvdGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbio+KGZpcnN0VmFsLm9wZXJhdGlvbnMoKS5hdChqKS5nZXQoKSktPmFuZ2xlKCk7Cisg
ICAgICAgICAgICBsYXN0Um90QW5nbGUgPSB0b1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihmaXJz
dFZhbC5vcGVyYXRpb25zKCkuYXQoaikuZ2V0KCkpLT5hbmdsZSgpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAobWF4Um90QW5nbGUgPCAwKQogICAgICAgICAgICAgICAgIG1heFJvdEFu
Z2xlID0gZmFicyhsYXN0Um90QW5nbGUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gZmlyc3RJbmRleCArIDE7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWwgPSBvcGVyYXRp
b25zQXQodmFsdWVMaXN0LCBpKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgcm90QW5nbGUgPSB2
YWwub3BlcmF0aW9ucygpLmlzRW1wdHkoKSA/IDAgOiAoc3RhdGljX2Nhc3Q8Um90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uKj4odmFsLm9wZXJhdGlvbnMoKS5hdChqKS5nZXQoKSktPmFuZ2xlKCkpOwor
ICAgICAgICAgICAgICAgIGRvdWJsZSByb3RBbmdsZSA9IHZhbC5vcGVyYXRpb25zKCkuaXNFbXB0
eSgpID8gMCA6ICh0b1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbih2YWwub3BlcmF0aW9ucygpLmF0
KGopLmdldCgpKS0+YW5nbGUoKSk7CiAgICAgICAgICAgICAgICAgZG91YmxlIGRpZmZBbmdsZSA9
IGZhYnMocm90QW5nbGUgLSBsYXN0Um90QW5nbGUpOwogICAgICAgICAgICAgICAgIGlmIChkaWZm
QW5nbGUgPiBtYXhSb3RBbmdsZSkKICAgICAgICAgICAgICAgICAgICAgbWF4Um90QW5nbGUgPSBk
aWZmQW5nbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA4NGYyOWU5Zjc3ZDA1MTgxNDkxYmE3NThjODhk
YWE5NTE5YmViNTRhLi41MTYwZjE3NjdmNDAyOGFiMmViZmMwZjUyMmRiYTlmNTg3MmNhOGIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHAKQEAgLTE0NSwyNSArMTQ1LDI1IEBAIHN0YXRpYyB2b2lkIGdldFRyYW5z
Zm9ybUZ1bmN0aW9uVmFsdWUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm1PcCwg
VHJhCiAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURToKICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6CiAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJP
VEFURV9ZOgotICAgICAgICB2YWx1ZSA9IHRyYW5zZm9ybU9wID8gbmFycm93UHJlY2lzaW9uVG9G
bG9hdChkZWcycmFkKHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+
KHRyYW5zZm9ybU9wKS0+YW5nbGUoKSkpIDogMDsKKyAgICAgICAgdmFsdWUgPSB0cmFuc2Zvcm1P
cCA/IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZGVnMnJhZCh0b1JvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbih0cmFuc2Zvcm1PcCktPmFuZ2xlKCkpKSA6IDA7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9YOgotICAgICAgICB2YWx1ZSA9IHRyYW5zZm9y
bU9wID8gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5z
Zm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wKS0+eCgpKSA6IDE7CisgICAgICAgIHZhbHVlID0g
dHJhbnNmb3JtT3AgPyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHRvU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb24odHJhbnNmb3JtT3ApLT54KCkpIDogMTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k6Ci0gICAgICAgIHZhbHVlID0gdHJhbnNmb3JtT3Ag
PyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uKj4odHJhbnNmb3JtT3ApLT55KCkpIDogMTsKKyAgICAgICAgdmFsdWUgPSB0cmFu
c2Zvcm1PcCA/IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQodG9TY2FsZVRyYW5zZm9ybU9wZXJhdGlv
bih0cmFuc2Zvcm1PcCktPnkoKSkgOiAxOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0NBTEVfWjoKLSAgICAgICAgdmFsdWUgPSB0cmFuc2Zvcm1PcCA/IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb24qPih0cmFuc2Zvcm1PcCktPnooKSkgOiAxOworICAgICAgICB2YWx1ZSA9IHRyYW5zZm9y
bU9wID8gbmFycm93UHJlY2lzaW9uVG9GbG9hdCh0b1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKHRy
YW5zZm9ybU9wKS0+eigpKSA6IDE7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfWDoKLSAgICAgICAgdmFsdWUgPSB0cmFuc2Zvcm1PcCA/IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKj4odHJhbnNmb3JtT3ApLT54KHNpemUpKSA6IDA7CisgICAgICAgIHZhbHVlID0g
dHJhbnNmb3JtT3AgPyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHRvVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKHRyYW5zZm9ybU9wKS0+eChzaXplKSkgOiAwOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1k6Ci0gICAgICAgIHZhbHVlID0g
dHJhbnNmb3JtT3AgPyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0YXRpY19jYXN0PGNvbnN0IFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wKS0+eShzaXplKSkgOiAwOwor
ICAgICAgICB2YWx1ZSA9IHRyYW5zZm9ybU9wID8gbmFycm93UHJlY2lzaW9uVG9GbG9hdCh0b1Ry
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbih0cmFuc2Zvcm1PcCktPnkoc2l6ZSkpIDogMDsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgot
ICAgICAgICB2YWx1ZSA9IHRyYW5zZm9ybU9wID8gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzdGF0
aWNfY2FzdDxjb25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcCkt
Pnooc2l6ZSkpIDogMDsKKyAgICAgICAgdmFsdWUgPSB0cmFuc2Zvcm1PcCA/IG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQodG9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24odHJhbnNmb3JtT3ApLT56
KHNpemUpKSA6IDA7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwpAQCAtMTc1LDE1ICsxNzUsMTUgQEAgc3RhdGljIHZvaWQgZ2V0VHJhbnNmb3JtRnVuY3Rpb25W
YWx1ZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybU9wLCBUcmEKICAgICBzd2l0
Y2ggKHRyYW5zZm9ybVR5cGUpIHsKICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6
CiAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgotICAgICAgICB2YWx1ZS5z
ZXRYKHRyYW5zZm9ybU9wID8gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzdGF0aWNfY2FzdDxjb25z
dCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wKS0+eCgpKSA6IDEpOwotICAg
ICAgICB2YWx1ZS5zZXRZKHRyYW5zZm9ybU9wID8gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzdGF0
aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wKS0+eSgp
KSA6IDEpOwotICAgICAgICB2YWx1ZS5zZXRaKHRyYW5zZm9ybU9wID8gbmFycm93UHJlY2lzaW9u
VG9GbG9hdChzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5z
Zm9ybU9wKS0+eigpKSA6IDEpOworICAgICAgICB2YWx1ZS5zZXRYKHRyYW5zZm9ybU9wID8gbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCh0b1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKHRyYW5zZm9ybU9w
KS0+eCgpKSA6IDEpOworICAgICAgICB2YWx1ZS5zZXRZKHRyYW5zZm9ybU9wID8gbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCh0b1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKHRyYW5zZm9ybU9wKS0+eSgp
KSA6IDEpOworICAgICAgICB2YWx1ZS5zZXRaKHRyYW5zZm9ybU9wID8gbmFycm93UHJlY2lzaW9u
VG9GbG9hdCh0b1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKHRyYW5zZm9ybU9wKS0+eigpKSA6IDEp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
OgogICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q6Ci0gICAgICAgIHZh
bHVlLnNldFgodHJhbnNmb3JtT3AgPyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0YXRpY19jYXN0
PGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wKS0+eChzaXpl
KSkgOiAwKTsKLSAgICAgICAgdmFsdWUuc2V0WSh0cmFuc2Zvcm1PcCA/IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4o
dHJhbnNmb3JtT3ApLT55KHNpemUpKSA6IDApOwotICAgICAgICB2YWx1ZS5zZXRaKHRyYW5zZm9y
bU9wID8gbmFycm93UHJlY2lzaW9uVG9GbG9hdChzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcCktPnooc2l6ZSkpIDogMCk7CisgICAgICAg
IHZhbHVlLnNldFgodHJhbnNmb3JtT3AgPyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHRvVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uKHRyYW5zZm9ybU9wKS0+eChzaXplKSkgOiAwKTsKKyAgICAg
ICAgdmFsdWUuc2V0WSh0cmFuc2Zvcm1PcCA/IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQodG9UcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24odHJhbnNmb3JtT3ApLT55KHNpemUpKSA6IDApOworICAg
ICAgICB2YWx1ZS5zZXRaKHRyYW5zZm9ybU9wID8gbmFycm93UHJlY2lzaW9uVG9GbG9hdCh0b1Ry
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbih0cmFuc2Zvcm1PcCktPnooc2l6ZSkpIDogMCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5z
Zm9ybU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oCmluZGV4IGMxZjdmNDUxMjU5YmI1YWQ3
NjAyMGQ0MmYzYjFhMzk3NmYxMjMyNDAuLjI3ZjUwNTg2MjFlZmM0NTg4MjliZTAyNTU0YmUzOGVj
NGVkMmI5NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9u
LmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJZGVu
dGl0eVRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24geworY2xh
c3MgSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24gZmluYWwgOiBwdWJsaWMgVHJhbnNmb3JtT3Bl
cmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJZGVudGl0eVRyYW5zZm9y
bU9wZXJhdGlvbj4gY3JlYXRlKCkKICAgICB7CkBAIC0zNywyMSArMzcsMjEgQEAgcHVibGljOgog
ICAgIH0KICAgICAgICAgCiBwcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gSURFTlRJVFk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIG8udHlwZSgpID09IElE
RU5USVRZOyB9CisgICAgdmlydHVhbCBib29sIGlzSWRlbnRpdHkoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIHR5cGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBJREVOVElUWTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBl
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gby50
eXBlKCkgPT0gSURFTlRJVFk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAg
ICAgICByZXR1cm4gaXNTYW1lVHlwZShvKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgYXBw
bHkoVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFNpemUmKSBjb25zdAorICAgIHZp
cnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0U2l6ZSYp
IGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9uKiwgZG91YmxlLCBib29sID0gZmFsc2UpCisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
KiwgZG91YmxlLCBib29sID0gZmFsc2UpIG92ZXJyaWRlCiAgICAgewogICAgICAgICByZXR1cm4g
dGhpczsKICAgICB9CkBAIC02Miw2ICs2Miw4IEBAIHByaXZhdGU6CiAKIH07CiAKK1RSQU5TRk9S
TU9QRVJBVElPTl9UWVBFX0NBU1RTKElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLCB0eXBlKCkg
PT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCBhZGE0MmVjNWQ4NDMxYzE5
YTE2MGM0ZjRjNjViNDM3YjYzYzcxOTYzLi44ZjRmYjIyODIxNGIyMTE1NTIwMmU4NTQ3NWYxZWUw
YmFkY2YxODJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bi5oCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWF0
cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKK2Ns
YXNzIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uIGZpbmFsIDogcHVibGljIFRyYW5zZm9ybU9w
ZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb24+IGNyZWF0ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQog
ICAgIHsKQEAgLTQwLDI2ICs0MCwyMCBAQCBwdWJsaWM6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbWF0cml4KCkgY29uc3Qge3JldHVybiBtX21hdHJpeDsgfQogCiBwcml2YXRlOiAgICAKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4LmlzSWRl
bnRpdHkoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9tYXRyaXguaXNJZGVudGl0eSgpOyB9CiAKLSAgICB2aXJ0dWFsIE9wZXJhdGlv
blR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIE1BVFJJWF8zRDsgfQotICAgIHZpcnR1YWwgYm9v
bCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4g
by50eXBlKCkgPT0gTUFUUklYXzNEOyB9CisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIHR5cGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBNQVRSSVhfM0Q7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNTYW1lVHlwZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG8udHlwZSgpID09IE1BVFJJWF8zRDsgfQogCi0gICAgdmlydHVhbCBib29sIG9wZXJh
dG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKCFpc1NhbWVUeXBlKG8pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBj
b25zdCBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbiogbSA9IHN0YXRpY19jYXN0PGNvbnN0IE1h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8pOwotICAgICAgICByZXR1cm4gbV9tYXRyaXgg
PT0gbS0+bV9tYXRyaXg7Ci0gICAgfQorICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29s
IGFwcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYp
IGNvbnN0CisgICAgdmlydHVhbCBib29sIGFwcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICB0
cmFuc2Zvcm0ubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgobV9tYXRyaXgpKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zv
cm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91Ymxl
IHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkg
b3ZlcnJpZGU7CiAgICAgCiAgICAgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdCkKICAgICB7CkBAIC02OSw2ICs2MywxNiBAQCBwcml2YXRl
OgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbWF0cml4OwogfTsKIAorVFJBTlNGT1JNT1BF
UkFUSU9OX1RZUEVfQ0FTVFMoTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24sIHR5cGUoKSA9PSBU
cmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRCk7CisKK2lubGluZSBib29sIE1hdHJpeDNEVHJh
bnNmb3JtT3BlcmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykg
Y29uc3QKK3sKKyAgICBpZiAoIWlzU2FtZVR5cGUobykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBjb25zdCBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbiYgbSA9IHRvTWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24obyk7CisgICAgcmV0dXJuIG1fbWF0cml4ID09IG0ubV9tYXRyaXg7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIE1hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNw
cAppbmRleCBhMzY1OGE5MWRhZmVhNDE5YWMwNTI4NGQwMTU5MTkyMjJhYjI4YjQzLi4yNzNhZTNj
MGIzNjUyZTJiNjAyYWRmMmE2NWY1ODJiNmM5YTBjNWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9N
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCkBAIC0zNiw4ICszNiw4IEBAIFBhc3NSZWZQdHI8
VHJhbnNmb3JtT3BlcmF0aW9uPiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0
IFRyYW5zZm9ybU9wCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbVQ7CiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdG9UKG1fYSwgbV9iLCBtX2MsIG1fZCwgbV9lLCBtX2YpOwogICAgIGlm
IChmcm9tKSB7Ci0gICAgICAgIGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogbSA9IHN0
YXRpY19jYXN0PGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOwotICAgICAg
ICBmcm9tVC5zZXRNYXRyaXgobS0+bV9hLCBtLT5tX2IsIG0tPm1fYywgbS0+bV9kLCBtLT5tX2Us
IG0tPm1fZik7CisgICAgICAgIGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiYgbSA9IHRv
TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKCpmcm9tKTsKKyAgICAgICAgZnJvbVQuc2V0TWF0cml4
KG0ubV9hLCBtLm1fYiwgbS5tX2MsIG0ubV9kLCBtLm1fZSwgbS5tX2YpOwogICAgIH0KICAgICAK
ICAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uLmgKaW5kZXggNzZjNWRmZmNkNGRhMWRjNTRmYTA3MGFjODBlMDNhNzQ5N2I4NmVh
NS4uZGY5ZGYyMjE3NzlkODBjZTI4ODQ2MTQ2OGU0MTJhNjc0M2UwZjllOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0zMCw3ICszMCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uIDogcHVi
bGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CitjbGFzcyBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24g
ZmluYWwgOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgYSwgZG91
YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQogICAgIHsKQEAg
LTQ1LDI4ICs0NSwyMSBAQCBwdWJsaWM6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
KCkgY29uc3QgeyByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgobV9hLCBtX2IsIG1fYywgbV9k
LCBtX2UsIG1fZik7IH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fYSA9PSAxICYmIG1fYiA9PSAwICYmIG1fYyA9PSAwICYmIG1fZCA9
PSAxICYmIG1fZSA9PSAwICYmIG1fZiA9PSAwOyB9CisgICAgdmlydHVhbCBib29sIGlzSWRlbnRp
dHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2EgPT0gMSAmJiBtX2IgPT0gMCAmJiBtX2Mg
PT0gMCAmJiBtX2QgPT0gMSAmJiBtX2UgPT0gMCAmJiBtX2YgPT0gMDsgfQogCi0gICAgdmlydHVh
bCBPcGVyYXRpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBNQVRSSVg7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IHsg
cmV0dXJuIG8udHlwZSgpID09IE1BVFJJWDsgfQorICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSB0
eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTUFUUklYOyB9CisgICAgdmlydHVhbCBib29s
IGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBvLnR5cGUoKSA9PSBNQVRSSVg7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
ICghaXNTYW1lVHlwZShvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBj
b25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIG0gPSBzdGF0aWNfY2FzdDxjb25zdCBNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24qPigmbyk7Ci0gICAgICAgIHJldHVybiBtX2EgPT0gbS0+bV9h
ICYmIG1fYiA9PSBtLT5tX2IgJiYgbV9jID09IG0tPm1fYyAmJiBtX2QgPT0gbS0+bV9kICYmIG1f
ZSA9PSBtLT5tX2UgJiYgbV9mID09IG0tPm1fZjsKLSAgICB9CisgICAgdmlydHVhbCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgYXBwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29u
c3QgRmxvYXRTaXplJikgY29uc3QKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJikgY29uc3Qgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChtX2EsIG1fYiwgbV9jLCBt
X2QsIG1fZSwgbV9mKTsKICAgICAgICAgdHJhbnNmb3JtLm11bHRpcGx5KG1hdHJpeCk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNm
b3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJs
ZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2Up
IG92ZXJyaWRlOwogICAgIAogICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgYSwg
ZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQogICAgICAg
ICA6IG1fYShhKQpAQCAtOTYsNiArODksMTYgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV9mOwog
fTsKIAorVFJBTlNGT1JNT1BFUkFUSU9OX1RZUEVfQ0FTVFMoTWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uLCB0eXBlKCkgPT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVgpOworCitpbmxpbmUgYm9v
bCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uJiBvKSBjb25zdAoreworICAgIGlmICghaXNTYW1lVHlwZShvKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiYgbSA9IHRvTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uKG8pOworICAgIHJldHVybiBtX2EgPT0gbS5tX2EgJiYgbV9i
ID09IG0ubV9iICYmIG1fYyA9PSBtLm1fYyAmJiBtX2QgPT0gbS5tX2QgJiYgbV9lID09IG0ubV9l
ICYmIG1fZiA9PSBtLm1fZjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJz
cGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKaW5kZXggZjU4YWQ2NDJjMzAzMDQ3NzYxYWEz
MWIzYjhmOGEyOWUyM2MxMmYwMS4uNDliMjAyY2Q2Nzg1ODcxMWYwMzFhMzFiN2JlZWU4MmIwNThl
ZGUyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbi5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+
IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2YKICAgICAg
ICAgcmV0dXJuIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKGNs
YW1wVG9Qb3NpdGl2ZUludGVnZXIocCksIEZpeGVkKSk7CiAgICAgfQogICAgIAotICAgIGNvbnN0
IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBzdGF0aWNfY2FzdDxjb25z
dCBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOworICAgIGNvbnN0IFBlcnNw
ZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSB0b1BlcnNwZWN0aXZlVHJhbnNmb3Jt
T3BlcmF0aW9uKGZyb20pOwogICAgIExlbmd0aCBmcm9tUCA9IGZyb21PcCA/IGZyb21PcC0+bV9w
IDogTGVuZ3RoKG1fcC50eXBlKCkpOwogICAgIExlbmd0aCB0b1AgPSBtX3A7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUGVyc3BlY3Rp
dmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaAppbmRleCAwODU2YmVj
Yzg0NzU1NDdmZjQ4NjgwMzA5ZGZkNGZjNmQ0YmM4YjYyLi5hZjVjODk1MzYzOGE1OTc3N2M1Y2Y2
NWI5MjAxYjY4MmE1YjA2OTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgVHJhbnNm
b3JtT3BlcmF0aW9uIHsKK2NsYXNzIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uIGZpbmFs
IDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShjb25zdCBMZW5ndGgm
IHApCiAgICAgewpAQCAtNDIsMjUgKzQyLDE5IEBAIHB1YmxpYzoKICAgICBMZW5ndGggcGVyc3Bl
Y3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3A7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgdmlydHVh
bCBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiAhZmxvYXRWYWx1ZUZvckxlbmd0aCht
X3AsIDEpOyB9Ci0gICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBQRVJTUEVDVElWRTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gby50eXBlKCkgPT0gUEVSU1BFQ1RJVkU7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
ICFmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fcCwgMSk7IH0KKyAgICB2aXJ0dWFsIE9wZXJhdGlvblR5
cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBFUlNQRUNUSVZFOyB9CisgICAgdmly
dHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBvLnR5cGUoKSA9PSBQRVJTUEVDVElWRTsgfQogCi0gICAgdmlydHVh
bCBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdAotICAg
IHsKLSAgICAgICAgaWYgKCFpc1NhbWVUeXBlKG8pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBjb25zdCBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiogcCA9IHN0YXRp
Y19jYXN0PGNvbnN0IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8pOwotICAgICAg
ICByZXR1cm4gbV9wID09IHAtPm1fcDsKLSAgICB9CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9y
PT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgYXBwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxv
YXRTaXplJikgY29uc3QKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJikgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAg
ICAgICAgIHRyYW5zZm9ybS5hcHBseVBlcnNwZWN0aXZlKGZsb2F0VmFsdWVGb3JMZW5ndGgobV9w
LCAxKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24q
IGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50
aXR5ID0gZmFsc2UpIG92ZXJyaWRlOwogCiAgICAgUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b24oY29uc3QgTGVuZ3RoJiBwKQogICAgICAgICA6IG1fcChwKQpAQCAtNzEsNiArNjUsMTYgQEAg
cHJpdmF0ZToKICAgICBMZW5ndGggbV9wOwogfTsKIAorVFJBTlNGT1JNT1BFUkFUSU9OX1RZUEVf
Q0FTVFMoUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24sIHR5cGUoKSA9PSBUcmFuc2Zvcm1P
cGVyYXRpb246OlBFUlNQRUNUSVZFKTsKKworaW5saW5lIGJvb2wgUGVyc3BlY3RpdmVUcmFuc2Zv
cm1PcGVyYXRpb246Om9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25z
dAoreworICAgIGlmICghaXNTYW1lVHlwZShvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNvbnN0IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uJiBwID0gdG9QZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbihvKTsKKyAgICByZXR1cm4gbV9wID09IHAubV9wOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKaW5k
ZXggMzJiNGM2ZTFjNzZkZGY0ZDczMGJiMDA0MjViZjg1YzhhM2MwOTkwNS4uNzZmMzNhMDQ1MjNk
YTRmNjQ5YjQ0NGZjMWIxYzg4ODIyZTdlOTBkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcApAQCAtMzYsNyArMzYsNyBAQCBQYXNzUmVmUHRyPFRyYW5z
Zm9ybU9wZXJhdGlvbj4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFu
c2Zvcm1PcAogICAgIGlmIChibGVuZFRvSWRlbnRpdHkpCiAgICAgICAgIHJldHVybiBSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtX3gsIG1feSwgbV96LCBtX2FuZ2xlIC0gbV9hbmds
ZSAqIHByb2dyZXNzLCBtX3R5cGUpOwogICAgIAotICAgIGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uKj4oZnJvbSk7CisgICAgY29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3Ag
PSB0b1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihmcm9tKTsKICAgICAKICAgICAvLyBPcHRpbWl6
ZSBmb3Igc2luZ2xlIGF4aXMgcm90YXRpb24KICAgICBpZiAoIWZyb21PcCB8fCAoZnJvbU9wLT5t
X3ggPT0gMCAmJiBmcm9tT3AtPm1feSA9PSAwICYmIGZyb21PcC0+bV96ID09IDEpIHx8IApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggZjQ3YTUxZTE3MGVi
MWJjZTlhNTZmMGQ2ZDkyMTM4YmU5MzJiOWZhZS4uM2I3YTljMWJjNGUzZWI0YTJiN2M2MzQ3NDJj
YTc1NTNiODgyYzVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oCkBAIC0yOSw3ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CitjbGFz
cyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24gZmluYWwgOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0
aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb24+IGNyZWF0ZShkb3VibGUgYW5nbGUsIE9wZXJhdGlvblR5cGUgdHlwZSkKICAgICB7CkBA
IC00NywyNiArNDcsMjAgQEAgcHVibGljOgogICAgIGRvdWJsZSBhbmdsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5nbGU7IH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fYW5nbGUgPT0gMDsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50
aXR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9hbmdsZSA9PSAwOyB9CiAKLSAgICB2aXJ0
dWFsIE9wZXJhdGlvblR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3Qg
eyByZXR1cm4gby50eXBlKCkgPT0gbV90eXBlOyB9CisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBl
IHR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3R5cGU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNTYW1lVHlwZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG8udHlwZSgpID09IG1fdHlwZTsgfQogCi0gICAgdmlydHVhbCBib29sIG9wZXJh
dG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKCFpc1NhbWVUeXBlKG8pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBj
b25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHIgPSBzdGF0aWNfY2FzdDxjb25zdCBSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb24qPigmbyk7Ci0gICAgICAgIHJldHVybiBtX3ggPT0gci0+bV94
ICYmIG1feSA9PSByLT5tX3kgJiYgbV96ID09IHItPm1feiAmJiBtX2FuZ2xlID09IHItPm1fYW5n
bGU7Ci0gICAgfQorICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIGFwcGx5KFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYgLypib3JkZXJCb3hT
aXplKi8pIGNvbnN0CisgICAgdmlydHVhbCBib29sIGFwcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYgLypib3JkZXJCb3hTaXplKi8pIGNvbnN0IG92
ZXJyaWRlCiAgICAgewogICAgICAgICB0cmFuc2Zvcm0ucm90YXRlM2QobV94LCBtX3ksIG1feiwg
bV9hbmdsZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lk
ZW50aXR5ID0gZmFsc2UpIG92ZXJyaWRlOwogCiAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSBhbmdsZSwgT3BlcmF0aW9uVHlw
ZSB0eXBlKQogICAgICAgICA6IG1feCh4KQpAQCAtNzUsNyArNjksNyBAQCBwcml2YXRlOgogICAg
ICAgICAsIG1fYW5nbGUoYW5nbGUpCiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgewotICAg
ICAgICBBU1NFUlQodHlwZSA9PSBST1RBVEVfWCB8fCB0eXBlID09IFJPVEFURV9ZIHx8IHR5cGUg
PT0gUk9UQVRFX1ogfHwgdHlwZSA9PSBST1RBVEVfM0QpOworICAgICAgICBBU1NFUlQoaXNSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKCkpOwogICAgIH0KIAogICAgIGRvdWJsZSBtX3g7CkBA
IC04NSw2ICs3OSwxNiBAQCBwcml2YXRlOgogICAgIE9wZXJhdGlvblR5cGUgbV90eXBlOwogfTsK
IAorVFJBTlNGT1JNT1BFUkFUSU9OX1RZUEVfQ0FTVFMoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
LCBpc1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvblR5cGUoKSk7CisKK2lubGluZSBib29sIFJvdGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24m
IG8pIGNvbnN0Cit7CisgICAgaWYgKCFpc1NhbWVUeXBlKG8pKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgY29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uJiByID0gdG9Sb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb24obyk7CisgICAgcmV0dXJuIG1feCA9PSByLm1feCAmJiBtX3kgPT0gci5t
X3kgJiYgbV96ID09IHIubV96ICYmIG1fYW5nbGUgPT0gci5tX2FuZ2xlOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb25faApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9T
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAppbmRleCBlODgwNmYy
MDMwOGY3ZjM4MDdkZTI3MWE0NzQ4OWI5MzE4YTE0ZTY3Li4yYmJmZjM1ODMwYjMwYjc2OTk0Mzlk
MmM5Y2IyYjIzZTc1YjdkOWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcApAQCAtMzYsNyArMzYsNyBAQCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlv
bj4gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpibGVu
ZChtX3ksIDEuMCwgcHJvZ3Jlc3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX3osIDEuMCwgcHJvZ3Jlc3MpLCBtX3R5cGUp
OwogICAgIAotICAgIGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBzdGF0
aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOworICAgIGNvbnN0
IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSB0b1NjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uKGZyb20pOwogICAgIGRvdWJsZSBmcm9tWCA9IGZyb21PcCA/IGZyb21PcC0+bV94IDogMS4w
OwogICAgIGRvdWJsZSBmcm9tWSA9IGZyb21PcCA/IGZyb21PcC0+bV95IDogMS4wOwogICAgIGRv
dWJsZSBmcm9tWiA9IGZyb21PcCA/IGZyb21PcC0+bV96IDogMS4wOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9T
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oCmluZGV4IDYyYmViMjNjZTA2MGM4OTk3NjQyNDk1YzE1
MTBlNTIzMTdhMzBmYzYuLmM5NDY2MDU2N2RiYWUzMTYyNTc3YWQ4OGY1ZGMxM2ExZGUwNDU1MmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgKQEAgLTI5LDcgKzI5
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24geworY2xhc3MgU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24gZmluYWwgOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGRvdWJs
ZSBzeCwgZG91YmxlIHN5LCBPcGVyYXRpb25UeXBlIHR5cGUpCiAgICAgewpAQCAtNDYsMjYgKzQ2
LDIwIEBAIHB1YmxpYzoKICAgICBkb3VibGUgeigpIGNvbnN0IHsgcmV0dXJuIG1fejsgfQogCiBw
cml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbV94
ID09IDEgJiYgIG1feSA9PSAxICYmICBtX3ogPT0gMTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0lk
ZW50aXR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV94ID09IDEgJiYgIG1feSA9PSAxICYm
ICBtX3ogPT0gMTsgfQogCi0gICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIG8udHlwZSgpID09IG1fdHlwZTsgfQor
ICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV90eXBlOyB9CisgICAgdmlydHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uJiBvKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBvLnR5cGUoKSA9PSBtX3R5cGU7IH0K
IAotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYg
bykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgY29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHMg
PSBzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKLSAgICAg
ICAgcmV0dXJuIG1feCA9PSBzLT5tX3ggJiYgbV95ID09IHMtPm1feSAmJiBtX3ogPT0gcy0+bV96
OwotICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24mKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFNpemUmKSBjb25zdAorICAgIHZp
cnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBG
bG9hdFNpemUmKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgdHJhbnNmb3JtLnNjYWxl
M2QobV94LCBtX3ksIG1feik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkg
PSBmYWxzZSk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxl
bmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wg
YmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpIG92ZXJyaWRlOwogCiAgICAgU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24oZG91YmxlIHN4LCBkb3VibGUgc3ksIGRvdWJsZSBzeiwgT3BlcmF0aW9uVHlwZSB0
eXBlKQogICAgICAgICA6IG1feChzeCkKQEAgLTczLDcgKzY3LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgLCBtX3ooc3opCiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgewotICAgICAgICBBU1NF
UlQodHlwZSA9PSBTQ0FMRV9YIHx8IHR5cGUgPT0gU0NBTEVfWSB8fCB0eXBlID09IFNDQUxFX1og
fHwgdHlwZSA9PSBTQ0FMRSB8fCB0eXBlID09IFNDQUxFXzNEKTsKKyAgICAgICAgQVNTRVJUKGlz
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKCkpOwogICAgIH0KICAgICAgICAgCiAgICAgZG91
YmxlIG1feDsKQEAgLTgyLDYgKzc2LDE2IEBAIHByaXZhdGU6CiAgICAgT3BlcmF0aW9uVHlwZSBt
X3R5cGU7CiB9OwogCitUUkFOU0ZPUk1PUEVSQVRJT05fVFlQRV9DQVNUUyhTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbiwgaXNTY2FsZVRyYW5zZm9ybU9wZXJhdGlvblR5cGUoKSk7CisKK2lubGluZSBi
b29sIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiYgbykgY29uc3QKK3sKKyAgICBpZiAoIWlzU2FtZVR5cGUobykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiYgcyA9IHRvU2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb24obyk7CisgICAgcmV0dXJuIG1feCA9PSBzLm1feCAmJiBtX3kg
PT0gcy5tX3kgJiYgbV96ID09IHMubV96OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAppbmRleCBkOTJkODk1Y2ViNjg3NjBmZmY3NDBjMTc0NmI2
ZGMzNTQyZjJhN2YyLi5iMzU1OTExNzQ2NDczZjMwZjYxYjdkMTMyYmQ3MjNlMGUxMWIzNWMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Nr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAKQEAgLTM0LDcgKzM0
LDcgQEAgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IFNrZXdUcmFuc2Zvcm1PcGVyYXRp
b246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXIKICAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQog
ICAgICAgICByZXR1cm4gU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJs
ZW5kKG1fYW5nbGVYLCAwLjAsIHByb2dyZXNzKSwgV2ViQ29yZTo6YmxlbmQobV9hbmdsZVksIDAu
MCwgcHJvZ3Jlc3MpLCBtX3R5cGUpOwogICAgIAotICAgIGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24q
Pihmcm9tKTsKKyAgICBjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSB0b1Nr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24oZnJvbSk7CiAgICAgZG91YmxlIGZyb21BbmdsZVggPSBmcm9t
T3AgPyBmcm9tT3AtPm1fYW5nbGVYIDogMDsKICAgICBkb3VibGUgZnJvbUFuZ2xlWSA9IGZyb21P
cCA/IGZyb21PcC0+bV9hbmdsZVkgOiAwOwogICAgIHJldHVybiBTa2V3VHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFuZ2xlWCwgbV9hbmdsZVgsIHByb2dyZXNz
KSwgV2ViQ29yZTo6YmxlbmQoZnJvbUFuZ2xlWSwgbV9hbmdsZVksIHByb2dyZXNzKSwgbV90eXBl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgKaW5kZXggZTlmMGM4MTli
MDYwNWQ1ZDQ4Y2Q0ZjUxZmFjMzY3N2JjNzliMGEyNi4uMmI5MjliYTBmMWQ3ZjE3NTAzMTViMzMy
NjE1M2YzZGFkMDI4M2YzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9u
LmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTa2V3
VHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CitjbGFzcyBT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uIGZpbmFsIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4g
Y3JlYXRlKGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVksIE9wZXJhdGlvblR5cGUgdHlwZSkK
ICAgICB7CkBAIC00MCwzMSArNDAsMjYgQEAgcHVibGljOgogICAgIGRvdWJsZSBhbmdsZVkoKSBj
b25zdCB7IHJldHVybiBtX2FuZ2xlWTsgfQogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBp
c0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZVggPT0gMCAmJiBtX2FuZ2xlWSA9PSAw
OyB9Ci0gICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b24mIG8pIGNvbnN0IHsgcmV0dXJuIG8udHlwZSgpID09IG1fdHlwZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc0lkZW50aXR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9hbmdsZVggPT0gMCAm
JiBtX2FuZ2xlWSA9PSAwOyB9CisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIHR5cGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3R5cGU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlw
ZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG8u
dHlwZSgpID09IG1fdHlwZTsgfQogCi0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFpc1NhbWVU
eXBlKG8pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb25zdCBTa2V3VHJh
bnNmb3JtT3BlcmF0aW9uKiBzID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2tld1RyYW5zZm9ybU9wZXJh
dGlvbio+KCZvKTsKLSAgICAgICAgcmV0dXJuIG1fYW5nbGVYID09IHMtPm1fYW5nbGVYICYmIG1f
YW5nbGVZID09IHMtPm1fYW5nbGVZOwotICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1
YWwgYm9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9h
dFNpemUmKSBjb25zdAorICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFNpemUmKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAg
ICAgICAgdHJhbnNmb3JtLnNrZXcobV9hbmdsZVgsIG1fYW5nbGVZKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRp
b24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNz
LCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20s
IGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgb3ZlcnJpZGU7
CiAgICAgCiAgICAgU2tld1RyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgYW5nbGVYLCBkb3VibGUg
YW5nbGVZLCBPcGVyYXRpb25UeXBlIHR5cGUpCiAgICAgICAgIDogbV9hbmdsZVgoYW5nbGVYKQog
ICAgICAgICAsIG1fYW5nbGVZKGFuZ2xlWSkKICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICB7
CisgICAgICAgIEFTU0VSVChpc1NrZXdUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKCkpOwogICAgIH0K
ICAgICAKICAgICBkb3VibGUgbV9hbmdsZVg7CkBAIC03Miw2ICs2NywxNiBAQCBwcml2YXRlOgog
ICAgIE9wZXJhdGlvblR5cGUgbV90eXBlOwogfTsKIAorVFJBTlNGT1JNT1BFUkFUSU9OX1RZUEVf
Q0FTVFMoU2tld1RyYW5zZm9ybU9wZXJhdGlvbiwgaXNTa2V3VHJhbnNmb3JtT3BlcmF0aW9uVHlw
ZSgpKTsKKworaW5saW5lIGJvb2wgU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6b3BlcmF0b3I9PShj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0Cit7CisgICAgaWYgKCFpc1NhbWVUeXBl
KG8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgU2tld1RyYW5zZm9ybU9wZXJh
dGlvbiYgcyA9IHRvU2tld1RyYW5zZm9ybU9wZXJhdGlvbihvKTsKKyAgICByZXR1cm4gbV9hbmds
ZVggPT0gcy5tX2FuZ2xlWCAmJiBtX2FuZ2xlWSA9PSBzLm1fYW5nbGVZOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJh
bnNmb3JtT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5oCmluZGV4IGY5Zjk3NWZhNGFkN2Y3ODA4MzYwYTE2
ZTU3MDE2ZjBiMDY5MGExODQuLjY4Nzk5OWQ0MTkxOTFlMzMwMGQ4ZDMyMDQwMDIwMzQ5N2I1NzRm
ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvVHJhbnNmb3JtT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaApAQCAtNzksOCArNzksMzEgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgb3BUeXBlID09IE1BVFJJWF8zRCB8fAogICAgICAgICAg
ICAgICAgb3BUeXBlID09IFBFUlNQRUNUSVZFOwogICAgIH0KKworICAgIGJvb2wgaXNSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb25UeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBl
KCkgPT0gUk9UQVRFX1ggfHwgdHlwZSgpID09IFJPVEFURV9ZIHx8IHR5cGUoKSA9PSBST1RBVEVf
WiB8fCB0eXBlKCkgPT0gUk9UQVRFIHx8IHR5cGUoKSA9PSBST1RBVEVfM0Q7CisgICAgfQorCisg
ICAgYm9vbCBpc1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdHlwZSgpID09IFNDQUxFX1ggfHwgdHlwZSgpID09IFNDQUxFX1kgfHwgdHlw
ZSgpID09IFNDQUxFX1ogfHwgdHlwZSgpID09IFNDQUxFIHx8IHR5cGUoKSA9PSBTQ0FMRV8zRDsK
KyAgICB9CisKKyAgICBib29sIGlzU2tld1RyYW5zZm9ybU9wZXJhdGlvblR5cGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBTS0VXX1ggfHwgdHlwZSgpID09IFNLRVdf
WSB8fCB0eXBlKCkgPT0gU0tFVzsKKyAgICB9CisKKyAgICBib29sIGlzVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdHlwZSgpID09
IFRSQU5TTEFURV9YIHx8IHR5cGUoKSA9PSBUUkFOU0xBVEVfWSB8fCB0eXBlKCkgPT0gVFJBTlNM
QVRFX1ogfHwgdHlwZSgpID09IFRSQU5TTEFURSB8fCB0eXBlKCkgPT0gVFJBTlNMQVRFXzNEOwor
ICAgIH0KIH07CiAKKyNkZWZpbmUgVFJBTlNGT1JNT1BFUkFUSU9OX1RZUEVfQ0FTVFMoVG9WYWx1
ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKKyAgICBUWVBFX0NBU1RTX0JBU0UoVG9WYWx1ZVR5cGVO
YW1lLCBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb24sIHZhbHVlLCB2YWx1ZS0+cHJlZGljYXRl
LCB2YWx1ZS5wcmVkaWNhdGUpCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IFRyYW5zZm9ybU9wZXJhdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5jcHAKaW5kZXggZjE0MGM1MDgxYjlhMWU3NzM4OTVlNjM1MDNkODJmMjRm
MDQ4NDE2YS4uNzkxNDAwN2I0YWMzZGZiOTRmYWRjYjcyMmU0YTgxNmRlZmZmZTI3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcApAQCAtMzQs
NyArMzQsNyBAQCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2ZvcgogICAgIGlmIChibGVuZFRvSWRlbnRp
dHkpCiAgICAgICAgIHJldHVybiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh6
ZXJvTGVuZ3RoLmJsZW5kKG1feCwgcHJvZ3Jlc3MpLCB6ZXJvTGVuZ3RoLmJsZW5kKG1feSwgcHJv
Z3Jlc3MpLCB6ZXJvTGVuZ3RoLmJsZW5kKG1feiwgcHJvZ3Jlc3MpLCBtX3R5cGUpOwogCi0gICAg
Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBzdGF0aWNfY2FzdDxj
b25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihmcm9tKTsKKyAgICBjb25zdCBUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9IHRvVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uKGZyb20pOwogICAgIExlbmd0aCBmcm9tWCA9IGZyb21PcCA/IGZyb21PcC0+bV94IDog
emVyb0xlbmd0aDsKICAgICBMZW5ndGggZnJvbVkgPSBmcm9tT3AgPyBmcm9tT3AtPm1feSA6IHpl
cm9MZW5ndGg7CiAgICAgTGVuZ3RoIGZyb21aID0gZnJvbU9wID8gZnJvbU9wLT5tX3ogOiB6ZXJv
TGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgK
aW5kZXggNjllNWQ4NTI1YTExNjQwNDExYWNlMWI0YjZjNmUzZjg3YjdhYWE0Yy4uNjFkMDJiMzIw
ZWQ1NGQ5ODViM2JiNjMyOTMzYzg3ZWRlMDA0ZTZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Ry
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGlj
IFRyYW5zZm9ybU9wZXJhdGlvbiB7CitjbGFzcyBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24g
ZmluYWwgOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShjb25zdCBMZW5n
dGgmIHR4LCBjb25zdCBMZW5ndGgmIHR5LCBPcGVyYXRpb25UeXBlIHR5cGUpCiAgICAgewpAQCAt
NTIsMjYgKzUyLDIwIEBAIHB1YmxpYzoKICAgICBMZW5ndGggeigpIGNvbnN0IHsgcmV0dXJuIG1f
ejsgfQogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgeyBy
ZXR1cm4gIWZsb2F0VmFsdWVGb3JMZW5ndGgobV94LCAxKSAmJiAhZmxvYXRWYWx1ZUZvckxlbmd0
aChtX3ksIDEpICYmICFmbG9hdFZhbHVlRm9yTGVuZ3RoKG1feiwgMSk7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFmbG9hdFZhbHVlRm9y
TGVuZ3RoKG1feCwgMSkgJiYgIWZsb2F0VmFsdWVGb3JMZW5ndGgobV95LCAxKSAmJiAhZmxvYXRW
YWx1ZUZvckxlbmd0aChtX3osIDEpOyB9CiAKLSAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBl
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gby50eXBlKCkgPT0g
bV90eXBlOyB9CisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIHR5cGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3R5cGU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG8udHlwZSgpID09
IG1fdHlwZTsgfQogCi0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9uJiBvKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFpc1NhbWVUeXBlKG8pKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb25zdCBUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24qIHQgPSBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24qPigmbyk7Ci0gICAgICAgIHJldHVybiBtX3ggPT0gdC0+bV94ICYmIG1feSA9PSB0LT5t
X3kgJiYgbV96ID09IHQtPm1fejsKLSAgICB9CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgYXBwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRT
aXplJiBib3JkZXJCb3hTaXplKSBjb25zdAorICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFNpemUmIGJvcmRlckJveFNpemUp
IGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlM2QoeChi
b3JkZXJCb3hTaXplKSwgeShib3JkZXJCb3hTaXplKSwgeihib3JkZXJCb3hTaXplKSk7CiAgICAg
ICAgIHJldHVybiBtX3guaXNQZXJjZW50Tm90Q2FsY3VsYXRlZCgpIHx8IG1feS5pc1BlcmNlbnRO
b3RDYWxjdWxhdGVkKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9y
bU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUg
cHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
biogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKSBv
dmVycmlkZTsKIAogICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihjb25zdCBMZW5ndGgm
IHR4LCBjb25zdCBMZW5ndGgmIHR5LCBjb25zdCBMZW5ndGgmIHR6LCBPcGVyYXRpb25UeXBlIHR5
cGUpCiAgICAgICAgIDogbV94KHR4KQpAQCAtNzksNyArNzMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAsIG1feih0eikKICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICB7Ci0gICAgICAgIEFTU0VS
VCh0eXBlID09IFRSQU5TTEFURV9YIHx8IHR5cGUgPT0gVFJBTlNMQVRFX1kgfHwgdHlwZSA9PSBU
UkFOU0xBVEVfWiB8fCB0eXBlID09IFRSQU5TTEFURSB8fCB0eXBlID09IFRSQU5TTEFURV8zRCk7
CisgICAgICAgIEFTU0VSVChpc1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvblR5cGUoKSk7CiAg
ICAgfQogCiAgICAgTGVuZ3RoIG1feDsKQEAgLTg4LDYgKzgyLDE2IEBAIHByaXZhdGU6CiAgICAg
T3BlcmF0aW9uVHlwZSBtX3R5cGU7CiB9OwogCitUUkFOU0ZPUk1PUEVSQVRJT05fVFlQRV9DQVNU
UyhUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24sIGlzVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uVHlwZSgpKTsKKworaW5saW5lIGJvb2wgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpv
cGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKK3sKKyAgICBpZiAo
IWlzU2FtZVR5cGUobykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb24mIHQgPSB0b1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihv
KTsKKyAgICByZXR1cm4gbV94ID09IHQubV94ICYmIG1feSA9PSB0Lm1feSAmJiBtX3ogPT0gdC5t
X3o7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0FyZ3VtZW50Q29kZXJzLmNwcAppbmRleCBjOWIyM2UwNTYwMjEwNmU2MGU3MWI2Mzk0MThm
MDExZWIzMDE1OTlmLi5mMTMyZmFhYmZjZGMxZmYyYzgwNjRkMTIzNTkxMWNlYmRkODExMzI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVy
cy5jcHAKQEAgLTE4Niw0MiArMTg2LDQzIEBAIHZvaWQgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1P
cGVyYXRpb25zPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QKICAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOgogICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6U0NBTEVfWjoKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlND
QUxFXzNEOgotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRy
YW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPngoKTsKLSAgICAgICAgICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24p
LT55KCk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eigpOworICAgICAgICAgICAgZW5jb2RlciA8
PCB0b1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKG9wZXJhdGlvbiktPngoKTsKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgdG9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihvcGVyYXRpb24pLT55KCk7Cisg
ICAgICAgICAgICBlbmNvZGVyIDw8IHRvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24ob3BlcmF0aW9u
KS0+eigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWDoKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5T
TEFURV9ZOgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOgogICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1o6CiAgICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q6Ci0gICAgICAgICAgICBBcmd1bWVudENv
ZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT54KCkpOwotICAgICAgICAgICAgQXJndW1l
bnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eSgpKTsKLSAgICAgICAgICAgIEFy
Z3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PGNvbnN0IFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnooKSk7CisgICAgICAgICAg
ICBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCB0b1RyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbihvcGVyYXRpb24pLT54KCkpOworICAgICAgICAgICAgQXJndW1lbnRDb2Rl
cjxMZW5ndGg+OjplbmNvZGUoZW5jb2RlciwgdG9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24o
b3BlcmF0aW9uKS0+eSgpKTsKKyAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5j
b2RlKGVuY29kZXIsIHRvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKG9wZXJhdGlvbiktPnoo
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlJPVEFURToKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgogICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6CisgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWjoKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlJPVEFURV8zRDoKLSAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eCgpOwotICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihv
cGVyYXRpb24pLT55KCk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0
IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnooKTsKLSAgICAgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4o
b3BlcmF0aW9uKS0+YW5nbGUoKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdG9Sb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb24ob3BlcmF0aW9uKS0+eCgpOworICAgICAgICAgICAgZW5jb2RlciA8PCB0
b1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihvcGVyYXRpb24pLT55KCk7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IHRvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKG9wZXJhdGlvbiktPnooKTsKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgdG9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24ob3BlcmF0aW9u
KS0+YW5nbGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6U0tFV19YOgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19Z
OgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzoKLSAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJh
dGlvbiktPmFuZ2xlWCgpOwotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25z
dCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+YW5nbGVZKCk7CisgICAgICAg
ICAgICBlbmNvZGVyIDw8IHRvU2tld1RyYW5zZm9ybU9wZXJhdGlvbihvcGVyYXRpb24pLT5hbmds
ZVgoKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdG9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uKG9w
ZXJhdGlvbiktPmFuZ2xlWSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6Ci0gICAgICAgICAgICBBcmd1bWVudENvZGVyPFRyYW5z
Zm9ybWF0aW9uTWF0cml4Pjo6ZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PGNvbnN0IE1hdHJp
eFRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1hdHJpeCgpKTsKKyAgICAgICAgICAg
IEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjplbmNvZGUoZW5jb2RlciwgdG9N
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24ob3BlcmF0aW9uKS0+bWF0cml4KCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVhfM0Q6Ci0g
ICAgICAgICAgICBBcmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZW5jb2RlKGVu
Y29kZXIsIHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3Bl
cmF0aW9uKS0+bWF0cml4KCkpOworICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1h
dGlvbk1hdHJpeD46OmVuY29kZShlbmNvZGVyLCB0b01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
KG9wZXJhdGlvbiktPm1hdHJpeCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6Ci0gICAgICAgICAgICBBcmd1bWVudENv
ZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxjb25zdCBQZXJzcGVjdGl2
ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnBlcnNwZWN0aXZlKCkpOworICAgICAg
ICAgICAgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2RlciwgdG9QZXJzcGVjdGl2
ZVRyYW5zZm9ybU9wZXJhdGlvbihvcGVyYXRpb24pLT5wZXJzcGVjdGl2ZSgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6SURFTlRJVFk6CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTI3Nyw2ICsyNzgsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8
VHJhbnNmb3JtT3BlcmF0aW9ucz46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFRy
YW5zZgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOgogICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6CiAgICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpST1RBVEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJP
VEFURV9aOgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOiB7CiAg
ICAgICAgICAgICBkb3VibGUgeCwgeSwgeiwgYW5nbGU7CiAgICAgICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHgpKQo=
</data>
<flag name="review"
          id="256438"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="256439"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>