text:
An affiliate of the Institute for Supply Management™
Claire.neveu@cdk.com
EVENTSSeminars
MEMBERSHIPBenefits & Apps
Who Can Join ISM
Local ISM Benefits
National ISM Benefits
Benefits For Your Employer
CERTIFICATIONStudy Materials
CPSM
CPSM & CSM Study Materials
Questions on Certifications
CPM Recertification
Study Group Contact
LEADERSHIP Who's Who
ANNOUNCEMENTS Events, Jobs, More
Announcement Documents
ISM Needs You
ISM Welcomes Your Input
ISM National
Click here to view ISM Portland/Vancouver By-Laws
Kevin Coté, CPSM
Affiliate President/CEO
Kevin Coté joined Tidewater Barge Lines' in 2012. He manages MRO supporting the tug fleet and repair yard, and oversees inventory.
Prior to Tidewater, Kevin graduated from Northern Michigan University and spent 10+ years covering inside/outside sales, managing CRM/data analysis, and representing manufacturing in the Pacific NW for east coast companies.
In 2009, Kevin transitioned from Sales to Purchasing, completing the Portland State University CEPE program in Supply Chain Management.
He joined the local ISM chapter in 2009, the Board of Directors in 2014, and has served on the executive leadership committee since 2016.
When not at work, Kevin enjoys spending time with his family, especially staying active with his wife and twin boys.
Claire Neveu, C.P.M., CPSM
(Immediate Past President) Secretary/Treasurer
Claire Neveu is Manager of Indirect spend for CDK Global, LLC. CDK Global is a provider of end to end solutions for auto, truck, motorcycle, marine, and recreational vehicle dealers through the United States and globally.
Claire joined CDK Global (formerly ADP Dealer Services) in October 2003 and is responsible for supply chain management, supplier selection, inventory management and analysis. Claire works at the Portland OR facility of CDK Global.
Prior to joining CDK Global, Claire worked for InFocus in Wilsonville, OR as a Commodity Manager. Claire led a global sourcing team for a broad range of commodities including DLP devices, OEM equipment, accessories and packaging.
Brandon Gilyeat
1st Vice President/Technology Website Director
Brandon Gilyeat is a Professional Services Procurement Associate at W.L. Gore & Associates (most commonly known for GORE-TEX® Fabrics and their Medical Devices). He currently provides Marketing and Professional Services category leadership focused on implementing and supporting Category Strategy Development, Strategic Sourcing, and Supplier Relationship Management. While at Gore he has also spent time supporting MRO, Capital Equipment, and Data/Spend Analytics needs for the Indirect Procurement Organization.
Prior to joining Gore in 2014, he worked in the Banking Industry, having spent time at Wells Fargo, Countrywide Home Loans, and Bank of America. His most recent role in banking was as a Help Desk Team Manager for the Home Loans Line of Business at Bank of America.
Outside of work he likes to spend his time traveling, reading, sailing, exploring the outdoors, and spending time with friends and family. Brandon earned his Bachelor of Science in Supply Chain Management and Bachelor of Arts in Psychology from Arizona State University and is a proud holder of the ISM CPSM certification.
Sandra Kednay, CPSM, C.P.M.
Communications Chair
Sandra M. Kednay. CPSM, C.P.M., Principal. Key client engagements include: product, market, and business development of consumer goods product lines manufactured in Asia, as well as IT strategic sourcing and supply chain project management for a large-scale supply chain project at an energy company. Currently Kednay holds a contractor role (Supply Chain Project Management, Strategic Sourcing and Purchasing) at a Fortune 100 U.S. global aerospace firm.
Prior to 2014, Kednay was with Blount International, Inc., a diversified multi-national manufacturing corporation (Forestry/Lawn/Garden; Farm/Ranch/Agriculture; Concrete Cutting and Finishing), most recently as Sourcing Manager Global Procurement, responsible for the sourcing and procurement of a variety of raw materials, supplementary materials, semi-manufactured products, finished products for resale, capital equipment, MRO and services for multi-location manufacturing facilities (Brazil, Canada, China, France, Mexico, USA). With a career spanning three diverse business units -- from intrapreneurial startups commercializing a new, highly technical manufacturing capability and innovative products, to mature industries -- Kednay also held the role of Global Capital Equipment Procurement Project Manager, leading an interdisciplinary and cross-cultural team for a multi-year China facility expansion through vertical integration.
Kednay earned her Bachelor of Science degree in Business Administration – Marketing from Portland State University. In addition, Kednay was awarded her Master of Science degree in Global Supply Chain Management at Portland State University (2017) where she was a Student Fellow of the Institute for Sustainable Solutions, as well as a recipient of the Alan F. Wohlstetter Scholarship (2016-17). Kednay serves on the ISM (Institute for Supply Management®) – Portland / Vancouver Board of Directors.
April Dipo
April Dipo has a Bachelors in Supply and Logistics Management and works in Global Procurement at Mentor Graphics as a Meeting and Events Planner. April was in retail management for years before pursuing her degree. Married with 3 kids, a dog, and, a cat. Loves to read, play pool and of course shop. On a typical sunny day off you can find her sipping a glass of wine or playing dress up with her youngest.
Zachary Clay, CSCP, CPSM, CPSD
Education Chair
Zach joined Consolidated Metco (ConMet) in 2018. As Director of Materials and Planning, he has responsibility for global forecasting and planning, inventory and distribution center management, ERP data administration, trade compliance, and global logistics procurement and execution.
Prior to ConMet, Zach gained experience in supply chain and operations management roles in the tobacco, paper and packaging, and rail manufacturing industries, most recently managing international operations for the bearing manufacturing division of Amsted Rail.
Zach earned his B.S. in Management and MBA from Florida A & M University. When not at work, Zach is an avid golfer, foodie, and traveler. He has visited 33 states, 5 continents, and 15 countries and is always looking for the next adventure.
Rick Cline
Rick serves as the professional services contract manager for the Port of Vancouver, USA with primary areas of expertise in architectural, engineering, environmental, IT, financial and business development services for the port's facilities, new construction, and capital development. In his decade at the port, his responsibilities have also ranged from the management of public works and small works contracts and projects.
Prior to joining the port, Rick spent 10 years with Precision Castparts Corporation as part of the team responsible for planning and development of several aerospace components for GE, Pratt & Whitney and Rolls Royce engine programs.
He is also a co-owner of Supply Chain Support Consultants, LLC dedicated to providing continuity of operations and safety programs to various industries.
Raised in Southeastern Washington, Rick has a metals technology degree from Columbia Basin College (Pasco, Wash.) and a BS in business administration from Warner Pacific College (Portland, Or).
Rick is currently involved and has served on numerous executive and committee boards for public and non-profit organizations. He resides in Vancouver WA with his wife Christy, two sons and daughter all in the local area.
Catherine D Wannamaker, C.P.M.
Cathy Wannamaker is Materials Manager for Clark Public Utilities. Cathy joined the Utility in December 2011 and is responsible for overseeing bidding, contracting, inventory management, and other functions of the Purchasing department.
Prior to joining Clark, Cathy worked in Purchasing for Columbia Machine, Inc. for 18-1/2 years.
Volunteering within NSMA has allowed me to meet a number of members, building my networking ability, and has kept me actively involved and contributing to our great organization. From facilitating C.P.M. courses (which in turn helped me complete my C.P.M. certification in 2010), to going outside my comfort zone and working on the Internet/Services committee have all added to the experience of being a member. I have served a two-year term on the Board of Directors, as Vice President, and as 2012-2013 President.
I enjoy helping set the direction of the organization and finding ways to benefit all of our members. I would encourage any member that has a desire to be involved further in the organization to start out volunteering on a committee, or with any short term tasks that a committee may need help with. You will find that it is fun and rewarding both personally and professionally!
Our sponsorsCheck out these great companies who sponsor our web site!
ISM - Portland/Vancouver -- PO Box 56780, Portland, OR 97238-6780


text:
Leon Russom
Best known as Prison Break's General Jonathan Kranz (Padman) and the Malibu police chief in The Big Lebowski, Russom was, for twenty-two years, a New York stage actor whose day job was soaps, with long tenures as Joe Taylor on Love Is A Many Splendored Thing, Willis Frame on Another World and Jack Darling on All My Children. The feature No Way Out brought Russom to Los Angeles in 1987. A year later, after starring opposite Carol Burnett in Hostage, he moved to LA permanently to star in NBC's TV101. Emmy-nominated for the television film Long Road Home, Russom has continued his theatrical activity in Los Angeles (and Broadway) while establishing himself as a presence in episodic television and feature films, including True Grit, his second film with Joel and Ethan Coen.
A Quiet Place May 11, 2018

redpajama_set_name: RedPajamaCommonCrawl


Anchor – Ron Moore Jr.
Ron studied meteorology and geography at FSU. He received his Master of Science in the Geography department while doing research work in Hurricane Climate, risk assessment and GIS work with FEMA. He has served on county teams in Florida where he helped with emergency preparedness and evacuation processes and procedures. Ron also served as the New England director for Disaster USA with an international church network from 2009-11. When he isn't chasing storms he's giving us the Moorecast on his weather blog! Join us as we integrate severe weather with history, science and faith.
Broadcasting live Friday's at 9:00AM HERE!


An amplified version of this verse says, "Every Scripture is God-breathed (given by His inspiration) and profitable for instruction, for reproof and conviction of sin, for correction of error and discipline in obedience, (and) for training in righteousness (in holy living, in conformity to God's Will and thought, purpose, and action). Verse 17: finishes the sentence saying, "So that the man of God may be adequate complete and proficient, well-fitted and thoroughly equipped for every good work." What an amazing insight into the great gift given to us into the purpose of the Word of God. We see clearly that it is a gift to the man of God (one who has submitted to God's plan of salvation through Jesus Christ), so that he may be trained in righteousness (to be in right standing with God, what is pleasing to the Lord) in all aspects of God's profitable intentions for his life. The Word teaches, reproves, and corrects to keep us aligned with God's Will.
Ephesians 6: 17: says, "And take the helmet of Salvation and the Sword that the Holy Spirit wields (with Power and authority), which is the Word of God". The word of God is the Sword which the Holy Spirit uses with God's Power and authority on behalf of those who choose to walk in right standing with God through faith in Jesus Christ.
Dearest Holy Lord Jesus: what joy unspeakable and full of Glory we have in reading the truth of Your Word. Come by Your Holy Spirit, and wield Your Holy Word all over the earth into the hearts of men who do not know the greatness of Your gift of Life in Christ Jesus, which You are offering to all; that they may choose the Glory of being a child of God, rather than linger in the prisons of slavery to sin. Glory to you alone!


text:
#define _GNU_SOURCE // for asprintf()

#include "adlb_types.h"

#include <stdint.h>
#include <inttypes.h>
#include <stdio.h>

#include <table.h>
#include <vint.h>

#include "adlb.h"
#include "checks.h"
#include "data_cleanup.h"
#include "data_internal.h"
#include "data_structs.h"
#include "debug.h"
#include "multiset.h"

#define TYPE_NAME_INTEGER "integer"
#define TYPE_NAME_FLOAT "float"
#define TYPE_NAME_STRING "string"
#define TYPE_NAME_BLOB "blob"
#define TYPE_NAME_CONTAINER "container"
#define TYPE_NAME_MULTISET "multiset"
#define TYPE_NAME_REF "ref"
#define TYPE_NAME_STRUCT "struct"
#define TYPE_NAME_NULL "ADLB_DATA_TYPE_NULL"

static char *data_repr_container(const adlb_container *c);

struct type_entry
{
  adlb_data_type code;
  const char *name;
  size_t name_len;
};

static struct type_entry type_entries[] = {
  { ADLB_DATA_TYPE_INTEGER, TYPE_NAME_INTEGER,
    sizeof(TYPE_NAME_INTEGER) - 1 },
  { ADLB_DATA_TYPE_FLOAT, TYPE_NAME_FLOAT,
    sizeof(TYPE_NAME_FLOAT) - 1 },
  { ADLB_DATA_TYPE_STRING, TYPE_NAME_STRING,
    sizeof(TYPE_NAME_STRING) - 1 },
  { ADLB_DATA_TYPE_BLOB, TYPE_NAME_BLOB,
    sizeof(TYPE_NAME_BLOB) - 1 },
  { ADLB_DATA_TYPE_CONTAINER, TYPE_NAME_CONTAINER,
    sizeof(TYPE_NAME_CONTAINER) - 1 },
  { ADLB_DATA_TYPE_MULTISET, TYPE_NAME_MULTISET,
    sizeof(TYPE_NAME_MULTISET) - 1 },
  { ADLB_DATA_TYPE_REF, TYPE_NAME_REF,
    sizeof(TYPE_NAME_REF) - 1 },
  { ADLB_DATA_TYPE_STRUCT, TYPE_NAME_STRUCT,
    sizeof(TYPE_NAME_STRUCT) - 1 },
  { ADLB_DATA_TYPE_NULL, TYPE_NAME_NULL,
    sizeof(TYPE_NAME_NULL) - 1 },
};

static int type_entries_size = sizeof(type_entries) / sizeof(*type_entries);

typedef struct {
  adlb_data_type code;
  adlb_type_extra extra;
} xlb_data_type_info;

/** Map from type name to xlb_data_type_info */
struct table xlb_data_types;

adlb_data_code
xlb_data_types_init(void)
{
  bool ok = table_init(&xlb_data_types, 64);
  check_verbose(ok, ADLB_DATA_ERROR_OOM, "Out of memory");

  // Add builtin types
  for (int i = 0; i < type_entries_size; i++)
  {
    adlb_data_code dc = xlb_data_type_add(type_entries[i].name,
            type_entries[i].code, ADLB_TYPE_EXTRA_NULL);
    DATA_CHECK(dc);
  }
  return ADLB_DATA_SUCCESS;
}

adlb_data_code
xlb_data_type_add(const char *name, adlb_data_type code,
             adlb_type_extra extra)
{
  check_verbose(!table_contains(&xlb_data_types, name),
                ADLB_DATA_ERROR_INVALID,
                "Struct type name %s already in use", name);

  xlb_data_type_info *entry = malloc(sizeof(xlb_data_type_info));
  check_verbose(entry != NULL, ADLB_DATA_ERROR_OOM, "Out of memory");
  entry->code = code;
  entry->extra = extra;

  bool ok = table_add(&xlb_data_types, name, entry);
  check_verbose(ok, ADLB_DATA_ERROR_INVALID,
                "Failed adding new type %s to index", name);

  return ADLB_DATA_SUCCESS;
}

adlb_data_code
xlb_data_type_lookup(const char* name, adlb_data_type* type,
                        adlb_type_extra *extra)
{
  xlb_data_type_info *entry;
  bool found = table_search(&xlb_data_types, name, (void**)&entry);
  if (!found)
  {
    *type = ADLB_DATA_TYPE_NULL;
    return ADLB_DATA_SUCCESS;
  }

  assert(entry != NULL);
  *type = entry->code;
  *extra = entry->extra;

  return ADLB_DATA_SUCCESS;
}

static void xlb_data_types_free_cb(const char *key, void *val)
{
  free(val);
}

void
xlb_data_types_finalize(void)
{
  table_free_callback(&xlb_data_types, false, xlb_data_types_free_cb);
}

/**
   Convert string representation of data type to data type number
   plus additional info
 */
adlb_code
ADLB_Data_string_totype(const char* type_string, adlb_data_type* type,
                        adlb_type_extra *extra)
{
  adlb_data_code dc;

  dc = xlb_data_type_lookup(type_string, type, extra);
  ADLB_DATA_CHECK(dc);
  CHECK_MSG(*type != ADLB_DATA_TYPE_NULL, "Type %s not found", type_string);

  return ADLB_SUCCESS;
}

/**
   Convert given data type number to output string representation
 */
const char
*ADLB_Data_type_tostring(adlb_data_type type)
{
  switch(type)
  {
    case ADLB_DATA_TYPE_INTEGER:
      return TYPE_NAME_INTEGER;
    case ADLB_DATA_TYPE_FLOAT:
      return TYPE_NAME_FLOAT;
    case ADLB_DATA_TYPE_STRING:
      return TYPE_NAME_STRING;
    case ADLB_DATA_TYPE_BLOB:
      return TYPE_NAME_BLOB;
    case ADLB_DATA_TYPE_CONTAINER:
      return TYPE_NAME_CONTAINER;
    case ADLB_DATA_TYPE_MULTISET:
      return TYPE_NAME_MULTISET;
    case ADLB_DATA_TYPE_REF:
      return TYPE_NAME_REF;
    case ADLB_DATA_TYPE_STRUCT:
      return TYPE_NAME_STRUCT;
    case ADLB_DATA_TYPE_NULL:
      return TYPE_NAME_NULL;
    default:
      return "<invalid type>";
  }
}

adlb_data_code
ADLB_Init_compound(adlb_datum_storage *d, adlb_data_type type,
          adlb_type_extra type_extra, bool must_init)
{
  adlb_data_code dc;
  switch (type)
  {
    case ADLB_DATA_TYPE_CONTAINER:
      assert(type_extra.valid);
      d->CONTAINER.members = table_bp_create(CONTAINER_INIT_CAPACITY);
      DATA_CHECK_MALLOC(d->CONTAINER.members);
      d->CONTAINER.key_type = type_extra.CONTAINER.key_type;
      d->CONTAINER.val_type = type_extra.CONTAINER.val_type;
      break;
    case ADLB_DATA_TYPE_MULTISET:
      assert(type_extra.valid);
      d->MULTISET = xlb_multiset_alloc((adlb_data_type)
                         type_extra.MULTISET.val_type);
      DATA_CHECK_MALLOC(d->MULTISET);
      break;
    case ADLB_DATA_TYPE_STRUCT:
      if (type_extra.valid)
      {
        dc = xlb_new_struct(type_extra.STRUCT.struct_type, &d->STRUCT);
        DATA_CHECK(dc);
      }
      else
      {
        check_verbose(!must_init, ADLB_DATA_ERROR_INVALID,
          "Could not initialize struct, missing struct type info");
        d->STRUCT = NULL;
      }
      break;
    default:
      // Do nothing
      verbose_error(ADLB_DATA_ERROR_TYPE, "Do not support init "
                    "non-compound type %i", type);

  }
  return ADLB_DATA_SUCCESS;
}

/*
  Whether we pad the vint size to VINT_MAX_BYTES
 */
bool ADLB_pack_pad_size(adlb_data_type type)
{
  return type == ADLB_DATA_TYPE_MULTISET ||
         type == ADLB_DATA_TYPE_CONTAINER;
}

adlb_data_code
ADLB_Pack(const adlb_datum_storage *d, adlb_data_type type,
          const adlb_buffer *caller_buffer,
          adlb_binary_data *result)
{
  adlb_data_code dc;
  switch (type)
  {
    case ADLB_DATA_TYPE_INTEGER:
      return ADLB_Pack_integer(&d->INTEGER, result);
    case ADLB_DATA_TYPE_REF:
      return ADLB_Pack_ref(&d->REF, result);
    case ADLB_DATA_TYPE_FLOAT:
      return ADLB_Pack_float(&d->FLOAT, result);
    case ADLB_DATA_TYPE_STRING:
      return ADLB_Pack_string(&d->STRING, result);
    case ADLB_DATA_TYPE_BLOB:
      return ADLB_Pack_blob(&d->BLOB, result);
    case ADLB_DATA_TYPE_STRUCT:
      return ADLB_Pack_struct(d->STRUCT, caller_buffer, result);
    case ADLB_DATA_TYPE_CONTAINER:
    case ADLB_DATA_TYPE_MULTISET: {
      // Use ADLB_Pack_buffer implementation for these compound types
      // since we need to accumulate data at the end of the buffer
      adlb_buffer res;
      bool use_caller_buf;
      if (caller_buffer == NULL)
      {
        res.data = NULL;
        res.length = 0;
        use_caller_buf = false;
      }
      else
      {
        res = *caller_buffer;
        use_caller_buf = true;
      }
      size_t pos = 0;
      dc = ADLB_Pack_buffer(d, type, false, NULL, &res, &use_caller_buf,
                            &pos);
      DATA_CHECK(dc);
      result->data = result->caller_data = res.data;
      result->length = pos;

      return ADLB_DATA_SUCCESS;
    }
    default:
      verbose_error(ADLB_DATA_ERROR_TYPE,
        "Cannot serialize unknown type %i!\n", type);
  }
  // Unreachable:
  return ADLB_DATA_ERROR_UNKNOWN;
}

adlb_data_code
ADLB_Append_buffer(adlb_data_type type, const void *data, size_t length,
    bool prefix_len, adlb_buffer *output, bool *output_caller_buffer,
    size_t *output_pos)
{
  adlb_data_code dc;
  // Check buffer large enough for this member
  size_t required_size = *output_pos + (prefix_len ? VINT_MAX_BYTES : 0)
                    + length;
  dc = ADLB_Resize_buf(output, output_caller_buffer, required_size);
  DATA_CHECK(dc);

  if (prefix_len)
  {
    // Prefix with length of member
    size_t vint_len = vint_encode_size_t(length, output->data + *output_pos);
    assert(vint_len >= 1);
    *output_pos += vint_len;

    if (ADLB_pack_pad_size(type) && vint_len < VINT_MAX_BYTES)
    {
      // We expect the size to be padded for these
      size_t padding = VINT_MAX_BYTES - vint_len;
      memset(output->data + *output_pos, 0, padding);
      *output_pos += padding;
    }
  }

  // Copy in data
  memcpy(output->data + *output_pos, data, length);
  *output_pos += length;
  return ADLB_DATA_SUCCESS;
}

adlb_data_code
ADLB_Pack_buffer(const adlb_datum_storage *d, adlb_data_type type,
        bool prefix_len,
        const adlb_buffer *tmp_buf, adlb_buffer *output,
        bool *output_caller_buffer, size_t *output_pos)
{
  adlb_data_code dc;

  // Some types are implemented by appending to buffer anyway
  if (ADLB_pack_pad_size(type))
  {
    // Reserve space at front to prefix serialized size in bytes
    size_t required = *output_pos + VINT_MAX_BYTES;
    dc = ADLB_Resize_buf(output, output_caller_buffer, required);
    DATA_CHECK(dc);

    size_t start_pos = *output_pos;
    if (prefix_len)
    {
      memset(output->data + start_pos, 0, VINT_MAX_BYTES);
      *output_pos += VINT_MAX_BYTES;
    }
    if (type == ADLB_DATA_TYPE_CONTAINER)
    {
      dc = ADLB_Pack_container(&d->CONTAINER, tmp_buf, output,
                              output_caller_buffer, output_pos);
      DATA_CHECK(dc);
    }
    else
    {
      assert(type == ADLB_DATA_TYPE_MULTISET);
      dc = ADLB_Pack_multiset(d->MULTISET, tmp_buf, output,
                              output_caller_buffer, output_pos);
      DATA_CHECK(dc);
    }

    if (prefix_len)
    {
      // Add in actual size to reserved place
      size_t serialized_len = *output_pos - start_pos - VINT_MAX_BYTES;
      vint_encode_size_t(serialized_len, output->data + start_pos);
    }
    return ADLB_DATA_SUCCESS;
  }

  // Get binary representation of datum
  adlb_binary_data packed;
  dc = ADLB_Pack(d, type, tmp_buf, &packed);
  DATA_CHECK(dc);

  dc = ADLB_Append_buffer(type, packed.data, packed.length,
            prefix_len, output, output_caller_buffer, output_pos);

  // Free any malloced temporary memory
  if (tmp_buf != NULL && packed.data != tmp_buf->data)
    ADLB_Free_binary_data(&packed);

  return dc;
}

adlb_data_code
ADLB_Pack_container(const adlb_container *container,
          const adlb_buffer *tmp_buf, adlb_buffer *output,
          bool *output_caller_buffer, size_t *output_pos)
{
  adlb_data_code dc;

  const table_bp *members = container->members;
  dc = ADLB_Pack_container_hdr(members->size,
      (adlb_data_type)container->key_type,
      (adlb_data_type)container->val_type,
      output, output_caller_buffer, output_pos);
  DATA_CHECK(dc);

  int appended = 0;

  TABLE_BP_FOREACH(members, item)
  {
    size_t key_len = table_bp_key_len(item);
    assert(key_len <= INT_MAX);
    // append key; append val
    size_t required = *output_pos + VINT_MAX_BYTES + key_len;
    dc = ADLB_Resize_buf(output, output_caller_buffer, required);
    DATA_CHECK(dc);

    dc = ADLB_Append_buffer(ADLB_DATA_TYPE_NULL,
          table_bp_get_key(item), key_len,
          true, output, output_caller_buffer, output_pos);
    DATA_CHECK(dc);

    dc = ADLB_Pack_buffer(item->data, (adlb_data_type)container->val_type,
            true, tmp_buf, output, output_caller_buffer, output_pos);
    DATA_CHECK(dc);

    appended++;
  }

  DEBUG("Packed container:  entries: %i, key: %s, val: %s, bytes: %zu",
        members->size, ADLB_Data_type_tostring(container->key_type),
        ADLB_Data_type_tostring(container->val_type), *output_pos);

  // Check that the number we appended matches
  assert(appended == members->size);
  return ADLB_DATA_SUCCESS;
}

adlb_data_code
ADLB_Pack_container_hdr(int elems, adlb_data_type key_type,
        adlb_data_type val_type, adlb_buffer *output,
        bool *output_caller_buffer, size_t *output_pos)
{
  size_t required = *output_pos + VINT_MAX_BYTES * 3;
  adlb_data_code dc = ADLB_Resize_buf(output, output_caller_buffer,
                                      required);
  DATA_CHECK(dc);

  // pack key/val types
  size_t vint_len = vint_encode(key_type, output->data + *output_pos);
  assert(vint_len >= 1);
  *output_pos += vint_len;

  vint_len = vint_encode(val_type, output->data + *output_pos);
  assert(vint_len >= 1);
  *output_pos += vint_len;

  vint_len = vint_encode(elems, output->data + *output_pos);
  assert(vint_len >= 1);
  *output_pos += vint_len;
  TRACE("Pack container:  entries: %i, key: %s, val: %s, pos: %zu",
        elems, ADLB_Data_type_tostring(key_type),
        ADLB_Data_type_tostring(val_type), *output_pos);
  return ADLB_DATA_SUCCESS;
}

adlb_data_code
ADLB_Pack_multiset(const adlb_multiset_ptr ms,
          const adlb_buffer *tmp_buf, adlb_buffer *output,
          bool *output_caller_buffer, size_t *output_pos)
{
  adlb_data_code dc;

  uint size = xlb_multiset_size(ms);
  assert(size <= INT_MAX);

  dc = ADLB_Pack_multiset_hdr((int)size, (adlb_data_type)ms->elem_type,
                      output, output_caller_buffer, output_pos);
  DATA_CHECK(dc);

  int appended = 0;
  for (uint i = 0; i < ms->chunk_count; i++)
  {
    xlb_multiset_chunk *chunk = ms->chunks[i];
    uint chunk_len = (i == ms->chunk_count - 1) ?
          ms->last_chunk_elems : XLB_MULTISET_CHUNK_SIZE;

    for (uint j = 0; j < chunk_len; j++)
    {
      // append value
      dc = ADLB_Pack_buffer(&chunk->arr[j], (adlb_data_type)ms->elem_type,
              true, tmp_buf, output, output_caller_buffer, output_pos);
      DATA_CHECK(dc);

      appended++;
    }
  }

  // Check that the number we appended matches
  assert(appended == size);
  return ADLB_DATA_SUCCESS;
}

adlb_data_code
ADLB_Pack_multiset_hdr(int elems, adlb_data_type elem_type,
    adlb_buffer *output, bool *output_caller_buffer, size_t *output_pos)
{
  adlb_data_code dc;

  size_t required = *output_pos + VINT_MAX_BYTES * 2;
  dc = ADLB_Resize_buf(output, output_caller_buffer, required);
  DATA_CHECK(dc);

  size_t vint_len;

  // pack elem type
  vint_len = vint_encode(elem_type, output->data + *output_pos);
  assert(vint_len >= 1);
  *output_pos += vint_len;

  vint_len = vint_encode(elems, output->data + *output_pos);
  assert(vint_len >= 1);
  *output_pos += vint_len;
  return ADLB_DATA_SUCCESS;
}

adlb_data_code
ADLB_Unpack_buffer(adlb_data_type type,
        const void *buffer, size_t length, size_t *pos,
        const void **entry, size_t* entry_length)
{
  assert(buffer != NULL);
  assert(pos != NULL);
  assert(*pos >= 0);
  assert(entry != NULL);
  assert(entry_length != NULL);

  if (*pos >= length)
  {
    return ADLB_DATA_DONE;
  }
  size_t entry_len = 0;
  const size_t curr_pos = *pos;
  const char *buf_ptr = (const char*)buffer + curr_pos;
  int vint_len = vint_decode_size_t(buf_ptr, length - curr_pos, &entry_len);
  check_verbose(vint_len >= 0, ADLB_DATA_ERROR_INVALID,
      "Error decoding entry length when unpacking buffer");

  size_t vint_padded_len = ADLB_pack_pad_size(type) ?
                           VINT_MAX_BYTES : (size_t)vint_len;
  size_t remaining = length - curr_pos - vint_padded_len;
  check_verbose(entry_len <= remaining, ADLB_DATA_ERROR_INVALID,
                "Decoded entry less than remaining data "
                "in buffer: %zu remains, length %zu",
                remaining, entry_len);
  *entry_length = entry_len;
  *entry = buf_ptr + vint_padded_len;
  *pos += vint_padded_len + *entry_length;
  return ADLB_DATA_SUCCESS;
}

adlb_data_code ADLB_Unpack(adlb_datum_storage *d, adlb_data_type type,
            const void *buffer, size_t length, adlb_refc refcounts)
{
  // Ok to cast from const buffer since we retain ownership and
  // force it to copy
  return ADLB_Unpack2(d, type, (void*)buffer, length, true, refcounts,
                      true, NULL);
}

adlb_data_code ADLB_Unpack2(adlb_datum_storage *d, adlb_data_type type,
        void *buffer, size_t length, bool copy_buffer, adlb_refc refcounts,
        bool init_compound, bool *took_ownership)
{
  adlb_data_code dc;
  bool can_take_ownership = false;

  switch (type)
  {
    case ADLB_DATA_TYPE_INTEGER:
      dc = ADLB_Unpack_integer(&d->INTEGER, buffer, length);
      break;
    case ADLB_DATA_TYPE_REF:
      dc = ADLB_Unpack_ref(&d->REF, buffer, length, refcounts, true);
      break;
    case ADLB_DATA_TYPE_FLOAT:
      dc = ADLB_Unpack_float(&d->FLOAT, buffer, length);
      break;
    case ADLB_DATA_TYPE_STRING:
      dc = ADLB_Unpack_string(&d->STRING, buffer, length, copy_buffer);
      can_take_ownership = true;
      break;
    case ADLB_DATA_TYPE_BLOB:
      dc = ADLB_Unpack_blob(&d->BLOB, buffer, length, copy_buffer);
      can_take_ownership = true;
      break;
    case ADLB_DATA_TYPE_STRUCT:
      dc = ADLB_Unpack_struct(&d->STRUCT, buffer, length, refcounts,
                                init_compound);
      break;
    case ADLB_DATA_TYPE_CONTAINER:
      dc = ADLB_Unpack_container(&d->CONTAINER, buffer, length,
                                   refcounts, init_compound);
      break;
    case ADLB_DATA_TYPE_MULTISET:
      dc = ADLB_Unpack_multiset(&d->MULTISET, buffer, length,
                                  refcounts, init_compound);
      break;
    default:
      printf("data_store(): unknown type: %i\n", type);
      return ADLB_DATA_ERROR_INVALID;
  }

  if (took_ownership != NULL) {
    // Need to tell caller what happened regarding ownership
    *took_ownership = !copy_buffer && can_take_ownership;
  }

  return dc;
}

adlb_data_code
ADLB_Unpack_container(adlb_container *container,
    const void *data, size_t length, adlb_refc refcounts,
    bool init_cont)
{
  assert(container != NULL);
  assert(data != NULL);

  adlb_data_code dc;
  size_t pos = 0;
  int entries;
  adlb_data_type key_type, val_type;

  dc = ADLB_Unpack_container_hdr(data, length, &pos,
        &entries, &key_type, &val_type);
  DATA_CHECK(dc);

  if (init_cont)
  {
    container->key_type = key_type;
    container->val_type = val_type;
    container->members = table_bp_create(CONTAINER_INIT_CAPACITY);
  }
  else
  {
    assert(container->members != NULL);
    check_verbose(key_type == (adlb_data_type)container->key_type &&
         val_type == (adlb_data_type)container->val_type, ADLB_DATA_ERROR_TYPE,
        "Unpacked container type does not match: expected %s[%s] vs. %s[%s]",
        ADLB_Data_type_tostring((adlb_data_type)container->val_type),
        ADLB_Data_type_tostring((adlb_data_type)container->key_type),
        ADLB_Data_type_tostring(val_type), ADLB_Data_type_tostring(key_type));
  }

  for (int i = 0; i < entries; i++)
  {
    // unpack key/value pair and add to container
    const void *key, *val;
    size_t key_len, val_len;
    dc = ADLB_Unpack_container_entry(key_type, val_type, data, length,
                                &pos, &key, &key_len, &val, &val_len);
    DATA_CHECK(dc);

    adlb_datum_storage *d = malloc(sizeof(adlb_datum_storage));
    check_verbose(d != NULL, ADLB_DATA_ERROR_OOM,
                  "error allocating memory");
    dc = ADLB_Unpack(d, val_type, val, val_len, refcounts);
    DATA_CHECK(dc);

    // TODO: handle case where key already exists
    bool ok = table_bp_add(container->members, key, key_len, d);
    check_verbose(ok, ADLB_DATA_ERROR_OOM, "Error adding to container");
  }

  return ADLB_DATA_SUCCESS;
}

adlb_data_code
ADLB_Unpack_container_hdr(const void *data, size_t length, size_t *pos,
        int *entries, adlb_data_type *key_type, adlb_data_type *val_type)
{
  const char *ptr = (const char*)data;
  DEBUG("Unpack container: %zu/%zu", length, *pos);

  int64_t key_type64 = 0;
  int vint_len = vint_decode(ptr + *pos, length - *pos, &key_type64);
  check_verbose(vint_len >= 0, ADLB_DATA_ERROR_INVALID,
                "Could not decode vint for key type (%i)", vint_len);
  *pos += (size_t)vint_len;
  *key_type = (adlb_data_type)key_type64;
  check_verbose(key_type64 == *key_type, ADLB_DATA_ERROR_INVALID,
              "Container key type is out of range: %"PRId64, key_type64);

  int64_t val_type64 = 0;
  vint_len = vint_decode(ptr + *pos, length - *pos, &val_type64);
  check_verbose(vint_len >= 0, ADLB_DATA_ERROR_INVALID,
                "Could not decode vint for value type (%i)", vint_len);
  *pos += (size_t)vint_len;
  *val_type = (adlb_data_type)val_type64;
  check_verbose(val_type64 == *val_type, ADLB_DATA_ERROR_INVALID,
              "Container val type is out of range: %"PRId64, val_type64);

  int64_t entries64 = 0;
  vint_len = vint_decode(ptr + *pos, length, &entries64);
  check_verbose(vint_len >= 0, ADLB_DATA_ERROR_INVALID,
                "Could not extract multiset entry count (%i)", vint_len);
  check_verbose(entries64 >= 0 && entries64 <= INT_MAX,
      ADLB_DATA_ERROR_INVALID, "Entries out of range: %"PRId64, entries64);
  *entries = (int)entries64;
  *pos += (size_t)vint_len;

  DEBUG("Unpack container:  entries: %i, key: %s, val: %s, pos: %zu",
        *entries, ADLB_Data_type_tostring(*key_type),
        ADLB_Data_type_tostring(*val_type), *pos);
  return ADLB_DATA_SUCCESS;

}

adlb_data_code
ADLB_Unpack_container_entry(adlb_data_type key_type,
          adlb_data_type val_type,
          const void *data, size_t length, size_t *pos,
          const void **key, size_t *key_len,
          const void **val, size_t *val_len)
{
  // Key data not stored in typed way
  adlb_data_code dc;
  dc = ADLB_Unpack_buffer(ADLB_DATA_TYPE_NULL, data, length,
                  pos, key, key_len);
  DATA_CHECK(dc);

  dc = ADLB_Unpack_buffer(val_type, data, length,
                  pos, val, val_len);
  DATA_CHECK(dc);
  return ADLB_DATA_SUCCESS;
}

adlb_data_code
ADLB_Unpack_multiset(adlb_multiset_ptr *ms, const void *data,
        size_t length, adlb_refc refcounts, bool init_ms)
{
  assert(ms != NULL);
  assert(data != NULL);

  adlb_data_code dc;
  size_t pos = 0;

  int entries;
  adlb_data_type elem_type;
  dc = ADLB_Unpack_multiset_hdr(data, length, &pos,
                                &entries, &elem_type);
  DATA_CHECK(dc);

  if (init_ms)
  {
    *ms = xlb_multiset_alloc(elem_type);
  }
  else
  {
    assert(*ms != NULL);
    check_verbose(elem_type == (adlb_data_type)(*ms)->elem_type,
        ADLB_DATA_ERROR_TYPE,
        "Unpacked multiset elem type does not match: expected %s vs. %s",
        ADLB_Data_type_tostring((*ms)->elem_type),
        ADLB_Data_type_tostring(elem_type));
  }

  for (int i = 0; i < entries; i++)
  {
    // unpack elem and add it
    const void *elem;
    size_t elem_len;
    dc = ADLB_Unpack_multiset_entry(elem_type, data, length,
                                    &pos, &elem, &elem_len);
    DATA_CHECK(dc);

    dc = xlb_multiset_add(*ms, elem, elem_len, refcounts, NULL);
    DATA_CHECK(dc);
  }

  return ADLB_DATA_SUCCESS;
}

adlb_data_code
ADLB_Unpack_multiset_hdr(const void *data, size_t length, size_t *pos,
                int *entries, adlb_data_type *elem_type)
{
  int vint_len;
  int64_t elem_type64 = 0;
  const char *ptr = (const char*)data;

  vint_len = vint_decode(ptr + *pos, length - *pos, &elem_type64);
  assert(vint_len >= 0);
  *pos += (size_t)vint_len;
  *elem_type = (adlb_data_type)elem_type64;
  check_verbose(elem_type64 == *elem_type, ADLB_DATA_ERROR_INVALID,
                "Multiset elem type is out of range: %"PRId64, elem_type64);

  int64_t entries64 = 0;
  vint_len = vint_decode(ptr + *pos, length, &entries64);
  check_verbose(vint_len >= 0, ADLB_DATA_ERROR_INVALID,
                "Could not extract multiset entry count");
  check_verbose(entries64 >= 0 && entries64 <= INT_MAX,
      ADLB_DATA_ERROR_INVALID, "Entries out of range: %"PRId64, entries64);
  *entries = (int)entries64;
  *pos += (size_t)vint_len;

  return ADLB_DATA_SUCCESS;
}

/*
  Unpack value from buffer
 */
adlb_data_code
ADLB_Unpack_multiset_entry(adlb_data_type elem_type,
          const void *data, size_t length, size_t *pos,
          const void **elem, size_t *elem_len)
{
  return ADLB_Unpack_buffer(elem_type, data, length,
                            pos, elem, elem_len);
}

/* Free the memory associated with datum contents */
adlb_data_code ADLB_Free_storage(adlb_datum_storage *d, adlb_data_type type)
{
  adlb_data_code dc;
  switch (type)
  {
    case ADLB_DATA_TYPE_STRING:
      free(d->STRING.value);
      break;
    case ADLB_DATA_TYPE_BLOB:
      free(d->BLOB.value);
      break;
    case ADLB_DATA_TYPE_CONTAINER:
    {
      dc = xlb_members_cleanup(&d->CONTAINER, true, false, false,
                               XLB_NO_ACQUIRE, NULL);
      DATA_CHECK(dc);
      break;
    }
    case ADLB_DATA_TYPE_MULTISET:
      dc = xlb_multiset_cleanup(d->MULTISET, true, true, false, false,
                                XLB_NO_ACQUIRE, NULL);
      DATA_CHECK(dc);
      break;
    case ADLB_DATA_TYPE_STRUCT:
      xlb_free_struct(d->STRUCT, true, true);
      break;
    // Types with no malloced storage:
    case ADLB_DATA_TYPE_INTEGER:
    case ADLB_DATA_TYPE_FLOAT:
    case ADLB_DATA_TYPE_REF:
      break;
    default:
      check_verbose(false, ADLB_DATA_ERROR_TYPE,
                    "datum_gc(): unknown type %u", type);
      break;
  }
  return ADLB_DATA_SUCCESS;
}

char *ADLB_Data_repr(const adlb_datum_storage *d, adlb_data_type type)
{
  int rc;
  adlb_data_code dc;
  char *tmp;
  switch (type)
  {
    case ADLB_DATA_TYPE_STRING:
    {
      // Allocate with enough room for trailing ...
      tmp = malloc(d->STRING.length + 5);
      strcpy(tmp, d->STRING.value);
      int pos = 0;
      // Don't return multiple lines of multi-line string
      while (tmp[pos] != '\0')
      {
        if (tmp[pos] == '\n')
        {
          tmp[pos++] = '.';
          tmp[pos++] = '.';
          tmp[pos++] = '.';
          tmp[pos++] = '\0';
          break;
        }
        pos++;
      }
      return tmp;
    }
    case ADLB_DATA_TYPE_INTEGER:
      rc = asprintf(&tmp, "%"PRId64"", d->INTEGER);
      assert(rc >= 0);
      return tmp;
    case ADLB_DATA_TYPE_REF:
      rc = asprintf(&tmp, "<%"PRId64"> r:%d w:%d", d->REF.id,
                    d->REF.read_refs, d->REF.write_refs);
      assert(rc >= 0);
      return tmp;
    case ADLB_DATA_TYPE_FLOAT:
      rc = asprintf(&tmp, "%lf", d->FLOAT);
      assert(rc >= 0);
      return tmp;
      break;
    case ADLB_DATA_TYPE_BLOB:
      rc = asprintf(&tmp, "blob (%zu bytes)", d->BLOB.length);
      assert(rc >= 0);
      return tmp;
    case ADLB_DATA_TYPE_CONTAINER:
      return data_repr_container(&d->CONTAINER);
    case ADLB_DATA_TYPE_MULTISET:
      dc = xlb_multiset_repr(d->MULTISET, &tmp);
      assert(dc == ADLB_DATA_SUCCESS);
      return tmp;
    case ADLB_DATA_TYPE_STRUCT:
      return xlb_struct_repr(d->STRUCT);
    default:
      rc = asprintf(&tmp, "unknown type: %i\n", type);
      assert(rc >= 0);
      return tmp;
      break;
  }
  return strdup("???");
}

static char *data_repr_container(const adlb_container *c)
{
  adlb_data_code dc;
  table_bp* members = c->members;
  size_t cont_str_len = 1024;
  char *cont_str = malloc(cont_str_len);
  int cont_str_pos = 0;

  const char *kts = ADLB_Data_type_tostring((adlb_data_type)c->key_type);
  const char *vts = ADLB_Data_type_tostring((adlb_data_type)c->val_type);
  dc = xlb_resize_str(&cont_str, &cont_str_len, cont_str_pos,
                 strlen(kts) + strlen(vts) + 4);
  assert(dc == ADLB_DATA_SUCCESS);
  cont_str_pos += sprintf(&cont_str[cont_str_pos], "%s=>%s: ", kts, vts);

  TABLE_BP_FOREACH(members, item)
  {
    const char *null_str = "(null)";
    adlb_container_val v = item->data;
    char *value_s = (v == NULL) ? NULL :
          ADLB_Data_repr(v, (adlb_data_type)c->val_type);
    size_t value_strlen = (value_s == NULL) ? sizeof(null_str) :
                                              strlen(value_s);
    dc = xlb_resize_str(&cont_str, &cont_str_len, cont_str_pos,
                   (table_bp_key_len(item) - 1) + value_strlen + 7);
    assert(dc == ADLB_DATA_SUCCESS);
    if (c->key_type == ADLB_DATA_TYPE_STRING)
    {
      cont_str_pos += sprintf(&cont_str[cont_str_pos], "\"%s\"=",
                        (char*)table_bp_get_key(item));
    }
    else
    {
      cont_str_pos += sprintf(&cont_str[cont_str_pos], "\"%s\"=",
                              (char*)table_bp_get_key(item));
    }

    if (value_s != NULL)
    {
      cont_str_pos += sprintf(&cont_str[cont_str_pos], "{%s} ", value_s);
    }
    else
    {
      cont_str_pos += sprintf(&cont_str[cont_str_pos], "%s ", null_str);
    }

    if (value_s != NULL)
    {
      free(value_s);
    }
  }
  cont_str[cont_str_pos] = '\0';
  return cont_str;
}

adlb_data_code
xlb_resize_str(char **str, size_t *curr_size, int pos, size_t needed)
{
  assert(pos >= 0);
  size_t total_needed = ((size_t)pos) + needed + 1;
  if (total_needed > *curr_size)
  {
    size_t new_size = *curr_size + 1024;
    if (new_size < total_needed)
      new_size = total_needed + 1024;

    DATA_REALLOC(*str, new_size);
    *curr_size = new_size;
  }
  return ADLB_DATA_SUCCESS;
}

/**
 * Parse 64-bit integer. Return ADLB_SUCCESS if entire string is
 * valid integer that fits in 64-bit signed representation
 * If not successful return ADLB_DATA_ERROR_NUMBER_FORMAT and do not
 * print anything.
 */
adlb_data_code
ADLB_Int64_parse(const char *str, size_t length, int64_t *result)
{
  if (length == 0)
  {
    return ADLB_DATA_ERROR_INVALID;
  }

  int64_t val = 0;
  int i = 0;
  bool negative = false;
  if (str[i] == '-') {
    negative = true;
    i++;
    if (length == 1)
    {
      return ADLB_DATA_ERROR_INVALID;
    }
  }

  int64_t limit = negative ? INT64_MIN : INT64_MAX;
  // Limit that we can multiply by 10 without overflow
  int64_t pre_limit = limit / 10;

  for (; i < length; i++)
  {
    char c = str[i];
    int64_t digit = c - '0';
    if (digit < 0 || digit > 9)
    {
      return ADLB_DATA_ERROR_INVALID;
    }

    if (negative)
    {
      if (val < pre_limit)
      {
        return ADLB_DATA_ERROR_INVALID;
      }
      val = 10 * val;

      if (val != 0 && val - limit < digit)
      {
        return ADLB_DATA_ERROR_INVALID;
      }
      val -= digit;
    }
    else
    {
      if (val > pre_limit)
      {
        return ADLB_DATA_ERROR_INVALID;
      }
      val = 10 * val;
      if (limit - val < digit)
      {
        return ADLB_DATA_ERROR_INVALID;
      }
      val += digit;
    }
  }

  *result = val;

  return ADLB_DATA_SUCCESS;
}

redpajama_set_name: RedPajamaGithub


Same issue with very loud sounds even on minimum level set in volume configuration. This happened right after upgrading to Oreo.
Same issue with very loud sounds even on minimum level set in volume configuration. This happened right after upgrading to Oreo. Turn off DOLBY helped only once, then after some time it's back to "loud" and turning on/off DOLBY option doesn't help at all. This bug is very annoying. HMD, please fix!
I'm experiencing the same issue as user1517952177956. Immediately after upgrading from 7.1.2 to 8.0.0, ringtone volume is uncomfortably loud. Even at its lowest setting, it's far too loud for a quiet environment.
Disabling Dolby only slightly reduces the volume.
Turning on "Mono audio" in Developer Settings does not make any noticeable difference that I can detect.
Why why why nokia doing this.HMD are you listening.please solve this major issues. Please reply to this tread.we need quality sound not loudness and cracking sound. We need top notch dolby atmos software.please rectify this issue.
Same here, any updates on this?
Based on one user's experience with the wake lock app, I'm tempted to update my music player app with optional wake locks.
Unfortunately I returned my phone to Amazon after I discovered this problem, so I cannot test it.
If anyone is interested in testing this, contact me.
Just turn of the "Dolby Surround" option.
Not the best solution but it works.
Please fix it . It's too noisy to hear anything. Earpiece loudspeaker is driving hard due to unusual amp output with noise. This is Oreo issue as it's was just fine a hour before update.
Oreo 8.0 has better features but with very bad optimisation.hope Nokia release 8.1 0reo with excellent optimisation(like on nougat) and also with resolved sound glitch. Oreo has too bad battery backup compared to nougat.
Is there any official word on this? I'm not even sure they're aware of this issue, considering replies like "use official headphones"
I've contacted Nokia via email and Twitter. I have not received a response yet.
What the **** with Nokia? They are providing us buggy software. I regret to update to Oreo .
Hi guys does earpiece (2nd speaker ) is producing weird noise after Oreo update or it just me?
I contacted Nokia about the volume and audio-timeout issues. I just received the following reply, but I'm not sure which issue they're referring to. Hopefully both.
We would like to inform you that there will be an OTA update by the end of this month that will provide a fix for this issues you are experiencing.
If you need any additional help or have any questions, please, don't hesitate to contact us!
My Nokia 6 TA1021 has something entirely opposite happening to it. It's too low for most times and it's getting lower with every passing day in my opinion, I can barely hear the bottom loudspeaker even with Dolby Atmos On. The earpiece/speaker is like what it was, the bottom speaker is barely audible now as compared to what it was when I bought it in August.
If I switch off Dolby, I cannot hear anything in a noisy room.
Updated to Oreo 8.1. Changes to the improvement of sound is not noticed. Someone like?
Same here no improvement to sound either. Nokia HMD are you kidding with us?
Why then in the speakers when turning off the music there is noise, after 3 seconds it disappears?. And so in all applications.


text:
Cancer Therapy: Preclinical
The Selective Class I PI3K Inhibitor CH5132799 Targets Human Cancers Harboring Oncogenic PIK3CA Mutations
Hiroshi Tanaka, Miyuki Yoshida, Hiromi Tanimura, Toshihiko Fujii, Kiyoaki Sakata, Yukako Tachibana, Jun Ohwada, Hirosato Ebiike, Shino Kuramoto, Keiichi Morita, Yasushi Yoshimura, Toshikazu Yamazaki, Nobuya Ishii, Osamu Kondoh and Yuko Aoki
Hiroshi Tanaka
Miyuki Yoshida
Hiromi Tanimura
Toshihiko Fujii
Kiyoaki Sakata
Yukako Tachibana
Jun Ohwada
Hirosato Ebiike
Shino Kuramoto
Keiichi Morita
Yasushi Yoshimura
Toshikazu Yamazaki
Nobuya Ishii
Osamu Kondoh
Yuko Aoki
Purpose: The phosphatidylinositol 3-kinase (PI3K) pathway plays a central role in cell proliferation and survival in human cancer. PIK3CA mutations, which are found in many cancer patients, activate the PI3K pathway, resulting in cancer development and progression. We previously identified CH5132799 as a novel PI3K inhibitor. Thus, this study aimed to clarify the biochemical and antitumor activity of CH5132799 and elucidate the correlation between CH5132799 response and genetic alterations in the PI3K pathway.
Experimental Design: Kinase inhibitory activity was profiled in cell-free assays. A large panel of human breast, ovarian, prostate, and endometrial cancer cell lines, as well as xenograft models, were used to evaluate the antitumor activity of CH5132799, followed by analysis for genetic alterations. Effects on Akt phosphorylation induced by mTORC1 inhibition were tested with CH5132799 and compared with mTORC1 and PI3K/mTOR inhibitors.
Results: CH5132799 selectively inhibited class I PI3Ks and PI3Kα mutants in in vitro kinase assays. Tumors harboring PIK3CA mutations were significantly sensitive to CH5132799 in vitro and were remarkably regressed by CH5132799 in in vivo mouse xenograft models. In combination with trastuzumab, tumors disappeared in the trastuzumab-insensitive breast cancer model with the PIK3CA mutation. Moreover, CH5132799 did not reverse a negative feedback loop of PI3K/Akt/mTOR signaling and induced regression against tumors regrown after long-term mTORC1 inhibitor treatment.
Conclusions: CH5132799 is a selective class I PI3K inhibitor with potent antitumor activity against tumors harboring the PIK3CA mutations. Prediction of CH5132799 response on the basis of PIK3CA mutations could enable patient stratification in clinical settings. Clin Cancer Res; 17(10); 3272–81. ©2011 AACR.
Translational Relevance
The PI3K/Akt pathway is a frequently deregulated pathway in common human cancers. PIK3CA mutations, found in many cancer patients, activate the PI3K pathway, resulting in cancer development and progression. On the basis of previous research identifying CH5132799 as a novel PI3K inhibitor, we analyzed its effect on a large panel of cancer cell lines. Results revealed that CH5132799 showed strong antiproliferative activity against breast, ovarian, prostate, and endometrial cancer cells in which the PI3K pathway is often activated. Cell lines harboring PIK3CA mutations showed higher sensitivity in vitro and in vivo to CH5132799 than those without mutations, indicating that the PIK3CA mutation is a CH5132799-sensitive factor. We theorize that the PIK3CA mutation is the primary predictive marker of CH5132799 sensitivity; moreover, the mutation could enable stratification of patients who will benefit from CH5132799 therapy in clinical settings.
The phosphatidylinositol 3-kinase (PI3K)/Akt/mTOR pathway regulates various cellular processes such as proliferation, growth, apoptosis, and cytoskeletal rearrangement (1). PI3Ks are categorized into 3 classes: I, II, and III. Closely related protein kinases, including mTOR, are called class IV PI3Ks or PI3K-related protein kinases (PIKK). Class I PI3Ks form heterodimers consisting of regulatory and p110 catalytic subunits; they are activated by signals from growth factor receptors and G-protein coupled receptors. There are 4 p110 isoforms (α, β, γ, and δ), and among them, p110α (PI3Kα) is known to be frequently mutated at the E542, E545, or H1047 positions (hot spots) in various human cancers such as breast, ovarian, endometrial, and colorectal cancer (2–5). These oncogenic mutations result in constitutive activation of PI3K (6). E542 and E545 mutations are thought to abolish negative regulation by interaction with a regulatory subunit p85 (7, 8). The H1047 mutation most likely changes interaction with substrates (9). Activation of the PI3K pathway is also known to be caused by amplification of PIK3CA, the gene for PI3Kα, and genetic inactivation of PTEN, a tumor suppressive negative regulator of the pathway (10, 11). Alternatively, amplification and mutation of molecules in the PI3K pathway, including Akt and receptor tyrosine kinases (RTK) such as HER2, are observed in a wide variety of cancers (3, 12). These tumors are considered to be addicted to the PI3K pathway. Therefore, inhibition of PI3K signaling seems to be a promising strategy for the treatment of PI3K pathway–addicted cancers. In fact, several PI3K pathway inhibitors that target PI3K, Akt, and mTOR are under early clinical development (13–16).
mTOR has 2 functionally distinct multiprotein complexes: mTOR complex 1 (mTORC1) and mTORC2 (10). mTORC1 regulates protein translation through phosphorylation of p70 ribosomal S6 kinase (S6K) and eukaryotic translation initiation factor binding protein (4E-BP). The other complex, mTORC2, phosphorylates and activates Akt. The mTORC1 inhibitors temsirolimus and everolimus have been approved for the therapy of advanced renal cell carcinoma. However, the use of mTORC1 inhibitors risks the possible activation of Akt by disruption of a negative feedback loop, and patients treated with these drugs eventually become refractory (17, 18). The negative feedback, which is dependent on insulin-like growth factor I receptor (IGF1R)/insulin receptor substrate 1, involves the S6K-mediated suppression of upstream signaling; mTORC1 inhibitors abrogate this feedback suppression, resulting in Akt activation. On the other hand, PI3K inhibitors are expected to block mTORC1 inhibition-induced Akt activation because PI3K acts upstream of Akt. We have previously identified the novel PI3K inhibitor CH5132799 (19).
In this study, we investigated the pharmacologic action and antitumor activity of CH5132799 against tumors with PI3K pathway activation, including PIK3CA mutations, using a large panel of cell lines. Moreover, the differences between CH5132799 and mTORC1 and PI3K/mTOR inhibitors were examined in terms of PI3K pathway inhibition and efficacy in vivo.
Cell lines were obtained from the American Type Culture Collection, the Deutsche Sammlung von Mikroorganismen und Zellkulturen, Health Science Research Resources Bank, Asterand Inc., and the Health Protection Agency Culture Collections. The breast cancer cell line KPL-4 was kindly provided by Dr. Junichi Kurebayashi (Kawasaki Medical School, Kurashiki, Japan; ref. 20). The androgen-independent prostate cancer cell lines LNCaP-CS10 and LNCaP-BC2 were previously established (21, 22). The ovarian cancer cell line 2008 and IGROV1 were generous gifts from Dr. Aikou Okamoto (The Jikei University School of Medicine, Tokyo, Japan) and Dr. Marc Maliepaard (The Netherlands Cancer Institute, Amsterdam, The Netherlands), respectively. Gastric cancer cell line GXF97 was kindly provided from Dr. Heinz H. Fiebig (Freiburg University, Freiburg, Germany). All cell lines were cultured according to suppliers' instructions.
CH5132799 (patent: WO 2008018426) and BEZ235 (13) were chemically synthesized. Trastuzumab was obtained from Chugai Pharmaceutical/F. Hoffmann-La Roche. Everolimus was purchased from Sequoia Research Products and Hangzhou APIChem Technology.
The cell lines were added to the wells of 96-well plates containing 0.076 to 10,000 nmol/L CH5132799 and incubated at 37°C. After 4 days of incubation, Cell Counting Kit-8 solution (Dojindo Laboratories) was added and, after incubation for several more hours, absorbance at 450 nm was measured with Microplate-Reader iMark (Bio-Rad Laboratories). The antiproliferative activity was calculated by the formula (1 − T/C) × 100 (%), in which T and C represent absorbance at 450 nm of the cells treated with drugs (T) and that of untreated control cells (C). The IC50 values were calculated by using Microsoft Excel 2007.
Mouse xenograft study
Female BALB-nu/nu mice (CAnN.Cg-Foxn1<nu>/CrlCrlj nu/nu) were obtained from Charles River Laboratories Japan and kept under specified pathogen-free conditions. A total of 4 × 106 to 1.2 × 107 cells were suspended in 100 to 200 μL serum-free culture medium and injected subcutaneously into the right flank of the mice. Tumor size was measured by using a gauge twice per week, and tumor volume (TV) was calculated by using the following formula: TV = ab 2/2, in which a is the length of the tumor and b is the width. Once the tumors reached a volume of approximately 200 to 300 mm3, animals were randomized into groups (n = 4 or 5 in each group) and treatment was initiated. CH5132799 and everolimus were orally administered once a day and trastuzumab was intravenously injected once a week.
CH5132799 selectively inhibited class I PI3K and PI3Kα mutants in vitro and the PI3K pathway in cells
We previously identified the aminopyrimidine derivative CH5132799 as a PI3K inhibitor (Supplementary Fig. S1; ref. 19). The inhibitory effects of CH5132799 on PI3K kinase activity were examined in cell-free systems (Table 1). CH5132799 inhibited class I PI3Ks, particularly PI3Kα, with an IC50 of 14 nmol/L. IC50 values against class II PI3Ks (C2α and C2β), a class III PI3K (Vps34), and a class IV PI3K (mTOR) were more than 100-fold higher than that against PI3Kα. Interestingly, slightly lower IC50 values were observed against PI3Kα with oncogenic mutations E542K, E545K, and H1047R than against wild-type (WT) PI3Kα (Table 1 and Supplementary Fig. S2). In an analysis of cocrystal structure with PI3Kγ (PBD ID: 3APC), CH5132799 was shown to interact with ATP-binding sites of the enzyme, suggesting an ATP competitive mode of inhibition. No significant inhibitory activities of CH5132799 were observed against a representative panel of 26 protein kinases, including RTKs, nonreceptor tyrosine kinases, and serine/threonine kinases. These data indicate that CH5132799 is a selective class I PI3K inhibitor, especially against PI3Kα and its mutants.
In vitro kinase inhibition profile of CH5132799
Next, we tested the effect of CH5132799 on cells. When breast cancer KPL-4 cells harboring the PIK3CA mutation were treated with CH5132799, phosphorylation of Akt and its direct substrates, PRAS40 and FoxO1/3a, and phosphorylation of downstream factors, including S6K, S6, and 4E-BP1, were effectively suppressed, indicating complete suppression of the pathway (Fig. 1). Similar results were obtained by using BT-474 cells (Supplementary Fig. S3). Furthermore, CH5132799 induced cell-cycle arrest in G1 phase and increased the sub-G1 population in KPL-4 cells (Supplementary Fig. S4A). Caspase 3/7 activation was also observed in CH5132799-treated cells (Supplementary Fig. S4B). Therefore, class I PI3K inhibition by CH5132799 suppressed signaling in the PI3K pathway in cells, leading to G1 arrest and apoptosis induction.
Inhibition of PI3K pathway signaling in cells. KPL-4 cells were treated with the indicated concentrations of CH5132799 for 2 hours. The cells were lysed and analyzed by Western blotting.
Cancer cell lines harboring PIK3CA mutations were significantly sensitive to CH5132799
On the basis of the potent inhibitory activity of CH5132799 against PI3Kα and its oncogenic mutants, as shown in Table 1, we expected CH5132799 to show antitumor activity against tumors with PI3K pathway activation, including those with PIK3CA mutations. The spectrum of antiproliferative activity was analyzed by using a large panel of various cancer cell lines belonging to 4 types of cancer—breast, ovarian, prostate, and endometrial cancer—in which the PIK3CA mutation and PTEN deficiency are frequently found and in which RAS/RAF is rarely mutated (Fig. 2A and Supplementary Table S2; refs. 10, 23). CH5132799 showed superior antiproliferative activity across the 4 tumor types, with 75% (45/60) of lines having an IC50 below 1 μmol/L and 38% (23/60) of lines having an IC50 below 0.3 μmol/L. As shown in Figure 2A, we annotated the cell lines with their genetic status; mutations of PIK3CA, PTEN, KRAS, HRAS, NRAS, and BRAF genes; genetic inactivation of PTEN; and amplification of the HER2 gene (24–27). Most of the cell lines that were highly sensitive to CH5132799 (left side in the graphs) had PIK3CA mutations. A similar tendency was observed in HER2 amplification. On the other hand, cell lines with RAS or RAF mutations tended to be less sensitive to CH5132799 (right side in the graphs). PTEN-deficient cell lines exhibited both sensitivity and insensitivity to CH5132799, suggesting additional determinant(s) of antitumor activity.
Analysis of antiproliferative activity based on PIK3CA and other genetic alterations. A, the IC50 values of CH5132799 for growth inhibition in breast, ovarian, prostate, and endometrial cancer cell lines are arranged from lowest to highest and divided into tumor types. Boxes below the graph indicate genetic alterations: PIK3CA mutations, HER2 amplification, PTEN deficiency, and RAS/RAF mutations. B and C, the IC50 values plotted in a scatter plot. B, cell lines were divided into 4 groups based on PIK3CA mutation status: H1047 mutations, E542/545 mutations, non–hot spot mutations (neither H1047 nor E542/545), and mutation not found (none). C, cell lines were divided into 6 groups based on the genetic alterations shown in A.
Further precise analysis was then carried out based on the positions of the mutations within the PIK3CA gene (Fig. 2B). When the PIK3CA mutations were divided into 3 groups (H1047, E542/545, and non–hot spot mutations), as expected, each group was significantly more sensitive than the cell lines without PIK3CA mutations (P < 0.0001, P = 0.0004, and P = 0.0018, respectively: Tukey's test; Fig. 2B). Among the 3 groups with PIK3CA mutations, no significant difference was observed (H1047 vs. E542/545: P = 0.97, H1047 vs. non–hot spot: P = 0.73, and E542/545 vs. non–hot spot: P = 0.58). When all the PIK3CA mutations were combined, the cell lines with all PIK3CA mutations showed highly more significant sensitivity to CH5132799 than cell lines without the mutations (P = 7.4 × 10−9: Student's t test). However, in contrast, we did not find a significant association between PTEN deficiency and response to CH5132799 (P = 0.11).
Cell lines were also classified in terms of HER2 amplification and RAS or RAF mutations (Fig. 2C). Among cell lines without PIK3CA mutations, HER2-amplified or RAS/RAF mutant cell lines showed lower or higher IC50s to CH5132799, respectively, but not significantly (P = 0.43 or P = 0.68: Tukey's test). HER2-amplified cell lines with PIK3CA mutations were as sensitive as cell lines harboring only PIK3CA mutations (P = 0.91). Coexistence of the PIK3CA and RAS/RAF mutations seemed to result in higher sensitivity to CH5132799 than only RAS/RAF mutations (P = 0.015).
CH5132799 showed potent in vivo antitumor activity in xenograft models with PIK3CA mutations
We next sought to confirm our in vitro finding that the PIK3CA mutation determines the response to CH5132799, by conducting in vivo studies using xenograft models. Daily oral administration of CH5132799 showed remarkable antitumor activity in the xenograft model of breast cancer KPL-4 cells harboring the PIK3CA H1047R mutation (Fig. 3A). Particularly, high-dose administration resulted in rapid tumor regression. Tumor regression was also observed in breast cancer BT-474 cells with the PIK3CA K111N mutation. Inhibition of the PI3K pathway was confirmed in CH5132799-treated xenograft tumors (Fig. 3B). In both the KPL-4 and BT-474 models, effective suppression of Akt phosphorylation was observed in a time-dependent manner. Consistent with in vitro observations, proliferation was reduced and apoptosis was induced in CH5132799-treated tumors (Supplementary Fig. S5). Potent antitumor activity against tumors with PIK3CA mutations was also evident in the ovarian cancer SK-OV-3 and endometrial cancer MFE-280 models (Fig. 3C). In addition, in the PTEN-deficient model, gastric cancer GXF97 tumors in which the PTEN gene was deleted were shrunk remarkably by CH5132799 administration, and tumor growth was inhibited in a PC-3 prostate cancer model. Furthermore, CH5132799 was less effective in the MDA-MB-231 breast cancer model with KRAS and BRAF mutations, but colorectal cancer HCT116, harboring both PIK3CA and KRAS mutations, showed strong tumor growth inhibition by CH5132799, consistent with our in vitro observations. Therefore, we concluded that in vivo xenograft studies reproduced our in vitro finding that CH5132799 has potent antitumor activity against cancer harboring the PIK3CA mutation. In all in vivo studies, the doses of CH5132799 tested were well tolerated, with no gross toxicity observed in the treated animals (data not shown).
Antitumor activity in mouse xenograft models of cell lines harboring genetic alterations, including PIK3CA mutations. A, mice bearing subcutaneously implanted tumors with PIK3CA mutations were orally administered the indicated doses of CH5132799 on a daily basis. Mean tumor volumes are shown (left: KPL-4, n = 5; right: BT-474, n = 4). B, mice bearing tumors were orally administered 12.5 mg/kg of CH5132799. At the indicated times after administration, tumors were resected, lysed, and analyzed by Western blotting. C, efficacy of CH5132799 in xenograft models with various genetic alterations, including PIK3CA mutations (SK-OV-3, n = 5; MFE-280, n = 4), PTEN deletions (GXF97, n = 4; PC-3, n = 5), and KRAS/BRAF mutations (MDA-MB-231, n = 4).
We further explored antitumor activity in rational combination investigations. HER2-amplified cell lines with PIK3CA mutations, including KPL-4, are reportedly insensitive to the HER2-targeted antibody trastuzumab because of HER2-independent activation of the PI3K pathway (28). We therefore investigated the ability of CH5132799 to overcome trastuzumab insensitivity. Indeed, KPL-4 tumors continued to grow after trastuzumab administration in the xenograft model (Fig. 4). However, combining CH5132799 with trastuzumab induced remarkable antitumor activity, resulting in the disappearance of the tumors. Surprisingly, the disappearance was maintained through the follow-up period—more than 1 month—without any additional administration, indicating that CH5132799 overcomes trastuzumab insensitivity in tumors with PIK3CA mutation through PI3K inhibition.
Antitumor activity in combination with trastuzumab in the trastuzumab-insensitive model. Mice bearing trastuzumab-insensitive KPL-4 tumors were orally administered 12.5 mg/kg of CH5132799 on a daily basis for 12 consecutive days (indicated by black arrows) and were intravenously injected with 30 mg/kg of trastuzumab weekly for 2 weeks (indicated by white arrows) as monotherapy or as part of combination therapy (n = 5). Mean tumor volumes were followed up long term.
Selective inhibition of class I PI3K by CH5132799 showed an advantage over mTORC1 and PI3K/mTOR inhibitors
S6K inhibition by mTORC1 inhibitors has been reported to abrogate the negative feedback loop, resulting in activation of Akt and downstream effectors (17, 18). We examined the effect of the selective class I PI3K inhibitor CH5132799 on the feedback loop compared with the mTORC1 inhibitor everolimus and the PI3K/mTOR dual inhibitor BEZ235 (Fig. 5A). Everolimus enhanced Akt phosphorylation in BT-474 cells accompanied by inhibition of S6K phosphorylation. Furthermore, at a low dose (0.01 μmol/L), BEZ235 also enhanced Akt phosphorylation, as previously reported, although it inhibits Akt phosphorylation at high doses (29, 30). On the other hand, CH5132799 did not induce Akt phosphorylation through inhibition of S6K phosphorylation at any dose. Moreover, 4E-BP1 phosphorylation was inhibited by both CH5132799 and BEZ235, though everolimus had little effect on 4E-BP1 phosphorylation, as previously reported (16, 29). The same effects were observed in SK-OV-3, MDA-MB-453, and HCT116 cells (Supplementary Fig. S6). These results suggest that a selective class I PI3K inhibitor has an advantage over mTORC1 and PI3K/mTOR inhibitors in that it overcomes mTORC1 inhibition-mediated Akt activation.
CH5132799 overcomes mTORC1 inhibition-mediated Akt activation and regrowth of xenograft tumor by long-term everolimus administration. A, BT-474 cells were treated with the indicated concentrations of CH5132799, everolimus, and BEZ235 for 24 hours. The cells were lysed and analyzed by Western blotting. B, mice bearing BT-474 tumors (n = 14) were orally administered 50 mg/kg of everolimus on a daily basis for 31 days and then randomized. After randomization, the mice were orally administered 50 mg/kg of everolimus (n = 4) and 12.5 mg/kg (n = 5), and 25 mg/kg (n = 5) of CH5132799 on a daily basis for 7 days. C, the vehicle-, everolimus-, and CH5132799-treated (25 mg/kg) tumors were resected at 4 hours after terminal administration in B, lysed, and analyzed by Western blotting.
To mimic clinical refractoriness to mTORC1 inhibitors, mice bearing BT-474 xenograft tumors were continuously treated with everolimus for 1 month until the tumors regrew (Fig. 5B). Then, we switched from everolimus to CH5132799 administration, leading to a remarkable regression in a dose-dependent manner of the tumors regrown after the long-term everolimus treatment. The regrowth did not come from unexpected reduction of everolimus exposure, because we did not find apparent differences between the exposure of the first dose and that after the long-term treatment (data not shown). The tumors were resected at the end of treatment and analyzed by Western blotting with respect to PI3K pathway inhibition. CH5132799 suppressed various effectors in the PI3K pathway, including Akt, FoxO1, S6K, S6, and 4E-BP1, whereas everolimus inhibited only phosphorylation of S6K and S6, both downstream effectors of mTORC1 (Fig. 5C). Consistent with our in vitro observations, everolimus also induced Akt activation in vivo, resulting in upregulation of FoxO1 phosphorylation. In particular, 4E-BP1 phosphorylation, which has been reported to be important in cell proliferation and survival as a key downstream effector of mTORC1 (31, 32), was inhibited by CH5132799 administration, but not by everolimus. Moreover, everolimus administration also induced phosphorylation of ERK, as previously reported (33), though CH5132799 had little effect on the induction of phosphorylation. Collectively, CH5132799 suppressed PI3K/mTOR signaling without activating Akt and showed potent antitumor activity against tumors regrown after long-term everolimus treatment with robust inhibition of the PI3K pathway.
The PI3K/Akt pathway is one of the most frequently deregulated pathways in common human cancers (10, 12, 34). Specifically, in breast cancer, PIK3CA mutation (∼27%), HER2 amplification (∼15%–30%), and PTEN deficiency (∼25%) are frequently reported to activate the PI3K pathway, leading to cell proliferation and survival. In ovarian (∼8%) and endometrial (∼24%) cancer, PIK3CA is also frequently mutated. LOH and mutation of PTEN often occur in prostate (∼30%) and endometrial (∼38%) cancer. It is known that activation of the mitogen-activated protein kinase pathway, another key signaling cascade including KRAS and BRAF mutations, is rare in these 4 tumor types except for low-grade ovarian cancer (23). In high-grade ovarian cancer, KRAS and BRAF mutations are rarely found (35). Therefore, these types of cancer are possibly addicted to the PI3K pathway and could be potential target segments for PI3K inhibitors.
Our in vitro experiments showed that CH5132799 was a selective class I PI3K inhibitor, with potent inhibitory activity against PI3Kα and its mutants (Table 1). Analyses by using a large panel of cancer cell lines revealed that CH5132799 had overall strong antiproliferative activity against breast, ovarian, prostate, and endometrial cancer cells in which the PI3K pathway is often activated, as previously mentioned (Fig. 2). In particular, cell lines harboring PIK3CA mutations showed significantly higher sensitivity in vitro and in vivo to CH5132799 than those without mutations, indicating that PIK3CA mutation is a CH5132799-sensitive factor (Figs. 2 and 3). Many groups have reported that clinically observed PIK3CA mutations promote cell proliferation and survival in vitro and in vivo (2, 6). In addition, oncogenic PIK3CA mutant–transfected MCF10A cells were sensitive to the classical PI3K inhibitor LY294002 as compared with WT PIK3CA transfectants, suggesting that the PIK3CA mutation causes PI3K addiction in cells (36). Therefore, higher sensitivity to CH5132799 in cancer cell lines harboring PIK3CA mutations can be explained by their addiction to PI3K. Amplification of HER2, which acts as an upstream regulator of PI3K, also seemed to be a factor that was sensitive to CH5132799 regardless of its coexistence with or without PIK3CA mutations. In contrast, KRAS mutant cell lines were relatively insensitive to CH5132799 in a manner similar to that of other PI3K inhibitors, whereas cell lines harboring both PIK3CA and KRAS mutations were sensitive. On the basis of these results, we theorize that the PIK3CA mutation is the primary predictive marker of CH5132799 sensitivity; moreover, the PIK3CA mutation could be a stratification marker that can predict which patients will benefit from CH5132799 therapy in clinical settings. Although several PI3K inhibitors, including PX-866 (37) and BEZ235 (38), which are in early-phase clinical trials and, more recently, the pan-PI3K inhibitor GDC-0941 (27, 39) have been reported to exhibit significant antiproliferative activity against cell lines harboring PIK3CA mutations, CH5132799 is the first PI3K inhibitor reported to possess statistically significant antitumor activity against cancer cells harboring PIK3CA mutations in large numbers of cancer cell lines spanning multiple tumor types. More recently, in addition to PI3Kα, the role of PI3Kβ in cancer has been studied by using genetically engineered mice, short-hairpin RNA, and chemical inhibitors (40–42). These studies suggest that tumors driven by PTEN deficiency are dependent on PI3Kβ rather than PI3Kα. Remarkably, CH5132799 also has PI3Kβ inhibitory activity, with an IC50 of 0.12 μmol/L (Table 1) and is therefore expected to exhibit antitumor activity against PTEN-deficient cancer. In fact, CH5132799 has shown growth inhibitory effects on some PTEN-deficient cancer cell lines in in vitro antiproliferative assays and strong tumor regression in a PTEN-deleted model in vivo (Figs. 2 and 3).
About 20% of HER2-positive breast cancer patients have a PIK3CA mutation, which has resulted in a trend toward shorter progression-free survival with trastuzumab-based therapy (43, 44). This insensitivity of HER2-positive breast cancer harboring the PIK3CA mutation can be explained by its resistance to trastuzumab-induced PI3K pathway inhibition because of constitutive PI3K activity (28). When we combined CH5132799 with trastuzumab in the xenograft model harboring both HER2 amplification and the PIK3CA mutation, CH5132799 not only overcame trastuzumab insensitivity but also showed prominent synergistic antitumor activity leading to disappearance of the tumor (Fig. 4). Thus, combining CH5132799 with trastuzumab-based therapy is a promising strategy for providing clinical benefits to trastuzumab-insensitive patients.
Precise regulation of intracellular signaling pathways by feedback loops is an emerging topic in cell biology and has been vigorously studied (17). The S6K-mediated negative feedback loop in the PI3K pathway is one of the well-characterized feedback systems (18). As previously reported, the mTORC1 inhibitor everolimus enhanced Akt phosphorylation accompanied by S6K inhibition, both in vitro and in vivo (Fig. 5). Moreover, the PI3K/mTOR dual inhibitor BEZ235 also activated Akt at a low dose but inhibited Akt at high doses, consistent with similar observations by other groups (29, 30). At dosage levels that activated Akt, S6K phosphorylation was completely inhibited. These data suggest that BEZ235 has more potent mTOR inhibitory activity than PI3K inhibitory activity, resulting in S6K inhibition–mediated Akt activation at particular doses. In contrast, the selective class I PI3K inhibitor CH5132799 did not enhance Akt phosphorylation at any dose that inhibited S6K phosphorylation. As shown in Figure 5C, CH5132799 inhibited a wide variety of effectors in the pathway compared with everolimus because PI3K is located upstream of mTORC1. In addition, we showed that phosphorylation of 4E-BP1, which is another key substrate of mTOR, was efficiently inhibited by CH5132799 but not by everolimus treatment in vitro and in vivo. Consistently, rapamycin-insensitive mTORC1 has been suggested to be responsible for 4E-BP1 phosphorylation by several studies by using mTORC1/2 inhibitors (16, 45). Dowling and colleagues reported that, among the downstream effectors of the PI3K/mTOR pathway, 4E-BP is important in cell proliferation, and S6K is critical for cell size regulation but not for cell proliferation in mammalian cells (31). 4E-BP is also known to function as a tumor suppressor gene (46). Therefore, CH5132799 has advantages over mTORC1 inhibitors in the robust inhibition of PI3K/Akt/mTOR signaling in 2 ways: (i) avoiding S6K inhibition–mediated Akt activation and (ii) suppressing 4E-BP1 phosphorylation. These characteristics could lead to remarkable regression of tumors that have regrown after long-term everolimus treatment.
Recent developments in detection of genetic alterations enable patient stratification in clinical trials by utilizing predictive biomarkers based on preclinical evidence (47). Our preclinical study indicates that CH5132799 is an effective therapy against human cancer cells harboring PIK3CA mutations. Clinical trials designed to clarify the value of the PIK3CA mutation for predicting clinical efficacy of CH5132799 are eagerly awaited.
Disclosure of Potential Conflicts of Interest
All of the authors are employees of Chugai Pharmaceutical Co., Ltd.
We thank Dr. Neal Rosen (Memorial Sloan-Kettering Cancer Center, NY) and Dr. José Baselga (Vall d'Hebron University Hospital, Barcelona, Spain) for helpful discussion. We also thank Maiko Izawa, Kurisu Honda, Masato Motiduki, Sachiya Yamamoto, Yumiko Hashimoto, Onoda Hidemasa, Takeshi Kuge, Eriko Yasutomi, and Natsuko Furuya for their technical support. We are grateful to Dr. Junichi Kurebayashi for providing KPL-4 cells.
The costs of publication of this article were defrayed in part by the payment of page charges. This article must therefore be hereby marked advertisement in accordance with 18 U.S.C. Section 1734 solely to indicate this fact.
Note: Supplementary data for this article are available at Clinical Cancer Research Online (http://clincancerres.aacrjournals.org/).
Received October 28, 2010.
Revision received December 21, 2010.
Accepted December 23, 2010.
©2011 American Association for Cancer Research.
Vanhaesebroeck B,
Guillermet-Guibert J,
Graupera M,
Bilanges B
. The emerging mechanisms of isoform-specific PI3K signalling. Nat Rev Mol Cell Biol 2010;11:329–41.
Samuels Y,
Wang Z,
Bardelli A,
Silliman N,
Ptak J,
Szabo S,
High frequency of mutations of the PIK3CA gene in human cancers. Science 2004;304:554.
Bader AG,
Kang S,
Zhao L,
Vogt PK
. Oncogenic PI3K deregulates transcription and translation. Nat Rev Cancer 2005;5:921–9.
Saal LH,
Holm K,
Maurer M,
Memeo L,
Su T,
Wang X,
PIK3CA mutations correlate with hormone receptors, node metastasis, and ERBB2, and are mutually exclusive with PTEN loss in human breast carcinoma. Cancer Res 2005;65:2554–9.
Oda K,
Okada J,
Timmerman L,
Rodriguez-Viciana P,
Stokoe D,
Shoji K,
PIK3CA cooperates with other phosphatidylinositol 3′-kinase pathway mutations to effect oncogenic transformation. Cancer Res 2008;68:8127–36.
Ikenoue T,
Kanai F,
Hikiba Y,
Obata T,
Tanaka Y,
Imamura J,
Functional analysis of PIK3CA gene mutations in human colorectal cancer. Cancer Res 2005;65:4562–7.
Miled N,
Yan Y,
Hon WC,
Perisic O,
Zvelebil M,
Inbar Y,
Mechanism of two classes of cancer mutations in the phosphoinositide 3-kinase catalytic subunit. Science 2007;317:239–42.
. Helical domain and kinase domain mutations in p110alpha of phosphatidylinositol 3-kinase induce gain of function by different mechanisms. Proc Natl Acad Sci U S A 2008;105:2652–7.
Mandelker D,
Gabelli SB,
Schmidt-Kittler O,
Zhu J,
Cheong I,
Huang CH,
A frequent kinase domain mutation that changes the interaction between PI3Kalpha and the membrane. Proc Natl Acad Sci U S A 2009;106:16996–7001.
Liu P,
Cheng H,
Roberts TM,
Zhao JJ
. Targeting the phosphoinositide 3-kinase pathway in cancer. Nat Rev Drug Discov 2009;8:627–44.
Cully M,
You H,
Levine AJ,
Mak TW
. Beyond PTEN mutations: the PI3K pathway as an integrator of multiple inputs during tumorigenesis. Nat Rev Cancer 2006;6:184–92.
Yuan TL,
Cantley LC
. PI3K pathway alterations in cancer: variations on a theme. Oncogene 2008;27:5497–510.
Maira SM,
Stauffer F,
Brueggen J,
Furet P,
Schnell C,
Fritsch C,
Identification and characterization of NVP-BEZ235, a new orally available dual phosphatidylinositol 3-kinase/mammalian target of rapamycin inhibitor with potent in vivo antitumor activity. Mol Cancer Ther 2008;7:1851–63.
Folkes AJ,
Ahmadi K,
Alderton WK,
Alix S,
Baker SJ,
Box G,
The identification of 2-(1H-indazol-4-yl)-6-(4-methanesulfonyl-piperazin-1-ylmethyl)-4-morpholin -4-yl-thieno[3,2-d]pyrimidine (GDC-0941) as a potent, selective, orally bioavailable inhibitor of class I PI3 kinase for the treatment of cancer. J Med Chem 2008;51:5522–32.
Hirai H,
Sootome H,
Nakatsuru Y,
Miyama K,
Taguchi S,
Tsujioka K,
MK-2206, an allosteric Akt inhibitor, enhances antitumor efficacy by standard chemotherapeutic agents or molecular targeted drugs in vitro and in vivo. Mol Cancer Ther 2010;9:1956–67.
Chresta CM,
Davies BR,
Hickson I,
Harding T,
Cosulich S,
Critchlow SE,
AZD8055 is a potent, selective, and orally bioavailable ATP-competitive mammalian target of rapamycin kinase inhibitor with in vitro and in vivo antitumor activity. Cancer Res 2010;70:288–98.
Sun SY,
Rosenberg LM,
Zhou Z,
Yue P,
Fu H,
Activation of Akt and eIF4E survival pathways by rapamycin-mediated mammalian target of rapamycin inhibition. Cancer Res 2005;65:7052–8.
O'Reilly KE,
Rojo F,
She QB,
Solit D,
Mills GB,
Smith D,
mTOR inhibition induces upstream receptor tyrosine kinase signaling and activates Akt. Cancer Res 2006;66:1500–8.
Ohwada J,
Ebiike H,
Kawada H,
Tsukazaki M,
Nakamura M,
Miyazaki T,
. Discovery and biological activity of a novel class I PI3K inhibitor, CH5132799. Bioorg Med Chem Lett 2011;21:1767–72.
Kurebayashi J,
Otsuki T,
Tang CK,
Kurosumi M,
Yamamoto S,
Tanaka K,
Isolation and characterization of a new human breast cancer cell line, KPL-4, expressing the Erb B family receptors and interleukin-6. Br J Cancer 1999;79:707–17.
Ishikura N,
Kawata H,
Nishimoto A,
Nakamura R,
Ishii N,
Aoki Y
. Establishment and characterization of an androgen receptor-dependent, androgen-independent human prostate cancer cell line, LNCaP-CS10. Prostate 2010;70:457–66.
Watanabe M,
Tsunenari T,
. Prolonged treatment with bicalutamide induces androgen receptor overexpression and androgen hypersensitivity. Prostate 2010;70:745–54.
Sebolt-Leopold JS,
Herrera R
. Targeting the mitogen-activated protein kinase cascade to treat cancer. Nat Rev Cancer 2004;4:937–47.
Hollestelle A,
Elstrodt F,
Nagel JH,
Kallemeijn WW,
Schutte M
. Phosphatidylinositol-3-OH kinase or RAS pathway mutations in human breast cancer cell lines. Mol Cancer Res 2007;5:195–201.
Hu X,
Stern HM,
Ge L,
O'Brien C,
Haydu L,
Honchell CD,
Genetic alterations and oncogenic pathways associated with breast cancer subtypes. Mol Cancer Res 2009;7:511–22.
Cavet G,
Pandita A,
Mohan S,
Functional genomics identifies ABCC3 as a mediator of taxane resistance in HER2-amplified breast cancer. Cancer Res 2008;68:5380–9.
Wallin JJ,
Sampath D,
GuhaThakurta D,
Savage H,
Punnoose EA,
Predictive biomarkers of sensitivity to the phosphatidylinositol 3′ kinase inhibitor GDC-0941 in breast cancer preclinical models. Clin Cancer Res 2010;16:3670–83.
Junttila TT,
Akita RW,
Parsons K,
Fields C,
Lewis Phillips GD,
Friedman LS,
Ligand-independent HER2/HER3/PI3K complex is disrupted by trastuzumab and is effectively inhibited by the PI3K inhibitor GDC-0941. Cancer Cell 2009;15:429–40.
Serra V,
Markman B,
Scaltriti M,
Eichhorn PJ,
Valero V,
Guzman M,
NVP-BEZ235, a dual PI3K/mTOR inhibitor, prevents PI3K signaling and inhibits the growth of cancer cells with activating PI3K mutations. Cancer Res 2008;68:8022–30.
Zitzmann K,
Ruden J,
Brand S,
Goke B,
Lichtl J,
Spottl G,
Compensatory activation of Akt in response to mTOR and Raf inhibitors–a rationale for dual-targeted therapy approaches in neuroendocrine tumor disease. Cancer Lett 2010;295:100–9.
Dowling RJ,
Topisirovic I,
Alain T,
Bidinosti M,
Fonseca BD,
Petroulakis E,
mTORC1-mediated cell proliferation, but not cell growth, controlled by the 4E-BPs. Science 2010;328:1172–6.
Halilovic E,
Ye Q,
Zhen W,
Shirasawa S,
Sasazuki T,
4E-BP1 is a key effector of the oncogenic activation of the AKT and ERK signaling pathways that integrates their function in tumors. Cancer Cell 2010;18:39–51.
Carracedo A,
Teruya-Feldstein J,
Salmena L,
Alimonti A,
Inhibition of mTORC1 leads to MAPK pathway activation through a PI3K-dependent feedback loop in human cancer. J Clin Invest 2008;118:3065–74.
Yap TA,
Carden CP,
Kaye SB
. Beyond chemotherapy: targeted therapies in ovarian cancer. Nat Rev Cancer 2009;9:167–81.
Singer G,
Oldt R 3rd,
Cohen Y,
Wang BG,
Sidransky D,
Kurman RJ,
Mutations in BRAF and KRAS characterize the development of low-grade ovarian serous carcinoma. J Natl Cancer Inst 2003;95:484–6.
Zhang H,
Liu G,
Dziubinski M,
Yang Z,
Ethier SP,
Wu G
. Comprehensive analysis of oncogenic effects of PIK3CA mutations in human mammary epithelial cells. Breast Cancer Res Treat 2008;112:217–27.
Ihle NT,
Lemos R Jr.,
Wipf P,
Yacoub A,
Mitchell C,
Siwak D
et al. Mutations in the phosphatidylinositol-3-kinase pathway predict for antitumor activity of the inhibitor PX-866 whereas oncogenic Ras is a dominant predictor for resistance. Cancer Res 2009;69:143–50.
Brachmann SM,
Hofmann I,
Wee S,
Lane H,
Specific apoptosis induction by the dual PI3K/mTor inhibitor NVP-BEZ235 in HER2 amplified and PIK3CA mutant breast cancer cells. Proc Natl Acad Sci U S A 2009;106:22299–304.
Wagner AJ,
Von Hoff DH,
LoRusso PM,
Tibes R,
Mazina KE,
Ware JA,
A first-in-human phase I study to evaluate the pan-PI3K inhibitor GDC-0941 administered QD or BID in patients with advanced solid tumors. J Clin Oncol 2009;27:3501.
Jia S,
Liu Z,
Zhang S,
Zhang L,
Lee SH,
Essential roles of PI(3)K-p110beta in cell growth, metabolism and tumorigenesis. Nature 2008;454:776–9.
Torbett NE,
Luna-Moran A,
Knight ZA,
Houk A,
Moasser M,
Weiss W,
A chemical screen in diverse breast cancer cell lines reveals genetic enhancers and suppressors of sensitivity to PI3K isoform-selective inhibition. Biochem J 2008;415:97–110.
Wiederschain D,
Loo A,
Miller C,
deBeaumont R,
PTEN-deficient cancers depend on PIK3CB. Proc Natl Acad Sci U S A 2008;105:13057–62.
Stemke-Hale K,
Gonzalez-Angulo AM,
Lluch A,
Neve RM,
Kuo WL,
Davies M,
An integrative genomic and proteomic analysis of PIK3CA, PTEN, and AKT mutations in breast cancer. Cancer Res 2008;68:6084–91.
Berns K,
Horlings HM,
Hennessy BT,
Madiredjo M,
Hijmans EM,
Beelen K,
A functional genetic approach identifies the PI3K pathway as a major determinant of trastuzumab resistance in breast cancer. Cancer Cell 2007;12:395–402.
Carayol N,
Vakana E,
Sassano A,
Kaur S,
Goussetis DJ,
Glaser H,
Critical roles for mTORC2- and rapamycin-insensitive mTORC1-complexes in growth and survival of BCR-ABL-expressing leukemic cells. Proc Natl Acad Sci U S A 2010;107:12469–74.
Kim YY,
Von Weymarn L,
Larsson O,
Fan D,
Underwood JM,
Peterson MS,
Eukaryotic initiation factor 4E binding protein family of proteins: sentinels at a translational control checkpoint in lung tumor defense. Cancer Res 2009;69:8455–62.
Banerji U,
Kaye SB,
Workman P,
de Bono JS
. From darkness to light with biomarkers in early clinical trials of cancer drugs. Clin Pharmacol Ther 2009;85:131–3.
You are going to email the following The Selective Class I PI3K Inhibitor CH5132799 Targets Human Cancers Harboring Oncogenic PIK3CA Mutations
Clin Cancer Res May 15 2011 (17) (10) 3272-3281; DOI: 10.1158/1078-0432.CCR-10-2882
Survivin mAbs Inhibit Tumor Growth
B7-H3 Negatively Modulates Cancer Immunity
RB1 and TYMP as Biomarkers of Capecitabine Response in TNBC
Show more Cancer Therapy: Preclinical


Reading the print industry press, you'd think the whole market was going digital. And so it is. But while big print companies are spending millions investigating computer-to-plate systems to work with their long-run offset litho presses, it's the emergence of short-run all digital presses which promises to turn the print design industry upside down.
For designers at large, a digital press gives the same kind of service that any print-on-demand system offers. If you have ever taken a Zip disk into a bureau and walked out with 15 wide-format posters, you already understand. However, a digital press is not an inkjet device, and, typically, uses toners instead of inks, and images each printout on the fly instead of using a plate. It's an almighty digital colour photocopier, if you like.
This is the second benefit of digital printing: flexibility. FE Burman managing director Michael Burman admits that some clients will occasionally ask for a single-copy print run, simply to test paper stocks or try out a visual idea. In effect, the digital press becomes its own digital "wet" proofer. Similarly, a product line which sold well for a client can be reprinted quickly. Or a job which doesn't look right on the press can be stopped and fixed after the first couple of prints, instead of waiting for the first 10 000 to shoot by.
Most interesting, is that many digital presses are being operated by repro houses and output bureaux, not by traditional print shops. In other words, they are being run by companies with a hard-earned expertise in PostScript. FE Burman itself is spending £2.5m on developing its premises to accommodate a second digital press, this time a Scitex 74 Karat, a 2540dpi machine capable of halftone line screens of over 200lpi, based on the KBA-Planeta print engine.
For designers looking at digital print for the first time, the repro-house-turned-printer can make life a lot easier, as they can submit files for output in the same way as they have always done for filmsetting. Just put your Photoshop, QuarkXPress, FreeHand and font files on a disk, or send them off from your ISDN, Vio or Wam!Net line – nothing has changed. "The digital press is just another Chooser device on our Macs," says Burman.
It's not all roses, of course. Digital print is not a totally seamless replacement for short-run offset litho for a number of reasons to do with quality. Because the printable image is being created over and over again on the drum for each copy, speed and reliability issues arise from the way toner is fed into the system. To date, digital presses find large spot colour coverage too great a challenge to reproduce faithfully over multiple copies. Quite literally, they can't feed the required quantity of toner to the drum fast enough.
Davis' solution, other than avoiding saturated colours altogether, is to apply a slight noise effect which takes the edge off the mottling. It's a workaround which you can spot under a magnifying glass, but which won't generally be noticed. Pace Setters produces a large quantity of posters and point-of-sale material to prove the point. One of its key customers is the huge west country chain of travel agents, Bakers Dolphin.
Another problem to be wary of is "bearding", a blurring which can occur when a design uses fine white-out text on large saturated backgrounds. When the text drops below a certain point size, the edges of font outlines can look soft and even start to fill in at the serifs. There's no obvious workaround here, other than to think carefully about your page design and run some trials on the press itself.
Contrast this with the vast quality improvements seen in the past couple of years. In-line calendering has pretty much put an end to the distinctive matt look of the toners, and the sheer variety of stocks supported by the latest presses is impressive. Much of Pace Setters' work uses glossy stock, for example, and there are options for banner output, polyester materials, recycled grades (some having been approved by The Body Shop), tamper-proof security paper and thermal transfer sheets. Digital toners generally offer a greater process gamut than litho inks, and presses such as Indigo's UltraStream support up to three additional special colours.
The ability to run trials at the virtual drop of a hat leads to another benefit of digital printing: variable output. Because each print is etched on to the drum individually, every instance can effectively be made different. And it's this variable printing opportunity which may have the greatest impact on the way designers work, certainly in marketing departments. Customising a brochure or mailer need no longer be restricted to a welcome message over a blank area of a preprinted sheet, but concern the actual layout and content of the whole job.
A good example comes from print and design house Shere Arts, which has an unusual contract with the Air Miles operation. An Air Miles sales rep talks to a potential customer and enters various personal details into a database as they talk. This database is downloaded to Shere Arts every day at lunchtime, processed into personalised response brochures for immediate printing on two IBM InfoColor 70s, and mailed out to arrive the next day. Not only is the text content relevant to the profile and wishes of the customer, but even the images and colours used on the brochure are varied automatically to suit. And the customer profile is different for every single brochure printed.
OK, so it's a marketing miracle, but it can mean some heavy rethinking on the part of the designer. Instead of producing one brochure, you need to come up with a whole host of alternative layouts which may be generated randomly on the digital press, but must be guaranteed to work in every iteration. Shere Arts managing director Martin Warner admits that this radical new approach to direct mail design leaves a lot of designers cold: "There's not even a final proof, nothing to sign off as such." You have to think in terms of scenarios, he adds, in which every printed sheet is a context-sensitive product.
It's increasingly likely that marketing directors will be sold the variable digital print idea whether designers like it or not, and you need to get your head around it soon. Digital presses and variable output also open up the potential for kiosk applications, where you may be commissioned to produce designs for anything, from blank business cards to database-linked in-store catalogues, for immediate printing.
One issue the jury is still out on is colour management. In theory, you should be able to profile a digital press along with your in-house proofers, scanners and monitors. Back in the real world, you won't want to throw away your hard-copy proofs just yet: even if they are digital proofs, the digital press operator will still need something to work by. At the end of the day, digital presses are just big PostScript output devices – and we all know how reliable they can be.


text:
5250 Java Applet Security Features
Product: Strategi - BusinessLink/WEB
Modified Date:
The applet provided with BusinessLink/WEB and Strategi provides the highest level of security available, not only through data encryption but also by implementing a multiple-level password and "passphrase" system (for additional encryption security, the passphrase can contain up to 40 characters, such as a complete sentence). All of this is designed to ensure that only the users you want to interact with your iSeries 400 will actually be able to send to and receive data from it without transaction compromise.
All Java traffic is scrambled (even if SSL is not implemented), so anyone watching the TCP/IP packets will see only random garbage, even between otherwise identical emulation sessions. Once the Java user and passphrase have been accepted, the passphrase is used to further encrypt the data; even someone who has analyzed the applet code will be unable to retrieve the actual data. The strength of the security is directly related to the length of passphrase used, with at least 20-30 characters recommended; the longer the passphrase, the stronger the security.
This, then, provides a much higher level of security than the 8 - 10 character passwords commonly used by others. The longer the encryption key, the harder it is to crack the passphrase and, thus, the greater the security. Please note that we're talking here not about an encryption level of 40 to 50 bits, but 40 to 50 bytes.
Secure Sockets Layer
SSL encryption, as described in the network security overview bulletin, controls access to your website HTML pages, and always begins from the homepage. According to Verisign, Inc. (one of the main providers of SSL certification), every page under a SSL-secured website is secured, but only if the URL begins with the domain name of that website. Loading the Java applet from a SSL-secured page adds SSL to the already encrypted data stream thereby increasing the level of security.
SSL certification cannot be given to IP addresses, as they cannot be verified as being "owned" by a particular domain. For example, if the SSL certification were given to your IP address, and you changed ISP's, or your ISP moved you to a different IP address, the SSL certification for the webserver's previous (external) IP address would immediately become worthless.
However, if a company has invested in a domain name, such as "www.businesslink.com", the company would be unlikely to change it, so it is much more secure to give the SSL certification to the domain name.
Enforcing SSL Security in Loading the Strategi Applet
While you might instruct your customers and employees to access Strategi via SSL-secured "https://", some may at times forget and just use "http://", which does not use SSL; clicking on the "Load Strategi" applet link will load and run Strategi, but not in SSL-secured mode.
There is a way, however, to enforce SSL security in loading the Strategi applet. In /homepage.htm, change "/java.htm" to "https://www.xxxxxxx.com/java.htm". This ensures the Strategi applet-loading page (and, thus, the Strategi applet) are loaded securely through SSL, even if someone types "http://…/homepage.htm" instead of "https://…/homepage.htm".
** End of Technical Support Bulletin **