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

Jacarezinho: Dos 27 mortos, só 4 eram alvo de operação policial na favela

7.mai.2021 - Beco na favela do Jacarezinho, onde operação policial deixou 28 mortos, amanheceu com projéteis de bala no chão - Herculano Barreto Filho/UOL
7.mai.2021 - Beco na favela do Jacarezinho, onde operação policial deixou 28 mortos, amanheceu com projéteis de bala no chão Imagem: Herculano Barreto Filho/UOL

Herculano Barreto Filho e Lola Ferreira

Dos UOL, no Rio

10/05/2021 20h53

Dos 27 mortos na operação mais letal da história do Rio de Janeiro, quatro estavam entre os alvos da investigação da Polícia Civil. Outros três investigados foram presos durante a operação ocorrida na última quinta-feira (6).

As informações foram confirmadas pelo UOL com base em relatório de inteligência da Polícia Civil e em informações fornecidas pela instituição. Três dos presos tinham mandados de prisão expedidos pela Operação Exceptios, que investigava o tráfico de drogas no local.

Richard Gabriel da Silva Ferreira, 23, era olheiro do tráfico de drogas, segundo a investigação.

Isaac Pinheiro de Oliveira, 22, Romulo Oliveira Lucio, 29, e Raian de Oliveira Lopes, 21, eram apontados como integrantes do braço armado da organização criminosa, "cujo objetivo era proteger com arma de fogo de grosso calibre o interior da comunidade do Jacarezinho", cita a denúncia do MP-RJ (Ministério Público do Rio).

A reportagem constatou contudo que menos da metade dos mortos (12) possuíam antecedentes criminais ligados ao tráfico de drogas —incluindo anotações como menor infrator. E, dos 27 mortos na operação, ao menos dois não possuíam anotações, mas o relatório anexou depoimentos de parentes que indicam suposta relação com o tráfico de drogas.

Ação legítima, diz documento da Polícia Civil

No documento, a Polícia Civil reforça a tese de que a ação foi "legítima" e inclui a lista dos mortos, apresentados como "elementos que atentaram contra o Estado" com base em fotos colhidas em redes sociais e fichas criminais.

Não há no relatório de inteligência da entidade informações sobre a perícia no local —feita para determinar a dinâmica das ações que resultaram em morte— ou sobre apreensões das armas usadas pelos policiais civis que participaram da ação. Mais de 200 agentes integraram a operação.

O documento ainda inclui uma lista com 24 armas apreendidas —cinco fuzis, uma submetralhadora, duas espingardas e 16 pistolas.

Agressões, assassinatos e corpos carregados, denunciam presos

Em audiência de custódia acompanhada pela Defensoria Pública, os suspeitos presos apresentavam marcas físicas de violência e disseram ter sido obrigados a carregar corpos, desfazendo a cena do crime, segundo a Folha de S.Paulo —a informação foi confirmada pelo UOL.

Um dos presos disse ter visto policiais atirando em dois homens desarmados dentro de uma casa na favela do Jacarezinho. Eles denunciaram à Defensoria Pública terem sido agredidos a socos, chutes e coronhadas desferidas pelos policiais. Informaram ainda terem sofrido ameaças de morte.