text:
package com.intellij.diagnostic;

import com.intellij.CommonBundle;
import com.intellij.ExtensionPoints;
import com.intellij.credentialStore.CredentialAttributesKt;
import com.intellij.credentialStore.Credentials;
import com.intellij.diagnostic.errordialog.*;
import com.intellij.icons.AllIcons;
import com.intellij.ide.DataManager;
import com.intellij.ide.impl.DataManagerImpl;
import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.ide.plugins.PluginManager;
import com.intellij.ide.plugins.PluginManagerCore;
import com.intellij.ide.plugins.PluginManagerMain;
import com.intellij.ide.plugins.cl.PluginClassLoader;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.application.ex.ApplicationEx;
import com.intellij.openapi.application.ex.ApplicationInfoEx;
import com.intellij.openapi.application.ex.ApplicationManagerEx;
import com.intellij.openapi.diagnostic.*;
import com.intellij.openapi.extensions.ExtensionException;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.extensions.PluginDescriptor;
import com.intellij.openapi.extensions.PluginId;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.ui.HeaderlessTabbedPane;
import com.intellij.ui.HyperlinkLabel;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.text.DateFormatUtil;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
import com.intellij.xml.util.XmlStringUtil;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
import java.util.List;

public class IdeErrorsDialog extends DialogWrapper implements MessagePoolListener, DataProvider {
  private static final Logger LOG = Logger.getInstance(IdeErrorsDialog.class.getName());
  private final boolean myInternalMode;
  @NonNls private static final String ACTIVE_TAB_OPTION = IdeErrorsDialog.class.getName() + "activeTab";
  public static final DataKey<String> CURRENT_TRACE_KEY = DataKey.create("current_stack_trace_key");
  public static final int COMPONENTS_WIDTH = 670;
  public static Collection<Developer> ourDevelopersList = Collections.emptyList();

  private JPanel myContentPane;
  private JPanel myBackButtonPanel;
  private HyperlinkLabel.Croppable myInfoLabel;
  private JPanel myNextButtonPanel;
  private JPanel myTabsPanel;
  private JLabel myCountLabel;
  private HyperlinkLabel.Croppable myForeignPluginWarningLabel;
  private HyperlinkLabel.Croppable myDisableLink;
  private JPanel myCredentialsPanel;
  private HyperlinkLabel myCredentialsLabel;
  private JPanel myForeignPluginWarningPanel;
  private JPanel myAttachmentWarningPanel;
  private HyperlinkLabel myAttachmentWarningLabel;
  private JPanel myAttachments;

  private int myIndex = 0;
  private final List<ArrayList<AbstractMessage>> myMergedMessages = new ArrayList<>();
  private List<AbstractMessage> myRawMessages;
  private final MessagePool myMessagePool;
  private final Set<AbstractMessage> myMessagesWithIncludedAttachments = new THashSet<>(1);

  private HeaderlessTabbedPane myTabs;
  @Nullable
  private CommentsTabForm myCommentsTabForm;
  private DetailsTabForm myDetailsTabForm;
  private AttachmentsTabForm myAttachmentsTabForm;

  private ClearFatalsAction myClearAction = new ClearFatalsAction();
  private BlameAction myBlameAction;
  @Nullable
  private AnalyzeAction myAnalyzeAction;
  private boolean myMute;

  public IdeErrorsDialog(MessagePool messagePool, @Nullable LogMessage defaultMessage) {
    super(JOptionPane.getRootFrame(), false);
    myMessagePool = messagePool;
    ApplicationEx app = ApplicationManagerEx.getApplicationEx();
    myInternalMode = app != null && app.isInternal();
    setTitle(DiagnosticBundle.message("error.list.title"));
    init();
    rebuildHeaders();
    if (defaultMessage == null || !moveSelectionToMessage(defaultMessage)) {
      moveSelectionToEarliestMessage();
    }
    setCancelButtonText(CommonBundle.message("close.action.name"));
    setModal(false);
    if (myInternalMode) {
      if (ourDevelopersList.isEmpty()) {
        loadDevelopersAsynchronously();
      } else {
        myDetailsTabForm.setDevelopers(ourDevelopersList);
      }
    }
  }

  private void loadDevelopersAsynchronously() {
    Task.Backgroundable task = new Task.Backgroundable(null, "Loading Developers List", true) {
      private final Collection[] myDevelopers = new Collection[]{Collections.emptyList()};

      @Override
      public void run(@NotNull ProgressIndicator indicator) {
        try {
          myDevelopers[0] = DevelopersLoader.fetchDevelopers(indicator);
        } catch (IOException e) {
          //Notifications.Bus.register("Error reporter", NotificationDisplayType.BALLOON);
          //Notifications.Bus.notify(new Notification("Error reporter", "Communication error",
          //                                          "Unable to load developers list from server.", NotificationType.WARNING));
        }
      }

      @Override
      public void onSuccess() {
        Collection<Developer> developers = myDevelopers[0];
        myDetailsTabForm.setDevelopers(developers);
        //noinspection AssignmentToStaticFieldFromInstanceMethod
        ourDevelopersList = developers;
      }
    };
    ProgressManager.getInstance().run(task);
  }

  private boolean moveSelectionToMessage(LogMessage defaultMessage) {
    int index = -1;
    for (int i = 0; i < myMergedMessages.size(); i++) {
      final AbstractMessage each = getMessageAt(i);
      if (each == defaultMessage) {
        index = i;
        break;
      }
    }

    if (index >= 0) {
      myIndex = index;
      updateControls();
      return true;
    }
    else {
      return false;
    }
  }

  @Override
  public void newEntryAdded() {
    SwingUtilities.invokeLater(() -> {
      rebuildHeaders();
      updateControls();
    });
  }

  @Override
  public void poolCleared() {
    SwingUtilities.invokeLater(() -> doOKAction());
  }

  @Override
  public void entryWasRead() {
  }

  @NotNull
  @Override
  protected Action[] createActions() {
    if (SystemInfo.isMac) {
      return new Action[]{getCancelAction(), myClearAction, myBlameAction};
    }
    else {
      return new Action[]{myClearAction, myBlameAction, getCancelAction()};
    }
  }

  @Override
  protected void createDefaultActions() {
    super.createDefaultActions();
    myBlameAction = new BlameAction();
    myBlameAction.putValue(DialogWrapper.DEFAULT_ACTION, true);
  }

  private class ForwardAction extends AnAction implements DumbAware {
    public ForwardAction() {
      super("Next", null, AllIcons.Actions.Forward);
      AnAction forward = ActionManager.getInstance().getAction(IdeActions.ACTION_NEXT_TAB);
      if (forward != null) {
        registerCustomShortcutSet(forward.getShortcutSet(), getRootPane(), getDisposable());
      }

    }

    @Override
    public void actionPerformed(AnActionEvent e) {
      goForward();
    }

    @Override
    public void update(AnActionEvent e) {
      Presentation presentation = e.getPresentation();
      presentation.setEnabled(myIndex < myMergedMessages.size() - 1);
    }
  }

  private class BackAction extends AnAction implements DumbAware {
    public BackAction() {
      super("Previous", null, AllIcons.Actions.Back);
      AnAction back = ActionManager.getInstance().getAction(IdeActions.ACTION_PREVIOUS_TAB);
      if (back != null) {
        registerCustomShortcutSet(back.getShortcutSet(), getRootPane(), getDisposable());
      }
    }

    @Override
    public void actionPerformed(AnActionEvent e) {
      goBack();
    }

    @Override
    public void update(AnActionEvent e) {
      Presentation presentation = e.getPresentation();
      presentation.setEnabled(myIndex > 0);
    }
  }

  @Override
  protected JComponent createCenterPanel() {
    DefaultActionGroup goBack = new DefaultActionGroup();
    BackAction back = new BackAction();
    goBack.add(back);
    ActionToolbar backToolbar = ActionManager.getInstance().createActionToolbar("IdeErrorsBack", goBack, true);
    backToolbar.getComponent().setBorder(JBUI.Borders.empty());
    backToolbar.setLayoutPolicy(ActionToolbar.NOWRAP_LAYOUT_POLICY);
    myBackButtonPanel.add(backToolbar.getComponent(), BorderLayout.CENTER);

    DefaultActionGroup goForward = new DefaultActionGroup();
    ForwardAction forward = new ForwardAction();
    goForward.add(forward);
    ActionToolbar forwardToolbar = ActionManager.getInstance().createActionToolbar("IdeErrorsForward", goForward, true);
    forwardToolbar.setLayoutPolicy(ActionToolbar.NOWRAP_LAYOUT_POLICY);
    forwardToolbar.getComponent().setBorder(JBUI.Borders.empty());
    myNextButtonPanel.add(forwardToolbar.getComponent(), BorderLayout.CENTER);

    myTabs = new HeaderlessTabbedPane(getDisposable());
    final LabeledTextComponent.TextListener commentsListener = new LabeledTextComponent.TextListener() {
      @Override
      public void textChanged(String newText) {
        if (myMute) {
          return;
        }

        AbstractMessage message = getSelectedMessage();
        if (message != null) {
          message.setAdditionalInfo(newText);
        }
      }
    };
    if (!myInternalMode) {
      myDetailsTabForm = new DetailsTabForm(null);
      myCommentsTabForm = new CommentsTabForm();
      myCommentsTabForm.addCommentsListener(commentsListener);
      myTabs.addTab(DiagnosticBundle.message("error.comments.tab.title"), myCommentsTabForm.getContentPane());
      myDetailsTabForm.setCommentsAreaVisible(false);
    }
    else {
      final AnAction analyzePlatformAction = ActionManager.getInstance().getAction("AnalyzeStacktraceOnError");
      if (analyzePlatformAction != null) {
        myAnalyzeAction = new AnalyzeAction(analyzePlatformAction);
      }
      myDetailsTabForm = new DetailsTabForm(myAnalyzeAction);
      myDetailsTabForm.setCommentsAreaVisible(true);
      myDetailsTabForm.addCommentsListener(commentsListener);
    }

    myTabs.addTab(DiagnosticBundle.message("error.details.tab.title"), myDetailsTabForm.getContentPane());

    myAttachmentsTabForm = new AttachmentsTabForm();
    myAttachmentsTabForm.addInclusionListener(new ChangeListener() {
      @Override
      public void stateChanged(final ChangeEvent e) {
        updateAttachmentWarning(getSelectedMessage());
      }
    });
    myAttachments.add(myAttachmentsTabForm.getContentPane(), BorderLayout.CENTER);

    int activeTabIndex = Integer.parseInt(PropertiesComponent.getInstance().getValue(ACTIVE_TAB_OPTION, "0"));
    if (activeTabIndex >= myTabs.getTabCount() || activeTabIndex < 0) {
      activeTabIndex = 0; // may happen if myInternalMode changed since last open
    }

    myTabs.setSelectedIndex(activeTabIndex);

    myTabs.addChangeListener(new ChangeListener() {
      @Override
      public void stateChanged(ChangeEvent e) {
        final JComponent c = getPreferredFocusedComponent();
        if (c != null) {
          IdeFocusManager.findInstanceByComponent(myContentPane).requestFocus(c, true);
        }
      }
    });

    myTabsPanel.add(myTabs, BorderLayout.CENTER);

    myDisableLink.setHyperlinkText(UIUtil.removeMnemonic(DiagnosticBundle.message("error.list.disable.plugin")));
    myDisableLink.addHyperlinkListener(new HyperlinkListener() {
      @Override
      public void hyperlinkUpdate(HyperlinkEvent e) {
        if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
          disablePlugin();
        }
      }
    });

    myCredentialsLabel.addHyperlinkListener(new HyperlinkListener() {
      @Override
      public void hyperlinkUpdate(HyperlinkEvent e) {
        if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
          JetBrainsAccountDialogKt.showJetBrainsAccountDialog(getRootPane()).show();
          updateCredentialsPane(getSelectedMessage());
        }
      }
    });

    myAttachmentWarningLabel.setIcon(UIUtil.getBalloonWarningIcon());
    myAttachmentWarningLabel.addHyperlinkListener(new HyperlinkListener() {
      @Override
      public void hyperlinkUpdate(final HyperlinkEvent e) {
        if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
          myAttachmentsTabForm.selectFirstIncludedAttachment();
        }
      }
    });

    myDetailsTabForm.addAssigneeListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        if (myMute) return;

        AbstractMessage message = getSelectedMessage();
        if (message != null) {
          message.setAssigneeId(myDetailsTabForm.getAssigneeId());
        }
      }
    });

    return myContentPane;
  }

  private void moveSelectionToEarliestMessage() {
    myIndex = 0;
    for (int i = 0; i < myMergedMessages.size(); i++) {
      final AbstractMessage each = getMessageAt(i);
      if (!each.isRead()) {
        myIndex = i;
        break;
      }
    }

    updateControls();
  }

  private void disablePlugin() {
    final PluginId pluginId = findPluginId(getSelectedMessage().getThrowable());
    if (pluginId != null) {
      DisablePluginWarningDialog.disablePlugin(pluginId, getRootPane());
    }
  }

  private void goBack() {
    myIndex--;
    updateControls();
  }

  private void goForward() {
    myIndex++;
    updateControls();
  }

  private void updateControls() {
    updateCountLabel();
    final AbstractMessage message = getSelectedMessage();
    updateInfoLabel(message);
    updateCredentialsPane(message);
    updateAssigneePane(message);
    updateAttachmentWarning(message);
    myDisableLink.setVisible(canDisablePlugin(message));
    updateForeignPluginLabel(message != null ? message : null);
    updateTabs();

    myClearAction.update();
    myBlameAction.update();
    if (myAnalyzeAction != null) {
      myAnalyzeAction.update();
    }
  }

  private void updateAttachmentWarning(final AbstractMessage message) {
    if (message == null) return;

    if (!myMessagesWithIncludedAttachments.contains(message) &&
        (Registry.is("ide.diagnostics.suggest.sending.all.attachments") || myInternalMode)) {
      for(Attachment attachment:message.getAllAttachments()) attachment.setIncluded(true);
      myMessagesWithIncludedAttachments.add(message);
    }

    final List<Attachment> includedAttachments = message.getIncludedAttachments();
    if (!includedAttachments.isEmpty()) {
      myAttachmentWarningPanel.setVisible(true);
      if (includedAttachments.size() == 1) {
        myAttachmentWarningLabel.setHtmlText(
          DiagnosticBundle.message("diagnostic.error.report.include.attachment.warning", includedAttachments.get(0).getName()));
      }
      else {
        myAttachmentWarningLabel.setHtmlText(
          DiagnosticBundle.message("diagnostic.error.report.include.attachments.warning", includedAttachments.size()));
      }
    }
    else {
      myAttachmentWarningPanel.setVisible(false);
    }
  }

  private static boolean canDisablePlugin(AbstractMessage message) {
    if (message == null) {
      return false;
    }

    PluginId pluginId = findPluginId(message.getThrowable());
    return pluginId != null && !ApplicationInfoEx.getInstanceEx().isEssentialPlugin(pluginId.getIdString());
  }

  private void updateCountLabel() {
    if (myMergedMessages.isEmpty()) {
      myCountLabel.setText(DiagnosticBundle.message("error.list.empty"));
    }
    else {
      myCountLabel
        .setText(DiagnosticBundle.message("error.list.message.index.count", Integer.toString(myIndex + 1), myMergedMessages.size()));
    }
  }

  private void updateCredentialsPane(AbstractMessage message) {
    if (message != null) {
      ErrorReportSubmitter submitter = getSubmitter(message.getThrowable());
      if (submitter instanceof ITNReporter) {
        myCredentialsPanel.setVisible(true);
        Credentials credentials = ErrorReportConfigurable.getCredentials();
        if (CredentialAttributesKt.isFulfilled(credentials)) {
          assert credentials != null;
          myCredentialsLabel.setHtmlText(DiagnosticBundle.message("diagnostic.error.report.submit.report.as", credentials.getUserName()));
        }
        else {
          myCredentialsLabel.setHtmlText(DiagnosticBundle.message("diagnostic.error.report.submit.error.anonymously"));
        }
        return;
      }
    }
    myCredentialsPanel.setVisible(false);
  }

  private void updateAssigneePane(AbstractMessage message) {
    final ErrorReportSubmitter submitter = message != null ? getSubmitter(message.getThrowable()) : null;
    myDetailsTabForm.setAssigneeVisible(submitter instanceof ITNReporter && myInternalMode);
  }

  private void updateInfoLabel(AbstractMessage message) {
    if (message == null) {
      myInfoLabel.setText("");
      return;
    }
    final Throwable throwable = message.getThrowable();
    if (throwable instanceof MessagePool.TooManyErrorsException) {
      myInfoLabel.setText("");
      return;
    }

    StringBuilder text = new StringBuilder();
    PluginId pluginId = findPluginId(throwable);
    if (pluginId == null) {
      if (throwable instanceof AbstractMethodError) {
        text.append(DiagnosticBundle.message("error.list.message.blame.unknown.plugin"));
      }
      else {
        text.append(DiagnosticBundle.message("error.list.message.blame.core", ApplicationNamesInfo.getInstance().getProductName()));
      }
    }
    else {
      text.append(DiagnosticBundle.message("error.list.message.blame.plugin", PluginManager.getPlugin(pluginId).getName()));
    }
    text.append(" ").append(DiagnosticBundle.message("error.list.message.info",
                                                     DateFormatUtil.formatPrettyDateTime(message.getDate()),
                                                     myMergedMessages.get(myIndex).size()));

    String url = null;
    if (message.isSubmitted()) {
      SubmittedReportInfo info = message.getSubmissionInfo();
      url = info.getURL();
      appendSubmissionInformation(info, text);
      text.append(". ");
    }
    else if (message.isSubmitting()) {
      text.append(" Submitting...");
    }
    else if (!message.isRead()) {
      text.append(" ").append(DiagnosticBundle.message("error.list.message.unread"));
    }
    myInfoLabel.setHtmlText(XmlStringUtil.wrapInHtml(text));
    myInfoLabel.setHyperlinkTarget(url);
  }

  public static void appendSubmissionInformation(SubmittedReportInfo info, StringBuilder out) {
    if (info.getStatus() == SubmittedReportInfo.SubmissionStatus.FAILED) {
      out.append(" ").append(DiagnosticBundle.message("error.list.message.submission.failed"));
    }
    else if (info.getURL() != null && info.getLinkText() != null) {
      out.append(" ").append(DiagnosticBundle.message("error.list.message.submitted.as.link", info.getURL(), info.getLinkText()));
      if (info.getStatus() == SubmittedReportInfo.SubmissionStatus.DUPLICATE) {
        out.append(" ").append(DiagnosticBundle.message("error.list.message.duplicate"));
      }
    }
    else {
      out.append(DiagnosticBundle.message("error.list.message.submitted"));
    }
  }

  private void updateForeignPluginLabel(AbstractMessage message) {
    if (message != null) {
      final Throwable throwable = message.getThrowable();
      ErrorReportSubmitter submitter = getSubmitter(throwable);
      if (submitter == null) {
        PluginId pluginId = findPluginId(throwable);
        IdeaPluginDescriptor plugin = PluginManager.getPlugin(pluginId);
        if (plugin == null || PluginManagerMain.isDevelopedByJetBrains(plugin)) {
          myForeignPluginWarningPanel.setVisible(false);
          return;
        }

        myForeignPluginWarningPanel.setVisible(true);
        String vendor = plugin.getVendor();
        String contactInfo = plugin.getVendorUrl();
        if (StringUtil.isEmpty(contactInfo)) {
          contactInfo = plugin.getVendorEmail();
        }
        if (StringUtil.isEmpty(vendor)) {
          if (StringUtil.isEmpty(contactInfo)) {
            myForeignPluginWarningLabel.setText(DiagnosticBundle.message("error.dialog.foreign.plugin.warning.text"));
          }
          else {
            myForeignPluginWarningLabel
              .setHyperlinkText(DiagnosticBundle.message("error.dialog.foreign.plugin.warning.text.vendor") + " ",
                                contactInfo, ".");
            myForeignPluginWarningLabel.setHyperlinkTarget(contactInfo);
          }
        }
        else {
          if (StringUtil.isEmpty(contactInfo)) {
            myForeignPluginWarningLabel.setText(DiagnosticBundle.message("error.dialog.foreign.plugin.warning.text.vendor") +
                                                " " + vendor + ".");
          }
          else {
            myForeignPluginWarningLabel
              .setHyperlinkText(
                DiagnosticBundle.message("error.dialog.foreign.plugin.warning.text.vendor") + " " + vendor + " (",
                contactInfo, ").");
            final String target = (StringUtil.equals(contactInfo, plugin.getVendorEmail()) ? "mailto:" : "") + contactInfo;
            myForeignPluginWarningLabel.setHyperlinkTarget(target);
          }
        }
        myForeignPluginWarningPanel.setVisible(true);
        return;
      }
    }
    myForeignPluginWarningPanel.setVisible(false);
  }

  private void updateTabs() {
    myMute = true;
    try {
      if (myInternalMode) {
        boolean hasAttachment = false;
        for (ArrayList<AbstractMessage> merged : myMergedMessages) {
          final AbstractMessage message = merged.get(0);
          if (!message.getAllAttachments().isEmpty()) {
            hasAttachment = true;
            break;
          }
        }
        myTabs.setHeaderVisible(hasAttachment);
      }

      final AbstractMessage message = getSelectedMessage();
      if (myCommentsTabForm != null) {
        if (message != null) {
          String msg = message.getMessage();
          int i = msg.indexOf("\n");
          if (i != -1) {
            // take first line
            msg = msg.substring(0, i);
          }
          myCommentsTabForm.setErrorText(msg);
        }
        else {
          myCommentsTabForm.setErrorText(null);
        }
        if (message != null) {
          myCommentsTabForm.setCommentText(message.getAdditionalInfo());
          myCommentsTabForm.setCommentsTextEnabled(true);
        }
        else {
          myCommentsTabForm.setCommentText(null);
          myCommentsTabForm.setCommentsTextEnabled(false);
        }
      }

      myDetailsTabForm.setDetailsText(message != null ? getDetailsText(message) : null);
      if (message != null) {
        myDetailsTabForm.setCommentsText(message.getAdditionalInfo());
        myDetailsTabForm.setCommentsTextEnabled(true);
      }
      else {
        myDetailsTabForm.setCommentsText(null);
        myDetailsTabForm.setCommentsTextEnabled(false);
      }

      myDetailsTabForm.setAssigneeId(message == null ? null : message.getAssigneeId());

      List<Attachment> attachments = message != null ? message.getAllAttachments() : Collections.emptyList();
      myAttachmentsTabForm.getContentPane().setVisible(!attachments.isEmpty());
      myAttachmentsTabForm.setAttachments(attachments);
    }
    finally {
      myMute = false;
    }
  }

  private static String getDetailsText(AbstractMessage message) {
    final Throwable throwable = message.getThrowable();
    if (throwable instanceof MessagePool.TooManyErrorsException) {
      return throwable.getMessage();
    }
    else {
      return message.getMessage() + "\n" + message.getThrowableText();
    }
  }

  private void rebuildHeaders() {
    myMergedMessages.clear();
    myRawMessages = myMessagePool.getFatalErrors(true, true);

    Map<String, ArrayList<AbstractMessage>> hash2Messages = mergeMessages(myRawMessages);

    for (final ArrayList<AbstractMessage> abstractMessages : hash2Messages.values()) {
      myMergedMessages.add(abstractMessages);
    }
  }

  private void markAllAsRead() {
    for (AbstractMessage each : myRawMessages) {
      each.setRead(true);
    }
  }

  @Override
  public JComponent getPreferredFocusedComponent() {
    final int selectedIndex = myTabs.getSelectedIndex();
    JComponent result = null;
    if (selectedIndex == 0) {
      result = myInternalMode ? myDetailsTabForm.getPreferredFocusedComponent() : myCommentsTabForm.getPreferredFocusedComponent();
    }
    else if (selectedIndex == 1 && !myInternalMode) {
      result = myDetailsTabForm.getPreferredFocusedComponent();
    }

    return result != null ? result : super.getPreferredFocusedComponent();
  }

  private static Map<String, ArrayList<AbstractMessage>> mergeMessages(List<AbstractMessage> aErrors) {
    Map<String, ArrayList<AbstractMessage>> hash2Messages = new LinkedHashMap<>();
    for (final AbstractMessage each : aErrors) {
      final String hashCode = getThrowableHashCode(each.getThrowable());
      ArrayList<AbstractMessage> list;
      if (hash2Messages.containsKey(hashCode)) {
        list = hash2Messages.get(hashCode);
      }
      else {
        list = new ArrayList<>();
        hash2Messages.put(hashCode, list);
      }
      list.add(0, each);
    }
    return hash2Messages;
  }

  @Nullable
  private AbstractMessage getSelectedMessage() {
    return getMessageAt(myIndex);
  }

  private AbstractMessage getMessageAt(int idx) {
    if (idx < 0 || idx >= myMergedMessages.size()) return null;
    return myMergedMessages.get(idx).get(0);
  }

  @Nullable
  public static PluginId findPluginId(Throwable t) {
    if (t instanceof PluginException) {
      return ((PluginException)t).getPluginId();
    }

    Set<String> visitedClassNames = ContainerUtil.newHashSet();
    for (StackTraceElement element : t.getStackTrace()) {
      if (element != null) {
        String className = element.getClassName();
        if (visitedClassNames.add(className) && PluginManagerCore.isPluginClass(className)) {
          PluginId id = PluginManagerCore.getPluginByClassName(className);
          if (LOG.isDebugEnabled()) {
            LOG.debug(diagnosePluginDetection(className, id));
          }
          return id;
        }
      }
    }

    if (t instanceof NoSuchMethodException) {
      // check is method called from plugin classes
      if (t.getMessage() != null) {
        String className = "";
        StringTokenizer tok = new StringTokenizer(t.getMessage(), ".");
        while (tok.hasMoreTokens()) {
          String token = tok.nextToken();
          if (token.length() > 0 && Character.isJavaIdentifierStart(token.charAt(0))) {
            className += token;
          }
        }

        if (PluginManagerCore.isPluginClass(className)) {
          return PluginManagerCore.getPluginByClassName(className);
        }
      }
    }
    else if (t instanceof ClassNotFoundException) {
      // check is class from plugin classes
      if (t.getMessage() != null) {
        String className = t.getMessage();

        if (PluginManagerCore.isPluginClass(className)) {
          return PluginManagerCore.getPluginByClassName(className);
        }
      }
    }
    else if (t instanceof AbstractMethodError && t.getMessage() != null) {
      String s = t.getMessage();
      // org.antlr.works.plugin.intellij.PIFileType.getHighlighter(Lcom/intellij/openapi/project/Project;Lcom/intellij/openapi/vfs/VirtualFile;)Lcom/intellij/openapi/fileTypes/SyntaxHighlighter;
      int pos = s.indexOf('(');
      if (pos >= 0) {
        s = s.substring(0, pos);
        pos = s.lastIndexOf('.');
        if (pos >= 0) {
          s = s.substring(0, pos);
          if (PluginManagerCore.isPluginClass(s)) {
            return PluginManagerCore.getPluginByClassName(s);
          }
        }
      }
    }

    else if (t instanceof ExtensionException) {
      String className = ((ExtensionException)t).getExtensionClass().getName();
      if (PluginManagerCore.isPluginClass(className)) {
        return PluginManagerCore.getPluginByClassName(className);
      }
    }

    return null;
  }

  @NotNull
  private static String diagnosePluginDetection(String className, PluginId id) {
    String msg = "Detected plugin " + id + " by class " + className;
    IdeaPluginDescriptor descriptor = PluginManager.getPlugin(id);
    if (descriptor != null) {
      msg += "; ideaLoader=" + descriptor.getUseIdeaClassLoader();

      ClassLoader loader = descriptor.getPluginClassLoader();
      msg += "; loader=" + loader;
      if (loader instanceof PluginClassLoader) {
        msg += "; loaded class: " + ((PluginClassLoader)loader).hasLoadedClass(className);
      }
    }
    return msg;
  }

  private class ClearFatalsAction extends AbstractAction {
    protected ClearFatalsAction() {
      super(DiagnosticBundle.message("error.dialog.clear.action"));
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      myMessagePool.clearFatals();
      doOKAction();
    }

    public void update() {
      putValue(NAME, DiagnosticBundle.message(myMergedMessages.size() > 1 ? "error.dialog.clear.all.action" : "error.dialog.clear.action"));
      setEnabled(!myMergedMessages.isEmpty());
    }
  }

  private class BlameAction extends AbstractAction {
    protected BlameAction() {
      super(DiagnosticBundle.message("error.report.to.jetbrains.action"));
    }

    public void update() {
      AbstractMessage logMessage = getSelectedMessage();
      if (logMessage != null) {
        ErrorReportSubmitter submitter = getSubmitter(logMessage.getThrowable());
        if (submitter != null) {
          putValue(NAME, submitter.getReportActionText());
          setEnabled(!(logMessage.isSubmitting() || logMessage.isSubmitted()));
          return;
        }
      }
      putValue(NAME, DiagnosticBundle.message("error.report.to.jetbrains.action"));
      setEnabled(false);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      boolean closeDialog = myMergedMessages.size() == 1;
      final AbstractMessage logMessage = getSelectedMessage();
      boolean reportingStarted = reportMessage(logMessage, closeDialog);
      if (closeDialog) {
        if (reportingStarted) {
          doOKAction();
        }
      }
      else {
        rebuildHeaders();
        updateControls();
      }
    }

    private boolean reportMessage(final AbstractMessage logMessage, final boolean dialogClosed) {
      final ErrorReportSubmitter submitter = getSubmitter(logMessage.getThrowable());
      if (submitter == null) return false;

      logMessage.setSubmitting(true);
      if (!dialogClosed) {
        updateControls();
      }
      Container parentComponent;
      if (dialogClosed) {
        IdeFrame ideFrame = UIUtil.getParentOfType(IdeFrame.class, getContentPane());
        parentComponent = ideFrame.getComponent();
      }
      else {
        parentComponent = getContentPane();
      }

      return submitter.submit(
        getEvents(logMessage), logMessage.getAdditionalInfo(), parentComponent, submittedReportInfo -> {
          logMessage.setSubmitting(false);
          logMessage.setSubmitted(submittedReportInfo);
          ApplicationManager.getApplication().invokeLater(() -> {
            if (!dialogClosed) {
              updateOnSubmit();
            }
          });
        });
    }

    private IdeaLoggingEvent[] getEvents(final AbstractMessage logMessage) {
      if (logMessage instanceof GroupedLogMessage) {
        final List<AbstractMessage> messages = ((GroupedLogMessage)logMessage).getMessages();
        IdeaLoggingEvent[] res = new IdeaLoggingEvent[messages.size()];
        for (int i = 0; i < res.length; i++) {
          res[i] = getEvent(messages.get(i));
        }
        return res;
      }
      return new IdeaLoggingEvent[]{getEvent(logMessage)};
    }

    private IdeaLoggingEvent getEvent(final AbstractMessage logMessage) {
      if (logMessage instanceof LogMessageEx) {
        return ((LogMessageEx)logMessage).toEvent();
      }
      return new IdeaLoggingEvent(logMessage.getMessage(), logMessage.getThrowable()) {
        @Override
        public AbstractMessage getData() {
          return logMessage;
        }
      };
    }
  }

  protected void updateOnSubmit() {
    updateControls();
  }

  @Override
  public Object getData(String dataId) {
    if (CURRENT_TRACE_KEY.is(dataId)) {
      final AbstractMessage message = getSelectedMessage();
      if (message != null) {
        return getDetailsText(message);
      }
    }
    return null;
  }

  @Nullable
  public static ErrorReportSubmitter getSubmitter(final Throwable throwable) {
    if (throwable instanceof MessagePool.TooManyErrorsException || throwable instanceof AbstractMethodError) {
      return null;
    }
    final PluginId pluginId = findPluginId(throwable);
    final ErrorReportSubmitter[] reporters;
    try {
      reporters = Extensions.getExtensions(ExtensionPoints.ERROR_HANDLER_EP);
    }
    catch (Throwable t) {
      return null;
    }
    IdeaPluginDescriptor plugin = PluginManager.getPlugin(pluginId);
    if (plugin == null) {
      return getCorePluginSubmitter(reporters);
    }
    for (ErrorReportSubmitter reporter : reporters) {
      final PluginDescriptor descriptor = reporter.getPluginDescriptor();
      if (descriptor != null && Comparing.equal(pluginId, descriptor.getPluginId())) {
        return reporter;
      }
    }
    if (PluginManagerMain.isDevelopedByJetBrains(plugin)) {
      return getCorePluginSubmitter(reporters);
    }
    return null;
  }

  @Nullable
  private static ErrorReportSubmitter getCorePluginSubmitter(ErrorReportSubmitter[] reporters) {
    for (ErrorReportSubmitter reporter : reporters) {
      final PluginDescriptor descriptor = reporter.getPluginDescriptor();
      if (descriptor == null || PluginId.getId(PluginManagerCore.CORE_PLUGIN_ID) == descriptor.getPluginId()) {
        return reporter;
      }
    }
    return null;
  }

  @Override
  public void doOKAction() {
    onClose();
    super.doOKAction();
  }

  private void onClose() {
    markAllAsRead();
    PropertiesComponent.getInstance().setValue(ACTIVE_TAB_OPTION, String.valueOf(myTabs.getSelectedIndex()));
  }

  @Override
  public void doCancelAction() {
    onClose();
    super.doCancelAction();
  }

  @Override
  protected String getDimensionServiceKey() {
    return "IdeErrosDialog";
  }

  private static String getThrowableHashCode(Throwable exception) {
    try {
      return md5(StringUtil.getThrowableText(exception), "stack-trace");
    }
    catch (NoSuchAlgorithmException e) {
      LOG.error(e);
      return "";
    }
  }

  private static String md5(String buffer, @NonNls String key) throws NoSuchAlgorithmException {
    MessageDigest md5 = MessageDigest.getInstance("MD5");
    md5.update(buffer.getBytes(StandardCharsets.UTF_8));
    byte[] code = md5.digest(key.getBytes(StandardCharsets.UTF_8));
    BigInteger bi = new BigInteger(code).abs();
    return bi.abs().toString(16);
  }

  private class AnalyzeAction extends AbstractAction {
    private final AnAction myAnalyze;

    public AnalyzeAction(AnAction analyze) {
      super(analyze.getTemplatePresentation().getText());
      putValue(Action.MNEMONIC_KEY, analyze.getTemplatePresentation().getMnemonic());
      myAnalyze = analyze;
    }

    public void update() {
      setEnabled(getSelectedMessage() != null);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      DataContext dataContext = ((DataManagerImpl)DataManager.getInstance()).getDataContextTest((Component)e.getSource());
      AnActionEvent event = AnActionEvent.createFromAnAction(myAnalyze, null, ActionPlaces.UNKNOWN, dataContext);
      Project project = CommonDataKeys.PROJECT.getData(dataContext);
      if (project != null) {
        myAnalyze.actionPerformed(event);
        doOKAction();
      }
    }
  }
}


If you're a fan of BLACKPINK, you must be eagerly waiting for the group's comeback on June 15th. To make the wait a little bit easier, we have prepared a brand new K-QUIZ just for you! Just answer a few simple questions and this quiz will predict which member of BLACKPINK is the perfect best friend material for you. So hurry up and take the quiz, and don't forget to share the results with your friends!
Have you ever wondered which member of BLACKPINK would be your best friend in an alternate universe? If you have, you've come to the right place. If you haven't, you've also come to the right place. Just take this K-QUIZ and we'll tell you which BLACKPINK member would best suit you as a best friend.
Did you enjoy the quiz? Let us know in the comment section below. Officially Kmusic will continue bringing you constant updates on Korean entertainment as well as more fun content like this K-QUIZ, so stay tuned.


I am Mabel . I Love working with kids. I am single. I love going for a walk, and swimming.
�	implementing program on a day to day basis, like Play time.
I worked at the University Of Victoria International Office. Anne is the Coordinator, Counseling Services/International Student Programs. End of contract.
I worked at South Park school downtown. Linda was my boss. I stopped working when I got another job.


Approximately 50 acres of Lush Byfield Rainforest with several cleared house sites.
This large picturesque Byfield house-block is surrounded by luscious rainforest. It boasts ample water, fertile soil and has several cleared house sites to choose from. It already has power, phone access and a 10 mega litre water licence from Waterpark creek. Backing onto the tranquil Waterpark Creek it is truly a rare find. The owner is eager to sell this beauty reducing the price from $410,000 to $330,000. If you have ever dreamt of moving to paradise this Property is for you.


I saw this recipe from The Kitchn for coconut milk cupcakes and adapted it. It called for a cream cheese frosting, which wasn't going to happen, so I decided to try a whipped coconut frosting I see everywhere, like here or here. In essence, you put a can of coconut milk in the fridge, then use the fat on top to make frosting by whipping it and adding sweetener (the leftover coconut water can be frozen and used for smoothies, if you don't want to waste anything). The cupcakes themselves were delicious, but sadly, the frosting fell short of my expectations. I got very little frosting, and it had nowhere near the consistency shown in pictures in my reference posts; mine was both granular and too liquid, as well as unstable. I believe this has to do with inconsistencies between the fat content of various brands (as was the case when I made pumpkin ice cream). Both my reference posts used Native Forest brand, while I still had Goya. I'm going to make an effort to look for it. (I heard Walmart has it, of all places, but I so rarely set foot there!) At least my coconut milk didn't have any stabilizers or additives to keep it homogenized, which was all I had cared about at that time. I do have another recipe for coconut frosting up my sleeve, but it's more finicky and I wasn't in the mood to attempt it. So in the end, I used Rice Whip to make a pretty cupcake for the above picture; the below is what the coconut frosting looked like when I tried it.
Preheat the oven to 350 °F. Grease two standard sized muffin tins (the original recipe said it yielded 20 to 22 cupcakes, but I got 23 and could have squeezed a 24th one out of it, so I'm going to say it makes 2 dozen – I just froze what we weren't eating right then).
In a large bowl or stand mixer, cream together margarine and sugar until light and fluffy, about 2-3 minutes. Add eggs, one at a time, then the vanilla and coconut extracts, until batter is well combined.
Whisk together the cake flour, baking powder, and salt. Add the flour mixture to the creamed butter alternately with the coconut milk until all the ingredients are thoroughly incorporated.
Pour batter into cupcake liners no more than two-thirds of the way full. Bake for 25-28 minutes, until light golden brown and a toothpick comes out clean. Remove cupcakes to a wire rack and allow to cool completely before frosting.


Dept. of Commerce (FA) has organized a special Lecture programme on "Water management - Interlinking of Rivers" on 30.3.2017 at 11.00 am at seminar Hall. All are welcome.
A special Meeting on "Islamic Banking, Finance and Insurance"
UGC Sponsored National Level Seminar on "Impact of Minority Educational Institutions in the Empowerment of Deprived Classes in India"


The "Zero" loss does not exist and even if it existed, it should not be possible to measure it. So it is always good to define prior the permissible loss of the own piece, basing on tables given by the norms.
After this first test it is necessary to study the fluid of exercise ( gas or liquid ) and the operative pressures to which the element to test is subjected.
In case of gas components, where does not exist a "watershed" between the molecular dimensions of the fluids (test/operative), we have to follow the only danger evaluation: for example the same element for city gas can have two allowable loss levels completely different in case it is applied to a domestic environment (kitchen) or through open-wire transmission lines.
In case of components for liquids (water/blood/fuel/oil, etc..) and also referring to the danger level in loss case, there are normative parameters of leakage which is measured in air where the liquid will not certainly draw, thanks to the molecular link between air and a particular fluid.
In reality, where it is possible, it is better to apply more elevated pressures, in the limits of 1 to 6 Bar at most. Thanks to this solution, the test costs can be reduced and the test performances can be sensitively improved. Improving the test pressure, we obtain a loss amplification, which generically is not linear to the pressure: if for example we measure 1 nCC/minute at 1 Bar test, the same loss measured at 5 Bar can be more major than 5nCC/minute.
Moreover, a major pressure amplifies the eventual defect, if elastic, chipping the meat us as, for example, in case of welding on plastic or cracks.
In opposition it is necessary to value the negative aspects of major pressures, such as major settlement times in case of plastic elements, "under mask" losses in case for example of brim gaskets where the elevated pressure increases the leak of a defective element and problems connected with the safety for people and surrounding environment.
So the right test pressures must be sought with the collaboration of professional men with an experience which is matured in years and above all with the instrumentation useful to execute the initial tests of the case.


text:
Mark Ruffalo Thinks Zoe Saldana or Emma Stone Should Play She-Hulk
Stubby the Rocket
Tue Jul 1, 2014 12:40pm 9 comments Favorite This
Avengers: Age of Ultron star Mark Ruffalo took to Reddit's r/IAmA subreddit yesterday with the call "Reddit, ready for Ruffalo?" (yes, we were). For a few lovely hours, he talked all things Hulk with us, shared photos of his bunny, and compared his real-life friendship with Robert Downey Jr. to Science Bros.
Our favorite answer was who Ruffalo thought should play Jennifer Walters/She-Hulk, Bruce Banner's cousin who probably isn't always angry but certainly gets pissed off from time to time:
I think Zoe Saldana would be a great She-Hulk. It'd be nice to see someone like her join the Avengers. Or someone quiet and demure like Emma Stone would be nice. But it would be up to the powers that be.
We wonder if he nominated Saldana since she's currently rocking the green look as Gamora in Guardians of the Galaxy? But then Ruffalo suggested Emma Stone—who certainly has some time on her hands to play another Marvel character—and we dig that even more, although where Ruffalo got the impression that Stone is quiet and demure, or that lawyers are quiet and demure, we dunno.
If that photo above (from Ruffalo's Instagram) didn't melt your heart enough, check out what he had to say when asked if his real-life bromance with Robert Downey Jr. is as good as their on-screen dynamic:
Better. We have a really good friendship. We've known each other since before Zodiac. And he's kind of like an older brother that I wish I had. He sort of looks out for me, and I remember when the role came up in the movie, I reached out to him, I was nervous about it, I said, "I don't know if I can do this" and he said, "It's alright buddy, I gotcha."
Other fun things we learned about Ruff (he said we could call him that):
He'll play the Hulk "as long as they'll have me"—though his personal stopping point seems to be his 50s, or about three movies from now.
He's "a secret introvert posing as an extrovert" (awww).
His favorite thing about shooting in England is TEA!!!!!!!!—that's exactly how he wrote it. Now we're envisioning HULK TEA TIME.
Having first worked with Andy Serkis on the rom-com 13 Going on 30, they've bonded over playing iconic CGI creatures: "He's the brother pioneer in motion capture."
His favorite Avenger is Black Widow because "she's just so cool" and "she has to rely on her wits and her own attributes" in a fight.
His pet rabbit is named Blackjack and it looks so snuggly.
His favorite Pokemon is Squirtle. SQUIRTLE.
All we want now is for the entire Avengers cast to do a group AMA, despite the fact that it would probably break Tumblr.
Photo: Instagram/Mark Ruffalo
AvengersAvengers: Age of UltronHulkMark RuffaloMarvel Cinematic UniverseOn Our RadarRedditRobert Downey Jr.She-Hulk
Marvel Reportedly Casts Ethan Hawke as Moon Knight's Main Villain
Eight of Our Favorite In-Universe Superfans
The Next Crop of MCU Shows Include Armor Wars, Ironheart, and Secret Invasion

redpajama_set_name: RedPajamaCommonCrawl


Entretien Clair Et Net Enr, painter, listed under "Painters" category, is located at 4945 Rue Kent Pierrefonds QC, H8Z 2T2, Canada and can be reached by 5146267577 phone number. Entretien Clair Et Net Enr has currently 0 reviews.
Browse all Painters in Pierrefonds QC.


Blizzard vs BNETD case is still in development in the courts for presumable violation of the Digital Millennium Copyright Act (DMCA). The Electronic Frontier Foundation is following up on the case and has posted an article wrapping up what has happened so far in the courts. The Electronic Frontier Foundation has made available an MP3 of the audio of Oral Arguments before the Eight Circuit Court of Appeals that took place on June 20. You can download the audio here.


text:
Viezec has been efficaciously treating and providing healthcare services to patients from across the globe, who are seeking cost-effective and quality surgery in India. This is an instructive page for our health-seeking friends and patients from Saudi Arabia covering all the facets of traveling to India from Saudi Arabia for first-rate medical care.
Viezec is the first registered (Government of India) medical tourism and healthcare provider group of India. It has been efficiently helping patients across the world by providing healthcare services of the finest quality- patients, who are in the lookout for good-quality medical amenities at reasonable prices. This page caters to our Saudi Arabia n friends seeking treatment in India, and has all the info focused on the aspects connected to travelling to India for healthcare concerns. Viezec is the top medical tourism service provider of India, catering to universal patient care and promising most favorable assistance to folks in quest of all kinds of medical treatments and surgeries available in India. The hospitals and clinics allied with us are amid the most progressive ones and have the most cutting-edge facilities that are at par with global standards. Not only this, the treatment packages and programs are designed and tailored according to the requirements of the patients and match global standards. Thus, Viezec offers you easy and smooth access to the biggest network of healthcare providers – hospitals, nursing homes, surgeons, physicians and clinics of India. A network that is spread across more than 15 cities of India and there are over 5000 healthcare specialists in the panel. We are an ISO QMS certified for all our administrative protocols guaranteeing safe and best practices for our patients.
Why is Viezec different and better?
Saudi Arabian Citizens are very sensitive towards their health requirements. Since the medical substructure is not so developed in Saudi Arabia, patients prefer to travel overseas for medical management. This has been the case in the past also, when only the rich and the wealthy Saudi Arabians could travel to other nations to get treated. With India evolving as one of the finest and chief medical tourism hubs of the world, just like patients from other nations, patients from Saudi Arabia also can now afford numerous treatments and have now began flocking to India for all health related concerns. Viezec – as the name advocates has always been at the forefront in accomplishing these prerequisites and has become the most favored healthcare related service provider for Saudi Arabian patients.
Straight forward – simple booking process
Low cost – a fraction of the cost of what it is in UK/Saudi Arabia
Low risk – world's premier standards of clinical care, safety and surgical procedures
Lowest infection rates – Less than 0.5 percent
Fast and efficient service – instantaneous treatment with much lower waiting periods
Full patient support service – 24/7 service
No doctors' referral necessary
Specialist consultations – scans, clinical examinations and consultations at short notice
Strive continuously to maintain the highest levels of services
Seeking superiority in healthcare
Simple forthright methodology towards the client/patient
High speed delivery of our amenities
Reactive and approachable to our clients' requirements
To offer a low risk and safe environment all the time
Maintaining the premium standards of clinical care and surgery
About Saudi Arabia
Saudi Arabia is a desert country encircling most of the Arabian Peninsula, with Red Sea and Persian (Arabian) Gulf coastlines. Known as the birthplace of Islam, it is home to the religion's 2 most sacred mosques: Masjid al-Haram, in Mecca, destination of the annual Hajj pilgrimage and Medina's Masjid an-Nabawi, burial site of the prophet Muhammad. Riyadh, the capital, is a skyscraper-filled megalopolis. Saudi Arabia is marginally less than one-fourth the size of the United States. Saudi Arabia is surrounded on by Jordan and Iraq, Kuwait, Persian Gulf, Qatar and the United Arab Emirates (UAE); on the sea by Oman and also by Yemen; and on the w by the Red Sea and the Gulf of Aqaba, with a total assessed land boundary length of 4,431 km (2,753 mi) and a coastline of 2,640 km (1,640 mi).
But when it comes to medical facilities in Saudi Arabian nations, poor condition and ineffective availability of good doctors, nurses, hospitals and equipments forces the Saudi Arabian persons to look outside their nation for treatment. With medical tourism picking up at a fast pace, a huge number of patients are travelling from Saudi Arabia to India for several medical and surgical treatments. The real attraction to medical tourism to India for Saudi Arabian patients is saving money on what usually are very costly procedures i.e. the cost of surgery in India for kidney transplants, cancer treatments, amid others, can be as low as just a tenth or are not even available in maximum of the Saudi Arabian nations.
There have been countless civilizations that rose and fell, some even disappeared into oblivion but the spirit of India remains unassailable. India is one of the primogenital civilizations in the world, and proudly homes a variegated multiplicity and rich cultural heritage. It has attained all-round socio-economic progress over the years. India is the 7th largest nation in the world and stands apart from the left over Asia, encircled by mountains and the sea, which give the nation a distinctive geographical prettiness. India has a diverse aspect of its exquisiteness and persona to proffer to each of the travellers visiting the nation. Situated in South Asia, surrounded by Pakistan, Nepal, China and Bangladesh, India is South Asia's largest, sovereign, democratic republic. Swarming with a billion plus folks, India will astonish you with its diversity; be it the snow-draped peaks of the north, the sunlit beaches down south, to dense forests, attractive temples, and pulsating festivals to cities that have developed to become the IT hubs of the nation. Referred to as the prime democracy in the world, it is one of the quickest growing economies. Further, because of its powerful diversity, India makes a fascinating tourist destination coupled with delicious cuisine that would unquestionably make persons come back for more.
Spiritually, India respects all belief structures and is a secular nation where countless religions were born and are living and booming together. As Mark Twain correctly described India in the following lines, India is the cradle of the human race, the birthplace of human speech, the mother of history, the grandma of legend, and the great grandmother of tradition. Our most valued and most informative materials in the history of man are treasured up in India only. Mark Twain said these lines eras ago and India undeniably fits the description.
Why should Saudi Arabia ns choose India for various healthcare treatments and procedures?
There are countless reasons why India should be selected as the ultimate medical tourism destination. Visualize a complex medical procedure being done in India by the most skillful surgeons and at prices as low as one-tenth of what it costs in other primary countries. That is India! India has some of the best skilled professionals in each and every medical sphere and this fact has now been acknowledged by individuals around the globe. Right from quality of services, range of procedures and treatment options, handiness of top-notch infrastructure and expert manpower to implement any medical procedure, to zero waiting time, the list of advantages goes on. With the most reasonable charges for treatment, India is a very beneficial destination for individuals desiring to get treated here. India offers topnotch medical facilities, at par with any of the western nations. All top and recognized hospitals have invested a good deal of capital in technology and operative techniques. Thus, complicated heart surgeries, cancer cure and surgeries, neurosurgeries and even general surgeries are handled by using high-end technology for safe and better results, to minimalize complications, enable quicker retrieval and lessen the length of hospital stay. With the superlative infrastructure, the most favorable medical facilities, accompanied with the most viable prices, you can stay assured of getting simply the best in India.
Some of the reasons that place us in a further advantageous position than others
Free second opinion – When it comes to disease and related procedures, indeed there can be some doubts in your mind; regarding the capability of the doctor or about the diagnostic part. So as to clear this dilemma, we can arrange for free second opinion in our empanelled hospitals. This will certainly benefit in clearing all your doubts and bolster the trust in our relationship further.
Clinical camps – So as to generate awareness about numerous health issues as well as to offer free and easily accessible services, clinical camps are organized.
Special packages – Cost is evidently one of the key driving factors that come into consideration while selecting a treatment destination. We make sure that patients are joyful and superlatively gratified with the pricing of the treatments and processes they are eyeing for. We have tailor-made packages bearing in mind that patients are coming from all segments of the society.
Language Assistance – This is a very critical issue because health problems need to be communicated correctly and in a very comprehensive manner. Consequently, it is very imperative that the medical staff is adept of handling this language problem. We look after this issue by arranging proficient translators/interpreters so that your requirement reaches the doctor appropriately and vice versa.
Follow up services – The most significant phase after any surgery is the follow up. Without any follow-up, the process is considered half-finished. Follow up is significant both for patient as well as the doctor/surgeon. We make sure that there are no problems or disruptions in the follow up. We arrange for follow up amenities even after the patient is back in his own motherland, after his efficacious surgery in India.
Quick visa assistance – We have 24/7 visa assistance staff to take care of all your queries and requirements related to visa. We make it simple and hassle-free for you so that there is low amount of time wastage bearing in mind the health factor and the apparent urgency.
Special food – Every treatment and process comes along with its own dietary constraints. We check that the food problems and such constraints are well taken care of. Customized diet plans are offered keeping in mind prompt recovery and for better results.
Network of hospitals
Our network of hospitals is spread across 15 cities of India with ground support and logistics amenities present in all the cities. Centered on the medical reports of the patients, our specialists recommend them to the most appropriate facility for their medical management. The reference also takes into consideration the monetary aspect of the patient's family, air connectivity from the patient's home town, the destination of the medical treatment and the time interval that a patient would be required to stay in India. We comprehend that based on individual patients' prerequisites as these are very crucial aspects on which the patient's decision is based. Besides the corporate hospitals, our network also encircles the Multi-Specialty Nursing Homes, Branded Clinics, Trust Hospitals and Economy Hospitals, where treatments are much more reasonable. This makes it very feasible for the patients coming from all socio-economic sections to get quality healthcare. Following are some of the corporate Hospitals and clinics associated with Viezec, where the Saudi Arabian patients can get the optimal medical treatment.
Medical treatments and surgeries proffered by India
Saudi Arabian medical tourists visit India for several health issues and to avail levelheadedly priced treatments in India. Some of the techniques and treatments are:
Spine and Neurosurgery -The scope of neuro and spinal operations has widened extensively. There is lots of research which is being done in this arena and as a result many newer methods have evolved.
Cardiosurgery and Cardiac Medical Conditions – Cardiac surgery is surgery of the heart or the other key blood vessels which include Vena cavae, Pulmonary artery, Pulmonary veins, Aorta. With the progression of medical science and technological growth, doctors are more armed and competent to handle cardiac surgeries.
Orthopedics and Joint Replacements: Joint Replacement Surgery is a surgical process in which the impaired or worn parts of the joint are replaced with new artificial parts. Recently, Joint Replacement Surgery has become a routine procedure and is one of the most efficacious elective surgeries executed in the present day.
General and Endoscopic Surgery: General surgery is often implemented to assuage suffering when a cure is unlikely through medicine alone. It can be used for such routine processes executed in a doctor's office or for more complicated operations necessitating a medical team in a hospital setting.
Cancer Management and Oncosurgery : There are several diverse varieties of Cancers and all of them necessitate diverse types of treatments and surgeries. Chemotherapy, Radiation therapy, Oncosurgery, Biological therapy (immunotherapy), Hormone therapy, Combination therapy, Adjuvant therapy and Neoadjuvant therapy are amongst the most common treatments.
Obesity and Weight Loss Surgery: Obesity is a medical ailment in which surplus body fat has amassed to the extent that it might have an adverse effect on health, leading to reduced life expectancy and/or augmented health complications. Obesity Surgery lessens or bypasses the belly/small intestine. The Surgery is an effective alternative to treat severe obesity. Only individuals who struggle with morbid obesity are recommended to undergo procedures.
Urosurgery and Prostate Related Conditions: Urosurgery is a field of surgical specialty involved in the surgical evaluation and treatment of sicknesses involving the organs of the excretory system kidneys, ureters, bladders, prostate, testicles, penile organs, etc. The doctors who attend patients with urological conditions are called Urologists. Maximum of the patients who face urological problems struggle with Kidney stone, Prostate Cancer etc.
Gynecology and Female Specific Conditions: Offers you Info about gynecological diseases and conditions including uterine fibroid tumors, ovarian cysts, PCOS, endometriosis, and vulvodynia, as well as numerous other female reproductive system abnormalities.
Health checkups and diagnostics: It is strongly projected that the yearly check-up should be given its own devoted time. Doctors and patients typically expend very little time together- usually a whole visit to the doctor is expended for discussing the present illness with the patient. It is recommended that it would be much better if both take out time once a year to make certain that they are proactively maintaining a good health, instead of just reacting and responding to complications as they befall.
Infertility Management and Artificial Reproduction techniques: Assisted reproductive technology (ART) is a general term referring to approaches used to achieve pregnancy by artificial or partially artificial means. It is reproductive technology used chiefly in infertility treatments. Some forms of ART are also used in fertile couples for hereditary reasons. ART is also used in couples who are conflicting for certain communicable illnesses.
Ophthalmology and Eye Related Condition: Ophthalmology is the division of medicine which deals with the anatomy, physiology and illnesses of the eye. The term ophthalmologist refers to a specialist in medical and surgical eye problems. The World Health Organization publishes a classification of identified diseases and injuries called the International Statistical Classification of Diseases and Related Health Problems or ICD-10 for the Eye Related Conditions.
Cosmetic and Plastic Surgery: Though cosmetic or aesthetic surgery is the best-known type of plastic surgery, most plastic surgery is not cosmetic: plastic surgery consists of several types of reconstructive surgery, hand surgery, microsurgery, and the treatment of burns. Plastic surgery is a special kind of surgery that can encompass both an individual's appearance and aptitude to function.
Pediatric General Surgery: Pediatric General surgery is a subspecialty of surgery encompassing the surgery of fetuses, infants, children, and teenagers. As kids are in the growing stage, they call for special attention and specialists for their treatment. Common pediatric sicknesses that might require pediatric surgery include congenital deformities: lymphangioma, cleft lip, etc.
Pediatric Cardiac Surgery: Pediatric Cardiac Surgery copes with operative processes dealing with newborn and unborn kids and youngsters suffering from cardiac dysfunctions. Structural, functional and rhythm-related problems of the heart are dealt with by the Pediatric Cardiology. Cardiologists, cardiovascular surgeons, anesthesiologists and other specialists work closely together to take care of newborn as well as unborn kids suffering from cardio-vascular disorders.
Pediatric Orthopedic Surgery: Pediatric Orthopedic conditions are reasonably common. In most situations, the observed abnormalities are simply variants of normal development and with growth these malformations undergo natural correction. However, there are some conditions which may necessitate surgical intervention Ex. Developmental Dysplasia of the Hip (DDH), Knock Knees & Bow Legs, Flat Foot, Club Foot, Irritable Hip and Perthes' Disease.
Aesthetic Dentistry and Dental Surgery: Cosmetic dentistry is dental work that improves the appearance and function of an individual's teeth. Dentistry is the art and science of improving the appearance (esthetics), function and well-being of the teeth and allied structures. Common Dental techniques are Whitening, Enamel shaping, Contouring, Dental bridges and Veneers.
Minimal Access Surgery: A minimally invasive process is any process (surgical or otherwise) that is less invasive than open surgery used for the same purpose. A minimally invasive process normally encompasses use of laparoscopic devices and remote-control manipulation of instruments with indirect observation of the surgical field via an endoscope or similar device, and is carried out through the skin or through a body cavity or anatomical opening. This leads to shorter hospital stays or permits outpatient treatment.
Organ Transplants: Organ transplantation is the relocation of an organ from one body to another or from a donor site on the patient's own body, for the purpose of swapping the recipient's damaged or absent organ. The emergent field of Regenerative medicine is permitting scientists and engineers to create organs to be re-grown from the patient's own cells (stem cells, or cells extracted from the failing organs).
Leukemia and Blood Cancer Management: Leukemia is cancer that begins in the tissue that forms blood. In an individual with leukemia; the bone marrow makes abnormal white blood cells. The abnormal cells are leukemia cells. Unlike normal blood cells, leukemia cells don't decease when they should. They might crowd out normal white blood cells, red blood cells, and platelets. This makes it tough for normal blood cells to do their work.
Laser Surgery: A laser is a high-energy ray of light that can selectively transfer energy into tissue to treat the skin. Many surgical techniques are implemented using lasers. General surgeons use a multiplicity of laser wavelengths and laser delivery systems to cut, coagulate, vaporize or confiscate tissue. Laser surgery is extensively used in diverse regions of specialization such as dermatology, dentistry, head and neck surgery, neurosurgery, ophthalmology, podiatry, urology and in the treatment of some cancers as well.
Newer and progressive techniques in India
Viezec has always been heartily contributory in introducing the newest and the most cutting-edge techniques for the global patients. We have accomplished many milestones, some of them worth mentioning are:
High Frequency Ultrasound for Prostate Cancer
Single Hole Surgery for Weight Loss
Percutaneous Laser Spine Surgery
High Flex Knee Replacement Surgery
Gamma Knife for Brain Tumors
Cyberknife for Complex Cancers
Empaneled surgeons
Viezec represents more than 5000 surgeons and doctors in its network. India homes some of the best expert and trained healthcare professionals in each and every field of medical science and this fact has been realized by the world. We have taken the responsibility of simplifying the logjam that exists in the healthcare systems of many nations in Saudi Arabia. We have created a bridge to offer access to first-class tertiary healthcare to nations that do not possess such healthcare facilities. You can view the profile of the some of our topnotch surgeons and doctors on the following links-
Orthopaedic Surgeons
Cardiothoracic Surgeons
Detists
Opthalmologist
IVF Experts
Pediatric Surgeons
Laparoscopy Surgeons
Bariatric Surgeons
Health checkup tours
One of the key regions where Viezec has been recognized extensively in Saudi Arabia is the notion of Health Tours. A Health Tour would normally include a full body comprehensive health checkup and tours to some of the prevalent destinations. Full body checkups would be followed by in-depth evaluation of the reports and counseling of the patient centered on the reports. After this, full day spas are organized, followed by a tour around the city for about 2-3 days, to all the foremost attractions. Such Health Tours are very advantageous for the patients to revive them and to keep them away from the tension and apprehensions concerning their health. These tours are best done in groups and corporate/brands have been purchasing packages for their executives.
Process flow of coming to India for surgery and medical treatment
Let us comprehend the process of coming to India for successful and economically priced medical treatment. The procedure begins with the patient sending his/her query and medical history via email or by discussing the medical condition over a phone call with a healthcare manager. The reports and the case are methodically studied by our senior surgeons/physicians for a comprehensive medical opinion, which is then conveyed to the patient so that the patient can comprehend and plan the next steps in view of that. As an obligatory protocol, all reports are studied and reviewed by not less than three specialists for unprejudiced comprehensive medical opinions. After this, the patient can travel to India on pre-confirmed dates. Furthermore, we help our patients from Saudi Arabia in getting medical visa approval plus we also arrange all logistic and travel related provisions.
Saudi Arabia patients' testimonials
We have been greeting and treating an average of 300 patients every year from Saudi Arabia and the numbers have been recurrently rising every year. Our fellow brothers and potential patients would like to see the reviews of formerly operated and cured patients.
Medical visa from Saudi Arabia to India
All applicants are required to –
Fill in the recommended application form, should be signed by the passport holder and nobody else. The signature of the passport holder must tally with that in the passport or else the holder must sign in the presence of the Visa Officer.
Enclose a valid Yellow Fever Vaccination Certificate, which becomes valid only 10 days after the inoculation.
Enclose confirmed air tickets to India and onward or return, as applicable.
Enclose two recent passport size (37 mm x 37 mm) photographs. One photo must be affixed on the Visa application form on the space provided and the other must be attached to the application Form.
Enclose a valid Saudi Arabia Re-Entry Permit or permit for onward destination on the passport.
Enclose a national passport of sufficient validity with one full blank page for endorsement of Visa.
Enclose a copy of Saudi Arabia Dependent/Alien's Pass for all Non-Saudi Arabia normally domiciled in Saudi Arabia .
Copy of Dependent/Aliens Pass, as evidence of residence in Saudi Arabia (applicable to resident Non-Saudi Arabia n foreign nationals only)
All applicants are required to:
Enclose a valid Yellow Fever Vaccination Certificate, which becomes valid only 10 days after the vaccination.
Enclose confirmed air tickets to India and onward or return, as pertinent
Enclose two recent passport size (37 mm x 37 mm) photographs. One photo must be glued on the Visa application form on the space provided and the other must be affixed to the application Form
Enclose a valid Kenya Re-Entry Permit or permit for onward destination on the passport
Enclose a national passport of adequate validity with one full blank page for endorsement of Visa
Enclose a copy of Kenya Dependent/Alien's Pass for all Non-Kenya normally domiciled in Kenya
Air tickets (to India and onward or return) as applicable
Valid Kenya Re-entry Permit or permit for onward destination on the Passport
A national passport of sufficient validity (with one full blank page for endorsement of visa); and
Copy of Dependent/Aliens Pass, as evidence of residence in Kenya (applicable to resident Non-Kenyan foreign nationals only)
Enclose a valid Saudi Arabia Re-Entry Permit or permit for onward destination on the passport
Enclose a copy of Saudi Arabia Dependent/Alien's Pass for all Non-Saudi Arabia normally domiciled in Saudi Arabia
The applicant has to be present in-person in Saudi Arabia while applying for visa.
A medical category visa might be issued under the following conditions:
The Indian Missions/Posts abroad might scrutinize the medical documents very cautiously and gratify themselves about the bonafide purpose for which medical treatment visa is being requested.
Mission might also check that the applicant has tried to find initial medical advice from his nation of origin/nation of residence and he has been recommended to go for specialized medical treatment. In case the foreign national wishes to go for treatment under the Indian system of medicines, his case might also be considered.
This kind of visa should be granted for seeking medical attendance only in reputable/recognized specialized hospitals/treatment centers in the nation. Although non-exhaustive, following descriptive list of ailments would be of main consideration; serious sicknesses like neurosurgery; ophthalmic disorders; heart related complications; renal disorders; organ transplantations; plastic surgery; joint replacement etc.. The elementary idea would be that the mission might check the urgency factor linked with the need of the medical tourist coming to India for medical treatment/health improvements.
Validity of Visa and Extension of Visa
The preliminary period for such a visa may be up to a period of one year or the period of treatment whichever less, which can be extended for a further period of one year, by the State Government/FRROs (Foreigners Regional Registration Offices), on the production of medical certificate/advice from the reputed/recognized/specialized hospitals in the nation. Any further extension will be granted by the Ministry of Home Affairs only on the recommendations of the State Government/FRROs supported by suitable medical documents. Such visa will be valid for maximum three entries during a year. State Government/FRROs might permit one extra entry in case of emergency. With India being rated amid the finest destinations for medical tourism and healthcare services, you can certainly reconnoiter your options with us for getting rid of your health problems. When you come for medical treatment in India, you get a direct appointment from the concerned doctors/surgeons, with the support of 24/7 assistant staff providing 24/7 hours of medical assistance, accommodation, airport pick up, inland conveyance facility for moving to and fro between the hospital and your accommodation destination, progressive medical lodging at the hospital premises, access to internationally trained surgeons, JCI recognized medical staff, hygienic food and recreation amenities like holiday tours at famous Indian resorts. Patients from Saudi Arabia suffering from serious health diseases, seeking timely and economical medical care in India are requested to send their medical case details by filling this enquiry form or calling us straight on our phone lines.
Stem Cell Treatment for Saudi Arabia Patients, Stem Cell Treatment for Saudi Arabia Patients in India, Stem Cell therapy for Saudi Arabia Patients, Stem cell therapy for patient from the Saudi Arabia, Stem Cell Therapy in India, Stem Cell Treatment in India, Stem Cell Therapy Cost in India, Stem Cell Treatment benefit in India, stem cell center, stem cell hospital, stem cell clinic, stem cell clinic in Delhi, stem cell therapy in Delhi ncr, stem cell therapy Delhi, stem cell therapy hospital, stem cell treatment in Delhi, stem cell therapy hospital India, stem cell treatment in India, stem cell therapy in India, stem Cell Therapy Centre in India
Upload your reports today for a free online consultation
Upload Reports
---AfghanistanAland IslandsAlbaniaAlgeriaAmerican SamoaAndorraAngolaAnguillaAntarcticaAntigua and BarbudaArgentinaArmeniaArubaAscension IslandAustraliaAustriaAzerbaijanBahamasBahrainBangladeshBarbadosBelarusBelgiumBelizeBeninBermudaBhutanBoliviaBosnia and HerzegovinaBotswanaBouvet IslandBrazilBritish Indian Ocean TerritoryBritish Virgin IslandsBruneiBulgariaBurkina FasoBurundiCambodiaCameroonCanadaCanary IslandsCape VerdeCaribbean NetherlandsCayman IslandsCentral African RepublicCeuta and MelillaChadChileChinaChristmas IslandClipperton IslandCocos (Keeling) IslandsColombiaComorosCongo (DRC)Congo (Republic)Cook IslandsCosta RicaCôte d'IvoireCroatiaCubaCuraçaoCyprusCzech RepublicDenmark (Danmark)Diego GarciaDjiboutiDominicaDominican RepublicEcuadorEgyptEl SalvadorEquatorial GuineaEritreaEstoniaEthiopiaFalkland IslandsFaroe IslandsFijiFinlandFranceFrench GuianaFrench PolynesiaFrench Southern TerritoriesGabonGambiaGeorgiaGermanyGhanaGibraltarGreeceGreenlandGrenadaGuadeloupeGuamGuatemalaGuernseyGuineaGuinea-BissauGuyanaHaitiHeard & McDonald IslandsHondurasHong KongHungaryIcelandIndiaIndonesiaIranIraqIrelandIsle of ManIsraelItalyJamaicaJapanJerseyJordanKazakhstanKenyaKiribatiKosovoKuwaitKyrgyzstanLaosLatviaLebanonLesothoLiberiaLibyaLiechtensteinLithuaniaLuxembourgMacauMacedonia (FYROM)MadagascarMalawiMalaysiaMaldivesMaliMaltaMarshall IslandsMartiniqueMauritaniaMauritiusMayotteMexicoMicronesiaMoldovaMonacoMongoliaMontenegroMontserratMoroccoMozambiqueMyanmarNamibiaNauruNepalNetherlandsNew CaledoniaNew ZealandNicaraguaNigerNigeriaNiueNorfolk IslandNorthern Mariana IslandsNorth KoreaNorwayOmanPakistanPalauPalestinePanamaPapua New GuineaParaguayPeruPhilippinesPitcairn IslandsPolandPortugalPuerto RicoQatarRéunionRomaniaRussiaRwandaSaint BarthélemySaint HelenaSaint Kitts and NevisSaint LuciaSaint MartinSaint Pierre and MiquelonSamoaSan MarinoSão Tomé and PríncipeSaudi ArabiaSenegalSerbiaSeychellesSierra LeoneSingaporeSint MaartenSlovakiaSloveniaSolomon IslandsSomaliaSouth AfricaSouth Georgia & South Sandwich IslandsSouth KoreaSouth SudanSpainSri LankaSt. Vincent & GrenadinesSudanSurinameSvalbard and Jan MayenSwazilandSwedenSwitzerlandSyriaTaiwanTajikistanTanzaniaThailandTimor-LesteTogoTokelauTongaTrinidad and TobagoTristan da CunhaTunisiaTurkeyTurkmenistanTurks and Caicos IslandsTuvaluU.S. Outlying IslandsU.S. Virgin IslandsUgandaUkraineUnited Arab EmiratesUnited KingdomUnited StatesUruguayUzbekistanVanuatuVatican CityVenezuelaVietnamWallis and FutunaWestern SaharaYemenZambiaZimbabwe
Disease Name(required)
Disease NameALS / MNDAutismParkinsonCerebral PalsyMuscular DystrophyAlzheimerMultiple SclerosisStrokeLiver DamageCardiovascularKidney DiseaseBerger's Disease
Reports (required)


text:
Battered industry still standing
John Whitehead
As I pen my last business commentary before retirement, the polymer landscape looks very different from the one that presented itself when I joined Plastics & Rubber Weekly in 1981. With my first day spent covering a seven-hall Interplas, one hall dedicated solely to the Battenfeld group, the breadth and vitality of the business was clear.
Material suppliers were strongly represented with names like ICI, Shell and BP exhibiting alongside Germany's Big Three, while the show buzz was that Norway's Norsk Hydro would soon acquire BIP's PVC business.
Saudi Arabia's role was limited to forecast capacity figures, which often seemed unrealistic, while company ownership was either through shareholding, private individuals or in state hands. The perceived opportunities for venture capital to add value to investment were restricted to the activities of financiers such as Slater-Walker and hardly impinged on ownership in this industry.
The atmosphere was informal, as evidenced by PRW's style at the time, and the mood positive despite the hangover from the Mideast crisis of the late '70s.
On the equipment front, the picture was more familiar from today's viewpoint, with many of the prominent names still around even if their ownership has often changed. The emergence of stand-alone subsidiaries in the United Kingdom was well-advanced, if still short of the impressive headquarters buildings featured today.
The industry was set for a decade typified by growth, expansion, and the emergence of new names like Neste, EniChem and, of course, Sabic. PRW shared fully in this world, as players, keen to show off their products and investments, regarded the presence of PRW as essential to such events. I paid my first visit to Saudi Arabia for the Petchemplast show in 1983, for example, as the paper demonstrated its recognition of where the future might lie.
However, the second two-thirds of my time here has been against a more difficult backcloth with perennial overcapacity, the decline of the United Kingdom as a power in the plastics world as China has advanced, the rise and fall of the venture capital approach to ownership and now, the worst recession in the memory of the longest-serving veterans.
Fortunately, the ongoing environmental challenge notwithstanding, polymers retain the attractions that their unique properties impart, ensuring that they remain at the heart of new product design.
My final plea would be that original equipment manufacturers, whose products and packs depend so heavily on these merits, be less secretive about their selection. There are so many good stories out there that would enhance the industry's reputation if they could just be reported.
Whitehead is retired deputy editor of Plastics & Rubber Weekly.


text:
Eddie Peng sued micro-blog and V users for infringement of reputation rights, and was awarded 270 thousand yuan.
On the afternoon of Nov. 1, Shanghai First Intermediate Peoples Court (hereinafter referred to as Shanghai First Intermediate Court) opened the second trial of Peng Yuyans lawsuit against Chen Mou, a drinks company, a video App company and an audio network company (hereinafter referred to as Chen Mou and Three Companies) for infringement of reputation.
Shanghai First Intermediate Court maintained the establishment of reputation infringement in the first instance. Chen Mou and three companies issued an apology statement to Peng Yuyan, Chen Mou and a beverage company made a total compensation of more than 270,000 yuan, and a video App company and an audio network company took part in the joint and several liabilities for compensation.
In 2017, Chen wrote on his microblog that the Eight Diagrams account claims that Peng Yuyan has a close relationship with a male fund investor. Although Peng Yuyans studio had written to dispel rumors before, the article still mentioned that the latent rules of the financial big man should be popular, and wrote that Peng Yuyan accepted the latent rules in exchange for multiple brand endorsements.
A few days later, a beverage company also published this article on its WeChat public address. After that, the drinks company and Chen Mou released similar content through a video App company in the form of dialogue, and Chen Mou also published audio content consistent with his micro-blog articles on a large audio website.
After that, Eddie Pengs negotiations on a negotiated endorsement were indefinitely shelved. Hence, Peng Yuyan brought Chen Mou and the three companies together to court, demanding a public apology for the infringement of reputation, and compensating them for their economic losses and spiritual comforts totalling more than 1.21 million yuan.
After trial, the court of first instance found that the acts of Chen Mou and the three companies constituted a reputation infringement on Peng Mou-mou. It ruled that Chen Mou and the three companies issued an apology statement to Peng Yuyan, Chen Mou and a beverage company made a total compensation of more than 270,000 yuan, and that a video App company and an audio network company were jointly and severally liable for part of the compensation.
Chen and three companies refused to accept the appeal to the Shanghai intermediate court.
Chen Mou and the three companies appealed that their actions did not infringe on Peng Yuyans reputation and demanded a change of sentence to reject all of Peng Yuyans appeals against them. Peng Yuyan said that there were obvious infringements on articles and video content published by Chen Mou and a beverage company. Video and audio companies were also liable for not deleting such content in time.
The second instance of Shanghai First Intermediate Court held that Peng Yuyans studio had issued a rumor statement on Weibo before the incident, which had certain publicity effect, while Chen Mou, as a user of Weibo plus V, still published content lacking objective basis. Moreover, the content of the article has obvious insulting nature from the title to the wording, which easily causes readers to misunderstand Peng Yuyan and reduce social evaluation. Chen publishes similar content in the form of text, video and audio on many social platforms. His subjective fault is obvious and he should bear the corresponding legal responsibility.
One hospital said that a beverage company should also take legal responsibility to publish Chens article. A video App company and an audio website, as network service providers of video and audio content in the case, fail to identify such vulgar and infringing content and take necessary measures to delete it in time, so they should bear the corresponding joint and several liability.
In summary, the Shanghai intermediate court rejected the appeal and upheld the original judgment.
Micro-blog plus V users claim that Eddie Peng accepted the hidden rules and was prosecuted for compensation 270 thousand.


text:
LG Signature W8 OLED TV review: Is this still the 4K TV to beat?
By Ng Chong Seng - 2 Dec 2018
Page 1 of 3 - Intro & Key featuresPage 2 of 3 - TV settings & PerformancePage 3 of 3 - Conclusion
Page 1 of 3 - Intro & Key features
Intro & Key features
It's raining high-end TVs
Regardless of which research report you believe in, the current leaders in the premium TV market (i.e., screen size of at least 55 inches) are Samsung, LG, and Sony. According to research firm GfK, Samsung - the biggest TV maker in the world for the last 12 years - has a 40% market share of the premium segment. But this figure includes TVs that cost less than US$2,500. Take those away and IHS Markit argues that in 2017, it's Sony and LG that are making the most money in this premium category, with a 36.9% and 33% revenue share respectively.
If you're looking for a common thread between Sony and LG, it'll be that both sell OLED TVs. Since Samsung stopped investing in OLED TVs in 2015, global sales of OLED TVs, led by LG, have actually been growing steadily. According to a June report by IHS Markit, OLED TVs sales have outpaced QLED TV sales in the past two quarters. If you were to drill down further, during this period, LG sold 864,000 OLED TVs, while Samsung sold 751,000 QLED TVs.
And it's against the backdrop of this premium TV war that I segue into my LG Signature W8PTA OLED TV review.
What is the LG OLED W8PTA?
The highest-end model in LG's 2018 TV lineup, the Signature W8PTA (simply called W8 henceforth) is the direct successor to the 2017 W7T. I've covered the new lineup in an earlier report, but in case you missed it, here's a rundown of the new OLED TVs' key features:
1.) α processor - LG has made a new processor for its 2018 TVs and has even given it a name: α (Alpha). There are actually two chips - α9 and α7 - with the former used primarily in the OLED TVs, including the W8.
A key benefit of the α9 processor is that it allows the TV to do a four-step noise reduction process. There's a new color correction algorithm that supposedly expands the reference color coordinates seven-fold compared to last year's processor.
2.) 120fps HFR - LG's 2018 OLED TVs support 120 frames per second (fps) high frame rate (HFR) for a smoother picture than what's possible on 60fps sets. However, because the TVs don't have HDMI 2.1, you can only get HDR (HEVC) content from the TVs' built-in streaming apps instead of from external, HDMI-connected sources.
3.) "4K Cinema HDR" - The new OLED TVs continue to support many types of HDR formats, such as the baseline HDR10, Dolby Vision, Hybrid Log-Gamma (HLG), and Advanced HDR by Technicolor.
You may also see LG using words like "HDR10 Pro" and "HLG Pro" to describe their TVs - these are just marketing terms used to describe HDR content that have gone through on-device processing. For example, the TVs can take regular HDR10 signals and use proprietary algorithms to dynamically tone-map each frame to get better brightness and contrast.
4.) Dolby Atmos - The new OLED TVs again support Dolby Atmos object-based surround sound processing.
5.) WebOS + ThinQ AI - LG's TVs in the last few years were powered by WebOS, and the 2018 models are no different. With the newest WebOS 4.0, you still get a launch bar for easy access to apps such as Netflix, YouTube, Toggle, and features such as Miracast Overlay and Screen Share.
The biggest addition is what LG calls "ThinQ AI". At present, ThinQ AI on LG TVs refers mainly to their intelligent voice control system. For now, the voice commands are for changing of TV settings and simple web searches; but LG has promised a firmware update later this year that will enable more advanced searches. (For example, you can say, "Show me all the movies with Tom Cruise", and the TV will display results from the web, YouTube, Netflix, etc.)
While we saw Google Assistant integration on the TVs at CES 2018, this integration is region specific, and right now it isn't activated here in Singapore. The various LG folks I've spoken to all told me that the TVs are basically Assistant-ready, and they're just waiting for Google to officially enable Assistant support on them.
Read more: This is how artificial intelligence works on LG's 2018 OLED and Super UHD TVs.
6.) "Wallpaper TV" (W8) - Like last year's W7, the W8 adopts a "picture on wall" design. You've to wall-mount it because it's quite literally a sheet of OLED panel. All the chips and ports are housed in a separate, Atmos-capable speaker bar (4.2-channel, 60W) that you connect to the TV with a flat ribbon cable.
Tags: lg oled tv 4k tv dolby atmos hdr lg signature dolby vision hdr10 hlg google assistant thinq ai
HD Performance 9.5
SD Performance 9.5
Perfect blacks, wide color gamuts, wide viewing angles, good brightness
HDR10, Dolby Vision/Atmos, HLG support
New A9 chip reduces noise and color banding
Responsive, low input lag good for gaming
Crazy-thin when wall-mounted!
Atmos advantage not apparent due to speaker restrictions
Similar picture quality could possibly be achieved with lower-priced models in the series
Not a huge jump vs. 2017's W7T
Google Assistant support still not available
Very expensive
Have feedback on the article for the editorial team? You can reach out to them here.


...sometimes when you're our age....to make a simple phone call.
I had been planning on calling an old radio and TV buddy of mine I hadn't spoken to in years to see how he was....and probably reminisce a bit....BUT....what if all I get for my effort is "bad news!" ...such as....he's very ill, or he's in some old folks home...and can't take phone calls.....or...or....who knows...maybe he isn't even "vertical" any more.
I have enough "old man" issues of my own (Nothing big at the moment, thank the Lord) without hearing about others.
But, I gathered up what courage I have left....and dialed!
It was the same one we all were so familiar with....when we were "young and beautiful!"
I almost expected him to say, "Welcome to another big old Friday date night...."
but then, I remembered ....we were on the phone....not the radio.
....and I was talking to a Charlotte teenage idol of the 1950's.....and a good friend of mine from our days at WSOC-TV...Jimmy Kilgo!
What a "hoot" it was talking with him...like it was 1958 again!
Who says there's no such thing as "time travel?" Balderdash!
He still sounds exactly the same as he did almost 60 years ago!
He said that I did too.
Which gave me a great idea!
Oh well....back to the drawing board!


text:
Video Game Deaths We Still Haven't Gotten Over
By Looper Staff/Updated: April 25, 2018 10:47 am EST
Once upon a time, video game deaths were only meaningful until you got your next 1-up. But eventually game developers figured out that by killing off favorite characters, they could turn their pixels into tiny daggers that stab you right in the feels. Here's a look at the most traumatic video game deaths of all time. Spoilers ahead, of course.
Aerith Gainsborough - Final Fantasy VII
Aerith Gainsborough is the classic JRPG love interest—a beautiful, gentle girl who sells flowers in the street before joining you on a quest to protect the world using Holy magic. That just compounds the shock for players when the villainous Sephiroth suddenly appears out of nowhere and brutally murders her right in front of you. Still considered by many to be the most shocking death in video game history, Aerith's murder will soon be traumatizing a whole new generation thanks to the upcoming FF7 remake.
John Marston - Red Dead Redemption
True redemption is a difficult thing to earn. Players found that out the hard way thanks to the death of John Marston, the main character of Red Dead Redemption. After spending untold hours doing everything they could to help Marston right his many wrongs, players have to watch as the happy ending they think they've earned instead turns into a hail of gunfire and a lonely grave. Never has "The End" seemed more sadly final.
Lee Everett - The Walking Dead
Speaking of main characters who died at the end, arguably the most unexpected and emotional death in recent memory was that of Lee Everett, the hero in The Walking Dead. Players spend the whole game helping Lee protect eight-year-old Clementine from walkers, only for Lee himself to be infected at the end. Sometimes there's just no justice in the world, especially when that world is filled with zombies.
Sarah - The Last Of Us
Another character trying to survive a zombie apocalypse is Sarah, the 12-year-old protagonist of Naughty Dog's instant classic The Last of Us. Shockingly, though, Sarah doesn't even make it out of the game's prologue alive. After successfully escaping from the zombies, Sarah is shot and killed by the all-too-human soldiers trying to contain the outbreak. It sets the tone for the entire game, reminding players that the scariest monster of all is the one inside us.
Ghost - Call Of Duty: Modern Warfare 2
Simon "Ghost" Riley is undisputedly the coolest character in the Call of Duty franchise, rocking a skull mask and pulling off one impossible mission after another. That makes it even more unbelievable when, just as he's engineering another amazing escape from behind enemy lines, he's betrayed and murdered by his own commanding officer. It simply doesn't seem fair—because it isn't.
The Joker - Arkham City
The Clown Prince of Crime died the way he lived: randomly, but with poetic flair. Poisoned by an unstable mutagen, The Joker forces Batman to try and find a cure. Batman returns with a vial of the precious antidote, all right—and then accidentally drops it when the Joker stabs him. The Joker dies laughing at the irony, while fans are left wondering how the death of a homicidal sociopath could be so darn sad.
Eli Vance - Half Life 2: Episode Two
Eli Vance's death at the end of Half Life 2: Episode Two would have been hard enough to get over if just for the fact that the benevolent and wise leader of the human resistance is butchered while the players watch helplessly. Making it much worse: the planned sequel, Half Life 2: Episode Three, was scrapped, meaning the last memory Half Life fans have of their beloved franchise is Vance's broken corpse—and their own impotence. Not cool.
Cortana - Halo 4
Master Chief may be the (masked) face of the Halo franchise, but Cortana is its heart and soul. Right from the start in 2001's Halo: Combat Evolved, and through every subsequent installment in the franchise, Cortana aides and guides players through the maelstrom of galactic combat. It's no wonder, then, that her tragic sacrifice at the end of Halo 4 is considered by many fans to be the end of the Halo era. Sure, they may release more games, but it will just never be the same without Cortana.
Yourself - Dragon Age: Inquisition
In the ultimate video gaming Sophie's choice, Dragon Age: Inquisition imports your main characters from both Dragon Age: Origins and Dragon Age II – and then forces you to decide which one of them dies. And no, the sadistic monsters at BioWare will not pay for your resulting therapy bills.