;(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

Esse conteúdo é antigo

Moraes suspende portaria de Bolsonaro que dificulta rastreamento de armas

6.fev.2020 - O ministro do STF, Alexandre de Moraes, durante sessão do plenário da Corte - Rosinei Coutinho/SCO/STF
6.fev.2020 - O ministro do STF, Alexandre de Moraes, durante sessão do plenário da Corte Imagem: Rosinei Coutinho/SCO/STF

Colaboração para o UOL

16/09/2021 22h43Atualizada em 17/09/2021 01h09

O ministro do STF (Supremo Tribunal Federal) Alexandre de Moraes suspendeu as portarias que revogavam as normas que instituíram o SisNar (Sistema Nacional de Rastreamento de Produtos Controlados pelo Exército). Uma das pautas do presidente Jair Bolsonaro (sem partido) é o armamento e, em abril de 2020, ele tinha removido diretrizes mais rígidas para o controle bélico no Brasil.

A decisão é liminar e será submetido ao Plenário para votação em modalidade virtual a partir de amanhã. A ação para rever as regras de armamento veio do PDT e do PSOL, que contestaram no STF o decreto assinado por Bolsonaro em abril do ano ado.

As legendas argumentaram que a troca nas normas impedia o controle e critérios para a produção, comércio e circulação de armamentos. Ainda de acordo com os partidos, cabe ao SisNar escolher integrantes, distribuir competências e criar novas formas de vigilância.

Com a decisão, Moraes disse que uma de suas preocupações era não facilitar o comércio ilegal de armas no Brasil. "A maior circulação de armas e munições, se não for acompanhada por regulamentação adequada, terá inevitável efeito sobre a movimentação ilícita em favor da criminalidade organizada", afirmou.

Além disso, o ministro citou uma recusa do governo em estabelecer melhores medidas para marcar e rastrear as armas, o que traz resultado resultado "incongruente e incompatível" na segurança pública.

"A revogação desses atos careceu de motivação idônea a justificar a não implementação das ferramentas de controle neles previstas, bem como não foi acompanhada de qualquer medida paliativa ou intermediária, mesmo já transcorrido período razoável de tempo desde sua edição", escreveu.

Caso se confirme, a derrubada ou restrição dos decretos significará uma derrota para Bolsonaro, que desde o início do governo tem agido e discursado em favor do armamento da população. No final de agosto, o presidente atacou os críticos das medidas. "Se não quer comprar fuzil, não enche o saco de quem quer comprar", disse a apoiadores.

Tentativa de trégua

O posicionamento de Moraes ocorre em meio a trégua oferecida por Bolsonaro aos demais Poderes da República. Depois de manifestações com tom antidemocrático no 7 de setembro, o presidente notou perda de apoio, viu partidos de diversas posições se unirem pelo seu impeachment e optou por um recuo.

A oferta de paz do mandatário federal veio em forma da carta chamada "Declaração à Nação", de co-autoria do ex-presidente Michel Temer (MDB), que foi levado até Brasília a pedido de Bolsonaro para ajudar na reconciliação.

Nessa última semana desde a Declaração, o presidente tentou se mostrar mais contido e as ameaças aos Poderes, farpas em direção a ministros e atritos com o próprio Moraes estiverem visivelmente ausentes do comportamento dele.

Entretanto, a pesquisa de hoje do Datafolha demonstra que houve estrago feito na base de apoio do presidente, que chegou a um recorde de desaprovação: 53%. O número de pessoas que avalia o governo em bom ou ótimo também desceu, agora está em 22%.