public static function deserialize($json)
    {
        $data = json_decode($json);

        $template = new WidevineMessage();
        foreach ($data as $key => $value) {
            if ($key == 'content_key_specs') {
                $specs = [];
                foreach ($value as $child) {
                    $spec = new ContentKeySpecs();
                    foreach ($child as $cKey => $cValue) {
                        if ($cKey == 'required_output_protection') {
                            $rop = new RequiredOutputProtection();
                            if (isset($cValue->hdcp)) {
                                $rop->hdcp = $cValue->hdcp;
                            }
                            $spec->{$cKey} = $rop;
                        } else {
                            $spec->{$cKey} = $cValue;
                        }
                    }
                    $specs[] = $spec;
                }
                $template->content_key_specs = $specs;
            } else {
                $template->{$key} = $value;
            }
        }

        return $template;
    }