;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Disparos no Whatsapp: TSE encerra coleta de provas em ação contra Bolsonaro

18.set.2019 - Celulares conectados a computador fazem envio de mensagens de WhatsApp em massa  - Reprodução
18.set.2019 - Celulares conectados a computador fazem envio de mensagens de WhatsApp em massa Imagem: Reprodução

Eduardo Militão

Do UOL, em Brasília

04/11/2020 19h14Atualizada em 04/11/2020 22h31

O Tribunal Superior Eleitoral (TSE) encerrou a fase de procura por provas em uma das ações judiciais que pedem a cassação da chapa de Jair Bolsonaro (sem partido) e Hamilton Mourão (PRTB) por suspeita de abuso de poder econômico no envio em massa de mensagens de Whatsapp durante as eleições de 2018.

A informação está numa decisão desta quarta-feira (4) feita pelo novo relator do caso no tribunal, o corregedor Luiz Felipe Salomão, em uma ação do PDT. No despacho, obtido pelo UOL, o ministro nega pedido do partido para obter informações do Whatsapp sobre empresas suspeitas de disparar mensagens nas eleições de 2018.

"O Whatsapp não mais possui as informações pleiteadas, razão pela qual deixou de fazer tal indicação individualizada em sua manifestação, o que torna a providência ora solicitada inócua", disse o corregedor do TSE na decisão.

Em outro trecho, Salomão afirmou: "Penso que nenhum proveito traria ao processo a renovação de requisição de informações solicitadas pela requerente, porquanto já foram prestadas ou esclarecidas". Salomão também diz que o processo —aberto no segundo turno de 2018— "merece uma resposta do Judiciário, em tempo adequado".

Nos últimos cinco meses, essa foi a terceira vez que o TSE não atendeu a pedidos do Ministério Público e dos partidos políticos para obter informações na investigação: a lista de contas banidas do Whatsapp em 2018 e dados bancários do empresário investigado Luciano Hang.

Com o despacho de Salomão, o PDT, o Ministério Público e a defesa de Jair Bolsonaro devem apresentar suas alegações finais em dois dias. Depois, o relator da ação, o corregedor vai estudar o processo, fazer um voto e pedir data de julgamento para o caso. Não há prazo para essa ação do ministro.

Existem quatro ações semelhantes, movidas pelo PT e pelo PDT, que acusam a campanha de Bolsonaro de fazer disparos em massa de mensagens por aplicativos, por meio de empresas pagas por fora da contabilidade, ou seja, com caixa dois. A campanha de Bolsonaro tem negado qualquer irregularidade.

Whatsapp diz que baniu conta de empresa que atendeu Bolsonaro

Na decisão de hoje, Salomão destacou a informação de que o Whatsapp disse ao TSE que baniu uma linha telefônica da Yacows, empresa contratada pela campanha de Bolsonaro em 2018. A agência AM4, que fez a campanha digital de Bolsonaro, itiu que contratou a Yacows, embora tenha alegado ter feito apenas um único disparo de mensagens.

Não há informações se essa conta banida pelo WhatsApp foi usada pela campanha de Jair Bolsonaro ou por outros clientes da Yacows. O TSE não se aprofundou nisso.

O PDT então pediu ao TSE que o Whatsapp prestasse mais informações. O partido queria saber sobre empresas de uma lista obtida pelas Is das Fake News no Congresso e na Assembleia Legislativa de São Paulo. O pedido era para que o Whatsapp informasse se essas firmas também fizeram disparos em massa durante as eleições de 2018.

O PDT sigla ainda solicitou a forma como o Whatsapp soube que as empresas de tecnologia Yacows, SMS Market, Quick Mobile e Croc Services "ofereciam publicamente e faziam publicidade que violavam" o contrato de uso do aplicativo.

Ministro libera outra ação para julgamento

Salomão liberou que outra ação apresentada pela mesma coligação fosse para julgamento. Ele pediu a inclusão dela na pauta do TSE e a definição de quando será julgada caberá ao presidente da Corte, Luís Roberto Barroso.

Bolsonaro e Mourão são alvos de quatro ações no Tribunal sobre supostas irregularidades na contratação de serviços de disparos de mensagens em massa.