<?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>49460</bug_id>
          
          <creation_ts>2010-11-12 11:16:16 -0800</creation_ts>
          <short_desc>Refactor GL backend flags</short_desc>
          <delta_ts>2010-11-16 11:31:07 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>49355</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>enne</cc>
    
    <cc>gman</cc>
    
    <cc>kbr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>308659</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-12 11:16:16 -0800</bug_when>
    <thetext>As suggested by gman@google.com, we should use extensions to set GL backend flags instead of virtual functions that go three layers deep.

Flags includes:

isGLES2NPOTStrict
isErrorGeneratedOnOutOfBoundsAccesses
isResourceSafe (newly added for texture/renderbuffer initialization)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308668</commentid>
    <comment_count>1</comment_count>
      <attachid>73765</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-12 11:30:49 -0800</bug_when>
    <thetext>Created attachment 73765
patch

Will remove chromium side flag query functions once this lands and webkit rolls over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308891</commentid>
    <comment_count>2</comment_count>
      <attachid>73765</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-12 18:13:07 -0800</bug_when>
    <thetext>Comment on attachment 73765
patch

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

r- because of the need for more documentation of the Chromium-specific extensions.

&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:166
&gt; +    m_isErrorGeneratedOnOutOfBoundsAccesses = m_context-&gt;getExtensions()-&gt;supports(&quot;GL_CHROMIUM_strict_attribs&quot;);
&gt; +    m_isResourceSafe = m_context-&gt;getExtensions()-&gt;supports(&quot;GL_CHROMIUM_resource_safe&quot;);

These extension names minimally need to be added to WebCore/platform/graphics/chromium/Extensions3DChromium.h, ideally with at least a little documentation of their semantics since they aren&apos;t standard, registered extensions.

&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:172
&gt; +        m_isGLES2NPOTStrict = !m_context-&gt;getExtensions()-&gt;supports(&quot;GL_ARB_texture_non_power_of_two&quot;);
&gt; +        m_isDepthStencilSupported = m_context-&gt;getExtensions()-&gt;supports(&quot;GL_EXT_packed_depth_stencil&quot;);

Are these checks sufficient? These extensions were folded into core OpenGL at some point. I&apos;m concerned that if the GraphicsContext3D implementation actually uses say OpenGL 4.0 that these extensions might not be advertised, so you should probably have a check of the GL version too. You could consider having the Extensions3D interface advertise extensions like GL_VERSION_2_1 if the OpenGL version is 2.1 or greater.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309805</commentid>
    <comment_count>3</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-16 10:33:33 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 73765 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73765&amp;action=review
&gt; 
&gt; r- because of the need for more documentation of the Chromium-specific extensions.
&gt; 
&gt; &gt; WebCore/html/canvas/WebGLRenderingContext.cpp:166
&gt; &gt; +    m_isErrorGeneratedOnOutOfBoundsAccesses = m_context-&gt;getExtensions()-&gt;supports(&quot;GL_CHROMIUM_strict_attribs&quot;);
&gt; &gt; +    m_isResourceSafe = m_context-&gt;getExtensions()-&gt;supports(&quot;GL_CHROMIUM_resource_safe&quot;);
&gt; 
&gt; These extension names minimally need to be added to WebCore/platform/graphics/chromium/Extensions3DChromium.h, ideally with at least a little documentation of their semantics since they aren&apos;t standard, registered extensions.

Will do.

&gt; 
&gt; &gt; WebCore/html/canvas/WebGLRenderingContext.cpp:172
&gt; &gt; +        m_isGLES2NPOTStrict = !m_context-&gt;getExtensions()-&gt;supports(&quot;GL_ARB_texture_non_power_of_two&quot;);
&gt; &gt; +        m_isDepthStencilSupported = m_context-&gt;getExtensions()-&gt;supports(&quot;GL_EXT_packed_depth_stencil&quot;);
&gt; 
&gt; Are these checks sufficient? These extensions were folded into core OpenGL at some point. I&apos;m concerned that if the GraphicsContext3D implementation actually uses say OpenGL 4.0 that these extensions might not be advertised, so you should probably have a check of the GL version too. You could consider having the Extensions3D interface advertise extensions like GL_VERSION_2_1 if the OpenGL version is 2.1 or greater.

According to the GL spec (up to 4.0),  it is required that an GL implementation to keep exporting extensions in EXTENSIONS even after they are folded into the core.  Also, the functions names with EXT or ARB should still be valid.  Therefore, relying on the extensions should be enough.  Also, our code also assumes the EXT/ARB function names and enum names.  If a future GL implementation starts to remove them, we need to do code refactoring for quite a few places, including this.

Please correct me if my reading/understanding of the spec is incorrect.  Otherwise I&apos;ll fix the first issue and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309809</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-16 10:38:10 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 73765 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73765&amp;action=review
&gt; &gt; 
&gt; &gt; r- because of the need for more documentation of the Chromium-specific extensions.
&gt; &gt; 
&gt; &gt; &gt; WebCore/html/canvas/WebGLRenderingContext.cpp:166
&gt; &gt; &gt; +    m_isErrorGeneratedOnOutOfBoundsAccesses = m_context-&gt;getExtensions()-&gt;supports(&quot;GL_CHROMIUM_strict_attribs&quot;);
&gt; &gt; &gt; +    m_isResourceSafe = m_context-&gt;getExtensions()-&gt;supports(&quot;GL_CHROMIUM_resource_safe&quot;);
&gt; &gt; 
&gt; &gt; These extension names minimally need to be added to WebCore/platform/graphics/chromium/Extensions3DChromium.h, ideally with at least a little documentation of their semantics since they aren&apos;t standard, registered extensions.
&gt; 
&gt; Will do.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; WebCore/html/canvas/WebGLRenderingContext.cpp:172
&gt; &gt; &gt; +        m_isGLES2NPOTStrict = !m_context-&gt;getExtensions()-&gt;supports(&quot;GL_ARB_texture_non_power_of_two&quot;);
&gt; &gt; &gt; +        m_isDepthStencilSupported = m_context-&gt;getExtensions()-&gt;supports(&quot;GL_EXT_packed_depth_stencil&quot;);
&gt; &gt; 
&gt; &gt; Are these checks sufficient? These extensions were folded into core OpenGL at some point. I&apos;m concerned that if the GraphicsContext3D implementation actually uses say OpenGL 4.0 that these extensions might not be advertised, so you should probably have a check of the GL version too. You could consider having the Extensions3D interface advertise extensions like GL_VERSION_2_1 if the OpenGL version is 2.1 or greater.
&gt; 
&gt; According to the GL spec (up to 4.0),  it is required that an GL implementation to keep exporting extensions in EXTENSIONS even after they are folded into the core.  Also, the functions names with EXT or ARB should still be valid.  Therefore, relying on the extensions should be enough.  Also, our code also assumes the EXT/ARB function names and enum names.  If a future GL implementation starts to remove them, we need to do code refactoring for quite a few places, including this.
&gt; 
&gt; Please correct me if my reading/understanding of the spec is incorrect.  Otherwise I&apos;ll fix the first issue and upload a new patch.

As long as you&apos;ve double-checked this in the spec it sounds fine. Please go ahead and upload a revised patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309829</commentid>
    <comment_count>5</comment_count>
      <attachid>74014</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-16 11:05:22 -0800</bug_when>
    <thetext>Created attachment 74014
revised patch

register extensions in Extensions3D.h and Extensions3DChromium.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309831</commentid>
    <comment_count>6</comment_count>
      <attachid>74015</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-16 11:08:24 -0800</bug_when>
    <thetext>Created attachment 74015
revised patch

Fix some comment issue and remove an extra empty line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309843</commentid>
    <comment_count>7</comment_count>
      <attachid>74015</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-16 11:24:33 -0800</bug_when>
    <thetext>Comment on attachment 74015
revised patch

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309849</commentid>
    <comment_count>8</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-16 11:31:07 -0800</bug_when>
    <thetext>Committed r72124: &lt;http://trac.webkit.org/changeset/72124&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73765</attachid>
            <date>2010-11-12 11:30:49 -0800</date>
            <delta_ts>2010-11-16 11:05:22 -0800</delta_ts>
            <desc>patch</desc>
            <filename>flags.patch</filename>
            <type>text/plain</type>
            <size>12787</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTkzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMTEtMTIgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3Rv
ciBHTCBiYWNrZW5kIGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00OTQ2MAorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0KTogQ2FsbCBzZXR1cEZsYWdzKCkuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250ZXh0KTogUmVtb3ZlIGZs
YWcgaW5pdGlhbGl6YXRpb24gdG8gc2V0dXBGbGFncygpLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzZXR1cEZsYWdzKTogSW5pdGlhbGl6ZSBHTCBmbGFncy4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyKTogVXNlIGFjY2Vzc29yIGZ1bmN0aW9uIGluc3RlYWQgb2YgbWVtYmVyLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKTog
RGl0dG8uCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6IFVz
ZSBmbGFncyBzZXQgaW4gc2V0dXBGbGFncyBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHVuZGVybHlpbmcg
R0wgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmlzR0xFUzJDb21wbGlhbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppc0dMRVMyTlBPVFN0cmljdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Jlc291cmNlU2FmZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
OiBSZW1vdmUgR0wgZmxhZyBxdWVyaWVzIGF0IHRoaXMgbGV2ZWwuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOiBEaXR0by4KKwogMjAxMC0x
MS0xMSAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA3MTg2OCkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDQgQEAKKwogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgpAQCAtMTA3LDYgKzEwOCw3IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
V2ViR0xSZW5kZXJpbmdDb24KICAgICAsIG1fY29udGV4dExvc3QoZmFsc2UpCiB7CiAgICAgQVNT
RVJUKG1fY29udGV4dCk7CisgICAgc2V0dXBGbGFncygpOwogICAgIGluaXRpYWxpemVOZXdDb250
ZXh0KCk7CiB9CiAKQEAgLTE1MSwxNSArMTUzLDI2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojppbml0aWFsaXplTmUKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAg
aW5pdFZlcnRleEF0dHJpYjAoKTsKIAotICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpCi0gICAg
ICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5zdXBwb3J0cygiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0KICAgICBtX2Nv
bnRleHQtPnJlc2hhcGUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CiAg
ICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCkt
PmhlaWdodCgpKTsKIH0KIAordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3Mo
KQoreworICAgIEFTU0VSVChtX2NvbnRleHQpOworCisgICAgbV9pc0dMRVMyQ29tcGxpYW50ID0g
bV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7CisgICAgbV9pc0Vycm9yR2VuZXJhdGVkT25P
dXRPZkJvdW5kc0FjY2Vzc2VzID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9DSFJPTUlVTV9zdHJpY3RfYXR0cmlicyIpOworICAgIG1faXNSZXNvdXJjZVNhZmUgPSBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX3Jlc291cmNl
X3NhZmUiKTsKKyAgICBpZiAobV9pc0dMRVMyQ29tcGxpYW50KSB7CisgICAgICAgIG1faXNHTEVT
Mk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9P
RVNfdGV4dHVyZV9ucG90Iik7CisgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhf
c3RlbmNpbCIpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAh
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfdGV4dHVyZV9ub25f
cG93ZXJfb2ZfdHdvIik7CisgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3Rl
bmNpbCIpOworICAgIH0KK30KKwogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+V2ViR0xSZW5kZXJp
bmdDb250ZXh0KCkKIHsKICAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CkBAIC0xNzE1
LDcgKzE3MjgsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSCiAK
ICAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCiAgICAgICAgICYmICFtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmctPmlzVmFsaWQoKSkgewotICAgICAgICBBU1NFUlQoIW1faXNEZXB0aFN0ZW5jaWxT
dXBwb3J0ZWQpOworICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpOwog
ICAgICAgICBsb25nIHZhbHVlID0gMDsKICAgICAgICAgc3dpdGNoIChwbmFtZSkgewogICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lEVEg6CkBAIC0yMzA0LDEy
ICsyMzE3LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXIKICAg
ICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAgICAgICAgaWYgKG1f
aXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpIHsKKyAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKCkpIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0
YXJnZXQsIEV4dGVuc2lvbnMzRDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7CiAg
ICAgICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKG1faXNEZXB0
aFN0ZW5jaWxTdXBwb3J0ZWQpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElz
VmFsaWQoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7CiAgICAgICAgIG1fcmVuZGVyYnVmZmVy
QmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgpAQCAtMzQwNiwyMSArMzQxOSw2IEBAIFdlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFcKICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEludDMyQXJy
YXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7CiB9CiAKLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojppc0dMRVMyQ29tcGxpYW50KCkKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc0dMRVMy
Q29tcGxpYW50KCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0dMRVMyTlBP
VFN0cmljdCgpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNHTEVTMk5QT1RTdHJpY3QoKTsK
LX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9m
Qm91bmRzQWNjZXNzZXMoKQotewotICAgIHJldHVybiBtX2NvbnRleHQtPmlzRXJyb3JHZW5lcmF0
ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKTsKLX0KLQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmhhbmRsZU5QT1RUZXh0dXJlcyhib29sIHByZXBhcmVUb0RyYXcpCiB7CiAgICAgYm9vbCBy
ZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gNzE4NjgpCisrKyBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsNiArMjk3
LDcgQEAgcHVibGljOgogCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVt
ZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOwogICAgIHZvaWQgaW5pdGlhbGl6
ZU5ld0NvbnRleHQoKTsKKyAgICB2b2lkIHNldHVwRmxhZ3MoKTsKIAogICAgIHZvaWQgYWRkT2Jq
ZWN0KFdlYkdMT2JqZWN0Kik7CiAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7
CkBAIC0zMTIsOSArMzEzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcmtDb250ZXh0Q2hh
bmdlZCgpOwogICAgIH0KIAotICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpOwotICAgIGJvb2wg
aXNHTEVTMk5QT1RTdHJpY3QoKTsKLSAgICBib29sIGlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91
bmRzQWNjZXNzZXMoKTsKKyAgICAvLyBRdWVyeSB3aGV0aGVyIGl0IGlzIGJ1aWx0IG9uIHRvcCBv
ZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50YXRpb24uCisgICAgYm9vbCBpc0dMRVMyQ29tcGxp
YW50KCkgeyByZXR1cm4gbV9pc0dMRVMyQ29tcGxpYW50OyB9CisgICAgLy8gUXVlcnkgaWYgdGhl
IEdMIGltcGxlbWVudGF0aW9uIGlzIE5QT1Qgc3RyaWN0LgorICAgIGJvb2wgaXNHTEVTMk5QT1RT
dHJpY3QoKSB7IHJldHVybiBtX2lzR0xFUzJOUE9UU3RyaWN0OyB9CisgICAgLy8gUXVlcnkgaWYg
dGhlIEdMIGltcGxlbWVudGF0aW9uIGdlbmVyYXRlcyBlcnJvcnMgb24gb3V0LW9mLWJvdW5kcyBi
dWZmZXIgYWNjZXNzZXMuCisgICAgYm9vbCBpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0Fj
Y2Vzc2VzKCkgeyByZXR1cm4gbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2Vz
OyB9CisgICAgLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGluaXRpYWxpemVzIHRl
eHR1cmVzL3JlbmRlcmJ1ZmZlcnMgdG8gMC4KKyAgICBib29sIGlzUmVzb3VyY2VTYWZlKCkgeyBy
ZXR1cm4gbV9pc1Jlc291cmNlU2FmZTsgfQorICAgIC8vIFF1ZXJ5IGlmIGRlcHRoX3N0ZW5jaWwg
YnVmZmVyIGlzIHN1cHBvcnRlZC4KKyAgICBib29sIGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkg
eyByZXR1cm4gbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsgfQogCiAgICAgLy8gSGVscGVyIHRv
IHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBPcGVuR0wgZGF0YSB0eXBlcwogICAgIC8vIGxp
a2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgpAQCAtNDMwLDYgKzQzOCwxMCBAQCBwdWJsaWM6CiAg
ICAgbG9uZyBtX3N0ZW5jaWxGdW5jUmVmOyAvLyBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgdXNlciBz
cGVjaWZpZWQgdmFsdWUsIG5vdCB0aGUgaW50ZXJuYWwgY2xhbXBlZCB2YWx1ZS4KICAgICB1bnNp
Z25lZCBsb25nIG1fc3RlbmNpbEZ1bmNNYXNrOwogCisgICAgYm9vbCBtX2lzR0xFUzJDb21wbGlh
bnQ7CisgICAgYm9vbCBtX2lzR0xFUzJOUE9UU3RyaWN0OworICAgIGJvb2wgbV9pc0Vycm9yR2Vu
ZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzOworICAgIGJvb2wgbV9pc1Jlc291cmNlU2FmZTsK
ICAgICBib29sIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7CiAKICAgICAvLyBIZWxwZXJzIGZv
ciBnZXRQYXJhbWV0ZXIgYW5kIG90aGVycwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNzE4NjgpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
Myw4ICs0NzMsNiBAQCBwdWJsaWM6CiAgICAgaW50IHNpemVJbkJ5dGVzKGludCB0eXBlKTsKIAog
ICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0OwotICAgIGJvb2wgaXNHTEVTMk5QT1RT
dHJpY3QoKSBjb25zdDsKLSAgICBib29sIGlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNj
ZXNzZXMoKSBjb25zdDsKIAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEhlbHBlcnMgZm9y
IHRleHR1cmUgdXBsb2FkaW5nIGFuZCBwaXhlbCByZWFkYmFjay4KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShy
ZXZpc2lvbiA3MTg2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsMTcgKzI1MSw2IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzRXJyb3JH
ZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSBjb25zdAotewotICAgIHJldHVybiBmYWxz
ZTsKLX0KLSAgICAKLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkocmV2aXNpb24gNzE5MzIpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTEtMTIgIFpoZW55YW8gTW8gIDx6
bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZWZhY3RvciBHTCBiYWNrZW5kIGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTQ2MAorCisgICAgICAgICogcHVibGljL1dlYkdy
YXBoaWNzQ29udGV4dDNELmg6IFJlbW92ZSBHTCBmbGFnIHF1ZXJpZXMgYXQgdGhpcyBsZXZlbC4K
KyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6IERpdHRvLgorICAg
ICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmg6IERpdHRvLgorICAgICAgICAq
IHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcDogRGl0dG8uCisgICAgICAg
ICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaDogRGl0dG8uCisKIDIwMTAt
MTEtMTIgIElseWEgU2hlcm1hbiAgPGlzaGVybWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
R3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkdyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDcxODY4KQorKysgV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUs
MTEgKzEwNSw2IEBAIHB1YmxpYzoKIAogICAgIC8vIFF1ZXJ5IHdoZXRoZXIgaXQgaXMgYnVpbHQg
b24gdG9wIG9mIGNvbXBsaWFudCBHTEVTMiBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIGJv
b2wgaXNHTEVTMkNvbXBsaWFudCgpID0gMDsKLSAgICAvLyBRdWVyeSB3aGV0aGVyIGl0IGlzIGJ1
aWx0IG9uIHRvcCBvZiBHTEVTMiBOUE9UIHN0cmljdCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0
dWFsIGJvb2wgaXNHTEVTMk5QT1RTdHJpY3QoKSA9IDA7Ci0gICAgLy8gUXVlcnkgd2hldGhlciBp
dCBpcyBidWlsdCBvbiB0b3Agb2YgaW1wbGVtZW50YXRpb24gdGhhdCBnZW5lcmF0ZXMgZXJyb3Jz
Ci0gICAgLy8gb24gb3V0LW9mLWJvdW5kcyBidWZmZXIgYWNjZXNzZXMuCi0gICAgdmlydHVhbCBi
b29sIGlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSA9IDA7CiAKICAgICAv
LyBIZWxwZXIgZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nIHBhdGguIFJlYWRzIGJhY2sgdGhlIGZy
YW1lIGJ1ZmZlciBpbnRvCiAgICAgLy8gdGhlIG1lbW9yeSByZWdpb24gcG9pbnRlZCB0byBieSAi
cGl4ZWxzIiB3aXRoIHNpemUgImJ1ZmZlclNpemUiLiBJdCBpcwpJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3
MTg2OCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NSwxNiArMzY1LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjppc0dMRVMyQwogICAgIHJldHVybiBtX2ltcGwtPmlzR0xFUzJDb21wbGlh
bnQoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc0dMRVMyTlBPVFN0
cmljdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbC0+aXNHTEVTMk5QT1RTdHJpY3QoKTsK
LX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc0Vycm9yR2VuZXJhdGVkT25P
dXRPZkJvdW5kc0FjY2Vzc2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5pc0Vycm9y
R2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCk7Ci19Ci0KIERFTEVHQVRFX1RPX0lNUExf
MShhY3RpdmVUZXh0dXJlLCB1bnNpZ25lZCBsb25nKQogREVMRUdBVEVfVE9fSU1QTF8yKGF0dGFj
aFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCkKIApAQCAtMTA1MSwx
NiArMTA0MSw2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQKICAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+aXNHTEVTMkNvbXBsaWFudCgpOwogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEOjppc0dMRVMyTlBPVFN0cmljdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
aW50ZXJuYWwtPmlzR0xFUzJOUE9UU3RyaWN0KCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSBjb25zdAotewotICAg
IHJldHVybiBtX2ludGVybmFsLT5pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2Vz
KCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9D
QU5WQVMpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwuaAkocmV2aXNpb24gNzE4NjgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsNiBAQCBw
dWJsaWM6CiAgICAgV2ViR0xMYXllckNocm9taXVtKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAj
ZW5kaWYKICAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdDsKLSAgICBib29sIGlzR0xF
UzJOUE9UU3RyaWN0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJv
dW5kc0FjY2Vzc2VzKCkgY29uc3Q7CiAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBFbnRy
eSBwb2ludHMgZm9yIFdlYkdMLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCShyZXZpc2lvbiA3MTg2OCkK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSwxNiArMjgxLDYgQEAgYm9vbCBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjppcwogICAgIHJldHVybiBtX2lzR0xFUzI7CiB9CiAKLWJvb2wg
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6aXNHTEVTMk5QT1RTdHJpY3QoKQotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjppc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KIHVuc2lnbmVkIGludCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpnZXRQbGF0Zm9ybVRleHR1cmVJZCgpCiB7CiAgICAgcmV0dXJuIG1fdGV4dHVyZTsKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbC5oCShyZXZpc2lvbiA3MTg2OCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3
MCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBzaXplSW5CeXRlcyhpbnQgdHlwZSk7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpOwotICAgIHZpcnR1YWwgYm9vbCBp
c0dMRVMyTlBPVFN0cmljdCgpOwotICAgIHZpcnR1YWwgYm9vbCBpc0Vycm9yR2VuZXJhdGVkT25P
dXRPZkJvdW5kc0FjY2Vzc2VzKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzaGFwZShpbnQgd2lk
dGgsIGludCBoZWlnaHQpOwogCg==
</data>
<flag name="review"
          id="64258"
          type_id="1"
          status="-"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="64259"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74014</attachid>
            <date>2010-11-16 11:05:22 -0800</date>
            <delta_ts>2010-11-16 11:08:24 -0800</delta_ts>
            <desc>revised patch</desc>
            <filename>flags.patch</filename>
            <type>text/plain</type>
            <size>14313</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTkzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMTEtMTIgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3Rv
ciBHTCBiYWNrZW5kIGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00OTQ2MAorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0KTogQ2FsbCBzZXR1cEZsYWdzKCkuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250ZXh0KTogUmVtb3ZlIGZs
YWcgaW5pdGlhbGl6YXRpb24gdG8gc2V0dXBGbGFncygpLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzZXR1cEZsYWdzKTogSW5pdGlhbGl6ZSBHTCBmbGFncy4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyKTogVXNlIGFjY2Vzc29yIGZ1bmN0aW9uIGluc3RlYWQgb2YgbWVtYmVyLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKTog
RGl0dG8uCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6IFVz
ZSBmbGFncyBzZXQgaW4gc2V0dXBGbGFncyBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHVuZGVybHlpbmcg
R0wgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmlzR0xFUzJDb21wbGlhbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppc0dMRVMyTlBPVFN0cmljdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Jlc291cmNlU2FmZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaDogQWRk
IE5QT1QgZXh0ZW5zaW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmg6IFJlbW92ZSBHTCBmbGFnIHF1ZXJpZXMgYXQgdGhpcyBsZXZlbC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5oOiBBZGQg
cmVzb3VyY2Vfc2FmZSBhbmQgc3RyaWN0X2F0dHJpYnMgZXh0ZW5zaW9ucy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW06IERpdHRvLgorCiAy
MDEwLTExLTExICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDcxODY4KQorKysgV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNCBAQAorCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCkBAIC0xMDcsNiArMTA4LDcgQEAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV9jb250ZXh0TG9zdChmYWxzZSkKIHsKICAg
ICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBzZXR1cEZsYWdzKCk7CiAgICAgaW5pdGlhbGl6ZU5l
d0NvbnRleHQoKTsKIH0KIApAQCAtMTUxLDE1ICsxNTMsMjYgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmluaXRpYWxpemVOZQogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAg
ICAgICBpbml0VmVydGV4QXR0cmliMCgpOwogCi0gICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkK
LSAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0gICAgZWxz
ZQotICAgICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLQogICAg
IG1fY29udGV4dC0+cmVzaGFwZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgp
KTsKICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52
YXMoKS0+aGVpZ2h0KCkpOwogfQogCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0dXBG
bGFncygpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisKKyAgICBtX2lzR0xFUzJDb21wbGlh
bnQgPSBtX2NvbnRleHQtPmlzR0xFUzJDb21wbGlhbnQoKTsKKyAgICBtX2lzRXJyb3JHZW5lcmF0
ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX0NIUk9NSVVNX3N0cmljdF9hdHRyaWJzIik7CisgICAgbV9pc1Jlc291cmNlU2Fm
ZSA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fcmVz
b3VyY2Vfc2FmZSIpOworICAgIGlmIChtX2lzR0xFUzJDb21wbGlhbnQpIHsKKyAgICAgICAgbV9p
c0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX09FU190ZXh0dXJlX25wb3QiKTsKKyAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRl
ZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9k
ZXB0aF9zdGVuY2lsIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmlj
dCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FSQl90ZXh0dXJl
X25vbl9wb3dlcl9vZl90d28iKTsKKyAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3BhY2tlZF9kZXB0
aF9zdGVuY2lsIik7CisgICAgfQorfQorCiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6On5XZWJHTFJl
bmRlcmluZ0NvbnRleHQoKQogewogICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKQEAg
LTE3MTUsNyArMTcyOCw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFIKIAogICAgIGlmIChtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwKICAgICAgICAgJiYgIW1fcmVuZGVy
YnVmZmVyQmluZGluZy0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9pc0RlcHRoU3Rl
bmNpbFN1cHBvcnRlZCk7CisgICAgICAgIEFTU0VSVCghaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQo
KSk7CiAgICAgICAgIGxvbmcgdmFsdWUgPSAwOwogICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoKQEAgLTIz
MDQsMTIgKzIzMTcsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZl
cgogICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICBp
ZiAobV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCkgeworICAgICAgICBpZiAoaXNEZXB0aFN0ZW5j
aWxTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9y
YWdlKHRhcmdldCwgRXh0ZW5zaW9uczNEOjpERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0
KTsKICAgICAgICAgICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQobV9p
c0RlcHRoU3RlbmNpbFN1cHBvcnRlZCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+
c2V0SXNWYWxpZChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKTsKICAgICAgICAgbV9yZW5kZXJi
dWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0zNDA2LDIxICszNDE5LDYgQEAgV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VwogICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50
MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmlzR0xFUzJDb21wbGlhbnQoKQotewotICAgIHJldHVybiBtX2NvbnRleHQtPmlz
R0xFUzJDb21wbGlhbnQoKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzR0xF
UzJOUE9UU3RyaWN0KCkKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc0dMRVMyTlBPVFN0cmlj
dCgpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFcnJvckdlbmVyYXRlZE9u
T3V0T2ZCb3VuZHNBY2Nlc3NlcygpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpOwotfQotCiB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aGFuZGxlTlBPVFRleHR1cmVzKGJvb2wgcHJlcGFyZVRvRHJhdykKIHsKICAgICBi
b29sIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA3MTg2OCkKKysrIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw2
ICsyOTcsNyBAQCBwdWJsaWM6CiAKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZh
c0VsZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAgICAgdm9pZCBpbml0
aWFsaXplTmV3Q29udGV4dCgpOworICAgIHZvaWQgc2V0dXBGbGFncygpOwogCiAgICAgdm9pZCBh
ZGRPYmplY3QoV2ViR0xPYmplY3QqKTsKICAgICB2b2lkIGRldGFjaEFuZFJlbW92ZUFsbE9iamVj
dHMoKTsKQEAgLTMxMiw5ICszMTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgbWFya0NvbnRl
eHRDaGFuZ2VkKCk7CiAgICAgfQogCi0gICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCk7Ci0gICAg
Ym9vbCBpc0dMRVMyTlBPVFN0cmljdCgpOwotICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0
T2ZCb3VuZHNBY2Nlc3NlcygpOworICAgIC8vIFF1ZXJ5IHdoZXRoZXIgaXQgaXMgYnVpbHQgb24g
dG9wIG9mIGNvbXBsaWFudCBHTEVTMiBpbXBsZW1lbnRhdGlvbi4KKyAgICBib29sIGlzR0xFUzJD
b21wbGlhbnQoKSB7IHJldHVybiBtX2lzR0xFUzJDb21wbGlhbnQ7IH0KKyAgICAvLyBRdWVyeSBp
ZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gaXMgTlBPVCBzdHJpY3QuCisgICAgYm9vbCBpc0dMRVMy
TlBPVFN0cmljdCgpIHsgcmV0dXJuIG1faXNHTEVTMk5QT1RTdHJpY3Q7IH0KKyAgICAvLyBRdWVy
eSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVzIGVycm9ycyBvbiBvdXQtb2YtYm91
bmRzIGJ1ZmZlciBhY2Nlc3Nlcy4KKyAgICBib29sIGlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91
bmRzQWNjZXNzZXMoKSB7IHJldHVybiBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNj
ZXNzZXM7IH0KKyAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gaW5pdGlhbGl6
ZXMgdGV4dHVyZXMvcmVuZGVyYnVmZmVycyB0byAwLgorICAgIGJvb2wgaXNSZXNvdXJjZVNhZmUo
KSB7IHJldHVybiBtX2lzUmVzb3VyY2VTYWZlOyB9CisgICAgLy8gUXVlcnkgaWYgZGVwdGhfc3Rl
bmNpbCBidWZmZXIgaXMgc3VwcG9ydGVkLgorICAgIGJvb2wgaXNEZXB0aFN0ZW5jaWxTdXBwb3J0
ZWQoKSB7IHJldHVybiBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkOyB9CiAKICAgICAvLyBIZWxw
ZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRhIHR5cGVzCiAgICAg
Ly8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCkBAIC00MzAsNiArNDM4LDEwIEBAIHB1Ymxp
YzoKICAgICBsb25nIG1fc3RlbmNpbEZ1bmNSZWY7IC8vIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSB1
c2VyIHNwZWNpZmllZCB2YWx1ZSwgbm90IHRoZSBpbnRlcm5hbCBjbGFtcGVkIHZhbHVlLgogICAg
IHVuc2lnbmVkIGxvbmcgbV9zdGVuY2lsRnVuY01hc2s7CiAKKyAgICBib29sIG1faXNHTEVTMkNv
bXBsaWFudDsKKyAgICBib29sIG1faXNHTEVTMk5QT1RTdHJpY3Q7CisgICAgYm9vbCBtX2lzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXM7CisgICAgYm9vbCBtX2lzUmVzb3VyY2VT
YWZlOwogICAgIGJvb2wgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsKIAogICAgIC8vIEhlbHBl
cnMgZm9yIGdldFBhcmFtZXRlciBhbmQgb3RoZXJzCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuc2lvbnMzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRXh0ZW5zaW9uczNELmgJKHJldmlzaW9uIDcxODY4KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBA
QCBwdWJsaWM6CiAgICAgLy8gICBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKICAgICAv
LyAgIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhCiAgICAgLy8gICBHTF9BUkJfcm9idXN0bmVzcwor
ICAgIC8vICAgR0xfQVJCX3RleHR1cmVfbm9uX3Bvd2VyX29mX3R3byAvIEdMX09FU190ZXh0dXJl
X25wb3QKICAgICAvLyAgIEdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCAvIEdMX09FU19wYWNr
ZWRfZGVwdGhfc3RlbmNpbAogICAgIC8vICAgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAvIEdM
X0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDcxODY4KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NzMsOCArNDczLDYgQEAgcHVibGljOgogICAgIGludCBzaXplSW5CeXRlcyhpbnQgdHlw
ZSk7CiAKICAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdDsKLSAgICBib29sIGlzR0xF
UzJOUE9UU3RyaWN0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJv
dW5kc0FjY2Vzc2VzKCkgY29uc3Q7CiAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBIZWxw
ZXJzIGZvciB0ZXh0dXJlIHVwbG9hZGluZyBhbmQgcGl4ZWwgcmVhZGJhY2suCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25z
M0RDaHJvbWl1bS5oCShyZXZpc2lvbiA3MTg2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NiArMzYsMTAgQEAgY2xhc3MgRXh0ZW5zaW9uczNEQ2hyb21pdW0gOiBwdWJsaWMgRXh0ZQogcHVi
bGljOgogICAgIHZpcnR1YWwgfkV4dGVuc2lvbnMzRENocm9taXVtKCk7CiAKKyAgICAvLyBTdXBw
b3J0ZWQgZXh0ZW5zaW9uczoKKyAgICAvLyAgIEdMX0NIUk9NSVVNX3Jlc291cmNlX3NhZmUgIDog
aW5kaWNhdGluZyB0aGF0IHRleHR1cmVzL3JlbmRlcmJ1ZmZlcnMgYXJlIGFsd2F5cyBpbml0aWFs
aXplZCBiZWZvcmUgcmVhZC93cml0ZS4KKyAgICAvLyAgIEdMX0NIUk9NSVVNX3N0cmljdF9hdHRy
aWJzIDogaW5kaWNhdGluZyBhIEdMIGVycm9yIGlzIGdlbmVyYXRlZCBmb3Igb3V0LW9mLWJvdW5k
cyBidWZmZXIgYWNjZXNzZXMuCisKICAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCBpbnQgZ2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHJldmlzaW9uIDcxODY4
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI1MSwxNyArMjUxLDYgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6aXNHTEVTMkNvbXBsaWFudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6aXNHTEVTMk5QT1RTdHJpY3QoKSBjb25zdAotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFcnJvckdlbmVyYXRlZE9uT3V0
T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAot
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZp
c2lvbiA3MTkzMikKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNiBAQAorMjAxMC0xMS0xMiAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFj
dG9yIEdMIGJhY2tlbmQgZmxhZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5NDYwCisKKyAgICAgICAgKiBwdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0
M0QuaDogUmVtb3ZlIEdMIGZsYWcgcXVlcmllcyBhdCB0aGlzIGxldmVsLgorICAgICAgICAqIHNy
Yy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcDogRGl0dG8uCisgICAgICAgICogc3JjL0dy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDogRGl0dG8uCisgICAgICAgICogc3JjL1dlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwOiBEaXR0by4KKyAgICAgICAgKiBzcmMvV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oOiBEaXR0by4KKwogMjAxMC0xMS0xMiAgSWx5YSBT
aGVybWFuICA8aXNoZXJtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRl
eHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3ND
b250ZXh0M0QuaAkocmV2aXNpb24gNzE4NjgpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkdyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMSArMTA1LDYgQEAg
cHVibGljOgogCiAgICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWlsdCBvbiB0b3Agb2YgY29t
cGxpYW50IEdMRVMyIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgYm9vbCBpc0dMRVMyQ29t
cGxpYW50KCkgPSAwOwotICAgIC8vIFF1ZXJ5IHdoZXRoZXIgaXQgaXMgYnVpbHQgb24gdG9wIG9m
IEdMRVMyIE5QT1Qgc3RyaWN0IGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwgYm9vbCBpc0dM
RVMyTlBPVFN0cmljdCgpID0gMDsKLSAgICAvLyBRdWVyeSB3aGV0aGVyIGl0IGlzIGJ1aWx0IG9u
IHRvcCBvZiBpbXBsZW1lbnRhdGlvbiB0aGF0IGdlbmVyYXRlcyBlcnJvcnMKLSAgICAvLyBvbiBv
dXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3Nlcy4KLSAgICB2aXJ0dWFsIGJvb2wgaXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpID0gMDsKIAogICAgIC8vIEhlbHBlciBmb3Ig
c29mdHdhcmUgY29tcG9zaXRpbmcgcGF0aC4gUmVhZHMgYmFjayB0aGUgZnJhbWUgYnVmZmVyIGlu
dG8KICAgICAvLyB0aGUgbWVtb3J5IHJlZ2lvbiBwb2ludGVkIHRvIGJ5ICJwaXhlbHMiIHdpdGgg
c2l6ZSAiYnVmZmVyU2l6ZSIuIEl0IGlzCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9z
cmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDcxODY4KQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzY1LDE2ICszNjUsNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmlzR0xFUzJDCiAgICAgcmV0dXJuIG1faW1wbC0+aXNHTEVTMkNvbXBsaWFudCgpOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9pbXBsLT5pc0dMRVMyTlBPVFN0cmljdCgpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNj
ZXNzZXMoKSBjb25zdAotewotICAgIHJldHVybiBtX2ltcGwtPmlzRXJyb3JHZW5lcmF0ZWRPbk91
dE9mQm91bmRzQWNjZXNzZXMoKTsKLX0KLQogREVMRUdBVEVfVE9fSU1QTF8xKGFjdGl2ZVRleHR1
cmUsIHVuc2lnbmVkIGxvbmcpCiBERUxFR0FURV9UT19JTVBMXzIoYXR0YWNoU2hhZGVyLCBQbGF0
Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KQogCkBAIC0xMDUxLDE2ICsxMDQxLDYgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudAogICAgIHJldHVybiBtX2lu
dGVybmFsLT5pc0dMRVMyQ29tcGxpYW50KCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNH
TEVTMk5QT1RTdHJpY3QoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW50
ZXJuYWwtPmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKTsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCShy
ZXZpc2lvbiA3MTg2OCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4ICs3NSw2IEBAIHB1YmxpYzoKICAgICBX
ZWJHTExheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNlbmRpZgogICAgIGJv
b2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0OwotICAgIGJvb2wgaXNHTEVTMk5QT1RTdHJpY3Qo
KSBjb25zdDsKLSAgICBib29sIGlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMo
KSBjb25zdDsKIAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEVudHJ5IHBvaW50cyBmb3Ig
V2ViR0wuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHJldmlzaW9uIDcxODY4KQorKysgV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgxLDE2ICsyODEsNiBAQCBib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OmlzCiAgICAgcmV0dXJuIG1faXNHTEVTMjsKIH0KIAotYm9vbCBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjppc0dMRVMyTlBPVFN0cmljdCgpCi17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmlzRXJyb3JH
ZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogdW5zaWduZWQgaW50IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFBsYXRm
b3JtVGV4dHVyZUlkKCkKIHsKICAgICByZXR1cm4gbV90ZXh0dXJlOwpJbmRleDogV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgJ
KHJldmlzaW9uIDcxODY4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgaW50IHNpemVJbkJ5dGVzKGludCB0eXBlKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBpc0dMRVMyQ29tcGxpYW50KCk7Ci0gICAgdmlydHVhbCBib29sIGlzR0xFUzJOUE9UU3Ry
aWN0KCk7Ci0gICAgdmlydHVhbCBib29sIGlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNj
ZXNzZXMoKTsKIAogICAgIHZpcnR1YWwgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdo
dCk7CiAK
</data>
<flag name="commit-queue"
          id="64548"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74015</attachid>
            <date>2010-11-16 11:08:24 -0800</date>
            <delta_ts>2010-11-16 11:24:33 -0800</delta_ts>
            <desc>revised patch</desc>
            <filename>flags.patch</filename>
            <type>text/plain</type>
            <size>14263</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTkzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMTEtMTIgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3Rv
ciBHTCBiYWNrZW5kIGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00OTQ2MAorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0KTogQ2FsbCBzZXR1cEZsYWdzKCkuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250ZXh0KTogUmVtb3ZlIGZs
YWcgaW5pdGlhbGl6YXRpb24gdG8gc2V0dXBGbGFncygpLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzZXR1cEZsYWdzKTogSW5pdGlhbGl6ZSBHTCBmbGFncy4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyKTogVXNlIGFjY2Vzc29yIGZ1bmN0aW9uIGluc3RlYWQgb2YgbWVtYmVyLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKTog
RGl0dG8uCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6IFVz
ZSBmbGFncyBzZXQgaW4gc2V0dXBGbGFncyBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHVuZGVybHlpbmcg
R0wgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmlzR0xFUzJDb21wbGlhbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppc0dMRVMyTlBPVFN0cmljdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Jlc291cmNlU2FmZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaDogQWRk
IE5QT1QgZXh0ZW5zaW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmg6IFJlbW92ZSBHTCBmbGFnIHF1ZXJpZXMgYXQgdGhpcyBsZXZlbC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5oOiBBZGQg
cmVzb3VyY2Vfc2FmZSBhbmQgc3RyaWN0X2F0dHJpYnMgZXh0ZW5zaW9ucy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW06IFJlbW92ZSBHTCBm
bGFnIHF1ZXJpZXMgYXQgdGhpcyBsZXZlbC4KKwogMjAxMC0xMS0xMSAgQWJoaXNoZWsgQXJ5YSAg
PGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgu
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
CShyZXZpc2lvbiA3MTg2OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBAIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb24KICAgICAsIG1fY29udGV4dExvc3QoZmFsc2Up
CiB7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgc2V0dXBGbGFncygpOwogICAgIGluaXRp
YWxpemVOZXdDb250ZXh0KCk7CiB9CiAKQEAgLTE1MSwxNSArMTUyLDI2IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmUKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSkKICAgICAgICAgaW5pdFZlcnRleEF0dHJpYjAoKTsKIAotICAgIGlmIChpc0dMRVMyQ29tcGxp
YW50KCkpCi0gICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7
Ci0KICAgICBtX2NvbnRleHQtPnJlc2hhcGUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5o
ZWlnaHQoKSk7CiAgICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXMoKS0+d2lkdGgo
KSwgY2FudmFzKCktPmhlaWdodCgpKTsKIH0KIAordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnNldHVwRmxhZ3MoKQoreworICAgIEFTU0VSVChtX2NvbnRleHQpOworCisgICAgbV9pc0dMRVMy
Q29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7CisgICAgbV9pc0Vycm9y
R2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9zdHJpY3RfYXR0cmlicyIpOworICAgIG1faXNSZXNv
dXJjZVNhZmUgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0NIUk9N
SVVNX3Jlc291cmNlX3NhZmUiKTsKKyAgICBpZiAobV9pc0dMRVMyQ29tcGxpYW50KSB7CisgICAg
ICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7CisgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxT
dXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19w
YWNrZWRfZGVwdGhfc3RlbmNpbCIpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faXNHTEVTMk5Q
T1RTdHJpY3QgPSAhbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJf
dGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIik7CisgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBw
b3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9wYWNr
ZWRfZGVwdGhfc3RlbmNpbCIpOworICAgIH0KK30KKwogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+
V2ViR0xSZW5kZXJpbmdDb250ZXh0KCkKIHsKICAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3Rz
KCk7CkBAIC0xNzE1LDcgKzE3MjcsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRSCiAKICAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZv
cm1hdCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCiAgICAgICAgICYmICFt
X3JlbmRlcmJ1ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkgewotICAgICAgICBBU1NFUlQoIW1faXNE
ZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpOworICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKCkpOwogICAgICAgICBsb25nIHZhbHVlID0gMDsKICAgICAgICAgc3dpdGNoIChwbmFt
ZSkgewogICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lEVEg6
CkBAIC0yMzA0LDEyICsyMzE2LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5k
ZXJidWZmZXIKICAgICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAg
ICAgICAgaWYgKG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpIHsKKyAgICAgICAgaWYgKGlzRGVw
dGhTdGVuY2lsU3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVm
ZmVyU3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMzRDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgs
IGhlaWdodCk7CiAgICAgICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1Zh
bGlkKG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJp
bmRpbmctPnNldElzVmFsaWQoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7CiAgICAgICAgIG1f
cmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMzQwNiwyMSArMzQxOCw2IEBAIFdlYkdM
R2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFcKICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7CiB9CiAKLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppc0dMRVMyQ29tcGxpYW50KCkKLXsKLSAgICByZXR1cm4gbV9jb250
ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppc0dMRVMyTlBPVFN0cmljdCgpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNHTEVTMk5Q
T1RTdHJpY3QoKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKQotewotICAgIHJldHVybiBtX2NvbnRleHQtPmlz
RXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKTsKLX0KLQogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmhhbmRsZU5QT1RUZXh0dXJlcyhib29sIHByZXBhcmVUb0RyYXcpCiB7
CiAgICAgYm9vbCByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gNzE4NjgpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTcsNiArMjk3LDcgQEAgcHVibGljOgogCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KEhU
TUxDYW52YXNFbGVtZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOwogICAgIHZv
aWQgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKKyAgICB2b2lkIHNldHVwRmxhZ3MoKTsKIAogICAg
IHZvaWQgYWRkT2JqZWN0KFdlYkdMT2JqZWN0Kik7CiAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVB
bGxPYmplY3RzKCk7CkBAIC0zMTIsOSArMzEzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOwogICAgIH0KIAotICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgp
OwotICAgIGJvb2wgaXNHTEVTMk5QT1RTdHJpY3QoKTsKLSAgICBib29sIGlzRXJyb3JHZW5lcmF0
ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKTsKKyAgICAvLyBRdWVyeSB3aGV0aGVyIGl0IGlzIGJ1
aWx0IG9uIHRvcCBvZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50YXRpb24uCisgICAgYm9vbCBp
c0dMRVMyQ29tcGxpYW50KCkgeyByZXR1cm4gbV9pc0dMRVMyQ29tcGxpYW50OyB9CisgICAgLy8g
UXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGlzIE5QT1Qgc3RyaWN0LgorICAgIGJvb2wg
aXNHTEVTMk5QT1RTdHJpY3QoKSB7IHJldHVybiBtX2lzR0xFUzJOUE9UU3RyaWN0OyB9CisgICAg
Ly8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGdlbmVyYXRlcyBlcnJvcnMgb24gb3V0
LW9mLWJvdW5kcyBidWZmZXIgYWNjZXNzZXMuCisgICAgYm9vbCBpc0Vycm9yR2VuZXJhdGVkT25P
dXRPZkJvdW5kc0FjY2Vzc2VzKCkgeyByZXR1cm4gbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJv
dW5kc0FjY2Vzc2VzOyB9CisgICAgLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGlu
aXRpYWxpemVzIHRleHR1cmVzL3JlbmRlcmJ1ZmZlcnMgdG8gMC4KKyAgICBib29sIGlzUmVzb3Vy
Y2VTYWZlKCkgeyByZXR1cm4gbV9pc1Jlc291cmNlU2FmZTsgfQorICAgIC8vIFF1ZXJ5IGlmIGRl
cHRoX3N0ZW5jaWwgYnVmZmVyIGlzIHN1cHBvcnRlZC4KKyAgICBib29sIGlzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkKCkgeyByZXR1cm4gbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsgfQogCiAgICAg
Ly8gSGVscGVyIHRvIHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBPcGVuR0wgZGF0YSB0eXBl
cwogICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgpAQCAtNDMwLDYgKzQzOCwxMCBA
QCBwdWJsaWM6CiAgICAgbG9uZyBtX3N0ZW5jaWxGdW5jUmVmOyAvLyBOb3RlIHRoYXQgdGhpcyBp
cyB0aGUgdXNlciBzcGVjaWZpZWQgdmFsdWUsIG5vdCB0aGUgaW50ZXJuYWwgY2xhbXBlZCB2YWx1
ZS4KICAgICB1bnNpZ25lZCBsb25nIG1fc3RlbmNpbEZ1bmNNYXNrOwogCisgICAgYm9vbCBtX2lz
R0xFUzJDb21wbGlhbnQ7CisgICAgYm9vbCBtX2lzR0xFUzJOUE9UU3RyaWN0OworICAgIGJvb2wg
bV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzOworICAgIGJvb2wgbV9pc1Jl
c291cmNlU2FmZTsKICAgICBib29sIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7CiAKICAgICAv
LyBIZWxwZXJzIGZvciBnZXRQYXJhbWV0ZXIgYW5kIG90aGVycwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCShyZXZpc2lvbiA3MTg2OCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYg
KzQ3LDcgQEAgcHVibGljOgogICAgIC8vICAgR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4
CiAgICAgLy8gICBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYQogICAgIC8vICAgR0xfQVJCX3JvYnVz
dG5lc3MKKyAgICAvLyAgIEdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28gLyBHTF9PRVNf
dGV4dHVyZV9ucG90CiAgICAgLy8gICBHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwgLyBHTF9P
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwKICAgICAvLyAgIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2Js
aXQgLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA3MTg2OCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDczLDggKzQ3Myw2IEBAIHB1YmxpYzoKICAgICBpbnQgc2l6ZUluQnl0ZXMo
aW50IHR5cGUpOwogCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7Ci0gICAgYm9v
bCBpc0dMRVMyTlBPVFN0cmljdCgpIGNvbnN0OwotICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9u
T3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0OwogCiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAg
Ly8gSGVscGVycyBmb3IgdGV4dHVyZSB1cGxvYWRpbmcgYW5kIHBpeGVsIHJlYWRiYWNrLgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRXh0
ZW5zaW9uczNEQ2hyb21pdW0uaAkocmV2aXNpb24gNzE4NjgpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDEwIEBAIGNsYXNzIEV4dGVuc2lvbnMzRENocm9taXVtIDogcHVibGljIEV4
dGUKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RDaHJvbWl1bSgpOwogCisgICAg
Ly8gU3VwcG9ydGVkIGV4dGVuc2lvbnM6CisgICAgLy8gICBHTF9DSFJPTUlVTV9yZXNvdXJjZV9z
YWZlICA6IGluZGljYXRpbmcgdGhhdCB0ZXh0dXJlcy9yZW5kZXJidWZmZXJzIGFyZSBhbHdheXMg
aW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWQvd3JpdGUuCisgICAgLy8gICBHTF9DSFJPTUlVTV9zdHJp
Y3RfYXR0cmlicyA6IGluZGljYXRpbmcgYSBHTCBlcnJvciBpcyBnZW5lcmF0ZWQgZm9yIG91dC1v
Zi1ib3VuZHMgYnVmZmVyIGFjY2Vzc2VzLgorCiAgICAgLy8gRXh0ZW5zaW9uczNEIG1ldGhvZHMu
CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwg
aW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lv
biA3MTg2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4
dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsMTcgKzI1MSw2IEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzRXJyb3JHZW5lcmF0
ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LSAgICAKLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwkocmV2aXNpb24gNzE5MzIpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTEtMTIgIFpoZW55YW8gTW8gIDx6bW9AZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWZhY3RvciBHTCBiYWNrZW5kIGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00OTQ2MAorCisgICAgICAgICogcHVibGljL1dlYkdyYXBoaWNz
Q29udGV4dDNELmg6IFJlbW92ZSBHTCBmbGFnIHF1ZXJpZXMgYXQgdGhpcyBsZXZlbC4KKyAgICAg
ICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6IERpdHRvLgorICAgICAgICAq
IHNyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmg6IERpdHRvLgorICAgICAgICAqIHNyYy9X
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcDogRGl0dG8uCisgICAgICAgICogc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaDogRGl0dG8uCisKIDIwMTAtMTEtMTIg
IElseWEgU2hlcm1hbiAgPGlzaGVybWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhp
Y3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdy
YXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDcxODY4KQorKysgV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTEgKzEw
NSw2IEBAIHB1YmxpYzoKIAogICAgIC8vIFF1ZXJ5IHdoZXRoZXIgaXQgaXMgYnVpbHQgb24gdG9w
IG9mIGNvbXBsaWFudCBHTEVTMiBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIGJvb2wgaXNH
TEVTMkNvbXBsaWFudCgpID0gMDsKLSAgICAvLyBRdWVyeSB3aGV0aGVyIGl0IGlzIGJ1aWx0IG9u
IHRvcCBvZiBHTEVTMiBOUE9UIHN0cmljdCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIGJv
b2wgaXNHTEVTMk5QT1RTdHJpY3QoKSA9IDA7Ci0gICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBi
dWlsdCBvbiB0b3Agb2YgaW1wbGVtZW50YXRpb24gdGhhdCBnZW5lcmF0ZXMgZXJyb3JzCi0gICAg
Ly8gb24gb3V0LW9mLWJvdW5kcyBidWZmZXIgYWNjZXNzZXMuCi0gICAgdmlydHVhbCBib29sIGlz
RXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSA9IDA7CiAKICAgICAvLyBIZWxw
ZXIgZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nIHBhdGguIFJlYWRzIGJhY2sgdGhlIGZyYW1lIGJ1
ZmZlciBpbnRvCiAgICAgLy8gdGhlIG1lbW9yeSByZWdpb24gcG9pbnRlZCB0byBieSAicGl4ZWxz
IiB3aXRoIHNpemUgImJ1ZmZlclNpemUiLiBJdCBpcwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3MTg2OCkK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2NSwxNiArMzY1LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjppc0dMRVMyQwogICAgIHJldHVybiBtX2ltcGwtPmlzR0xFUzJDb21wbGlhbnQoKTsK
IH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc0dMRVMyTlBPVFN0cmljdCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbC0+aXNHTEVTMk5QT1RTdHJpY3QoKTsKLX0KLQot
Ym9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJv
dW5kc0FjY2Vzc2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5pc0Vycm9yR2VuZXJh
dGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCk7Ci19Ci0KIERFTEVHQVRFX1RPX0lNUExfMShhY3Rp
dmVUZXh0dXJlLCB1bnNpZ25lZCBsb25nKQogREVMRUdBVEVfVE9fSU1QTF8yKGF0dGFjaFNoYWRl
ciwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCkKIApAQCAtMTA1MSwxNiArMTA0
MSw2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQKICAgICByZXR1
cm4gbV9pbnRlcm5hbC0+aXNHTEVTMkNvbXBsaWFudCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjppc0dMRVMyTlBPVFN0cmljdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW50ZXJu
YWwtPmlzR0xFUzJOUE9UU3RyaWN0KCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omlz
RXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtX2ludGVybmFsLT5pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCk7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMp
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwuaAkocmV2aXNpb24gNzE4NjgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsNiBAQCBwdWJsaWM6
CiAgICAgV2ViR0xMYXllckNocm9taXVtKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYK
ICAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdDsKLSAgICBib29sIGlzR0xFUzJOUE9U
U3RyaWN0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0Fj
Y2Vzc2VzKCkgY29uc3Q7CiAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBFbnRyeSBwb2lu
dHMgZm9yIFdlYkdMLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCShyZXZpc2lvbiA3MTg2OCkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4MSwxNiArMjgxLDYgQEAgYm9vbCBXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjppcwogICAgIHJldHVybiBtX2lzR0xFUzI7CiB9CiAKLWJvb2wgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6aXNHTEVTMk5QT1RTdHJpY3QoKQotewotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpp
c0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KIHVuc2lnbmVkIGludCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpn
ZXRQbGF0Zm9ybVRleHR1cmVJZCgpCiB7CiAgICAgcmV0dXJuIG1fdGV4dHVyZTsKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbC5oCShyZXZpc2lvbiA3MTg2OCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3MCw2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBzaXplSW5CeXRlcyhpbnQgdHlwZSk7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpOwotICAgIHZpcnR1YWwgYm9vbCBpc0dMRVMy
TlBPVFN0cmljdCgpOwotICAgIHZpcnR1YWwgYm9vbCBpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJv
dW5kc0FjY2Vzc2VzKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpOwogCg==
</data>
<flag name="review"
          id="64549"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="64550"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
      

    </bug>

</bugzilla>