docker / build-push-action

GitHub Action to build and push Docker images with Buildx
https://github.com/marketplace/actions/build-and-push-docker-images
Apache License 2.0
4.41k stars 561 forks source link

build-push-action (docker buildx) does not respect the no_proxy variable. #1223

Open snowdream opened 2 months ago

snowdream commented 2 months ago

Contributing guidelines

I've found a bug, and:

Description

GitHub Actions Continuous Delivery

I want ro run github acion on a self-host pc behind the proxy,but falied.

I can not pull the base image.

The proxy is fine. i can run docker buildx on the pc,but failed when i run github action on it.

Error: buildx failed with: ERROR: failed to solve: alpine:3.20.2: failed to resolve source metadata for docker.io/library/alpine:3.20.2: failed to do request: Head "https://docker.sn0wdr1am.com/v2/library/alpine/manifests/3.20.2?ns=docker.io": proxyconnect tcp: dial tcp 127.0.0.1:1080: connect: connection refused

Expected behaviour

Setup and Run github action on self-host pc behind proxy.

Actual behaviour

I can not pull the base image.

Repository URL

https://github.com/snowdreamtech/alpine

Workflow run URL

https://github.com/snowdreamtech/alpine/actions/workflows/main.yml

YAML workflow

name: GitHub Actions Continuous Delivery

on:
  push:
    branches:
      - main  
    tags:
      - '*'
  workflow_dispatch:
jobs:
    buildx:
      runs-on: whitepi3bplus
      steps:
        -
          name: Checkout
          uses: actions/checkout@v4.1.7
          with:
            # [Required] Access token with `workflow` scope.
            token: ${{ secrets.WORKFLOW_SECRET }}
        - 
          name: Set env variables
          run: |
            echo "BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV
            echo "http_proxy=${http_proxy}" >> $GITHUB_ENV
            echo "no_proxy=${no_proxy}" >> $GITHUB_ENV
        -
          # Add support for more platforms with QEMU (optional)
          # https://github.com/docker/setup-qemu-action
          name: Set up QEMU
          uses: docker/setup-qemu-action@v3.2.0
        -
          # https://github.com/docker/setup-buildx-action/issues/57#issuecomment-1059657292
          # https://github.com/docker/buildx/issues/136#issuecomment-550205439
          # docker buildx create --driver-opt env.http_proxy=$http_proxy --driver-opt env.https_proxy=$https_proxy --driver-opt '"env.no_proxy='$no_proxy'"'
          name: Set up Docker Buildx
          uses: docker/setup-buildx-action@v3.6.1
          with:
            buildkitd-config: .github/buildkitd.toml
            driver-opts: |
              env.http_proxy=${{ env.http_proxy }}
              env.https_proxy=${{ env.http_proxy }}
              "env.no_proxy='${{ env.no_proxy}}'"
        -
          name: Login to DockerHub
          uses: docker/login-action@v3.3.0
          with:
            username: ${{ secrets.DOCKER_HUB_USERNAME }}
            password: ${{ secrets.DOCKER_HUB_TOKEN }}
        -
          name: Login to GitHub Container Registry
          uses: docker/login-action@v3.3.0
          with:
            registry: ghcr.io
            username: ${{ github.repository_owner }}
            password: ${{ secrets.GITHUB_TOKEN }}          
        -
          name: Build and push
          uses: docker/build-push-action@v6.7.0
          with:
            context: .
            build-args: |
              "http_proxy=${{ env.http_proxy }}"
              "https_proxy=${{ env.http_proxy }}"
              "no_proxy='${{ env.no_proxy}}'"
            platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/riscv64,linux/s390x
            push: true
            tags: |
              snowdreamtech/alpine:latest
              snowdreamtech/alpine:3.20.2
              snowdreamtech/alpine:3.20
              snowdreamtech/alpine:3
              ghcr.io/snowdreamtech/alpine:latest
              ghcr.io/snowdreamtech/alpine:3.20.2
              ghcr.io/snowdreamtech/alpine:3.20
              ghcr.io/snowdreamtech/alpine:3

Workflow logs

https://github.com/snowdreamtech/alpine/actions/runs/10643865069/job/29507938882

logs_27827136796.zip

BuildKit logs

No response

Additional info

~/.docker/config.json

{
        "auths": {},
        "proxies": {
                "default": {
                        "httpProxy": "http://127.0.0.1:1080",
                        "httpsProxy": "http://127.0.0.1:1080",
                        "noProxy": "localhost,example.com,sn0wdr1am.com"
                }
        }
}

.github/buildkitd.toml

# debug enables additional debug logging
debug = true
# trace enables additional trace logging (very verbose, with potential performance impacts)
trace = true

[registry."docker.io"]
    mirrors = ["https://docker.sn0wdr1am.com"]

[registry."quay.io"]
    mirrors = ["https://quay.sn0wdr1am.com"]

[registry."gcr.io"]
    mirrors = ["https://gcr.sn0wdr1am.com"]

[registry."k8s.gcr.io"]
    mirrors = ["https://k8s-gcr.sn0wdr1am.com"]

[registry."k8s.io"]
    mirrors = ["https://k8s.sn0wdr1am.com"]

[registry."ghcr.io"]
    mirrors = ["https://ghcr.sn0wdr1am.com"]

[registry."cloudsmith.io"]
    mirrors = ["https://cloudsmith.sn0wdr1am.com"]

[registry."ecr.aws"]
    mirrors = ["https://ecr.sn0wdr1am.com"]

[worker.oci]
  max-parallelism = 2

global proxy

export http_proxy="http://127.0.0.1:1080"
export https_proxy="http://127.0.0.1:1080"
export ftp_proxy="http://127.0.0.1:1080"
export all_proxy="http://127.0.0.1:1080"
export no_proxy="localhost,example.com,sn0wdr1am.com"
export HTTP_PROXY="http://127.0.0.1:1080"
export HTTPS_PROXY="http://127.0.0.1:1080"
export FTP_PROXY="http://127.0.0.1:1080"
export ALL_PROXY="http://127.0.0.1:1080"
export NO_PROXY="localhost,example.com,sn0wdr1am.com"

~/.config/systemd/user/docker.service.d/http-proxy.conf

/etc/systemd/system/docker.service.d/http-proxy.conf

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:1080"
Environment="HTTPS_PROXY=http://127.0.0.1:1080"
Environment="NO_PROXY=localhost,example.com,sn0wdr1am.com"

/etc/docker/daemon.json

{
          "experimental": true,
    "registry-mirrors": [
    "https://docker.sn0wdr1am.com", 
    "https://quay.sn0wdr1am.com",   
    "https://gcr.sn0wdr1am.com",    
    "https://k8s-gcr.sn0wdr1am.com",    
    "https://k8s.sn0wdr1am.com",
    "https://ghcr.sn0wdr1am.com",   
    "https://cloudsmith.sn0wdr1am.com", 
    "https://ecr.sn0wdr1am.com"
  ]
}

~/actions-runner/.env

export http_proxy="http://127.0.0.1:1080"
export https_proxy="http://127.0.0.1:1080"
export ftp_proxy="http://127.0.0.1:1080"
export all_proxy="http://127.0.0.1:1080"
export no_proxy="localhost,example.com,sn0wdr1am.com"
export HTTP_PROXY="http://127.0.0.1:1080"
export HTTPS_PROXY="http://127.0.0.1:1080"
export FTP_PROXY="http://127.0.0.1:1080"
export ALL_PROXY="http://127.0.0.1:1080"
export NO_PROXY="localhost,example.com,sn0wdr1am.com"
snowdream commented 2 months ago
snowdream@pc:~/actions-runner $ curl -x http://127.0.0.1:1080 http://www.google.com

<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head><meta content="Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for." name="description"><meta content="noodp, " name="robots"><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title><script nonce="vMnpzl_6pSRnvI46EJ3Fxw">(function(){var _g={kEI:'o-LSZv3DMOWu5NoPhLKvsQE',kEXPI:'0,3700328,614,439,97,538567,2872,2891,73050,16105,18161,162095,342,23024,6700,41942,57740,2,2,1,26632,8155,23351,22435,9779,62658,6049,30697,3801,2412,33249,15816,1804,7734,29,18069,1260,19990,1635,29276,15664,6114,5305,5212675,997,127,21,5991286,2841031,386,257,2,17,19,7440485,20539938,1007,15665,43887,3,318,4,1281,3,2124363,23029351,8163,4636,16436,2727,27220,54098,11647,5178,2469,7,3321,885,8326,3741,2213,8181,150,22703,4,19951,6622,19011,2656,3438,3319,155,1,1,1,2481,21240,9139,1994,2605,328,3217,4,1235,1769,1117,18557,408,519,3301,1557,5,856,7303,687,2749,3,3925,1119,3,1,2833,181,2695,1751,2724,1896,24,3691,475,97,4979,709,682,452,207,3131,3054,7523,2204,7,12,3089,637,4,4837,4840,2380,567,919,978,308,221,1705,737,5,319,1,289,3,2,1,441,8936,4828,5315,462,1490,473,125,628,44,2388,638,1049,3541,1067,1,1211,866,563,599,112,59,557,10,1060,1549,1600,10666,1533,1,1781,2,1,6,1106,1,1,2,3,2699,629,7,346,544,15,782,3,63,8,1460,2,496,1160,119,2,382,1570,466,300,634,366,15,517,4,166,175,261,1,133,755,3,2,532,175,308,113,1245,1,40,116,1141,306,33,46,124,21,215,4,1393,764,336,141,3,193,327,178,480,429,1,1040,1,1,2,3,1451,41,228,1,455,136,329,700,685,6,518,2482,24,88,334,147,506,248,1375,1,48,421,2425,724,427,438,290,4,199,448,2,727,265,4,1,6,670,7,518,373,319,322,813,142,499,150,122,692,2,516,2275,1,2,2,21114269,359917,5720,3,14475,3,7053,275,837,47,3660,5121,21,590,190,985769',kBL:'oi5y',kOPI:89978449};(function(){var a;((a=window.google)==null?0:a.stvsc)?google.kEI=_g.kEI:window.google=_g;}).call(this);})();(function(){google.sn='webhp';google.kHL='en';})();(function(){
var h=this||self;function l(){return window.google!==void 0&&window.google.kOPI!==void 0&&window.google.kOPI!==0?window.google.kOPI:null};var m,n=[];function p(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute("eid")));)a=a.parentNode;return b||m}function q(a){for(var b=null;a&&(!a.getAttribute||!(b=a.getAttribute("leid")));)a=a.parentNode;return b}function r(a){/^http:/i.test(a)&&window.location.protocol==="https:"&&(google.ml&&google.ml(Error("a"),!1,{src:a,glmm:1}),a="");return a}
function t(a,b,c,d,k){var e="";b.search("&ei=")===-1&&(e="&ei="+p(d),b.search("&lei=")===-1&&(d=q(d))&&(e+="&lei="+d));d="";var g=b.search("&cshid=")===-1&&a!=="slh",f=[];f.push(["zx",Date.now().toString()]);h._cshid&&g&&f.push(["cshid",h._cshid]);c=c();c!=null&&f.push(["opi",c.toString()]);for(c=0;c<f.length;c++){if(c===0||c>0)d+="&";d+=f[c][0]+"="+f[c][1]}return"/"+(k||"gen_204")+"?atyp=i&ct="+String(a)+"&cad="+(b+e+d)};m=google.kEI;google.getEI=p;google.getLEI=q;google.ml=function(){return null};google.log=function(a,b,c,d,k,e){e=e===void 0?l:e;c||(c=t(a,b,e,d,k));if(c=r(c)){a=new Image;var g=n.length;n[g]=a;a.onerror=a.onload=a.onabort=function(){delete n[g]};a.src=c}};google.logUrl=function(a,b){b=b===void 0?l:b;return t("",a,b)};}).call(this);(function(){google.y={};google.sy=[];var d;(d=google).x||(d.x=function(a,b){if(a)var c=a.id;else{do c=Math.random();while(google.y[c])}google.y[c]=[a,b];return!1});var e;(e=google).sx||(e.sx=function(a){google.sy.push(a)});google.lm=[];var f;(f=google).plm||(f.plm=function(a){google.lm.push.apply(google.lm,a)});google.lq=[];var g;(g=google).load||(g.load=function(a,b,c){google.lq.push([[a],b,c])});var h;(h=google).loadAll||(h.loadAll=function(a,b){google.lq.push([a,b])});google.bx=!1;var k;(k=google).lx||(k.lx=function(){});var l=[],m;(m=google).fce||(m.fce=function(a,b,c,n){l.push([a,b,c,n])});google.qce=l;}).call(this);google.f={};(function(){
document.documentElement.addEventListener("submit",function(b){var a;if(a=b.target){var c=a.getAttribute("data-submitfalse");a=c==="1"||c==="q"&&!a.elements.q.value?!0:!1}else a=!1;a&&(b.preventDefault(),b.stopPropagation())},!0);document.documentElement.addEventListener("click",function(b){var a;a:{for(a=b.target;a&&a!==document.documentElement;a=a.parentElement)if(a.tagName==="A"){a=a.getAttribute("data-nohref")==="1";break a}a=!1}a&&b.preventDefault()},!0);}).call(this);</script><style>#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}.gbi .gb4{color:#dd8e27 !important}.gbf .gb4{color:#900 !important}
</style><style>body,td,a,p,.h{font-family:arial,sans-serif}body{margin:0;overflow-y:scroll}#gog{padding:3px 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}.h{color:#1967d2}em{font-weight:bold;font-style:normal}.lst{height:25px;width:496px}.gsfi,.lst{font:18px arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{display:inline-box;display:inline-block;margin:3px 0 4px;margin-left:4px}input{font-family:inherit}body{background:#fff;color:#000}a{color:#681da8;text-decoration:none}a:hover,a:active{text-decoration:underline}.fl a{color:#1967d2}a:visited{color:#681da8}.sblc{padding-top:5px}.sblc a{display:block;margin:2px 0;margin-left:13px;font-size:11px}.lsbb{background:#f8f9fa;border:solid 1px;border-color:#dadce0 #70757a #70757a #dadce0;height:30px}.lsbb{display:block}#WqQANb a{display:inline-block;margin:0 12px}.lsb{background:url(/images/nav_logo229.png) 0 -261px repeat-x;color:#000;border:none;cursor:pointer;height:30px;margin:0;outline:0;font:15px arial,sans-serif;vertical-align:top}.lsb:active{background:#dadce0}.lst:focus{outline:none}</style><script nonce="vMnpzl_6pSRnvI46EJ3Fxw">(function(){window.google.erd={jsr:1,bv:2069,de:true};
var g=this||self;var k,l=(k=g.mei)!=null?k:1,n,p=(n=g.sdo)!=null?n:!0,q=0,r,t=google.erd,v=t.jsr;google.ml=function(a,b,d,m,e){e=e===void 0?2:e;b&&(r=a&&a.message);d===void 0&&(d={});d.cad="ple_"+google.ple+".aple_"+google.aple;if(google.dl)return google.dl(a,e,d,!0),null;b=d;if(v<0){window.console&&console.error(a,b);if(v===-2)throw a;b=!1}else b=!a||!a.message||a.message==="Error loading script"||q>=l&&!m?!1:!0;if(!b)return null;q++;d=d||{};b=encodeURIComponent;var c="/gen_204?atyp=i&ei="+b(google.kEI);google.kEXPI&&(c+="&jexpid="+b(google.kEXPI));c+="&srcpg="+b(google.sn)+"&jsr="+b(t.jsr)+
"&bver="+b(t.bv);t.dpf&&(c+="&dpf="+b(t.dpf));var f=a.lineNumber;f!==void 0&&(c+="&line="+f);var h=a.fileName;h&&(h.indexOf("-extension:/")>0&&(e=3),c+="&script="+b(h),f&&h===window.location.href&&(f=document.documentElement.outerHTML.split("\n")[f],c+="&cad="+b(f?f.substring(0,300):"No script found.")));google.ple&&google.ple===1&&(e=2);c+="&jsel="+e;for(var u in d)c+="&",c+=b(u),c+="=",c+=b(d[u]);c=c+"&emsg="+b(a.name+": "+a.message);c=c+"&jsst="+b(a.stack||"N/A");c.length>=12288&&(c=c.substr(0,12288));a=c;m||google.log(0,"",a);return a};window.onerror=function(a,b,d,m,e){r!==a&&(a=e instanceof Error?e:Error(a),d===void 0||"lineNumber"in a||(a.lineNumber=d),b===void 0||"fileName"in a||(a.fileName=b),google.ml(a,!1,void 0,!1,a.name==="SyntaxError"||a.message.substring(0,11)==="SyntaxError"||a.message.indexOf("Script error")!==-1?3:0));r=null;p&&q>=l&&(window.onerror=null)};})();</script></head><body bgcolor="#fff"><script nonce="vMnpzl_6pSRnvI46EJ3Fxw">(function(){var src='/images/nav_logo229.png';var iesg=false;document.body.onload = function(){window.n && window.n();if (document.images){new Image().src=src;}
if (!iesg){document.f&&document.f.q.focus();document.gbqf&&document.gbqf.q.focus();}
}
})();</script><div id="mngb"><div id=gbar><nobr><b class=gb1>Search</b> <a class=gb1 href="https://www.google.com/imghp?hl=en&tab=wi">Images</a> <a class=gb1 href="http://maps.google.com/maps?hl=en&tab=wl">Maps</a> <a class=gb1 href="https://play.google.com/?hl=en&tab=w8">Play</a> <a class=gb1 href="https://www.youtube.com/?tab=w1">YouTube</a> <a class=gb1 href="https://news.google.com/?tab=wn">News</a> <a class=gb1 href="https://mail.google.com/mail/?tab=wm">Gmail</a> <a class=gb1 href="https://drive.google.com/?tab=wo">Drive</a> <a class=gb1 style="text-decoration:none" href="https://www.google.com/intl/en/about/products?tab=wh"><u>More</u> &raquo;</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe></span><a href="http://www.google.com/history/optout?hl=en" class=gb4>Web History</a> | <a  href="/preferences?hl=en" class=gb4>Settings</a> | <a target=_top id=gb_70 href="https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=http://www.google.com/&ec=GAZAAQ" class=gb4>Sign in</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div></div><center><br clear="all" id="lgpd"><div id="XjhHGf"><img alt="Google" height="92" src="/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png" style="padding:28px 0 14px" width="272" id="hplogo"><br><br></div><form action="/search" name="f"><table cellpadding="0" cellspacing="0"><tr valign="top"><td width="25%">&nbsp;</td><td align="center" nowrap=""><input name="ie" value="ISO-8859-1" type="hidden"><input value="en" name="hl" type="hidden"><input name="source" type="hidden" value="hp"><input name="biw" type="hidden"><input name="bih" type="hidden"><div class="ds" style="height:32px;margin:4px 0"><input class="lst" style="margin:0;padding:5px 8px 0 6px;vertical-align:top;color:#000" autocomplete="off" value="" title="Google Search" maxlength="2048" name="q" size="57"></div><br style="line-height:0"><span class="ds"><span class="lsbb"><input class="lsb" value="Google Search" name="btnG" type="submit"></span></span><span class="ds"><span class="lsbb"><input class="lsb" id="tsuid_1" value="I'm Feeling Lucky" name="btnI" type="submit"><script nonce="vMnpzl_6pSRnvI46EJ3Fxw">(function(){var id='tsuid_1';document.getElementById(id).onclick = function(){if (this.form.q.value){this.checked = 1;if (this.form.iflsig)this.form.iflsig.disabled = false;}
else top.location='/doodles/';};})();</script><input value="AL9hbdgAAAAAZtLwsyZEyXVcLmcCoiR5o2vodg8Ef9Pq" name="iflsig" type="hidden"></span></span></td><td class="fl sblc" align="left" nowrap="" width="25%"><a href="/advanced_search?hl=en&amp;authuser=0">Advanced search</a></td></tr></table><input id="gbv" name="gbv" type="hidden" value="1"><script nonce="vMnpzl_6pSRnvI46EJ3Fxw">(function(){var a,b="1";if(document&&document.getElementById)if(typeof XMLHttpRequest!="undefined")b="2";else if(typeof ActiveXObject!="undefined"){var c,d,e=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];for(c=0;d=e[c++];)try{new ActiveXObject(d),b="2"}catch(h){}}a=b;if(a=="2"&&location.search.indexOf("&gbv=2")==-1){var f=google.gbvu,g=document.getElementById("gbv");g&&(g.value=a);f&&window.setTimeout(function(){location.href=f},0)};}).call(this);</script></form><div style="font-size:83%;min-height:3.5em"><br></div><span id="footer"><div style="font-size:10pt"><div style="margin:19px auto;text-align:center" id="WqQANb"><a href="/intl/en/ads/">Advertising</a><a href="/services/">Business Solutions</a><a href="/intl/en/about.html">About Google</a></div></div><p style="font-size:8pt;color:#70757a">&copy; 2024 - <a href="/intl/en/policies/privacy/">Privacy</a> - <a href="/intl/en/policies/terms/">Terms</a></p></span></center><script nonce="vMnpzl_6pSRnvI46EJ3Fxw">(function(){window.google.cdo={height:757,width:1440};(function(){var a=window.innerWidth,b=window.innerHeight;if(!a||!b){var c=window.document,d=c.compatMode=="CSS1Compat"?c.documentElement:c.body;a=d.clientWidth;b=d.clientHeight}
if(a&&b&&(a!=google.cdo.width||b!=google.cdo.height)){var e=google,f=e.log,g="/client_204?&atyp=i&biw="+a+"&bih="+b+"&ei="+google.kEI,h="",k=[],l=window.google!==void 0&&window.google.kOPI!==void 0&&window.google.kOPI!==0?window.google.kOPI:null;l!=null&&k.push(["opi",l.toString()]);for(var m=0;m<k.length;m++){if(m===0||m>0)h+="&";h+=k[m][0]+"="+k[m][1]}f.call(e,"","",g+h)};}).call(this);})();</script>  <script nonce="vMnpzl_6pSRnvI46EJ3Fxw">(function(){google.xjs={basecomb:'/xjs/_/js/k\x3dxjs.hp.en.yP0lJCSYMgw.O/ck\x3dxjs.hp.D-YrOoWwU74.L.X.O/am\x3dAQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAQAAAAAAAAQAAYAcAAAAAgAEBAAAAAAAB4AAAAAAAAQgBAAAAUAAQKAA_EdAYAAWAQAgBc/d\x3d1/ed\x3d1/dg\x3d0/ujg\x3d1/rs\x3dACT90oEU0msm2rRx9k4T4Y4nBO1Ofdu_QQ',basecss:'/xjs/_/ss/k\x3dxjs.hp.D-YrOoWwU74.L.X.O/am\x3dAQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAQAAAAAAAAAAgAEBAAAAAAAAAAAAAAAAAQgBAAAAUAAQI/rs\x3dACT90oGqtY8slixiWwjo2qpBsYsJmpb-JA',basejs:'/xjs/_/js/k\x3dxjs.hp.en.yP0lJCSYMgw.O/am\x3dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAYAcAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAACAA_EdAYAAWAQAgBc/dg\x3d0/rs\x3dACT90oE27GwmyMeKr1-HFe_-t4lDpneqww',excm:[]};})();</script>  <link href="/xjs/_/ss/k=xjs.hp.D-YrOoWwU74.L.X.O/am=AQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAQAAAAAAAAAAgAEBAAAAAAAAAAAAAAAAAQgBAAAAUAAQI/d=1/ed=1/rs=ACT90oGqtY8slixiWwjo2qpBsYsJmpb-JA/m=sb_he,d" rel="stylesheet" nonce="vMnpzl_6pSRnvI46EJ3Fxw">      <script nonce="vMnpzl_6pSRnvI46EJ3Fxw">(function(){var u='/xjs/_/js/k\x3dxjs.hp.en.yP0lJCSYMgw.O/am\x3dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAYAcAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAACAA_EdAYAAWAQAgBc/d\x3d1/ed\x3d1/dg\x3d3/rs\x3dACT90oE27GwmyMeKr1-HFe_-t4lDpneqww/m\x3dsb_he,d';var st=1;var amd=1000;var mmd=0;var pod=true;
var f=this||self,g=function(a){return a};function h(){var a,b,c;return(a=(b=window.google)==null?void 0:(c=b.ia)==null?void 0:c.r.B2Jtyd)&&a.m===1&&a.cbfd!=null&&a.cbvi!=null?a:void 0};var k;var l={},m=function(a){this.g=a};m.prototype.toString=function(){return this.g+""};var n=function(a){return a instanceof m&&a.constructor===m?a.g:"type_error:TrustedResourceUrl"};
var p=/^\s*(?!javascript:)(?:[\w+.-]+:|[^:/?#]*(?:[/?#]|$))/i;var q="alternate author bookmark canonical cite help icon license modulepreload next prefetch dns-prefetch prerender preconnect preload prev search subresource".split(" ");function r(a,b){a.src=n(b);var c,d;(c=(b=(d=(c=(a.ownerDocument&&a.ownerDocument.defaultView||window).document).querySelector)==null?void 0:d.call(c,"script[nonce]"))?b.nonce||b.getAttribute("nonce")||"":"")&&a.setAttribute("nonce",c)};var t=function(a){var b=document;a=String(a);b.contentType==="application/xhtml+xml"&&(a=a.toLowerCase());return b.createElement(a)};function w(a){a=a===null?"null":a===void 0?"undefined":a;if(k===void 0){var b=null;var c=f.trustedTypes;if(c&&c.createPolicy){try{b=c.createPolicy("goog#html",{createHTML:g,createScript:g,createScriptURL:g})}catch(d){f.console&&f.console.error(d.message)}k=b}else k=b}a=(b=k)?b.createScriptURL(a):a;return new m(a,l)};google.ps===void 0&&(google.ps=[]);function x(){var a=u,b=function(){};google.lx=google.stvsc?b:function(){y(a);google.lx=b};google.bx||google.lx()}function z(a,b){b&&r(a,w(b));var c=a.onload;a.onload=function(d){c&&c(d);google.ps=google.ps.filter(function(e){return a!==e})};google.ps.push(a);document.body.appendChild(a)}google.as=z;function y(a){google.timers&&google.timers.load&&google.tick&&google.tick("load","xjsls");var b=t("SCRIPT");b.onerror=function(){google.ple=1};b.onload=function(){google.ple=0};google.xjsus=void 0;z(b,a);google.aple=-1;google.dp=!0}
function A(){var a=[u];if(!google.dp){for(var b=0;b<a.length;b++){var c=t("LINK"),d=c,e=w(a[b]);if(e instanceof m)d.href=n(e).toString(),d.rel="preload";else{if(q.indexOf("preload")===-1)throw Error("a`preload");e=p.test(e)?e:void 0;e!==void 0&&(d.href=e,d.rel="preload")}c.setAttribute("as","script");document.body.appendChild(c)}google.dp=!0}};function B(a){var b=a.getAttribute("jscontroller");return(b==="UBXHI"||b==="R3fhkb"||b==="TSZEqd")&&a.hasAttribute("data-src")}function C(){for(var a=document.getElementsByTagName("img"),b=0,c=a.length;b<c;b++){var d=a[b];if(d.hasAttribute("data-lzy_")&&Number(d.getAttribute("data-atf"))&1&&!B(d))return!0}return!1}for(var D=document.getElementsByTagName("img"),E=0,F=D.length;E<F;++E){var G=D[E];Number(G.getAttribute("data-atf"))&1&&B(G)&&(G.src=G.getAttribute("data-src"))};var H,I,J,K,L,M;function N(){google.xjsu=u;f._F_jsUrl=u;L=function(){x()};H=!1;I=(st===1||st===3)&&!!google.caft&&!C();J=h();K=(st===2||st===3)&&(!!google.rairicb||!!J)&&!C();M=pod}function O(){H||I||K||(L(),H=!0)}
setTimeout(function(){google&&google.tick&&google.timers&&google.timers.load&&google.tick("load","xjspls");N();if(I||K){if(I){var a=function(){I=!1;O()};google.caft(a);window.setTimeout(a,amd)}K&&(a=function(){K=!1;O()},J?J.cbvi.push(a):(0,google.rairicb)(a),window.setTimeout(a,mmd));M&&(H||A())}else L()},0);})();window._ = window._ || {};window._DumpException = _._DumpException = function(e){throw e;};window._s = window._s || {};_s._DumpException = _._DumpException;window._qs = window._qs || {};_qs._DumpException = _._DumpException;(function(){var t=[1,64,0,0,0,0,4341760,0,1131568,29425689,41943044,263168,590848,120,0,270340,21038336,68026376,134222303,71184,6016];window._F_toggles = window._xjs_toggles = t;})();window._F_installCss = window._F_installCss || function(css){};(function(){google.jl={bfl:0,dw:false,ine:false,ubm:false,uwp:true,vs:false};})();(function(){var pmc='{\x22d\x22:{},\x22sb_he\x22:{\x22agen\x22:false,\x22cgen\x22:false,\x22client\x22:\x22heirloom-hp\x22,\x22dh\x22:true,\x22ds\x22:\x22\x22,\x22fl\x22:true,\x22host\x22:\x22google.com\x22,\x22jsonp\x22:true,\x22msgs\x22:{\x22cibl\x22:\x22Clear Search\x22,\x22dym\x22:\x22Did you mean:\x22,\x22lcky\x22:\x22I\\u0026#39;m Feeling Lucky\x22,\x22lml\x22:\x22Learn more\x22,\x22psrc\x22:\x22This search was removed from your \\u003Ca href\x3d\\\x22/history\\\x22\\u003EWeb History\\u003C/a\\u003E\x22,\x22psrl\x22:\x22Remove\x22,\x22sbit\x22:\x22Search by image\x22,\x22srch\x22:\x22Google Search\x22},\x22ovr\x22:{},\x22pq\x22:\x22\x22,\x22rfs\x22:[],\x22stok\x22:\x22Xnj0gMwINWq2PLlmm6F_lYGXZgA\x22}}';google.pmc=JSON.parse(pmc);})();(function(){var b=function(a){var c=0;return function(){return c<a.length?{done:!1,value:a[c++]}:{done:!0}}};
var e=this||self;var g,h;a:{for(var k=["CLOSURE_FLAGS"],l=e,n=0;n<k.length;n++)if(l=l[k[n]],l==null){h=null;break a}h=l}var p=h&&h[610401301];g=p!=null?p:!1;var q,r=e.navigator;q=r?r.userAgentData||null:null;function t(a){return g?q?q.brands.some(function(c){return(c=c.brand)&&c.indexOf(a)!=-1}):!1:!1}function u(a){var c;a:{if(c=e.navigator)if(c=c.userAgent)break a;c=""}return c.indexOf(a)!=-1};function v(){return g?!!q&&q.brands.length>0:!1}function w(){return u("Safari")&&!(x()||(v()?0:u("Coast"))||(v()?0:u("Opera"))||(v()?0:u("Edge"))||(v()?t("Microsoft Edge"):u("Edg/"))||(v()?t("Opera"):u("OPR"))||u("Firefox")||u("FxiOS")||u("Silk")||u("Android"))}function x(){return v()?t("Chromium"):(u("Chrome")||u("CriOS"))&&!(v()?0:u("Edge"))||u("Silk")}function y(){return u("Android")&&!(x()||u("Firefox")||u("FxiOS")||(v()?0:u("Opera"))||u("Silk"))};var z=v()?!1:u("Trident")||u("MSIE");y();x();w();var A=!z&&!w(),D=function(a){if(/-[a-z]/.test("ved"))return null;if(A&&a.dataset){if(y()&&!("ved"in a.dataset))return null;a=a.dataset.ved;return a===void 0?null:a}return a.getAttribute("data-"+"ved".replace(/([A-Z])/g,"-$1").toLowerCase())};var E=[],F=null;function G(a){a=a.target;var c=performance.now(),f=[],H=f.concat,d=E;if(!(d instanceof Array)){var m=typeof Symbol!="undefined"&&Symbol.iterator&&d[Symbol.iterator];if(m)d=m.call(d);else if(typeof d.length=="number")d={next:b(d)};else throw Error("b`"+String(d));for(var B=[];!(m=d.next()).done;)B.push(m.value);d=B}E=H.call(f,d,[c]);if(a&&a instanceof HTMLElement)if(a===F){if(c=E.length>=4)c=(E[E.length-1]-E[E.length-4])/1E3<5;if(c){c=google.getEI(a);a.hasAttribute("data-ved")?f=a?D(a)||"":"":f=(f=
a.closest("[data-ved]"))?D(f)||"":"";f=f||"";if(a.hasAttribute("jsname"))a=a.getAttribute("jsname");else{var C;a=(C=a.closest("[jsname]"))==null?void 0:C.getAttribute("jsname")}google.log("rcm","&ei="+c+"&tgtved="+f+"&jsname="+(a||""))}}else F=a,E=[c]}window.document.addEventListener("DOMContentLoaded",function(){document.body.addEventListener("click",G)});}).call(this);</script></body></html>