Centos-kernel-stream-9/include/linux/host1x.h

499 lines
14 KiB
C
Raw Permalink Normal View History

treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 1 Based on 2 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 51 franklin street fifth floor boston ma 02110 1301 usa this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option [no]_[pad]_[ctrl] any later version this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 51 franklin street fifth floor boston ma 02110 1301 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 176 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Jilayne Lovejoy <opensource@jilayne.com> Reviewed-by: Steve Winslow <swinslow@gmail.com> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190519154040.652910950@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-05-19 13:51:31 +00:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (c) 2009-2013, NVIDIA Corporation. All rights reserved.
*/
#ifndef __LINUX_HOST1X_H
#define __LINUX_HOST1X_H
#include <linux/device.h>
#include <linux/dma-direction.h>
#include <linux/dma-fence.h>
#include <linux/spinlock.h>
#include <linux/types.h>
enum host1x_class {
HOST1X_CLASS_HOST1X = 0x1,
HOST1X_CLASS_GR2D = 0x51,
HOST1X_CLASS_GR2D_SB = 0x52,
HOST1X_CLASS_VIC = 0x5D,
HOST1X_CLASS_GR3D = 0x60,
HOST1X_CLASS_NVDEC = 0xF0,
HOST1X_CLASS_NVDEC1 = 0xF5,
};
struct host1x;
struct host1x_client;
struct iommu_group;
u64 host1x_get_dma_mask(struct host1x *host1x);
/**
* struct host1x_bo_cache - host1x buffer object cache
* @mappings: list of mappings
* @lock: synchronizes accesses to the list of mappings
*
* Note that entries are not periodically evicted from this cache and instead need to be
* explicitly released. This is used primarily for DRM/KMS where the cache's reference is
* released when the last reference to a buffer object represented by a mapping in this
* cache is dropped.
*/
struct host1x_bo_cache {
struct list_head mappings;
struct mutex lock;
};
static inline void host1x_bo_cache_init(struct host1x_bo_cache *cache)
{
INIT_LIST_HEAD(&cache->mappings);
mutex_init(&cache->lock);
}
static inline void host1x_bo_cache_destroy(struct host1x_bo_cache *cache)
{
/* XXX warn if not empty? */
mutex_destroy(&cache->lock);
}
/**
* struct host1x_client_ops - host1x client operations
* @early_init: host1x client early initialization code
* @init: host1x client initialization code
* @exit: host1x client tear down code
* @late_exit: host1x client late tear down code
* @suspend: host1x client suspend code
* @resume: host1x client resume code
*/
struct host1x_client_ops {
int (*early_init)(struct host1x_client *client);
int (*init)(struct host1x_client *client);
int (*exit)(struct host1x_client *client);
int (*late_exit)(struct host1x_client *client);
int (*suspend)(struct host1x_client *client);
int (*resume)(struct host1x_client *client);
};
/**
* struct host1x_client - host1x client structure
* @list: list node for the host1x client
* @host: pointer to struct device representing the host1x controller
* @dev: pointer to struct device backing this host1x client
* @group: IOMMU group that this client is a member of
* @ops: host1x client operations
* @class: host1x class represented by this client
* @channel: host1x channel associated with this client
* @syncpts: array of syncpoints requested for this client
* @num_syncpts: number of syncpoints requested for this client
* @parent: pointer to parent structure
* @usecount: reference count for this structure
* @lock: mutex for mutually exclusive concurrency
* @cache: host1x buffer object cache
*/
struct host1x_client {
struct list_head list;
struct device *host;
struct device *dev;
struct iommu_group *group;
const struct host1x_client_ops *ops;
enum host1x_class class;
struct host1x_channel *channel;
struct host1x_syncpt **syncpts;
unsigned int num_syncpts;
struct host1x_client *parent;
unsigned int usecount;
struct mutex lock;
struct host1x_bo_cache cache;
};
/*
* host1x buffer objects
*/
struct host1x_bo;
struct sg_table;
struct host1x_bo_mapping {
struct kref ref;
struct dma_buf_attachment *attach;
enum dma_data_direction direction;
struct list_head list;
struct host1x_bo *bo;
struct sg_table *sgt;
unsigned int chunks;
struct device *dev;
dma_addr_t phys;
size_t size;
struct host1x_bo_cache *cache;
struct list_head entry;
};
static inline struct host1x_bo_mapping *to_host1x_bo_mapping(struct kref *ref)
{
return container_of(ref, struct host1x_bo_mapping, ref);
}
struct host1x_bo_ops {
struct host1x_bo *(*get)(struct host1x_bo *bo);
void (*put)(struct host1x_bo *bo);
struct host1x_bo_mapping *(*pin)(struct device *dev, struct host1x_bo *bo,
enum dma_data_direction dir);
void (*unpin)(struct host1x_bo_mapping *map);
void *(*mmap)(struct host1x_bo *bo);
void (*munmap)(struct host1x_bo *bo, void *addr);
};
struct host1x_bo {
const struct host1x_bo_ops *ops;
struct list_head mappings;
spinlock_t lock;
};
static inline void host1x_bo_init(struct host1x_bo *bo,
const struct host1x_bo_ops *ops)
{
INIT_LIST_HEAD(&bo->mappings);
spin_lock_init(&bo->lock);
bo->ops = ops;
}
static inline struct host1x_bo *host1x_bo_get(struct host1x_bo *bo)
{
return bo->ops->get(bo);
}
static inline void host1x_bo_put(struct host1x_bo *bo)
{
bo->ops->put(bo);
}
struct host1x_bo_mapping *host1x_bo_pin(struct device *dev, struct host1x_bo *bo,
enum dma_data_direction dir,
struct host1x_bo_cache *cache);
void host1x_bo_unpin(struct host1x_bo_mapping *map);
static inline void *host1x_bo_mmap(struct host1x_bo *bo)
{
return bo->ops->mmap(bo);
}
static inline void host1x_bo_munmap(struct host1x_bo *bo, void *addr)
{
bo->ops->munmap(bo, addr);
}
/*
* host1x syncpoints
*/
#define HOST1X_SYNCPT_CLIENT_MANAGED (1 << 0)
#define HOST1X_SYNCPT_HAS_BASE (1 << 1)
struct host1x_syncpt_base;
struct host1x_syncpt;
struct host1x;
struct host1x_syncpt *host1x_syncpt_get_by_id(struct host1x *host, u32 id);
struct host1x_syncpt *host1x_syncpt_get_by_id_noref(struct host1x *host, u32 id);
struct host1x_syncpt *host1x_syncpt_get(struct host1x_syncpt *sp);
u32 host1x_syncpt_id(struct host1x_syncpt *sp);
u32 host1x_syncpt_read_min(struct host1x_syncpt *sp);
u32 host1x_syncpt_read_max(struct host1x_syncpt *sp);
u32 host1x_syncpt_read(struct host1x_syncpt *sp);
int host1x_syncpt_incr(struct host1x_syncpt *sp);
u32 host1x_syncpt_incr_max(struct host1x_syncpt *sp, u32 incrs);
int host1x_syncpt_wait(struct host1x_syncpt *sp, u32 thresh, long timeout,
u32 *value);
struct host1x_syncpt *host1x_syncpt_request(struct host1x_client *client,
unsigned long flags);
void host1x_syncpt_put(struct host1x_syncpt *sp);
struct host1x_syncpt *host1x_syncpt_alloc(struct host1x *host,
unsigned long flags,
const char *name);
struct host1x_syncpt_base *host1x_syncpt_get_base(struct host1x_syncpt *sp);
u32 host1x_syncpt_base_id(struct host1x_syncpt_base *base);
void host1x_syncpt_release_vblank_reservation(struct host1x_client *client,
u32 syncpt_id);
struct dma_fence *host1x_fence_create(struct host1x_syncpt *sp, u32 threshold,
bool timeout);
void host1x_fence_cancel(struct dma_fence *fence);
/*
* host1x channel
*/
struct host1x_channel;
struct host1x_job;
struct host1x_channel *host1x_channel_request(struct host1x_client *client);
struct host1x_channel *host1x_channel_get(struct host1x_channel *channel);
void host1x_channel_stop(struct host1x_channel *channel);
void host1x_channel_put(struct host1x_channel *channel);
int host1x_job_submit(struct host1x_job *job);
/*
* host1x job
*/
#define HOST1X_RELOC_READ (1 << 0)
#define HOST1X_RELOC_WRITE (1 << 1)
struct host1x_reloc {
struct {
struct host1x_bo *bo;
unsigned long offset;
} cmdbuf;
struct {
struct host1x_bo *bo;
unsigned long offset;
} target;
unsigned long shift;
unsigned long flags;
};
struct host1x_job {
/* When refcount goes to zero, job can be freed */
struct kref ref;
/* List entry */
struct list_head list;
/* Channel where job is submitted to */
struct host1x_channel *channel;
/* client where the job originated */
struct host1x_client *client;
/* Gathers and their memory */
struct host1x_job_cmd *cmds;
unsigned int num_cmds;
/* Array of handles to be pinned & unpinned */
struct host1x_reloc *relocs;
unsigned int num_relocs;
struct host1x_job_unpin_data *unpins;
unsigned int num_unpins;
dma_addr_t *addr_phys;
dma_addr_t *gather_addr_phys;
dma_addr_t *reloc_addr_phys;
/* Sync point id, number of increments and end related to the submit */
struct host1x_syncpt *syncpt;
u32 syncpt_incrs;
u32 syncpt_end;
/* Completion fence for job tracking */
struct dma_fence *fence;
struct dma_fence_cb fence_cb;
/* Maximum time to wait for this job */
unsigned int timeout;
/* Job has timed out and should be released */
bool cancelled;
/* Index and number of slots used in the push buffer */
unsigned int first_get;
unsigned int num_slots;
/* Copy of gathers */
size_t gather_copy_size;
dma_addr_t gather_copy;
u8 *gather_copy_mapped;
/* Check if register is marked as an address reg */
int (*is_addr_reg)(struct device *dev, u32 class, u32 reg);
/* Check if class belongs to the unit */
int (*is_valid_class)(u32 class);
/* Request a SETCLASS to this class */
u32 class;
/* Add a channel wait for previous ops to complete */
bool serialize;
/* Fast-forward syncpoint increments on job timeout */
bool syncpt_recovery;
/* Callback called when job is freed */
void (*release)(struct host1x_job *job);
void *user_data;
/* Whether host1x-side firewall should be ran for this job or not */
bool enable_firewall;
/* Options for configuring engine data stream ID */
/* Context device to use for job */
struct host1x_memory_context *memory_context;
/* Stream ID to use if context isolation is disabled (!memory_context) */
u32 engine_fallback_streamid;
/* Engine offset to program stream ID to */
u32 engine_streamid_offset;
};
struct host1x_job *host1x_job_alloc(struct host1x_channel *ch,
u32 num_cmdbufs, u32 num_relocs,
bool skip_firewall);
void host1x_job_add_gather(struct host1x_job *job, struct host1x_bo *bo,
unsigned int words, unsigned int offset);
void host1x_job_add_wait(struct host1x_job *job, u32 id, u32 thresh,
bool relative, u32 next_class);
struct host1x_job *host1x_job_get(struct host1x_job *job);
void host1x_job_put(struct host1x_job *job);
int host1x_job_pin(struct host1x_job *job, struct device *dev);
void host1x_job_unpin(struct host1x_job *job);
/*
* subdevice probe infrastructure
*/
struct host1x_device;
/**
* struct host1x_driver - host1x logical device driver
* @driver: core driver
* @subdevs: table of OF device IDs matching subdevices for this driver
* @list: list node for the driver
* @probe: called when the host1x logical device is probed
* @remove: called when the host1x logical device is removed
* @shutdown: called when the host1x logical device is shut down
*/
struct host1x_driver {
struct device_driver driver;
const struct of_device_id *subdevs;
struct list_head list;
int (*probe)(struct host1x_device *device);
int (*remove)(struct host1x_device *device);
void (*shutdown)(struct host1x_device *device);
};
static inline struct host1x_driver *
to_host1x_driver(struct device_driver *driver)
{
return container_of(driver, struct host1x_driver, driver);
}
int host1x_driver_register_full(struct host1x_driver *driver,
struct module *owner);
void host1x_driver_unregister(struct host1x_driver *driver);
#define host1x_driver_register(driver) \
host1x_driver_register_full(driver, THIS_MODULE)
struct host1x_device {
struct host1x_driver *driver;
struct list_head list;
struct device dev;
struct mutex subdevs_lock;
struct list_head subdevs;
struct list_head active;
struct mutex clients_lock;
struct list_head clients;
bool registered;
struct device_dma_parameters dma_parms;
};
static inline struct host1x_device *to_host1x_device(struct device *dev)
{
return container_of(dev, struct host1x_device, dev);
}
int host1x_device_init(struct host1x_device *device);
int host1x_device_exit(struct host1x_device *device);
void __host1x_client_init(struct host1x_client *client, struct lock_class_key *key);
void host1x_client_exit(struct host1x_client *client);
#define host1x_client_init(client) \
({ \
static struct lock_class_key __key; \
__host1x_client_init(client, &__key); \
})
int __host1x_client_register(struct host1x_client *client);
/*
* Note that this wrapper calls __host1x_client_init() for compatibility
* with existing callers. Callers that want to separately initialize and
* register a host1x client must first initialize using either of the
* __host1x_client_init() or host1x_client_init() functions and then use
* the low-level __host1x_client_register() function to avoid the client
* getting reinitialized.
*/
#define host1x_client_register(client) \
({ \
static struct lock_class_key __key; \
__host1x_client_init(client, &__key); \
__host1x_client_register(client); \
})
Merge DRM changes from upstream v6.3..v6.4 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.4 RHEL-1350 JIRA: https://issues.redhat.com/browse/RHEL-1350 Conflicts: drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c drivers/gpu/drm/amd/display/dc/core/dc.c drivers/gpu/drm/amd/display/dc/dc.h drivers/gpu/drm/amd/display/dc/dc_dp_types.h drivers/gpu/drm/amd/display/dc/dc_types.h drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.h drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource_helpers.c drivers/gpu/drm/amd/display/dc/inc/link.h drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c drivers/gpu/drm/amd/display/dc/link/link_detection.c drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_dpia_bw.c drivers/gpu/drm/drm_displayid.c drivers/gpu/drm/drm_fb_helper.c drivers/gpu/drm/gma500/framebuffer.c drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c drivers/gpu/drm/i915/gt/intel_workarounds.c drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c Conflict resolution: diff --cc drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 0eb51c3a69a7,7acd73e5004f..11e99e8ca7ba --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@@ -350,35 -348,46 +348,75 @@@ static inline bool is_dc_timing_adjust_ return false; } + static inline void reverse_planes_order(struct dc_surface_update *array_of_surface_update, + int planes_count) + { + int i, j; + + for (i = 0, j = planes_count - 1; i < j; i++, j--) + swap(array_of_surface_update[i], array_of_surface_update[j]); + } + + /** + * update_planes_and_stream_adapter() - Send planes to be updated in DC + * + * DC has a generic way to update planes and stream via + * dc_update_planes_and_stream function; however, DM might need some + * adjustments and preparation before calling it. This function is a wrapper + * for the dc_update_planes_and_stream that does any required configuration + * before passing control to DC. + */ + static inline bool update_planes_and_stream_adapter(struct dc *dc, + int update_type, + int planes_count, + struct dc_stream_state *stream, + struct dc_stream_update *stream_update, + struct dc_surface_update *array_of_surface_update) + { + reverse_planes_order(array_of_surface_update, planes_count); + + /* + * Previous frame finished and HW is ready for optimization. + */ + if (update_type == UPDATE_TYPE_FAST) + dc_post_update_surfaces_to_stream(dc); + + return dc_update_planes_and_stream(dc, + array_of_surface_update, + planes_count, + stream, + stream_update); + } + +/** + * update_planes_and_stream_adapter() - Send planes to be updated in DC + * + * DC has a generic way to update planes and stream via + * dc_update_planes_and_stream function; however, DM might need some + * adjustments and preparation before calling it. This function is a wrapper + * for the dc_update_planes_and_stream that does any required configuration + * before passing control to DC. + */ +static inline bool update_planes_and_stream_adapter(struct dc *dc, + int update_type, + int planes_count, + struct dc_stream_state *stream, + struct dc_stream_update *stream_update, + struct dc_surface_update *array_of_surface_update) +{ + /* + * Previous frame finished and HW is ready for optimization. + */ + if (update_type == UPDATE_TYPE_FAST) + dc_post_update_surfaces_to_stream(dc); + + return dc_update_planes_and_stream(dc, + array_of_surface_update, + planes_count, + stream, + stream_update); +} + /** * dm_pflip_high_irq() - Handle pageflip interrupt * @interrupt_params: ignored @@@ -7901,16 -7905,16 +7931,23 @@@ static void amdgpu_dm_commit_cursors(st */ for_each_old_plane_in_state(state, plane, old_plane_state, i) if (plane->type == DRM_PLANE_TYPE_CURSOR) - handle_cursor_update(plane, old_plane_state); + amdgpu_dm_plane_handle_cursor_update(plane, old_plane_state); + } + + static inline uint32_t get_mem_type(struct drm_framebuffer *fb) + { + struct amdgpu_bo *abo = gem_to_amdgpu_bo(fb->obj[0]); + + return abo->tbo.resource ? abo->tbo.resource->mem_type : 0; } +static inline uint32_t get_mem_type(struct drm_framebuffer *fb) +{ + struct amdgpu_bo *abo = gem_to_amdgpu_bo(fb->obj[0]); + + return abo->tbo.resource ? abo->tbo.resource->mem_type : 0; +} + static void amdgpu_dm_commit_planes(struct drm_atomic_state *state, struct dc_state *dc_state, struct drm_device *dev, diff --cc drivers/gpu/drm/amd/display/dc/core/dc_link_exports.c index 862cb0f93b7d,18e098568cb4..3f047c985406 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link_exports.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_exports.c @@@ -142,49 -134,347 +134,391 @@@ void dc_restore_link_res_map(const stru bool dc_link_update_dsc_config(struct pipe_ctx *pipe_ctx) { - return link_update_dsc_config(pipe_ctx); + struct dc_link *link = pipe_ctx->stream->link; + + return link->dc->link_srv->update_dsc_config(pipe_ctx); + } + + bool dc_is_oem_i2c_device_present( + struct dc *dc, + size_t slave_address) + { + if (dc->res_pool->oem_device) + return dce_i2c_oem_device_present( + dc->res_pool, + dc->res_pool->oem_device, + slave_address); + + return false; + } + + bool dc_submit_i2c( + struct dc *dc, + uint32_t link_index, + struct i2c_command *cmd) + { + + struct dc_link *link = dc->links[link_index]; + struct ddc_service *ddc = link->ddc; + + return dce_i2c_submit_command( + dc->res_pool, + ddc->ddc_pin, + cmd); + } + + bool dc_submit_i2c_oem( + struct dc *dc, + struct i2c_command *cmd) + { + struct ddc_service *ddc = dc->res_pool->oem_device; + + if (ddc) + return dce_i2c_submit_command( + dc->res_pool, + ddc->ddc_pin, + cmd); + + return false; + } + + void dc_link_dp_handle_automated_test(struct dc_link *link) + { + link->dc->link_srv->dp_handle_automated_test(link); + } + + bool dc_link_dp_set_test_pattern( + struct dc_link *link, + enum dp_test_pattern test_pattern, + enum dp_test_pattern_color_space test_pattern_color_space, + const struct link_training_settings *p_link_settings, + const unsigned char *p_custom_pattern, + unsigned int cust_pattern_size) + { + return link->dc->link_srv->dp_set_test_pattern(link, test_pattern, + test_pattern_color_space, p_link_settings, + p_custom_pattern, cust_pattern_size); + } + + void dc_link_set_drive_settings(struct dc *dc, + struct link_training_settings *lt_settings, + struct dc_link *link) + { + struct link_resource link_res; + + dc->link_srv->get_cur_link_res(link, &link_res); + dc->link_srv->dp_set_drive_settings(link, &link_res, lt_settings); + } + + void dc_link_set_preferred_link_settings(struct dc *dc, + struct dc_link_settings *link_setting, + struct dc_link *link) + { + dc->link_srv->dp_set_preferred_link_settings(dc, link_setting, link); + } + + void dc_link_set_preferred_training_settings(struct dc *dc, + struct dc_link_settings *link_setting, + struct dc_link_training_overrides *lt_overrides, + struct dc_link *link, + bool skip_immediate_retrain) + { + dc->link_srv->dp_set_preferred_training_settings(dc, link_setting, + lt_overrides, link, skip_immediate_retrain); + } + + bool dc_dp_trace_is_initialized(struct dc_link *link) + { + return link->dc->link_srv->dp_trace_is_initialized(link); + } + + void dc_dp_trace_set_is_logged_flag(struct dc_link *link, + bool in_detection, + bool is_logged) + { + link->dc->link_srv->dp_trace_set_is_logged_flag(link, in_detection, is_logged); + } + + bool dc_dp_trace_is_logged(struct dc_link *link, bool in_detection) + { + return link->dc->link_srv->dp_trace_is_logged(link, in_detection); + } + + unsigned long long dc_dp_trace_get_lt_end_timestamp(struct dc_link *link, + bool in_detection) + { + return link->dc->link_srv->dp_trace_get_lt_end_timestamp(link, in_detection); + } + + const struct dp_trace_lt_counts *dc_dp_trace_get_lt_counts(struct dc_link *link, + bool in_detection) + { + return link->dc->link_srv->dp_trace_get_lt_counts(link, in_detection); + } + + unsigned int dc_dp_trace_get_link_loss_count(struct dc_link *link) + { + return link->dc->link_srv->dp_trace_get_link_loss_count(link); + } + + struct dc_sink *dc_link_add_remote_sink( + struct dc_link *link, + const uint8_t *edid, + int len, + struct dc_sink_init_data *init_data) + { + return link->dc->link_srv->add_remote_sink(link, edid, len, init_data); + } + + void dc_link_remove_remote_sink(struct dc_link *link, struct dc_sink *sink) + { + link->dc->link_srv->remove_remote_sink(link, sink); + } + + int dc_link_aux_transfer_raw(struct ddc_service *ddc, + struct aux_payload *payload, + enum aux_return_code_type *operation_result) + { + const struct dc *dc = ddc->link->dc; + + return dc->link_srv->aux_transfer_raw( + ddc, payload, operation_result); + } + + uint32_t dc_link_bw_kbps_from_raw_frl_link_rate_data(const struct dc *dc, uint8_t bw) + { + return dc->link_srv->bw_kbps_from_raw_frl_link_rate_data(bw); + } + + bool dc_link_decide_edp_link_settings(struct dc_link *link, + struct dc_link_settings *link_setting, uint32_t req_bw) + { + return link->dc->link_srv->edp_decide_link_settings(link, link_setting, req_bw); + } + + + bool dc_link_dp_get_max_link_enc_cap(const struct dc_link *link, + struct dc_link_settings *max_link_enc_cap) + { + return link->dc->link_srv->dp_get_max_link_enc_cap(link, max_link_enc_cap); + } + + enum dp_link_encoding dc_link_dp_mst_decide_link_encoding_format( + const struct dc_link *link) + { + return link->dc->link_srv->mst_decide_link_encoding_format(link); + } + + const struct dc_link_settings *dc_link_get_link_cap(const struct dc_link *link) + { + return link->dc->link_srv->dp_get_verified_link_cap(link); + } + + bool dc_link_is_dp_sink_present(struct dc_link *link) + { + return link->dc->link_srv->dp_is_sink_present(link); + } + + bool dc_link_is_fec_supported(const struct dc_link *link) + { + return link->dc->link_srv->dp_is_fec_supported(link); + } + + void dc_link_overwrite_extended_receiver_cap( + struct dc_link *link) + { + link->dc->link_srv->dp_overwrite_extended_receiver_cap(link); + } + + bool dc_link_should_enable_fec(const struct dc_link *link) + { + return link->dc->link_srv->dp_should_enable_fec(link); + } + + int dc_link_dp_dpia_handle_usb4_bandwidth_allocation_for_link( + struct dc_link *link, int peak_bw) + { + return link->dc->link_srv->dpia_handle_usb4_bandwidth_allocation_for_link(link, peak_bw); + } + + void dc_link_handle_usb4_bw_alloc_response(struct dc_link *link, uint8_t bw, uint8_t result) + { + link->dc->link_srv->dpia_handle_bw_alloc_response(link, bw, result); + } + + bool dc_link_check_link_loss_status( + struct dc_link *link, + union hpd_irq_data *hpd_irq_dpcd_data) + { + return link->dc->link_srv->dp_parse_link_loss_status(link, hpd_irq_dpcd_data); + } + + bool dc_link_dp_allow_hpd_rx_irq(const struct dc_link *link) + { + return link->dc->link_srv->dp_should_allow_hpd_rx_irq(link); + } + + void dc_link_dp_handle_link_loss(struct dc_link *link) + { + link->dc->link_srv->dp_handle_link_loss(link); + } + + enum dc_status dc_link_dp_read_hpd_rx_irq_data( + struct dc_link *link, + union hpd_irq_data *irq_data) + { + return link->dc->link_srv->dp_read_hpd_rx_irq_data(link, irq_data); + } + + bool dc_link_handle_hpd_rx_irq(struct dc_link *link, + union hpd_irq_data *out_hpd_irq_dpcd_data, bool *out_link_loss, + bool defer_handling, bool *has_left_work) + { + return link->dc->link_srv->dp_handle_hpd_rx_irq(link, out_hpd_irq_dpcd_data, + out_link_loss, defer_handling, has_left_work); + } + + void dc_link_dp_receiver_power_ctrl(struct dc_link *link, bool on) + { + link->dc->link_srv->dpcd_write_rx_power_ctrl(link, on); + } + + enum lttpr_mode dc_link_decide_lttpr_mode(struct dc_link *link, + struct dc_link_settings *link_setting) + { + return link->dc->link_srv->dp_decide_lttpr_mode(link, link_setting); + } + + void dc_link_edp_panel_backlight_power_on(struct dc_link *link, bool wait_for_hpd) + { + link->dc->link_srv->edp_panel_backlight_power_on(link, wait_for_hpd); + } + + int dc_link_get_backlight_level(const struct dc_link *link) + { + return link->dc->link_srv->edp_get_backlight_level(link); + } + + bool dc_link_get_backlight_level_nits(struct dc_link *link, + uint32_t *backlight_millinits_avg, + uint32_t *backlight_millinits_peak) + { + return link->dc->link_srv->edp_get_backlight_level_nits(link, + backlight_millinits_avg, + backlight_millinits_peak); + } + + bool dc_link_set_backlight_level(const struct dc_link *link, + uint32_t backlight_pwm_u16_16, + uint32_t frame_ramp) + { + return link->dc->link_srv->edp_set_backlight_level(link, + backlight_pwm_u16_16, frame_ramp); + } + + bool dc_link_set_backlight_level_nits(struct dc_link *link, + bool isHDR, + uint32_t backlight_millinits, + uint32_t transition_time_in_ms) + { + return link->dc->link_srv->edp_set_backlight_level_nits(link, isHDR, + backlight_millinits, transition_time_in_ms); + } + + int dc_link_get_target_backlight_pwm(const struct dc_link *link) + { + return link->dc->link_srv->edp_get_target_backlight_pwm(link); + } + + bool dc_link_get_psr_state(const struct dc_link *link, enum dc_psr_state *state) + { + return link->dc->link_srv->edp_get_psr_state(link, state); + } + + bool dc_link_set_psr_allow_active(struct dc_link *link, const bool *allow_active, + bool wait, bool force_static, const unsigned int *power_opts) + { + return link->dc->link_srv->edp_set_psr_allow_active(link, allow_active, wait, + force_static, power_opts); + } + + bool dc_link_setup_psr(struct dc_link *link, + const struct dc_stream_state *stream, struct psr_config *psr_config, + struct psr_context *psr_context) + { + return link->dc->link_srv->edp_setup_psr(link, stream, psr_config, psr_context); + } + + bool dc_link_wait_for_t12(struct dc_link *link) + { + return link->dc->link_srv->edp_wait_for_t12(link); + } + + bool dc_link_get_hpd_state(struct dc_link *link) + { + return link->dc->link_srv->get_hpd_state(link); + } + + void dc_link_enable_hpd(const struct dc_link *link) + { + link->dc->link_srv->enable_hpd(link); + } + + void dc_link_disable_hpd(const struct dc_link *link) + { + link->dc->link_srv->disable_hpd(link); + } + + void dc_link_enable_hpd_filter(struct dc_link *link, bool enable) + { + link->dc->link_srv->enable_hpd_filter(link, enable); + } + + bool dc_link_validate(struct dc *dc, const struct dc_stream_state *streams, const unsigned int count) + { + return dc->link_srv->validate_dpia_bandwidth(streams, count); } + +bool dc_is_oem_i2c_device_present( + struct dc *dc, + size_t slave_address) +{ + if (dc->res_pool->oem_device) + return dce_i2c_oem_device_present( + dc->res_pool, + dc->res_pool->oem_device, + slave_address); + + return false; +} + +bool dc_submit_i2c( + struct dc *dc, + uint32_t link_index, + struct i2c_command *cmd) +{ + + struct dc_link *link = dc->links[link_index]; + struct ddc_service *ddc = link->ddc; + + return dce_i2c_submit_command( + dc->res_pool, + ddc->ddc_pin, + cmd); +} + +bool dc_submit_i2c_oem( + struct dc *dc, + struct i2c_command *cmd) +{ + struct ddc_service *ddc = dc->res_pool->oem_device; + + if (ddc) + return dce_i2c_submit_command( + dc->res_pool, + ddc->ddc_pin, + cmd); + + return false; +} + diff --cc drivers/gpu/drm/amd/display/dc/dc.h index 9307442dc225,30f0ba05a6e6..49ac369cc926 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@@ -1663,39 -1664,36 +1664,83 @@@ bool dc_is_oem_i2c_device_present /* return true if the connected receiver supports the hdcp version */ bool dc_link_is_hdcp14(struct dc_link *link, enum signal_type signal); bool dc_link_is_hdcp22(struct dc_link *link, enum signal_type signal); - #endif + + /* Notify DC about DP RX Interrupt (aka DP IRQ_HPD). + * + * TODO - When defer_handling is true the function will have a different purpose. + * It no longer does complete hpd rx irq handling. We should create a separate + * interface specifically for this case. + * + * Return: + * true - Downstream port status changed. DM should call DC to do the + * detection. + * false - no change in Downstream port status. No further action required + * from DM. + */ + bool dc_link_handle_hpd_rx_irq(struct dc_link *dc_link, + union hpd_irq_data *hpd_irq_dpcd_data, bool *out_link_loss, + bool defer_handling, bool *has_left_work); + /* handle DP specs define test automation sequence*/ + void dc_link_dp_handle_automated_test(struct dc_link *link); + + /* handle DP Link loss sequence and try to recover RX link loss with best + * effort + */ + void dc_link_dp_handle_link_loss(struct dc_link *link); + + /* Determine if hpd rx irq should be handled or ignored + * return true - hpd rx irq should be handled. + * return false - it is safe to ignore hpd rx irq event + */ + bool dc_link_dp_allow_hpd_rx_irq(const struct dc_link *link); + ++/* Determine if link loss is indicated with a given hpd_irq_dpcd_data. ++ * @link - link the hpd irq data associated with ++ * @hpd_irq_dpcd_data - input hpd irq data ++ * return - true if hpd irq data indicates a link lost ++ */ ++bool dc_link_check_link_loss_status(struct dc_link *link, ++ union hpd_irq_data *hpd_irq_dpcd_data); ++ ++/* Read hpd rx irq data from a given link ++ * @link - link where the hpd irq data should be read from ++ * @irq_data - output hpd irq data ++ * return - DC_OK if hpd irq data is read successfully, otherwise hpd irq data ++ * read has failed. ++ */ ++enum dc_status dc_link_dp_read_hpd_rx_irq_data( ++ struct dc_link *link, ++ union hpd_irq_data *irq_data); + +/* Notify DC about DP RX Interrupt (aka DP IRQ_HPD). + * + * TODO - When defer_handling is true the function will have a different purpose. + * It no longer does complete hpd rx irq handling. We should create a separate + * interface specifically for this case. + * + * Return: + * true - Downstream port status changed. DM should call DC to do the + * detection. + * false - no change in Downstream port status. No further action required + * from DM. + */ +bool dc_link_handle_hpd_rx_irq(struct dc_link *dc_link, + union hpd_irq_data *hpd_irq_dpcd_data, bool *out_link_loss, + bool defer_handling, bool *has_left_work); +/* handle DP specs define test automation sequence*/ +void dc_link_dp_handle_automated_test(struct dc_link *link); + +/* handle DP Link loss sequence and try to recover RX link loss with best + * effort + */ +void dc_link_dp_handle_link_loss(struct dc_link *link); + +/* Determine if hpd rx irq should be handled or ignored + * return true - hpd rx irq should be handled. + * return false - it is safe to ignore hpd rx irq event + */ +bool dc_link_dp_allow_hpd_rx_irq(const struct dc_link *link); + /* Determine if link loss is indicated with a given hpd_irq_dpcd_data. * @link - link the hpd irq data associated with * @hpd_irq_dpcd_data - input hpd irq data diff --cc drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource_helpers.c index 91b59d858108,eeca16faf31a..35333daf4cd9 --- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource_helpers.c +++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource_helpers.c @@@ -297,12 -309,33 +307,32 @@@ void dcn32_determine_det_override(struc struct dc_plane_state *current_plane = NULL; uint8_t stream_count = 0; + int phy_pix_clk_mult, lower_mode_stream_index; + int phy_pix_clk[MAX_PIPES] = {0}; + bool use_new_det_override_algorithm = false; + for (i = 0; i < context->stream_count; i++) { /* Don't count SubVP streams for DET allocation */ - if (context->streams[i]->mall_stream_config.type != SUBVP_PHANTOM) + if (context->streams[i]->mall_stream_config.type != SUBVP_PHANTOM) { + phy_pix_clk[i] = context->streams[i]->phy_pix_clk; stream_count++; + } } + /* Check for special case with two displays, one with much higher pixel rate */ + if (stream_count == 2) { + ASSERT((phy_pix_clk[0] > 0) && (phy_pix_clk[1] > 0)); + if (phy_pix_clk[0] < phy_pix_clk[1]) { + lower_mode_stream_index = 0; + phy_pix_clk_mult = phy_pix_clk[1] / phy_pix_clk[0]; + } else { + lower_mode_stream_index = 1; + phy_pix_clk_mult = phy_pix_clk[0] / phy_pix_clk[1]; + } + + if (phy_pix_clk_mult >= DCN3_2_NEW_DET_OVERRIDE_MIN_MULTIPLIER) + use_new_det_override_algorithm = true; + } + if (stream_count > 0) { stream_segments = 18 / stream_count; for (i = 0; i < context->stream_count; i++) { diff --cc drivers/gpu/drm/amd/display/dc/link/link_detection.c index 8145d208512d,d471d58aba92..ee16d94b2b63 --- a/drivers/gpu/drm/amd/display/dc/link/link_detection.c +++ b/drivers/gpu/drm/amd/display/dc/link/link_detection.c @@@ -1334,7 -1331,7 +1331,6 @@@ const struct dc_link_status *link_get_s return &link->link_status; } -- static bool link_add_remote_sink_helper(struct dc_link *dc_link, struct dc_sink *sink) { if (dc_link->sink_count >= MAX_SINKS_PER_LINK) { diff --cc drivers/gpu/drm/bridge/tc358767.c index 232e23a1bfcc,91f7cb56a654..d6349af4f1b6 --- a/drivers/gpu/drm/bridge/tc358767.c +++ b/drivers/gpu/drm/bridge/tc358767.c @@@ -1896,12 -1896,12 +1896,12 @@@ static int tc_mipi_dsi_host_attach(stru "failed to create dsi device\n"); tc->dsi = dsi; - dsi->lanes = dsi_lanes; dsi->format = MIPI_DSI_FMT_RGB888; - dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE; + dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | + MIPI_DSI_MODE_LPM | MIPI_DSI_CLOCK_NON_CONTINUOUS; - ret = mipi_dsi_attach(dsi); + ret = devm_mipi_dsi_attach(dev, dsi); if (ret < 0) { dev_err(dev, "failed to attach dsi to host: %d\n", ret); return ret; diff --cc drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c index 8035e50f7422,3aeede6aee4d..ae367d473200 --- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c @@@ -2467,7 -2462,7 +2462,7 @@@ gen8_dispatch_bsd_engine(struct drm_i91 /* Check whether the file_priv has already selected one ring. */ if ((int)file_priv->bsd_engine < 0) file_priv->bsd_engine = - prandom_u32_max(num_vcs_engines(dev_priv)); - get_random_u32_below(dev_priv->engine_uabi_class_count[I915_ENGINE_CLASS_VIDEO]); ++ prandom_u32_max(dev_priv->engine_uabi_class_count[I915_ENGINE_CLASS_VIDEO]); return file_priv->bsd_engine; } Commit list: commit cbf143b282c64e59559cc8351c0b5b1ab4bbdcbe commit d33a54e3991dfce88b4fc6d9c3360951c2c5660d commit d703a0f45a70e6ed4749780ed5efb2d1ec042297 commit e566507bf2f460967f53030ef84b67ef26dcaf8e commit 851a4a77a9f6441bd73625fe6dbc29c814ae681f commit 18d2f6d956d0a39d5a27b0512aee17cb253f5788 commit 413ebc4803f025c64ec80de07c50e65e2f59ae89 commit 19ff997ffc43cb203fb7d6ac169b69e26c7dcbfb commit 249a4f5e663ccd1c1b1d11db68020e488a020791 commit 357513233d6456c9f99e34794897efd4ae907e83 commit 6d8d5c6b643062a0dfc7632f7a73057e75fca057 commit 680d0c7960f12fc3852c70b2bab278cc5e70b88a commit 7b775d36589390eaf19ceada78141c60ed1c7c84 commit f3783aa6b871ffece27388076d2c200a22bdb162 commit c886118bd8f574a635dda176b2460c03c28b1177 commit 0d6e08c72474043d7e686c32f25b735bfcdc9daa commit 220b3376c0781ec46cf86e19b7460e7e1ccf913d commit 6e52ced02392c760936159cc53da5669c94dd9a3 commit d374c047b38e9f1130308aae207dc44045cd5cac commit 9b469093d321f23adf13d966797f55242278c3b5 commit 24efe424f096953d355cc366cdd471ba8cdaf035 commit 2b6f7e39ccae065abfbe3b6e562ec95ccad09f1e commit 60bb4478f7de8ad45bc9464f94d766d8ec807606 commit fceeca7f3cf1c2b8628cd76c936b51271b793b1b commit 28cbe92b59d7b8b1768f1900f677cf8567edd0bd commit 1a45d6811c8790f4f9821038b243a71c9be1ebe2 commit d023d6f741c85bb00d2ca43d338327fbc150c113 commit c22cf04c6ab1d9ad5be2ec36e9822bc45526e8ca commit 9d691c197631f152d7dc6788098f372b64d3bc43 commit d1702963ab145eff51c31e5fdc2867e9c5959ad5 commit 69ea87e1591a39dd53968f2f5d496f0f9499ad74 commit 3c4b33d0e67ddb900efa7a0eabd33a667c699ff9 commit 9c608cf39b96666ecbc163e3f6197f6d8ea78e56 commit 33d0c67dcbb045cbbbba9d41fa6e4b1f73bf3888 commit c76f67275f9c60d7ff53b6a90e90897c207d3d9c commit 2324cdfffbaf0bc2404d919d9920b09148f8645f commit 9dd56e979cb69f5cd904574c852b620777a2f69f commit 16bede135fb1319c22dfa55b2de20f482fcc9cd9 commit 77d3b6130203299123d17df78b843f193c18b25f commit 7f66476c930cdb5e0bc4dc563f241498a3791f99 commit 19d7dc6638a92535769b9ecc2b04a7f3afa0a7ed commit 7fd7eacff0dec488071b5f1fedfcd382bf3ac074 commit 2a6d731a8f16192ece8e1649ca13e55d80561594 commit df5bf3b942a8d344bd9cbbe6ac31c9a2ea1557a4 commit c913cd5489930abbb557ef144a333846286754c3 commit 73a6c676542ac18d2556be80260bf554f1cef4ae commit c580c2d27ac8754cc6f01da1d715b7272f5f9cbb commit 43e6fad17a182de1825277d986a1e4309111e5b7 commit 9541fd164bddde24eb575c5744b6a31a6f62213e commit 14f25bd0bb938af7359433db4ef9495aad4cf703 commit 4fae160fde76e9dc929ba57ec0efbbc1197daaf0 commit 1f16fdbb2a5a7504fcc4be057000e589cb427fbd commit e4ef6503bd4c4ee6fbed2623c50a338dc93d5e9e commit 23cc452e9b6186d6a8c1ddb380a0193652ea6579 commit 3965b8812e173c38b2fd1872dc3e08f436311575 commit da97065e4692247767d2a7f2850d193eb2f65229 commit 247c7a4cdad87564da49a7879aca2f0653689502 commit 5dfb29d444daf94120762e9d7b9fe6aa4e0f9929 commit 1af546c2cec6e28b6bbe01a4ad0c38e96e54fcb4 commit 7206b517665e8b59d7e18877d9741da193cd3325 commit 4b284831c6f3656627958bced181215e7b9fd322 commit 36e491f8f6e9bd9460923da48b2e516aafb80bb2 commit 01f0411f8e307e7154d062f62d4b0799b8498748 commit 960dafa30455450d318756a9896a02727f2639e0 commit fde789e8339c60c8c58e5a71fa819fcfe52d839e commit 58c7ee0676bace7a7aae8a3e21ec8d09eab1c895 commit 24243212c5ed2a5f3c1d1d74fd1913d8c189dec7 commit 1802537820389183dfcd814e0f6a60d1496a75ef commit c7ea16f6a47f9b6eca4e9cdcab8d1f587ea9e484 commit f87c1f0b7b79b7a4f165750d1884da1fd29ae93c commit 0349c41b05968befaffa5fbb7e73d0ee6004f610 commit 54762e920eb483bd70aa92421788bc4e87e4fd1d commit ec852e3c88d5caa457557406c0c787b56c36dffb commit 389b9d91dd57fd2d4428bd0c19ed1cacf2fe918d commit e3ea1806e4ad097c9e67e108853a4ae0f3f100cc commit 8d993276486a1642fdb70410debfe3692cc508f6 commit fec37500cf1bca65934c60b03f0409328e60ab7b commit 118b5c136c04da705b274b0d39982bb8b7430fc5 commit ba00eb6a4bfbe5194ddda50730aba063951f8ce0 commit b33771546309b46b681388b3540b69a75a0e2e69 commit ac7215c423a34837b634c90cf29681537bd9998c commit 70994becf2d0899dc9f8c23154af6aad34b0981d commit aae4f817b8176c0232fb1cde491da6d0775bed14 commit 9310dba467990d393942cfd0c77acf21484050da commit a0dcb06d29d9e477e1984dc3859e61568361fc1a commit 4039e44237e8ebb06f0e4af549fbedf7c41df9db commit 5f21dc07b52eb54a908e66f5d6e05a87bcb5b049 commit 05d5562e401eb0aefab89788a24c0d4e776150d7 commit 3a38be31ec82920a871963c086393bc0ba26a655 commit 869bace73ae2b4227e57ee3fd994bfa7d4808938 commit 4602f42f015232f6c1b19f92d14688aea00448b9 commit 4fd4fde8e42e16425e7acab2e093614491107083 commit 580419965c263120ee05cd99ab8d35c2fdbc449b commit 96eecf9beea7603d6ccb5d0baace85fda842ea15 commit 1c621f2a21cd519965c6820698345fa14126fec5 commit 9847ffce9b5f83a7707504b0127aeb6a05dbd378 commit a13af50d75bc266bc746a2ac2b38d597f08f4201 commit aed01a68047bd92e6f1273fb2e0b8e99ca72a876 commit 2b9ed318ad1c579df943c1eb07ae1f1c0e5e9d83 commit 064b3eee8e0260d8053b588c71a3f71b762cc0f3 commit 7ee6f99dbc45eb457c87241aac1067fef3f263d9 commit 96a7b60f6ddb2bc966fac800c1dd18876a6e3c3f commit 7c18189b14b33c1fbf76480b1bd217877c086e67 commit aa8c85affe3facd3842c8912186623415931cc72 commit e5e43d3363d7c53d99163e94cc61d418230da17c commit 3cd7cb2a7b6b94841aa7aad4c56ac5d7bad683ad commit 2cfd1b38413c15d1c0af6e24ec3f0af8c36cc27d commit 4583d6beb04976dff3440b1efd2c5956997fd839 commit 9da2957f9f81ed29d0046021f131be352cb2199e commit 6b2e8aa45126161135fb4a88870c9526fd8319f8 commit 09881d2940bbd641f27f9ae7907e8a1893bc54b2 commit 6703e28f976d9240311ad260a73504bdc6f6a74b commit cb8097a45da128127db71cfba2d4a2614cbf71f0 commit e0029da927fa9cc3c8ca6b37dc10624d1209e310 commit 39985eea5a6dd1e844f216028252870e980b9e7f commit 668b206601c5f5063e03b76784a0d3024fa2b249 commit a44df74c720eb45d16a92ab9fc8a780d961d5e2b commit f1dc979b6088426698b13e888c65f9c287af48e7 commit dfefe7bc53a115d8a99478ab9b8d7726c70c0c49 commit d24b34758dfaf47276363746e286464d13649efb commit db5d650ff0b5204ba679320ecdbc5e5d7ea80508 commit 5f42196d39291ac5a34b4c68c754a7b023892d53 commit 9151c85cbb2c3962d65f12dd0e8b2a7f0d9908ee commit ee9125720c024e759d5c0f888fe7b98dd22e40cd commit 1b108bc7607e0ac54e1664b9d8b15c70d2b0af62 commit b5d0bea79367144cead950bad38e7c9a1ba5c087 commit b17a15d6189fa86bc06cb88bb2980888d81cdd75 commit 9d4b7af520e542b82a5db210c2053b5dc190eae0 commit 36d421e632e9a0e8375eaed0143551a34d81a7e3 commit 9ef8d83e8e25d5f1811b3a38eb1484f85f64296c commit 9542d708409a41449e99c9a464deb5e062c4bee2 commit 2bf91341ee42fddb6615936701bf2ed68689d452 commit 273e1daa1c025d8a8649d5622ab8b7f344960e9b commit f9dfa87c43a38dca16fcb4fb527d3789ca7bf611 commit 1b2146de7c5bcc25b75484c6ff1c94971c7696e8 commit 94b49d53acece870d242f6b148aff3940cb6c92e commit 284c5baa44218ef615ed8f5edcd6cfdedaef6abc commit 0e7a16f9ddde61d7d65bae9c7ddda2e4a22cbc12 commit d6683bbe70d4cdbf3da6acecf7d569cc6f0b4382 commit f56e0071a6fea6b416943d8736f3128c8b2abed2 commit b3baf0c00cbd2174e9fdc7141ea30adf123c4a8f commit f20eb7845ffde91abc954493431aced4f5f5c4f5 commit c50ad291e4d9cf32dd893c2e06019e8c7da89f65 commit 61b795a9c35264022cf0bfc49d26e75162a23d5d commit 06f1b06dc5b75b1a4071c905231d40cd74587a18 commit 9fcbae04987b9bbc6b5459bb37814be811c6e05d commit 3dadb4a17035ad4c84670d2ee1a3070f5fab4bbc commit 7380f545a8147500e02843d1327f32ea905c953a commit f22c982ef4152f55516865e4d802760cedda6470 commit 4923e99fd0a711f854b964e1a8cf9163112d1cee commit ae2ac2d806b7c3a0cfad4cd76c22aa44b69d9265 commit 2bd4054c7d5c888db8a2f985c8f01a9278792210 commit 98463a24797c494108850441510c48741976c2e6 commit bdfee32454843161ebdfa3ff9fe37dd110604db5 commit 1e116253821a7a3404f4220a0493793f39c7117e commit cd5103eed56fd9012221659c403c3339b8c20305 commit aa80b2b12b89a4d5de2960968b01128003b147e6 commit 8910d8b7ed288564fdb0ad41e02fd8a381f7b727 commit 59ea2887907db7315388f4e37f59aafac8ab2530 commit 8eb2e3b47e3564d2ed49d3fbea5f472950ef98b7 commit 46b3c0f683d6a2128f7f2bf236bcdc62caec5c83 commit 5ed88f96c137b9b68ad99f40721031feb6b26923 commit 22fac49febaafd7e3f141952915f56ccd09f5cbf commit 02107ef11b438a2528a113d8a546d4dceb8bcce1 commit f99926383bd62d2b707e4599b4e096e943f63d42 commit 6fd3d8bf89fc6525264552910accb09c93abba02 commit 158350aae16a4e666e261da0bb4d91c0601a3edd commit 01361096a33a81cc224e12e8cf06240f12737365 commit 1008266e31a0cb86cf8ac18eb77047283ae2b800 commit bb45217ff335d2662ee3cdfe3f32817e2d2e06ae commit fce187ca0cdd6dc707db2c7c22b863cd8bb91ef8 commit 01a789fa45bb0802cb396f4f30b1351840ce0c09 commit 55a4679e88b20310de0d614bd3b2f935f98ba5a9 commit 48630a3151b0373f005270c69f0caaaf08e22fd3 commit 5ac421a9ec6668369b7910d4b1e7f5e7e9e9ec94 commit 3eb08ea58e5717cf758b9eff6d9604aa3525ab94 commit 998894d5dd49462013f1f61f094e9e91990f9e7a commit 1d9ce1cbdc191180038b66a914b420b8b0075062 commit 9c0cd4bb9a2da8c69cd9331ba1824bca027d6090 commit 050db7d70c3c6cf72d11dde8961f953f990b9c6e commit 61a55f8b1ebcde68bc7bfd57435b1b3bb1121b8f commit 6068771673a38efc31ed5b99645176b4d3a33129 commit 93604a5ade3a021fe3daf37f8d378b12cabb26b4 commit 495e440b354203d286127f8515f67a7a711ab6ed commit 1e84dadb2762cddbb5a1066713fc5fc6505e9f27 commit 169b9182f192e8725c8de5d7d77f00f6ae6c7fd4 commit 8f85e4a1667fb12a2f0f83876ec68a75554ed5b3 commit b712b3830a327b171f0a00512aee5e84d45f6d36 commit 2a742fd1640574b80682669825274122e71141e7 commit fedee62781e3aed958be475af6e5dbea90cf232c commit 1f89b94bcfbf1d9ce7f26bb66d8ee0cd7ca7d6d7 commit d5f84973acddbc6140cc82d74ae8f5b3e11c027f commit e18b19740299285fb18ac1513dcaaf0fa40e140e commit bfa5969e1144c8d0fbbe1a976601dcbc50549757 commit 2846cf3fdb8b500e374efdcad3134633dcc5ce60 commit 1552dd6ef99fb54479afdd2fb84473b9655cad3c commit 9548fefcaf9ab61291c0bd427627aa773b19dc75 commit 992ed9d525609e2bcef9207c25fe2b1949f158f1 commit c604d31950d10db45267bbcb9ce8f1dbc2bfa74e commit b129ff30acea495b1455cf8d6e1d86fdb87d22d4 commit 95d39a0c64aa529adbff1bdafd391e83ad587602 commit 5eba7426050755c96d4b9561432b18ca000a4fd4 commit 66560f33059ebe606cad7aef9c298a19d4f9e998 commit 839259b8afbb78bcd6d0b698e82cd4578a505ba4 commit d1e8959203f21aa577f2fef531109c9cf872d4b1 commit 3687ce7517a1e81141191bf12e3e86840d6b9ed9 commit e7e12f6ec8bfb040e28ea7287c907c19477149e6 commit 518b761a7b0e2bb2fac2518f041c71b461adf761 commit 82ea22256b9c1fe3f5a089733969f6539d92d9f0 commit d24b77e444bef83155557ebf4c2b3c551f198926 commit 28d58468ad7d9630c83e4ab3dcc0b2953a276f7e commit b2daaa9360610c584fbe8d7d5e8d1fdb99abc7ef commit 4fa01c6357d5f4ae80b1794c5ecb71c0c66cd528 commit 4d3ed6326449ddb1356544bf838024eb232dd315 commit 4f101d5710a84f334b05a96713000ce8dfd4d598 commit c3ed0e72c872901659ed0fef4b91eb6ab7dc6aad commit 0c3c99364361171f8cfeb8b66b1e6f4709919dc3 commit cb42e8ede5b475c096e473b86c356b1158b4bc3b commit 957565a473a630a3d01932c7173860b33e7acdbd commit da6198afb01df0dce47fde23b53183cc0009b6a2 commit ba8ff971008cfaef6049df52a6058801202435d8 commit 0eb1173422f648a503a2ed1a8364f2d8bd7f690c commit c087bbb6d84e7a2e8dc834fe066d2a91360c0db6 commit 1c388da529c8206818de6dd89b99ba21acc74f6b commit c6a53c90e3be8b7e745a46c941631d0855648313 commit 5bacecc3c56131c31f18b23d366f2184328fd9cf commit 5631f6a0436ac30eecfb2e6fdcd0a517f90add8a commit b568e6bb49d49ef05fa3aa4bb294ae960e1d778a commit 217a8c63df30246f180760b1e1f3e57267efbb6a commit c5a486af9df7a7180d0f19fd4b6c801da64a154e commit 8ac752463390882a5e73d85b141b68d5c259652d commit 7eabaa892d9c57ad9b2946f923d781e8a16f8e88 commit 3842d671d7556f33d5909d472954328201b8b530 commit 3f6a1e22fae95a50a2e4815305931ed1da5c9a12 commit 67fe7487fe8946f33009c7b5a7eafec535a7826b commit 67b7836d4458790f1261e31fe0ce3250989784f0 commit a8e47884f1906cd7440fafa056adc8817568e73e commit 5767dc9e2df70550552c856ebc4b8467767661f6 commit f9b9297b1facb636ee81f03be3658087067babc2 commit 7416cbbc9fb9b09ba7664dc0f3176c567685a83c commit e0106ac97886b6bc36c480de72562d3e70b3f8b1 commit 567172bbb4805a9d9e84e4621210212126703d04 commit e47f1691adbcbba22b364888cb34686d6c7d1152 commit 283947bbd5dd8885dbfbd86515276a9ce4a31251 commit 60971b204c615a6881f50c3dc9a2182551282b94 commit 1a80993ae37341c2017108d02975683076ace2a6 commit 61d2a9bec406329ad57e2ecf8e33338a21057eec commit 1e5d4d8eb8c0f15d90c50e7abd686c980e54e42e commit b4ceeffd13870b641a284ffb0f6fb4ffe19b0b14 commit c69fc3d0de6ca79d946a2715f8745a1eae69c3d8 commit c32699caeca802cfa3416f798abcff719d1633f7 commit 36951fc9460fce96bafd131ceb0f343cae6d3cb9 commit a06d565b4a1c032ff8a8d22ceb39c061443208d9 commit 504d3cae8b6718ab9c2fbef9e4cb56deb29ea9ee commit 9bb10b7aaec3b6278f9cc410c17dcaa129bbbbf0 commit 1e74c05b275cb4224f3f8c2240ab24486818a823 commit 6ed373b0d572cde539a461bf333661cb98595e63 commit 7bd571b274fd15e0e7dc3d79d104f32928010eff commit 627441f5a56e2ee119baf340b394cf4ec9c94251 commit 1099238b966e9b291fca40d908d6a016ce758455 commit 7ae1dbe6547c39410d82156c96eaa9c8cf55e87a commit 2d81c4cd78477e473dbdedd1dbfb67460fa53c58 commit fd234e7581162573742dfb8cc4dc0af3d3148138 commit e68d1e074d5e94b609de01a3ad3287d3d17721f2 commit 26a9f53198c955b15161da48cdb51041a38d5325 commit b5fefd01e8367763840e032bf1537747905a1447 commit f3f8f16b10f8258f1836e1110099097490a1d6c1 commit 82a10aff9428f1d190de55ef7971fdb84303cc7a commit 32953485c558cecf08f33fbfa251e80e44cef981 commit a03e3cb16dfdf4e39ed4ed80314256f9ba671ff0 commit f4658f43450478240e2e758f0532d19f921f9a69 commit cebc13de7e704b1355bea208a9f9cdb042c74588 commit abd74d262b07f33d6c298f1b2fe03cfcdb3c72f7 commit a38410860628909712ea6a2becd42bab56c70e9a commit faf67f640fa6c036d19727e294a2915e3fe5bf7c commit 37b42cf904e2ed92a612aa09481385cc9eb2a6ce commit 5abaa6835f42db7a20ff57447d60303cd81495f8 commit 4ce0c8e7cc1c81c2123a7b44223b0bffec00cea8 commit ca62297b2085b5b3168bd891ca24862242c635a1 commit fe82b93fc101beb6396193b1713029d18d740e7f commit d34b4288bd1e3c70ec6d790fcf1041e99d0fc85e commit 30c35a4ba9cd91e07825da8e2846887cb000114c commit 849ee8a2f0df7a4ed4d281e19d3c9824b8e60bc2 commit c103a23f2f297c6ab2e5e74e39b655439f3524a6 commit 254986e324add8a30d0019c6da59f81adc8b565f commit 12e8ed969852c11503216115952c84f7c2f4c6b5 commit 55cac10739d57b94de4626bcb009bcdafaa781af commit 0591bdad58c4b83a286872305e748bfd77d16d28 commit 775d1bee8fab737c9e70050f61ad5370d8733383 commit 29b41cf707b5ecc55cab12bfa04fbd9811f4fd04 commit 4d14d7717f19fb1125496b1fd836ca89f11d540f commit e3ecbd21776f1ff7610dc2c28b3b47ba8c23e10d commit 72122c69d71784e390527819754ea456421c4501 commit 409f07d353b3516c71fdf12d7fa576004f0167a9 commit c5dc1756dc98e730ebcaed156a05b961086dc2f0 commit 1a62dd9895dca78bee28bba3a36f08836fdd143d commit c3f059483671426266f681833bac6c09b0736247 commit 26f8c146924fac0f50157fe22d1948fcfadae9f6 commit d3708182cbc3404aa2f7fd5ccfa07328018f4bf5 commit 893a6c224a24be49ea5a30315d1ae5967598a43d commit 95ccb25e32af8a86286df215f19ab2c0418cbcc9 commit 825f0de2fdda691776b6f45af1d3c9ca3d5ff7fc commit fe00866c65602e94c1b6b3d3efcea3633330b02f commit 1b28c1c789d0c11be213bb5d892f9a094ab8e201 commit e81a3c12b88ab685ce10482c3f6d5aa46f08a6fa commit bd5a7886f5ff6899170f3acd85f57c0f43d0371e commit aad9729ec0e009440ac8c1a4be2204e4d3c08977 commit 6dbbff25b39565c801c87379bc85933fb436518e commit c0d5c293ceb752e4d91e40854196a13f3cc070c0 commit db1c1a8f0a2bb69eb9123b2d2a88cc7d3d49b13a commit aea9040c2df97a03b73a13ba124d1b6561e09c4e commit 2b595659d5aec797d2f469691cd543e9b3500471 commit f6c0cd55fed897e8441e41c4bd8220a39539bcf4 commit edfea16a6dae9c03bdc97babdd69960093263354 commit c1aafd6399a3fd35594778acc618075e1bac81d4 commit 9228742caf899fa72230dd8da19ca4c7528badb8 commit 0eaca1ed0d2f70e3e573ef103ddbde582b2b3745 commit a98ffd6e333583c9c3f57920c505a37eaf5b2586 commit dded35acecffe9b6ec881ddd42c6275a38fbfbfc commit 4b736ed40583631e0cf32c55dbc1e5ec0434a74b commit 6e9213287ce4d75765d2806986d4e3c7e4991b3b commit 43660b4ea53abc2be04be18a147a39e1f4cb8b72 commit f999adb7acb7d52aa8e8be0dc75f604d41e51e38 commit 7cb3cfc030640bf860bf8299aa00cdffff92a40c commit 7bb3956178e5eaeeab5134cf38e0f057bc2344c2 commit 4d2c09d68de2acec46fb471f5a358627c9dc3885 commit 2b396e75be74078640becb36ba8c01977bf1e0be commit 4c93c62e77467fd5e9a9fcfd708a50b23a9951e3 commit 0df2032ab72a47c531ff653d32d82df5e7d52e3a commit 4f17289f14da7fd255f330d0e6545251f81c711c commit 2024ccc8e28309d549578190ce0ec7a986069e9f commit 4688940a1e03fc2457e40aac2257fe55e97c8d3e commit fbf46565c67c626849c7ce2a326972d3008d2a91 commit 7138fc88fdc1f999a547657af8623d3a2a862fc1 commit 051ae8d59c321da4c3bc8ba7d75dfba7734e2c6f commit 55f86c2b030463f8c98e66911f4548a1fc0666ee commit c7850370574f0594993d21dd02c54d2a853d2d6a commit 0b6c67c22d2374a98890cc8b6204302f75e14cd7 commit a32d7d6b198b23b7d8f40efb9efe42779ea7b011 commit b059cba51979b3431b75e0c6f18e9f75e427537c commit 31865e96f9eb52ced6d5e23f9f3a5376f81c9410 commit dc622367c56fa0b5a911be73e22584b3cc69f5c5 commit 2d51f3afbea4184487132eed85ae83a13cd6b1c2 commit de534c1cb0313a070f45938a53b53927cd34e5b9 commit aee0c07a74d3f79aef553e3bfc6ddf184d33d3bf commit 67d198da2fd493629e498629781edc5695bbf4d9 commit c93aa7f33e94ee9d64277fa2a345dc30c127d798 commit 0db13eae41fcc67f408dbb3dfda59633c4fa03fb commit 0215ce9057edf69aff9c1a32f4254e1ec297db31 commit c0a561d96a281b91d48b77278714cf5b791a70bd commit 11efe095dfe0768f5b248b77a84e5aa748f14204 commit ab487ea8910d2a84f851cb87f2cb49adcb5b774b commit 1e88eb1b2c259994d034b0833cb489105a984ebb commit efa4c4df864ecd969670093524d3e8f69188e5eb commit 84c03df58d8bbf77feb2f199f10dbe8f7f72c782 commit 36516001a7c9cd7901673548ec685bd180b1b548 commit 76f5dc40ebb188b081e03783541856c03e97f8e0 commit 6455cb522191dac057d5cc4b3f24d5d3ae6a33ef commit 202a3816f37e49ab490ff4582f1fb34390e5824e commit 788c6e2ce5c74c0a22d4e44cca348c8458b3f01d commit 34fd6df7886989019d4f6996da2d2edfde5bcd34 commit 2b02d746c1818baf741f4eeeff9b97ab4b81e1cf commit bf77fda02411fe2cac3522f40d8d6882d27ac14b commit c186c13e65286a46b61f5c295f9f9c65c75c926e commit 4652ae7a51b78d7607c247228ac2a14fa0088bbf commit de930140bb578ebb075772e946e20db68550bf2f commit b5ac70369e3669df4a0c192c40c0e70c3e56439e commit 97fa4dfa66fdd52ad3d0c9fadeaaa1e87605bac7 commit 7da2bcda5899e92ef3442d5997154d8220245370 commit 2820433be2a33beb44b13b367e155cf221f29610 commit b8272241ff9df5b57e2777a07c1fe8af3d9cbf93 commit f7511289821ffccc07579406d6ab520aa11049f5 commit 7222f5841ff49709ca666b05ff336776e0664a20 commit 81f743a08f3b214638aa389e252ae5e6c3592e7c commit bb46a6a9bab134b9d15043ea8fa9d6c276e938b8 commit 1fd0da91a882a2421e7702201f707c5e06bba6aa commit d37a3929ca0363ed1dce02b2772cd5bc547ca66d commit 3e22193d8cdc0576cd2803da3cac9f4fc9222273 commit bd1b5799545ed838651c618c9fbf8fb8b5feeceb commit 13e3a038abe033b38db6313de7a9f55ac83ae422 commit a2c5dd9ec6409821505e0409814cbbf741ca61d9 commit 511a95552ec878fc59a294652ebbf73a0e8e0c76 commit 20ce5ed69bfee125b223bb0c6a731128caf07b09 commit 5fd1bea5c23bb921720b6c48ceba5d6415f2ed02 commit b79f85b7aa5a9ff9f702f40c6a5fe4a53e965cf6 commit f651a7b64cec907bd645dd7ce1739fbbe257bceb commit ba137e64191f313eb0e91eeb9a1a2db1b1d5234f commit 920da947af28638bc94bb0012ce8600ba2d06c0e commit e67db9d2fd33e1118b518deab45dd6cdcf3c62a5 commit e89838968ee4446073faa718e9303bd6341ee0d1 commit 5a2854e577dc2b4538711afb9d788a6fb835b640 commit 22de25f83c6b9b2df45fa346b632dcb9b6f1acda commit 8bf0d9cdf36b0bebf17b733e3f5158783d765df3 commit 36e88a9e4569df86e81dc75a7fc6f2d41f8ab8e0 commit dffe68131707df72c9a60f18fddd3732a6d3c676 commit 83923cb27323139f9e2185db9b3b1299e6cf22bc commit c0a76ae8743a8d6cfa5c06b5efa497139100bed6 commit d068b700432308962d1bb6da467d1dfb1358c2be commit a9d491d99ece898fe6fd5f7374eacb5223e1531b commit 6c5e25a0255d56e8455869cd7f90bb9be7478132 commit 58265640fbd9a57bca521c3d83012fff2cd15fc6 commit 3a906a0cb150a872a23f6204449d3f8b50693837 commit 5922231bd346da717ceee8d14b4361fd595e58ac commit 95f8138d669fd02e304e5e2531f11f4f335dcd22 commit 8d746ec4ab14e7cb82787c6f8bfadee8dd20effe commit 8ab3b0663e279ab550bc2c0b5d602960e8b94e02 commit 96c25b03145aaa0d2900cebf0349f13a689b01ce commit 0188be507b973e36f637ba010a369057c8cb7282 commit 561b31acfd65502a2cda2067513240fc57ccdbdc commit c4298d15778bf21eb4834768f04c0dcf7975dec2 commit 2b897eb4f5993a221dcd8e4f29fda3046669ed59 commit b09f9670b130380ebace4ce378ec04cb7d042871 commit 913e013e9e1a331b3cdc3d0a033e120d630a80aa commit ce086a32ae21a01e48d202cf85b43815a0eeccfc commit 3e853b9f89e4bcc8aa342fa350d83ff0df67d7e9 commit 2553bacaf953b48c59357f5a622282bc0c45adae commit c4a1e57b3544bd3d0252cf4e1d73d9a317de0923 commit 3e226e4a21808e4582020f813b041504f316022f commit 673515ba0249e47a0e69c56a16af24399c824d60 commit 6b931346ed0f7ec3238700d17742d092f164ddc0 commit 636f973c123fc64861cf41457a68302078b323e1 commit fcb0348912ab718a3613c13cba264aecc7462c74 commit cd414f4f59f64d7d2a249caaf387edbc5a874020 commit d1b3657fb5b66a40b4963f72834b193d18d0a98d commit 7cdae9e9ee5e29104010225007ee7a2f32ccdea8 commit 7b9a9e35e45def496b0a5b3f206bb4efa712ea4a commit b67e0f530fdf5671a94f079d48707e5ec5fbdbd7 commit d011db300ddeaefbcda6a7bb2a31a73d263bbca3 commit a1eccc574f977bd21a4ec8ac54bd73a2756bd281 commit d1c0cc8d0d7008856cf425c64d7203f95beed841 commit 5635adcb34b3f402dc013446d9e57eb534ab8c48 commit cc158d0e9b0866d3626a81c13542d3be8f1477a5 commit 2fb82d5a42bb0e69547a2d31340c50bbd3a3d276 commit d2ff2ef8c023ddc99e2d2e0c70ff307ebd7a6d89 commit e049497702acc5d16bc6493f68368963e0bef989 commit fe57235bc104f2389ae1a54ea2536c1b1d6a4611 commit d99c028941b37c412f1de35c59d96ae547be2d0f commit 03e7ac67e743195633455d7ecb4f7327e3797986 commit c94aa5e0407e23b9d51bcfd073d83d0e504705c3 commit 91affdf3517e9255443dfadaf6978ffec16f859a commit edc9f16763543e5f51f07164766fac8d6bc9e560 commit f8ad33797ab3dd3ea011c1d5f52ec684fe925271 commit 6ffdf8865dc52e33b9867fe745f681175b997209 commit 74b9a444baca40998d4b3c193b0a98b495fdb7de commit de7d09ffd5e74e3e1257944b3dd03357390b745a commit f8d221dd97cf054740017db9189029463c434a9f commit 038a24835ab68f341eaa7a0e3bcc6ce0f9b22e17 commit 0993234a00451e0a5c3e47d8b0f2e01dac6cedbf commit 01f05940a9a75e11a2be64993c44ad8dd06e6e26 commit 3b4723de0d9be3f2a1730c164987b6e0f38d7bb7 commit 49017304c099923289b0db676351307d95bbbdfb commit 8866d62716c918e5d09d8297281ef93155434da0 commit 75458a842cb59db8695a074d7a740321ff0a1254 commit 67f3c2096909c457c64f96954efee36e48299991 commit dcaf5000b054935780db718ecff8cafe6c183df8 commit 22f1482aff4aee39e5f3354808bc099084c2b64b commit 629fcf0b687e3244f4bc1ab0070074f836703b09 commit 28f7e8971846519720a83b85004ddfe33680be92 commit d6530c33a978c6d170125b3a2ca1d218b1863e52 commit 53e9d836ea7fa0bfe9950ffb92d50811a5e69f01 commit 6ab68650a10e89dc351cb12b42a89b8789126c13 commit c69d51395a3bd3905a3837691ed48c7c89ea3d95 commit 5640e06e60198d9abdf6c618c54d982d8ec9cc0a commit f81c31d975b463c24506d817a48390621f057a57 commit a6dcf9a7ccfed57abd44c24cc505b559281d44b9 commit af8312a38f713d0d5445277a57a1c8e4157da5ff commit fec70a8601a76272b08b7b8077b3c3e3c79bdb72 commit 474e2d491efe8ce516e743dbce6a6e75bac3b3db commit 566b6577849fcca743aa63d43793062aba62166c commit 84b31d484eb9759cb3d8fbbb7a0e191cc097ea28 commit 4648cf5fc8c78d71ebb22c9fca760062b7747ec4 commit 1aff0a5d71d23be6658f893c88c6a9791202bcb1 commit 9724ecdbb9ddd6da3260e4a442574b90fc75188a commit 53c4e64c6a0fdadc972217343f4439a96542f56e commit c8a76df60d5c4e38ed94fc46a05f7be2631a9839 commit faf0d83e103e38e8bf7cc4e56da1a2edb9dfdf74 commit bc37c98a3d44f705f30fa39a9b9f46a0837c856e commit 68070b76c4aac9369d7f84d802111ef83a7ff943 commit b79fe9abd58bab7363583d30d67a5385ed779616 commit 74e6a79fe8433ea0003d5308c566e68b3c7280a5 commit b3fec11d0dbf43d0b3df11ca71687e25a5698ce4 commit 9d8fdb04fb93bfa2edcdc15a2d48270829e9e95c commit 5d3f30e033ffdbe027add4f1366238cbde686d13 commit 4144334a41a577153913897922ead867ac9a27fa commit 54c7b715b5efe405dfd5fdafcaf930214b9c1fa9 commit 932698c88dc414e36e0683fbf6cf551b928441ac commit cd487b6d506329917bdd2a594b307aa469a53872 commit 98ef34186286c457b7fe6a73ece9b279438d645d commit 98ce7d32e2154a6676d4dc7e6877af68cebf8832 commit 5d04d13954479292dd45e38a46dfa31abb8dc2e0 commit d142d4113fd5c3f7afdb48dff4703ae7edddf53d commit 2792f98cdb1c8fa43bf4ee5ae00349b823a823b7 commit 825b3772a2047bd32ed3b3914234da0de19ef2e0 commit 8bf6e20253b2d2b614f2c0b491f840e956fa6b05 commit 6069b66cd9622c4b29817d4e19737e6f023b909a commit e2945e6c5111726536c6046eaa1b840636e066a8 commit d2a9692ad4295e227e3352fdbf14b8491b01e1c9 commit 313e9f63b74419ca14c2c09f581a79c7037ee0e2 commit 7fc0d011c378c6b2abc65cb536e0df0ee055ed39 commit 4713ace3246644519bf93cc8ea6e44efe57fc3ec commit f7f0085eec8d3c0c353d2e7bfa7fb54b3b925d7a commit 4230cea89cafb11b2c2e4dcac8b505e7a766b386 commit 328839ff93709a517e89ba1de1132c5d138e5dcb commit 8c042949af1e935123140ab6e6a3dff945194a11 commit fb4651f9e00dd4e07dce4c48d458abb50d276e40 commit eeefe7c4820b6baa0462a8b723ea0a3b5846ccae commit deaccddaf4921faa5dfc71e8936dd8daa98ba33d commit 562e08223a85f315122cd65e8f99b8c0a42b8771 commit 5f3401eeb064fab5ce50728cce46532cce7a85c5 commit 057e335c71361063e173381cecf2e8487ec8b552 commit 7108a1c1271dc4d26789002c1a6858b52f237cf5 commit c416a9e4e31eaec5a35417b056a22c73652db544 commit 05cff51055c1050bf3a730748db15eb84f34b31d commit c79503dc2ec2378d08cccb6b53da408d6bd6cf9e commit 3726b6e7c0f1842a2ffdfd5921c95f69c0524808 commit 22e3d9343b8292dfd8c72a5a539dc1ad4829b87a commit 7f544c5488cf5bc94b379de750e08fa3e146b6ba commit da9d669eab152dbd6e9410606a7c8c8a212a7959 commit fdc94d3a8c887e4e06a7ff8dcb51d55cd70e16cf commit 370808876b5cab365f8fc6dbaf8cae13a2bc6efa commit 65ba96e91b689c23d6fa99c11cfd65965dcddc47 commit dabc114e4bac903c365bfe6d7b6e8ed7fa38f8ad commit 4489f0fd9e01efac81d98884d5cf3fa708b9daac commit 0bad3200dffa26943ce2b561e5446cc3ac018bc9 commit 7ee938ac006096fe9c3f1075f56b9263587c150f commit 83842357c48ba9270bdf973fd21c8c1a2a4af72b commit 1de178421f1a95de408610c89655ec1d4edb9d29 commit 81e291d6f4296759df03666ca008453cd0e86821 commit abe3c66f3491ff14a5d616921441452f2c9693ff commit c14bff92abfe464974c795ad53625ffbb6d6ef31 commit b24343eaceedb902c1625854f85a193b0549d85f commit b0fbef65e227ad4ea81bf2ad3d17d073bd0c68de commit c7d18b40a80e5c0a31e1dbea15c9591c4150e0e4 commit b288d740f885648680a8f1bcfbb1039d16be3f13 commit 72f6107d2f2294f76d9fb086acd0b01690ea5021 commit 00000922a33d4adb06a947621f553cae12363083 commit 165d5133731a2e045abdd6d9d3c9221fdc2a556e commit 862643c7589dc97111cd59c471dca0b354f01eb7 commit ae1da08fb306caa8cc134b81ea68c537cfe7a451 commit c4252a11131c7f27a158294241466e2a4e7ff94e commit 14c7b2451adce947b034ce1891c2db9220a3e8ce commit c640f6c5570a6af904db37979d344ace8312c675 commit 6e889b1ce7f1be2bfcfe39a4bcc82b34380031c4 commit c931ef0041fe0a7b62b7d15774a831f3bc85713a commit 3f3fdc978b8dbac444f7187915a3c874b674bee1 commit 0e9b1e5be8656c0705237341401c78c26b6cdf43 commit 5747af7c7303a1ed438fcf51680b767dca08c5e2 commit 0ec2a5b291af32dcd2b52dc8c1d53c3037238939 commit af3004c9ac81a532a8106d1d3c06e09eb95f0dd6 commit 1aaba11da9aa7d7d6b52a74d45b31cac118295a1 commit 91f4228960adb6583a33af310912163469f49da7 commit 705c870179ae57815d15a9e783442f22030d3a7d commit 8cb1f95cca68421b08333175719fdd3615372ca8 commit 6e8acb6686d805ac5d127fb691e28e742248c523 commit 84f4ebe8c1abbe375babbea46eab746a0060e80c commit b5202a93cd3768b5f757dbc1c7d702772a34c9a3 commit 3cf15dc2f81f765078ca867eaf42400f26b2052c commit 90031bc33f7525f0cc7a9ef0b1df62a1a4463382 commit abae262640ef9c7f24bad65acade25b44c7ba0eb commit 5327469ec4c07977e1d824badadd2628fcd04e85 commit 5cc0de456749712c6840d5d9e5b3de1071932aa5 commit 09b9851776b57f7a8a132db55942fc3ee0fdd4f3 commit e1435b67afaef736f5001ba937ab5adb5bf4afa2 commit ee0285e13455fdbce5de315bdbe91b5f198a2a06 commit 556d5a2d4268e3ce860e85e032859ada1c64e1b0 commit b8bbbea1ae6441aaa2439f4fb5fb757d513833e1 commit 8261dd979e801a29f96e4996112eaaa65c04ea24 commit a89c957a955e00d9eac726551cb9fb386be1057a commit d19ccb4ca5436d7500f9fb47d71ea0bfecea52ce commit 8f1aaccb04b7cf63135f4e2748226dfa2fb01e3f commit b704eeae319608b48925869121c97c7bc1ea55fd commit d5701d8f5210f8c70ffd1b51283b2373573e7b5a commit d1837136d184dda0585a687c614a9117cc87ad27 commit be5c6b177229c5cb40f3fef785250afbfd669175 commit 04751a061ea055c4fa264f20f4558073c3d8fb2e commit 3a39841322be5502f5355a558617f0a56b2b3ad2 commit b931c166c47207c8c7bc7eda6c8881dfe0241389 commit 2b438065c3e538844a3b2b56f567303020bf97de commit 23a92abbf3ad44058b5d3cf57937cfb9de972c05 commit f328e96b764a603b3b70f0e9ef6ee052a78ed2ad commit 6780b94d8ed37a0f453a5bc90821ea669ac3c0d2 commit 3fce4c948e2b73ba6f6f2aa7e1c2f101b997e192 commit e85f436824f2e2e067c0a151e954cb403b483234 commit 8891698273b125e57d0d2b6a91451bac06e968be commit 2b9efaed4e4045a40944265f99f52b232df3347f commit ed58ee126c4da81af79ab40b7c6508a7100c7eac commit 5e3ea76492265fdbadd7a58963ff2a3a2e2e8be4 commit 67fcd5d2f3ec364cb7af2c307ed1999bedebb606 commit 749b30efffe58dc59c39c32673ac03010f822581 commit 28a4f5609c9aad29f921850d3fe58bec5074c86c commit 60d7bbb5b4b875d613a43e3be797ddd4ff92cb7b commit 76e1ff37b6872c9f2d11660258fc8c88b2f97b06 commit 6d179f84f274a87da51f24ac3e9427221bbaed51 commit 958e47977bd12e06752a559541867028b120de76 commit 091496e6cba32475ffa53a070d11d9a5a2f1f396 commit e752ab11dcb48353727ea26eefd740155e028865 commit e3890d84482a9479bf42ecb3ddc9e6030624dc84 commit 44df42e66139b5fac8db49ee354be279210f9816 commit 02abecdeebfcd3848b26b70778dd7f6eb0db65e1 commit 70b5ffb393f3f1fbb00ac52c5288d233ae6e991e commit 80ac788a8d2fc8904cce97b7873b6d8fd513a46d commit 014f0515a9e04edf4c35fbd89168aa33663b379a commit cf6c422bf55fa8ac2531d56a6d17408300a59e8b commit 0a93eeb5aef26f68ef247576662282a5d42c63d5 commit 562334d22a05a4793a620a9ef02516f3b8da9ec5 commit 1a324a40b452ae0a57676369c0a0150674728853 commit f161eb01f50ab31f2084975b43bce54b7b671e17 commit 80a892a4c2428b65366721599fc5fe50eaed35fd commit 3962ca4e080a525fc9eae87aa6b2286f1fae351d commit 92736f1b452bbb8a66bdb5b1d263ad00e04dd3b8 commit 41b4c7fe72b6105a4b49395eea9aa40cef94288d commit c6265f5c2f502e442c4f339f121bedbc990c12e7 commit d240daa2c40d384aa01d68163ce5c12625b92d10 commit d36d68fd1925d33066d52468b7c7c6aca6521248 commit aef98f2e1bc411a27f25db81574309b7415602ca commit d24eae4dd7ffb3e6de6080fad1297db8ab4b0260 commit af1f2985038fb2569786f3de64d7dd69f5580e03 commit 3234fac0f97671d55c466e8093e3bdf781dae329 commit f466b111a0c68dd3925deea37271f7aace2367d9 commit 5957a967599360477529ebd593e03f973dcb5fb2 commit 4db231d7dd80163fd251635f81280f1c93a393ab commit ceb4a5619c734ea679bf5a2446e6869056e353d4 commit 6091693a4bd1ba52e406cff44a4a9959e755c986 commit 7d67285e84f62fb5fd00405432ecf1b64f921091 commit 3cd658deb03868a2483484224baf2442bf4d0062 commit bf35dbc135854c809b5cb6bcce320838c6d1370e commit f825fead3570d7b7a13dd13b8d63209dc1acfe5e commit 80bd2de1db0f25c82c110433e92c0703e05e5ae9 commit f5211c5dedee48eac290940b1f1a67cbd5f8bf6f commit 4caee043bdbe375456f2db767c3e35dad0b3109b commit 3e4bc662eca6a18afb45d98ee5f6dafb5ea5787f commit 25a75f56be5c180e4c8e2017fc52f7e9a7a861aa commit 0b9ff428de417423ca87f77dd6e836be967831a5 commit a37558e63b636109b8a9a181b316bb3416be0708 commit 63d99a342a7c36a113d2162cb2cd267a333548ed commit bc517825c5d6c388cc7c668615a0b8f1b26ce513 commit b8c6b225d9d82b5245479960f62f0e95d611cc18 commit c54011512965ab221573b4d31ce1f5a279e15c15 commit 7afe3521bd405d878bc5f9b98d5db4682bcdf3a5 commit 14af917998a6126494423f8820a93982025c6963 commit 16a7004a2d7a2f8953daa5196d68766cfa120fcb commit 4082b9f5ead4966797dddcfef0905d59e5a83873 commit 1a593aa09000c513a912f250ddbe1dd191e871c4 commit cfa075982768840c468c874219dbec558722cb7f commit 74fa4c81aadf418341f0d073c864ea7dca730a2e commit 97cbcae3ff20234f6a59240df0b5d5fa238b3f9e commit 52b29307a98789853d87ed0a68031ec18063cba4 commit 3ad5dcfe00a22404dfa2168f37fecd500ab26a6d commit fe120b9f5ce873516a2604e4ff0c19084be94e8c commit ec64350d01cd45c91916e701964ed8cba383aa35 commit 28606c4e5877cdb27ea443b3f36e3f0bf9e7a5ac commit 28e5c9d601fb8c2f387516b095a9cf6ddf7c00d5 commit c964b86e322f91f409aead79b1b497b74ae0f795 commit ac84304d68c4b310e61b275317c0ddee1b746cb8 commit e89d890c1b4a29fd1871f9ce21e9a94720a10e98 commit 426714f89f7081ce8bf83546219eed6ea1511891 commit b5006f873b99a26f8bd36d691c09083495bc0a03 commit a8b537605e22bfe277e666727fa0e9e01f2c729b commit a36f72547e0eb623912957aeb68465e3c9f7effe commit 63bb1064a71d9372a643dbf1d00b736f203c867f commit ea2b852b656afaf6d45597abbcac8425fa6ab02d commit 75b204ee6cac4595cc663daf59b40162bbf411fb commit 27dd79c00aeab36cd7542c7a4481a32549038659 commit 1c1f61057c10107d15093522c097d9bf54703ae3 commit 2fedafc7ef071979b07fe9e9ccb7af210b65da0e commit ae8df8c9f630403bb74d3c6e9768fe3991d547f6 commit 2a867a85ee0251cf55abca75e745c5f66f76c125 commit 3043d13fefb9114a7698485552f75ad8fc3e7c2c commit 5ee33d905f89c18d4b33da6e5eefdae6060502df commit 5519fea915effccf57fa1369669f4a6bc6c44a07 commit ed8f4e1002781c47813e4e2b37ad15b927fd8b67 commit db8496d0b50519540e1ee50f7e209b3a536ed671 commit a5b44c4adb1699661d22e5152fb26885f30a2e4c commit 7423740b2515a4c8a70ccdc068c0ac4a2610a23d commit 6a4fef21816be4bc818905e07d47e0c20738e164 commit 24dc4f4c2a5cc97e340f440bb01f5f30fb4704f8 commit 8fbc9af55de0b274745e70118e20e0964e98bb05 commit 61b5d0072a88cfd8c5fda31a7c19d105187c8841 commit a51c7663f144606a5f08e772fa3e1e4f2277a614 commit b9c93f4ec737bbc6b6601284df3a14814feb53fe commit a972cd3f0eb50bde3823e8d1df8f6c1b0c673ecc commit 67165722c27cc46de112a4e10b450170c8980a6f commit f2c7959dda614d9b7c6a41510492de39d31705ec commit 06f66261a1567d66b9d35c87393b6edfbea4c8f8 commit b25f551ae197293e1efdf991f47a70e8da616845 commit 4e936b65211a578ad1291967fb2344abd9488cc6 commit a8da6c18b481efbe78618dbba18c2db3241f4fea commit c173a91b760844074abcd636eda47d3b2c107a64 commit 2983b869881b169288909b4ac93f407fe804a75a commit a8b4114d112530440c00fd5bc01e4497480fa4e8 commit 40a55b842bbcd3d79b7a8ff7c426b22b6700768b commit 7c1da0683e2adb969005ea195cb6bed22f844a69 commit 2a4d292f056b35f54cd7788e124937fe598369c4 commit 10d29bdceef79602af4136c14a6ec391ec3a2e7f commit badb30270960df505cf245bad8844c227731fb0b commit 459b26061a67e63e5aa24c6f2ad0546943357e43 commit 4f73dc7a079e15379bea0a70945ba1a7e5c16657 commit f210d8d28aa39fc670e7d80040ab1561abd77883 commit 33898377feb8ecf45fa29965bd1618e0997f76aa commit 18fd7f8aaedfd40e19ed8228db856326afbd9aa4 commit 883631771038d1b0c10c0929e31bbd5ffb5e682c commit c9a9f18d3ad8acb9f9d6b52b5e1922a70b48dc35 commit 4d6d94ba8823a2f4e48c56ed33cb77061c1f425d commit 845e730eaf36d2199e25860259611ffda8e07f6c commit 6a17b4d1b52f10a44c45eea2a9222088e7c9e573 commit 411de2b5ac61a29e1e79db44539f69bb9b35a34d commit 9469d456c6a28494dd9d5cc16e17cf2d4c15c571 commit 14aed8ea48e2f5c710ab678e1ba32b9f398d40b2 commit 779cb5ba64ec7df80675a956c9022929514f517a commit ef5cb493a9acd7d97870d6e542020980ae3f3483 commit bb8494423e2e4dbac9ece7eebba421011bafe389 commit 5a08585d38d66dd64b8ae22229bdfae3fdc1ef3e commit 2810ac6c753d17ee2572ffb57fe2382a786a080a commit 3735040978a43c25a19aa8015ab1a50dffe48f79 commit 9919d119fbbc913c2459b093eb81fe8197906424 commit 5f284e9c5aab5b12eb48a2cecc7a573c3b4e1cb4 commit 772a5803922a097eaf94cf865c6f4a81416aedb8 commit dbc9a5fb168deb140722c12d8332b25754def017 commit 3c67ce061b2136e0578734bae82fdf85c2c76217 commit c61d04c9eb4354980839cf938488ca703eba0f83 commit 1cc064dce4ed0ff111b6d6cb06b3cccf1cba29f5 commit 94d82e95219a3c581435480ab395eb04f569635f commit 86e11e30120387cb5c24bdb3a169a2135973a0a8 commit 9578a10d4a2b4bcbbebefb4156c16c82ee725b3a commit 7ed34927254ae9eac0f6b0ad7e7c2bceb96fcdfc commit c5de248484afeb6de259239a23645790038d9df3 commit 2e4026a1a24d53651c80aca7e683cc86c96ed9c4 commit 419e505dab203b85facc782ec34d2d98601644ff commit 5dff5d092ba6c5485aac1467dad938c74ba6ed57 commit aec11c8d7cb31c67deeba4c9fe015d09735c6813 commit 691fdba39e7fbbaf2755c31ad3800810185cac8c commit b43f9afb81262d6c150152e2831a000b3c1b5d11 commit 1a2dbf0303e8793444a57a2eec0c6b29523657d9 commit ff168b37a96736c892007730e703e74d5a23ca48 commit fd6435ea32d9243d116dbf50e7f1a8b33e01262b commit bd2eefd018e5a8066b7bc66d8e200fbe3095ea5e commit 14302ab0d6550ef0ea48f213b0ab13c9249de185 commit f5a5b08139e8fdab024c1e52854e24fe1e8b428b commit 4cf3ae9d8e9a5f77e8a1f69f17c92dc59ba15154 commit a76766664a9f91dfde906fecd1409ba596a30e33 commit 0e909e4fa8895bcef1b1ef2e39b9f1a158933ffe commit 981f8866754dc5aec6864b877acb248dc33a7bc8 commit e7447128ca4a250374d6721ee98e3e3cf99551a6 commit 4d562c70c4dc08294d6063dfa8d027d81e90e2a2 commit b2cfec52feb3bb737c4b65018ef4bfe9789e4be8 commit 1fb4da5f7858d78570a9f726e98f96797447b32e commit 42b4c479025d92b2a4869bd233f20159ae9ce692 commit de4149730d9d72f50d4e6dfedad0d11b1df05b7e commit fdd9b7dcf1ad7115b2d997e047e8e978c474736b commit cecdd52a3dd312564f81a39df08378b7b39a2654 commit 99e067637862c902f741744eaafe1472091937a5 commit cdf7911f7dbcb37228409a63bf75630776c45a15 commit 625af47255d9b30e22d6c98b7f5e97adc903b98e commit b7d70b8b06edf25c4b7526e20f5b3d11175cab81 commit 7fa5047a436ba27696e344d974811d9ea07ba249 commit 786119ff3280dcffdf11c605534a20b4070012cf commit d7d5a21dd6b4706c04fbba5d25db8da5f25aab68 commit f3823da7e4ba7d4781375c2bb786a8a78efc6591 commit b2c077d001b612b1f34f7e528b2dc6072bd6794e commit d39e48ca80c0960b039cb38633957f0040f63e1a commit 1ad0510cf730d8556fa7ff067b72aa960dde454b commit b5a24e13c8c8b2c98d114b16da40712b80d5cfc1 commit 3ccefdea226ba3f3b69f9e868d2b1c9995b56615 commit ea1deabc6f11575eb3375b454457eaa3c9837abc commit 49f6f6483b652108bcb73accd0204a464b922395 commit 929ae7c2e3adbbb2c2bddcd16854a6b11b56e95a commit 82bbec189ab34873688484cd14189a5392946fbb commit 8ba264f418f734aade3a77086bb1d51d0e2723ce commit 287bfaf6fee974caba7dc7b874b29c27b1a2dde9 commit 065695b3da984aa1ed5d619f3c307be1f564bec2 commit f84a27f9eea51df5c704ca16a00c6df85a31f805 commit 89e790ec1a1ed930b58b0aebe50792acad90723d commit 04500bfd7053482a1a4a81f86b57faff5c788199 commit 9df56e5632c5055ba2bbb6c8c593a4da15181be2 commit e27a85c1757655e2e7bd09164b87bf75627e5604 commit 5fba65efa7cfb8cef227a2c555deb10327a5e27b commit 9079363eda1ea0d9fa2cc5635e65821d8ed4f994 commit 8d8d062be6b96b1ba95a3f1a9ecaf218c9458497 commit 19d06582c47572be9635cf126195135df0720118 commit 44222656ecff73974c637b6b9c9bb5415978ed08 commit cdb015a61190060094152ff8ff6c6f34b616c13c commit f389e7ac8d8a9a17bf59507d02ffb756c19b4af5 commit 8d18373a0ef91845781755492510e00b5a912a0a commit 1164c92b2d13648fb156fe547dd1273111f05e3d commit bd80b0dd6a431aa23b70ff91b6905c1b1eed2f9c commit 7732e289c557809a4a92a218abe04a5f658ea5c2 commit 1119f009005ea89dafac298aeb3231cf2cf2a9ef commit f196198cafb8f0f2bedf1d8abc755f791fc03648 commit 618e51cd526cbbb2ea9ad01ef1f67719b775f792 commit 213eca2b0c042b024bf9697a278619f887bab4e5 commit 62f03dad76441ee3a58c26a0bbe703028e846db0 commit 9af357bc3e05400eb632f3975986e1eac196f159 commit 059478929a91acfeaa5cd2c15b6815e1a2c63f17 commit 1bb745d7596d2b368fd9afb90473f3581495e39d commit 8782007b5f5795f118c5167f46d8c8142abcc92f commit 120ceaf78e28f20ec7244c021d24d1e409572be1 commit f04b8af5e9fc42a8e3b26ebf3b8ccf681a064985 commit 276f7b4bd52425cd0ae38fd7bf870d94abac6b82 commit c4aab3499be2abd8671e5f3f70a9d38acd8e4ce4 commit 11b6005865e47c4cba862678936628175acfa16e commit b4bbe4761ee2d4127eb751737dcbf47a310a9f86 commit 041f5c416217e375c4d27a7ea905548e70d1a3b8 commit 62bb839d48ae87d6aa07259ff6bc8d049538d1f2 commit 3a745f6ac13216f85c3804654f4c703995c17180 commit e317a69fe891382a8be712d4aa03bf01b9af229f commit 9b926bcf26369ffbe347b9e76977f8425dd10f8b commit 52b36510a175607b653e6ab0fffaca64ab8903e2 commit 39def24f8c0f86a2d2edc52c694a1cbb41aee69e commit 5d55e1d02a49a7f27893a5ca5a3c3ef28efcfc42 commit f3409f76a6588137946c96313ed500b68bbc6021 commit 1b0f0f7b8be58b378657c1dc6a0806b5e7bc4783 commit 40a9634b4f09a63f69a373af5d4ca7e69e6a78ad commit b11e193093fb9dc9bb5a2468b81ba3a76f7871b3 commit ab1a157ea7e13a9cf93fa913f59a6bc2ffa6fa5a commit 6d4496bcfe1c73d5c97b133c31c8f779b4acbac9 commit 8e7a49e09e5c19a3a9073894a9d41a7ea0a0981d commit 4d77b7e53410dd4b1fe3e1313c3982e682cadef1 commit 018f7300d4f73522ae02868234b13c4b7c433fd9 commit 69bacf1545206ddf5e1cdcfe868b78f33bb4ea5c commit e86c30e951b50301fbc80e0ba7f6ffdc16e4fe85 commit d2cdc01451973235e2b83ea85493817705a48263 commit f7f28f268b861c29dd18086bb636abedf0ff59ff commit 9c224e058dd9ae9b03602d6c86d44f0d11e21ba3 commit d29fb7baab09b6a1dc484c9c67933253883e770a commit ac18b610fd95762125cd6a7194cc7e2e3b94e3ed commit 1991481828a84dcc5168f1e9b818311cbde86876 commit bf224e00a9f54e2bf14b4d720a09c3d2f4aa4aa8 commit f5442b35e69e42015ef3082008c0d85cdcc0ca05 commit 7b1b3f5818c33da2ab78fe62d34ee7bacc93cef0 commit 79978cc76f050d6cf24880645519f54aa6843da3 commit 8ef23f9268fc4364fc79bd017c2ed6a6495133ec commit e8e5cc645b2d6cfcff58d02743543eeb37e2795e commit 4ed793083afc2bbf22a7fb5993efccf3b5bcde25 commit 37403ced9f2873fab7f39ab4ac963bbb33fb0bc0 commit a78d43738ead68a40acf7da8a873f47a9f6e6eb3 commit 53c8ed46e81636c39528aeb7c3db353a906ecee3 commit cf31994d0b7c2489d0b83a53b510fdc1e4c731a9 commit 0cdf91bf67b782bf3548cb3cce8ab923a13ca6fe commit a1c9a1e27022d13c70a14c4faeab6ce293ad043b commit d3981ee76dda3370d2f51ac0c528dd4dfb45cb97 commit b0d58d1147b8b08241f4a0de018241dad804b1db commit a2f00188137940432e898952fa61e45adaaa68ff commit 828d9a872cdfffa7c650b9cead166d33187cd942 commit 3335a13535312c9fad4d8d1307a621e6617d6ed8 commit cebbfdd5f099a16d57d9221cec76882867839ad3 commit 16b34622f7b18d017c59bd648415cfb64a842d96 commit 1d44ff3d7a71d290d351bffab6160a26a966db7e commit e5a6702e513627f6924c43ec9dddc526ef6dd145 commit fac7c51d62f3536a66e47f3da076803016cc355f commit d7001e7285f933584788edefb7350dd5a09a7463 commit 0b872f653915dcefebba845949f968c01d91bde5 commit feae1bd80ec69a3a0011ba1fb88994785f705e3e commit a389789c0aaf8428cd44cac4f92c8786505f5f1e commit 5011f2915b70703a0347f97b8f2ca0b56ab49978 commit ac754358c68214f9945bdf9cc565fa18ce1b0185 commit dd4d6791eb0164ba59d3e105135188c355d80fa2 commit 9aeabe1988551f797f6e0cba0e7c2d4549cc3a4b commit 16e7a0db6ec9426fea36313b95c36624d983258b commit d4d17377e01f017fd5a22f68f13e7ab342f97551 commit cd8fe5b6dbb3a487bea5f1601437c013a3d56163 commit 1138398d71e8e583669fcec96784471332e488d4 commit a33c8f71d3d85ff1c0284270f710b071d480d547 commit 359d36e67da9de877c13c4b4ea6209a5e07264b3 commit 89b154091ab44098668614b52553ae3917eb8215 commit 39feb7b16b107625a0071e5bb8ea19ee89be2a9f commit 3eafcddf766b6bb8e6308ec2d587d4ef7a4381e4 commit 711762415ddacf54b1c973b208073438de5879b4 commit c5879999641f7860495cb9655de6775c96999103 commit 34a658b7e7128b35daf71cc003fbb659f914f7a7 commit 87107261bb73d7a8945f3cd37a6abc7befc327bf commit ab639f326e48385eeaf65fd129d3ff6d006cbeef commit d1fc4e391fbd321dff166208e58e30d3196626ba commit 712f422ed70c6778018152896d6b4e5ff70fb2b4 commit bd0fdd31c1023b9d94a470ed5bc301c3f9d80519 commit 3b7d5663702373358d58987a3684f6c59443d9d4 commit e0b1ef58d98ae0feba98190c9faf192aabceb811 commit 976a368b7198bf666ad3d273e10ed82b3713af3b commit 430ce0c7d3a3b2cdfdafb527d2f89be4267ac45c commit bc5f983a3d8d8e5a5eddfaf11275bbcef04017f5 commit 16cf693e31bdb423f35ab24081575ec9699303fc commit 7e696546353f659f60fd10616e04a2aa59ab2ac0 commit c55b73f391a726a45cc014464ba7ebea5f1d7386 commit 825535f44fef606e5b4484ebb8cb3827db59037e commit 8979918af711b057620c7c5f9d29a0043f927753 commit ebcabb8b15708023b71b7044fdf928454613d118 commit 9796a5b2725d1b3ddbbe7b1f3dec56af8cc6af22 commit 3acac2d06a7e0f0b182b86b25bb8a2e9b3300406 commit b108bdd0e22a402bd3e4a6391acbb6aefad31a9e commit 450c27fc9e9cf74ff9b96dd813817133e0f50cf1 commit 0f752b2178c988117927154fe3b1d2e619c80c57 commit f435b7ef3b360d689df2ffa8326352cd07940d92 commit 207395da5a97035f06360638f0c2fcd92963ce95 commit 41068c8b28e16f1c2c26c854271520e1f3afaa22 commit 98a07b82d8ac43f1cdb4fee8c340b020372c9392 commit 63c154a0445aa58a1ecb933e6117327b67b6dfa0 commit 75a252be27300c84c83c96399fa36fb5f6364124 commit 2792aed16ca7e594916893698f526ff31eeed237 commit e6a1e701edd0ef8fd51fd50e11bf29bbb2f37313 commit 5c908cd57eeb857f107732773a653c89ad08e9ce commit 445a1b818e20fbfff5905bb9070da703101a5c00 commit b29b32a2ae5a6753cdbe13cf2e64c752743f1923 commit 0b81afa5b6d245809d3cc0613adfe6098695253d commit 71d93eac585a5f94433d7d4a7340a0d7081d925c commit 98a1dacc246dad474c9f7ddf4f0c7e92d49a15c3 commit 6adba2903fa16c0c55b1f1e3f6506c407a26ff88 commit 0f923778f47bfc8c47fabb6a93721ae71a6e6702 commit 81d4baaf4b876589a72a500d45f2c67bbe82bcc2 commit 5d9543162fd6686e83f86a448fe2ba2e7a5ebbb5 commit 2447c731fe55a36accdd7aff96670d69c06c2372 commit a915450e0e44e9ed2a87fc5b3208d5ce01554a8a commit 4ed22f1e52426635873416007d2c12e09615165f commit 605f7c73133341d4b762cbd9a22174cc22d4c38b commit 26bfc3f36f2104c174dfc72415547d5c28ef3f1c commit 689e61a4fd6872537913b998101f364fe79a4f70 commit 7f6947fd36f2c562040ad5a2d3d1783440a4aeb6 commit aaee4bbe8a1aa6833d6c42c7015ae63c489fdeeb commit c1ebead36099deb85384f6fb262fe619a04cee73 commit 6f1ccbf07453eb1ee6bb24d6b531b88dd44ad229 commit 764b1c8df40daf618b293b367f9be1f4fcd1b6fb commit ce7498acaa88ac3db5385dad2317c03006c49837 commit 8cc0b604f2345c304b7ddc828b880f4f3f21816a commit e09220f42b5c28dae51a3cf2810afcb4fad9909d commit 899ff790d1a94dda9bd09a4a6bde01fb7ff0bec8 commit aa7b93eb94ad6d883016bffda670e028fe168051 commit ca161b259cc84fe1f4a2ce4c73c3832cf6f713f1 commit 4224011374d1b4228a59b73149320c61eeb700b3 commit 4b51210f98c2b89ce37aede5b8dc5105be0572c6 commit a80c882183e36b483734681c830a332add912186 commit 77d08a2de6a43521f5a02848f11185b6f46af21c commit 69e6dd149212cdd681201352a79e6634665004e8 commit d670c78ea7564f9baf915c8e1dc5898a9e6c360b commit 1d1e434dbe58ef31abc60135957e0735b62fdcad commit 673aa1ed1c9b6710bf24e3f0957d85e2f46c77db commit 1935f0deb6116dd785ea64d8035eab0ff441255b commit 36e239b5d509c1b564669e7ca3d016c444bbf808 commit ee4cce0a8f03a3332ccf48ef8b420a65d02d1fcf commit 5d844091f2370f01752c3129b147861b9dcd3d98 commit 23baf831a32c04f9a968812511540b1b3e648bf5 commit 4a06f6f3d395d15eb285606f28b74ce5dbc77e52 commit f2c7ca890182d24ac817fa321489346000271c5c commit c501ca23a6a306a7c11631e02a26c8e0a768d64b commit 379989e7cbdc7aa7496a00ee286ec146c7599cf0 commit 322458c2bb1a0398c5775333e1e71e1ece8a461f commit e44f18c6ff8beef7b2b10592287f0a9766376d9b commit 4dee3c4b32a65d6b140ed506a7a8859d5cab6611 commit 4a1b5d183273ef402edb7c7ff58052ae97259a2d commit f86286569e92a260fbf8a1975f9421b4a66581d8 commit 52b113e968be66b57f792b2e2a9b8b77f382bd5f commit efd8127454054d6d52040c17f7fa1656ac3befdc commit b358793c3bf231c455c55e0173256a86483997a8 commit 4d877b1a6e855d1c8685fa0e27ad7a521b31b6ca commit f1af066bcfd38daa9eee7195ef772dadaaa18520 commit ca0376ba196ff7ca5fb55e333a94ea23530ee888 commit e3adc46da349d4a4cda1c58d8186c5bce0b011fd commit a25c2f7a467265fa24d63fb6dd46fa7ba4e3b108 commit 5790d407daa30356669758180b68144a9518da0a commit b8d85bb50511c901d48fc34ea8f0bb958042fbf0 commit 78f0929884d4811c225fd2c57ecc602c84c07392 commit ac9aa21bdf40828583f73ae755dcee6bb1e9b3cb commit b8aa52913b84f8b59816b95c28d03424a100df7f commit 490438469d493e8f764bea14d47eaf4c2ae7cc80 commit 35d86fb626a2554de5d5916b6e2d47d06b483d37 commit a37a512db3fa1b65fe9087003e5b2072cefb3667 commit fd35174e13f98f9232c4aa66689816731d34ca28 commit 67abe9c6a8077819aae490dcd3b9629c2e87bfc2 commit 980d5baeb25cd65b7a791d7499daa07b34346def commit 97998b893c3000b27a780a4982e16cfc8f4ea555 commit 63a4d258ae1b975cd0dd1f0623f50c119953abda commit 583da1b82ac51f0631b6ab699153f16b241dd40e commit 9eb28ac1a25a2117ea5544ffcce59fcc1f128e1f commit abaeafb1b1fbeeb9e18638c6edbe9db31750c163 commit 0efa70356882ec2a843122f02892391ae61fc4d3 commit 6f6869dcf415f7c222057a3f07c23667e1758585 commit 385c3e4c29e1d4ce8f68687a8c84621e4c0e0416 commit 0289e0ed1b9ae20e7b682fc7ca30d2d324a47618 commit d170e938f01fc8c5c41f8a12f0c12491580829ef commit a2a0bdf1989c38ca2fc356edd23a114172ee09a2 commit 554836cc24411e4d3645db5392655f8d28d1d47a commit 7727e7b60f82e8265a1061b81379f5a7bce0dba6 commit 9dce8c2a5f1bf5a304aae39342816f099247d7da commit d116db180decec1b21bba31d2ff495ac4d8e1b83 commit e38dddcaed60c0692b77a7af355d34a13183cee1 commit 52f1783ff4146344342422c1cd94fcb4ce39b6fe commit 11f25c844e29f85abb0b3ffdb360a2f82a2c4ed0 commit 207bbfb63dc0eb491f71e96baa5db9c25626a247 commit 89317d4255122f05aaa0ac16d189a9ab3022653c commit af152c2120587b02e03dfe370b52ba75c40f8952 commit e86bd8b21d57670e38c23ed435a053e7e4cc9e21 commit edd48e6d8f341dcaf1c0a45f4822172d33e75129 commit 5e08e9c742a00384e5abe74bd40cf4dc15cb3a2e commit fc926faefcb7fade1abc05043db540f5c0fef79e commit 5591a051b86be170a84943698ab140342602ff7b commit 52a3a40ee4f89c89026837838f7df386d64c2892 commit 86f3a961f367f5796ed1915cc8253e21c2a329fa commit 418431bcc9ae6509263f4f3bf4b6a80f39da0772 commit ff38d974bc2842797d1d75f5060afd1cea4a76a9 commit 75bf1df75d5e9a22898c5b6c3410ef8ec3a0de70 commit 94aec514c872250887e435faee333c9da741cd72 commit fdf8ea814ae48d7f5670bc7c3bf34101fb58f7c8 commit aee89b7d0929bfc6530a1468d34e0befc1991389 commit febc9c65b37f6f5cc03ed0b6d613fb045c39b376 commit caa4dffa9abd80f3360432cf89236f018be355ca commit 58bc2a9cbfdd4abdbfaafd835a0cd78bdad11423 commit 3e3320a7d96c1a5c66b60fbabb38af1f4c4fae1a commit 00fa40353bf3894adb495f8cce10a8bce43cd375 commit 27488686cb1835f1c69d3efb0eedeb411f675d73 commit 81900e3a37750d8c6ad705045310e002f6dd0356 commit d8dab40a8b37fe8207e1edf68205c709b477e0a4 commit 6246059a19d4cd32ef1af42a6ab016b779cd68c4 commit e69c373c3f0c1888b4b758e37d05e2e7b76585f2 commit 318e431b306e966d2ee99e900a11bdc9a701ee83 commit dd299441654fd8209056c7985ddf2373ebaba6ed commit fd784a418ed832fbadfa846cef61741fdab0377a commit 6fe2ecdba34445a17049cda73a399d9685189efc commit f03eb1d26c2739b75580f58bbab4ab2d5d3eba46 commit 0512e9ffebca0f9a91f6e54b0da90976dce2b025 commit ff742e0ca3db876eb152a5d6bdcf7654ef6f9398 commit 73c4b0f83693604ae5964c68fb23159b823b12ac commit afa351a15d80993f8ba6ae28652cc23127237e37 commit 501e2c7d42d61bd5f473cc719db431973959e55a commit be1c21f17ce2d1e8cdb6d27b88a5346cfebfae49 commit 2efc8e1001acfdc143cf2d25a08a4974c322e2a8 commit 56e51681246e574dcb2e13fc071c2945c7667c83 commit 7c0f7ee00c7d52e7ef1953e151a7f5d5fd5db64b commit f22067419e9683f8fba40ca3a0d56fb3106c7c6f commit fbc24293ca16b3b9ef891fe32ccd04735a6f8dc1 commit 8855818ce7554fb7420200187fac9c3b69500da0 commit 83688771400895ce39994f158362a3c666993504 commit 70bdfedaaec12dd47b24f16a59d31ae1bafffd99 commit ca9beb8aac68468f1778ad0e0fdad4e204f91393 commit de7511aef767656950d1c236a294c1b941f14ae7 commit 6a929fea7f80fc968f26baceecfdb5129d159c98 commit 88c7ad91e378775a08f54b4a85068d51b5cf52f3 commit 5e5d4b39ce2098a1d09064eb8b4e6b6b9a0cbd57 commit b805d8d785e49cb3ee9279dad1402d5dcf902166 commit 0530553ba842884737a689ae5fac11154dcf3122 commit 541372bb62f289f4402cf55be51fb9cec7373627 commit e82c98f2ca439356d5595ba8c9cd782f993f6f8c commit d1691bb22eba23a0131f1bde41d268bb0ebb0f59 commit 631420b06597a33c72b6dcef78d1c2dea17f452d commit 803033c148f754f32da1b93926c49c22731ec485 commit 5dd45b66742a1f3cfa9a92dc0ac8714c7708ee6c commit ab4f869fba6119997f7630d600049762a2b014fa commit a50be876f4fe2349dc8b056a49d87f69c944570f commit 4de867fc237487ce2951a8231d7390237d3f3be8 commit 8d9cdb4674f6e4e7fc789f8184a58c73eeadc16c commit 38eecbe086a4e52f54b2bbda8feba65d44addbef commit 764ba43d34ac5fd16e0e377643f89a7208f1f67b commit ef3d74aa7e5d0ba4e9fc00f1409652e29f46fc59 commit 83aeb49c8c467e9fe77c4f01c80472a4329db49c commit 0fdf06e449b6d6d970c0709c71a8738cfe551ecc commit ac7485cc363f2c603a3e1a7a609ef065ad56b19b commit b62f91569f9aa54b0a60d46a022482415cb968a9 commit 64626c0ee13257e330bc09fa6a169385c0eaf9ca commit 0c1f033159712b3d071cfe4a3ec0f36f1914453b commit 2c69679626d5daa680d71c77ad58af0088db537f commit 4327a6137ed43a091d900b1ac833345d60f32228 commit c8687694bb1f5c48134f152f8c5c2e53483eb99d commit 02a8ae723225afae25ddf9d2c7ca271b3f856b5a commit d944eafed618a8507270b324ad9d5405bb7f0b3e commit 21fc506cf5ef5de9c2cdc04036e35169d2b3e7d6 commit 13525645e2246ebc8a21bd656248d86022a6ee8f commit 0d68683838f2850dd8ff31f1121e05bfb7a2def0 commit c8cc58e289ed3b5bc50258f52776cf3dfa3bad66 commit 793582ff47f8b73be8d3d925d750bf3ef79f33c7 commit 98f99e67a1dc456e9a542584819b2aa265ffc737 commit cf03e2956af307dc25e8c41fd4cffe44482a6ec1 commit 474f01015ffdb74e01c2eb3584a2822c64e7b2be commit ce560ac40272a5c8b5b68a9d63a75edd9e66aed2 commit 822b84ecfc646da0f87fd947fa00dc3be5e45ecc commit f11aee97b13ea6817287cd8dbed9b09a260ff0e7 commit 3fb7efd6866e5d43770e999b33d619a3b345dc2f commit da5e14909776edea4462672fb4a3007802d262e7 commit 025ce392b5f213696ca0af3e07735d0fae020694 commit 0c0463ff010b80a0c03937ca8cf85587ded2f20e commit 3cf7cd3f770a0b89dc5f06e19edb52e65b93b214 commit 56d8ce9d8c17bea955b0c2551ee86149486890ae commit e0cce122514ff76c3c986103c94de68fbb401949 commit dd24662d9dfbad281bbf030f06d68c7938fa0c66 commit fc3888fe2c63b35a22db8234d142823a5ffda9d8 commit b1bcdd409d2d158867ce0b71cfa9bcefe83ce07f commit d1c5c3e252b8a911a524e6ee33b82aca81397745 commit 425afa0ac99a05b39e6cd00704fa0e3e925cee2b commit 99d92eaca5d915763b240aae24669f5bf3227ecf commit 989cd3e76a4aab76fe7dd50090ac3fa501c537f6 commit 3caab67db1f69e077fb12ac194d3cd2a4de06d8d commit 9675b3ba99ec79273d94afa09e9b69e2b8c0d238 commit 08da182175db4c7f80850354849d95f2670e8cd9 commit d893f39320e1248d1c97fde0d6e51e5ea008a76b commit 32f7ad0fbe7521de2a5e8f79c33d46110247fd7c commit 556eb8b79190151506187bf0b16dda423c34d9a8 commit cec24b8b6bb841a19b5c5555b600a511a8988100 commit b6a7828502dc769e1a5329027bc5048222fa210a commit 7fa8a8ee9400fe8ec188426e40e481717bc5e924 commit 25feda6fbd0cfefcb69308fb20d4d4815a107c5e commit 70cc1b5307e8ee3076fdf2ecbeb89eb973aa0ff7 commit 1816f4a17f54a01afa2f06d6571c39890b97d282 commit 6ece90e3665a9b7fb2637fcca26cebd42991580b commit c8c2969bfcba5fcba3a5b078315c1b586d927d9f commit 74a49415144035f171751d55b11ba04c9f348f9f commit 4eea7fb980dc44545a32eec92e2662053b34cd9d commit b03f38b9bd90d9eb29951e56f5a4375984c8dffb commit 13af556104fa93b1945c70bbf8a0a62cd2c92879 commit 08c677cb0b436a96a836792bb35a8ec5de4999c2 commit 922a76ba31adf84e72bc947267385be420c689ee commit 2397e3d8d2e120355201a8310b61929f5a8bd2c0 commit 100bd00881f8553d0ccfc99a575966d990c455eb commit 8f586cc16c1fc3c2202c9d54563db8c7ed365f82 commit 682439fffad9fa9a38d37dd1b1318e9374232213 commit 1253685f0d3eb3eab0bfc4bf15ab341a5f3da0c8 commit a26cc2934331b57b5a7164bff344f0a2ec245fc0 commit 6f5a5e8670587d5066aacd0235071a166ee458fc commit fa0d9c066dee8f52eabcb8416459aa0568b832f9 commit f4c41a7fd7f99329e5af0ac0a236504a60bfb17c commit 1bef84af084e981550d9ecc3359baa22533d7b99 commit 084f51d473cd566eab310d5da56fe7b68d0b10be commit 2da5bffe9eaa5819a868e8eaaa11b3fd0f16a691 commit e6232180e524e11205d285bb27045bf2c19db265 commit e7ec3a249c38a9c9be3a1eeb0142fcbaa3bd02d9 commit 476ac50fc30540e29191615a26aaf5f9dee91c49 commit af7828fbceed4f9e503034111066a0adef3db383 commit 58d9b9a14b47c2a3da6effcbb01607ad7edc0275 commit f57fa0f23d9707747272b0d09af8b93b19cf8ee4 commit b504f99ccaa64da364443431e388ecf30b604e38 commit 720b47229a5b24061d1c2e29ddb6043a59178d79 commit 6c032c37ac3ef3b7df30937c785ecc4da428edc0 commit 8b229ada2669b74fdae06c83fbfda5a5a99fc253 commit 275dac1f7f5e9c2a2e806b34d3b10804eec0ac3c commit a41d985902c153c31c616fe183cf2ee331e95ecb commit 0ff80028e2702c7c3d78b69705dc47c1ccba8c39 commit 79c901c93562bdf1c84ce6c1b744fbbe4389a6eb commit 5247f05eadf1081a74b2233f291cee2efed25e3a commit 4a76680311330aefe5074bed8f06afa354b85c48 commit 5b94db73e45e2e6c2840f39c022fd71dfa47fc58 commit 996e93a3fe74dcf9d467ae3020aea42cc3ff65e3 commit ad81e23426a651eb89a4b306e1c4169e6308c124 commit dc49c3b1d463a99fb529d2a69cc0e2270d6cb27e commit 9235c21c37facd131b4d126ce7535ca573f850e3 commit d8843eebbbd15b78c6a7745717b3705eca923b0f commit 50282fd57bcd3525c9d81eef58df8718e4337c6d commit 5896f2d363d5cfb7510856c90d5e0ed934a1d340 commit 1aa7f416175619e0286fddc5fc44e968b06bf2aa commit d5aa417808cf14c052ca042920b3c6b9f1dc6aa4 commit 8173cab3368a13cdc3cad0bd5cf14e9399b0f501 commit 11fbdda2ab6bf049e2869139c07016022b4e045b commit 9d2d1827af295fd6971786672c41c4dba3657154 commit 68518294d00da6a2433357af75a63abc6030676e commit c1a322a7a4a96cd0a3dde32ce37af437a78bf8cd commit bf4823267a817f7c155876a125b94336d7113e77 commit 6d600229df1ed06f46ba68ac706d9f44ba8c5fb4 commit 79ef1c9d14c65a5c3f7eec47389d8c2a33be8e8d commit aa8bf93101a185b49f83c9137453571a08be6e76 commit c47d122c5ba5f3b3371cfe051d770b5bbd591f6b commit c21f11d182c2180d8b90eaff84f574cfa845b250 commit 45dfbd992923f4df174db4e23b96fca7e30d73e2 commit e79d85c6c217221ea32354a5ac0587a7ccea02b9 commit 60ecaaf54886b0642d5c4744f7fbf1ff0d6b3e42 commit 7fc602dbfd548045862df096910b7d21e6d300bf commit a34fc1bcd2c4d8b09dcfc0b95ac65bca1e579bd7 commit 0d2dd02d74e6377268f56b90261de0fae8f0d2cb commit 40baba5693b9af586dc1063af603d05a79e57a6b commit 137f9cee113df91107cf91c130d5c414c4b191f0 commit 482e6ad9adde69d9da08864b4ccf4dfd53edb2f0 commit 13aa38f86eea7f95eca4909c075b3b511dc3f500 commit 5502d1fab09df791a8b1208dea9defc418b9bbf7 commit bed61c8fc7ba17d0f259c674137a5198fd2e3334 commit 6a07826f2057b5fa1c479ba56460195882464270 commit c1d35412b3e826ae8119e3fb5f51dd0fa5b6b567 commit f1373a97a41f429e0095d4be388092ffa3c1a157 commit bfc03568d9d81332382c73a1985a90c4506bd36c commit 55e02c14f9b5fd973ba32a16a715baa42617f9c6 commit c14fb01c4629b96b64ab54caea7e543a0239f14e commit 8e1b45c578b799510f9a01a9745a737e74f43cb1 commit ac1d8e2f074d9bffc2d368ad0720cdbb4c938fa5 commit 6889f28c736c357700f5755fed852a2badc15a7b commit 020c76d983151f6f6c9493a3bbe83c1ec927617a commit ce784421a3e15fd89d5fc1b9da7d846dd8309661 commit 30b2d778f629d51e2ff30beb6d060a0bd7f70104 commit bc3e1d60f933f823599376f830eb99451afb995a commit e490d60a2f76bff636c68ce4fe34c1b6c34bbd86 commit 663b930e24842f3d3bb79418bb5cd8d01b40c559 commit 62fe398761cd06a428e6f367aba84732a2f1c268 commit 3692ababa322b4d9ffbd973865bc88018e896fcd commit b6ccf213d95e9373ac1f7fbcb5de3b52eec0ddb3 commit 40023959dbab3c6ad56fa7213770e63d197b69fb commit cb2e701305f4ffe3a107c1d97f8588b4ed48ccb3 commit 2d6f2f79e06571d41eb1223abebe9097511c9544 commit 79d0150d2d983a4f6efee676cea06027f586fcd0 commit 30c3d3b70aba2464ee8c91025e91428f92464077 commit 2a1eb1a343208ce7d6839b73d62aece343e693ff commit 1d13c49cf4e246b218d71873f1bb1bbd376aa10e commit 38e4ced804796c5725e2a52ec3601951552c4a97 commit 99b3886f8674502e967b1d050e40aa669c9098c1 commit 59de751e3845d699e02dc4da47322b92d83a41e2 commit 3b3ffd729e7e3ad706ddba4bb84358df5d43a647 commit d511f95938bf9e75ab73ace0ab1cebbe9a13df4b commit 73c12de8bee258b51bd418f33dc59f2c6e5fb5f6 commit 982b173a6c6d9472730c3116051977e05d17c8c5 commit b447b079cf3a9971ea4d31301e673f49612ccc18 commit dac652220ba0e5a2ef2da2a47a60b60aea333fdb commit e1a600208286c197c2696e51fc313e49889315bd commit d6d4f0a1189313310d77f1d5a2bb6277f3afa13f commit bcd84301a33b7434a506fdb1a9076b7a234817a7 commit 11d24327c2d7ad7f24fcc44fb00e1fa91ebf6525 commit 95011f267c44a4d1f9ca1769e8a29ab2c559e004 commit 20a2ce87fbaf81e4c3dcb631d738e423959eb320 commit 1dbcf770cc2d15baf8a1e8174d6fd014a68b45ca commit 55b94bb8c42464bad3d2217f6874aa1a85664eac commit 94034b306ddde4a4a9c1a597ae7f61f04b710dc7 commit 87af86ae89963c227a3beb4d914f3dc7959a690e commit 5b711e7f9c73e5ff44d6ac865711d9a05c2a0360 commit e61f67749b351c19455ce3085af2ae9af80023bc commit 3eb1a3a04056ba3df3205e169b8acc9da0c65a94 commit 7ab1a4913d0051cf5196ef7987b5fa42c25e13b6 commit 7ca302d488f80cf4529620acc1c545f9022d8bb8 commit 7ac9be96b0113a34c33110b32912642bdc8ff33d commit 9db5ec1ceb5303398ec4f899d691073d531257c3 commit 34e5a54327dce5033582f3609eb54812a8c61b90 commit e749dd10e5f292061ad63d2b030194bf7d7d452c commit ea2062dd1f0384ae1b136d333ee4ced15bedae38 commit 7c5835bcb9176df94683396f1c0e5df6bf5094b3 commit c8a5d5ea3ba6a18958f8d76430e4cd68eea33943 commit 9930f518b6a82ff10a3d13e0cbde05cce04f5930 commit b7cb3821905b79b6ed474fd5ba34d1e187649139 commit 54d217406afe250d7a768783baaa79a035f21d38 commit 8ba90f5cc71701aa262f222effead02206b04227 commit a92b7d26c743b9dc06d520f863d624e94978a1d9 Signed-off-by: Mika Penttilä <mpenttil@redhat.com>
2023-09-01 05:07:01 +00:00
void host1x_client_unregister(struct host1x_client *client);
int host1x_client_suspend(struct host1x_client *client);
int host1x_client_resume(struct host1x_client *client);
struct tegra_mipi_device;
struct tegra_mipi_device *tegra_mipi_request(struct device *device,
struct device_node *np);
void tegra_mipi_free(struct tegra_mipi_device *device);
int tegra_mipi_enable(struct tegra_mipi_device *device);
int tegra_mipi_disable(struct tegra_mipi_device *device);
int tegra_mipi_start_calibration(struct tegra_mipi_device *device);
int tegra_mipi_finish_calibration(struct tegra_mipi_device *device);
/* host1x memory contexts */
struct host1x_memory_context {
struct host1x *host;
refcount_t ref;
struct pid *owner;
struct device_dma_parameters dma_parms;
struct device dev;
u64 dma_mask;
u32 stream_id;
};
#ifdef CONFIG_IOMMU_API
struct host1x_memory_context *host1x_memory_context_alloc(struct host1x *host1x,
struct device *dev,
struct pid *pid);
void host1x_memory_context_get(struct host1x_memory_context *cd);
void host1x_memory_context_put(struct host1x_memory_context *cd);
#else
static inline struct host1x_memory_context *host1x_memory_context_alloc(struct host1x *host1x,
struct device *dev,
struct pid *pid)
{
return NULL;
}
static inline void host1x_memory_context_get(struct host1x_memory_context *cd)
{
}
static inline void host1x_memory_context_put(struct host1x_memory_context *cd)
{
}
#endif
#endif