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

Coronel que estava no Massacre do Carandiru será secretário do governo Lula

10.dez.2018 - Coronel Nivaldo César Restivo, 53, anunciado como secretário da istração Penitenciária do governo João Doria (PSDB) - Charles Sholl/Raw Image/Estadão Conteúdo
10.dez.2018 - Coronel Nivaldo César Restivo, 53, anunciado como secretário da istração Penitenciária do governo João Doria (PSDB) Imagem: Charles Sholl/Raw Image/Estadão Conteúdo

Do UOL, em São Paulo

22/12/2022 11h18Atualizada em 23/12/2022 12h19

O futuro ministro da Justiça e Segurança Pública, Flávio Dino (PSB-MA), anunciou Nivaldo Cesar Restivo, coronel da Polícia Militar de São Paulo, como secretário nacional de Políticas Penais do governo Lula.

Restivo teve participação indireta no Massacre do Carandiru, que completou 30 anos em 2022. O militar não foi formalmente acusado de nenhum assassinato no massacre que deixou 111 presos mortos, mas, sim, de não ter impedido que policiais sob seu comando praticassem atos de violência contra detentos sobreviventes.

À época, ele era tenente do Batalhão de Choque e responsável pelo suprimento do material logístico da tropa em atuação. O crime pelo qual Restivo era acusado prescreveu antes que fosse julgado.

Quem é o coronel Restivo

  • Membro da Polícia Militar do Estado de São Paulo desde 1982, ingressou na Academia de Polícia Militar do Barro Branco.
  • Mestre e Doutor em Ciências Policiais de Segurança e Ordem Pública pelo Centro de Altos Estudos de Segurança da Polícia Militar.
  • Além da Tropa de Choque, foi comandante-geral da PM e comandou o Batalhão de Operações Especiais e a Rota (Rondas Ostensivas Tobias Aguiar).
  • É atual secretário de istração Penitenciária do governo estadual de São Paulo.

Em 2017, ao assumir o comando-geral da PM, ele defendeu a ação da polícia no Carandiru ao considerá-la "legítima e necessária".

Eu não tinha tropa sob meu comando. Não participei de intervenção direta, de qualquer natureza, seja para controlar o tumulto que se instalou, seja depois para o rescaldo, ou o que quer que seja
Nivaldo Cesar Restivo, em pronunciamento em 2017

Nome de coronel foi reprovado pela transição. O GT (Grupo de Trabalho) de Segurança Pública emitiu uma nota em que afirma "constrangimento, decepção e vergonha" pela indicação do coronel Nivaldo Cesar Restivo ao comando da secretaria.

Para um sistema prisional marcado de violações, sendo o descaso e tortura marcas recorrentes, a indicação de alguém que carrega em seu currículo a participação num dos mais trágicos eventos da história das prisões do Brasil, o Massacre do Carandiru, representa um golpe bastante duro
Nota do GT de Segurança Pública

Os integrantes da equipe declararam também que a agem de Restivo pelo comando da PM de São Paulo caminha no sentido contrário às propostas por eles. Segundo a declaração, o coronel manifestou "declarada ojeriza à democratização da política penal".

A nota lançada pelo GT ainda diz que Restivo não corresponde ao perfil adequado para assumir a secretaria.