<?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>142255</bug_id>
          
          <creation_ts>2015-03-03 20:39:10 -0800</creation_ts>
          <short_desc>[Content Filtering] Make it easier to add new content filters</short_desc>
          <delta_ts>2015-03-04 14:43:59 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>128858</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>japhet</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1073945</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-03-03 20:39:10 -0800</bug_when>
    <thetext>[Content Filtering] Make it easier to add new content filters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073981</commentid>
    <comment_count>1</comment_count>
      <attachid>247839</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-03-03 21:55:47 -0800</bug_when>
    <thetext>Created attachment 247839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073982</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-03 21:57:36 -0800</bug_when>
    <thetext>Attachment 247839 did not pass style-queue:


ERROR: Source/WebCore/platform/cocoa/ParentalControlsContentFilter.mm:60:  Missing spaces around :  [whitespace/init] [4]
ERROR: Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:53:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:79:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:94:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074240</commentid>
    <comment_count>3</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-03-04 14:43:59 -0800</bug_when>
    <thetext>Committed r181037: &lt;http://trac.webkit.org/changeset/181037&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247839</attachid>
            <date>2015-03-03 21:55:47 -0800</date>
            <delta_ts>2015-03-04 06:02:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142255-20150303215528.patch</filename>
            <type>text/plain</type>
            <size>41299</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwOTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmViODA0ZDY0ZjhmNTY4
ZGE0OWI2YTM2MjhkOTEyOTE1NjJkYjhjNy4uYjAzZmQ0ODZmNmM5NjFkMjFiNTNkODVlMjhkOWE1
M2YzYzVhM2ExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDcxIEBACiAyMDE1LTAzLTAzICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAorICAgICAgICBbQ29udGVudCBGaWx0ZXJpbmdd
IE1ha2UgaXQgZWFzaWVyIHRvIGFkZCBuZXcgY29udGVudCBmaWx0ZXJzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIyNTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb250ZW50RmlsdGVyIHdhcyBiZWNv
bWluZyBhIGJpdCBvZiBhIG1lc3MsIHdpdGggYm90aCB0aGUgV2ViRmlsdGVyRXZhbHVhdG9yIGFu
ZCBORUZpbHRlclNvdXJjZSBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgYXdrd2FyZGx5IGxpdmlu
ZyBzaWRlLWJ5LXNpZGUuIFRoaXMgcGF0Y2ggY2xlYW5zIHRoaW5ncyB1cCBieSBtb3ZpbmcgdGhl
c2UgaW1wbGVtZW50YXRpb25zIGludG8gdHdvIHNlcGFyYXRlCisgICAgICAgIGNsYXNzZXMgYW5k
IHR1cm5pbmcgQ29udGVudEZpbHRlciBpdHNlbGYgaW50byBhbiBhYnN0cmFjdCBpbnRlcmZhY2Ug
dGhhdCBlYWNoIGltcGxlbWVudHMuIEEgbmV3IGNsYXNzIGNhbGxlZAorICAgICAgICBDb250ZW50
RmlsdGVyQ29sbGVjdGlvbiwgd2hpY2ggYWxzbyBpbmhlcml0cyBmcm9tIENvbnRlbnRGaWx0ZXIs
IG1hbmFnZXMgdGhlIGNvbGxlY3Rpb24gb2YgaW5kaXZpZHVhbCBjb250ZW50CisgICAgICAgIGZp
bHRlcnMgYW5kIGlzIHZlbmRlZCB0byB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtIGJ5IENvbnRlbnRG
aWx0ZXI6OmNyZWF0ZUlmTmVlZGVkKCkuCisKKyAgICAgICAgVGhpcyByZWZhY3RvcmluZyB3aWxs
IG1ha2UgaXQgZWFzaWVyIHRvIGFkZCBhIHRoaXJkIHR5cGUgb2YgY29udGVudCBmaWx0ZXIgaW4g
YSBmb2xsb3ctb24gcGF0Y2gsIG5hbWVseSBhIG1vY2sKKyAgICAgICAgY29udGVudCBmaWx0ZXIg
Zm9yIHRlc3RpbmcgcHVycG9zZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpyZXNwb25zZVJlY2VpdmVkKTogQ2FsbGVkIENv
bnRlbnRGaWx0ZXI6OmNyZWF0ZUlmTmVlZGVkKCkgaW5zdGVhZCBvZiBpbnN0YW50aWF0aW5nIGEg
Q29udGVudEZpbHRlciBkaXJlY3RseS4KKyAgICAgICAgKiBwbGF0Zm9ybS9Db250ZW50RmlsdGVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RmlsdGVyOjp+Q29udGVudEZpbHRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2NvY29hL05ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyLm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyOjpj
YW5IYW5kbGVSZXNwb25zZSk6IE1vdmVkIE5FRmlsdGVyU291cmNlIGNvZGUgZnJvbSBDb250ZW50
RmlsdGVyTWFjLm1tIHRvIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrRXh0ZW5zaW9u
Q29udGVudEZpbHRlcjo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3Jr
RXh0ZW5zaW9uQ29udGVudEZpbHRlcjo6TmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyOjp+
TmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyOjphZGREYXRhKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlcjo6ZmluaXNoZWRBZGRpbmdE
YXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZp
bHRlcjo6bmVlZHNNb3JlRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya0V4
dGVuc2lvbkNvbnRlbnRGaWx0ZXI6OmRpZEJsb2NrRGF0YSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI6OmdldFJlcGxhY2VtZW50RGF0YSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI6
OnVuYmxvY2tIYW5kbGVyKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvUGFyZW50
YWxDb250cm9sc0NvbnRlbnRGaWx0ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ29udGVudEZpbHRlci5oLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1BhcmVudGFs
Q29udHJvbHNDb250ZW50RmlsdGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhcmVu
dGFsQ29udHJvbHNDb250ZW50RmlsdGVyOjpjYW5IYW5kbGVSZXNwb25zZSk6IE1vdmVkIFdlYkZp
bHRlckV2YWx1YXRvciBjb2RlIGZyb20gQ29udGVudEZpbHRlck1hYy5tbSB0byBoZXJlLgorICAg
ICAgICAoV2ViQ29yZTo6UGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXI6OmNyZWF0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXI6OlBh
cmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQ
YXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlcjo6YWRkRGF0YSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXI6OmZpbmlzaGVkQWRkaW5nRGF0
YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0
ZXI6Om5lZWRzTW9yZURhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhcmVudGFsQ29u
dHJvbHNDb250ZW50RmlsdGVyOjpkaWRCbG9ja0RhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyOjpnZXRSZXBsYWNlbWVudERhdGEpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyOjp1
bmJsb2NrSGFuZGxlcik6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Db250ZW50Rmls
dGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y29udGVudEZpbHRlclR5cGUpOiBBZGRlZCBh
IGhlbHBlciBmdW5jdGlvbiB0ZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgYSBuZXcgQ29udGVudEZpbHRl
clR5cGUuCisgICAgICAgIChXZWJDb3JlOjpjb250ZW50RmlsdGVyVHlwZXMpOiBSZWdpc3RlcmVk
IGEgQ29udGVudEZpbHRlclR5cGUgZm9yIGVhY2ggdHlwZSBvZiBjb250ZW50IGZpbHRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXI6OmNyZWF0ZUlmTmVlZGVkKTogQ3JlYXRlZCBh
IENvbnRlbnRGaWx0ZXJDb2xsZWN0aW9uIGNvbnRhaW5pbmcgZWFjaCBjb250ZW50IGZpbHRlciB0
aGF0IGNhbiBoYW5kbGUgdGhlIGdpdmVuIHJlc3BvbnNlLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEZpbHRlckNvbGxlY3Rpb246OkNvbnRlbnRGaWx0ZXJDb2xsZWN0aW9uKTogQ29uc3RydWN0
cyBhIENvbnRlbnRGaWx0ZXJDb2xsZWN0aW9uIGdpdmVuIGEgVmVjdG9yIG9mIGNvbnRlbnQgZmls
dGVycy4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXJDb2xsZWN0aW9uOjphZGREYXRh
KTogRm9yd2FyZGVkIHRoZSBjYWxsIHRvIGVhY2ggY29udGVudCBmaWx0ZXIgaW4gbV9jb250ZW50
RmlsdGVycy4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXJDb2xsZWN0aW9uOjpmaW5p
c2hlZEFkZGluZ0RhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXJD
b2xsZWN0aW9uOjpuZWVkc01vcmVEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RmlsdGVyQ29sbGVjdGlvbjo6ZGlkQmxvY2tEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RmlsdGVyQ29sbGVjdGlvbjo6Z2V0UmVwbGFjZW1lbnREYXRhKTogUmV0dXJu
ZWQgcmVwbGFjZW1lbnQgZGF0YSBmb3IgdGhlIGZpcnN0IGZpbHRlciB0aGF0IGJsb2NrZWQgdGhl
IGxvYWQuCisgICAgICAgIElmIG5vIGZpbHRlciBibG9ja2VkIHRoZSBsb2FkLCByZXR1cm5lZCB0
aGUgZmlyc3QgZmlsdGVyJ3MgcmVwbGFjZW1lbnQgZGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRGaWx0ZXJDb2xsZWN0aW9uOjp1bmJsb2NrSGFuZGxlcik6IFJldHVybmVkIHRoZSB1bmJs
b2NrIGhhbmRsZXIgZm9yIHRoZSBmaXJzdCBmaWx0ZXIgdGhhdCBibG9ja2VkIHRoZSBsb2FkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEZpbHRlcjo6Q29udGVudEZpbHRlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RmlsdGVyOjp+Q29udGVudEZpbHRlcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RmlsdGVyOjpjYW5IYW5kbGVSZXNwb25zZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RmlsdGVyOjphZGREYXRhKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXI6OmZpbmlzaGVkQWRkaW5nRGF0
YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RmlsdGVyOjpuZWVkc01vcmVE
YXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXI6OmRpZEJsb2Nr
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RmlsdGVyOjpnZXRSZXBs
YWNlbWVudERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEZpbHRlcjo6
dW5ibG9ja0hhbmRsZXIpOiBEZWxldGVkLgorCisyMDE1LTAzLTAzICBBbmR5IEVzdGVzICA8YWVz
dGVzQGFwcGxlLmNvbT4KKwogICAgICAgICBbQ29udGVudCBGaWx0ZXJpbmddIFNlcGFyYXRlIHVu
YmxvY2sgaGFuZGxpbmcgaW50byBpdHMgb3duIGNsYXNzCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIyNTEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI5ZTQzYWU4MDQwOTIxN2Fl
NDkyMGY5Y2I3NjJkOTIzOGI2ZWQ2YWMuLjhjMTc0ZGVkMjZhNmI2NmZmZjdmNzc3NDY5OGNiMTM5
Y2QxMWZkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTM3OTksOCArMzc5OSwxMiBAQAogCQlBMTQ4MzJDRjE4N0Y2ODQ3MDBE
QTYzQTYgLyogV2ViQ29yZVRocmVhZFN5c3RlbUludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE0ODMyQTExODdGNTA4NzAwREE2M0E2IC8q
IFdlYkNvcmVUaHJlYWRTeXN0ZW1JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMTdDODEyMjBGMkE1Q0Y3MDA1REFBRUIgLyogSFRN
TEVsZW1lbnRGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEExN0M4MTIwMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZhY3Rvcnku
Y3BwICovOyB9OwogCQlBMTdDODEyMzBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0
b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTdD
ODEyMTBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmggKi87IH07CisJCUEx
ODg5MEFFMUFBMTNGMjUwMDI2QzMwMSAvKiBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExODg5MEFD
MUFBMTNGMjUwMDI2QzMwMSAvKiBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbSAqLzsg
fTsKKwkJQTE4ODkwQUYxQUExM0YyNTAwMjZDMzAxIC8qIFBhcmVudGFsQ29udHJvbHNDb250ZW50
RmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MTg4OTBBRDFBQTEzRjI1MDAyNkMzMDEgLyogUGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXIu
aCAqLzsgfTsKIAkJQTE5RDkzNDYxQTlGRUM3MjAwQjQ2QzI0IC8qIE5FRmlsdGVyU291cmNlU1BJ
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTlEOTM0
NDFBOUZFQzcyMDBCNDZDMjQgLyogTkVGaWx0ZXJTb3VyY2VTUEkuaCAqLzsgfTsKIAkJQTE5RDkz
NDcxQTlGRUM3MjAwQjQ2QzI0IC8qIFdlYkZpbHRlckV2YWx1YXRvclNQSS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE5RDkzNDUxQTlGRUM3MjAwQjQ2
QzI0IC8qIFdlYkZpbHRlckV2YWx1YXRvclNQSS5oICovOyB9OworCQlBMTlEOTM0QTFBQTExQjFF
MDBCNDZDMjQgLyogTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTlEOTM0ODFBQTExQjFFMDBCNDZD
MjQgLyogTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIubW0gKi87IH07CisJCUExOUQ5MzRC
MUFBMTFCMUUwMEI0NkMyNCAvKiBOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE5RDkzNDkxQUExMUIx
RTAwQjQ2QzI0IC8qIE5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyLmggKi87IH07CiAJCUEx
Qzc5NzE4MTg4M0REODIwMDBGNUUxRiAvKiBET01HZXN0dXJlRXZlbnQuaCBpbiBDb3B5IEdlbmVy
YXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTREQ0RE
MTg4MEY5MDEwMDNFRURCQiAvKiBET01HZXN0dXJlRXZlbnQuaCAqLzsgfTsKIAkJQTFDNzk3MTkx
ODgzRERFRDAwMEY1RTFGIC8qIERPTVRvdWNoLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU0RENDRDE4ODBGODY3MDAzRUVE
QkIgLyogRE9NVG91Y2guaCAqLzsgfTsKIAkJQTFDNzk3MUExODgzREUwRDAwMEY1RTFGIC8qIERP
TVRvdWNoRXZlbnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTREQ0NGMTg4MEY4NjcwMDNFRURCQiAvKiBET01Ub3VjaEV2
ZW50LmggKi87IH07CkBAIC0xMTAyMCw4ICsxMTAyNCwxMiBAQAogCQlBMTQ4MzJBQjE4N0Y1MDg3
MDBEQTYzQTYgLyogV0tWaWV3UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXS1ZpZXdQcml2YXRlLmg7IHBhdGggPSBpb3Mvd2FrL1dLVmlld1ByaXZhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE3QzgxMjAwRjJBNUNGNzAwNURBQUVCIC8qIEhU
TUxFbGVtZW50RmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBIVE1MRWxlbWVudEZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
MTdDODEyMTBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMTg4OTBBQzFBQTEzRjI1MDAyNkMzMDEgLyogUGFyZW50YWxD
b250cm9sc0NvbnRlbnRGaWx0ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTE4ODkwQUQxQUExM0YyNTAwMjZDMzAxIC8qIFBhcmVudGFsQ29udHJv
bHNDb250ZW50RmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmVu
dGFsQ29udHJvbHNDb250ZW50RmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUExOUQ5MzQ0MUE5RkVDNzIwMEI0NkMyNCAvKiBORUZpbHRlclNvdXJjZVNQSS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBORUZpbHRlclNvdXJjZVNQSS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBMTlEOTM0NTFBOUZFQzcyMDBCNDZDMjQgLyogV2ViRmlsdGVy
RXZhbHVhdG9yU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZpbHRl
ckV2YWx1YXRvclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTlEOTM0ODFB
QTExQjFFMDBCNDZDMjQgLyogTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrRXh0ZW5zaW9uQ29udGVu
dEZpbHRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE5RDkzNDkxQUExMUIx
RTAwQjQ2QzI0IC8qIE5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExQzc5NzFDMTg4M0U1MUYwMDBGNUUxRiAvKiBE
T01IVE1MVGV4dEFyZWFFbGVtZW50UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBET01IVE1MVGV4dEFyZWFFbGVtZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMUM3RkFBMTEzM0E1RDM1MDBENjczMkQgLyogSlNYUGF0aFJlc3VsdEN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hQYXRoUmVz
dWx0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTFERTcxMkIxODYx
MkFDMTAwNzM0MTkyIC8qIFRvdWNoRXZlbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRvdWNoRXZlbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE4NzAxLDYgKzE4NzA5LDEwIEBACiAJCQkJMUEwNDA5RjIxQTQzNjc1QzAwOUU0N0YzIC8q
IE1hY2hTZW5kUmlnaHQuY3BwICovLAogCQkJCTFBMDQwOURCMUE0MzYwQjUwMDlFNDdGMyAvKiBN
YWNoU2VuZFJpZ2h0LmggKi8sCiAJCQkJQURCNkIyOTcxOEZCOTAyNDAwODE5NjNFIC8qIE1lbW9y
eVByZXNzdXJlSGFuZGxlckNvY29hLm1tICovLAorCQkJCUExOUQ5MzQ5MUFBMTFCMUUwMEI0NkMy
NCAvKiBOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlci5oICovLAorCQkJCUExOUQ5MzQ4MUFB
MTFCMUUwMEI0NkMyNCAvKiBOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlci5tbSAqLywKKwkJ
CQlBMTg4OTBBRDFBQTEzRjI1MDAyNkMzMDEgLyogUGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0
ZXIuaCAqLywKKwkJCQlBMTg4OTBBQzFBQTEzRjI1MDAyNkMzMDEgLyogUGFyZW50YWxDb250cm9s
c0NvbnRlbnRGaWx0ZXIubW0gKi8sCiAJCQkJMUFBODRGMDMxNDNCQTdCRDAwNTFEMTUzIC8qIFNj
cm9sbENvbnRyb2xsZXIuaCAqLywKIAkJCQkxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Ny
b2xsQ29udHJvbGxlci5tbSAqLywKIAkJCQk1RDU5NzVCMTE5NjM1RjExMDBEMDA4NzggLyogU3lz
dGVtVmVyc2lvbi5oICovLApAQCAtMjQ2MjcsNiArMjQ2MzksNyBAQAogCQkJCUE4NzFERTI3MEEx
NTJBQzgwMEIxMkE2OCAvKiBIVE1MSHRtbEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
NzFERTJBMEExNTJBQzgwMEIxMkE2OCAvKiBIVE1MSUZyYW1lRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThFQTdEMkQwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCUExOUQ5MzRCMUFBMTFCMUUwMEI0NkMyNCAvKiBOZXR3b3JrRXh0
ZW5zaW9uQ29udGVudEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTdEMkIwQTE5Mzg1
NTAwQThFRjVGIC8qIEhUTUxJbWFnZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxMzY5
Q0MwOTczNzRGNjAwRDc0NDYzIC8qIEhUTUxJbnB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3QkM4NDlCMTIzNzBBNEIwMDBDNjE2MSAvKiBIVE1MSW5wdXRTdHJlYW0uaCBpbiBIZWFk
ZXJzICovLApAQCAtMjY1MDUsNiArMjY1MTgsNyBAQAogCQkJCUIyMjI3QTk0MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdQb2x5bGluZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTk3
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwODhBMEUwQTEyNkVGMURCMDA5NzhGN0EgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUExODg5MEFGMUFBMTNGMjUwMDI2QzMwMSAvKiBQYXJlbnRhbENvbnRyb2xz
Q29udGVudEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgxREQ0OUMxM0JBMUE2MDAwREM3
NjI3IC8qIFNWR1Byb3BlcnR5SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEIxMjZF
RjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5VGVhck9mZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MDg4QTBFMEMxMjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5VHJhaXRzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI5NjIyLDYgKzI5NjM2LDcgQEAKIAkJCQk0NTEyNTAyMjE1RENFMzdEMDAyRjg0
RTIgLyogU3BpbkJ1dHRvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMTEw
OTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMzMDlFMTMwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb21tYW5kLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUExOUQ5MzRBMUFBMTFCMUUwMEI0NkMyNCAvKiBOZXR3b3Jr
RXh0ZW5zaW9uQ29udGVudEZpbHRlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTE1MDk5
RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUExRTExNTQ4MTMwMTVDNUQwMDU0QUM4QyAvKiBTcG90TGln
aHRTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBM0UxNTA1RjA4MTAwMUI3NEFD
IC8qIFNRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5NzEzLDYgKzI5NzI4LDcg
QEAKIAkJCQk0MzgxNzYzQjEzQTY5N0Q0MDA3RDExODcgLyogU1ZHQW5pbWF0ZWRMZW5ndGguY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDMxQTJGRDcxM0I3NzA3QTAwNzc5MUU0IC8qIFNWR0FuaW1h
dGVkTGVuZ3RoTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0M0EwRjBCMTEzQUM3RDZEMDBB
NUYwQTcgLyogU1ZHQW5pbWF0ZWROdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTE4ODkw
QUUxQUExM0YyNTAwMjZDMzAxIC8qIFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDMzMUFDNzgxM0I2ODcwMDAwQTlFNUFFIC8qIFNWR0FuaW1hdGVk
TnVtYmVyTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzFBMkY5RDEzQjZGMkIwMDA3Nzkx
RTQgLyogU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwOEI1RjI1NTEzQjVGRkYyMDAyOTU5RUMgLyogU1ZHQW5pbWF0ZWRQYXRoLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKaW5kZXgg
YTMzMzhkNTI2Y2MyZTA2ZTk1OTM0MTA2YzI3MmFlYzY1ZDAxZDliOC4uOGFhZDc4Njk1NzFlZDgx
OGMxZjM3NDE5ZmI2NTVlMWE3OTIzZjA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRMb2FkZXIuY3BwCkBAIC02NjYsOCArNjY2LDcgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6cmVz
cG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmUK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRklMVEVSSU5HKQotICAgIGlmIChDb250ZW50
RmlsdGVyOjpjYW5IYW5kbGVSZXNwb25zZShyZXNwb25zZSkpCi0gICAgICAgIG1fY29udGVudEZp
bHRlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudEZpbHRlcj4ocmVzcG9uc2UpOworICAgIG1f
Y29udGVudEZpbHRlciA9IENvbnRlbnRGaWx0ZXI6OmNyZWF0ZUlmTmVlZGVkKHJlc3BvbnNlKTsK
ICNlbmRpZgogCiAgICAgZnJhbWVMb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigpLmNoZWNrQ29udGVu
dFBvbGljeShtX3Jlc3BvbnNlLCBbdGhpc10oUG9saWN5QWN0aW9uIHBvbGljeSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ29udGVudEZpbHRlci5oCmluZGV4IDg4NTQ1ZDIyNTRjZDk5NzNhYmM3
YWZlMTZkNWIxOWE3ZjhiOTYwMTcuLmYzNjg3ODdjOTAzYmQzZmI0ZDRiMWRmMDFkMTIwNzk1YTQ3
NTJiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRGaWx0ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50RmlsdGVyLmgKQEAgLTI5LDUz
ICsyOSwyNSBAQAogI2lmIEVOQUJMRShDT05URU5UX0ZJTFRFUklORykKIAogI2luY2x1ZGUgIkNv
bnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlci5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi1PQkpD
X0NMQVNTIE5TRGF0YTsKLU9CSkNfQ0xBU1MgV2ViRmlsdGVyRXZhbHVhdG9yOwotI2VuZGlmCiAK
ICNkZWZpbmUgSEFWRV9ORV9GSUxURVJfU09VUkNFIFRBUkdFVF9PU19FTUJFRERFRCB8fCAoIVRB
UkdFVF9PU19JUEhPTkUgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEw
MDAgJiYgQ1BVKFg4Nl82NCkpCiAKLSNpZiBIQVZFKE5FX0ZJTFRFUl9TT1VSQ0UpCi0jaW1wb3J0
IDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotT0JKQ19DTEFTUyBORUZpbHRlclNvdXJjZTsKLU9CSkNf
Q0xBU1MgTlNNdXRhYmxlRGF0YTsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiAKIGNsYXNzIENv
bnRlbnRGaWx0ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBib29sIGNhbkhhbmRsZVJlc3BvbnNl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLQotICAgIGV4cGxpY2l0IENvbnRlbnRGaWx0ZXIo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIH5Db250ZW50Rmls
dGVyKCk7Ci0KLSAgICB2b2lkIGFkZERhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7
Ci0gICAgdm9pZCBmaW5pc2hlZEFkZGluZ0RhdGEoKTsKLSAgICBib29sIG5lZWRzTW9yZURhdGEo
KSBjb25zdDsKLSAgICBib29sIGRpZEJsb2NrRGF0YSgpIGNvbnN0OwotICAgIGNvbnN0IGNoYXIq
IGdldFJlcGxhY2VtZW50RGF0YShpbnQmIGxlbmd0aCkgY29uc3Q7Ci0gICAgQ29udGVudEZpbHRl
clVuYmxvY2tIYW5kbGVyIHVuYmxvY2tIYW5kbGVyKCkgY29uc3Q7CisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxDb250ZW50RmlsdGVyPiBjcmVhdGVJZk5lZWRlZChjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJik7CiAKLXByaXZhdGU6Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUmV0YWluUHRy
PFdlYkZpbHRlckV2YWx1YXRvcj4gbV9wbGF0Zm9ybUNvbnRlbnRGaWx0ZXI7Ci0gICAgUmV0YWlu
UHRyPE5TRGF0YT4gbV9yZXBsYWNlbWVudERhdGE7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIH5Db250
ZW50RmlsdGVyKCkgeyB9CiAKLSNpZiBIQVZFKE5FX0ZJTFRFUl9TT1VSQ0UpCi0gICAgbG9uZyBt
X25lRmlsdGVyU291cmNlU3RhdHVzOwotICAgIFJldGFpblB0cjxORUZpbHRlclNvdXJjZT4gbV9u
ZUZpbHRlclNvdXJjZTsKLSAgICBkaXNwYXRjaF9xdWV1ZV90IG1fbmVGaWx0ZXJTb3VyY2VRdWV1
ZTsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGF0YT4gbV9vcmlnaW5hbERhdGE7Ci0jZW5kaWYK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaGVkQWRkaW5nRGF0YSgpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgbmVlZHNNb3JlRGF0YSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGlk
QmxvY2tEYXRhKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogZ2V0UmVwbGFj
ZW1lbnREYXRhKGludCYgbGVuZ3RoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb250ZW50Rmls
dGVyVW5ibG9ja0hhbmRsZXIgdW5ibG9ja0hhbmRsZXIoKSBjb25zdCA9IDA7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9OZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
OWJiYTllMWEwMDZkNjJmMWNlMWRjYzk1NzI4NDgwMDFiMWJjMjgxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRG
aWx0ZXIuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrRXh0
ZW5zaW9uQ29udGVudEZpbHRlcl9oCisjZGVmaW5lIE5ldHdvcmtFeHRlbnNpb25Db250ZW50Rmls
dGVyX2gKKworI2luY2x1ZGUgIkNvbnRlbnRGaWx0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGls
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgTkVGaWx0ZXJT
b3VyY2U7CitPQkpDX0NMQVNTIE5TTXV0YWJsZURhdGE7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIgZmluYWwgOiBwdWJsaWMgQ29u
dGVudEZpbHRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgY2FuSGFuZGxlUmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0
d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI+IGNyZWF0ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CisKKyAgICBleHBsaWNpdCBOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlcihjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJik7CisgICAgfk5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyKCkg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGFkZERhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hlZEFkZGluZ0RhdGEoKSBvdmVycmlkZTsKKyAg
ICBib29sIG5lZWRzTW9yZURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGRpZEJsb2Nr
RGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IGNoYXIqIGdldFJlcGxhY2VtZW50RGF0
YShpbnQmIGxlbmd0aCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ29udGVudEZpbHRlclVuYmxvY2tI
YW5kbGVyIHVuYmxvY2tIYW5kbGVyKCkgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
TlNJbnRlZ2VyIG1fbmVGaWx0ZXJTb3VyY2VTdGF0dXM7CisgICAgUmV0YWluUHRyPE5FRmlsdGVy
U291cmNlPiBtX25lRmlsdGVyU291cmNlOworICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9uZUZpbHRl
clNvdXJjZVF1ZXVlOworICAgIFJldGFpblB0cjxOU011dGFibGVEYXRhPiBtX29yaWdpbmFsRGF0
YTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE5ldHdvcmtFeHRl
bnNpb25Db250ZW50RmlsdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL05ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjM2ODljYzNhNTI5MjNkMDhkOTAzNmFjMTJhMjBmOTZlZmE2MWIxYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL05ldHdvcmtFeHRlbnNpb25Db250
ZW50RmlsdGVyLm1tCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlci5oIgorCisjaWYg
SEFWRShORV9GSUxURVJfU09VUkNFKQorCisjaW1wb3J0ICJORUZpbHRlclNvdXJjZVNQSS5oIgor
I2ltcG9ydCAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNp
bXBvcnQgPG9iamMvcnVudGltZS5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLKE5ldHdvcmtFeHRl
bnNpb24pOworU09GVF9MSU5LX0NMQVNTKE5ldHdvcmtFeHRlbnNpb24sIE5FRmlsdGVyU291cmNl
KTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIE5ldHdvcmtFeHRlbnNpb25Db250ZW50
RmlsdGVyOjpjYW5IYW5kbGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKK3sKKyAgICByZXR1cm4gcmVzcG9uc2UudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgp
ICYmIFtnZXRORUZpbHRlclNvdXJjZUNsYXNzKCkgZmlsdGVyUmVxdWlyZWRdOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI+IE5ldHdvcmtFeHRlbnNp
b25Db250ZW50RmlsdGVyOjpjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya0V4dGVuc2lvbkNvbnRlbnRG
aWx0ZXI+KHJlc3BvbnNlKTsKK30KKworTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI6Ok5l
dHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQorICAgIDogbV9uZUZpbHRlclNvdXJjZVN0YXR1cyB7IE5FRmlsdGVyU291cmNlU3RhdHVz
TmVlZHNNb3JlRGF0YSB9CisgICAgLCBtX25lRmlsdGVyU291cmNlIHsgYWRvcHROUyhbYWxsb2NO
RUZpbHRlclNvdXJjZUluc3RhbmNlKCkgaW5pdFdpdGhVUkw6W3Jlc3BvbnNlLm5zVVJMUmVzcG9u
c2UoKSBVUkxdIGRpcmVjdGlvbjpORUZpbHRlclNvdXJjZURpcmVjdGlvbkluYm91bmQgc29ja2V0
SWRlbnRpZmllcjowXSkgfQorICAgICwgbV9uZUZpbHRlclNvdXJjZVF1ZXVlIHsgZGlzcGF0Y2hf
cXVldWVfY3JlYXRlKCJjb20uYXBwbGUuV2ViQ29yZS5ORUZpbHRlclNvdXJjZVF1ZXVlIiwgRElT
UEFUQ0hfUVVFVUVfU0VSSUFMKSB9Cit7CisgICAgQVNTRVJUKFtnZXRORUZpbHRlclNvdXJjZUNs
YXNzKCkgZmlsdGVyUmVxdWlyZWRdKTsKKworICAgIGxvbmcgbG9uZyBleHBlY3RlZENvbnRlbnRT
aXplID0gW3Jlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKSBleHBlY3RlZENvbnRlbnRMZW5ndGhdOwor
ICAgIGlmIChleHBlY3RlZENvbnRlbnRTaXplIDwgMCkKKyAgICAgICAgbV9vcmlnaW5hbERhdGEg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdF0pOworICAgIGVsc2UKKyAgICAg
ICAgbV9vcmlnaW5hbERhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxvY10gaW5pdFdp
dGhDYXBhY2l0eTooTlNVSW50ZWdlcilleHBlY3RlZENvbnRlbnRTaXplXSk7Cit9CisKK05ldHdv
cmtFeHRlbnNpb25Db250ZW50RmlsdGVyOjp+TmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXIo
KQoreworICAgIGRpc3BhdGNoX3JlbGVhc2UobV9uZUZpbHRlclNvdXJjZVF1ZXVlKTsKK30KKwor
dm9pZCBOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlcjo6YWRkRGF0YShjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQoreworICAgIC8vIEZJWE1FOiBORUZpbHRlclNvdXJjZSBkb2Vzbid0
IGJ1ZmZlciBkYXRhIGxpa2UgV2ViRmlsdGVyRXZhbHVhdG9yIGRvZXMsCisgICAgLy8gc28gd2Ug
bmVlZCB0byBkbyBpdCBvdXJzZWx2ZXMgc28gZ2V0UmVwbGFjZW1lbnREYXRhKCkgY2FuIHJldHVy
biB0aGUKKyAgICAvLyBvcmlnaW5hbCBieXRlcyBiYWNrIHRvIHRoZSBsb2FkZXIuIFdlIHNob3Vs
ZCBmaW5kIGEgd2F5IHRvIHJlbW92ZSB0aGlzCisgICAgLy8gYWRkaXRpb25hbCBjb3B5LgorICAg
IFttX29yaWdpbmFsRGF0YSBhcHBlbmRCeXRlczpkYXRhIGxlbmd0aDpsZW5ndGhdOworCisgICAg
ZGlzcGF0Y2hfc2VtYXBob3JlX3QgbmVGaWx0ZXJTb3VyY2VTZW1hcGhvcmUgPSBkaXNwYXRjaF9z
ZW1hcGhvcmVfY3JlYXRlKDApOworICAgIFttX25lRmlsdGVyU291cmNlIGFkZERhdGE6W05TRGF0
YSBkYXRhV2l0aEJ5dGVzOih2b2lkKilkYXRhIGxlbmd0aDpsZW5ndGhdIHdpdGhDb21wbGV0aW9u
UXVldWU6bV9uZUZpbHRlclNvdXJjZVF1ZXVlIGNvbXBsZXRpb25IYW5kbGVyOl4oTkVGaWx0ZXJT
b3VyY2VTdGF0dXMgc3RhdHVzLCBOU0RhdGEgKikgeworICAgICAgICBtX25lRmlsdGVyU291cmNl
U3RhdHVzID0gc3RhdHVzOworICAgICAgICBkaXNwYXRjaF9zZW1hcGhvcmVfc2lnbmFsKG5lRmls
dGVyU291cmNlU2VtYXBob3JlKTsKKyAgICB9XTsKKworICAgIC8vIEZJWE1FOiBXZSBoYXZlIHRv
IGJsb2NrIGhlcmUgc2luY2UgRG9jdW1lbnRMb2FkZXIgZXhwZWN0cyB0byBoYXZlIGEKKyAgICAv
LyBibG9ja2VkL25vdCBibG9ja2VkIGFuc3dlciBmcm9tIHRoZSBmaWx0ZXIgaW1tZWRpYXRlbHkg
YWZ0ZXIgY2FsbGluZworICAgIC8vIGFkZERhdGEoKS4gV2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8g
bWFrZSB0aGlzIGFzeW5jaHJvbm91cy4KKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfd2FpdChuZUZp
bHRlclNvdXJjZVNlbWFwaG9yZSwgRElTUEFUQ0hfVElNRV9GT1JFVkVSKTsKKyAgICBkaXNwYXRj
aF9yZWxlYXNlKG5lRmlsdGVyU291cmNlU2VtYXBob3JlKTsKK30KKwordm9pZCBOZXR3b3JrRXh0
ZW5zaW9uQ29udGVudEZpbHRlcjo6ZmluaXNoZWRBZGRpbmdEYXRhKCkKK3sKKyAgICBkaXNwYXRj
aF9zZW1hcGhvcmVfdCBuZUZpbHRlclNvdXJjZVNlbWFwaG9yZSA9IGRpc3BhdGNoX3NlbWFwaG9y
ZV9jcmVhdGUoMCk7CisgICAgW21fbmVGaWx0ZXJTb3VyY2UgZGF0YUNvbXBsZXRlV2l0aENvbXBs
ZXRpb25RdWV1ZTptX25lRmlsdGVyU291cmNlUXVldWUgY29tcGxldGlvbkhhbmRsZXI6XihORUZp
bHRlclNvdXJjZVN0YXR1cyBzdGF0dXMsIE5TRGF0YSAqKSB7CisgICAgICAgIG1fbmVGaWx0ZXJT
b3VyY2VTdGF0dXMgPSBzdGF0dXM7CisgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwo
bmVGaWx0ZXJTb3VyY2VTZW1hcGhvcmUpOworICAgIH1dOworCisgICAgLy8gRklYTUU6IFdlIGhh
dmUgdG8gYmxvY2sgaGVyZSBzaW5jZSBEb2N1bWVudExvYWRlciBleHBlY3RzIHRvIGhhdmUgYQor
ICAgIC8vIGJsb2NrZWQvbm90IGJsb2NrZWQgYW5zd2VyIGZyb20gdGhlIGZpbHRlciBpbW1lZGlh
dGVseSBhZnRlciBjYWxsaW5nCisgICAgLy8gZmluaXNoZWRBZGRpbmdEYXRhKCkuIFdlIHNob3Vs
ZCBmaW5kIGEgd2F5IHRvIG1ha2UgdGhpcyBhc3luY2hyb25vdXMuCisgICAgZGlzcGF0Y2hfc2Vt
YXBob3JlX3dhaXQobmVGaWx0ZXJTb3VyY2VTZW1hcGhvcmUsIERJU1BBVENIX1RJTUVfRk9SRVZF
Uik7CisgICAgZGlzcGF0Y2hfcmVsZWFzZShuZUZpbHRlclNvdXJjZVNlbWFwaG9yZSk7Cit9CisK
K2Jvb2wgTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI6Om5lZWRzTW9yZURhdGEoKSBjb25z
dAoreworICAgIHJldHVybiBtX25lRmlsdGVyU291cmNlU3RhdHVzID09IE5FRmlsdGVyU291cmNl
U3RhdHVzTmVlZHNNb3JlRGF0YTsKK30KKworYm9vbCBOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZp
bHRlcjo6ZGlkQmxvY2tEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZUZpbHRlclNvdXJj
ZVN0YXR1cyA9PSBORUZpbHRlclNvdXJjZVN0YXR1c0Jsb2NrOworfQorCitjb25zdCBjaGFyKiBO
ZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlcjo6Z2V0UmVwbGFjZW1lbnREYXRhKGludCYgbGVu
Z3RoKSBjb25zdAoreworICAgIGlmIChkaWRCbG9ja0RhdGEoKSkgeworICAgICAgICBsZW5ndGgg
PSAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBsZW5ndGggPSBbbV9v
cmlnaW5hbERhdGEgbGVuZ3RoXTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KFttX29yaWdpbmFsRGF0YSBieXRlc10pOworfQorCitDb250ZW50RmlsdGVyVW5ibG9ja0hhbmRs
ZXIgTmV0d29ya0V4dGVuc2lvbkNvbnRlbnRGaWx0ZXI6OnVuYmxvY2tIYW5kbGVyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4geyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBIQVZFKE5FX0ZJTFRFUl9TT1VSQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9QYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvUGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hNjlhNWJiMzFmY2Q1Njc2YzlkODQ0MDc3MGY0YWE0MDYzMDdmYTNmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFyZW50YWxDb250cm9s
c0NvbnRlbnRGaWx0ZXIuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQ
YXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlcl9oCisjZGVmaW5lIFBhcmVudGFsQ29udHJvbHND
b250ZW50RmlsdGVyX2gKKworI2luY2x1ZGUgIkNvbnRlbnRGaWx0ZXIuaCIKKyNpbmNsdWRlIDx3
dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1Mg
TlNEYXRhOworT0JKQ19DTEFTUyBXZWJGaWx0ZXJFdmFsdWF0b3I7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXIgZmluYWwgOiBwdWJs
aWMgQ29udGVudEZpbHRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgY2FuSGFuZGxlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8UGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXI+IGNyZWF0ZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJik7CisKKyAgICBleHBsaWNpdCBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlcihj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisKKyAgICB2b2lkIGFkZERhdGEoY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hlZEFkZGluZ0RhdGEo
KSBvdmVycmlkZTsKKyAgICBib29sIG5lZWRzTW9yZURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBib29sIGRpZEJsb2NrRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IGNoYXIqIGdl
dFJlcGxhY2VtZW50RGF0YShpbnQmIGxlbmd0aCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ29udGVu
dEZpbHRlclVuYmxvY2tIYW5kbGVyIHVuYmxvY2tIYW5kbGVyKCkgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgUmV0YWluUHRyPFdlYkZpbHRlckV2YWx1YXRvcj4gbV93ZWJGaWx0ZXJF
dmFsdWF0b3I7CisgICAgUmV0YWluUHRyPE5TRGF0YT4gbV9yZXBsYWNlbWVudERhdGE7Cit9Owor
ICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUGFyZW50YWxDb250cm9s
c0NvbnRlbnRGaWx0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvUGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9QYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
NWNkOTVjZTY5NjIyOTQ5NTc2MDMyOTg5NWRlNGI5YmE0YjUzMDgyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFyZW50YWxDb250cm9sc0NvbnRlbnRG
aWx0ZXIubW0KQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiUGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXIuaCIKKworI2ltcG9ydCAi
UmVzb3VyY2VSZXNwb25zZS5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgIldl
YkZpbHRlckV2YWx1YXRvclNQSS5oIgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisKK1NPRlRf
TElOS19QUklWQVRFX0ZSQU1FV09SSyhXZWJDb250ZW50QW5hbHlzaXMpOworU09GVF9MSU5LX0NM
QVNTKFdlYkNvbnRlbnRBbmFseXNpcywgV2ViRmlsdGVyRXZhbHVhdG9yKTsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyOjpjYW5IYW5k
bGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBpZiAo
IXJlc3BvbnNlLnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKFtnZXRXZWJGaWx0ZXJFdmFsdWF0b3JDbGFzcygpIGlzTWFuYWdl
ZFNlc3Npb25dKSB7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBpZiAocmVzcG9uc2UudXJs
KCkucHJvdG9jb2xJcygiaHR0cHMiKSkKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UGFyZW50
YWxDb250cm9sc0NvbnRlbnRGaWx0ZXI+IFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyOjpj
cmVhdGUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8UGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXI+KHJlc3BvbnNlKTsK
K30KKworUGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXI6OlBhcmVudGFsQ29udHJvbHNDb250
ZW50RmlsdGVyKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorICAgIDogbV93ZWJG
aWx0ZXJFdmFsdWF0b3IgeyBhZG9wdE5TKFthbGxvY1dlYkZpbHRlckV2YWx1YXRvckluc3RhbmNl
KCkgaW5pdFdpdGhSZXNwb25zZTpyZXNwb25zZS5uc1VSTFJlc3BvbnNlKCldKSB9Cit7CisgICAg
QVNTRVJUKFtnZXRXZWJGaWx0ZXJFdmFsdWF0b3JDbGFzcygpIGlzTWFuYWdlZFNlc3Npb25dKTsK
K30KKwordm9pZCBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlcjo6YWRkRGF0YShjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVCghW21fcmVwbGFjZW1lbnREYXRh
LmdldCgpIGxlbmd0aF0pOworICAgIG1fcmVwbGFjZW1lbnREYXRhID0gW21fd2ViRmlsdGVyRXZh
bHVhdG9yIGFkZERhdGE6W05TRGF0YSBkYXRhV2l0aEJ5dGVzTm9Db3B5Oih2b2lkKilkYXRhIGxl
bmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5PXV07CisgICAgQVNTRVJUKG5lZWRzTW9yZURhdGEo
KSB8fCBbbV9yZXBsYWNlbWVudERhdGEuZ2V0KCkgbGVuZ3RoXSk7Cit9CisKK3ZvaWQgUGFyZW50
YWxDb250cm9sc0NvbnRlbnRGaWx0ZXI6OmZpbmlzaGVkQWRkaW5nRGF0YSgpCit7CisgICAgQVNT
RVJUKCFbbV9yZXBsYWNlbWVudERhdGEuZ2V0KCkgbGVuZ3RoXSk7CisgICAgbV9yZXBsYWNlbWVu
dERhdGEgPSBbbV93ZWJGaWx0ZXJFdmFsdWF0b3IgZGF0YUNvbXBsZXRlXTsKK30KKworYm9vbCBQ
YXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlcjo6bmVlZHNNb3JlRGF0YSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFttX3dlYkZpbHRlckV2YWx1YXRvciBmaWx0ZXJTdGF0ZV0gPT0ga1dGRVN0YXRl
QnVmZmVyaW5nOworfQorCitib29sIFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyOjpkaWRC
bG9ja0RhdGEoKSBjb25zdAoreworICAgIHJldHVybiBbbV93ZWJGaWx0ZXJFdmFsdWF0b3Igd2Fz
QmxvY2tlZF07Cit9CisKK2NvbnN0IGNoYXIqIFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVy
OjpnZXRSZXBsYWNlbWVudERhdGEoaW50JiBsZW5ndGgpIGNvbnN0Cit7CisgICAgbGVuZ3RoID0g
W21fcmVwbGFjZW1lbnREYXRhIGxlbmd0aF07CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihbbV9yZXBsYWNlbWVudERhdGEgYnl0ZXNdKTsKK30KKworQ29udGVudEZpbHRlclVu
YmxvY2tIYW5kbGVyIFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyOjp1bmJsb2NrSGFuZGxl
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlciB7IG1f
d2ViRmlsdGVyRXZhbHVhdG9yLmdldCgpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db250ZW50RmlsdGVyTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRlbnRGaWx0ZXJNYWMubW0KaW5k
ZXggYWZjNmMxMTNjZGI4NGEyYWJlYjQyOTEyNzU0MGQwNjBiZTYyMWZlZC4uOGYwOWU1MGNkOWEx
MmMzNTcwNmM1MjNkODYwYzU0ODA0Yjc0YTIzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0NvbnRlbnRGaWx0ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0NvbnRlbnRGaWx0ZXJNYWMubW0KQEAgLTIzLDE4MCArMjMsMTQyIEBACiAgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorLy8gRklYTUU6IFJlbmFtZSB0
byBDb250ZW50RmlsdGVyLmNwcCBhbmQgbW92ZSB0byBwbGF0Zm9ybS8uCisKICNpbXBvcnQgImNv
bmZpZy5oIgogI2ltcG9ydCAiQ29udGVudEZpbHRlci5oIgogCiAjaWYgRU5BQkxFKENPTlRFTlRf
RklMVEVSSU5HKQogCi0jaW1wb3J0ICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW1wb3J0ICJTb2Z0
TGlua2luZy5oIgotI2ltcG9ydCAiV2ViRmlsdGVyRXZhbHVhdG9yU1BJLmgiCi0jaW1wb3J0IDxv
YmpjL3J1bnRpbWUuaD4KLQotI2lmIEhBVkUoTkVfRklMVEVSX1NPVVJDRSkKLSNpbXBvcnQgIk5F
RmlsdGVyU291cmNlU1BJLmgiCi1TT0ZUX0xJTktfRlJBTUVXT1JLKE5ldHdvcmtFeHRlbnNpb24p
OwotU09GVF9MSU5LX0NMQVNTKE5ldHdvcmtFeHRlbnNpb24sIE5FRmlsdGVyU291cmNlKTsKLSNl
bmRpZgotCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoV2ViQ29udGVudEFuYWx5c2lzKTsK
LVNPRlRfTElOS19DTEFTUyhXZWJDb250ZW50QW5hbHlzaXMsIFdlYkZpbHRlckV2YWx1YXRvcik7
CisjaW1wb3J0ICJOZXR3b3JrRXh0ZW5zaW9uQ29udGVudEZpbHRlci5oIgorI2ltcG9ydCAiUGFy
ZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXIuaCIKKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNv
bnRlbnRGaWx0ZXI6OkNvbnRlbnRGaWx0ZXIoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCi0jaWYgSEFWRShORV9GSUxURVJfU09VUkNFKQotICAgIDogbV9uZUZpbHRlclNvdXJjZVN0
YXR1cyhORUZpbHRlclNvdXJjZVN0YXR1c05lZWRzTW9yZURhdGEpCi0gICAgLCBtX25lRmlsdGVy
U291cmNlUXVldWUoMCkKLSNlbmRpZgotewotICAgIGlmIChbZ2V0V2ViRmlsdGVyRXZhbHVhdG9y
Q2xhc3MoKSBpc01hbmFnZWRTZXNzaW9uXSkKLSAgICAgICAgbV9wbGF0Zm9ybUNvbnRlbnRGaWx0
ZXIgPSBhZG9wdE5TKFthbGxvY1dlYkZpbHRlckV2YWx1YXRvckluc3RhbmNlKCkgaW5pdFdpdGhS
ZXNwb25zZTpyZXNwb25zZS5uc1VSTFJlc3BvbnNlKCldKTsKK3N0cnVjdCBDb250ZW50RmlsdGVy
VHlwZSB7CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKT4gY2FuSGFuZGxlUmVzcG9uc2U7CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxzdGQ6OnVu
aXF1ZV9wdHI8Q29udGVudEZpbHRlcj4oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpPiBjcmVhdGU7
Cit9OwogCi0jaWYgSEFWRShORV9GSUxURVJfU09VUkNFKQotICAgIGlmIChbZ2V0TkVGaWx0ZXJT
b3VyY2VDbGFzcygpIGZpbHRlclJlcXVpcmVkXSkgewotICAgICAgICBtX25lRmlsdGVyU291cmNl
ID0gYWRvcHROUyhbYWxsb2NORUZpbHRlclNvdXJjZUluc3RhbmNlKCkgaW5pdFdpdGhVUkw6W3Jl
c3BvbnNlLm5zVVJMUmVzcG9uc2UoKSBVUkxdIGRpcmVjdGlvbjpORUZpbHRlclNvdXJjZURpcmVj
dGlvbkluYm91bmQgc29ja2V0SWRlbnRpZmllcjowXSk7Ci0gICAgICAgIG1fbmVGaWx0ZXJTb3Vy
Y2VRdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLldlYkNvcmUuTkVGaWx0
ZXJTb3VyY2VRdWV1ZSIsIERJU1BBVENIX1FVRVVFX1NFUklBTCk7Ci0gICAgICAgIAotICAgICAg
ICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50U2l6ZSA9IFtyZXNwb25zZS5uc1VSTFJlc3BvbnNl
KCkgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXTsKLSAgICAgICAgaWYgKGV4cGVjdGVkQ29udGVudFNp
emUgPCAwKQotICAgICAgICAgICAgbV9vcmlnaW5hbERhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
RGF0YSBhbGxvY10gaW5pdF0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX29yaWdpbmFs
RGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OihO
U1VJbnRlZ2VyKWV4cGVjdGVkQ29udGVudFNpemVdKTsKLSAgICB9Ci0jZW5kaWYKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorc3RhdGljIGlubGluZSBDb250ZW50RmlsdGVyVHlwZSBjb250ZW50Rmls
dGVyVHlwZSgpCit7CisgICAgcmV0dXJuIHsgVDo6Y2FuSGFuZGxlUmVzcG9uc2UsIFQ6OmNyZWF0
ZSB9OwogfQogCi1Db250ZW50RmlsdGVyOjp+Q29udGVudEZpbHRlcigpCitzdGF0aWMgY29uc3Qg
VmVjdG9yPENvbnRlbnRGaWx0ZXJUeXBlPiYgY29udGVudEZpbHRlclR5cGVzKCkKIHsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPENvbnRlbnRGaWx0ZXJUeXBlPj4gdHlwZXMoCisg
ICAgICAgIFZlY3RvcjxDb250ZW50RmlsdGVyVHlwZT4oeworICAgICAgICAgICAgY29udGVudEZp
bHRlclR5cGU8UGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXI+KCksCiAjaWYgSEFWRShORV9G
SUxURVJfU09VUkNFKQotICAgIGlmIChtX25lRmlsdGVyU291cmNlUXVldWUpCi0gICAgICAgIGRp
c3BhdGNoX3JlbGVhc2UobV9uZUZpbHRlclNvdXJjZVF1ZXVlKTsKKyAgICAgICAgICAgIGNvbnRl
bnRGaWx0ZXJUeXBlPE5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyPigpCiAjZW5kaWYKKyAg
ICAgICAgfSkKKyAgICApOworICAgIHJldHVybiB0eXBlczsKIH0KIAotYm9vbCBDb250ZW50Rmls
dGVyOjpjYW5IYW5kbGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
LXsKLSAgICBpZiAoIXJlc3BvbnNlLnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworY2xhc3MgQ29udGVudEZpbHRlckNvbGxlY3Rpb24gZmluYWwg
OiBwdWJsaWMgQ29udGVudEZpbHRlciB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29udGFpbmVyID0g
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50RmlsdGVyPj47CiAKLSAgICBpZiAoW2dldFdl
YkZpbHRlckV2YWx1YXRvckNsYXNzKCkgaXNNYW5hZ2VkU2Vzc2lvbl0pIHsKLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgICAgIGlmIChyZXNwb25zZS51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpKQot
I2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBleHBsaWNpdCBDb250ZW50Rmls
dGVyQ29sbGVjdGlvbihDb250YWluZXIpOworCisgICAgdm9pZCBhZGREYXRhKGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGgpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNoZWRBZGRpbmdEYXRh
KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBuZWVkc01vcmVEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBkaWRCbG9ja0RhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBjaGFyKiBn
ZXRSZXBsYWNlbWVudERhdGEoaW50JiBsZW5ndGgpIGNvbnN0IG92ZXJyaWRlOworICAgIENvbnRl
bnRGaWx0ZXJVbmJsb2NrSGFuZGxlciB1bmJsb2NrSGFuZGxlcigpIGNvbnN0IG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIENvbnRhaW5lciBtX2NvbnRlbnRGaWx0ZXJzOworfTsKKworc3RkOjp1
bmlxdWVfcHRyPENvbnRlbnRGaWx0ZXI+IENvbnRlbnRGaWx0ZXI6OmNyZWF0ZUlmTmVlZGVkKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIENvbnRlbnRGaWx0ZXJDb2xs
ZWN0aW9uOjpDb250YWluZXIgZmlsdGVyczsKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiBjb250ZW50
RmlsdGVyVHlwZXMoKSkgeworICAgICAgICBpZiAodHlwZS5jYW5IYW5kbGVSZXNwb25zZShyZXNw
b25zZSkpCisgICAgICAgICAgICBmaWx0ZXJzLmFwcGVuZCh0eXBlLmNyZWF0ZShyZXNwb25zZSkp
OwogICAgIH0KIAotI2lmIEhBVkUoTkVfRklMVEVSX1NPVVJDRSkKLSAgICByZXR1cm4gW2dldE5F
RmlsdGVyU291cmNlQ2xhc3MoKSBmaWx0ZXJSZXF1aXJlZF07Ci0jZWxzZQotICAgIHJldHVybiBm
YWxzZTsKLSNlbmRpZgorICAgIGlmIChmaWx0ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50RmlsdGVyQ29s
bGVjdGlvbj4oV1RGOjptb3ZlKGZpbHRlcnMpKTsKIH0KIAotdm9pZCBDb250ZW50RmlsdGVyOjph
ZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCitDb250ZW50RmlsdGVyQ29sbGVj
dGlvbjo6Q29udGVudEZpbHRlckNvbGxlY3Rpb24oQ29udGFpbmVyIGNvbnRlbnRGaWx0ZXJzKQor
ICAgIDogbV9jb250ZW50RmlsdGVycyB7IFdURjo6bW92ZShjb250ZW50RmlsdGVycykgfQogewot
ICAgIEFTU0VSVChuZWVkc01vcmVEYXRhKCkpOworICAgIEFTU0VSVCghbV9jb250ZW50RmlsdGVy
cy5pc0VtcHR5KCkpOworfQogCi0gICAgaWYgKG1fcGxhdGZvcm1Db250ZW50RmlsdGVyKSB7Ci0g
ICAgICAgIEFTU0VSVCghW21fcmVwbGFjZW1lbnREYXRhLmdldCgpIGxlbmd0aF0pOwotICAgICAg
ICBtX3JlcGxhY2VtZW50RGF0YSA9IFttX3BsYXRmb3JtQ29udGVudEZpbHRlciBhZGREYXRhOltO
U0RhdGEgZGF0YVdpdGhCeXRlc05vQ29weToodm9pZCopZGF0YSBsZW5ndGg6bGVuZ3RoIGZyZWVX
aGVuRG9uZTpOT11dOwotICAgICAgICBBU1NFUlQobmVlZHNNb3JlRGF0YSgpIHx8IFttX3JlcGxh
Y2VtZW50RGF0YS5nZXQoKSBsZW5ndGhdKTsKLSAgICB9Cit2b2lkIENvbnRlbnRGaWx0ZXJDb2xs
ZWN0aW9uOjphZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgQVNT
RVJUKG5lZWRzTW9yZURhdGEoKSk7CiAKLSNpZiBIQVZFKE5FX0ZJTFRFUl9TT1VSQ0UpCi0gICAg
aWYgKCFtX25lRmlsdGVyU291cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTog
TkVGaWx0ZXJTb3VyY2UgZG9lc24ndCBidWZmZXIgZGF0YSBsaWtlIFdlYkZpbHRlckV2YWx1YXRv
ciBkb2VzLAotICAgIC8vIHNvIHdlIG5lZWQgdG8gZG8gaXQgb3Vyc2VsdmVzIHNvIGdldFJlcGxh
Y2VtZW50RGF0YSgpIGNhbiByZXR1cm4gdGhlCi0gICAgLy8gb3JpZ2luYWwgYnl0ZXMgYmFjayB0
byB0aGUgbG9hZGVyLiBXZSBzaG91bGQgZmluZCBhIHdheSB0byByZW1vdmUgdGhpcwotICAgIC8v
IGFkZGl0aW9uYWwgY29weS4KLSAgICBbbV9vcmlnaW5hbERhdGEgYXBwZW5kQnl0ZXM6ZGF0YSBs
ZW5ndGg6bGVuZ3RoXTsKLQotICAgIGRpc3BhdGNoX3NlbWFwaG9yZV90IG5lRmlsdGVyU291cmNl
U2VtYXBob3JlID0gZGlzcGF0Y2hfc2VtYXBob3JlX2NyZWF0ZSgwKTsKLSAgICBbbV9uZUZpbHRl
clNvdXJjZSBhZGREYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRlczoodm9pZCopZGF0YSBsZW5ndGg6
bGVuZ3RoXSB3aXRoQ29tcGxldGlvblF1ZXVlOm1fbmVGaWx0ZXJTb3VyY2VRdWV1ZSBjb21wbGV0
aW9uSGFuZGxlcjpeKE5FRmlsdGVyU291cmNlU3RhdHVzIHN0YXR1cywgTlNEYXRhICopIHsKLSAg
ICAgICAgbV9uZUZpbHRlclNvdXJjZVN0YXR1cyA9IHN0YXR1czsKLSAgICAgICAgZGlzcGF0Y2hf
c2VtYXBob3JlX3NpZ25hbChuZUZpbHRlclNvdXJjZVNlbWFwaG9yZSk7Ci0gICAgfV07Ci0KLSAg
ICAvLyBGSVhNRTogV2UgaGF2ZSB0byBibG9jayBoZXJlIHNpbmNlIERvY3VtZW50TG9hZGVyIGV4
cGVjdHMgdG8gaGF2ZSBhCi0gICAgLy8gYmxvY2tlZC9ub3QgYmxvY2tlZCBhbnN3ZXIgZnJvbSB0
aGUgZmlsdGVyIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcKLSAgICAvLyBhZGREYXRhKCkuIFdl
IHNob3VsZCBmaW5kIGEgd2F5IHRvIG1ha2UgdGhpcyBhc3luY2hyb25vdXMuCi0gICAgZGlzcGF0
Y2hfc2VtYXBob3JlX3dhaXQobmVGaWx0ZXJTb3VyY2VTZW1hcGhvcmUsIERJU1BBVENIX1RJTUVf
Rk9SRVZFUik7Ci0gICAgZGlzcGF0Y2hfcmVsZWFzZShuZUZpbHRlclNvdXJjZVNlbWFwaG9yZSk7
Ci0jZW5kaWYKKyAgICBmb3IgKGF1dG8mIGNvbnRlbnRGaWx0ZXIgOiBtX2NvbnRlbnRGaWx0ZXJz
KQorICAgICAgICBjb250ZW50RmlsdGVyLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CiB9CiAgICAg
Ci12b2lkIENvbnRlbnRGaWx0ZXI6OmZpbmlzaGVkQWRkaW5nRGF0YSgpCit2b2lkIENvbnRlbnRG
aWx0ZXJDb2xsZWN0aW9uOjpmaW5pc2hlZEFkZGluZ0RhdGEoKQogewogICAgIEFTU0VSVChuZWVk
c01vcmVEYXRhKCkpOwogCi0gICAgaWYgKG1fcGxhdGZvcm1Db250ZW50RmlsdGVyKSB7Ci0gICAg
ICAgIEFTU0VSVCghW21fcmVwbGFjZW1lbnREYXRhLmdldCgpIGxlbmd0aF0pOwotICAgICAgICBt
X3JlcGxhY2VtZW50RGF0YSA9IFttX3BsYXRmb3JtQ29udGVudEZpbHRlciBkYXRhQ29tcGxldGVd
OwotICAgIH0KLQotI2lmIEhBVkUoTkVfRklMVEVSX1NPVVJDRSkKLSAgICBpZiAoIW1fbmVGaWx0
ZXJTb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRpc3BhdGNoX3NlbWFwaG9yZV90IG5l
RmlsdGVyU291cmNlU2VtYXBob3JlID0gZGlzcGF0Y2hfc2VtYXBob3JlX2NyZWF0ZSgwKTsKLSAg
ICBbbV9uZUZpbHRlclNvdXJjZSBkYXRhQ29tcGxldGVXaXRoQ29tcGxldGlvblF1ZXVlOm1fbmVG
aWx0ZXJTb3VyY2VRdWV1ZSBjb21wbGV0aW9uSGFuZGxlcjpeKE5FRmlsdGVyU291cmNlU3RhdHVz
IHN0YXR1cywgTlNEYXRhICopIHsKLSAgICAgICAgbV9uZUZpbHRlclNvdXJjZVN0YXR1cyA9IHN0
YXR1czsKLSAgICAgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChuZUZpbHRlclNvdXJjZVNl
bWFwaG9yZSk7Ci0gICAgfV07Ci0KLSAgICAvLyBGSVhNRTogV2UgaGF2ZSB0byBibG9jayBoZXJl
IHNpbmNlIERvY3VtZW50TG9hZGVyIGV4cGVjdHMgdG8gaGF2ZSBhCi0gICAgLy8gYmxvY2tlZC9u
b3QgYmxvY2tlZCBhbnN3ZXIgZnJvbSB0aGUgZmlsdGVyIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxp
bmcKLSAgICAvLyBmaW5pc2hlZEFkZGluZ0RhdGEoKS4gV2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8g
bWFrZSB0aGlzIGFzeW5jaHJvbm91cy4KLSAgICBkaXNwYXRjaF9zZW1hcGhvcmVfd2FpdChuZUZp
bHRlclNvdXJjZVNlbWFwaG9yZSwgRElTUEFUQ0hfVElNRV9GT1JFVkVSKTsKLSAgICBkaXNwYXRj
aF9yZWxlYXNlKG5lRmlsdGVyU291cmNlU2VtYXBob3JlKTsKLSNlbmRpZgorICAgIGZvciAoYXV0
byYgY29udGVudEZpbHRlciA6IG1fY29udGVudEZpbHRlcnMpCisgICAgICAgIGNvbnRlbnRGaWx0
ZXItPmZpbmlzaGVkQWRkaW5nRGF0YSgpOwogCiAgICAgQVNTRVJUKCFuZWVkc01vcmVEYXRhKCkp
OwogfQogCi1ib29sIENvbnRlbnRGaWx0ZXI6Om5lZWRzTW9yZURhdGEoKSBjb25zdAorYm9vbCBD
b250ZW50RmlsdGVyQ29sbGVjdGlvbjo6bmVlZHNNb3JlRGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFttX3BsYXRmb3JtQ29udGVudEZpbHRlciBmaWx0ZXJTdGF0ZV0gPT0ga1dGRVN0YXRlQnVm
ZmVyaW5nCi0jaWYgSEFWRShORV9GSUxURVJfU09VUkNFKQotICAgICAgICB8fCAobV9uZUZpbHRl
clNvdXJjZSAmJiBtX25lRmlsdGVyU291cmNlU3RhdHVzID09IE5FRmlsdGVyU291cmNlU3RhdHVz
TmVlZHNNb3JlRGF0YSkKLSNlbmRpZgotICAgIDsKKyAgICBmb3IgKGF1dG8mIGNvbnRlbnRGaWx0
ZXIgOiBtX2NvbnRlbnRGaWx0ZXJzKSB7CisgICAgICAgIGlmIChjb250ZW50RmlsdGVyLT5uZWVk
c01vcmVEYXRhKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgQ29udGVudEZpbHRlcjo6ZGlkQmxvY2tEYXRhKCkgY29uc3QK
K2Jvb2wgQ29udGVudEZpbHRlckNvbGxlY3Rpb246OmRpZEJsb2NrRGF0YSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFttX3BsYXRmb3JtQ29udGVudEZpbHRlciB3YXNCbG9ja2VkXQotI2lmIEhBVkUo
TkVfRklMVEVSX1NPVVJDRSkKLSAgICAgICAgfHwgKG1fbmVGaWx0ZXJTb3VyY2UgJiYgbV9uZUZp
bHRlclNvdXJjZVN0YXR1cyA9PSBORUZpbHRlclNvdXJjZVN0YXR1c0Jsb2NrKQotI2VuZGlmCi0g
ICAgOworICAgIGZvciAoYXV0byYgY29udGVudEZpbHRlciA6IG1fY29udGVudEZpbHRlcnMpIHsK
KyAgICAgICAgaWYgKGNvbnRlbnRGaWx0ZXItPmRpZEJsb2NrRGF0YSgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1jb25zdCBjaGFy
KiBDb250ZW50RmlsdGVyOjpnZXRSZXBsYWNlbWVudERhdGEoaW50JiBsZW5ndGgpIGNvbnN0Citj
b25zdCBjaGFyKiBDb250ZW50RmlsdGVyQ29sbGVjdGlvbjo6Z2V0UmVwbGFjZW1lbnREYXRhKGlu
dCYgbGVuZ3RoKSBjb25zdAogewogICAgIEFTU0VSVCghbmVlZHNNb3JlRGF0YSgpKTsKIAotICAg
IGlmIChkaWRCbG9ja0RhdGEoKSkgewotICAgICAgICBsZW5ndGggPSBbbV9yZXBsYWNlbWVudERh
dGEgbGVuZ3RoXTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihbbV9y
ZXBsYWNlbWVudERhdGEgYnl0ZXNdKTsKKyAgICBmb3IgKGF1dG8mIGNvbnRlbnRGaWx0ZXIgOiBt
X2NvbnRlbnRGaWx0ZXJzKSB7CisgICAgICAgIGlmIChjb250ZW50RmlsdGVyLT5kaWRCbG9ja0Rh
dGEoKSkKKyAgICAgICAgICAgIHJldHVybiBjb250ZW50RmlsdGVyLT5nZXRSZXBsYWNlbWVudERh
dGEobGVuZ3RoKTsKICAgICB9CiAKLSAgICBOU0RhdGEgKm9yaWdpbmFsRGF0YSA9IG1fcmVwbGFj
ZW1lbnREYXRhLmdldCgpOwotI2lmIEhBVkUoTkVfRklMVEVSX1NPVVJDRSkKLSAgICBpZiAoIW9y
aWdpbmFsRGF0YSkKLSAgICAgICAgb3JpZ2luYWxEYXRhID0gbV9vcmlnaW5hbERhdGEuZ2V0KCk7
Ci0jZW5kaWYKLQotICAgIGxlbmd0aCA9IFtvcmlnaW5hbERhdGEgbGVuZ3RoXTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KFtvcmlnaW5hbERhdGEgYnl0ZXNdKTsKKyAgICBy
ZXR1cm4gbV9jb250ZW50RmlsdGVyc1swXS0+Z2V0UmVwbGFjZW1lbnREYXRhKGxlbmd0aCk7CiB9
CiAKLUNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlciBDb250ZW50RmlsdGVyOjp1bmJsb2NrSGFu
ZGxlcigpIGNvbnN0CitDb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIgQ29udGVudEZpbHRlckNv
bGxlY3Rpb246OnVuYmxvY2tIYW5kbGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ29udGVudEZp
bHRlclVuYmxvY2tIYW5kbGVyIHsgbV9wbGF0Zm9ybUNvbnRlbnRGaWx0ZXIuZ2V0KCkgfTsKKyAg
ICBBU1NFUlQoZGlkQmxvY2tEYXRhKCkpOworCisgICAgZm9yIChhdXRvJiBjb250ZW50RmlsdGVy
IDogbV9jb250ZW50RmlsdGVycykgeworICAgICAgICBpZiAoY29udGVudEZpbHRlci0+ZGlkQmxv
Y2tEYXRhKCkpCisgICAgICAgICAgICByZXR1cm4gY29udGVudEZpbHRlci0+dW5ibG9ja0hhbmRs
ZXIoKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="272751"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>