2012-11-21 14:29:29 +00:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2012 Avionic Design GmbH
|
|
|
|
*
|
2014-10-08 09:14:34 +00:00
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
|
|
* to deal in the Software without restriction, including without limitation
|
|
|
|
* the rights to use, copy, modify, merge, publish, distribute, sub license,
|
|
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice (including the
|
|
|
|
* next paragraph) shall be included in all copies or substantial portions
|
|
|
|
* of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
|
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
|
|
* DEALINGS IN THE SOFTWARE.
|
2012-11-21 14:29:29 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __LINUX_HDMI_H_
|
|
|
|
#define __LINUX_HDMI_H_
|
|
|
|
|
|
|
|
#include <linux/types.h>
|
2014-12-19 12:14:21 +00:00
|
|
|
#include <linux/device.h>
|
2012-11-21 14:29:29 +00:00
|
|
|
|
2019-01-10 21:14:36 +00:00
|
|
|
enum hdmi_packet_type {
|
|
|
|
HDMI_PACKET_TYPE_NULL = 0x00,
|
|
|
|
HDMI_PACKET_TYPE_AUDIO_CLOCK_REGEN = 0x01,
|
|
|
|
HDMI_PACKET_TYPE_AUDIO_SAMPLE = 0x02,
|
|
|
|
HDMI_PACKET_TYPE_GENERAL_CONTROL = 0x03,
|
|
|
|
HDMI_PACKET_TYPE_ACP = 0x04,
|
|
|
|
HDMI_PACKET_TYPE_ISRC1 = 0x05,
|
|
|
|
HDMI_PACKET_TYPE_ISRC2 = 0x06,
|
|
|
|
HDMI_PACKET_TYPE_ONE_BIT_AUDIO_SAMPLE = 0x07,
|
|
|
|
HDMI_PACKET_TYPE_DST_AUDIO = 0x08,
|
|
|
|
HDMI_PACKET_TYPE_HBR_AUDIO_STREAM = 0x09,
|
|
|
|
HDMI_PACKET_TYPE_GAMUT_METADATA = 0x0a,
|
|
|
|
/* + enum hdmi_infoframe_type */
|
|
|
|
};
|
|
|
|
|
2012-11-21 14:29:29 +00:00
|
|
|
enum hdmi_infoframe_type {
|
|
|
|
HDMI_INFOFRAME_TYPE_VENDOR = 0x81,
|
|
|
|
HDMI_INFOFRAME_TYPE_AVI = 0x82,
|
|
|
|
HDMI_INFOFRAME_TYPE_SPD = 0x83,
|
|
|
|
HDMI_INFOFRAME_TYPE_AUDIO = 0x84,
|
2019-05-16 14:10:09 +00:00
|
|
|
HDMI_INFOFRAME_TYPE_DRM = 0x87,
|
2012-11-21 14:29:29 +00:00
|
|
|
};
|
|
|
|
|
2013-08-19 15:59:05 +00:00
|
|
|
#define HDMI_IEEE_OUI 0x000c03
|
2017-03-13 11:24:00 +00:00
|
|
|
#define HDMI_FORUM_IEEE_OUI 0xc45dd8
|
2012-11-21 14:29:29 +00:00
|
|
|
#define HDMI_INFOFRAME_HEADER_SIZE 4
|
|
|
|
#define HDMI_AVI_INFOFRAME_SIZE 13
|
|
|
|
#define HDMI_SPD_INFOFRAME_SIZE 25
|
|
|
|
#define HDMI_AUDIO_INFOFRAME_SIZE 10
|
2019-05-16 14:10:09 +00:00
|
|
|
#define HDMI_DRM_INFOFRAME_SIZE 26
|
2020-04-27 08:05:23 +00:00
|
|
|
#define HDMI_VENDOR_INFOFRAME_SIZE 4
|
2012-11-21 14:29:29 +00:00
|
|
|
|
2013-08-06 19:32:15 +00:00
|
|
|
#define HDMI_INFOFRAME_SIZE(type) \
|
|
|
|
(HDMI_INFOFRAME_HEADER_SIZE + HDMI_ ## type ## _INFOFRAME_SIZE)
|
|
|
|
|
2013-08-06 19:32:14 +00:00
|
|
|
struct hdmi_any_infoframe {
|
|
|
|
enum hdmi_infoframe_type type;
|
|
|
|
unsigned char version;
|
|
|
|
unsigned char length;
|
|
|
|
};
|
|
|
|
|
2012-11-21 14:29:29 +00:00
|
|
|
enum hdmi_colorspace {
|
|
|
|
HDMI_COLORSPACE_RGB,
|
|
|
|
HDMI_COLORSPACE_YUV422,
|
|
|
|
HDMI_COLORSPACE_YUV444,
|
2014-12-19 12:14:20 +00:00
|
|
|
HDMI_COLORSPACE_YUV420,
|
|
|
|
HDMI_COLORSPACE_RESERVED4,
|
|
|
|
HDMI_COLORSPACE_RESERVED5,
|
|
|
|
HDMI_COLORSPACE_RESERVED6,
|
|
|
|
HDMI_COLORSPACE_IDO_DEFINED,
|
2012-11-21 14:29:29 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_scan_mode {
|
|
|
|
HDMI_SCAN_MODE_NONE,
|
|
|
|
HDMI_SCAN_MODE_OVERSCAN,
|
|
|
|
HDMI_SCAN_MODE_UNDERSCAN,
|
2014-12-19 12:14:20 +00:00
|
|
|
HDMI_SCAN_MODE_RESERVED,
|
2012-11-21 14:29:29 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_colorimetry {
|
|
|
|
HDMI_COLORIMETRY_NONE,
|
|
|
|
HDMI_COLORIMETRY_ITU_601,
|
|
|
|
HDMI_COLORIMETRY_ITU_709,
|
|
|
|
HDMI_COLORIMETRY_EXTENDED,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_picture_aspect {
|
|
|
|
HDMI_PICTURE_ASPECT_NONE,
|
|
|
|
HDMI_PICTURE_ASPECT_4_3,
|
|
|
|
HDMI_PICTURE_ASPECT_16_9,
|
2016-10-17 12:04:39 +00:00
|
|
|
HDMI_PICTURE_ASPECT_64_27,
|
|
|
|
HDMI_PICTURE_ASPECT_256_135,
|
2014-12-19 12:14:20 +00:00
|
|
|
HDMI_PICTURE_ASPECT_RESERVED,
|
2012-11-21 14:29:29 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_active_aspect {
|
|
|
|
HDMI_ACTIVE_ASPECT_16_9_TOP = 2,
|
|
|
|
HDMI_ACTIVE_ASPECT_14_9_TOP = 3,
|
|
|
|
HDMI_ACTIVE_ASPECT_16_9_CENTER = 4,
|
|
|
|
HDMI_ACTIVE_ASPECT_PICTURE = 8,
|
|
|
|
HDMI_ACTIVE_ASPECT_4_3 = 9,
|
|
|
|
HDMI_ACTIVE_ASPECT_16_9 = 10,
|
|
|
|
HDMI_ACTIVE_ASPECT_14_9 = 11,
|
|
|
|
HDMI_ACTIVE_ASPECT_4_3_SP_14_9 = 13,
|
|
|
|
HDMI_ACTIVE_ASPECT_16_9_SP_14_9 = 14,
|
|
|
|
HDMI_ACTIVE_ASPECT_16_9_SP_4_3 = 15,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_extended_colorimetry {
|
|
|
|
HDMI_EXTENDED_COLORIMETRY_XV_YCC_601,
|
|
|
|
HDMI_EXTENDED_COLORIMETRY_XV_YCC_709,
|
|
|
|
HDMI_EXTENDED_COLORIMETRY_S_YCC_601,
|
2018-09-13 11:47:29 +00:00
|
|
|
HDMI_EXTENDED_COLORIMETRY_OPYCC_601,
|
|
|
|
HDMI_EXTENDED_COLORIMETRY_OPRGB,
|
2014-12-19 12:14:20 +00:00
|
|
|
|
|
|
|
/* The following EC values are only defined in CEA-861-F. */
|
|
|
|
HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM,
|
|
|
|
HDMI_EXTENDED_COLORIMETRY_BT2020,
|
|
|
|
HDMI_EXTENDED_COLORIMETRY_RESERVED,
|
2012-11-21 14:29:29 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_quantization_range {
|
|
|
|
HDMI_QUANTIZATION_RANGE_DEFAULT,
|
|
|
|
HDMI_QUANTIZATION_RANGE_LIMITED,
|
|
|
|
HDMI_QUANTIZATION_RANGE_FULL,
|
2014-12-19 12:14:20 +00:00
|
|
|
HDMI_QUANTIZATION_RANGE_RESERVED,
|
2012-11-21 14:29:29 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* non-uniform picture scaling */
|
|
|
|
enum hdmi_nups {
|
|
|
|
HDMI_NUPS_UNKNOWN,
|
|
|
|
HDMI_NUPS_HORIZONTAL,
|
|
|
|
HDMI_NUPS_VERTICAL,
|
|
|
|
HDMI_NUPS_BOTH,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_ycc_quantization_range {
|
|
|
|
HDMI_YCC_QUANTIZATION_RANGE_LIMITED,
|
|
|
|
HDMI_YCC_QUANTIZATION_RANGE_FULL,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_content_type {
|
2014-12-19 12:14:20 +00:00
|
|
|
HDMI_CONTENT_TYPE_GRAPHICS,
|
2012-11-21 14:29:29 +00:00
|
|
|
HDMI_CONTENT_TYPE_PHOTO,
|
|
|
|
HDMI_CONTENT_TYPE_CINEMA,
|
|
|
|
HDMI_CONTENT_TYPE_GAME,
|
|
|
|
};
|
|
|
|
|
2019-05-16 14:10:06 +00:00
|
|
|
enum hdmi_metadata_type {
|
2021-01-24 04:40:10 +00:00
|
|
|
HDMI_STATIC_METADATA_TYPE1 = 0,
|
2019-05-16 14:10:06 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_eotf {
|
|
|
|
HDMI_EOTF_TRADITIONAL_GAMMA_SDR,
|
|
|
|
HDMI_EOTF_TRADITIONAL_GAMMA_HDR,
|
|
|
|
HDMI_EOTF_SMPTE_ST2084,
|
2019-05-16 14:10:12 +00:00
|
|
|
HDMI_EOTF_BT_2100_HLG,
|
2019-05-16 14:10:06 +00:00
|
|
|
};
|
|
|
|
|
2012-11-21 14:29:29 +00:00
|
|
|
struct hdmi_avi_infoframe {
|
|
|
|
enum hdmi_infoframe_type type;
|
|
|
|
unsigned char version;
|
|
|
|
unsigned char length;
|
|
|
|
enum hdmi_colorspace colorspace;
|
|
|
|
enum hdmi_scan_mode scan_mode;
|
|
|
|
enum hdmi_colorimetry colorimetry;
|
|
|
|
enum hdmi_picture_aspect picture_aspect;
|
|
|
|
enum hdmi_active_aspect active_aspect;
|
|
|
|
bool itc;
|
|
|
|
enum hdmi_extended_colorimetry extended_colorimetry;
|
|
|
|
enum hdmi_quantization_range quantization_range;
|
|
|
|
enum hdmi_nups nups;
|
|
|
|
unsigned char video_code;
|
|
|
|
enum hdmi_ycc_quantization_range ycc_quantization_range;
|
|
|
|
enum hdmi_content_type content_type;
|
|
|
|
unsigned char pixel_repeat;
|
|
|
|
unsigned short top_bar;
|
|
|
|
unsigned short bottom_bar;
|
|
|
|
unsigned short left_bar;
|
|
|
|
unsigned short right_bar;
|
|
|
|
};
|
|
|
|
|
2019-05-16 14:10:09 +00:00
|
|
|
/* DRM Infoframe as per CTA 861.G spec */
|
|
|
|
struct hdmi_drm_infoframe {
|
|
|
|
enum hdmi_infoframe_type type;
|
|
|
|
unsigned char version;
|
|
|
|
unsigned char length;
|
|
|
|
enum hdmi_eotf eotf;
|
|
|
|
enum hdmi_metadata_type metadata_type;
|
|
|
|
struct {
|
|
|
|
u16 x, y;
|
|
|
|
} display_primaries[3];
|
|
|
|
struct {
|
|
|
|
u16 x, y;
|
|
|
|
} white_point;
|
|
|
|
u16 max_display_mastering_luminance;
|
|
|
|
u16 min_display_mastering_luminance;
|
|
|
|
u16 max_cll;
|
|
|
|
u16 max_fall;
|
|
|
|
};
|
|
|
|
|
2020-02-26 11:24:21 +00:00
|
|
|
void hdmi_avi_infoframe_init(struct hdmi_avi_infoframe *frame);
|
2012-11-21 14:29:29 +00:00
|
|
|
ssize_t hdmi_avi_infoframe_pack(struct hdmi_avi_infoframe *frame, void *buffer,
|
|
|
|
size_t size);
|
2018-09-21 14:33:32 +00:00
|
|
|
ssize_t hdmi_avi_infoframe_pack_only(const struct hdmi_avi_infoframe *frame,
|
|
|
|
void *buffer, size_t size);
|
|
|
|
int hdmi_avi_infoframe_check(struct hdmi_avi_infoframe *frame);
|
2019-05-16 14:10:09 +00:00
|
|
|
int hdmi_drm_infoframe_init(struct hdmi_drm_infoframe *frame);
|
|
|
|
ssize_t hdmi_drm_infoframe_pack(struct hdmi_drm_infoframe *frame, void *buffer,
|
|
|
|
size_t size);
|
|
|
|
ssize_t hdmi_drm_infoframe_pack_only(const struct hdmi_drm_infoframe *frame,
|
|
|
|
void *buffer, size_t size);
|
|
|
|
int hdmi_drm_infoframe_check(struct hdmi_drm_infoframe *frame);
|
2020-05-14 06:07:19 +00:00
|
|
|
int hdmi_drm_infoframe_unpack_only(struct hdmi_drm_infoframe *frame,
|
|
|
|
const void *buffer, size_t size);
|
2012-11-21 14:29:29 +00:00
|
|
|
|
|
|
|
enum hdmi_spd_sdi {
|
|
|
|
HDMI_SPD_SDI_UNKNOWN,
|
|
|
|
HDMI_SPD_SDI_DSTB,
|
|
|
|
HDMI_SPD_SDI_DVDP,
|
|
|
|
HDMI_SPD_SDI_DVHS,
|
|
|
|
HDMI_SPD_SDI_HDDVR,
|
|
|
|
HDMI_SPD_SDI_DVC,
|
|
|
|
HDMI_SPD_SDI_DSC,
|
|
|
|
HDMI_SPD_SDI_VCD,
|
|
|
|
HDMI_SPD_SDI_GAME,
|
|
|
|
HDMI_SPD_SDI_PC,
|
|
|
|
HDMI_SPD_SDI_BD,
|
|
|
|
HDMI_SPD_SDI_SACD,
|
|
|
|
HDMI_SPD_SDI_HDDVD,
|
|
|
|
HDMI_SPD_SDI_PMP,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct hdmi_spd_infoframe {
|
|
|
|
enum hdmi_infoframe_type type;
|
|
|
|
unsigned char version;
|
|
|
|
unsigned char length;
|
|
|
|
char vendor[8];
|
|
|
|
char product[16];
|
|
|
|
enum hdmi_spd_sdi sdi;
|
|
|
|
};
|
|
|
|
|
|
|
|
int hdmi_spd_infoframe_init(struct hdmi_spd_infoframe *frame,
|
|
|
|
const char *vendor, const char *product);
|
|
|
|
ssize_t hdmi_spd_infoframe_pack(struct hdmi_spd_infoframe *frame, void *buffer,
|
|
|
|
size_t size);
|
2018-09-21 14:33:32 +00:00
|
|
|
ssize_t hdmi_spd_infoframe_pack_only(const struct hdmi_spd_infoframe *frame,
|
|
|
|
void *buffer, size_t size);
|
|
|
|
int hdmi_spd_infoframe_check(struct hdmi_spd_infoframe *frame);
|
2012-11-21 14:29:29 +00:00
|
|
|
|
|
|
|
enum hdmi_audio_coding_type {
|
|
|
|
HDMI_AUDIO_CODING_TYPE_STREAM,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_PCM,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_AC3,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_MPEG1,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_MP3,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_MPEG2,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_AAC_LC,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_DTS,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_ATRAC,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_DSD,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_EAC3,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_DTS_HD,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_MLP,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_DST,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_WMA_PRO,
|
2014-12-19 12:14:20 +00:00
|
|
|
HDMI_AUDIO_CODING_TYPE_CXT,
|
2012-11-21 14:29:29 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_audio_sample_size {
|
|
|
|
HDMI_AUDIO_SAMPLE_SIZE_STREAM,
|
|
|
|
HDMI_AUDIO_SAMPLE_SIZE_16,
|
|
|
|
HDMI_AUDIO_SAMPLE_SIZE_20,
|
|
|
|
HDMI_AUDIO_SAMPLE_SIZE_24,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_audio_sample_frequency {
|
|
|
|
HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM,
|
|
|
|
HDMI_AUDIO_SAMPLE_FREQUENCY_32000,
|
|
|
|
HDMI_AUDIO_SAMPLE_FREQUENCY_44100,
|
|
|
|
HDMI_AUDIO_SAMPLE_FREQUENCY_48000,
|
|
|
|
HDMI_AUDIO_SAMPLE_FREQUENCY_88200,
|
|
|
|
HDMI_AUDIO_SAMPLE_FREQUENCY_96000,
|
|
|
|
HDMI_AUDIO_SAMPLE_FREQUENCY_176400,
|
|
|
|
HDMI_AUDIO_SAMPLE_FREQUENCY_192000,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_audio_coding_type_ext {
|
2014-12-19 12:14:22 +00:00
|
|
|
/* Refer to Audio Coding Type (CT) field in Data Byte 1 */
|
|
|
|
HDMI_AUDIO_CODING_TYPE_EXT_CT,
|
2014-12-19 12:14:20 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* The next three CXT values are defined in CEA-861-E only.
|
|
|
|
* They do not exist in older versions, and in CEA-861-F they are
|
|
|
|
* defined as 'Not in use'.
|
|
|
|
*/
|
2012-11-21 14:29:29 +00:00
|
|
|
HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND,
|
2014-12-19 12:14:20 +00:00
|
|
|
|
|
|
|
/* The following CXT values are only defined in CEA-861-F. */
|
|
|
|
HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_V2,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_EXT_DRA,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_SURROUND,
|
|
|
|
HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC_SURROUND = 10,
|
2012-11-21 14:29:29 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct hdmi_audio_infoframe {
|
|
|
|
enum hdmi_infoframe_type type;
|
|
|
|
unsigned char version;
|
|
|
|
unsigned char length;
|
|
|
|
unsigned char channels;
|
|
|
|
enum hdmi_audio_coding_type coding_type;
|
|
|
|
enum hdmi_audio_sample_size sample_size;
|
|
|
|
enum hdmi_audio_sample_frequency sample_frequency;
|
|
|
|
enum hdmi_audio_coding_type_ext coding_type_ext;
|
|
|
|
unsigned char channel_allocation;
|
|
|
|
unsigned char level_shift_value;
|
|
|
|
bool downmix_inhibit;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
int hdmi_audio_infoframe_init(struct hdmi_audio_infoframe *frame);
|
|
|
|
ssize_t hdmi_audio_infoframe_pack(struct hdmi_audio_infoframe *frame,
|
|
|
|
void *buffer, size_t size);
|
2018-09-21 14:33:32 +00:00
|
|
|
ssize_t hdmi_audio_infoframe_pack_only(const struct hdmi_audio_infoframe *frame,
|
|
|
|
void *buffer, size_t size);
|
Merge DRM changes from upstream v6.0.8..v6.1
NOTE: This commit does not compile due to missing RHEL-specific fix-ups,
which are split out into separate Git commits following this one.
If git bisect selected this commit, run "git bisect skip" and try again.
Repeat this until it selects a commit which compiles.
This commit was generated using:
rhdrm-merge-drm v6.1 2160457
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2160457
Conflicts:
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c
drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
drivers/gpu/drm/ast/ast_mode.c
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c
drivers/gpu/drm/i915/gt/intel_workarounds.c
drivers/gpu/drm/i915/gt/uc/intel_guc.c
drivers/gpu/drm/i915/gt/uc/intel_guc_capture.c
drivers/gpu/drm/i915/gt/uc/intel_guc_log.c
drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
drivers/gpu/drm/i915/gvt/kvmgt.c
drivers/gpu/drm/mgag200/mgag200_pll.c
Conflict resolution:
diff --cc drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
index ecb8db731081,253ea6b159df..6ebed4d58ced
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
@@@ -162,6 -162,7 +162,8 @@@
#define AMDGPU_VCN_FW_LOGGING_FLAG (1 << 10)
#define AMDGPU_VCN_SMU_VERSION_INFO_FLAG (1 << 11)
#define AMDGPU_VCN_SMU_DPM_INTERFACE_FLAG (1 << 11)
++#define AMDGPU_VCN_SMU_DPM_INTERFACE_FLAG (1 << 11)
+ #define AMDGPU_VCN_VF_RB_SETUP_FLAG (1 << 14)
#define AMDGPU_VCN_IB_FLAG_DECODE_BUFFER 0x00000001
#define AMDGPU_VCN_CMD_FLAG_MSG_BUFFER 0x00000001
diff --cc drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c
index 3128c111c619,d0b46a3e0155..6f6f6e5ad14b
--- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c
@@@ -206,8 -206,7 +206,8 @@@ static bool dcn32_check_no_memory_reque
*/
static uint32_t dcn32_calculate_cab_allocation(struct dc *dc, struct dc_state *ctx)
{
- uint8_t i;
- int j;
++
+ int i, j;
struct dc_stream_state *stream = NULL;
struct dc_plane_state *plane = NULL;
uint32_t cursor_size = 0;
@@@ -237,24 -236,24 +237,27 @@@
mblk_width = DCN3_2_MBLK_WIDTH;
mblk_height = bytes_per_pixel == 4 ? DCN3_2_MBLK_HEIGHT_4BPE : DCN3_2_MBLK_HEIGHT_8BPE;
++
/* full_vp_width_blk_aligned = FLOOR(vp_x_start + full_vp_width + blk_width - 1, blk_width) -
* FLOOR(vp_x_start, blk_width)
*
* mall_alloc_width_blk_aligned_l/c = full_vp_width_blk_aligned_l/c
*/
mall_alloc_width_blk_aligned = ((pipe->plane_res.scl_data.viewport.x +
- pipe->plane_res.scl_data.viewport.width + mblk_width - 1) / mblk_width * mblk_width) +
+ pipe->plane_res.scl_data.viewport.width + mblk_width - 1) / mblk_width * mblk_width) -
(pipe->plane_res.scl_data.viewport.x / mblk_width * mblk_width);
++
/* full_vp_height_blk_aligned = FLOOR(vp_y_start + full_vp_height + blk_height - 1, blk_height) -
* FLOOR(vp_y_start, blk_height)
*
* mall_alloc_height_blk_aligned_l/c = full_vp_height_blk_aligned_l/c
*/
mall_alloc_height_blk_aligned = ((pipe->plane_res.scl_data.viewport.y +
- pipe->plane_res.scl_data.viewport.height + mblk_height - 1) / mblk_height * mblk_height) +
+ pipe->plane_res.scl_data.viewport.height + mblk_height - 1) / mblk_height * mblk_height) -
(pipe->plane_res.scl_data.viewport.y / mblk_height * mblk_height);
++
num_mblks = ((mall_alloc_width_blk_aligned + mblk_width - 1) / mblk_width) *
((mall_alloc_height_blk_aligned + mblk_height - 1) / mblk_height);
diff --cc drivers/gpu/drm/ast/ast_mode.c
index b93181a42048,1bc0220e6783..ae5a4cce972f
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@@ -42,9 -40,8 +42,8 @@@
#include <drm/drm_fourcc.h>
#include <drm/drm_gem_atomic_helper.h>
#include <drm/drm_gem_framebuffer_helper.h>
-#include <drm/drm_gem_vram_helper.h>
+#include <drm/drm_gem_shmem_helper.h>
#include <drm/drm_managed.h>
- #include <drm/drm_plane_helper.h>
#include <drm/drm_probe_helper.h>
#include <drm/drm_simple_kms_helper.h>
@@@ -604,31 -550,31 +603,31 @@@ static const uint32_t ast_primary_plane
static int ast_primary_plane_helper_atomic_check(struct drm_plane *plane,
struct drm_atomic_state *state)
{
- struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
- plane);
- struct drm_crtc_state *crtc_state;
- struct ast_crtc_state *ast_crtc_state;
+ struct drm_device *dev = plane->dev;
+ struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state, plane);
+ struct drm_crtc_state *new_crtc_state = NULL;
+ struct ast_crtc_state *new_ast_crtc_state;
int ret;
- if (!new_plane_state->crtc)
- return 0;
-
- crtc_state = drm_atomic_get_new_crtc_state(state,
- new_plane_state->crtc);
+ if (new_plane_state->crtc)
+ new_crtc_state = drm_atomic_get_new_crtc_state(state, new_plane_state->crtc);
- ret = drm_atomic_helper_check_plane_state(new_plane_state, crtc_state,
+ ret = drm_atomic_helper_check_plane_state(new_plane_state, new_crtc_state,
- DRM_PLANE_HELPER_NO_SCALING,
- DRM_PLANE_HELPER_NO_SCALING,
+ DRM_PLANE_NO_SCALING,
+ DRM_PLANE_NO_SCALING,
false, true);
- if (ret)
+ if (ret) {
return ret;
+ } else if (!new_plane_state->visible) {
+ if (drm_WARN_ON(dev, new_plane_state->crtc)) /* cannot legally happen */
+ return -EINVAL;
+ else
+ return 0;
+ }
- if (!new_plane_state->visible)
- return 0;
-
- ast_crtc_state = to_ast_crtc_state(crtc_state);
+ new_ast_crtc_state = to_ast_crtc_state(new_crtc_state);
- ast_crtc_state->format = new_plane_state->fb->format;
+ new_ast_crtc_state->format = new_plane_state->fb->format;
return 0;
}
@@@ -850,22 -774,29 +849,22 @@@ static const uint32_t ast_cursor_plane_
static int ast_cursor_plane_helper_atomic_check(struct drm_plane *plane,
struct drm_atomic_state *state)
{
- struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
- plane);
- struct drm_framebuffer *fb = new_plane_state->fb;
- struct drm_crtc_state *crtc_state;
+ struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state, plane);
+ struct drm_framebuffer *new_fb = new_plane_state->fb;
+ struct drm_crtc_state *new_crtc_state = NULL;
int ret;
- if (!new_plane_state->crtc)
- return 0;
-
- crtc_state = drm_atomic_get_new_crtc_state(state,
- new_plane_state->crtc);
+ if (new_plane_state->crtc)
+ new_crtc_state = drm_atomic_get_new_crtc_state(state, new_plane_state->crtc);
- ret = drm_atomic_helper_check_plane_state(new_plane_state, crtc_state,
+ ret = drm_atomic_helper_check_plane_state(new_plane_state, new_crtc_state,
- DRM_PLANE_HELPER_NO_SCALING,
- DRM_PLANE_HELPER_NO_SCALING,
+ DRM_PLANE_NO_SCALING,
+ DRM_PLANE_NO_SCALING,
true, true);
- if (ret)
+ if (ret || !new_plane_state->visible)
return ret;
- if (!new_plane_state->visible)
- return 0;
-
- if (fb->width > AST_MAX_HWC_WIDTH || fb->height > AST_MAX_HWC_HEIGHT)
+ if (new_fb->width > AST_MAX_HWC_WIDTH || new_fb->height > AST_MAX_HWC_HEIGHT)
return -EINVAL;
return 0;
diff --cc drivers/gpu/drm/i915/display/intel_display.c
index bd629f2da6eb,de77054195c6..d3bfa2a675b8
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@@ -3724,9 -3730,9 +3730,10 @@@ static u8 bigjoiner_pipes(struct drm_i9
else if (DISPLAY_VER(i915) >= 11)
pipes = BIT(PIPE_B) | BIT(PIPE_C);
else
++
pipes = 0;
- return pipes & RUNTIME_INFO(i915)->pipe_mask;
+ return pipes & INTEL_INFO(i915)->display.pipe_mask;
}
static bool transcoder_ddi_func_is_enabled(struct drm_i915_private *dev_priv,
diff --cc drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
index 1e52ea387dc5,d651ccd0ab20..fb733fa8a491
--- a/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
@@@ -22,14 -22,11 +22,9 @@@ bool is_object_gt(struct kobject *kobj
return !strncmp(kobj->name, "gt", 2);
}
- static struct intel_gt *kobj_to_gt(struct kobject *kobj)
- {
- return container_of(kobj, struct intel_gt, sysfs_gt);
- }
-
-struct intel_gt *intel_gt_sysfs_get_drvdata(struct device *dev,
+struct intel_gt *intel_gt_sysfs_get_drvdata(struct kobject *kobj,
const char *name)
{
- struct kobject *kobj = &dev->kobj;
-
/*
* We are interested at knowing from where the interface
* has been called, whether it's called from gt/ or from
diff --cc drivers/gpu/drm/i915/gt/intel_gt_sysfs.h
index 6bee2c6a894d,6232923a420d..c3a123faee98
--- a/drivers/gpu/drm/i915/gt/intel_gt_sysfs.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_sysfs.h
@@@ -22,9 -23,14 +23,14 @@@ intel_gt_create_kobj(struct intel_gt *g
struct kobject *dir,
const char *name);
+ static inline struct intel_gt *kobj_to_gt(struct kobject *kobj)
+ {
+ return container_of(kobj, struct intel_gt, sysfs_gt);
+ }
+
void intel_gt_sysfs_register(struct intel_gt *gt);
void intel_gt_sysfs_unregister(struct intel_gt *gt);
-struct intel_gt *intel_gt_sysfs_get_drvdata(struct device *dev,
+struct intel_gt *intel_gt_sysfs_get_drvdata(struct kobject *kobj,
const char *name);
#endif /* SYSFS_GT_H */
diff --cc drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c
index 1fef52e7c2c8,180dd6f3ef57..426da98a96ed
--- a/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c
@@@ -682,10 -726,37 +682,39 @@@ static const struct attribute *media_pe
NULL
};
+ static ssize_t
+ default_min_freq_mhz_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
+ {
+ struct intel_gt *gt = kobj_to_gt(kobj->parent);
+
+ return sysfs_emit(buf, "%u\n", gt->defaults.min_freq);
+ }
+
+ static struct kobj_attribute default_min_freq_mhz =
+ __ATTR(rps_min_freq_mhz, 0444, default_min_freq_mhz_show, NULL);
+
+ static ssize_t
+ default_max_freq_mhz_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
+ {
+ struct intel_gt *gt = kobj_to_gt(kobj->parent);
+
+ return sysfs_emit(buf, "%u\n", gt->defaults.max_freq);
+ }
+
+ static struct kobj_attribute default_max_freq_mhz =
+ __ATTR(rps_max_freq_mhz, 0444, default_max_freq_mhz_show, NULL);
+
+ static const struct attribute * const rps_defaults_attrs[] = {
+ &default_min_freq_mhz.attr,
+ &default_max_freq_mhz.attr,
+ NULL
+ };
+
-static int intel_sysfs_rps_init(struct intel_gt *gt, struct kobject *kobj,
- const struct attribute * const *attrs)
+static int intel_sysfs_rps_init(struct intel_gt *gt, struct kobject *kobj)
{
+ const struct attribute * const *attrs;
+ struct attribute *vlv_attr;
int ret;
if (GRAPHICS_VER(gt->i915) < 6)
diff --cc drivers/gpu/drm/i915/gt/intel_lrc.c
index 070cec4ff8a4,3955292483a6..d3ac73c3559f
--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
@@@ -1278,12 -1298,13 +1298,17 @@@ gen12_emit_indirect_ctx_rcs(const struc
/* hsdes: 1809175790 */
if (!HAS_FLAT_CCS(ce->engine->i915))
- cs = gen12_emit_aux_table_inv(cs, GEN12_GFX_CCS_AUX_NV);
+ cs = gen12_emit_aux_table_inv(ce->engine->gt,
+ cs, GEN12_GFX_CCS_AUX_NV);
+
+ /* Wa_16014892111 */
+ if (IS_DG2(ce->engine->i915))
+ cs = dg2_emit_draw_watermark_setting(cs);
+ /* Wa_16014892111 */
+ if (IS_DG2(ce->engine->i915))
+ cs = dg2_emit_draw_watermark_setting(cs);
+
return cs;
}
diff --cc drivers/gpu/drm/i915/gt/intel_workarounds.c
index 1b6479b5bd32,a821e3d405db..21cd1a4e1823
--- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
@@@ -2108,15 -2108,18 +2108,22 @@@ rcs_engine_wa_init(struct intel_engine_
if (IS_DG2_GRAPHICS_STEP(i915, G11, STEP_A0, STEP_B0)) {
/* Wa_14013392000:dg2_g11 */
wa_masked_en(wal, GEN7_ROW_CHICKEN2, GEN12_ENABLE_LARGE_GRF_MODE);
+ }
- /* Wa_16011620976:dg2_g11 */
- wa_write_or(wal, LSC_CHICKEN_BIT_0_UDW, DIS_CHAIN_2XSIMD8);
+ if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
+ IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
+ /* Wa_1509727124:dg2 */
+ wa_masked_en(wal, GEN10_SAMPLER_MODE,
+ SC_DISABLE_POWER_OPTIMIZATION_EBB);
}
+ if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_B0, STEP_FOREVER) ||
+ IS_DG2_G11(i915) || IS_DG2_G12(i915)) {
+ /* Wa_1509727124:dg2 */
+ wa_masked_en(wal, GEN10_SAMPLER_MODE,
+ SC_DISABLE_POWER_OPTIMIZATION_EBB);
+ }
+
if (IS_DG2_GRAPHICS_STEP(i915, G10, STEP_A0, STEP_B0) ||
IS_DG2_GRAPHICS_STEP(i915, G11, STEP_A0, STEP_B0)) {
/* Wa_14012419201:dg2 */
diff --cc drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
index 844dee09a321,1db59eeb34db..1ac0e66d39e5
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
@@@ -4209,103 -4177,18 +4185,111 @@@ int intel_guc_submission_setup(struct i
return 0;
}
+struct scheduling_policy {
+ /* internal data */
+ u32 max_words, num_words;
+ u32 count;
+ /* API data */
+ struct guc_update_scheduling_policy h2g;
+};
+
+static u32 __guc_scheduling_policy_action_size(struct scheduling_policy *policy)
+{
+ u32 *start = (void *)&policy->h2g;
+ u32 *end = policy->h2g.data + policy->num_words;
+ size_t delta = end - start;
+
+ return delta;
+}
+
+static struct scheduling_policy *__guc_scheduling_policy_start_klv(struct scheduling_policy *policy)
+{
+ policy->h2g.header.action = INTEL_GUC_ACTION_UPDATE_SCHEDULING_POLICIES_KLV;
+ policy->max_words = ARRAY_SIZE(policy->h2g.data);
+ policy->num_words = 0;
+ policy->count = 0;
+
+ return policy;
+}
+
+static void __guc_scheduling_policy_add_klv(struct scheduling_policy *policy,
+ u32 action, u32 *data, u32 len)
+{
+ u32 *klv_ptr = policy->h2g.data + policy->num_words;
+
+ GEM_BUG_ON((policy->num_words + 1 + len) > policy->max_words);
+ *(klv_ptr++) = FIELD_PREP(GUC_KLV_0_KEY, action) |
+ FIELD_PREP(GUC_KLV_0_LEN, len);
+ memcpy(klv_ptr, data, sizeof(u32) * len);
+ policy->num_words += 1 + len;
+ policy->count++;
+}
+
+static int __guc_action_set_scheduling_policies(struct intel_guc *guc,
+ struct scheduling_policy *policy)
+{
+ int ret;
+
+ ret = intel_guc_send(guc, (u32 *)&policy->h2g,
+ __guc_scheduling_policy_action_size(policy));
+ if (ret < 0)
+ return ret;
+
+ if (ret != policy->count) {
+ drm_warn(&guc_to_gt(guc)->i915->drm, "GuC global scheduler policy processed %d of %d KLVs!",
+ ret, policy->count);
+ if (ret > policy->count)
+ return -EPROTO;
+ }
+
+ return 0;
+}
+
+static int guc_init_global_schedule_policy(struct intel_guc *guc)
+{
+ struct scheduling_policy policy;
+ struct intel_gt *gt = guc_to_gt(guc);
+ intel_wakeref_t wakeref;
+ int ret = 0;
+
+ if (GET_UC_VER(guc) < MAKE_UC_VER(70, 3, 0))
+ return 0;
+
+ __guc_scheduling_policy_start_klv(&policy);
+
+ with_intel_runtime_pm(>->i915->runtime_pm, wakeref) {
+ u32 yield[] = {
+ GLOBAL_SCHEDULE_POLICY_RC_YIELD_DURATION,
+ GLOBAL_SCHEDULE_POLICY_RC_YIELD_RATIO,
+ };
+
+ __guc_scheduling_policy_add_klv(&policy,
+ GUC_SCHEDULING_POLICIES_KLV_ID_RENDER_COMPUTE_YIELD,
+ yield, ARRAY_SIZE(yield));
+
+ ret = __guc_action_set_scheduling_policies(guc, &policy);
+ if (ret)
+ i915_probe_error(gt->i915,
+ "Failed to configure global scheduling policies: %pe!\n",
+ ERR_PTR(ret));
+ }
+
+ return ret;
+}
+
void intel_guc_submission_enable(struct intel_guc *guc)
{
+ struct intel_gt *gt = guc_to_gt(guc);
+
+ /* Enable and route to GuC */
+ if (GRAPHICS_VER(gt->i915) >= 12)
+ intel_uncore_write(gt->uncore, GEN12_GUC_SEM_INTR_ENABLES,
+ GUC_SEM_INTR_ROUTE_TO_GUC |
+ GUC_SEM_INTR_ENABLE_ALL);
+
guc_init_lrc_mapping(guc);
guc_init_engine_stats(guc);
+ guc_init_global_schedule_policy(guc);
}
void intel_guc_submission_disable(struct intel_guc *guc)
diff --cc drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
index fb309ae43001,b91ad4aede1f..24aac2f32dd1
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
@@@ -339,6 -347,6 +347,7 @@@ bad
fw_blobs[i].blob.patch);
uc_fw->file_selected.path = NULL;
++
}
}
}
diff --cc drivers/gpu/drm/panel/panel-sitronix-st7701.c
index 098955526b68,c481daa4bbce..38a0ba4a1b3f
--- a/drivers/gpu/drm/panel/panel-sitronix-st7701.c
+++ b/drivers/gpu/drm/panel/panel-sitronix-st7701.c
@@@ -384,18 -762,10 +762,18 @@@ static int st7701_dsi_probe(struct mipi
st7701->dsi = dsi;
st7701->desc = desc;
- return mipi_dsi_attach(dsi);
+ ret = mipi_dsi_attach(dsi);
+ if (ret)
+ goto err_attach;
+
+ return 0;
+
+err_attach:
+ drm_panel_remove(&st7701->panel);
+ return ret;
}
- static int st7701_dsi_remove(struct mipi_dsi_device *dsi)
+ static void st7701_dsi_remove(struct mipi_dsi_device *dsi)
{
struct st7701 *st7701 = mipi_dsi_get_drvdata(dsi);
Commit list:
commit 40cdb02cb9f965732eb543d47f15bef8d10f0f5f
commit 6dc548745d5b5102e3c53dc5097296ac270b6c69
commit 859161b952a453b86362f168fadef72a8ba31a05
commit d72ac4bbf4cc8f6b50526ce400861f176659884f
commit 1fd452c403ca2cd9dcbd8465f9f72be52e15ac1a
commit 79abca2b399009eb8d12c652d0f0f7a9c7a06289
commit 96dc635d5538055cb6ccd7b6e9290dfcfc385f97
commit dc1dc76bd9a48c6aba3efae5eadb9a884043966e
commit 356d2c8e76ebb1134a0685ce4b923d8201337475
commit 4c59b0805e9bf873fd3f5dca4fc53d8c220e39b4
commit e5bd7e3e4a68f0befe53f59954b25eec9a792d60
commit ba71593217b5b03c9e3385b268ff8613a71fc6ce
commit 0a2486f85e0cfa6439116abb9078ab888a619746
commit 8aba4d30520ed656065eb36f0628109bdea385ee
commit d093100b425df6fe400881f2e62c3f0be7bf18cf
commit b92db7e4fe740daab858366faff1f992d53d3ff4
commit 0c05fcd3b45d6769c496fc6e2b88d18fc78ebe11
commit a6aa679a70e9d8fa4ad3f519c060db9bb186e21c
commit 6de745238aa30529778a26622a430dfcb171b089
commit d395fb1999abb7eaa3fb5fd2107cae0f1e41e6d0
commit 20529e260ff2fb4a00b54a1e625ebebe5d1a6210
commit 347987a2cf0d146484d1c586951ef10028bb1674
commit 63af82cf5e36b6ba3f3ebcdd1edd9f91934bfa59
commit 64e257f187a5c76ec5766f50204462c0c483e418
commit 4d8f68548e982e2c9b9ca3b47aea49c47da93a3d
commit ba8f16cd081902350e2d2a00afcc6b77b1815d50
commit 9f0527d22a52ff3470d8bf0dc79cf42c0677c23c
commit 93de485cd822d429e91f197a820f02ee57d38fd5
commit 0421bb0baa84fc93bbb659fe682e19266730f9f1
commit 913b1e7ca77e0d04b74921e7328e3446f3a481be
commit 848b3c0be2b944f633fe9beb28ad28f15c39f7a1
commit 9eb11f52a6285c0516046e11d45fa4be8714a1f7
commit 932da861956ac425ba4e65f7696458f96d833883
commit fc8d29e298cf47e07c2764ec1c340c1df8e50431
commit 75f664903d8672897333b86bb450335ec6486ad5
commit 81cb44274c654e49f55e6690079540b0bd177db0
commit 4de395f2c632c31c575f72d49d4f4389c99dab68
commit 668a8f17b5290d04ef7343636a5588a0692731a1
commit 917dd05418148f05d8860b8106da8dcd1d258aaf
commit f134c9cd9ce829cc66d4d32c57b76de1aab54fe9
commit d71d8a4b8d10e4e2002d21940a768b389d594637
commit 00ec947c144b374ceb3fe1b4bd2e9ea7454dd630
commit d87fbea50b819b76f180bc8420c5f9efa0670deb
commit b11af8a25b576cad006411fd904f88199ff9b5ff
commit a961b197d72601b0363fd7614f9b98d5721f9c6c
commit 35a3b82f1bdd60e454de34f984a3f09b38f64b61
commit abea75e9207e7744f524a5373e9c149226e17a5d
commit ae9f1f2ca093906f06311ade42772eeb021af39f
commit 55b3d6a63fb58e154f0a1ab3930cdd003a39ba9b
commit 59dad4a0d1862dcd15405f3217a59b1fac01daf0
commit 1dab4561a341afdbaafe0ce6091106d0c63c79e0
commit bd8408e69a47f8e9f5d95c5d919413fafecc1e73
commit 53618649ca6ded3222b24e8d25a09be30a197577
commit 6fc20a8592f569395aadc9fd97336facdee84f0d
commit fbc1fdaa8338ec4ebd862d918a0ce3e12033e8a3
commit 899e90cf20a9d0eaec8cbc8e1ca1d05278afb6d7
commit 86088f88a25c76baac304b6f887e5da2c30c4e07
commit 1a217205bd2643272e32ec38926250aa6c29a854
commit c19491894d4baf2155387e48aa326e1b52d7b986
commit ad444123a4a1d2944bd72fc877af9aabef01b889
commit 031a2fea0482965175ad20adea44bdfe6ed817aa
commit 2b066860a4f855babd2a22f98364ff6546d85f88
commit 0b8613a21d9c52ccde18264b69de9f46faa362df
commit 71eed8a9ba8609e9c97171525c28846b9bde9a4f
commit 3475b50873e4a68302822d91ab5cb031c1a92d50
commit 9899834ae5f26649da09e0cae72d8d9eb8a07aab
commit 6f481afe220d36ad7790526a2164d7fd3d5b0487
commit a6c225be3da7edec46f96781ae07a873b2fbaa17
commit 7fa8e07128ed660c97c4a8fe615967e654b84f32
commit 779c84fea3dbd658d3c4b72937732193cb01bf15
commit 1ba85119afb5e45c699bf074dcdc894bfbf1c614
commit 82f9cee25598a1cb06529df8e7e1f86f61e786e9
commit de2b4917843cd433d0f1c279123f75801dcd0c1e
commit 83b7a8e7e88e7a201facc9c33833330485f5ec12
commit 42542c7904cf2e6fb795dc7ffd1903ab7d6e53fb
commit 5dca122f8388695b1048a48a69d3cf9210036d9a
commit fdff0a852ec8b8ddba6fc193f187d5d85717ab2e
commit 64b88afbd92fbf434759d1896a7cf705e1c00e79
commit e473216b42aa1fd9fc6b94b608b42c210c655908
commit fdf0ff4d12cbcd76b53f27c96ce51ddca400884a
commit 4656b3a26a9e9fe5f04bfd2ab55b066266ba7f4d
commit e7fef092330321ff311e8c06338ce1b4b608ba05
commit b5c9ed70d1a94c59dad7b1ecfc928863c0fe6ac0
commit a9d2e8b5f1e5caa3cb038d7bb7bab530bcce5af1
commit 4c703f5d6f776eaa6a98611c9b5dfe800fbeb0c8
commit 7847628862a808ff3802df96f54e5eab3ff448b6
commit 90caf42527a40d09e0eed9fcbca08d757f4fd493
commit 8f48dbd6deaf5a14c924c1de08bf7e36526bf3e7
commit 1d43a5120ab49f22ba6c5901ad3994e254510303
commit 14e7157afb055248ed34901fcd6fbf54201cfea1
commit 4d9db10576ff51afa8cf7727fbad55ada299359b
commit fa2a87e4c5cea2beba9deabcbaf54d1979fff419
commit 6d602e031103fb78dbe50dbf57a5f29737494c6f
commit 2dbeef82d14fda3b15d40c94522bdf83f9c33ae8
commit 6e2dc7ac71411eaf6363d63c333519e1d353d6b0
commit 774ce1510e6ccb9c0752d4aa7a9ff3624b3db3f3
commit f6ff4570e567b687b851a2cf52c7e300c399d925
commit b68735e8ef58be6df7a6f511c60186e6051d9fb6
commit a4a4307003307220321f946892829a5364433809
commit 2be1959ecefd9f655e6262144a1b970bc2f34054
commit b25c377a5b26f107ea831af05919fc3782aabebc
commit ac991b874b098ecde2c5eb81da48d52b6b22851b
commit 2b8428a10fd3763819eabf1acef6b5b2c7875520
commit fc94224c2e0ae8d83ac511a3ef4962178505469d
commit bbb6f93f51a19787f455768015e9a77a4d83c4c8
commit 97216fefed6d9782c7208cca33a5465212f533f3
commit 382fc1f681324bb38bedfe763107a60256c4ddc8
commit cce32e4e38c63f040ffe1966117d364ecf9a28b8
commit 254e5e8829a97bdbaf86b83ef704ac45a30c3867
commit 30c637151cfac8da3588f3773462e705a4ff2f59
commit 3565c7219c169ab6c6ef34ba9187c1b7bc6dbfa5
commit b320c7b7343885a346949abb56ea20528d611148
commit 57b2efce45ef5429e8d050190242849890b1fd96
commit ace98ffc8acbe7e8f886f2048436a0438663b153
commit ddcf980f4d724dbcf6a99be58bd07cd5cc68bb0e
commit a8c18bec83a82a90d5e35a080bc465581459313e
commit f5dfbfc0ae00c2c2c0518da9e1f9a8cca50ae544
commit 353819d85f87be46aeb9c1dd929d445a006fc6ec
commit c4cf059d9c2c4849c65b481c6853bb93c8b33f3b
commit 4bedceaed1ae1172cfe72d3ff752b3a1d32fe4d9
commit 4d87d36247e7fb9419b25331051c0746d09e57bb
commit dfc83de118ff7930acc9a4c8dfdba7c153aa44d6
commit be0366f168033374a93e4c43fdaa1a90ab905184
commit 5d36acb7198b0e5eb88e6b701f9ad7b9448f8df9
commit d1051db85f6496ed9c825802bef3709f2e7d816f
commit fa6a4cdeafa0ab674d0f72067304c5408c89964f
commit f31bccd3989d504a0c90b4562908ea18162d7662
commit 2ddd1e6ccb139b9e7f1fed2883e34add832cbd77
commit c4f306e31632e997c01f3e5ff3298ffc3a127999
commit a49afeb4165361819b92b7991b97457bac4c674c
commit 3a6acb7dd69f9d8960009ed1ceb77dc5e532391a
commit 1765378dfb10d4feedfc71cd721c4140d927c488
commit 1d4f70a65fafb484064b9c7caa7318e9fd2ab737
commit bf8afc2090795b8640bf1842529627e69f673df4
commit 18c8485236a5e3f491b670c018ae391c9cb84dfa
commit 696560d43b4b07b58cf8604a9b186b32159164d9
commit 4d09017aec4f2aa5f6109b32f9a037f35c17a9e0
commit 5d2f2e8b3a36328a3981996bb20c32d8a0e53b46
commit 22645976ae4c0e7eebc8cee7942692280457551e
commit 2ac6cdd581f48c8f68747156fde5868486a44985
commit cf1e6a90315a3f5b8ecbb3cf6a4badf8978e9075
commit 44373151ab429cca53fae53d9eed374aef64afad
commit 1ee181fe958a11d023fd992b8eabe6d4287661ee
commit 9382ec27acb2f5a43dc3c3b77036f898a498ba60
commit 2d70b9a1482e09f8465452c4655ffe20c605d526
commit ed2ef21f1089ef9b3b943b4e365600e615ce827d
commit 4f4dc37e374c957b2bbcd3b1f3dad73afeb647a5
commit 1baf9127c482a3a58aef81d92ae751798e2db202
commit 5cd062e31d352e33284d08a52ddb2b9ed1a5caa8
commit f639f74a789570fff9fb093a603bda550b53f3d9
commit 8aeeb3144fe27b2b8aa30db262de2f654f2edb9a
commit 877507bb954e7d0a4f2d3ba9957127a83c03e447
commit bc8350409ca5147d432f869209ee13fa079625df
commit 828369f2829e5415e61a2c25b2cfb0bad48d72b4
commit d4a3e50ffd9084e3eafb318e95ca91b5895a6e62
commit 9fb3473732908ff0f8d8f8763318c407489ae955
commit 15c5401dee76e03a1b4e30b7ba8fcec972e5bebd
commit 69142c0a5f9a0afa6ec31d5f9a4ebf293d3b5029
commit a96d8f052205d92c2fa934f72dd39229c8b75d79
commit 52d4cfdc2460cb7f0528e27cdc9fb808f299d325
commit dd9d3cbe9efcdb2a0d88c80d0e492ccae54a5b63
commit 9cf26c8968b358bb14cc078f8153300a493613d4
commit 6c82c75230b87d986283189a58e8cb18ea0c519c
commit 2775e2016179331f1b8dcc24bb63e898d64d49e3
commit 8eb403671e3886adcd939223442d49ff3ba52846
commit ae5a3d2c75a82c65564d32c42152ef7623ccf673
commit 7dd5c56531eb03696acdb17774721de5ef481c0b
commit 5e8bf00ea915a0f290bf5ee544b91aad5eaab4bc
commit 6bcfe8eaeef01fb389e951e7c648b934dfd62f15
commit 4a83c26a1d8702c516db77fc4423ae896ee904f1
commit 8c30eecc6769bee1e3acb485ad5f086a4d8a04b6
commit 37c7c23a6420f56a66d70e30ed54ae8f77349f90
commit fc30eea1542dd787c6aa46e970014e97e390c5b2
commit ffb6260be81f5f4c97b34430072bf50380b42478
commit 05436815fdb47539269387c10285c088a8ba33e7
commit 7fbee3eb9ab82c4b8c240617a1b3878c6981dd73
commit 01224faa36e86a2b9d423fe851c05feb288ae83d
commit f9929f69de94212f98b3ad72a3e81c3bd3d333e0
commit 03d38605cee7762d020dc14cfdefa6cef77b5811
commit c25b69604fc4455228329c6c522a87974246e40f
commit 802fd5750faca181cade177642e0e5233ff25f85
commit fd9e3169e42b7b9e3a5c58ca2bc95a15f9de1d6c
commit de40c281fe0b6babf3d1a25e034525a23e125d0c
commit ef8886f321c5dab8124b9153d25afa2a71d05323
commit 730c2bf4ad395acf0aa0820535fdb8ea6abe5df1
commit 3d037d99e61a1e7a3ae3d214146d88db349dd19f
commit dba4d442be8c4d41d3e1ee4f72a2cd8fa524b8cb
commit 8676145eb2f53a9940ff70910caf0125bd8a4bc2
commit 71bf55872cbe035820a87b2aa5fc1dc60678abfa
commit edbe262acf92c986ad9a1f594ae3b4f3d3373133
commit ce582859ca7b33e5c0d9432da9f7b54ced802100
commit e13140a06283141318319aaae7dfa348b06bdd6c
commit ab298c29d414a5a94ed3039b0e97bc325bf45272
commit c4863ce0f4aa17d88f4bf5fbd92ae9400f6e6d28
commit cb7fffbd26dd6eadfe6591c0e14fb43e1ba2f70e
commit cfe637c4d6fcaffa655405e682f99a3d88e5fad0
commit ce73f456744ca763ab6a9753104caf843d30fd8b
commit 7bef64490f9bb04731d3cf46bc8f7f46e55b2e0e
commit b3aca563d69bcbb49343196b4265a8cb7db91bfa
commit f241b064426943a1591c9e9121a175d5ed1edb42
commit 504a51d70f86e3b989ca8834691bbac4033b6f48
commit 9e6a82b9fcecb11b84d010108874f923c1e648f1
commit 1ed88a816d0037ea6fec1be18dfa9db8ee7196a7
commit acd45c56790a3b558b0b0081678a20b0a0d89b0f
commit 0f7dc324b2e9e55db9323302f944fd952dbed967
commit e25d5954264d1871ab2792c7ca2298b811462500
commit 7350b2a3fbc6956b2b2234f6d27d030c70b451bb
commit 6bba2b30d29cbba78ba0f935210108e74dbe7ab3
commit 1bba7323c79b169d855ecb4a1eba410f18a38674
commit bcfa6be2ee21b8ff85fa8f51493c8e585e3ab265
commit 5fa9e16191204b6ead0c31e8f3b6ef92ddd8183e
commit ea6490b02240bd7939a3a13bc8d3f25046c01585
commit 8759464d7b6309e23df95f12064a120422d6f780
commit 82068edeb5090b6f999457483623b39b6546ef74
commit a61bb3422e8d6ec002dbe288356470540eb5662c
commit 3bd86801c84f66b4abedde4078e5237937b7576b
commit 36e599e179db51d61d2b30ea63bead7abfae8506
commit e99ba96247764e2963bcabf2fe2d91b4455c6bc7
commit a9b4c16d886cf6911d69fe3c68f5c7b2112f0141
commit eb09882d64807c24228ed1d005dbbae70860ca3f
commit ed5c2f5fd10dda07263f79f338a512c0f49f76f5
commit 8ba9249396bef37cb68be9e8dee7847f1737db9d
commit 672c0218e3e22ccaeb2911da8d3b784d3b6cc1d8
commit dac6b80818ac2353631c5a33d140d8d5508e2957
commit 5bd8d53f6fa53eab5433698d1362dae2aa53c1cc
commit bfaced6ee77484d8b9c6baf86a8e9406f80108c5
commit 72fadb13674f807f10a168fb7d020dde58ce6b0b
commit 194eb174cbe4fe2b3376ac30acca2dc8c8beca00
commit 60c9353139a0770e6057b3ed2e115deb95964e49
commit fdf17f1084c1d3fa0a2fb38fa0625b13b7bb0fff
commit c620e79bb695b866b2cefa0135f7eddd0d5bc9d7
commit ea76895ffab1a610fa162ca56f99048cc161c293
commit bf0dec4604979e09be60b7dc41066e3d07d29bf9
commit db910f10d5f4b7e6c9997e370f586eca54c22430
commit cdeec9a11c3c95f33a3e2be36ef3fabd60b8ebf2
commit 78e16ac1e764def96f4c89b433d379acd68881c7
commit 43d61f6d8f4d2da7df116eac4f83106ab1a29090
commit 34f667634a0dcee26d9873ab1c819bdd6cdf485a
commit 8350bb59e63d0909b0d65af2d9710026e0f902ce
commit a4d3230353e493d98263c5d7f03ee6403ed82d71
commit 0a8c91d7b694d122afe513e95908e8497cddc195
commit 1d32af4facd075542b26550e679ab53b5b8b5c5f
commit 01b537eeb049b98d7efc8f9c93c2608ef26ec338
commit 52a3859fd0b85e8dce32b6aac4f8fd18a25626c5
commit b34e44bc6156717543b784b50f4d2fd23f299700
commit 6ae0632d17759852c07e2d1e0a31c728eb6ba246
commit 30f2d2e49e826c2dda35153d2e108d06f6d7d9dc
commit 0ad7347a64ac4baec1786810709eebedc5f823d5
commit 1ed5a845c7c87aa79cef2f96e4165c8fad38837f
commit a021e2aa4dc203f58f5dabf55aefe5b8891a97e6
commit 7e55536c9c488febfeedacebae0831c070e72c36
commit 6dc85721df748385cfb011326ead52c01840b461
commit 78f48aa6f50b662bd74607f7415d68171339b2eb
commit 5ce27d6210018e972197ff7e5da6309f919fd61b
commit 56c7f0e2026328e56106b54cb0e2fe3a7e70ce4f
commit 368d179adbac212a5adf5fa492397a593d52547a
commit c5de70f6e14ce02c3e604972f8fd46ffcdc184d9
commit 5ece208ab05e4042c80ed1e6fe6d7ce236eee89b
commit 8ad0152afb1bb3878bba282308f037d73a87ace5
commit b092e4a9d3e3335fdc5aa23a9444eeebfa81da34
commit b0f2eb942b8a449432267571d045613e35ada2de
commit f922fbb0f2ad1fd3e3186f39c46673419e6d9281
commit 47091e4ed9af648d6cfa3a5f0809ece371294ecb
commit f4a6c7a454a6e71c5ccf25af82694213a9784013
commit ab55165d73a444606af1530cd0d6448b04370f68
commit 75217c2fcc88e77bea40ef1153d84ff31fa99112
commit 61faec5fa66cbd1afcd5074f168f09529f8119bf
commit 6a079903847cce1dd06345127d2a32f26d2cd9c6
commit f386832509b85e567acc849cdef22843ed33a525
commit 4cf05a4d7125854800a0e88eb3e1dbd74368e9af
commit 8869fa666a9e6782c3c896c1fa57d65adca23249
commit 0f60d28828dd94779c6527440289e1c36a05115a
commit 54c204c522fd2a887b52c7672b9238903ba59a8b
commit 4234ea30051200fc6016de10e4d58369e60b38f1
commit 20052deeb558e34e04655076a3b3403c3d289912
commit 48bc9d5245a43486559935da5439700ce4fe4a3e
commit 544432703b2fe73a07f387c0b883da03ffa5671e
commit 75ba3121acd58b71ee1d2f6e30ab44748d4397de
commit ded910f368a52b64a3c0eb12da085058b55f61a1
commit 92b2b55e68c8cb88588073434ff3e3240e98504c
commit 73b984d8722e3ee077a8591b27d8c4d1a2d72020
commit 6d3c900c12d72667341bcff338c252e22728b942
commit ee50b00244086453dfb7076e4b80214948cd0507
commit 95a72fb73c5900f1b8f00b2559179760ddb729ac
commit d8adafc7feb86b61fc483bb58b30028e6fb919d7
commit 9dfa4860efb8cf20c12b9b65ec66cafa6e93f3a6
commit 4bb5fed16991e6c1be6b8b4c1305dcf08ac58ecd
commit 947f63f17e1d91cee19f1bc071e825b28ce4da98
commit a0f7e7f759cf299ee6f6d8723c596af9a1a86b10
commit ddeaf487464af315ef7af02b37830a14fb5452e5
commit 441b12bcae736c20a6b8bf6978f90426ab1719a1
commit f9bc6142cd8deb953f0d9fa6bc6e1833402739e4
commit d6c770d2050b26fc90c80c13df1d6ae4682b2e3f
commit 9407feacd2e19b66bed0762c454b1654807a626c
commit 7ac32451193d20fbcddfb5b2623838ae98cb3c17
commit c10c55cf49fe9060720d67575c301dd452e0fab3
commit 008973fcbce429a2b0929108b6f9495d885bb1a3
commit 361c6e35d3831750af3c308e5ac056ab2971f199
commit 869e3bb7acb59d88c1226892136661810e8223a4
commit 83ebec7e0b4c2847d9cff2bcf1324cfc5287dfcb
commit 0f9fa5f58c78426a93983a2cc0127fd98b020403
commit 8c5e9bbb3662b09fb9b5353dc48d2f871f13127f
commit dbaadb3cebaad49c37e3fec937e73e6e41054404
commit 48b6b3726fb7c189410959d2b8915c209fbf9e7c
commit df78f7f660cdd5974b68649a95dbb34da4d4dfa7
commit 946c701407c33867573767db7a23e2b6696b5d9b
commit 0bee2ae29eb4bdeaf5fb80b4ef48877bc448485a
commit 0b4e477e08a14ef852d5a633cee10e4187730005
commit a5c2c0d164e96d24f73faffcd3b7bbb607e701a9
commit ffac9721939dca3f0ac7bfa90f3dc484b19c2706
commit 083351e963865a7eab55158042b81b8f8c0316b6
commit 11d2738940ebeb3fd3abc78d44684d5edb400a6e
commit 21167510605470d53c94e7162ae886c8fb67d93d
commit a76eb4297f90301fa9e4c888fb06749ef1be1c86
commit 2482fceed27b6951287e92e9f733533a657c2923
commit 6366fc70deb9aaf1db4a46916af14fa3c5a115ab
commit 01ad1d9c2888d51f2fb5b5ac88af8bd47d76937e
commit 4d07b0bc403403438d9cf88450506240c5faf92f
commit f0c70d41e4e8341651db7b75374bbff0b14dd310
commit c7d3c8447b262d177e0e83154841d64cde521e70
commit 2c93e7b7f545d2cca0e9e220ad7e6e1ac793ed39
commit 43ba44a176a420137d5acd93a61fbeec4ce70191
commit e6f1964818cdf5ce64a05898e53b2d081c682819
commit 9d0bad177af9fd31ea14e580a34e34d02edd26a0
commit 268c67e5bd8611f0835839957e77f92bc589b7d0
commit 39a445bb2787aac5ed929587a2e13ea5dc4ed0a6
commit f81f30b305d2c73c23d60b12b104d3f191c5687d
commit 488e29fedc1f2b771b37896da853bc4b493e4b3a
commit 00c6cbfd4e8a3279876babbac2f4a3f811d93b1f
commit 7578fc4d59e2e9ac5dd762019db77481511ec436
commit e26700fcf961c99dd5d0a416c4814cdd69e6695d
commit 3a9313d80e276cef87355305720a5e37e7ad4b46
commit 95ccf312a1e4f5a1150dd1a0a2d81c1043e33fb6
commit 11c7faa61d136cef92506e4e77d0e6c6e01428bc
commit c247cd03898c4c43c3bce6d4014730403bc13032
commit b1d36e73cc1c68d28f63cbd14767d0d0861147e0
commit da11ef832972e311475fcba802398e720ed36c54
commit 1eb67781117ca2095f0dbede79f22f6b2ffa3189
commit d9c04a1b7a15b5e74b2977461d9511e497f05d8f
commit 08e9505fa8f9aa00072a47b6f234d89b6b27a89c
commit 345c0bc0a3cdd3273de5338b7313afe733692296
commit 7c55b598b32936e506a699698fbe37c891ad1873
commit 0acc5b06b5b450b351aa006c70264baf3062e988
commit 7930f58a7e62e52e96636dafc2c4beb3b76b321e
commit d61e4ba33e254ef8df33c355ba1b2865e3885693
commit f577c7c76bf9f0e0a6dd3daf5b9a3d3f2b3880cc
commit 9f92c20279ee0f5256499d9fe55b6d6c4c414276
commit 95bbbb88ed49f6d4f46c9a23be0ba94db2fa65e9
commit f7fbcf4637fe8f54acb18d88488ae901b3d7a4dc
commit 99c957fedfc6678ded0b53afdcb832cd8446cec8
commit 28c042707bf23436d4fa3ecc1eab1a62dd1f6d7d
commit e6cf22ef5fae493a99e162c3f2e7233448d2b970
commit b68ea8af4ae005df5ca4f547f22b3824d0fcb3a4
commit 594b237b9a07e28d524b35a59dbff5bdc8de6b78
commit 74f4e84dc42bc80478ed15c221280e45e4fdfc5f
commit c8b1d0fef1b652c65dc09a0fae6ef0504bb2f349
commit 42900348bfb41cbfced62060c9cf4b735119394c
commit 8243df477845cdcf558226bbd24321ee85f82c73
commit 16f0013157bf8c95d10b9360491e3c920f85641e
commit 2724efa389c0dc4d686935b980832cbb87956968
commit d3ef9d57f24eba16cbce8f304c9190528e842227
commit 720102391060792bcb5697af640f3a4f09acf360
commit a79f56d191c4f621eee85979d6e77435fb8383b5
commit 638bc30f8579bf4e0fda42a0c271149c6ab9c893
commit 2387e21243ba8a2734322610daaf1eeaf1a146b4
commit 61ebd2fe6f793306ab6c05db8872931026dc1b8d
commit 6160216fd2c97107e8a9ab39863b056d677fcd85
commit d200a64305f7072db918e68b8caef0b33e55ef05
commit b2243cef56befeaa45a30e783265caf0c8e01ba1
commit a9c5e9c82039cf9f12bcb427160a2163df299b1f
commit 6509dd1111928a351204af1fc8e6aa61e0c59002
commit da30390b93c377545fdf5ecec34aee018f90485b
commit 068a0f5c8260dcc4ccbaefd2dbf21ea84162ac17
commit b078c16bde6d7eac1eac4be0dff07e3b77fe4cdf
commit 612dc414458ff439d90a6c491fa5d064a6412713
commit 61c86578229d2f0a71296663027bd774002f1506
commit dc35583ba9eccf2052c1eb26a0893399a79a5916
commit a2b4cefafa26e6e4dc550366b2caa87a916c179a
commit c41aa0204d1c05edadc42e50fdba62784f5841bd
commit 3eb4ad9325f1f959dbdf443176818ae3aa934aac
commit 3d46edeec211bcaf006bdd40aa73d2c4d3a4753d
commit f02c7d5a8fa3ecf7a20f25815bb30a967fa18885
commit 6127b3bcd33299cdebb79ffcc9c9ca135eaf763e
commit 2c2d7a67defa198a8b8148dbaddc9e5554efebc8
commit b183db8f4783ca2efc9b47734f15aad9477a108a
commit eb7de496451bd969e203f02f66585131228ba4ae
commit 4d054ca9ad01004901f3ba988d77f7d298819c12
commit 378e0f9f0b3e03a84db5ed5d3da3850871e9209e
commit 6215a7c8f55243779a44bc257af0e1b1bb928e76
commit 25bcc828d237cda65d34c736d70e4467fffb80b9
commit e7c2af13f811d0c23340154b7b2795876c71e4be
commit a7c7d23649f1fc3a73507d2aab3a5010a7b6745d
commit 291f269a49916a8494526edca92afed69270241f
commit 3b10f8517648d6bbfbe4c3019aa2759c463e546a
commit 986531bd0e72e74190c217523ff212c9bafa409b
commit ae611d171ec02f067b36a1658f29a2f3a9eb2a91
commit 5a04eb5be8e4da3b3574fbd56b6c43fa1f749cdf
commit 103472c13f0afedab818a2c6469d78c2fb29ad8c
commit 06a50913d96ed0f2e9ecd1ee3f224af72b03af6b
commit 34dc3cc5017f08df21a8afc9ddec2f622a5f04ed
commit 203eb5a98edbe40e64fbc794011ff7261eb55d8b
commit 12dc50823845e3a90d137ee09598e1984c6ec3b2
commit 6c77055aa674b6726f8ee57d1c20e950323dbadc
commit 4be1c12c880e03e6d174e7e7f9e0dc36bdaf9597
commit 36d225f365e737019a5c774682fba99ba7ae851a
commit b3d81dafdc48405ed061f3ad0bb75d7ef7d09936
commit a30a6fe9e56c401307d534b2c224002f9b2d33ff
commit 5a4dd6f0e846541e57a58f97fce86da1f3ab3a88
commit 304ebaeb3fed122e99d21653eb8ee679872b3031
commit c3704f1938e76654ebf5c9de220d08cab5d437de
commit 44eba1b85119a8f2d44a47bb3e8c5c608a05eba4
commit df22d67e5f3d91ce6f0b0f64ccc14d016c89d956
commit 95086cb969b2cb8abe4984457f219ec70d24052e
commit f54e515c91806288126f64b37da0c78baa2d8c1f
commit 917bda9ab155032a02be1a57ebd4d949ae9e1528
commit f8e1fa0fc8bd13122324da7d1e80d66641220680
commit d688f6b5525d5bc1b88c198959274d53a1a24204
commit da09daf881082266e4075657fac53c7966de8e4d
commit 2aefa9a38f236481f41b117e21ffdf38f40830f6
commit 1d5d1947778cbbc9b469e57b9e1a56871250afa9
commit 45a92f45f4578ff89da7dc5ef50bab4ef870f3b7
commit 6b11af6d1c8f5d4135332bb932baaa06e511173d
commit 62f6b0dcdf42ecbdf25205c77c9297d3977ed690
commit 572200db77ecbd3a178c68d469790a11cf07a20e
commit a3c9b4c7a75a66b65b62900e2e9d140e0470cd85
commit 9af611f29034dd6c9329de06dc98232a5b89b939
commit 6ebdaf20fc4dd98e7573dc2a926c81afc8ac7870
commit cfa1e7f8a75927e55cce1300c8fbda2e1d1e0abe
commit 2581c5d85e31c96dee352a751dbce17c1b71b417
commit 29bec1c43d7de6af60a34e08205db3b7c6048cef
commit d84f5d6562b2f068ec7011f50e702e8a60ec7932
commit 55453c0914d9b81e75c5c83adb2dd9382da2c79d
commit e990bd60716d64d18e8c5785865e15783a90cee8
commit 36ad2ec9802f9613f5d2a4fce10c9452f0a28492
commit 280f1884892f3825d2060df43dd1d452c585cd0e
commit 4e65878de0db0a2f6778b78e10fd3b71eda4e4a5
commit 6ccdf067206ee82a596fb89a28ace18b4e8b239d
commit 36527db318080d36138c802ca9e03a09e5a5fef2
commit b09c1fff5a9350a65b16af44e74c9f9335d9ef09
commit 7857825ba4671d053eb3724c7098bc759bf01a75
commit c17a34e0526fafc0e1e7f707c634d7e49dd08197
commit 8606cb1e68d17e24de660110d7042eb82df7a70d
commit 847939e3eda39f98de6ae95a5c5e0e1f437a274c
commit f6f76233bf506d03f3567fa229c7ad2ce6a768d6
commit a3cdb5d2c89c8005f50cd4c80c1dc75690e5fc96
commit b1bdb5ebb06ead49456ae9f23a12c7028076f9cb
commit 4b91ac9e389d177e8f1af5d4499c6025e866c850
commit 4bfd688e6508ac6f1cdf81c1ea91e3091fa93853
commit 9f6f6be163dfc4b912ff1b20be1841cce306b621
commit 0991f44c90f64c4e4d97982d5702ab18449c99d4
commit 94adb9933609bb3846261a688b28c2ba428f8805
commit 64e32c91fbb88a2f3f4ab697f538fd8f3f62d99d
commit f9a48ed7067734624c13077f5de16365d7bddac2
commit 606db591bf32a46a7dc3d107e13ba7ed2cf9079c
commit 093fc6110c7240def7717aa466192c2227d84649
commit ab23c5b9c74d682d81b0903247817b2bb20528bb
commit 6420f4ca68fb9dc3f7f5c1c27eb9a60f4b751bf8
commit e0b859cf7c099dbb6bd4b769268baf5b0a51dcfa
commit 93844fe7651c1f12206ac8ed8dc7d2eca72d90b9
commit 67ec7195747888e2ef307010541fd07304d57ed6
commit 9d84c7ef8a872253a9e8a9865ad5efaa0f8c05d5
commit 74d834044e2849aea1a75c4b3cdaf38917ed3c5e
commit f4f5e50761fd7a8b8ad8a4d6f2ac0ffe76ccd396
commit 6ec128c3fffcac8b05ed187e11386afdff4bacdb
commit 6b46251c5067990651bdbfc3edf07c2e16850a0c
commit 0f05a2e52862107aff6f4ffe8e8926ada4432c9f
commit fc968efdf0fc71bbd0e031b9ec071062fe469e7b
commit 7ab47ba22ed35e030cf67ac8756767228c591d17
commit 10f8927d74473a56862edd94390cbe534cb539b9
commit a60d2191371b4157c56eb502bd3f8d1038a5e35c
commit 92f050436637099db7cfa6e9fe28018d17d9ade6
commit 8e039cd176c61a9770e1956038c93738efc800f7
commit d9ec10c30e65df832180159217939918383e6b5f
commit 773562364ad9184a31e3192b268395560dbf2dca
commit f66f48471ba2f721695694c400cfcda3136ee736
commit 5bb71735668263403d560b48e8fd1dc1215bdeb6
commit de2b2ae34ddb5cd4a9c840f557b175b4c3c64f65
commit bbc9f072117efd5a81d81ca787855da63e7e7252
commit 6234bf13913fb7f62bb4ce2ced42fb81c524e851
commit 33100f10e2fb847954e80e356df3ef9e5941819f
commit b3235e8635e1dd7ac1a27a73330e9880dfe05154
commit 5b04aab6d49578eacd6d341e281c70a769f96126
commit 1ff673333d46d2c1b053ebd0c1c7c7c79e36943e
commit 7c1dceaffd99247bf443606730515b54d6285969
commit 13cc5123e9530c5895799b4185fb7a1a2e1b7f88
commit d9927abb4594ba940b3ed1dd86fa0447faf13a7b
commit 73c7a8a871dc9aa6b7876c1a30bdbe0f899eb4f6
commit d5f476edc5b58916d05a7a5b87fa8ecc9d847f71
commit a40a92af46113e200b9110c4040a465771d28b35
commit 9436ac31c73526b1e070c050ee83c3870125bf82
commit fe09f343d58333f5e761bbdf4871092c6c867ffa
commit 94ac32338e4f5372ff0bf956f069581096717885
commit c6329e255d06fa908321ddd5077b804b9b3275fd
commit 701a4ad97db690395237218f30875436f2a4b461
commit a3813175c4b50a0cdf3e72fba3d560f43b4c9ecc
commit 5ddb5fe9e5a5c7f518a29df22c2f5af62cc74826
commit f926464e59b7029b02d731a9f8a31419ff973ed3
commit 2b5692345fc18b959ac7bc11550eee3a6fed04f1
commit a4d002d7d0747b76c5cb8934c25aa745d91926c2
commit e7c69a27cb94a86c3ab467fd297918494605859e
commit 91a95887891f1ab791171f32de99e9d9ed34c888
commit eb11eabc5f26f876c514bb294dfdb0484bad28a6
commit f0acaf9d6912240cf1a27f0f75d04cf149086da9
commit 7249dfcb6fc0950eb1d7e0bfb8b642cf40f089e7
commit d51309b4e9aa79653b8343101def9ba99ba2cb57
commit 2fee35fc07462b900dc7730a92857d1f1350c621
commit 90b87cf2430490d9aa0ba0c2a14b4db8da0c4942
commit a434689c0adbf8986024e82767fd26b0e142dba6
commit 80b3842f21f8af1bac5750105f557b29af854291
commit e3e8148f43fb6d4347211ea2160e7de9b8ddde81
commit 20478b88071349ad3d7340dd1e3e714fb1e9b98a
commit 5da6d6c79297832277b34b38628991cec07bc664
commit b7d1559038b6c949b5a4eec77db77f3a78edddc9
commit b202ab6173af66a78c95a6acaca26f74d0c8a464
commit 0c82118b0aaa5113e39d875c296a416fa8ac6fc1
commit deb141510f6e55c6d5fe3b5b77fe3df8e57dce61
commit 6493d4a96fc3d16ae946c886f51b74ddfc58f204
commit a71e7d77fb03f61211d035afaf033a01dc443195
commit fe28c7c120d6c620283eeb6537c38b9902f850d5
commit 51b072de8e0f2d5bb562474efd81f1cef77e496e
commit 3047d7060e4db3b4d8f6f915db50a089662caf65
commit 4567084c305154b5abd427f568132432c41f13ef
commit 6d737d9bff5fe98e01bedb39ab9f5be3a39b5ddf
commit 3721d4fb763ed9f580d942f95b366c252c01633c
commit 0514b50cf79b22decce0dd2cfccb5671322e9bf7
commit 99f37216b36622343b8f1eb625921a9888054a9b
commit b801a98f81bf72884de2e6c8409fd3fea5cc3f67
commit 8482af4bd28b74853bfbba9feab1a28ce868c747
commit 6f10c4d62377c8a0b013ba98230abdae71cd7723
commit 03e067bc731c7cf8fba403ecfe4e2a85b49a11c0
commit 06bfa86eee805e49875a64a23f083aeeb5e39daa
commit a06289f3f72431f3777af95ea1226b5b0abdc426
commit a5810f551d0a8c83b4817b53a446bd115e7182ce
commit ff4e0cafe845110c9b7fe26eb8a6b49d60a1288c
commit 9aa320341e9a86c684ccf8c2e75ff07486d9bf46
commit 0538fa09bb1073b19b197509c51c55496091d125
commit 0af02a0e52030ca0b5acc4da6d3ee3303077277c
commit 169a32b76842c10fbe532cde6cc25e89bbf54341
commit 018a7bdbb090b9155a6509a0d1a684db4afaa5b1
commit 68fb37bc2c8ad05be55c1aedccd6cf0778b1442c
commit 41ee1f18ef52390518ed14b8be98640955d8f767
commit 09872b1c24220985c17e2d46737e1bb300f49ba0
commit 119dc6c50eb9974e9dc0e6a17d8207592309c940
commit ca4ba3394e2aebcee123055a1275980940f21598
commit afb50906cf029a40b713c60d8800d3ee25ebe03d
commit d9d86d085fbc104ea73a7f6da0b1a6c4086b709a
commit dc5f3829a752bb579f709c604fa2f362959ca2b4
commit f8bd73213a13b695594fac76cae67105bcfc7706
commit 425fede6e849df5676a41a520e0064fadc98a6b9
commit 5818eae501c57e003de9e4f52a6001827e123a88
commit 40ad3e545b3da75f107450d32bcad8346fce5dcc
commit 08c8442c4a032194d6956a266810bf109cdfc138
commit bbb860d46fcbde5881c93ed549445a85f2434a64
commit 828418259254863e0af5805bd712284e2bd88e3b
commit 72be7316587835e0c76dad472569453e902b562e
commit c322b422ab0f7b3b15c0cdd3f2c534094eaefcef
commit 60e9c7ee3fec7e4f40b1bb8e4e58be03a12c9eb1
commit aa44beb5f0155d13a24edc0ae94fc8ad1196132b
commit 63127922e15565861a0868561c1479c2e490b8e2
commit 922710a82d267b785fbc892081c01e68148afe3b
commit 32d1ffcd3979b75b6d7271a3028f4df2ef181a88
commit ff58105a47ede2e9f3fe6f45e9b1185dcfde7762
commit 7f908d332dc48a12436725ae326d6143a1a02c1c
commit e06a46087d8bbde7ca31361789edfe026b08fdce
commit 4e78d6023c15c6acce8fbe42e13027c460395522
commit d3a7051841f0a4bcb1ee26a1b721c6150cc4c2b1
commit 3fc307dcec8b9aeecae8c1bf2c97f770805daf4e
commit e43d5864f36ab32f831b1af7bc2171031e58e2ac
commit c312b0df3b13e4c533743bb2c37fd1bc237368e5
commit ce9564cfc9aea65e68eb343c599317633bc2321a
commit 25899c590cb5ba9b9f284c6ca8e7e9086793d641
commit 3c8b6a399e0eaa6ab839bba2ce9a2bc57e6708d6
commit c053383813fd17296db99cea78e058ed4d53019c
commit c0f50c5de93b8afb2281009a33c124e82973e457
commit 5e0e33f92ea5d891ea37fbc5119031024c154805
commit fe7aebb40d42bf8e830019d6f57c47cf7d85aa61
commit 483e3d87a37e804588ac8224aadd20a84593cafd
commit f89aa0b6db18dea3c3c8ef266cc6c9fd8dff2d72
commit f9feb882744f8dd3d7b52c3548bb6471ef3adea6
commit c2a6502f36248e9e17806d1342e4617d895960b0
commit 981f09295687f856d5345e19c7084aca481c1395
commit 0aedc880025ffed5be6736bca61ace31f591b92d
commit 8fe444eb326869823f3788a4b4da5dca03339d10
commit 5a1ae03fe5b7905b2913ada57629a2ef255629f5
commit 46d4eedab5a1fbadfd5dfc915a92cd13fb3bf325
commit f04b1d91aeec5f981b3a8f10b7321fed544d68d6
commit d48596f3ef2c0aa2ce7a106dd5ed99045d4ae377
commit ed1b4369fc550416b54de7ed78ee39ba8b64f88e
commit 5fe9eea5eda09a5b02398671def156e16162eeb4
commit 490d95c70e9d2debd2be0f7bda524c28fc009da1
commit 3064d01976cc88f9ab0625bb4f729ba5e5986584
commit 5a856cc22841d6f3202aa91fa5d4ad07e3c0a9db
commit ac7af83ae08b2789a828add74c01ed2e7b78e21f
commit 4182a311fbd83f17b276d94c44539aa97d381959
commit 22055eddd4fb33ef475f2daf700fbc7dd0f42389
commit f8cc091e05305231c8f747ca253a90ff0cea60b9
commit f1ee74afc1e303e69f4485ae677686e95a8bcbe5
commit 2a37630d0ddb8a0612b700635cf4827aeafe4142
commit 1645e7b9667f14a37f9ac8c49568b8f979227d20
commit 254fe9c106ed69245fbe0beac582054c98a91482
commit 2eef1ef6e22b241f26d7bf0f1554a9863277e526
commit bbdf7b2a0b0e69e4e18b5722341dfa6266d19390
commit 8ba1648567e289c90fa4f65b4204d0f160e22ac3
commit bc0d7fdefec62e0cb83c1bcd3c7bd033f5e826e0
commit 3675d8a1726337bd1e839a185e0a7ce0bc459b6b
commit 396369d6754993e40f1c84b2e22e40e92dfa4c49
commit 797e2c3f2762c356aadcdb53dd6bb8b8d966f7b5
commit c6266862de1665b8c8006f58612db2dea66a29f6
commit 7ae5ab441402b8165de4658ba9398d8378f7dd1e
commit e1a84ba850128b3984973786829e610ae4ee0e2e
commit 873fef8833ea794526b7f4179088e565078fe0e8
commit 8284bae723f025cb6a8431566757a3854a3c53eb
commit 8e3d857c70dd317cb71301d9b49f0506ce409a1e
commit 90f9617ab86063a5d7da628137f0b19826648cfd
commit c1bdf4aabc093f7741f6fc6f1a6e942b946283b2
commit 230bb131a6143b19a78031c64fb8f3b9320dc122
commit 5aea37bf4112896437176704049db2559efcb8a9
commit 5fd5cc73e449286bc54209a4cdc7db888fb022e1
commit cc6b2ba27506781acc0890ac1ce3bb2be154a21a
commit 831a277ef0010e6599af6b300140ca61a97afff9
commit 7fe194b2d1bdb9d17eabf1c5e485518a82c7aeab
commit 78c67d5fc371c82f890f5de7a20d7451735bde41
commit f8ad757e40c9c776a13eaa56d73e8e62381517b6
commit 68eb42b3f3b30df1a335b3139b21c32187c0efaa
commit 07d50b8222d0d6fcbb281393048e36e797334ac6
commit e6643298aac0d9d77696513722c85d7808e4c84a
commit e740ceb53e4579a7a4063712cebecac3c343b189
commit 4da7aad41c8f6fcccb37e2c95a07c84835effd7d
commit 580c00e64f121ad2d99e6f43796a49ea2cb4439d
commit 665ae9c9ca79bdfc83def0981e015e181ea463b7
commit 65332a5b9fbd5c72c0db009b17ef4304d4c242dd
commit 340b515c1b172e43ea47d5f823f876307854b46a
commit c61ede87b08c56cead5814ef92f0d5eda9759f0c
commit 9988db59b1d000c6ac7e91144f550603626593a4
commit e06f1c6022673245a68b22f72ba40250aaa7255e
commit e72df53dcb01ec58e0410da353551adf94c8d0f1
commit fac53471d0ea9693d314aa2df08d62b2e7e3a0f8
commit ba6d29e885e856f2d9222861e61c370e25f0d2fe
commit 6d9b523dac1491a87bb3f15375e153de34a481d2
commit 17048d89913c1713f0549aa47d63f2a4940545e8
commit fb0a0625f8516345f888d67bcbb96ade19a8f20f
commit 096e33f8ce4f4c82035edb532e8cb0883831e14b
commit 780244a2fe8a82424c85f4cb15e45d0bbeec8f26
commit 622113b9f11fdaeff2cc17f684fb7e4968fd8a4e
commit 3bb6a44251b4d066d73faf43dc17bad05963ae16
commit 04f7eb3d4582a0a4da67c86e55fda7de2df86d91
commit b000abd3b3d2f06e9cc60c19dd4c893cb3531d76
commit e95132ef5d458b3e9d75acfbf4770e8b34de5315
commit 665a7b04092c5671f3a6c34302aa1538948b4666
commit 0ff0e219d9b8db047d3e800553f238136ed53ed7
commit 27d06077d6e064ab5c02988d14bca4748045d002
commit 5a72df3a3290137f6fdf34f23ac617ca35262c76
commit daf195faa5a13972493d3a434e4d2e86ece722a5
commit f7ba838cf75b348a3a8b0d11d347c964fdf870f3
commit 3917c9d3b2171dc838b486f7be6869525c6eee02
commit 74d6f31fa427b87616bc65987a8aff460da1e670
commit e6f29923c0489b6fec1ac000f2c045df43ec081c
commit c46af5621adc766cf1a7cac300d577a39849862f
commit f2c9df101095bfef7682caec8a5fa7d4f3b29182
commit 758d7b3483b6eae4e0d52dc18ed6b4ed8fc1330e
commit 5d832b6694e094b176627ed9918a1b21c56fb742
commit e2a5c05de6753781d69245da871f58fcae6d0bb0
commit 55544b2811a6c2cac9a823b1bfda53344322dda2
commit 42a0d256496f4526046b9779ea6e49018b58f779
commit 3fecf93c86087d1e1a9db28d3423db276639e776
commit 6da75526fc9edf940c12a785cc2fdeaf22101cad
commit 0173ce114dc4df73e0ee3e1eafea156b7b26e719
commit 6d6e732835db92e66c28dbcf258a7e3d3c71420d
commit 1ceef996c99f1e8a44df8714fcf12822353ac488
commit 0a80005d3c5fea0a21fa6553724c171495ece9b5
commit ed9605a66b62f27513aba1d95f7d470c4abda29f
commit 53593515ec1a4a5afaaa88fd4522bc4c2d7f5d9b
commit 2a07a5ddb135e4bd15bf6468b7d2daa4deeaf07d
commit aeb76f97fcf5bf6c094c62ac5cc22a1949751236
commit b13fa27a4b72caebe99bd483092479c3767453be
commit 046f4f0af7fd1fad06793d863d288c6b2cd84e99
commit c5c354a3a4728045e1342166394c615d75d45377
commit 2c2705bd09730dba6017b26897a2bcd3c5d21557
commit fa47573b04a35078953be5f81a78f22c96358817
commit aaa65520280e96dc47fa5065b74bddff30279abe
commit fb34d8a04e5876552cd0d4f9e14400ee13f116fb
commit 89b03aeaef16f8ab48c10c399f97c836bdbae838
commit d25654b3fad9906ca80912701fd4bd6e2419f54d
commit 216b9bbaeaea96b7f05c220f61855d174be972d8
commit 385d1bba890f9b94322ca7fdfa778311f1ea0813
commit 4a85b0b51e211fba03c081e1e47f8871e4b3088f
commit f2912237eb922bf2d4ebf13f3f5f1b25070f1e52
commit 6f3562b3bca078b40aa198db8fdc68439b7b0399
commit 47519d8224babc9dee489ea96dfeac726fe544cc
commit 213cb76ddc8b875e772f9f4d173feefa122716af
commit e3d8d54cd6c5b29f3437f1f00b393267b84d650e
commit 5c4d2536cfe105694b7045a8d7581631f44f391d
commit d67287769e93da7fd4b0ea1a5ef14f68c2cf527c
commit 2d427248aac4e4c8daeb1a4e021f9e22eb0c8e6f
commit b5917a109f1630379e83a37bbfa55a9198d50c66
commit 31335aa8e08be3fe10c50aecd2f11aba77544a78
commit 68d46e52092d9a94370d44cf23db58cfdcc4fbaf
commit 60017f34fc334d1bb25476b0b0996b4073e76c90
commit f16bfc1d5de082f50ecf87eaa98c357226ea06f1
commit 639e30ee3950dd77606d91719ba85df27b882f0e
commit 45474ca4814f0e8d70a390b47afd607cd682b976
commit 9ebb80e80e471fa314b9bbf0a031b3bbc7b511b8
commit 70fff19a570d4c9f73ccf0ca8c8b261b467d2491
commit 4ecd56fdad5681c7c89483c26b5130977ace9fa2
commit 6438452de4412785636e803aff58fa2e857dc6f2
commit cfb0fa4241257b73f2a074f2563af9a8704b1b08
commit 1c66a12ab431cda82a1dc53fc0bcd54370014755
commit eefac38ac4a38ad93f136126227dbcd35dd3225a
commit 29063c6a6a57b8e6ea932ad50728b382ec1ddb59
commit f0e2f00c49db0cba1feff7ce5a5f163d2152056f
commit 03d2c54d30901916addd50abb0a2cf871965b8e3
commit 51aec8bf16338e5d7f34ebc33b173b0b9ce20973
commit 8c9c40ec83445b188fb6b59e119bf5c2de81b02d
commit a791dc135325862fdf491ac088f54993710e2515
commit ff21ed39ca68257aebf42b23afcbc2db66dfecde
commit 0b3ed50eee5df65e3200c89db7f32f31c6210333
commit f9e932a83ac0bb18ff71014d912af9c8e4d8eab0
commit e5d464d02f0681c4677c0bb5f6c0a70c8be78ab6
commit 40151be79668232187b1ba7e00983be76a7f5845
commit 85d53200507916955be64b1e2cbca713b8ebe3bc
commit 825477e779121342d12e3c871a5e7487530b5a5d
commit 7573e6577f7744fa6c5f48e5f521b780c97991ef
commit ab30464cf0616d0aee00df899115e19051471281
commit 758b018aa28342b5c54646987f8f6ce675cd7bae
commit 1bba5543e4fe7f60480fee370eb260618ee98282
commit eccfba1785b52887d0aa4d2940a396afd53f0054
commit cae5cb0cabc4847781fb359d98f7e1d9c7a7909e
commit f4a2f273033e059de2266aa10b6459bd36b92223
commit 4ff0856db045e1b18074127cc7222c481a99657e
commit dd9b18e76f0434e47ee8f5243727c79a66a85243
commit b78e5d830f0db8e6d998cdc5a2b7b807cf463f99
commit 68ded02cb2c23f1aebf026196a793959bd0463dc
commit 7bb91228291aa95bfee3b9d5710887673711c74c
commit a4a3798f0077a1584491574027b0067c13396d12
commit 1ed1f6be6eb3daa8097d6419dde516c9854a8790
commit 46c676600c715f833b066581247cd5a461e03441
commit 7a3f8b7c4cdb9d678d6311ca93e6b793e8957295
commit e1f84eef313f4820cca068a238c645d0a38c6a9b
commit c969c5fd21fd700b126aa139ec57875697946474
commit 23fbdb07d6a729dd6a1df8e0cdd5772a5935c053
commit dde01ed5b07808be13d4469f90e578ff83774c25
commit 62a21a7c6a1cb7030eab8d64427d93b97cdeedec
commit 70296670f672e470a5b42f72468a9fe631264070
commit c73cdd12de96ac4ae175b5095b5bdab6af96fcf4
commit 9dea5dd0e9dc65c9f5fd9390062381b17ef242b2
commit d27ec594b48d9d2842af9e3fdf3159bfdac1b1f8
commit 34dfca890835ca9f4a59c8a2ff6be8c0513637c7
commit cd3a49af58c23dd5ffa1d4d5a120ee2354d2e8d8
commit 0c89abb25d682f34582ddc766e7e3629dc8e168c
commit 3a876060892ba52dd67d197c78b955e62657d906
commit 2efc30f0161b064f6918316ecd486a8e3feee10e
commit fc0cd4cd1f7fbe6b0cbe651a8b6db6ec5476c949
commit 02bcbd6bfc5932d4300b017dcd2ba7e7bbbffe79
commit a92bfda8783729ac684a0f005a1680602ed1096d
commit 8a948b1b2f2bef2444c403a2884134d46100ec26
commit d4242216dd792b2af6f3e6738dfa71cd50bcd791
commit 79c0d7ddcbb84b2a714620a2abc5016529fcc38c
commit 556bdae320b2b6db124738eb97f2624e92cceff7
commit 826f03b8ac7a9c4660de9b65a81e8926c60b3b97
commit 2f4ca1ba6c9e7a4c2eea2ed8a378817ec1946f4f
commit e7c94bfb747fcec57528f89e53a1461b48ab06dc
commit 65529fa32c60ea15514e99b6ea12304aea732b67
commit 49791b988ac78531ece312043d0113ad1ff9cf0f
commit c3db1b9065d08dac7dd602301c42641dbbe89990
commit 158225294683310566445f8477336e747b74f03f
commit 6da15a236c8c80d9f87e4c5216e00ad8f1cace2d
commit 17529ea2acfa3e2118f5a9ee911e0daf2d88c13f
commit 4f76da231826190658d19ec8d89ea8cd46fdfb7d
commit 615268d4935082ea64729fcc8a35af394ff90e7c
commit 41c81dcf599918c53e08933a0b0a522508eb6019
commit c7783a6ed4fcfad9acd353a087384d31d4cf42b2
commit d3d4211050665442ce50c7b5e837b9031ee85b33
commit fe77d95f7a7f2f567205ce747124efa465fb01be
commit 94caa423e2b5658626382ba9d98f989a47bd2b8a
commit 827e3c9caa77d358a824c3f302032ad6c9d2ba46
commit 34e205112ec078ed1b24e30d90af81e43bc12f4e
commit b8e13105b7fe9a0adf1dc7dd3d5d0647962adfc0
commit d56e38d51cbc902a27f8b2ba244bb6a8950e8a7c
commit e7dbdfa226ce621931a84f60e885d42c232fb990
commit 247a94a627dbd9fed370b575288b874ef4a01991
commit 39fc82b7e031dbf5145de485d66f4a23ef711786
commit 43080c9b7536c5cbc53c5d8c74027c92c7e0110a
commit 5c1a431aaf52bbba8b6e2c4e9b4037a09509c0e3
commit 3b304bced035fa4e1144d657b4687238be931806
commit 61e4de65b99c616d5e074a9e2a4a1a9f821a964b
commit 4bd09d7481047500fcad389251e13946c083b9fb
commit 34955a1e797d074e72d0ac6a514d934d8fe80da1
commit b04fa59a51e80eae9883a419e41b1bf8179e5a42
commit 410e747401a3121cffba6ecb932f5df596799550
commit 70c04ad8441a60ee65ca2e1c40fac04882ba09f8
commit 419c14521e0b090e82353556008833d58c2efde1
commit 1df7e569522486e58307929a726ec8f303c5abf4
commit 3b4e83a232244e2fe911bd39b322e0dc19b22434
commit ab2ac59c32dbec068954de30eda741d012be3c74
commit 1dbec5b4b0ef319d6961d3ecb7384b4f9ef9d358
commit b0f4b23fc3dbd8c5398e9ea9cf1f16a00d9006a2
commit 9b94c609cc1757d5cd4621dc15ba73faa492b99e
commit 736ec9fadd7a1fde8480df7e5cfac465c07ff6f3
commit dd80d9c8eecac8c516da5b240d01a35660ba6cb6
commit 4247084057cffcd8f9897110d8d827d550858dc6
commit 88c98d54b220dfec0b8e4a4400f6822aea5a383d
commit d4e8ad908b2095388a300b19d76b78c170052a8a
commit 221bb3a9c34f8004c10ebcd0eda9d74354d519d1
commit 7136f956c73c4ba50bfeb61653dfd6a9669ea915
commit 1e0301e127cfc708c852278539e0bbd4c77ccb09
commit 1a468dd88a13b39dace8b5eb87a274782a56cece
commit 7f0eac6564dc0967fcd430e0b729068afb70d60e
commit 0cdbffd55f11ab39e5f8902860cc48ae967cd1b9
commit bd7352332b60a5d2fff625332acfa2ad96e0ca1c
commit ee10818362d81ca1796cacdfb8a6c6f857cdb34a
commit a2224f2d458a093486ede49e319a32f02d99ef16
commit b779e4b973b7001555efc9120a7f07e4ae554d9e
commit 2b61e16a3c875f65e341c3769ef2c80b87cf45be
commit 04e6fcc1b374c28e53c1b3f8b60b935a056c369f
commit 75cebd664d57a78af3e46c14bd2659df0a08847b
commit 69a3738ba57f4837a7632064b2f8c567282e03b3
commit 95589cec1cbfe260ab03281c310e4c3a5947c84d
commit c9424fa1f856eaf09e09a3381fe998dd6f905bfc
commit a062b8cf811d49b7ba7203d0ec5bd9fe0b61c66e
commit 25e4b26672a0908078e10733eb20efa20800e534
commit 42b2bdc8c478a705a9642c85d8b3802f5516447d
commit a108772d03d8bdb43258218b00bfe43bbe1e8800
commit 3f1a3a28e9e00a84705b62f0fdc5e31d0f935615
commit f5e92d23f51ced4f366b3193822f705a08beb3b1
commit ad74457a6b5a967641c80798aceb71503dc2bfd2
commit 0d6516efff2cf275591c57faadce249257d58980
commit 59c43748c7c82de9fb537fe790cbfc71734333ad
commit c1c39032a0748be08f6bc33a8dad70b83ef311a6
commit e0f1d483b85bd35ed10985e7d3e64386e4e14e50
commit 668562f49dc67a16e3649432cef341d1649c1109
commit d67927e4483811a23bca1a5508de53d289df3209
commit b70cfd91a980fb423299d1c48f4127d4b7fe79c4
commit 9e33e951ecafea581a5d346c56cbdd00f58814ca
commit c1e48e36c120df7e3a3cb39d17d64c753485f225
commit 73258e916a4e7e8adc9402da68ad9bc40dd38686
commit 04206ff06a849834e1feb21b51735fe673a3e484
commit dacd2d2d9d800b7ab2ee2734578112532cba8105
commit b167259a12f2c49e82cbd077499df85117177a39
commit 961bcdf956a4645745407a5d919be8757549b062
commit 851d635a0bf2a741d0e57889b5defcdf9ebfc70e
commit 4aaa1a98331c9f9fd31f4b80b913c8f0c556c90a
commit 5d53f4c22d367b214f6f737db5cbe6f4a86db747
commit 29a051bd468cba31c227af579a7c57f250570cfa
commit 1416b5473d34d89a85c02889b724f32b56ef12ea
commit 542110f21d811f0fbc661bcc9365e45e23e8d422
commit 21f0b7dabf9c358e75a539b5554c0375bf1abe0a
commit d1e2d6b78ffc0317b41e1465b47e325e2765e5e0
commit 8adc718881e0a70127f8843dd70e69a80de39352
commit 6ad9aa476ce23be45de9dcb03edcdbfdf6117c25
commit c85d00d4fd8b98ea4d16817f397a4de5e177afd6
commit d62c43a953ce02d54521ec06217d0c2ed6d489af
commit b96fb1e724ae6839d5bffcf42dd3503db7cc7df5
commit e4dc45b1848bc6bcac31eb1b4ccdd7f6718b3c86
commit d819524d3144f4703f45f473fdc85ad7579ae94c
commit 8401bd361f5991ccfe9377e502fa37203ad70320
commit 770e19076065e079a32f33eb11be2057c87f1cde
commit 2830ca9e5b98bee82f1d1e284ce23fe7fb244ea8
commit 9b6a16575ebf23a98a9ff84aedde9f3b25731714
commit 49da26d7b418cfc99ad2473a2e3dee2e08c5ba4a
commit f3b173e9094f5b02fb92d641e3e71fee0bcda73a
commit d35a4bf66079b92e232ac85b08f19312be9b7eca
commit 672c473576ca5c9f5a40ac848c938e6898a5aac8
commit 74f481f187ce8b37ec5143cee19147da5243009c
commit e10ea7b9b90219da305a16b3c1252169715a807b
commit 02c830b3719280be4c43fe78f24fbf5db4192f91
commit 549eae27743116da08a7846e09f1e910992af655
commit 1f90b1232773249d924868bec3c31525a69fd482
commit dec4ddbe1d4a4414092309611cc97e6b9dc7ec3f
commit fbf3093466d05461e3f307ffe6b1150daa4b065b
commit a7b98d4dfe68654641d56cdc7eace2c36be93a2d
commit c989a62484ad75e0a06f2ffe67886e7cb6d41659
commit f47f537cbaa48427039f61256f68ce08986d8eb4
commit ed712d30a9d0b8a59d6ed001cc7711d7b9c5ce54
commit 3cc3dd73c420dc70cd366f91a680035ef47edf4f
commit 3913f0179ba366f7d7d160c506ce00de1602bbc4
commit 876552e5d50178cabaad015a464f116c1944739f
commit b98451dc7a0fc4cf235dc09483d7cece362d9ac8
commit ed2eee42d36267bf9e084d7a13fe5c0100d1c64b
commit d5c6ad72966aff6df9d969095b95478efebaa770
commit 2f9d510f810cad1042c6857a516177295eb3b42a
commit 670c6edfbb73fa94026650691ba23842ef282a6b
commit e6a7746ef9a6e11c271935292e381acdad607c9a
commit 6ad045856f7d7d538dd4904a10470989c8f6081f
commit 7f89f9973cbe7c11338f69bcf134de157747d20f
commit 8886200073ee037027d727c2828d881257e28e04
commit 40e0110a85674ea93614a5863b852d5b3bb6e445
commit 822a9778289b9be9f29b02ccaae81d36c979f40b
commit db62b2b7893f724e5032229443b03e0494856aef
commit 16e5859d9faee7b839531e7cb8f4e98954108c75
commit 710080a3794bed269533093f5d2d9e37908962f0
commit 064841347d75e094fa2bcb5b997639ec9e5f9a5a
commit fcd3e58f09952d836d2f491444292be2d8bcf7c5
commit 7ef414375fcc001b6d0745d2931d91c9c736e18d
commit 82bf0f18ce99edfae2e5b4f753e6b2e774ee6226
commit 22c42b0ec225c92db33e4b3045ad15baf1427cff
commit 62f0576c42993a442ae722fe2e67a140e4669945
commit 47c2790ad69d1f072e7e26dc16bb91e99dd4c946
commit 10faf07871b257c46baea0d39df585bade6e9266
commit 9c75891feef0f9f67cf1c8f8038371006e25d23f
commit cc67aae1e3a330e18ead512b525b8721a3b05a6c
commit 6349c73859cba2fabd77494230306ae8a7e45b33
commit 6eef37460584269b240f45aa47ebb61aae848082
commit b0d6de32e30c635aac22e52357b090982d94df52
commit b0f5b1004ef8fbdd7cb314fe0bbbc115beae057a
commit b81fafb9360f8577f660eb996602a7a58106bb7e
commit 1591a6478fbc61a0b30765a3c2b222fc50db849e
commit ba5c07129896faa2a261d57ea2176841fcff8723
commit eccff6cdde6f47dcd88fca8c638e0d651f0e09f8
commit 441595baa55ac7b60fc9a344228faafa275f3354
commit c4c3d87be5cbab46039633731d8c5fb203c7a95e
commit 5fb78600ec1504d30a7af7b0fdf2f2e6870ddea7
commit e7f2f4cd67443ce308480ca461806fcc3456e0ba
commit 796d6a37ff5ffaf9f2dc0f3f4bf9f4a1034c00de
commit db25e5d51f58add0740b17d8ea5cfd4cb051e3ce
commit fb579c4229d10b0d98c37ebfc5087863574a2524
commit 0c41021cb812d1492b426fe8d0435cd529771ebf
commit f57da8c04f183f90cd450a5d5142109fba340417
commit abffd871d4862f9e77979708d1df45152becf8b4
commit c1143ca2d523dee0f6012638068abd202a50a42b
commit 2447ba5bee91527d3d49c5271b6c34a84fc67bdc
commit ed2770038bbc67abc60aea0108b698be3bc93e65
commit 63423cf109d8308faf5d5946b1f57f5b0d6ae8f6
commit ca86bbdd9b47464d78ae6af565a6e78c6e4e2fbd
commit deed8ec482a6e7e84dd5bcaac5f77c75bd8093b3
commit 6e602264b9a8adb3133faafdd06ba0f70716a2c2
commit e294bf36bd9b000defa9f80f054ae355a4914b0b
commit d1a4ae582448a4afe38b7f117523fa2ac2e96599
commit 9680810f91f2591b16b76f73d1e0d49af874be0a
commit 8bc14183988849e99046595785ceadbe0b88f7a7
commit 4aecd050a825c1bace2a35326b4c8faacc9ecadd
commit 66990450e3a0b6dc7baeea8f69684aa5d3ec2ba2
commit 8434f8180216a9c6ad498c5f50e05a2cdbf81e03
commit 41da5fd2d93fa44946cd7d202178f982cdb587d0
commit c09a9bee6459eb6976b6db3f33d2776243760d3f
commit e4cf73fdfa420eb73507cf95c165d5d538d70d76
commit f5c7e7797060255dbc8160734ccc5ad6183c5e04
commit 83d29a5f8a5a8ac76fdf8b8ccca65899345e6a9e
commit a6ad27cec585fe715b95fcc930cbc460c678080f
commit f4b92fcd740d7c90eb7b011f22deab6192ffe44c
commit 4953b6b22ab9d7f64706631a027b1ed1130ce4c8
commit c2b08e7a6d270d25e8041510adf82b4a657142d4
commit d4423feeb7d316f1a31a5865a21b195940d4d7e9
commit ee34b77f681e9656d229b1df48ea67f019bb6335
commit 7221941c4f3249f6e67090820c827326e2e4459f
commit e71def057252c0b5189618ecbc7141b56db4a74b
commit fa0706e9775c10a9028e0b8d74c274cd4a179fda
commit 02d6f9a13ef3316da5c64540c5a376f07781c853
commit 71dee0361bd04f31c37525e69817654c6e23c97a
commit d6cbe630f3e9a5b11ba4082ff980ccc094224610
commit 110ae8a21bbe779a133c1672a1463105c9d50590
commit 16fb4dca95daa9d8e037201166a58de8284f4268
commit c05d789fed948ed6a45963ae0d5d79c67b87aebf
commit 68ce8b242242651eb3cb4ff29b79c44d02f752c9
commit 4624459c84d71e0d5f94ea6a7b2c4eec4f1d122b
commit 8522b42aade9dd0a0659c94095094a41e9664309
commit 0b844b6ee28cb99ca387880435044cb55a51d73d
commit b091fc6f8e5bb27577ffb71087f06730f33a8908
commit 6974340554d227ab6b8ecd933581857b227f632b
commit ca07f4f5a98b96211a2a8fe51b35c039720be888
commit 25ea501ed85dc3c224db73fb79d38b6109c1ad99
commit 4bb71fce58f30df3f251118291d6b0187ce531e6
commit fe6f695d8d03f98a04f6ce6f6e8eb8e4d0c450fc
commit 48c35c428c7feb06761dbc398139eb7e697c6608
commit 72ca70acc7658b99ec39b75971002fb1c8d48c1a
commit 47cd3af67de0bef9d50e37197dc307ce83768142
commit 849b1f33437e223c0933b4aa803356542386a989
commit a40c7f61d12fbd1e785e59140b9efd57127c0c33
commit 0479956c94b1cfa6a1ab9206eff76072944ece8b
commit b38e77cb7bebd341090f99021cefe6cf81604971
commit c1806d78eca8df6e9c6d07652e1a0bf1c4669984
commit 998debbdc8f49bea4ea8bff9852faa170e996bb0
commit 757eb2bedd08a1dde6dbb67abfdddef8d8a2e882
commit c2dbd69e7b3a02b39ebac262c8c6c7f53df584c7
commit 3e43b760c9e14fc0b7bd553efb01d9ca825cf338
commit 0641dbefd4a14eb262583a595074431ff1ffd270
commit f3e6173b4bbdd9116c9a085998d237e1c2724a2e
commit a97d0ec8bb7cb044d3d7d496a12704daa17dc636
commit a0d9084d7f6f5ae911b40d13ce33055b6c7aaddc
commit 435d6e6f02234ca0f2df88f4bdc2297da1529379
commit a5ddd2a99a7a393ceb023b83d7e78fbb3284bcfd
commit 39dd0cc2e5bd0d5188dd69f27e18783cea7ff06a
commit fc44f3636a4db6544fd1532280e8adcd1ef13ba2
commit 19b5e6659eaf537ebeac90ae30c7df0296fe5ab9
commit 461a4df2a833bc6d83139ecf117e2f844f38f655
commit 9f4a57148120bc9178922445409836d9fb102aea
commit 43bee41415a6e70719dfabfa52a413064c3cad51
commit 9d6b59478cc57469f57c57a492aee732d5ef094c
commit a70abdd994cb0e799c131d3db2821c02f85422cd
commit ec9c88070debd8d87335f2468481a41d6bc2d0c6
commit 0406faf25fb12d29cb1823e641c6f3f3e2037735
commit f158936b60a7874f29cf8de8d83191ad69119c11
commit e820f52577b14c63f7a15f534e17088d3c6afa6c
commit 84ec67288c10fbf136aa050d00b0fe7a89655da0
commit ee7d633f2dfb12bac90898edf2ceb5f43a4957eb
commit 95a77b6331c2d2313aa843fa77ec91cd092ab0e4
commit 6ce6fae8453687e39e564dc15b6142fe79d76ad5
commit ccc2b496324c13e917ef05f563626f4e7826bef1
commit 16deeb8e18cafd30e70d8dc2b12a753b28298d8a
commit 4aef2085613106d0a3ce868a45f080babb4e3478
commit d6d36cf2f8efd78455286050d6d8f9a8969d63b3
commit c7bcc1056cff6d99d173d4707057f3dba94d32d9
commit f683b9d613193362ceb954c216f663a43c027302
commit 7bfa5c7b28d66d89daf0808bf36ab7fe0e9e93a1
commit 0055e45d837483d644b868755eff6091b5b51ce0
commit 7fcf19301ef745adfa9fa1baa7b829c77dec5e22
commit 52a504e868e78d866ed204be59be96abd62dc69c
commit 4b5a51e45f296f0477485cadd1fb7e03295cc455
commit 25bbfb930716390405770bb79f0d348ef93c5a7c
commit aa17e57e5c67330c36d915da2925ca27099c096a
commit 86a4e84a9d5247daa2eafef05078ae9f3e003bf1
commit 47c3d0752bb6b412b8d1c08a1e88738fe5b9829f
commit a50ab1bbab26b26fa070e83c47687e6a0bd52302
commit 30b1a0797e0bad14f95d349b43e3df3a157b83b6
commit 09d6838f377e273e112bb20eba1e569c62e1ceb4
commit 8397d2984528b838bd4a04af3173049426d2ba28
commit 43113fd4c5f562b47da68927b9ec2369e1e76358
commit 2f24fe8c54cc8d7e3432c17988ded0fffb192c1f
commit f3f716ae5d827fbbdf994c9d5b05d05fe33c8ced
commit 453114319699b6bec2f2ab9bd87617ba25f6215e
commit 45eb009f8d1d3cc38de9c3b5be20301a2aa9cec0
commit 85f17d677f6c40069287617630f202eb20fcfe36
commit 5b415212686a0fa03f9f906a0c8ad2410590230a
commit f6f8bb5989a362d1c5f613c4487dc7adb8627dfe
commit 95d8c67187bcfaa519bafcdef9091cd906505454
commit 907cc346ff6a69a08b4786c4ed2a78ac0120b9da
commit e8573000f4bbb7bfe48da5de5981e5dca048c433
commit 019d157e5b0355b4da957f262b3eeb3b7a948f8b
commit 7b4d8db657192066bc6f1f6635d348413dac1e18
commit e3e7f178d4d82743786d5a002b714b5d516f5870
commit d25404a359b24a887db56b52064b754f79921bb7
commit 2ab69739209c843a47af82c0620036b233c83688
commit 88b61e3bff93f99712718db785b4aa0c1165f35c
commit 39a35d52d48402957ba915a9d50b2d77dac45bb3
commit 7c32d4e37ff3595ce947e4e0a2f098fdd05ae7d4
commit 642c0401135d9877d6888fdd2b0fbbee3b134409
commit d0fa84f174770679ea22076f4f754bfde2f3f0e1
commit bb66ecbf122cc5ca52c569f0f84b5d1b2c00f6b9
commit 629c30db7c6812fe82d2dcc0110c9e994a831182
commit 74365388999386d8becd147945a714be2c36228d
commit ce754eb9392ecdf1e843b209a643c4d5fcb2d7f3
commit 425ad8a5d3b09f09256e44cb6b55959b18c15618
commit ec71b250170f60986ea1d2feba6d3b6a63bb1ac2
commit 93cad722d3fe546744bcc484c5945d09d5f22d45
commit 5993e4c68add76bdec1efff1c534b8610f69ac05
commit e268df1d20b89d1d448277e16ce1720887e8bdbb
commit 15aa13056d11dad1e54d65acd854184f3f74a5b7
commit a2d3b4b81fd49b14782ce0ff68ca74e40f16609a
commit 108db8decf0e5ac5f7b64967f434a32125b75bb0
commit 52642d13d600e7580fbf4c09dfaf15e187ab1625
commit b077656b8c5ec9ac238782e20fad42f6d6d299d4
commit 167be8522821fd38636410103e1c154b589cb1d9
commit 82806c25d5e9d927ecb68c0c3679dd41187c9af6
commit 585a82618bc422508c0c8ae0dfe2f76f22c28361
commit 7971b5c253cb1b3293dd1479f4912899021451d1
commit 3e9cf23428701f055765d66951b01286f94df056
commit 202c1e3dbc882c9040208223c12d158286475084
commit c054375159802704d099986f03d0b7d21b590fac
commit 97d8d6f075bd8f988589be02b91f6fa644d0b0b8
commit d3d61281edc0ab0c3d566e760d5bd4db5a9c217a
commit 7712b0a7df76447515752afcf8ec470b17ea30ef
commit 936675464b1f481ad432d6a4fb75405c0abc71c7
commit ec55a1c0813efcc8629f4af8e17b6da5265642e3
commit c55bf690fe79f04cb8ebfe34144079777021cd7c
commit 567df29f51a582ced8d2f56c7f531757496fe7f4
commit 1f21390ec6026da538a71ac254295461be7ee0c4
commit 3267b7c05bb76f8eb6da90ae0f5b0d523b9f611e
commit c02e6444117f112bea468d3615ad6293cc7de64e
commit a6135ddec2258cd52b5c8d20b45bbaa29b80c5a0
commit 5d4b5914607803407c1bd3fc8483f93a67cafd0d
commit 17caab0f0b47d53ad02e20673b51f30a6a16025a
commit cc8dee689a6bced98c8bd83ffbf4b2041641a860
commit e18d9839b174d6bfa0d620293098b3c6a441cc4b
commit 3141d6cb64e7a76af0b87e1f28c54d67963db871
commit c08978577a7b17736d9680aaa7e0d22dc775c326
commit 525a65c77db51cf5d6c6d8e3f8d07efeb2270416
commit 5caa63c7b7e1cbffd5095b7c884752aa7228b7ef
commit e32df0c7ecead95d70ca89f39b1b2b02a59ff691
commit 1e939ea1bf4917095575fe4ff1a42578ff234605
commit 047783cdd5f604d87398236beb4971abb4d43293
commit 18b85e98e10d9cea5c23b710e78c5f68897fb3a7
commit ce438e99015871b9226c27066fe72fc05f18e8bf
commit e844cc250f33d207077d0af9337484d6c94048f0
commit 415be17fb2f4a70afc827332c936955b801085ad
commit 940d4dd402e97941aa0a92436cc3d4c2d7c13157
commit 9e447c811ab31cd69d8fff18283fb695e1ff59a5
commit 2d89e2ddfd00ca569dd73883c7c70badbd57f4ac
commit d7274ec723cd0c2359ef75f84deca462a60c5025
commit 5d8c3e836fc224dfe633e41f7f2856753b39a905
commit baf28cc10ade932cec707e3fd723e6c2850efe3a
commit c19a5f325a7fb5b353976d66d6a92b35c0322138
commit 1014bd1cb32552b732fd0f6ff4e68f32188d59e7
commit cd4c99f103af5a85fcae5d31a9e85361679ab979
commit 5e1fdf76cf9b1b764d6061d78c29901d774fc061
commit 3ff4ccc3e938159c47c4dc3ed8e2b964c3604b50
commit e67135571e4073e1ee252f839d7a1ccf10f89410
commit f61a825aa86115dbdcaba25bba78e007b5e8e1b1
commit a79852a39332614d30a0f81785803ba72877a575
commit b55002b9b575770fc0619dee8f6203697054c861
commit 4c3386f64a432b3697fede579d06f9c1058043ad
commit b28d204a7c19231c0a37359f82dc8c4b234d1d16
commit c9b48b91e2fbb74fb981aa616a6ef3c78194077f
commit 0bda8d828f3af92c37d7667d598dee77a64cc46b
commit 0b37f47494099e74b3cc11d71a763b36b70ea2b7
commit 730548ba023113a15e5233deebd49ffbb02b7322
commit 8a7c3ce108544334a9c7906f61d2701f433e44ee
commit f423fa1bc9fe1978e6b9f54927411b62cb43eb04
commit 54b978e03a3ce7aa3b40deeb1b4c0c9dd6660aa1
commit fb443f36f3b9af6a4590b6e65e2d7affdfe0da18
commit af4e20d335d4414814030ba26f1689884c831269
commit 1de2e7e08e8cd0f281ba9f079a25e72543fe82f6
commit c56453a00f19ccddee302f5f9fe96b80e0b47fd3
commit 484b2b9281000274ef7c5cb0a9ebc5da6f5c281c
commit 070a2855900de17b1e11a0dc35af9794e80f1a28
commit ccfa6d35f9233702c924316cdf40c05b6ce88113
commit b2e3a1af8cce4117de06ff1a4eab0749753ede27
commit cdf6428dd518435a05739abf7659589de30970f4
commit 4ae9f874dc1d662ce7bfdb8144903608bcc3706b
commit 65898687cf7392c372ea8d04a88617e2cb794465
commit 98828955971363e838149105c268b1fad905f15b
commit 1aa3834f510c9d9206ce4d40aff4903b0c016761
commit bdef2b7896df293736330eb6eb0f43947049b828
commit 89345d5177aa0f6d678251e1e0870b0eeb1ab510
commit da44c340c4fe9d9653ae84fa6a60f406bafcffce
commit 062e720cd209d8091c4f3d118d93973f02209aca
commit 290aac5df88a83e264b3a73ec146e5e5b3c45793
commit 0bc79069ccbdbe26492493dd0c4e38b7cadf8ad5
commit f2fbc72e6da4f8e01fe5fe3d6871a791e76271c3
commit 685a1537f4c603cfcaf4b9be56ff6a571f7ddd08
commit b86406d42ae3c41ae0ce332ea24350829b88af51
commit 7fb68b6c821be7165d5be5d8801d909912af9159
commit 7e6739b9336e61fe23ca4e2c8d1fda8f19f979bf
commit 91954c6c904b515baafaee6a1f35c94409a3bb68
commit 8ab1d7a27eff87001ebd0977db600e4187f63f78
commit d37f379ad04dcc21ebd1d2380c3bc979d54f7c46
commit 8abbc4f768ddc5c2190ab8966e529cec42b4b2d4
commit f7367b5fe0e38af02d6915a355f2ee63b172c9ac
commit c1969fbaa57d88ddef626bb8ae313d38478d8631
commit ab5220bb5a910246c61512a9e29a4e2406cb1ecd
commit d35e8b7ae01430b1e722547b2ef40f42dc30520f
commit 96ab3cb3b0f862308a03046d01d66c7b4154846b
commit dfb3367bd082ccf52d3c13ff62257f08407dffcf
commit 40169e2f37127b7fe60736045b1f9fc04f76b471
commit 283e0a673cdf59fe103707ac0466492b315c81a2
commit 749b6c2ac9d9a7a4d8f4c2e4dc6fa830fd6c6ac7
commit 7aeb2e47e43d5acd4638c64b4c0c01ad90feea51
commit 1178ac68dc2869a2f4192600b701de3d853272d2
commit 380202c84454e89d29a9abc670f09b9145617d58
commit 345d6493476615494bd79a8fe77661918ea7c61a
commit e4e481e4d838f30985dd46d43ed195110ed265f5
commit 4931ce22eca6ed5f8a3a3820fd13e586011ac219
commit 8cab4ef0ad9521030e1ae4bd294a1e2e6a04659f
commit b808a7eb30b02e05023b505fe6db590ba799683f
commit baec651f4160f4c3f029edf84bbc18b4fcba9cf5
commit 51619c671316e96d7adaf2b6ea94ce245b81b6dd
commit 2d550a159c55ac836a554fd605545b0feb5f7266
commit a2909ff460a8e02168b3658372ebc897f7ab2315
commit 47b7dd9f68c12e7d33a0dfd3d9a5bed755097de0
commit 9114b55fabae5522b7124af4f16ea6ce6378aa19
commit b33cd65df18f1cf60b066a02c09df92b4763bb31
commit f1b47f0004cfff051441aa93b7115d756d5eebb7
commit 3f4dee59253a6882acde98a2a027e55f1330ae86
commit fe674c0b6f5382b7c377ca2c418c26dd78b428b4
commit f638fe27b817c755e017b8a6ae4b9b4224461941
commit 46c87432e3d4cea8e1a7ac6e9e3ebd2462f47617
commit e626d9b9c6e038a6918aad1b5affd38f6b9deaed
commit 11895d32ffddb50152f0a1e671d36b7f60e4daba
commit 54fae65ff469a79fc0ca46f480c4e7fce50f3963
commit 36939c94689ae7e6aaa9a0fa37e5c41616f76665
commit 9691a7a776302c85c10294f1a92c15c7f57a5947
commit 07ebc18c047adcd72905619e72ae7c48db28ab48
commit a3daede47576037ff7bbbe9cbd36e52a71d92bc8
commit 7e6d5cf8e3e3f8050de52a28236d5a172caf2da9
commit 95c985ffc63e2a7d8f6aa18f9351f5010a8d1adb
commit 8c39634d28fa460869702b9801d2efe06671b342
commit 525530ad9a7ec9aa34266e1429cc5ef9acb58e6c
commit 21a550de5faf9f54013334c9a6a7643b8fd80b36
commit f6aa84b83aee629fbbbc4ea16c2c142caf920d5a
commit 8799c0be89ebb99a16098bdf618f49f817bef76a
commit 7d30ccc7761cfcd6756aa0b760c5f5493038d30a
commit 5e69732d4a89928b7daaa651ad869cebee28bfff
commit 7e4ab9fb2b9449ef01977e79157d06c8900f73fd
commit 312b4dc11d4f74bfe03ea25ffe04c1f2fdd13cb9
commit 9a3c6067bd2ee2ca2652fbb0679f422f3c9109f9
commit 2302d507149f0ae7cc697089ab5675a2d4cf9d2a
commit 70df64d6c6c2f76be47311fa6630d6edbefa711e
commit 7a3353c5c441175582cf0d17f855b2ffd83fb9db
commit ab296221579715fb8f36a27c374ebabe5bfb7e9e
commit bafaf67c42f4b547bf4fb329ac6dcb28b05de15e
commit 9d84bb40bcb30a7fa16f33baa967aeb9953dda78
commit e8bc52cb8df80c31c73c726ab58ea9746e9ff734
commit 7023472834a39341460dae5c9b506c76c5940cad
commit c5e595e752b3a1c68cca57c3559521237332fbec
commit 8afc66e8d43be8edcf442165b70d50dd33091e68
commit 0e0073eb1b60f4ec6faecea034a6772fe1409a88
commit 4f5bdde386d3b8e9317df5562950e1b4fa177599
commit 99243fd1f3ca40d487209ac76241de0478962a9d
commit eae2331899f9dcc923d37d1d753f2de847c92359
commit 5ff32b52995155f91de582124485d0f0f8881363
commit 2fd23d467d4fb4e9bb3c3758ee49799f690f5f72
commit c19d3eace484ca5627817a1de85af1de06d538b6
commit e50f67cf5e168d92e24cfb61fb11f2f0a35708cd
commit fa28030a83a6302f8724cdbf0c477536b2101033
commit 20dad3813b3c15d118bda0496711eb7dff98e74a
commit 876fcc4222e1d0e5b73343f4010a8b66be058f48
commit d6170e418d1d3ae7e98cb6d96d1444e880131bbf
commit 3867bbd44f2894a4e2b01286b3b378c058992cd7
commit b73353f7f3d434e90da9f0e127bba1fe26cb1287
commit 6f4f8ff567c48823f8279206e236643e8e8f377e
commit ba30b223c93ec5af63993b6397cd7316e5acb6c1
commit 1298d9ab848653fc35431581d6e36662c7b6935a
commit 15e8b368981e1e8420f08b35bb12b794b200f4a0
commit c8588697aa4ec1f3b7fc09277cf2a5a662d40834
commit 9799702360d51a714e888fef4ab5fb9123dfb41f
commit e5da651985be20616a9e0662032e0ea2ee4dd468
commit 571c053658926df3321633b7133f574d3e656c81
commit a98cec220aa4b2502704aa0196da1bdc9eb455b4
commit 2cc4a5914ce952d6fc83b0f8089a23095ad4f677
commit d2bd0831b51d1123fc86c019db3452d6a1ce5029
commit faf4d8e07f5b67bece91723ad3e8b3f88a3dbf23
commit 27bc50fc90647bbf7b734c3fc306a5e61350da53
commit 6c482c62a635aa4f534d2439fbf8afa37452b986
commit cdbb816b5bfeb69ad925805d99b2ec312b241f1c
commit 44420ac5f855f5704d8f939926ed145f99e49e55
commit fb4d5891cee6d1c14b8d8f1b65c9d061ed3a495c
commit 38dbbfa57c08b29ef8cf1d3fb3ad639ae819754e
commit 6dddc1eb9632b0eb6098d1dc849e8acb2408c1b6
commit 832e72dd0d705bfcb4236bb2d561d82afe253e63
commit 09f1ef99ce900dbc3659d478f006081c96cc977f
commit 1ba25b6ff24303fac890d657ffdebf3e8db3bc25
commit eff4ccd11313ecc8ec94c0f39961ffbf227a406d
commit 9f30bf9917612b3a85cc28dc8ef98667ad5c07f8
commit e1e6889fc7b3e5152218db7d9f03c2f81569d54c
commit b1d1666276cce28743e2cf90be07182ceac14f1e
commit f00844daa5212aac609d9cb97ce5e0a74c67890a
commit a895014853ea6df2778533e2a0bb7a0d53f02ec2
commit 1f768ba469002d2dcad5c3d667151977417df7d9
commit 695ddc9318ad45b6a32f902b7c6998c65d575f26
commit ea19684afb545605bbcb690c49a91ce2c8e596dd
commit 81895a65ec63ee1daec3255dc1a06675d2fbe915
commit a251c17aa558d8e3128a528af5cf8b9d7caae4fd
commit d6fe5887ca891f5a7a3998bcbeccd6ec2e215132
commit 0811b9e4530d7c46542a8993ce6b725d042c6154
commit d3cf40513330752238ae585fdb0e46ec6baa588b
commit 16ce101db85db694a91380aa4c89b25530871d33
commit ef233450898f8893dafa193a9f3211fa077a3d05
commit d9b719394a1147614351961ac454589111c76e76
commit 249881232e1471d28b68f9a3829acc14d150cf5d
commit e55978a4f264676dfbbd5d955c88a60c6eb3aa7a
commit fc3523a833c9c109e68209f1ecdd15864373e66a
commit 9c9155a3509a2ebdb06d77c7a621e9685c802eac
commit 2130b87b2273389cafe6765bf09ef564cda01407
commit 5e714bf1713b4b096d20ec75c13880b7086964bd
commit f1947d7c8a61db1cb0ef909a6512ede0b1f2115b
commit 65f8682b9aaae20c2cdee993e6fe52374ad513c9
commit afbaa15501125ae0b7de9dd16c6f00c85de14218
commit a340847b0214aa9b8fd9839f7b2822ccc607edab
commit a31e62873f11dff12cbeb8e6f864d0c8e5be0869
commit 4545ae2ed3f2f7c3f615a53399c9c8460ee5bca7
commit 4d72a4e4fb5d870be52ce38e5672e4b71ee1162f
commit 4c7f9a3c15344ccc682c77495fddea7dcb64027c
commit 657e07221ce046132dd78f6e19c04b32a78b1d25
commit f700486cd1f2bf381671d1c2c7dc9000db10c50e
commit b7a76a29140810807fd85d15470d91b7992b6acf
commit 7cd3f6c3ace44ae9a9950a8c02ebcb8069278aab
commit 001ebcf5b903646b40697d9b1dc9b24daae82b4f
commit 3bd026c3e3317e4490595848261fe74d76e74126
commit 528c0e66e0c01a8c078d2d94431db80f9c75d2a0
commit ba2f09960e75accf757ed12b4ef61409dcc97df8
commit 3059cd8c5f797ad83d2b194ae66339f5c007ca43
commit 5fa993737b29bffe931cc5d0feb87ebc34cd5bb3
commit 31c261a7ffb8d5bba8144e2d43db304f2bc7e81a
commit 8a70b2d89ea3f2dc1449f0634ca6befb41472f24
commit 97a3d6090f5c2a165dc88bda05c1dcf9f08bf886
commit 5ce4726a1376bd0673d7b8edd243e76fbb4476d1
commit 2abe92c7adc9c0397ba51bf74909b85bc0fff84b
commit 8273b4048664fff356fd10059033f0e2f5a422a1
commit 7b476affcccfc7e644541a0a719f53fc7bd34c53
commit 01f2cf53844b01e691516b465df1b6ab01b03230
commit 1aca5ce036e3499336d1a2ace3070f908381c055
commit 7089003304c67658caead22f841840fc4a26b198
commit a91e5e3e2216354e27ee6adf9cb2d5d9548cad8c
commit 7228d9d79248bd0c8af56a7667a88a875c674e0c
commit 72655fb942c1e3d9e71e48e87ee439abe52f3a90
commit 50b0e4d4da09fa501e722af886f97e60a4f820d6
commit cbc543c59e8e7c8bc8604d6ac3e18a029e3d5118
commit 97061d441110528dc02972818f2f1dad485107f9
commit cb8e30ddb7e345867f6f2da8a08291d7d9e037db
commit 440b7895c990a63869a9d55e5c2502dd501a124e
commit 79610d3041338dc1ef554d6fd8b3b3e23be527f5
commit 09aef0258a327409bb2279a5ba8f82ad2ca099ca
commit 226dcfad349f23f7744d02b24f8ec3bc4f6198ac
commit 1a3abd12a394f5c66943fee75cef533069e831fb
commit 63720a561b3c98199adf0c73e152807f15cc3b7f
commit 5349fad8f8a4b001557633d149850a14b2e1a3f0
commit 90bfee142af0f0e9d3bec80e7acd5f49b230acf7
commit 08841950db932dc3ba8bbd4c0f1f7f27ccfbae42
commit ca08a1725d0d78efca8d2dbdbce5ea70355da0f2
commit abe4d9f03fae76c9650b0d942faf6990b35c377b
commit 68bc147363bd9769a07d1cbf5cbe2bb4573f4e3c
commit e105b6212f1f90c56c04439279d0ef0f8dd1c308
commit 9656db1b933caf6ffaaef10322093fe018359090
commit 969758bbf5e9360b63bbb2328ac3fda46bbbc9f5
commit 809734c110548dca410fb0cca52e6b1540319f5e
commit b3af84383e7abdc5e63435817bb73a268e7c3637
commit d61e1d1d5225a9baeb995bcbdb904f66f70ed87e
commit 200ec44ab7f9499a1f703aea0d7ba7d33e012d2f
commit 9520b1d09ecea64c5ed9b90d6f01e10fb3f3ccdd
commit b2196401949ed2517bec676928f837e6bbd01a65
commit 6fdaed8c79887680bc46cb0a51775bd7c8645528
commit d7164a5048e8a6afe2cc4aaf7f12643c14e7f241
commit d3f6bacfca86f6cf6bf85be1e8b54083d68d8195
commit 3e206b6aa6df7eed4297577e0cf8403169b800a2
commit e79762512120f11c51317570519a1553c70805d8
commit d372ec94a018c3a19dad71e2ee3478126394d9fc
commit 12caf46cf4fc92b1c3884cb363ace2e12732fd2f
commit 341421084d705475817f7f0d68e130370d10b20d
commit 14aed119942f6c2f1286022323139f7404db5d2b
commit e59843c4cdd68a369591630088171eeacce9859f
commit c580d758ba1b79de9ea7a475d95a6278736ae462
commit 6cb5cec16c380be4cf9776a8c23b72e9fe742fd1
commit c3d3f35b725bf9c93bec6d3c056f6bb7cfd27403
commit 9cb0dc6ccb7df9abe1407574ed4ad84895822d11
commit 89b3554782e6b65894f0551e9e0a82ad02dac94d
commit e542ca6e3e554bad53b2ea5741873b67f4585ea9
commit 5b994354af3cab770bf13386469c5725713679af
commit 8d4de331f1b24a22d18e3c6116aa25228cf54854
commit a3e5ce56f3d260f2ec8e5242c33f57e60ae9eba7
commit 8fe8ce896c1cc29d6bfebb3c7b3cc948f72cd32c
commit bad610c97c08eef3ed1fa769a8b08b94f95b451e
commit ab007e5db5d3b8b8975c7eec69992ff38fe2a46c
commit 8dc323133d74518e3b5b07242e2b2f088799ea6e
commit d5e0fb0d9dea545defb963ec1073bd9a1a8b5395
commit 7461016c5706eb8c477752bf69e5c9f5a38f502b
commit 6640f8e5adb69a0550fe1d224d3ac64c10f00eef
commit c941ffc39e27ae46c5fb6a33e81d89c9f78d373d
commit 980a2ff2cb987e2177a1bd02633f4259a0d1daab
commit 6295f1d8b4503ad8a18519b781dd2d1fe5e88c52
commit f90daa975911961b65070ec72bd7dd8d448f9ef7
commit 4ff4ebac3f1378f4ba6e11fe5ad4a4ac590bb8a4
commit 19b168136395150a4a6e011f944eb30d3d85094b
commit 178e31ce82d0308a9e5f2f15bfb4493160136729
commit c4299907c09a638c0a30f029338d07941c049d73
commit 308451d9c7fece33d9551230cb8e5eb7f3914988
commit 653f2d94fcda200b02bd79cea2e0307b26c1b747
commit e0b26b9482461e9528552f54fa662c2269f75b3f
commit bc66c9ab162d2a633ee3eb864d7bc2369e79c1e4
commit 66f7903779fbbc620bf1040017e4833ef6a0b541
commit b91c23e099f0b65d62159da13458c5eefa76083f
commit 77c092e054262b594614bad5e5f47e57c5d29639
commit 632d06985235d988c9d7e6eec8fa655be0761fd0
commit ab4b35008db9b7ae747679250e5c26d7c3a90cea
commit 0d5c5c210a4d4e655feb93b379647f0b179cdafe
commit ce62198d8b62734a985d22652e75a649be052390
commit c0b2753f5db281b07013899c79b5f06a614055f9
commit ce902d987a8caa5c9a96080e280ecc992414a127
commit 30b8e7b8ee3be003e0df85c857c5cd0e0bd58b82
commit 64f65135c41a75f933d3bca236417ad8e9eb75de
commit e034a0d9aaee5c9129d5dfdfdfcab988a953412d
commit 0c85c067c9d9d7a1b2cc2e01a236d5d0d4a872b5
commit 675d84621a24490e1de3d59a4992a17fa9ff92b5
commit 876153ab068b2507a19aa3ef481f5b00a2cc780f
commit 2e4b294576e32fb02562ad6839d6888ab7b45102
commit ff963634f7b2e0dc011349abb3fb81a0d074f443
commit 4979524f5a2a8210e87fde2f642b0dc060860821
commit b7ffd9d9ee13de2c5ad88046a5149de4cfb2a74b
commit 9ed1fdee9ee324f3505ff066287ee53143caaaa2
commit 3c9fd44b9330adc5006653566f3d386784b2080e
commit 4f68332b2f89ab84285e5b6cb3d30e8b9894bef1
commit eca13f3c67b6ddfcc61fdb9bb1c5f9a7724e2359
commit 5428672d39b7750310cf4e328e9f94a7668b5565
commit 0d502ef8898b3983eef9e40f50dfe100a0de5d93
commit 7af87fc1ba136143314c870059b8f60180247cbd
commit 2c2911e09f19eac85df83b3201b38e69b8117059
commit 8d8494c3467d366eb0f7c8198dab80be8bdc47d2
commit 7e952a18eb978a3e51fc1704b752378be66226b2
commit 0a3e0fb8cfee4f45f1b1f3d4d028a4519c89d577
commit 4d285241230676ba8b888701b89684b4e0360fcc
commit e7e4f77c991c9abf90924929a9d55f90b0bb78de
commit 246e667079e8d0fc85f842bceca8c5a3c5da5905
commit c149947b188c651b943c1d8ca1494d1a98a3e27f
commit f8d7edb0cda6ea1cba89d6f8aac74613e9cdc075
commit 0e444a4de6b38c4593a07e4cfb5bf54c40cc79b6
commit 192039f12233c9063d040266e7c98188c7c89dec
commit 6f9eea4392a178af19360694b1db64f985d0b459
commit f8794f31abf33a3b22c72002783670a95e6efc51
commit 8652da45d09abe1b3174dbb80dc5176b8c3fa08e
commit df7c013efc1a0da8861099802b2d6ab2aacaeb1b
commit 4b14841c9a820e484bc8c4c3f5a6fed1bc528cbc
commit 5954acbacbd1946b96ce8ee799d309cb0cd3cb9d
commit 5fa8813878d45bf6961fd22c8deee53f6a2791df
commit a73b603f918f1425293b0b5c6f54d7168cb86221
commit 585f2bc8fe692d31593633df99090a1039e789bb
commit b09d6acba1d9a23963fedf96b4191502a4fec25d
commit c19083c72ea72a1c12037bb3d708014632df80e4
commit 00a6c36cca760d0b659f894dee728555b193c5e1
commit ebbaa4392e36521fb893973d8a0fcb32f3b6d5eb
commit 3ca682389435681e2d660428be2187fbae0effbb
commit ba891436c2d2b2a6d6c1bc3733bab3b72f07e87f
commit 2f3a1273862cb82cca227630cc7f04ce0c94b6bb
commit dfbc00410c48a9896d4a65600be7137202517780
commit d60b82aa4d67b2e6cf0364947a008bb7255ca4da
commit 85ef1679a190a9740f6b72217cb139a0d9c58706
commit b39df63b16b64a3af42695acb9bc567aad144776
commit 4458da0bb09d4435956b4377685e8836935e9b9d
commit b9ab82da8804ec22c7e91ffd9d56c7a3abff0c8e
commit 91abf28a636291135ea5cab9af40f017cff6afce
commit 14af5d385878d22546914d37f13a314b14825a42
commit 432e25902b9651622578c6248e549297d03caf66
commit 4f2bea62cf3874c5a58e987b0b472f9fb57117a2
commit 44035ec2fde1114254ee465f9ba3bb246b0b6283
commit 5d82c82f1dbee264f7a94587adbbfee607706902
commit dd2c028c1395d622df7ddd6837f8ab2dc94008ee
commit 2a5dd86a69ea5435f1a837bdb7fafcda609a7c91
commit e667ee3b0c049bf0c69426879586a2572bb28d26
commit a26a54fbe32b564ff868710d59fbe1a387a2cc7c
commit f2e1aa267f12b82e03927d1e918d2844ddd3eea5
commit 3cb93f390453cde4d6afda1587aaa00e75e09617
commit a6e1775da04ab042bc9e2e42399fa25714c253da
commit 602ad43c3cd8f15cbb25ce9bb494129edb2024ed
commit ecb41b71ef90cf4741bcc3286b769dda746b67e6
commit 9e2c5c651a63baaa39005070481d39dcf5b0893a
commit b65a648865c4a1e717c4f56f5025546b9553189a
commit e57702069b26b8601a33fdc0c9bbe40c6bb9c72f
commit ed14d225cc7c842f6d4d5a3009f71a44f5852d09
commit 2f3830544a89af2e72e7fd3d6ca44dd9cffec197
commit 3c1ea6a5f4f55d4e376675dda16945eb5d9bb4de
commit a8899b8728013c7b2456f0bfa20e5fea85ee0fd1
commit 12b8b046e4c9de40fa59b6f067d6826f4e688f68
commit 8c115864501fc09932cdfec53d9ec1cde82b4a28
commit 04aa64375f48a5d430b5550d9271f8428883e550
commit 6f6cb1714365a07dbc66851879538df9f6969288
commit d3d6b1bf85aefe0ebc0624574b3bb62f0693914c
commit 9a8cc8cabc1e351614fd7f9e774757a5143b6fe8
commit c082fbd687ad70a92e0a8be486a7555a66f03079
commit bdaa78c6aa861f0e8c612a0b2272423d92f0071c
commit c290db013742e98fe5b64073bc2dd8c8a2ac9e4c
commit 24013314be6ee4ee456114a671e9fa3461323de8
commit 09bf649a74573cb596e211418a4f8008f265c5a9
commit 6e90293618ed476d6b11f82ce724efbb9e9a071b
commit bc21fe9a5844c5bc8f7ec319b11d2671a94eb867
commit aeffc8fb2174f017a10df114bc312f899904dc68
commit c4252650a8c4770b669398fe7270ed8c94fc0eba
Signed-off-by: Mika Penttilä <mpenttil@redhat.com>
2023-04-27 13:56:29 +00:00
|
|
|
int hdmi_audio_infoframe_check(const struct hdmi_audio_infoframe *frame);
|
|
|
|
|
|
|
|
struct dp_sdp;
|
|
|
|
ssize_t
|
|
|
|
hdmi_audio_infoframe_pack_for_dp(const struct hdmi_audio_infoframe *frame,
|
|
|
|
struct dp_sdp *sdp, u8 dp_version);
|
2012-11-21 14:29:29 +00:00
|
|
|
|
2013-08-19 15:58:58 +00:00
|
|
|
enum hdmi_3d_structure {
|
|
|
|
HDMI_3D_STRUCTURE_INVALID = -1,
|
|
|
|
HDMI_3D_STRUCTURE_FRAME_PACKING = 0,
|
|
|
|
HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE,
|
|
|
|
HDMI_3D_STRUCTURE_LINE_ALTERNATIVE,
|
|
|
|
HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL,
|
|
|
|
HDMI_3D_STRUCTURE_L_DEPTH,
|
|
|
|
HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH,
|
|
|
|
HDMI_3D_STRUCTURE_TOP_AND_BOTTOM,
|
|
|
|
HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF = 8,
|
|
|
|
};
|
|
|
|
|
2013-08-19 15:59:02 +00:00
|
|
|
|
|
|
|
struct hdmi_vendor_infoframe {
|
2013-08-19 15:58:58 +00:00
|
|
|
enum hdmi_infoframe_type type;
|
|
|
|
unsigned char version;
|
|
|
|
unsigned char length;
|
2013-08-19 15:59:01 +00:00
|
|
|
unsigned int oui;
|
2013-08-19 15:58:58 +00:00
|
|
|
u8 vic;
|
|
|
|
enum hdmi_3d_structure s3d_struct;
|
|
|
|
unsigned int s3d_ext_data;
|
|
|
|
};
|
|
|
|
|
2019-05-16 14:10:06 +00:00
|
|
|
/* HDR Metadata as per 861.G spec */
|
|
|
|
struct hdr_static_metadata {
|
|
|
|
__u8 eotf;
|
|
|
|
__u8 metadata_type;
|
|
|
|
__u16 max_cll;
|
|
|
|
__u16 max_fall;
|
|
|
|
__u16 min_cll;
|
|
|
|
};
|
|
|
|
|
2019-06-04 11:17:02 +00:00
|
|
|
/**
|
|
|
|
* struct hdr_sink_metadata - HDR sink metadata
|
|
|
|
*
|
|
|
|
* Metadata Information read from Sink's EDID
|
|
|
|
*/
|
2019-05-16 14:10:06 +00:00
|
|
|
struct hdr_sink_metadata {
|
2019-06-04 11:17:02 +00:00
|
|
|
/**
|
|
|
|
* @metadata_type: Static_Metadata_Descriptor_ID.
|
|
|
|
*/
|
2019-05-16 14:10:06 +00:00
|
|
|
__u32 metadata_type;
|
2019-06-04 11:17:02 +00:00
|
|
|
/**
|
|
|
|
* @hdmi_type1: HDR Metadata Infoframe.
|
|
|
|
*/
|
2019-05-16 14:10:06 +00:00
|
|
|
union {
|
|
|
|
struct hdr_static_metadata hdmi_type1;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2013-08-19 15:59:02 +00:00
|
|
|
int hdmi_vendor_infoframe_init(struct hdmi_vendor_infoframe *frame);
|
|
|
|
ssize_t hdmi_vendor_infoframe_pack(struct hdmi_vendor_infoframe *frame,
|
|
|
|
void *buffer, size_t size);
|
2018-09-21 14:33:32 +00:00
|
|
|
ssize_t hdmi_vendor_infoframe_pack_only(const struct hdmi_vendor_infoframe *frame,
|
|
|
|
void *buffer, size_t size);
|
|
|
|
int hdmi_vendor_infoframe_check(struct hdmi_vendor_infoframe *frame);
|
2013-08-19 15:58:58 +00:00
|
|
|
|
2013-08-19 15:59:02 +00:00
|
|
|
union hdmi_vendor_any_infoframe {
|
2013-08-19 15:59:01 +00:00
|
|
|
struct {
|
|
|
|
enum hdmi_infoframe_type type;
|
|
|
|
unsigned char version;
|
|
|
|
unsigned char length;
|
|
|
|
unsigned int oui;
|
|
|
|
} any;
|
2013-08-19 15:59:02 +00:00
|
|
|
struct hdmi_vendor_infoframe hdmi;
|
2013-08-19 15:59:01 +00:00
|
|
|
};
|
|
|
|
|
2014-01-22 17:26:16 +00:00
|
|
|
/**
|
|
|
|
* union hdmi_infoframe - overall union of all abstract infoframe representations
|
|
|
|
* @any: generic infoframe
|
|
|
|
* @avi: avi infoframe
|
|
|
|
* @spd: spd infoframe
|
|
|
|
* @vendor: union of all vendor infoframes
|
|
|
|
* @audio: audio infoframe
|
2019-06-04 11:17:02 +00:00
|
|
|
* @drm: Dynamic Range and Mastering infoframe
|
2014-01-22 17:26:16 +00:00
|
|
|
*
|
|
|
|
* This is used by the generic pack function. This works since all infoframes
|
|
|
|
* have the same header which also indicates which type of infoframe should be
|
|
|
|
* packed.
|
|
|
|
*/
|
2013-08-06 19:32:14 +00:00
|
|
|
union hdmi_infoframe {
|
|
|
|
struct hdmi_any_infoframe any;
|
|
|
|
struct hdmi_avi_infoframe avi;
|
|
|
|
struct hdmi_spd_infoframe spd;
|
2013-08-19 15:59:02 +00:00
|
|
|
union hdmi_vendor_any_infoframe vendor;
|
2013-08-06 19:32:14 +00:00
|
|
|
struct hdmi_audio_infoframe audio;
|
2019-05-16 14:10:09 +00:00
|
|
|
struct hdmi_drm_infoframe drm;
|
2013-08-06 19:32:14 +00:00
|
|
|
};
|
|
|
|
|
2018-09-21 14:33:32 +00:00
|
|
|
ssize_t hdmi_infoframe_pack(union hdmi_infoframe *frame, void *buffer,
|
|
|
|
size_t size);
|
|
|
|
ssize_t hdmi_infoframe_pack_only(const union hdmi_infoframe *frame,
|
|
|
|
void *buffer, size_t size);
|
|
|
|
int hdmi_infoframe_check(union hdmi_infoframe *frame);
|
2018-09-20 18:51:28 +00:00
|
|
|
int hdmi_infoframe_unpack(union hdmi_infoframe *frame,
|
2018-09-20 18:51:29 +00:00
|
|
|
const void *buffer, size_t size);
|
2014-12-19 12:14:21 +00:00
|
|
|
void hdmi_infoframe_log(const char *level, struct device *dev,
|
2018-09-20 18:51:30 +00:00
|
|
|
const union hdmi_infoframe *frame);
|
2013-08-06 19:32:14 +00:00
|
|
|
|
2012-11-21 14:29:29 +00:00
|
|
|
#endif /* _DRM_HDMI_H */
|