Centos-kernel-stream-9/drivers/dma-buf/dma-fence-array.c

254 lines
6.9 KiB
C
Raw Normal View History

// SPDX-License-Identifier: GPL-2.0-only
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
/*
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
* dma-fence-array: aggregate fences to be waited together
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
*
* Copyright (C) 2016 Collabora Ltd
* Copyright (C) 2016 Advanced Micro Devices, Inc.
* Authors:
* Gustavo Padovan <gustavo@padovan.org>
* Christian König <christian.koenig@amd.com>
*/
#include <linux/export.h>
#include <linux/slab.h>
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
#include <linux/dma-fence-array.h>
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
#define PENDING_ERROR 1
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
static const char *dma_fence_array_get_driver_name(struct dma_fence *fence)
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
{
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
return "dma_fence_array";
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
}
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
static const char *dma_fence_array_get_timeline_name(struct dma_fence *fence)
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
{
return "unbound";
}
static void dma_fence_array_set_pending_error(struct dma_fence_array *array,
int error)
{
/*
* Propagate the first error reported by any of our fences, but only
* before we ourselves are signaled.
*/
if (error)
cmpxchg(&array->base.error, PENDING_ERROR, error);
}
static void dma_fence_array_clear_pending_error(struct dma_fence_array *array)
{
/* Clear the error flag if not actually set. */
cmpxchg(&array->base.error, PENDING_ERROR, 0);
}
static void irq_dma_fence_array_work(struct irq_work *wrk)
{
struct dma_fence_array *array = container_of(wrk, typeof(*array), work);
dma_fence_array_clear_pending_error(array);
dma_fence_signal(&array->base);
dma_fence_put(&array->base);
}
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
static void dma_fence_array_cb_func(struct dma_fence *f,
struct dma_fence_cb *cb)
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
{
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
struct dma_fence_array_cb *array_cb =
container_of(cb, struct dma_fence_array_cb, cb);
struct dma_fence_array *array = array_cb->array;
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
dma_fence_array_set_pending_error(array, f->error);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
if (atomic_dec_and_test(&array->num_pending))
irq_work_queue(&array->work);
else
dma_fence_put(&array->base);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
}
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
static bool dma_fence_array_enable_signaling(struct dma_fence *fence)
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
{
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
struct dma_fence_array *array = to_dma_fence_array(fence);
struct dma_fence_array_cb *cb = (void *)(&array[1]);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
unsigned i;
for (i = 0; i < array->num_fences; ++i) {
cb[i].array = array;
/*
* As we may report that the fence is signaled before all
* callbacks are complete, we need to take an additional
* reference count on the array so that we do not free it too
* early. The core fence handling will only hold the reference
* until we signal the array as complete (but that is now
* insufficient).
*/
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
dma_fence_get(&array->base);
if (dma_fence_add_callback(array->fences[i], &cb[i].cb,
dma_fence_array_cb_func)) {
int error = array->fences[i]->error;
dma_fence_array_set_pending_error(array, error);
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
dma_fence_put(&array->base);
if (atomic_dec_and_test(&array->num_pending)) {
dma_fence_array_clear_pending_error(array);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
return false;
}
}
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
}
return true;
}
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
static bool dma_fence_array_signaled(struct dma_fence *fence)
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
{
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
struct dma_fence_array *array = to_dma_fence_array(fence);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
Merge DRM changes from upstream v5.16..v5.17 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 v5.17 2043115 Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2043115 Conflicts: drivers/gpu/drm/Makefile drivers/gpu/drm/i915/gem/i915_gem_pages.c drivers/gpu/drm/i915/gt/intel_gt.c drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c Conflict resolution: diff --cc drivers/gpu/drm/Makefile index 0dff40bb863c,ec2ef2cce11c..301a44dc18e3 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@@ -127,3 -134,8 +134,4 @@@ obj-$(CONFIG_DRM_TIDSS) += tidss obj-y += xlnx/ obj-y += gud/ obj-$(CONFIG_DRM_HYPERV) += hyperv/ + obj-$(CONFIG_DRM_SPRD) += sprd/ - -# Enable shims for the RHEL DRM backport -subdir-ccflags-y += -DRH_DRM_BACKPORT -drm-y += drm_backport.o Commit list: commit 107fe904302092c683cf5462b4af3cb3cfa40998 commit a1a98689301b9af0313e4c1ba44558e8b67ff76e commit befe5404a00b3b1547c944738df4a9229909bdc9 commit 8a12b170558aabb31cc98fda0da6a56b518cadaa commit 334f74ee85dc26a50c1a2b0da82517595191f92f commit 57a06e907c07b17308f9e6e6ce91402ee7ee03e6 commit 189723fbe9aca18d6f7d638c59a40288030932b5 commit 7c4dd0a266527ffa7ed8d424facaba171618820a commit 1a84a308acda285cf9fae548262b8e199845b2d1 commit acf20ed020ffa4d6cc8347e8d356509b95df3cbe commit 437c3d87590e7c1d901c66d8916e7a58f0fc7ff7 commit 5f31dbeae8a88f31c3eb4eb526ab4807c40da241 commit 32a267e9c057e1636e7afdd20599aa5741a73079 commit 9bf7123bb07f98dc76acb5daa91248e6f95713cb commit 7f44a1166c8aa69f1bcc9096dc07b7096f7822df commit 6b1a69bcb23fbcc65b0b086063f608e3509dfd0f commit 5ddc1e27e03298c433b0c889c2a431432abc2cc0 commit 386e1c180f1f06acb64205c37f0fccc4f8885a73 commit a30fc787a1d3ba317e4736483ec8ae50043e6fa7 commit ef41af47e40ed69e439cfedf74068bf797c62fd1 commit d41af761dbc137051ffe82fe4f23db54ebb1d523 commit 94f9b9525c0a2e8aac741f8e0a2d71c4e2771ba9 commit d60b93917a66414aaee5704dd07c845aa6cf9645 commit a8daf03fa2d49c8892c3de924742b1a47b62f3e6 commit e82ef424eec8e412cc1ca9170c49633316b29f07 commit 566b651cc53154d6fe88ebd61c86b996d6621d09 commit f6632721cd6231e1bf28b5317dcc7543e43359f7 commit 5f9741f53a3e0e84befc60cc1491272d18564ea0 commit 50848e3787ad9eaae38889fcb7f4aa1f4b42f4eb commit 6eab8224ed3daf26b5fae36dc8663d32e5cd9c21 commit 19febe662d0b31b717655041cd67df524d19a5ac commit 40e8c0198a51656086b746597af8c36f291b53d1 commit 30a46873941f1422e9169c9e38d4874365054c13 commit 623a3531e9cfcb95de55f0e4a38668705eeec8ad commit a19125a281128c836faae249c1001eb8d7a18b48 commit 9aa2c2320e6fb50d8f80963e786d0b564d0695ab commit 2e70570656adfe1c5d9a29940faa348d5f132199 commit f9a7b19c484067fdcc5972c88ab6f06898adc40d commit 841f262e74a7c209055152026041bbe486c962b9 commit 63d7d05678af5cdc616718806971041ecacf4897 commit 17dbbe7b25446f7ce4af4c5186b60427cdd770a7 commit 2c85034db194ead0595445cbdd70414d3634fcea commit 7a279c14df56c741b99085108a643f2dae078773 commit 91909d57169dd587b11d9e1607faaea07393696f commit ae880cd02c547cf474cca976c39c76b629921b26 commit b2de2d006dfa6bf48b141a2a51ca078ed1047b63 commit ccebd0e4021084361d1549f4e83688b1fae89c3e commit f45d2252ee10b036d539d93a752a2434a54a0d2b commit 7d9ae6332e77c1dd57cd5679a27d6690d2e8215d commit 9e68fa88b85910091be186f9022b36f4fa83b31c commit 976c68f46d7cba02ccc80fbd67a4e9731e23e8a7 commit d39ef5d5c076377d41c65b69f8452eada2db724d commit 718cc87e1669dafe65ddd3720a5526c6d7e1705a commit ba3078dad1401131293664733c15f6f066079de9 commit 02ed47aa6cc697fc34053c011fe72984a86273cb commit 1f9f6790cc62eeaa973d05a9a2f16ca0f3b80b36 commit 9f40dbd4416f14657d9b354b7ec855244d97a91c commit 576d4d2d90310270c1d463577f0a075e88cf6c4a commit 957a2d0e7ea38d84d4b3cf9a951bccadeb803a24 commit 2671075b322746ec68c49396c5c17ad8ad236dce commit 0b80214b64e38f33d359c0e121773357060b992f commit 3c101135baf2dcfa64081239818039a1fcc7767a commit 33e079bc1530df4596181ccbfded8752bbedb92c commit e1f80341e312088f0e6c46107db7098e30e6d764 commit f2d061ed01b3f0e0c7a4daebed91e26f54de4086 commit 45a44b01faa6ef92788b2067631deb486cef8a4d commit 0bcdfabfcbe230fbd9f03c297486f013333892c7 commit b93e947664a1a63a3e6cb5d94f38d5579e41d951 commit fbc5a90e82c1131869e76ce5b082693b8a75c121 commit 43a1f1467cd4bcf248925fd7b3fdf49d73917443 commit c4f08d7246a520da5f2b1068f635da0678485e33 commit c93ce6a6dfbd3e258186ab10f95472ee571583b3 commit babc8db30132ba59cecca9587e73104741f0be6d commit b7d5abda8e64fb9cbbd219e667ccb34e4761ce2f commit 4ec5ffc341cecbea060739aea1d53398ac2ec3f8 commit 3f61ef9777c0ab0f03f4af0ed6fd3e5250537a8d commit 9ad87de4735620ffc555592e8c5f580478fa3ed0 commit bedcaddadd22da82fc2590569ff81a31045176b1 commit caae4fb537d8437b9290d8a1010adfaf174b29e6 commit ce679dea955e1b6670a8d92b8ac4c17b22db3fa0 commit a0a8e75948117f37a1f849c44d026d0775ca59a7 commit 0597ca7b43e41c509bd0feb143bdfb7278496397 commit 808b79eb8165d4dbd5e731f98a4f5f4a0817ee4e commit 1af10a97b3a629f5f5b361f1870070c1d6e0308b commit 035f79f9b77d5bbeca7c5befcfaa7560e846ac6d commit 171c555c2c2664a250cd35680c34c31a6d233dc7 commit e2b8329432b880f3821f85e1253a9b6b9d714a86 commit 672d07517e728acf15c1e39c3dfb7052000b434e commit 3dfb2d6b489f7f1a627774f84a6341c18785f43f commit d89357ded55e1294e172cec176f49e1685dca06d commit b1562f0f0f69120225285977eb2bd488c7eb5482 commit 0f2922ef48484ca4687319d03f72afdda2172e97 commit b0f1670d22ce1e192f29e931069297ff16156026 commit df63860da913e6afc0d725a87f99e930ee237451 commit f50423436105e136e2409b500719334188a77aa6 commit e359c47bfa6155b56d378864b7cc4a0d4e680c1b commit 0b2c31dd8868651d878af4c60b235dfb52909e74 commit 09f8fe4cae5ee8eb2ac44e437d4295357f3cdb36 commit 3cf460bd683df848c3df90b9bd6c28bc86acea8a commit bb115220d248e394a65a52e128dbb8096c9c8868 commit 59908256d8101da0f051a4687438b744b24b9059 commit f4fdf37684ebf8ca122723ab6074d74299921064 commit 81148c266f6a51f4e149afbc52fff9a04d274310 commit 6eaecf014807f34acf1303fcdc35833998595db4 commit 777226dac058d119286b4081953cb5aa2cb7394b commit 877d074939a5f82b099da2db3bcccc6c418b9c39 commit ef3e619221248a7ea5fc711a2bf9017c94d2f644 commit dd66f56caea6bb1a3703fb3bfc3106444d05a930 commit 40298cb45071e98c2c6465e2ef25dd8f8af77918 commit f05b985e6f76eb9e57f36d0960a8beb46d5b46a8 commit 7ae034590ceaefd4d37465e3434877acfbadf411 commit 5926ff80c9035638ed8ff6ee1f820392248270e7 commit 893f11f0c73365b31068081ffa3e67af5cd474e7 commit e25d1ea4b1dc6a0f11a24bac85d5e3673845d365 commit ebd4a8ec7799b1ce6969acf04432f4980179986a commit 2eda4fc6d005b51271642ebfae4ac00e15618a23 commit 5d12ffe6bedb0e86b22dd436bb2245fdc540f780 commit 1d51775cd3f51899ce85afab686c7f641ff32d4e commit 930ca2a7cbb6df5e5377938a372d8896d669f086 commit 25b8a14e88d9cd80ba34f5310cf1e11c4eadc647 commit 9d27478c7c01c9a04938a751fe2345cb951a3a0c commit 72071beec8fbf760945c6f155fd4db394dd2fdda commit 4b2b5e142ff499a2bef2b8db0272bbda1088a3fe commit 7c287113f1c83b238068bd4b550cc8b0a73528a1 commit 393211e118eb8c3946cdee18e97fddb396f11ef5 commit 12a9917e9e84fef4efa73c09b32870df0b1ed795 commit 525bbf72dbe0004a009dc39b239dec74e8007f6f commit fc7bf4c0d65a342b29fe38c332db3fe900b481b9 commit 736638246ec215f999dd132334d2d7c49bcb85c7 commit c4ae82a0e9222d275e3e4dd91c1cc3931ac0eca1 commit 86752bd613c9a8deb6e7de499f0c3ac139b58b6f commit d9c022d5dfea9f0b550a3d24ec786d39ff55ad6b commit e15623cdce6fca662dbecd311f9d74bc61d0e1f2 commit 44653c400615a3fa3658caa72d765233cc897d80 commit 55d5e4f98fde7f695fc6c08f46f85ab677f690a2 commit bf0d608b55d9b7f426031dfd9f08d9df36c94728 commit fed98c16f13f4c68fc507384d3429516ef5c3b6d commit f0e204e0d32159d783577a4041331fbe49e8beca commit 765972cb8564fb92f8cef6fac21995907d132e8c commit f28c5950d57b280f17b950f04125ed556252403e commit 39919997322f21d367347943ffd5ba8c4007c9ae commit f2e19b586637a2e84f56b08d9f60de30373a0a01 commit e0bf3e23e2002461b0bff09c1cc0b92ddb8eafd8 commit 3126977d43079866aa0ea351863a7496feec98d2 commit 723559f379af5cd200bc981a723aaf3971f7a166 commit e12d6218fda20d03960f3f2cca44741ba8d5e9a8 commit 818a1968a73188451fd1c16604b4e47ab5a40d6c commit 64512a66b67e6546e2db15192b3603cd6d58b75c commit 3c7a8600dec9858da9e76adb622d161f27652b00 commit cea86c5bb4425cbbd0a690d1671b8a7db1cee9fc commit b9971e549adf85278a680f75dc78e4a734975e90 commit ee9418808bcce77e2c31dbbfc58621ea99a05597 commit 864c49a31d6b84fd20748a003523fc2181fd54b1 commit 25a390a9aadbf0c87b461e416c27c8838b35ae25 commit 49e61bee26f746aaf2eba84ba3c9a90ab950ea05 commit 1fdbf66e3d40257902b4c5cdf872730dae24004f commit d89078c37b10f05fa4f4791b71db2572db361b68 commit b91df118e4ff36904d5e35db27dd0d0cee4deb45 commit fef604db231230a0f2f376fa223fe296731b6333 commit 293ada7b058e536d9d53d0d8840c6ba8c2f718e4 commit 4a46ace5ac621c0f84b3910bc3c93acf6c93963b commit fe93ae800eb846d435359b2d689410fdfc03f868 commit 7abbc26fd6673bd04d0044e001a7ce543427ff4b commit c05f1a4e2c4b8a217b448828c4e59fb47454dc75 commit 6cae235e9cd112da0a33dd261e2a01c93c825799 commit 6ef7ee48765fa3067858d11ecdf3acbc7c19df80 commit 77d2a71b94e3dd2966d8c595fc6443951f1e06f4 commit c3b75d4734cb82f7dfd42b0a8243f37bca85bd95 commit 526dcedf877fab36d2847fa1446975ab4285f226 commit 4d77688ff27c7d030b5113f0cf0b0a2a433b2a62 commit 4280e1a0ba1dca1e7c4c35d0c790dc8977d840a0 commit 099afadc533febb0ad789ee61eef41a3d5d8bab2 commit 16aea0f32f1de320550ec3488bff9ca86b3848bf commit e73c317efbf9a6ab2d1c18eff8343958ab6df73a commit 2b3374306b315be02db0f67d3102a0d1e1357270 commit 4c3d005307c87c7a35e85a307b8bcf49f1d56114 commit 344e694722b7612c00890ff29d402de8f49ffcd9 commit 77cdd054dd2ced6cb6f3420a998d6a0a65d6076e commit 32c2bc89c7420fad2959ee23ef5b6be8b05d2bde commit ead3ea12e133416fbd800eedb2fb5d0faf2df431 commit 8f4502fa284478a5264afa8a5a95511276fa9b80 commit 74c1bda2f3fa79a93e1c910008649b49b02dc09d commit 2ca776068f1f9ece3ab093f1be39c87653fbff16 commit b0cc4dca4f1066f385a92baf6214d7f313353d76 commit bdf6aa22204e1250e217e79e77db38753a6731de commit c1bb3a463dac815598362fb642a2746ff0e8f2f8 commit da0c3e2c907aaa4c6818aabc2691a667e3578063 commit 7df7bca56902e4d96c7b17b84378774f2254b707 commit 10a657dd4cbc34ba9f1bf16140a96789688f6cd5 commit fe6089c138e477d0b1a8bf369ae6643466fd7c2d commit 675053115e4e809643e12ca817dc9147562a70d6 commit 3809991ff5f461cabccd9b5aa39f7561f10918b5 commit c34c1c4cd68f3ffcd13c7169e7a2c35e267e34f8 commit 9556829ce4d0618ae4295af8e4b3dd7e38f43598 commit c7d561cfcf8661ef02218655c923a0eadbbd7520 commit f2787d8779b1b00768f8f397b3699698ed84300a commit fa2a6c5b9cfb0dfbd1b811b154a036df1017ce66 commit 49c55f7b035b87371a6d3c53d9af9f92ddc962db commit 542cff7893a37445f98ece26aeb3c9c1055e9ea4 commit cad7109a2b5e7d48466b77728aa16ce55415eea0 commit 0826edb6a5e5b32d38b89d2df3d74c4dac8828dc commit 3ea355b234d7d3e543b89e55c66d57db50ef1581 commit c52b3b489783b3b244c8134204d542a4d07030b7 commit 2ea6ec76430b87c49f3d82e284722dfbdf137bb9 commit 068b1bd0925387ff3a2900726a681ce697e4c1a9 commit 57d9898bee4fa8afcde83c158b441cef634ee47c commit 112a87c48e83cf226325735009712b515f48c495 commit 0d6a8c5e96833f644b91528de6a3a4398214fb9c commit 710074bb8ab0efac425a43473b8a3e057d645f82 commit ad935754dd865ffe9be39e366071275c99366285 commit fc320a6f64044f12128519ca98404b641340d136 commit d35d4dbcc80dfbd58a3ef18cee2b92f49a6a92c4 commit 23c50968399f270098f1fd0bc1ad83244dafb659 commit 2ee5ef9c934ad26376c9282171e731e6c0339815 commit 6b6636e17649d75b4d0cc55d3dff9e44511a442a commit dd5ba4ff4e924b14cb3c91335636baa6bacaf817 commit 96837e8beeefe5181adabab2da6e08c51dc0cf5d commit be6c1dd5ac074defdfb1471d28e0bb6eedfe3ae5 commit 17749ece0142c7c368834b6fb35d86bafecef69f commit e6d6f689435aaebc2e407026d9fdfc2d89bd7902 commit a5b7ef27da60c90bad5b2d41af3aa82da480a188 commit e181fa1ddfd5fce939e419dce3e5baeb32125987 commit c1f110eeb2a58df95bac8c11e5687c1761333952 commit 8d2f683f1c49b3a3c56ab92437722eda7e85bac2 commit 9755f055f5121c40c481c1d5dd02a1c3fb0e7953 commit 565edeee70db754e2e337ccd941f2dc10d276691 commit f20ca899a7c9e7ba48a5daec778607572fca5f6e commit 31e914a2307a29dfde8027cffa70292341bd379d commit 305448e55745dd4634272794c8c01edc872bcf63 commit a905ced613095c1ca406c179b2f0d44219d82381 commit 3e9cf8f055fcb42776156fa5f5eb9a5326f160c9 commit 88a24415220990d41834838d54ba028399649ec9 commit c86e187372da0967a82994fef7cecd4806cd2baa commit d4e0f16325026eb001c48a6a619886048286cc42 commit c1d53cbd83b87bdce318f45d4fa5505c3008389f commit 292e4fb05f14d54c90cb165335c6d4dfaf1cfb32 commit 493043feed006f75f43a1990ae2ae1178f277628 commit 1448d5c47e6a26150d885bb4a5764a8d75b9c707 commit 89aae41d740f67a7c8b8ee015c44645d218de754 commit fbd4cf3bfe1557b80774670d19c0a68d7d40fb18 commit 9a7e49bd7992fca8cae11d21ffe5ebe73a2f4c18 commit fd0310b6fe7db694e553a5407594d1361e68ce1e commit 566fef1226c1df5a7e71718f9ae012d4c1cd13f7 commit c4c6ef229593366ab593d4d424addc7025b54a76 commit aaec72ee90bcccfffeb33feb8be826efa4065a7c commit 50faf7a194b80c2f9a6f919b03036880e6620b0a commit e56b80d9fd291481e55c1e7b3483db83ec44b680 commit 8ac80733cf6f08b9fdac9bf6800dd81e9304b4c6 commit 890b6ec4a522799d36bd10aee993059d771c06f4 commit 4d0d77de9af455aa949766ecad1ac3232e322020 commit 120542e2c1d12e7d3594ceeaa6e02296af52cc80 commit 50105a3ad16cac406494038ce4edb91769911434 commit a14fef80ebb3efa5755b02790e067fe259bc8c63 commit c64a9a7c05beb2b71b7496d873654f88e1a08593 commit 3589fdbd3b2085e273b6ea1e9f27a211e0ef74f8 commit 2b0a750caf332a24f62f6960820d24d885f2efc2 commit 52a743f1c114727cfd51aefe584c7a4d82375acc commit c10a652e239e21492525fab295dc2fc303338ef1 commit fe9b286bd063791c7842c4caf6efb2825b537031 commit ca3cfb9d9b5edffbea1464079abaa89714e7abd6 commit 37388c0192bf1474ffaaaf38024dab49d0150f12 commit 5d4537463fc2eb1245093e0b62e200ed9229d00b commit f47a0e35846740ca72b8ba6be84b5b518abcebce commit 4fe7907f3775034140a518d1582580926da98ee2 commit cf9420cb122d055840848b039cbbc303882bc445 commit 38a1b50c0389f1ae385d007b02dec5f812b3e5ef commit 03f060b73f9ad9555f6251cac21c692df8112a68 commit 6f9976bd1310d123921ba2c20e8c101057087285 commit 2bbc6fcaf8c58a7a59900512be11b1775a611381 commit 115e0f687d29649b8805e3417e089e785b0ea61d commit c68dac968c460b89a4f6e3617ee5defbcd96eead commit 6cff894e4991a5e80324ba39369288fad1e3ed1a commit 08d1ecd98a8fe653d24644f072a87549e8503447 commit 775affb06a5bc6051f48c935c86c99f849e2da09 commit 9030e39cd115db3a93a6a5eebd70f5f9c462e4eb commit 4579509ef181480f4e4510d436c691519167c5c2 commit fd4d7904f5e38e4ff8e1267a53476cfa4a225708 commit 498f02b657b7a591c61cf269f7b02dc136231ea1 commit d3cb30f8dcbcb797bb4dd62dc8e85dd2334c3475 commit 781050b0a3164934857c300bb0bc291e38c26b6f commit a25efb3863d068929f0bbeb87a995df11507e691 commit 078e2bb2585a05df787be74642f12354a66a0534 commit f35294e13c19bf890f26bc1ec964b2d29c82f0ec commit d1260be706752dc01699b72222bbba48f42adabf commit 3153c6486008061297bfb0ec5cfd3aa4f8df66d9 commit 396d9b9a48723995416a05f0dab80c1dd6c21e80 commit 452290f354f04fca53cba810bd241f4307502f1e commit 27bd66dd6419c45e320f34ed419cd80833de1161 commit 3e3543c8a19cade02cefde83ee97233d5d90e7e5 commit 53bc2098d2b6ccff25fe13f9345cbb5c0ef34a99 commit 19b20a8021315fce38ae95607e5de389913471a7 commit 18ac700d75e81b7892c6377f6d8b917453ac69fd commit 0dd80b483b95abdbc3919cb360d17179a5f85d2c commit 9239f3e1807c282e3c6bced510640910e9b25c60 commit 84e9dfd5185285df55ae9068c89cde1a88baa7b7 commit b50364af7af47bd2107394b8faabffab59329af4 commit 2013ab184971c4a92c42f2bc401163e5b105abf3 commit ef9600ffd447ca3da6660b1f5932179a67292e09 commit 74e0457a62c697d388b832b0a52dd1e716204019 commit 6874f95816da4af4eb6a395ae434b823c4d7d356 commit 41b85a5202b775ce7eece34648a4b592ed18f5d2 commit 0242cd3a538f8393cb811d79806ab519228e7cbc commit 11a6b88b8cf2ff6e93a5b136ac04fd851a2d935d commit 8f8c61038768526d894e02b10ee1e4ace94e55df commit a61cf3883c83d02cc27b18c4cf8f639279587bb0 commit a46553837056d3a6119f4ac350afff8c2a99daf2 commit 73ab6ec90922f50b99c189088f100025a44d8ec1 commit a4b17f757d0b6b4cd4aa2fdc88ae7458235806f6 commit 9ddfa5a084f65115844e9248903be547a7610a53 commit d061882344279ebedb343d463a885118d7dc8978 commit e49a656b924ef125a2b00945a60df39cd09b8c86 commit 02689a2055d8a78b7cd0b722a591d1acff8b1e4d commit 826cff3f7ebba460d3db61f135798ce76b0d26ed commit e9d9f9582c3d90bced286a63d1f718d4aae60a03 commit c582ffadbe6cf64be4544d9d168bcc520bd0c984 commit d73dd1f4e40c095bf2f9824a42fc3608d7d188eb commit 645cc0b9d972b8bfaa983623950c3a53ccd0c57a commit 212e6562f33becbab1996261677a0b89c5ab8b54 commit 3f2532d65a571ca02258b547b5b68ab2e9406fdb commit 7cd70656d1285b79c001f041a017fcfee4292ff9 commit 2a2d23b68c4e4cd71c9999ea8b8608700c3f9ead commit 5f1176b419f9468f05dabdc8352bfa9b15427377 commit bc4c7fa02b5f9439db0d16a5071620747e43736e commit 4f232990dd83564ff41d6186ff268a9eeeb118a9 commit 57cbdbe65e5f9ba9bfd67b66bc3ce24ef1c54643 commit 23244f67ed96c76428bfdfc63eef642e4d627825 commit 6040308ffc9039d30a34bc40021e19d6da3683b1 commit 1d2271d2fb85e54bfc9630a6c30ac0feb9ffb983 commit 4cdd2450bf739bada353e82d27b00db9af8c3001 commit 5e18b9737004ef6f34862f6fb39d3c9027a4044a commit c5dac1f62153d08a2404bcd6292d72f8290c2c1d commit c0a808b06939a39f6f90c3a33436365e6ede0618 commit 78ad449dc5c88dc540f8cc07d87ce2024686cbb3 commit 372b8307a6288265fc06f2d7a6ccc85e21167d37 commit 79af598a5baefc3a92b31ebc5b7aff00b38dc633 commit 5d96a01549ec6eb5515b735301a7f1c6c4d481a6 commit bd6e07e72f37f34535bec7eebc807e5fcfe37b43 commit 22da19f900be6b90b6984522708b203ac9bce1e6 commit f9325afc23268567d9a6a7452252200cf79def84 commit 170dcb67a208b6ba93dc18be607b90f82520749a commit 606be062c2e5324ade705e463b45d9262adabcab commit d50d16036fb395aaa3c4ca0333b55cceadc81874 commit 393534f291d821779203cb74896abc26e07160d6 commit 6f07707fa09e1dc58c431d57c25ef2e68b9bec47 commit 09eea212653304522e9ec74cdda59721af8d4969 commit 5a06f68dbe0fb9cc08db9cfae310c7933aebd6d2 commit 5a363c20673308e968b6640deb73d7bf77e8b463 commit c7fbcb7149ff9321bbbcc93c9920de534ea8102c commit a193f3b4e050e35c506a34d0870c838d8e0b0449 commit dd54575a83d85c031d9c1c4a78607ec3c95696ac commit ce6838afc9244171cd07620bbb82e18695c491e9 commit 7e78153aef7f9efcb935487402151de31e0836ad commit d5e781a2e50fefbcde81f10e0e9e2669fadc9b01 commit fac73543fff0ff23622c98879c66d069778c114a commit 9a7fc952717ea63d13eb9d42581af52ba34c3914 commit 1a085e23411de188ad0615f40a9399d80d1f7368 commit fc12b70d12d07598cde27cc17dbfafc2a2a33ff8 commit 58471f6384fd8f807d3ff2e771c34f71c473f6b0 commit 4588d7eb3b530b471104d78a19f82df701ec8c25 commit b8d65b8a5aea3309c14cb899149ad5ce93589f58 commit 912ff2ebd695c582ca4cebf833ad73a378a99f23 commit 73495209f645183c84a86bc067818a8c4ac20fdd commit 1b5bdf071e62ac57ad699d60ddbd392b266f58b0 commit 5e9ddbdcf730a2671b9a07c6de45b53f139995af commit 7e2e69ed4678a4c660c4727e625a396b06c0c372 commit 2cbb8d4d67700b4ea7373a307676fe312251b257 commit fa78e367a24977d76832fda6790e9e1c35788f80 commit 49c39ec4670a8f045729e3717af2e1a74caf89a5 commit fe69a2dd88b2c741bd55336d74dd484d7b848679 commit aa70a0996b0ee5950237cfe5f039285eda0c1470 commit 1e66f04c14abdee103221518c4f7cfb73574d2b9 commit a59308a5fb231aca72b9b070a6577fa49ec2d72a commit c6c57446383a3dea098fc324f0c7f696c451cf3d commit 9365fbf3d74bb6febfa7e31cd1c32d0d4d4b8393 commit 1cca6087422d84fee7450a8eb115a0b27ecc7e79 commit 9a17c9b79b4d112632ba44a821799281445eb28f commit 4056b033774664fe878d25f6087a1c41c82d075e commit c531a58bb61bc7eca3d58f5adc08a246af262244 commit 420185fdadbf0f74cff90f466df5c44c1ff3dda0 commit 3356c38dc1b6f74717a9c437b47e9362c8c96ba3 commit 6bfc7c7e175e6ca8b827cbda382b6e1e6585954b commit 574c4183ef75117f763e9f2b35e08c85f5dcad2d commit dff63da93e458489d0ef7e3a92e1b14de450414f commit 56c5977eae8799c9a71ee2112802fd1f1591dc3a commit b5d1d755c1344075d4f16a3e6183ed04b4d022ef commit 087451f372bf76d971184caa258807b7c35aac8f commit b5f57384805a34f497edb8b04d694a8a1b3d81d4 commit d5a28852e86ef486ee34e4cf72e8ad99a36f4fc3 commit 26db557e35d6b229b31078ebd6939b4cad936f6f commit b97788e504daf4ed455ec35047977a3016355571 commit ebd1e719695824ca2b9225094a669fef35620676 commit f0d0c39149f817e5ecdff8fa164f44da455b3317 commit 1f6c9ab06f61d86a80056ab57f9c6b7beca3af27 commit 80c5f69b94249dc1e0a600cbef3cc055ea432af9 commit cfd3f70ebd9e761754da8ab195ef7ff476d5cb25 commit 1328e395fd62070a29dbf28435ef8da1ba780e6c commit b57d16bdd62cc8c231aad8385d667249939cdfe3 commit 426b4c4fe52c6983b40f4d904a4ef430409f315c commit 64266f0a45c8323861d3756cbe3dc419e973917c commit e43098f6abb033142810e695c1b3d9cf61e19849 commit 4cbe435dd68884a9f6669fceb20f3e70a70c7702 commit 095041dbfa03a193c7e76c00b0cdd1cfcd45869e commit 6ef86fa8ccc8a3200fc89e8c9b50f1b90144b65c commit 0ec283cd043dbc65e0f17230695a6ccdb0f439d4 commit ec581edc56d39d3a6450894f26583b36480acffa commit 548f212514151b0d6ec911c87e61f189f530255b commit aadb06f9c9729ee3af1543f54da966644ebc5be7 commit 7a47c8820a1d97e6cb5bcef6b65529f1389b0e13 commit d493a0244fce12de22a220468e6628bb008a0e58 commit 68ca1c3e57c40a205de9d31518fd1dab5f47f520 commit 02274fc0f6725988d4a67005cca6f40c50679499 commit a6506cd845824fe92b1760aaf104011cc04dfa78 commit d3c983010f6faf59eeae1b92e2fcfe0696e80eaa commit 8bd1b7c29b3c3fb537265a3891c1fb8e78e9da45 commit 73729a7d079dff45fa906a5b8bdc4a5edd775ee5 commit dd0ae064e71ada9cb2dd526607e140c7af690646 commit e4804a39ba5f72f0b8549445fe39725b2d1dff7e commit 046e674b961594e552fa6cd3cbbc34086b9580ac commit 7eb0502ac0538ea9746481f3d7578940c8302c42 commit 48c19a95f15e787bc46b274129da37bce06df259 commit 04f0d6cc62cc1eaf9242c081520c024a17ba86a3 commit f5dee1283f6289342e720446ac777ce3aaf95f13 commit 646596485e1ed2182adf293dfd5aec4a96c46330 commit f58a435311672305d8747f40e35235f7ed64ae69 commit 37fe0cf5fb803d98efd7feb64b408c9b029c1085 commit a713ca234ea9d946235ac7248995c5fddfd9e523 commit bc30c3b0c8a1904d83d5f0d60fb8650a334b207b commit 4121113410fe16649d0a66c81715c8fab7740b14 commit cebbb5c46d0cb0615fd0c62dea9b44273d0a9780 commit 4765d061d50559ce3addc9a86433c35f48d76085 commit 0088d39b6ad9f7d814c10e7188aba0ddbc737883 commit 9cca74b51ea543f4f64464b0347ff5d43a4e57ba commit a37795cbdff243c198d9cf9615bd5d016bbfd546 commit 99510e1afb4863a225207146bd988064c5fd0629 commit b2e7d636d9ad5dc7e84a95b004345cdd2fc82b2d commit 6bb0a0e0fd358d4f9f6ce4c2d36c1f80d7496f6a commit 7d938bc0119507d11dc02cc6ee47f386cd5d2f0a commit 51707f22744439f0ba009f0665faf7964b4e1b16 commit 6f51260f0eda41a19dff4023d14d543907f0f967 commit 497520ca1915a91188560a26c2dceb9b9c43db4e commit 6abf2fc0072b020cdbb9124ea935603b02502e6c commit de511df7254ab22ee777ef6049547c69c1b2c78b commit 5ed597daa4202e92472953fbfd82105f10aa35e1 commit 2052287a74c95234eabe7a858f157a88d6880029 commit eeb04fa64af18cbe03d1067a435c6423da47b6fc commit 10ceccb8d7b6d9770948da605b8da4cb5d3598d3 commit b0b0f2d225da6fe58417fae37e3f797e2db27b62 commit d03a29e0b1e10820631a9ba600ff669161001a84 commit e6e1a304d759580d2dc0736d439b56e9866cf598 commit 95c3d2758002d588d321ad231c04c6f7adbc4838 commit 267c336349db0e624d217f9762bcc1da414f4b0a commit 865fbc0f8dc21e17dc3ad9f0f1ebf00a6696b2ca commit 8626afb170dc44ed0512e04131e4d8eac0c5ec57 commit 527bab0473f28236e4587c7870586275c1ef5516 commit 6164807dd2989fd4c1435a6b3c61453e63c4e37e commit 448cc2fb3a7b327823a9afd374808c37b8e6194f commit 625097a9e0c614251cd9ba89b1a416a36495768f commit 1d925758ba1a5d2716a847903e2fd04efcbd9862 commit f441dd33db4a5ba306d507e70e97f4656d526e38 commit d25e35bc26c3ca8cd728101545cfb3e86a5d7431 commit c09bb36dd1230838d49a5ebf409df804a5ebfdaa commit a53b554b56e0326edb2ddbbf8c76743191f7819c commit fd3b2e21b8816273ca7813a8c9455c41ff77a96a commit ef9d5a54dae9be855352ead302a9659bb8610285 commit d26c4ffba6ac16b734749b8624124fdfced41453 commit 430bb83dbdf3c86768fcf2f6fba2982823261f6d commit 2430be71c0176ef2757b63df5a25aa5c9e488e25 commit 2665f63a7364633ad90b2c58167ed7ae224e5d33 commit 189789a15f77239d03caad68fe4245be92d7f71c commit 21f45a2363bb0c96ca3e942d7207e7172514b5d2 commit 1f49355c4c5610b687cfa151ea29acb12e8bd72c commit 3f232a0fdbb17c64ee9afff1c16efe94514456c5 commit 8fa6f4c5715cee5dfc04f98780a15eb6d1da5be8 commit e90f0bb0c7c7099a0222b00f1dd882d349f9d857 commit ed12f3f198cedbb164129991766e1a42eecc0bac commit 6c08e0ef87b8b4c1c243719a561c354e893c415d commit 33155ce6e1a846759ba218ca8aa792305b351133 commit c96cb65989036feaeaff371551b40910f32f3c6c commit 3ebd8bf02380ddc32556ee87077db3917ccff40c commit d9a69fe512c5f032556764041760e8d5098fac26 commit b295ce39912cb10d3bd34fba556e4009b67954db commit 6c5af7d2f886bf1f1de9cca3310b24a8d7ceaa47 commit 1da2fcc435114ea5a65d7e15fc31b4d0ce11113c commit 88ac6df8af2c1fd02f2f8865257d8b632abeb688 commit 7b755d65100eacb63f81c35addbdb0a0ef5806b3 commit 8b11e14bd5793cd0e5cb65055fe51588a779f05b commit 7b833d680481f463276aedf500696ea25698deaa commit 13d20aabd6ef501229ac002493c6f237482c47de commit 24adfaffd5adecceb0a2608d5ec2e47756b8a671 commit a689e8d1f80012f90384ebac9dcfac4201f9f77e commit 92020e81ddbeac351ea4a19bcf01743f32b9c800 commit 6edc8f8aff61a6512464a123c160aceff44f6a90 commit 8882f90a3fe2457c8b3f86bbbbef8754f704f5ef commit edd7942085555cbf8da50c855f35b3fb84606c38 commit fdcb279d5b798d13b4365bdcf5548855f6c562a1 commit e39938117e781d0bd21ae45b6c15134f4a6958c5 commit ee2f17f4d02b14549272aa69da17bdcce2879d1b commit ae360bf1821917843c00637530da5b5f5c3c33c7 commit 79aae67ef8bbc8df09099290fc2c3423dcdab224 commit db5b5c679e6cad2bb147337af6c378d278231b45 commit 1f5fc7a50955e20c019ddc73575d8a663301d999 commit a0e7e140b5b2cb76e9b455e548234c22585001b6 commit 4aaea9d72e9aa01bfad7f48b3ad9d0ed591e7cb2 commit 524a0ba6fab955b14d4ae9a15edbb853e9cad426 commit f8fb5cd412e31d6277c5b0107bb37d677107cbc0 commit 85fb8bb9d4a5bae9d1abd0d21550517a40ba81e9 commit 1edf5ae1fdaffb67c1b93e98df670cbe535d13cf commit 6984fa418b8efde7662af151bae4b8dc66e65fcf commit 11b4da982791dc11dde66e9f0954673cbbf4c690 commit 7057474c83817cc707c4a0f08ed05774659a2fc9 commit c18c8891111bb5e014e144716044991112f16833 commit 3c542cfa8266e3364938d055b3d548b7bed7f08e commit 0af4cbfa73afa814a80eb205a9cca8ea78bcc2b7 commit aebdd7428c65a8e2e96c1fd2fd89b4ab90bad913 commit 01e526285a6a591900e7ed7266c1723fed366754 commit 7570d06db73f9e5a97cb55bcdfcc3b15f6f46b9b commit 617ed6c2f0365a62f21936449ca1701937027339 commit be373fad541b60bb785ad59c6daabe0298b39cfb commit 5979873ebbb57b72a8f88ba26d3bd405981cd844 commit d22d446f7a1ccd0db8c138749dde601388b2327d commit b6b56df519a73e35ac3f7d268affbae63221168b commit 86c82c8aeebf6db5df8ab73cec8333853c405070 commit 0bae5687bc689b64343fd8b52db2ad9e448f3f16 commit f53e191e2be811158f59024524b509d39808e454 commit 6d63fcc2a334f7bd15e4e9b1db50a19335d2af4f commit 4f48034b7fceec6845233fd71a0106354bb0470b commit 0bb24555858403671657f6dc025d2931e3e857bb commit 16f0c500f05b029c37cfcba61da92611192c1a2d commit a5e00e1135b09ffb9404ee16701d20b6ee259b16 commit ae6c9601da7addf1191bf54d5d279daa124b71df commit 8acd97545008cb0aa916e6dea5e61f364de9eafb commit 11dff0e871037a6ad978e52f826a2eb7f5fb274a commit 7f41c66070053e269b2082be964b6ce9f95776e2 commit 8ab1d0923c2bdd708e041a765c6e7ca57e6121d8 commit 4f30d920d123c58b6e55e6ccd061673751aab5f8 commit 7b37c7f8f505abc55da54a5a9d22135d77ff73bb commit 37ba5bbc89787aa6029266fef771ce1fc7f596ae commit 1223c15c780bc967e150204ec11992f39fdc85d5 commit ca4b32bb2d723c705fcce1cfb618a0cd19185f3d commit dc78fea1e7fd895990179e2b32164193a9fd17d3 commit e771d71d8d588aa0c0f9ba3e1b81ac5989ffcccf commit 3a50403f8b119d6be4f9935cee97473a2c90840e commit 514f4a99c7a1b635f7336a6e4732e6fe3ec972a9 commit a0c55ecee10055901c9c1b46d0d129cb6b51fa5d commit 7ad153db5859e5e156307865d9df7f2a392c1686 commit 2e4477282c8cff9fd2155710ed9168f38faa0b4f commit 71ee9236ab9e7e7b76be3d106724c35c5f934b85 commit 23eb49251bd6e169a57ed938c815f6f47a312479 commit cc7818d7091d0b07d564048ba5cd67b1210e8768 commit 081664ef3e43dce93710ed5ece326478edbe0934 commit 1f5792549376b3c20639cef7b787cf6262177b66 commit f6c466b84cfa78807b7f71b8adeaf209b4deb72f commit 05d1c76107e33346fdc18fed95f28c9edde8a760 commit 8b1f7f92e57d7eff7a3503763dd2c8e0357c36ff commit 004746e4b119a206c27c6ea0f4b6287bab16a9ad commit 6385eb7ad841bf938427f4fb4e7880ed385744bd commit 5652df829b3c2cee92bd0903a0e70455868fa1a5 commit 83ddd8069f98886ce1da2b506602220fb0e4a912 commit 11632d4aa2b3f126790e81a4415d6c23103cf8bb commit 16d69a891970a8f97f0aac4e7ed0ccbf167a936b commit 5c2625c4a08cf9b19cd070c1b30c75c9e5317853 commit e45b98ba627691c6b577244abfdb18ef2621fea3 commit 8b91cdd4f8649560a8ac37b134008fe67d94ad4d commit 3ccadbce8543dc4b2933509042b3d7e71ef05976 commit 6e22dc35837790a84fc040f08e5094b2d5d91477 commit 35f7775f81bf8147b5b8b11958e15c0cc364b7c0 commit d76f25d66ec83a8166f0c0be79bbb039d66062d0 commit 6a2d2ddf2c345e0149bfbffdddc4768a9ab0a741 commit e9aeeba26a8de1f553305722d017022ae7e79280 commit 69d846126e1653ca9043c3766c66684132586941 commit 447a39f4e89d992f82f03521d46746f6a4348578 commit 74ba89c08e309bfeb2b2f401bf588ab54a1542fe commit 95d35838880fb040ccb9fe4a48816bd0c8b62df5 commit b93199b2867646be5b1c84cc0a844df023877806 commit 2985c96485b7ef4e015d13dc3081fb0479260951 commit a21800bced7cbaf7bb8f5281db17a5d7ef6e197a commit d0c4e34db0b0a012352dad499a13738b4102f277 commit 05b1de51df077a2089e3d8ceec68aa687cff15db commit e580ea25c08d9e89593bcf80640e29108f0542cb commit c47160d8edcdb4d9fb2b333569a3fc13fca5db43 commit 09717af7d13d63df141ae6e71686289989d17efd commit 19cf41b64e3b150cf64fa01dec13f20dc86d95b2 commit 86baad1941702aa9b6fb44d6f150a34e9e4e1fae commit f7fd7814f34c97a6c3388b25db18643309cff43c commit f8be2c5971f48dacbd0e6daa44184dbb6f283dc4 commit c99907c723c6f3f6cae63201ddfac610be13f997 commit 2a67b18e67f30b526ce69b7796a16d847e94e2df commit 44505168d7432f983bc31c5b2dce72bb4de98832 commit c7c90b0b8418a97d3aa8b39aae1992908948efad commit cca084692394ad2733995241866fbb4b1b8668bc commit 49a8bf50caa2fb0fb2eb1c89923ea61192227c32 commit ff20afc4cee7b65f752b1da6d5da4c0bea1431b9 commit 826c387d015247df396a91eadbaca94f0394853c commit 28b5f3b6121b7db2a44be499cfca0b6b801588b6 commit c451af78f301ff5156998d571c37cab329c10051 commit f6be23264bbac88d1e2bb39658e1b8a397e3f46d commit a85b1cb23091d3112492f30fd92308cf4dcc4fc6 commit 2696f9010d21aee60be06b2135806e11c79ded8b commit f3799ff16fcfacd44aee55db162830df461b631f commit 96b1c450b386b34479c0d6c5e24ebee84261433a commit 70897848730470cc477d5d89e6222c0f6a9ac173 commit 627d137aa09fe58308eac06191afcaf865bd11cd commit 981b3045460d1c6f201ca83c1f479cf38d28a393 commit b7e7e6ca1f7b5abc9a4d13c9e929e431240d9f48 commit b9dd6fbd1587ca1204e6b5ea536115ab3fed1798 commit f37668301e362a0ed4b0b2ec6866f0a02fefa4db commit 4f7ee199d905c7a073b676ac4146b964dd651395 commit deefd07eedb7baa25956c8365373e6a58c81565a commit 700de2c8aadcae459a4db19b943962e709df45f2 commit 85c1b9bd13b0b298bbbf128e26a470ec54c4d0e3 commit 232d1d43b522b64266a16606e918ce92a8a0b244 commit 3c2d6ea27955cfac8590884d207353eece8c2cee commit 3867e3704f136beadf5e004b61696ef7f990bee4 commit 94a80b5bc7a23fd5ccaa3ba43ce25cbdb9eefd62 commit 6c18ecefaba7ccb8150bbcf997f7a796a43f786b commit 3700169886659e678fe37629ffcaacd6e559655a commit fe9c5c9affc9103686aed15966b4b54acd1f30f8 commit 81d104f4afbfc6abb3b602356cf7263f69f7a156 commit 50b1f44ec54746e5332f4bc87c70c223192e821f commit c022375ae0955b6d97ec438d658ab43a857a010f commit ebe5ffd8e271e328f33c4bc5cb8cea2b4cf8e058 commit 9311ed1e12417c81e1764d7656d97d9d459f9c5a commit aba3c3fede54e55573954fa7a7e28ec304557e50 commit a896f870f8a5f23ec961d16baffd3fda1f8be57c commit 9602044d1cc12280e20c88885f2cd640ae80f69e commit 0a043904187b31fc34369d31569186a5ded23e20 commit ab644ea6921a2cee9282bc96c35b29b17a8026f0 commit b995747511f6d9f6d6f55bd094e3a5adeb36b55b commit 7238b42e1f4009cde5c67c2c5f9d35d472240ffa commit c11099b0d1aa3e48e9578b440886d8b29779e8ba commit 2f2a4b1879bf6448865af9bdab61d1b7986f6dd0 commit f3edefce70887d78ff88d9f179bdec5ea62a50a2 commit ee347d5b40a14dd9a80dfb2bf4d2c5b3b4367135 commit 4752c85b23ec67586e04133899c9d763cb4d629c commit 007f8539d03d557157fce2e5cc6016275f835906 commit 71f8f119237ff2dd4fed49aa79eecdc50ed41ddb commit a872c152fd91e815ce1a2f251ff06d693119fbbd commit 992110d747177e5815cf89003732ae69cd70913f commit b7675b7bbc3c4c64731d6df66a1df7abd0fe2f9e commit f0dc99a6f742bce9f5e45a6ca48bc4f1f8c6bac8 commit 2c1f19b3272c0c09184b1cce592a91dc34a83506 commit ea6c66449692399005f975b69c72a9e1797871f2 commit a899fe8b433be3d2c6bb9218f2b885d91f3079c4 commit ddb267b66af9d49d54e3d3ce8a6b4e4e7ad9af0a commit c305ae99dfd4d0fe70c7fdf13ef5f7650a804ea7 commit 7b06894b9b902f540b23e5c235570b224d63ec5e commit 4ff22f487f8c26b99cbe1678344595734c001a39 commit 7794b6deb12176112cf6050dd8507cf216e801b9 commit f2bc4517310c37cfeca606079fbfdd025d35c4fa commit f35ed346ef5bb8e5e89802c4dbc8b311693e39f7 commit 0e959b4e993b095641f405972bc56d8aa72eadb6 commit bab73f092da654d149bb4771c418bf585c06044a commit baf3f8f374062573c469631af03bf7fb1725896b commit b220110e4cd442156f36e1d9b4914bb9e87b0d00 commit 69cb56290d9d10cdcc461aa2685e67e540507a96 commit ab50cb9df8896b39aae65c537a30de2c79c19735 commit 34734ab72763d51c6b809ee80ceb04a161a37dd1 commit 4b19f6b728c7ae0cc285d2012d5aa1ab99be9b39 commit c02343249c26032afd4774052dad434b4b4dfdc2 commit 7cbea1b61788c05a5bcb84c73ed5ed90bb2e0a93 commit 487970e8bb776c989013bb59d6cbb22e45b9afc6 commit 2ebc9e4af0291d2e8d14ecc0bad8f36de8cc6e62 commit 92e9624ad9468bdfcf652ba2cbea9d8995397fa6 commit 1538f65f18ee600dd405350d826ec6af05da79f9 commit f83974a408592dee672f9a4904cdc2149c6e161b commit 5734c1774d8f32ea814c2904feae29b4582dd219 commit 726a2d779f0ede31c4739456df1a7a69d10c2a0e commit 15162c5a36abbf051f957ee8114185b899c6975a commit f84b336a2ff7473a7c6c15eff6c4ec50aee476a3 commit 62f887ae46861484c5ff2b8880c69403611c88b7 commit d96c5ed0e37fcba4071d29fed92410b3a4d9cdf1 commit 248e251567a013c960d08124a4abcfc3e2ce6371 commit b6e201f5f13bd61ab8e5187daa0e149826cda154 commit 2e6c99f88679121eacc75196bdf6da8b0e513066 commit 266790871e8d20d6074c1cf3ede7ae92efc61bea commit 873c995a40a5c2324a5d1e890604066b74914b3c commit e1521cbd27aa100a86b54094cfa4387a9bcc2f63 commit 6e4d2e45ef3eff90e2ee2dcbc29e356158c75f0a commit 004f80f91a7831cd32970e1078bb00594d042089 commit 62d4874bee61d971b74dfd5fcd8032ff33746885 commit 32024bb85ec2a8475b89282726121b922caebad9 commit d2de8ccfb29909272fce4eb5cb2bca4fd878df39 commit 825bd8335e4e9fccf33b93813693409b4484ea68 commit 606754fdcb20f781774a279d62bb0852fcb2b79d commit 98009fd73bde2d66fb449cd277f69932fd12051d commit b156def9912fe6d9fd7679c9843f80cfcd9d1429 commit f4cfdbb02ca8227cf4de454071f20cdd09c37cf2 commit 0cb9f228bc2b3871fd1fcef87897f0a5af959343 commit d3e27f7c511044c65b27d087e55b092a3d97e8d7 commit d5ba72f3c18e4556d99bb0360279d0b1e9544359 commit 812e338619f166d3ab864123b2572523f6e4916a commit b1e4747259f4173354b914fb50e547ebb80fffbe commit 67b858dd89932086ae0ee2d0ce4dd070a2c88bb3 commit af10ec31a81b2f8b9a3b2d1ef05f553cc9495701 commit 8722ded49ce8a0c706b373e8087eb810684962ff commit dfb924e33927ffa51e197acd58ad1c5edf1b5ff5 commit 8697c410457fbc50169d2c7db4a7eef9b58924a9 commit 83b965d118cbab1dbdfffdff8cabc8c1cfd183c6 commit 5f97816762722cb08a4e0a124fec02abe0a2208e commit 5d50c8d7ed59f675d25cf061b5ca67ebfa7b450b commit e83c18cffaedb1cd5da935b06d49308f92ea50cb commit 17815f624a90579aeac4b700f8434e9ff6a6d001 commit 1c7ab5affa5e73ed75732be2f2fabe1ae86c82e1 commit 61b98486e4314d39d43921680d68b46c3083b22e commit fbf8b5dc6d9edd7f807f7a6f44ff4c18f96f9efc commit 491fe469ad0e14a06dce7ebc6a19c4fc3f9300e7 commit 2fb352fa627052c9e551339fe27158df305bc622 commit ba884a411700dc56dceedfa53f9364cdcfb70427 commit 2060a6895b768d907fd3efa9f52981e615171ec2 commit 77ab3a1ecb1986c17644c48b66d9de0a9a0307c9 commit d4a23930490df39fd076a82649ddba6b3a6c8216 commit 42c632b0555ed0500ff26b329e194fe77d2b6123 commit f8378c0403813fd7cdf0eb5cb878b1ff290046c4 commit 27cc310f13529bcf24518854b10f098de7fd7d6d commit aed1faab9d9563ca5ac5139b0170486027ec74a7 commit d682619557120a5f2d460b822f5ff922435a5261 commit 81bb9bc95355055e2fa297b9a81e9d786eca9903 commit be1ac692c08971486d68a88f39fc4e2cecb80a8e commit d29b7980b55ebe96ba167aeb88e81775c141f659 commit e885d64785aa56e10e432c3319e3b5b0a2d30ac2 commit a1f5e392de78f122629412d6e4350d1c887f1711 commit 4bef85d4c9491415b7931407b07f24841c1e0390 commit 7b201d53bc77e8517bd78348385b6362dfa33a4f commit 1e146bb88e26b6d5454326f7591662eb095afbd8 commit eb9e59ebfe7354c18d7d6f59211fc7a7b794d019 commit 800de20b1dbdfd85e303a42b0f27c0162ce18698 commit 32b119c896121e71ccf1202499e7f0292c73e1f5 commit 41f91315b5be5a5fd4011c193f6a14fee34fd027 commit 6fc429c81a64b0b77fea38809b01ae94a9348025 commit f7ed3f90b2c69ddd2414d9839ae334c10a606c55 commit 30c1e391978180dab913132201b944c08054c822 commit cf63b702720d734cb4144440d72d4b2ac6c494f8 commit d374d3b493215d637b9e7be12a93f22caf4c1f97 commit 20543be93ca45968f344261c1a997177e51bd7e1 commit 0b7778f4a63a1e0dc10af27201b99d88fc0ee7b0 commit 3c021931023a30316db415044531b116b85e6ebd commit 8eb7fcce34d16f77ac8efa80e8dfecec2503e8c5 commit 08c7c122ad90799cc3ae674e7f29f236f91063ce commit 31d70749bfe110593fbe8bf45e7c7788c7d85035 commit 97c8ef443ae1f6493c02d6f433eb5a2b72d8b438 commit 03848335b5b1faa4a4641fcf30b7c233579a45aa commit 52407c220c44c8dcc6aa8aa35ffc8a2db3c849a9 commit 4a75f32fc783128d0c42ef73fa62a20379a66828 commit c9ee950a2ca55ea0f63d0893f796b2eb089e7900 commit 67c430bbaae153433f76807d07b8298ac4714822 commit 20cddfcc82e642e4682c48af91f0702fbbd623a0 commit e08a7d5611b876bf9da3ef7c185d26dcadf24dc9 commit c8a04cbeedbc9f71c475141baa656f14f4879792 commit 4bb713375e9f4d8b6d540ff47e61a4e357c4229f commit fd2b94a5cb0ff4bb163cdc4afaede6527eec5f7e commit ae710a458f0af6ba2b991ebdddffc66e8dbd765a commit 01dd1fa26b85167cd19b04b10e015aba3e243d08 commit cbb8a7957108e96560c43953f70c377d8d9b6643 commit 927167f37fe03f017fb0a89ba2c4d35bc51f233e commit 7d41745acfa722309dc7dbdcf8801452c53e936b commit 94b541f53db1ec6b99fc2186b084177cf6e18824 commit 6306d8dbfae6abbc049cb92fc7cf2acbcd983f8d commit 21a6732f464894fa43fa1d43fdc7570b454b970c commit c83125bb2199bc304badc98fcc7c79704053aeb4 commit ca9216246094904119b94478176eae83090f0fdf commit fef53be028740aed15c288534e8f15719fb49947 commit f122a46a637f9231433d30aa1f9a199f8688cb97 commit 0b64e2e43ddeb010d3f2a45f978e6cb919cd0895 commit 8aadeb8ad874b3b13431fd08c1ddb6d5e0212c7f commit f4708c16a6d7da93baee9ebf9cd46359b4a34bd7 commit 8ad0c3fd132bef4b849b3770038a6b533fa49579 commit 8afa13a0583f94c14607e3041c02f068ac8fb628 commit 24df43d93d72c5bb86165e5e59c64f909ab0149a commit b05fa56425f5028520b5c1457b96bb68dc74bf7c commit 853369df34fb61f47ab883586e14d0fcd8c47437 commit 4fb9326b96cbf9f751086969161a6c1d75bcd8f9 commit abaad3d95b5117a17886d37cf0228712801cd259 commit bf625870b8309b4af75f9c19d287d0c9230634d3 commit 9ca476acd5e8725706c6ef3b0d94d3005836ffdc commit 94eb7de6f4bec1c8bb99371c21df42cac0de6ee9 commit 1ff9fc708185a94c79d4def79c0a500829297575 commit f8eb96b4dfbbbadfb73ee9a1cd0294f9e2762a14 commit 15bb79910fe734ad21c765d1cae762e855969caa commit 211b4dbc070090b4183d6f9db7dd3bd4e6170447 commit 43531edd53f07cbe977a0b33dea6dd6c29b21fea commit b07bcf34b6c98a7dd540c94e804c39a4273da37c commit 1c66496b1391699040d0ddda21fe1979865f6eba commit 3d832f370d16a8757024b2523c4c6b64dd7eac6a commit 76aee8658b8f5836ace0a423157f29fcaec65e30 commit 87bb2a410dcfb617b88e4695edf4beb6336dc314 commit bce45c2620e2142eb18bfb4b0aaee8cb83429a35 commit 35291c9c02540692039cf7231f7de42fc89be096 commit c7c2918849138057cb2206b4fe10b65f02ab07e1 commit 1aad06f89291c2191f7c352bcd63cdf393f0f87b commit 14567eed87a39d0b40d3e1444f0ddaec013c1a52 commit 0cdbab89c02d47a277577a90d02e3f214d2af9ac commit ee0ff28a497eed4e23e0d617e6f5feacca69e0f1 commit a09147188f7fc0d1ce9b5fb6b7fa6a81c6806073 commit 754d6275e9ce6310813087628ef2e44b6c65e23a commit 2bebea57c2efeb7c4e981f5ff76bdca7e58ab815 commit 63cb9da6fcea9029da8c9d1cfc93f1558b229c1f commit 6678916dfa01251b888465e2193e28affb23fca9 commit 35d4efec103e1afde968cfc9305f00f9aceb19cc commit 013005d961f7d5d1b422ce7f281fba9ffaa2b52a commit b2657ed0a56f63b1789c596b36ddc6b618726661 commit 40aa583ea345624967c5b6232082d7b839de537c commit 7e4aeed859d47474e40f43ef6ef3004ab52486be commit 655ff3538eee3a3dca7103f97de883e033bd1011 commit 123202744955e62470174fc3ba666a4d98062ea6 commit 175ac6ec6bd8db6b7e08fed8fd189bd492015b28 commit dd26e018aaa408faaf16168cbc7e83c2b159ae63 commit a5f67c939eb2d3841c110c5355bf2226e1850828 commit 85a774d9ada4eb9e83044cefecf2712a2d7171bf commit 0e2a82a316825ba1d0bf35703ceddd4840e59bca commit bbe04dec5c52a075175a627d510140d386a71f98 commit 2351b7d4e3fd636f8ce0bb9554645dff2dbe86ce commit ded331a0710db8e92f3efd1c8040c0c52997c9b5 commit 64cf26f04ad05ac7b4fc7d3339d893f21a06cab1 commit e105b64a364adb0fd0b780050441eb05468fee33 commit 0771c805918c56b335c8f726e147b19c4f78565b commit 726be40607264b180a2b336c81e1dcff941de618 commit f864df76ff1021b21776a7df029c0da884794c28 commit 4853cbcd94bdd654e94aa40ae718efcf5b6ae57a commit 0f7ef0b99da15b28fad78da788e55adc642283c8 commit a60831ea3ab2498d16f625c74b9e782383614cdc commit 613aa3ea74ae012d4ff7a6e6ed6d288b6212e4f1 commit 48733b224fa7ba32de9e9a1a8ddc8eedcd603919 commit addaac0cf75dbccf5c33a5c03d6b22a6bbdf9952 commit 4046afcebfc3c8c0dd5666c2671b2c192b344f78 commit c40bdfb2ffa4cf16b818fd6c77856e6d976f52ff commit 43a80bd511aa6077a79768335211f71760ee063f commit f6dcaf0c07480f8b7e7568e3bf3c4b776026edfc commit 32f0e1a3307f1372824dcf28b90fdab5aa11b54f commit 2cb6577a303425090f3b5f4c40096d45a9048875 commit 2c113b999c20a6083a9d65f0e2d2537ed818b395 commit 4ac955baa9330742b1a49990d830963f91bfa020 commit cace4bff750ff4f55b16c3aa90aa9376d7488929 commit 34f3a4a98bd388ad6298c42dc9b00c72d3398330 commit 6ff7fddbd12064dc9de03e0c1ad03e13f6ba7af8 commit 4a74c38cd67b3e74a1dacc76c7ac5c276bfdeab5 commit 28fe416466f2f09b47a9c5e81fa1ac140512f3d5 commit 4fe3819443a13f8ecf11f53559ada5711dd8d4b1 commit 2b36afc694bb3eba5a065c34fa0d735d623ae66f commit 929bb8e200412da36aca4b61209ec26283f9c184 commit 9be9bf4e3a5efc2991375e22ec9956dc654652ff commit ba6f8c135af02f8a38fb9856cfce6351a90f1ea4 commit c1e003d3ff6973aa896eef4e6a6d432e6afbff60 commit 33c3365ec690c3857ecd579eef75e36a746a8122 commit 240e6d25a0a8ab98c042e37b2fd3c1f2cbf3e561 commit 6f072a84550d93342d7f7282e661e3834a801159 commit ff7ac85282a12c4f4968fa810186fda32b10dea7 commit 47d9c6faa79e85a6e196e02cc74c4775d39546a0 commit 96db14432d979532be4cb6d5d52a127317e68b3f commit 99b03ca651f1c409d296d6c6e9440d9b005c722f commit 0ef42fb749b17f7e49adef047ece5bebac5d6795 commit 2e21de9028270a72d2b7dfbd0fe46a6beace1f01 commit bd56c63ca1d953f035c1a06a0431c106ffada849 commit 43d5ac7d07023cd133b978de473b3400edad941f commit 5719d4fee1caed83979b21ad4cf34d46abf97514 commit 1b9e8b1feb33d75bf942a174719a861815fa7279 commit 0215466a8585b6d9c132f9d9e46da3966a84eabb commit 70487a99eeff5d0aa8104bd4eb236f318395658f commit 741fe8a4d23de0ee93a4a4e1f54e48161b98cdb4 commit cd9a0d026baa10c75688908556b3af218bc4ddad commit 4658b25d38831be8b0d1a9eebc05b067cecd559d commit 4308acff0f3f4fd523e69face1db33f8de10a5b1 commit 47e62dbd8dd30af66e8fdf1930a326971609dd32 commit b477143566d5b16c8b92ffec2cb3a896fe818509 commit 4866b0bfea40cddb7275c88aeb95b47dac3d2a35 commit b4acd97bf827122bd333a4d043c275a4eb9db905 commit fa4a427d84f9b797970a3d5139d7645403e4e989 commit 7e31a8585b79a4d67e7fefdb6428054d18ddd339 commit e0f943b4f9a366ac7f24fa3f0e52141178d4f1b5 commit 17252701ecb5ef3bdfb912aae5a011f93978781a commit 91e16017b6d36c2b7358654ccce9f69b2448df20 commit 85dfc1d692c9434c37842e610be37cd4ae4e0081 commit 948e7ce01413b71395723aaf846015062aea3a43 commit 03f2abb07e54b3e0da54c52a656d9765b7e141c5 commit 326db0dc00e57432b689349b4da3e86c90d5d61a commit a342655865b2f14d1fbf346356d3b3360e63e872 commit bdd8b6c98239cad3a976d6f197afc2c794d3cef8 commit b25db8c782ad7ae80d4cea2a09c222f4f8980bb9 commit 939d8e9c87e704fd5437e2c8b80929591fe540eb commit 7aa6d5fe6cdb4347c427caaba38f11cc88a8ed4d commit 2406846ec497af081d7e7a7da0e9938b8136fe16 commit 6e94d53962f7bc972582dbfb46b31f3a6e328a47 commit 2aa9f833dd08594584ce2add23a3cd11f0d623bf commit 0013f5f5c05da6321539df6fad75de150f430909 commit 88438668c9e0e32220b4605610bd888b4e50fe80 commit 938db276594697efab602c66cd92c48cbc60a314 commit 877691b987a089938d67de13d886932ef2f21b22 commit 6ea966fca0841174b6bafca58e56f9c11d3af157 commit 006ea1b5822f9019bd722ffc6242bc0880879e3d commit 55dc449a7c60d3df5a8f0b71bbae9d5173c864f5 commit a2cce09c349e2d9847ee7145986ca27d99bf0f61 commit d0a0b6cd8cf9f39d99d7d5c4c080499d17f43c33 commit 0b665d4af35837f0a0ae63135b84a3c187c1db3b commit 9758ff2fa240173e9a45613b07774b7a78b7653e commit 9f952378fcb90d202cbdf359aaeaad9429edbd0a commit f296a0bcc9611ba96ca3abb3332e21ee600d153f commit 5c1e6fa49e8d8dbdd8bb457492b2bc52718df244 commit 69879b3083cc5022585d1826c663c330efae4e63 commit 0ff76b5334fa6f44d1a1a6b3bd39f5667b092654 commit 3c27abee3fc3d59fb978e3291b60eaaddbcbf2e6 commit d999bc81ac3872a8543c4afbce30e0d46b4bb9e1 commit 892deb48269c65376f3eeb5b4c032ff2c2979bd7 commit 109a357f287c3b14a43216104299aafc1fa23cbc commit 799dce6fbd5fda21d461b56b8c6ca85214e20076 commit 0cd7f378b0927e10774981eb09e388258ca925e0 commit eacef9fd61dcf5eac8b775bb1814042e78a5c42d commit 8b70b5fee012172659717024adb6f17726d76290 commit 4e07d71c0d667ebf1e36be90b962081d2b778909 commit bc701a28c74e78d7b5aa2b8628cb3608d4785d14 commit 50ca8cc7c0fdd9ab16b8b66ffb301fface101fac commit 58fa0d90eddeda37b32597eda139e888ebe5af04 commit 030def2cc91f5185c697f29d3c485c63559cff1d commit c0f0dab8ba4858863579170dcffb23c1002879b7 commit 62e94f92e3977dbe67a6974ba7e5aa60c9a5e687 commit c14adcbd1a9648dc9d16dfd12c1e9bc0c14ef6aa commit 1a9c4db4caf0a504e35f0cfd97e54e07ebc85044 commit 93b76b13cfc13bf02d91aa544efbb067e3382141 commit 8c2699fad60e3f3e55481b49a38d46f49ebba77d commit c68c74f5b91ba56dab3ca9a219462e08c9b3cc9a commit 2cbc876daa715d50543e1d4d73f4e692860a51e5 commit f54ffa12168dc52f0d48d9fe32eacbbecd2c2c1d commit ad5c99e02047f33bf7043543545e3b17f37c8d5c commit e4e80625300390d8846b72d7076fd1a75af6ea60 commit 0b4d1f0e936e5c6beaebc32785465228ae0fdd16 commit 2abb6195512d14f0da45a27ca1be7cfca6658c5f commit 576c4ef510d7ad7f43730ba799441b0f24a29b1d commit fd06ccf15987dd94dfb902f328ef06c010bc7972 commit 9606ca2ea190e439f90426e2a740a48c800a0aab commit 57b427a705ce98308328fc4fa93524a9a8a3bf84 commit 0dd8674f2fc926b8a2404570c3cd0129a75dc70b commit fb3965f9ae28b83290e5b5431a77aace66071ca1 commit 2c3849baf2908d646b7466be52989835341551c4 commit be7612fd6665f5ef3f6c89e78bb4ec4dbff6cd16 commit d8be1357edc891b4259e3ecc1b831452361379ac commit 1c40d40f6835cdee99c6966b48b98d0e38c35f47 commit 1193081710b361ddb4b81d3e2f929b6d6e1f89e1 commit 33654ef470a97f9fcb19abc7e7ef660ea37e3aed commit 63cf4cad7301edafeb0650f32154006f1b5e6e78 commit c2ea703dcafccf18d7d77d8b68fb08c2d9842b7a commit 91f75eb481cfaee5c4ed8fb5214bf2fbfa04bd7b commit b06103b5325364e0b9944024db41b400b9028df9 commit 6cb12fbda1c2e2fcb6d3adfe01f18eef6812e278 commit 4817c37d71b554fe46ea494f6b2c8562b26640bf commit 040bf2a9446f6ba267225d34dc4a9b14d11e5092 commit c65fe9cbbfd61dbc12868f9ed4940c80fcb249e8 commit cf6299b6101903c31bddb0065804b2121ed510c7 commit b18ff6925d84492d845debe2dbb81122b1d141fa commit 0da6f6e5872e8c1e794bc3a705ea27a156b6a8e4 commit 92f153bb5a4bff4df8c67dcec5a9de1dde3b300b commit 4aa325ae541378166b3a84186bc1157a1d524f8b commit 4a0165f0603f333c6b36a420b4e348b67ddf6fc8 commit d764fb2af6cd92eee080978856f24b0cc6d555ad commit f4409ee84658ff95d92daace9f094fa6bf80b0e3 commit f6b80c04aabb4fdd18ed8fcbaa5efef64e5d0b36 commit dec63443380cf2ce6bc41258159cda4165fa4279 commit b6485bed40d7859735bdbfedbd55dcc8366a88a7 commit fbcdbfde87509d523132b59f661a355c731139d0 commit 4da8b63944a4f4482303c9ad6efb18aa547d4630 commit 88eabcb8e6965b38331618f60567dfe92ad3c42c commit 11544d77e3974924c5a9c8a8320b996a3e9b2f8b commit 2b534e90a1e31c7fc9536b512b72274cc3575f4c commit 011e8c3239ed36b4720113cafc5539d22cbb76cd commit 87172e89dcc7b09b32a4eb5f21e35d310e3cb024 commit fd5256cbe19609bfff0cc51e9d999a46020719da commit 6c92fe5fa5a1f24e50296de9d24d36a1b605b208 commit 4ad31fa15ba472866d538b3cee05708a9d8e8197 commit de0af8a65ea3c56e85517d23316679eacddb7a45 commit 67416bf85345b6990fe2adc42ab082bfefc578bd commit f89c6bf73420c597769033dcc811ce691597ccf3 commit b6fd6e0f5eb8c6d10575d08a2c6df8ed83877e07 commit bf252ce1fa8ac68baee3f8525fc6453d278b619d commit fddb024537f121995957d816fcf8e2e230451db2 commit 21bf3e6f1454b8f472ff7e6cbc95931dcaf7eb47 commit 2d0158497a9b9a80a92b02e55513dee4599eec96 commit e56e9ad0370a29a4bee3a99fd517d8583804fd74 commit 3db817fce43ec3d423b969911151dd849f4d7351 commit 0d988e5de7aa5ee8865cbc664180ae67918a6b19 commit c856f16c33e6ed4bcfe3f0e51afeb9b08ac48f0d commit 458c79a86ae1081636942ba3c42bf0424f3c6970 commit 2ca6c483ed2d73ff263457c166527abdb82bba06 commit 47547c56739a4dbf1e96a170f5b16811e04c5024 commit aca05d338b3226255fdba56771378a2dc4c9caa5 commit 19afe66ddb8f18c7ad5cd07322c6d8d2a2905ce8 commit ef30f441f6ac12875c9901e8ea1b9cfae6f0e8bf commit f3fac9481bc7b9518df18f33b71a6109a245ccc6 commit 3d38a5839ea8afe58fa59abc0a3453f44cae81e8 commit 6dd8931b1ceebbb92e4e0a9d12a236d82a072ea4 commit 4c3adc0b846ba22a8a92764495950b7c2482153b commit 45e3d1db7d3ca013f1439248a268b0cdada5d5a3 commit fec8c5244fc07b1f6a3249a8714489f594ff5c4f commit 11c9cc95f818f0f187e9b579a7f136f532b42445 commit 937ed9c8660a27ac4d36e8339c970a2ae7903c4d commit 0726ed3065eeb910f9cea0c933bc021a848e00b3 commit 4a700546ec9b8fafedf569f363f905b9ec7f5ee8 commit 6dc8265f9803ccb7e5da804e01601f0c14f270e0 commit f28cad86ada1a7345d7bbd379bef5a8babfa791b commit 0637d41786a3a9551f33ad8e15bdb40416362028 commit cb6846fbb83b574c85c2a80211b402a6347b60b1 commit 5b0ce2d41b70bba49b91b10c55984714490354ed commit 216a9873198bdc5c670a9f71d58fafd30227c9c8 commit f38b0d48cae88395a05e49cb885fa6ce657e1cc9 commit e53d9665ab003df0ece8f869fcd3c2bbbecf7190 commit eac4c54bf7f17fb4681b85e5fe383b74d6261a2b commit 771ced73fccd0ac19bb956eaacce3669cfccc805 commit 580013b2cef8babc204b7b78ff093140e112b194 commit 79d6b9351f086e0f914a26915d96ab52286ec46c commit 46a74381e5ea54dc78ad7c29659dad0b1eb66b0d commit 214993e106ea84a82e2c644bff3dbbe601b11e04 commit 19e43f1276b38716ad558c2018535e475cb9f3cf commit f9535d28ac93c3cc326f7215fccd0abe1d3a6083 commit 4c2602ba8d74c35d550ed3d518809c697de08d88 commit 03ee5956781b2245b1c77334ecdea6386fd3bfba commit 8ee262ba79a19a4dba9949397b1cf5761679670c commit 6ef295e34297433c78ea02dfcf1c649a769050bb commit 7e740ae6350407d68d2069ce79a6344bf1b58fe1 commit 8d0749b4f83bf4768ceae45ee6a79e6e7eddfc2a commit 75b950ef6166e4ef52e43e7ec80985c5705f7e81 commit 69e630016ef4e4a1745310c446f204dc6243e907 commit b54ce6c92cf57ff276e4539750c140c9c96416f3 commit 63ad5371cd1e379519395c49a4b6a652c36c98e5 commit 6638391b9f78abaa41f05fe4e0d2ee6f6390c398 commit 62d5f9f7110ad374db67ab4820f4ff2d916c3cdb commit 1dd8b1b987fad93b647cb0fa5289d69b4c889dc2 commit ffb378fb3069520da3c2be3c1269250ec9c028ab commit ec6aae9711a8e5fca24a537b9ae952e38a1ebb71 commit 575e55ee4fbc2c641a29b0054b3473e9fa81ae76 commit 4cc9f86f851847e5ebfb56212d81f1a30b9d392b commit 7ff61cdcc8609a19f3eddf3fffc09a05ad6d6865 commit 5fea167ec0a134cb61fde848a3c344f77f0c13a5 commit 83293f7f3d15fc56e86bd5067a2c88b6b233ac3a commit 8b5da5a458c95ad49571a6a6285800bf13409616 commit 978ffac878fd64039f95798b15b430032d2d89d5 commit abfaf0eee97925905e742aa3b0b72e04a918fa9e commit 9b7a4de9f126d8c8d59052088213990159417d5b commit ef3b4137aa09a9ad38f42d4de087cedf1b98c521 commit b121862c787c2a84ed5f42597aeeff5c1ead8f5b commit 4eaf21b752891fffab3d51ac96e81194cda32d1c commit 2096b74b1da5ca418827b54ac4904493bd9de89c commit 15084a8e1658ddaea42c7d3a72ccbcec2b85f54c commit dc5d4aff2e99c312df8abbe1ee9a731d2913bc1b commit 6f4cb84ae0f6d56d0b5071a0057df9c7cfb82ce1 commit 5eb877b282fecc8b8a6ac6d4ce0d5057f9d3bad0 commit 6dc69d3d0d18d587ab9d809fe060ba4417cf0279 commit 54329e6f7beea6af56c1230da293acc97d6a6ee7 commit f1dcda0f79548c04f585108e2e165cb4fec951e8 commit 91c64a4f1cb01cf0ec50f0372ff8ca9d3022b7d0 commit d72d69abfdb6e0375981cfdda8eb45143f12c77d commit 016017a195b86d9761e91cb052438bf71207a12f commit 8f18a987ca761583a09d8e41f9938f61480deca3 commit ad783ff5a20f851c6d9bca03d12d44f98f494af7 commit bd672b7559efcd3ae3faf0b0e3846e30983e8ace commit 5d474cc501b90b82c182b5d00439eb6790a82e21 commit 71e4a7029045e3904e0e9242b4a7cd84d47b8fe5 commit 820e690e4eb88eaee68bf0b2d89fa9597bc00a45 commit 4efdddbce7c1329f00c458e85dcaf105aebdc0ed commit 4175c32be5ef0ff254d6931931ec412e8029c32a commit 0ffb1fd1582a78649f22253d81515997fff88bc4 commit e8309d50e97851ff135c4e33325d37b032666b94 commit 3993a799fc971bc9b918bd969aa55864447b5dde commit d82ce3cd30aa28db3e94ffc36ebf0af2ff12801d commit c4849f88164b13dd141885e28210f599741b304b commit d9679d0013a66849f23057978f92e76b255c50aa commit 59d41458f143b7a20997b1e78b5c15d9d3e998c3 commit ef3ac01564067a4337bb798b8eddc6ea7b78fd10 commit e26602be4869c74dd8a0f66f718b8a0ce120edb4 commit 57d17378a4a042401b0c2fe211e5a0e3a276cb3d commit 3bf6a9e36e441714928d73a5adbc59562eb7ef19 commit 520d9cd267618181901272a79db6154c0b83309c commit 9a458402fb69bda886aa6cbe067311b6e3d9c52a commit 4722f463896cc0ef1a6f1c3cb2e171e949831249 commit d3cbc6e323c9299d10c8d2e4127c77c7d05d07b1 commit 410482b51afecddb8fc29324d1b11945dfa0b682 commit ccf34586758cf00c0934e48f6ef6d688f01d7b19 commit c2c94b3b187dc92b2002809f489e0f24a41e91bc commit e5a1fd997cc2deda1b08d5faae04625de0440a1e commit 2dba5eb1c73b6ba2988ced07250edeac0f8cbf5a commit 5ec1cebd59300ddd26dbaa96c17c508764eef911 commit 7938d61591d33394a21bdd7797a245b65428f44c commit 5f0c749158158f89eba7647bdc4e8096979de981 commit ac46d93235074a6c5d280d35771c23fd8620e7d9 commit 7e38ac562b820915faa33a5077ca9bccf42d39d2 commit 9e5a14bce2402e84251a10269df0235cd7ce9234 commit dc919d670c6fd1ac81ebf31625cd19579f7b3d4c commit 98fdcacb45f7cd2092151d6af2e60152811eb79c commit ebc77bcc6e1660a011483c035d53c461c8dcc4f5 commit 72a8d87b87270bff0c0b2fed4d59c48d0dd840d7 commit 25f1488bdbba63415239ff301fe61a8546140d9f commit 2a807341ed1074ab83638f2fab08dffaa373f6b8 commit 48ee4835b73c48590d05a54730dc8037ebd39d3b commit 76cea3d95513fe40000d06a3719c4bb6b53275e2 commit 7fde14d705985dd933a3d916d39daa72b1668098 commit a0f90c8815706981c483a652a6aefca51a5e191c commit 43f2517955875be5d96b641fba33d73097fe3cd9 commit 23ecd4c1354226fd6ac9c5f8881666f76b9d6cbe commit 2fd0e5fb4ba37dff344b7bed5176212c2d6a7063 commit db5aa1497d02e7770e40dd0d1bfcb4ea0b0d3906 commit 82b550fa99f2c73636ca3f84900117c3c3272ef7 commit 8172f41859cf7516e73eb957297e6752b3073119 commit 5ae13c305ef8cb54efc4f0ba4565709b9f320fed commit 90a3d22ff02b196d5884e111f39271a1d4ee8e3e commit b3f74938d65665f892d1b7807c51140f68dc911c commit 3c6f13ad723e7206f03bb2752b01d18202b7fc9d commit 1b777d4d9e383d2744fc9b3a09af6ec1893c8b1a commit 3ec5586b4699cfb75cdfa09425e11d121db40773 commit a6ed2035878e5ad2e43ed175d8812ac9399d6c40 commit 92c4cfaee6872038563c5b6f2e8e613f9d84d47d commit 7d73c602154df56802a9e75ac212505fc1e9a2b6 commit 9a8406ba1a9a2965c27e0db1d7753471d12ee9ff commit f52a2b8badbd24faf73a13c9c07fdb9d07352944 commit 04ef860469fda6a646dc841190d05b31fae68e8c commit bca52455a3c07922ee976714b00563a13a29ab15 commit 2d8ae25d233767171942a9fba5fd8f4a620996be commit f5fa54f45ab41cbb1f99b1208f49554132ffb207 commit 49a6ebb95d04bdaa5d57313a380c44249cf02100 commit 30fbce374745a9c6af93c775a5ac49a97f822fda commit e55a3aea418269266d84f426b3bd70794d3389c8 commit e8ae38720e1a685fd98cfa5ae118c9d07b45ca79 commit 8ea2c5187d7b4901a70374415e772f1db422fb74 commit 9ca3d3cd0857523c95ab8cdbb6cfe47b8f90e309 commit 9ccdcc73d37cf0f1d4f97712f6b38af8806ac064 commit 6df4432a5eca101b5fd80fbee41d309f3d67928d commit eb48d42198792f1330bbb3e82ac725d43c13fe02 commit ee59792c97176f12c1da31f29fc4c2aab187f06e commit 3526b607b02397cdb6d459594e4f1d63133d6655 commit 9d7516b16f2a7ecbddd7940e582c78fcdc9136ef commit 8fd5a26e43859547790a7995494c952b708ab3b5 commit 85bb289215cf37e05e9581b39b114db1293f9ecd commit 4e6f55120c7eccf6f9323bb681632e23cbcb3f3c commit 200e8e3e43c4da4bd5ca83722523754ddb14ca02 commit 03ad3093c7c069d6ab4403730009ebafeea9ee37 commit a072312f43c33ea02ad88bff3375f650684a6f24 commit 328e34a5ad227399391891d454043e5d73e598d2 commit 60fdf98a774eee244a4e00c34a9e7729b61d0f44 commit ad787771b43602d64e02b5963f4192232b46366b commit a8b1e8636a3252daa729762b2e3cc9015cc91a5c commit 6e7545ddb13416fd200e0b91c0acfd0404e2e27b commit df2bb4dc285e60665930889e6f8c5bb38b90249a commit 78306438355353e677a5ffcf5e9351604b694159 commit 95e875bdb1862db178bf24fb703387ec3aa3a34a commit 59f39bfa6553d598cb22f694d45e89547f420d85 commit 080eba785fe10ba21c40bbdd80f2bd5331a28be6 commit aa4d01a4734bcb1cc9190807cdbcd5af1495910b commit 698bef8ff5d2edea5d1c9d6e5adf1bfed1e8a106 commit 8d9d2a723d64b650f2e6423024ccb4a33f0cdc40 commit 0bdc0a0699929c814a8aecd55d2accb8c11beae2 commit ea958422291de248b9e2eaaeea36004e84b64043 commit 26ace8793aaefbcd0d6bb664573ded35c69cd6ef commit 0136f5844b006e2286f873457c3fcba8c45a3735 commit f8f4e2a518347063179def4e64580b2d28233d03 commit 9c4f59ea3f865693150edf0c91d1cc6b451360dd commit 364438fd629f7611a84c8e6d7de91659300f1502 commit 439cf34c8e0a8a33d8c15a31be1b7423426bc765 commit babb1fc3234320bd17930e02bad9d1a83f5e6859 commit 5666b610194705587807a1078753eadc007b9d79 commit 3f33364836aacc28cd430d22cf22379e3b5ecd77 commit a40ee54e9a0958406469d46def03eec62aea0b69 commit afc189df6bcc6be65961deb54e15ec60e7f85337 commit ec663bca9128f13eada25cd0446e7fcb5fcdc088 commit 28adef861233c6fce47372ebd2070b55eaa8e899 commit 1432108d00e42ffa383240bcac8d58f89ae19104 commit f626dd0ff05043e5a7154770cc7cda66acee33a3 commit e3f3824874da78db5775a5cb9c0970cd1c6978bc commit 4d22336f903930eb94588b939c310743a3640276 commit f762ce78897d734a08f52e39a353359b7d417578 commit ecbd4912a693b862e25cba0a6990a8c95b00721e commit 7294863a6f01248d72b61d38478978d638641bee commit 3743e7f6fcb938b7d8b7967e6a9442805e269b3d commit 1e2be869c8a7247a7253ef4f461f85e2f5931b95 commit 97c61e0b7c596cc5f683da30289f92c2e1b4b799 commit e2b993302f40c4eb714ecf896dd9e1c5be7d4cd7 commit c1a66c3bc425ff93774fb2f6eefa67b83170dd7e commit 753a64c7799034a413083ad03b9fe51dfcad9fb2 commit 7c17b3d37f1fa1eb0498cdf63d43ce37b23eaae5 commit ecf8a99f4807c17fa310a83067a95964cedd9ac1 commit 1b279f6ad467535c3b8a66b4edefaca2cdd5bdc3 commit 08783aa7693f55619859f4f63f384abf17cb58c5 commit 26d3474348293dc752c55fe6d41282199f73714c commit 62929726ef0ec72cbbe9440c5d125d4278b99894 commit f1ef17011c765495c876fa75435e59eecfdc1ee4 commit c9585249c245e23580a2c3edbc8f14d9d7173f12 commit 8fdb19679722a02fe21642d39710c701d2ed567a commit 804f468853179b9b58af05c153c411931aa5b310 commit 3755d35ee1d2454b20b8a1e20d790e56201678a4 commit 40ce1121c1d76daf9048a86e36c83e469281b9fd commit fc1b6ef7bfb3d1d4df868b1c3e0480cacda6cd81 commit a8253684eb4b30abd3faf055bc475c23da748dc6 commit 3c3384050d68570f9de0fec9e58824decfefba7a Signed-off-by: Karol Herbst <kherbst@redhat.com>
2022-05-23 17:15:52 +00:00
if (atomic_read(&array->num_pending) > 0)
return false;
dma_fence_array_clear_pending_error(array);
return true;
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
}
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
static void dma_fence_array_release(struct dma_fence *fence)
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
{
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
struct dma_fence_array *array = to_dma_fence_array(fence);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
unsigned i;
for (i = 0; i < array->num_fences; ++i)
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
dma_fence_put(array->fences[i]);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
kfree(array->fences);
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
dma_fence_free(fence);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
}
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
const struct dma_fence_ops dma_fence_array_ops = {
.get_driver_name = dma_fence_array_get_driver_name,
.get_timeline_name = dma_fence_array_get_timeline_name,
.enable_signaling = dma_fence_array_enable_signaling,
.signaled = dma_fence_array_signaled,
.release = dma_fence_array_release,
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
};
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
EXPORT_SYMBOL(dma_fence_array_ops);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
/**
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
* dma_fence_array_create - Create a custom fence array
* @num_fences: [in] number of fences to add in the array
* @fences: [in] array containing the fences
* @context: [in] fence context to use
* @seqno: [in] sequence number to use
* @signal_on_any: [in] signal on any fence in the array
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
*
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
* Allocate a dma_fence_array object and initialize the base fence with
* dma_fence_init().
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
* In case of error it returns NULL.
*
* The caller should allocate the fences array with num_fences size
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
* and fill it with the fences it wants to add to the object. Ownership of this
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
* array is taken and dma_fence_put() is used on each fence on release.
*
* If @signal_on_any is true the fence array signals if any fence in the array
* signals, otherwise it signals when all fences in the array signal.
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
*/
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
struct dma_fence_array *dma_fence_array_create(int num_fences,
struct dma_fence **fences,
u64 context, unsigned seqno,
bool signal_on_any)
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
{
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
struct dma_fence_array *array;
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
size_t size = sizeof(*array);
Merge DRM changes from upstream v5.17..v5.18 This commit was generated using: rhdrm-merge-drm v5.18 2043115 Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2043115 Conflicts: drivers/gpu/drm/drm_cache.c drivers/gpu/drm/drm_gem.c Conflict resolution: diff --cc drivers/gpu/drm/Makefile index 301a44dc18e3,308c302c58e9..c2ef5f9fce54 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@@ -134,4 -132,9 +132,5 @@@ obj-$(CONFIG_DRM_TIDSS) += tidss obj-y += xlnx/ obj-y += gud/ obj-$(CONFIG_DRM_HYPERV) += hyperv/ + obj-y += solomon/ obj-$(CONFIG_DRM_SPRD) += sprd/ - -# Enable shims for the RHEL DRM backport -subdir-ccflags-y += -DRH_DRM_BACKPORT -drm-y += drm_backport.o Commit list: commit cce936f4fff736927ffd53a61d7b2c6a1064e0c5 commit a908db6d98782e8d9a8d545dcc74937db5bfac04 commit ae361eb07e9b498bc224db81113118fd28e35f6e commit c2a9682d2214e834b493c454e38809e571bb3045 commit b8ca477e51318d28f7514abfb5a369e11848a8cf commit e74c6aa955caedd06b5ade58e31e33338e4efde6 commit 637088a21e204b129a03dbd59bc0cd80d0292651 commit d0c0cf22d7071e9ba8d30be91723e1d997a07970 commit 49d535d64d52945e2c874f380705675e20a02b6a commit 11343099d5ae6c7411da1425b6b162c89fb5bf10 commit 60c9ecd705be3a28f79d70ea21c3939db668bf46 commit a36e7dc0af1cc7e5eaa89136c35a5305fd693731 commit 007354597d5c12a8d44a34c66a2e1a089bc7d3d8 commit be5b6985fbbe6ba9580351b3c9168c84e51bee5c commit b96a1d8c5189452d80551f2c38ef50c533c19669 commit 3edcd504077c02c9e6e7b687a43849eacbb8088d commit 9543e3c0511da64a77b1af3ab1f7199c39226e1b commit f21e5fa191be05616e3250723c5c4cadc9baf84a commit 405d5382ba083e6e54df354909b1583f1e3cb0db commit 70704fbf67ddc07ffc81073a3af1f7b2171697eb commit 943e6a8beeac1b676265f2dd81a69d7bede5e41d commit 7e28d0b26759846485978ada860ef4a427e06c8f commit 5995aef006698bb639547a439f47492de5c37f05 commit 5664e3c907e20523cda622268716867e77648d0c commit 6844a28885183a5a2af92a8d315a59f7a0e668b9 commit 825ca9ed1c9f5516b30292bb1c7ab648c2a01b92 commit 980f42e7d57464af190d05b9cc0bc21846734f48 commit 798c5daf3cddff3f39c5542a50a2dbd83879b05d commit 249af7242af72a826dbe93f7058237eee4fac1d6 commit a88afcfa258672601eda5966439d2fc310a34cb7 commit c3c2ac4c77ee2191ae2f1e8d140a59e852104e3b commit cbffbac9c14220b8716b0a9c29d72243f6b14ef3 commit 62eeb9ae1364cd96991ccc6e3c5c69d66b8c64df commit f7747be1410321de8a92e340c5ca6c18a59770e9 commit e35d8762b04f89f9f5a188d0c440d3a2c1d010ed commit 0b464ca3e0dd3cec65f28bc6d396d82f19080f69 commit 6edf615618b8259f16eeb1df98f0ba0d2312c22e commit 5f4f958a0d9dfd7a569c56e76840e39b0c434378 commit 3b26a2916844cf2680de10206e193e1d13f0eb88 commit 50d76e3d3ec0c18dbe2c801af676f7e7cbedbff0 commit 7c442e76c06cb1bef16a6c523487438175584eea commit 7020449b8f5ac0f7444a584645edec02f7168f1a commit f5f05ddc37e0445567e4a2369b73ecf9ee2e187d commit 816e3be74f16f3064e74acb3e6ed69e27f14231b commit 80dfdeb75028084f42a81a4151a986c56aeec1c1 commit 9294914dd5507eca56566c470c56327f46dfd4fa commit 96211b7c56b109a52768e6cc5e23a1f79316eca0 commit b146e343a9e05605b491b1bf4a2b62a39d5638d8 commit 848915c35e22d36614f2b0aeca6ebf7361e8e204 commit 204129a211fc486164c25e6082941e4fe3ba889d commit 5c24c9d227e9bbcba509752a32b3da5faa149aec commit 59dc4632e35becca1186dbab83ac7cf8603afaa9 commit 17190a3492bb20ce1cc695fdadc7e4f7ad5b44ff commit cdeea858d8df9891ed75415f377b3564f899a659 commit d14f0c205302648df29c494a1a81ec3d897a2552 commit 91d8531393be96b4a088290cc67233b2e6ab072f commit 506d9d7414cfbdce02b7126fc8644f04ef234680 commit 59a39fcc21c56845e74bf60c1177925bb0255de4 commit 5313fb2c779f74bc5083e9d3738d9b2c2ebe0aa4 commit 814d5c51f8966895bb20b51c886bd3961f76f3f4 commit 5edaa2b9748979b08fcdb2f65781aac39e6ae011 commit df2d385cb4132e945d5bc17d387d0fb6f5d4d66e commit 9354417750e51c3d120cb6040b1b69f70d9ef43f commit ffa3fe080c77630f87436a9410475fed1e684612 commit 191be00229ef61f9ca0cfa39a09dc71eaf90e78d commit cd1637c7e48043503f8ca6d441568e3889998965 commit 607a264ea7016b0f811f82c33094a3c2eda5968c commit 3dbc84a595d17f64f14fcea00120d31e33e98880 commit 658a0c632625e1db51837ff754fe18a6a7f2ccf8 commit f3cb4a2de5410147b53e53416a3af0ffe26b5f4e commit 903e0387270eef14a711c0feb23b7bf62d2480df commit ab4911b7d411ab2ef3b38322178b9138e156c393 commit 30598d925d466c53c4c218a58f80e043cfe9b085 commit 0af2e827b6acfd22b7794c148943a3ddfe5fbb65 commit 2564c35df5b81a88efce965bbfdcf32c1a1bc834 commit 23d639d7b6df487d59ed23b0c9c04dfd3f909fc3 commit 2ef97818d3aae3c89a6cb1e6b8cd204156434aae commit db583eea5a820ab4afce6420aae61be9be55d05c commit 386e75a41478d8d70889f0d1856e782d610353c0 commit 7e470f103d7579836a536c15862b70118379f7f4 commit b4435717f53b776b770e7a025fd84688e53dcd5f commit a9e4fb51425f680f191bb65c2778cea31bf058c7 commit e1a4bbb6e837d4f4605dffa9eccce722fc59b9cc commit e8c1f36157ce0bf8c150059c3f9f573c13a186df commit 583998c5e8cb3e7a151dca22303b68cbe65c64b5 commit 39a2bd34c933b00f7c7ada923c212b3ff826fb5d commit ebf3c361f43b1c1fd254be5a6d12bd37b922e6b7 commit 2f6b90da919208621725d1703c0391f63724fa62 commit 950505cabe517ad40759cae6f88f33f0bdfbb7c8 commit 60dc43d1190db1bf80c696ab4561ed53f8f42f33 commit 55a9c00021e2393393a26e0833fd66e73d630117 commit f199f71f20916ddaf2bfc4dceea33c776d414428 commit 53c8283ba9b46559c12fb9fd679cbaf72424649e commit 77b6f79df66ed2919dedb834edea630f40079f12 commit afd088ac05f120d22e06f8404b2672f5841d0da0 commit e9f9bcd598e2b6f3cfa617f8e38f83a59738d19c commit cd5d2fdb045fb31a152cbb257e10da78fa4f06ac commit e0d47fcff1f4df458b9c8824a5204adcbf624ae7 commit 3e5cbecb9aa88f00016b61200d4126f727fc71e6 commit ab076d8d79e1e5eb3960e0a489f7a11d729c03bd commit 2b25a93bf07c6b68dd9e2ee427e228cb961f7961 commit 202b1f4c1234b34c15e51acc9c43e613f509f587 commit aa1d6068a460dcb21e69f6d65fa7d3ab483d547a commit d0864ee4f81fd8c782fbb382f80d6c9c531f2967 commit 24ce4d6d2ca626a733f70b578c4a298b200a69de commit 43571e15c057f69734d0ee3be45fdf9e4adee614 commit 919606f5e7d8cfbdef47ab7e24bf37cf86dd1512 commit 3e1f4c491559998615cc8ee287c673f0f7e66534 commit c41aadd26496db9c21deb612445801f3e44ee8b2 commit 5512445c9b64a2fd78f37c41796745d72c02e9a3 commit 1b277c892940af1d06c2433f3f3a39d4bd146c89 commit 4642077775a65566c0d25e63bf918fb5e5235163 commit ca1777797ad84cba3a72b73f74bd80092a7aa220 commit 0b782e669298e30853e235b963fdebfdedf45383 commit b17639c7f7fc1fbb23b761c38ba3233cd5d082d9 commit 38bd13a0b151093f5f26c95ee106659008896995 commit 3f8bd465a6f083a4112d82c18f4a85c9052d2132 commit e592dc320559ebc8166c1dce609faa7e4f3d6da1 commit 9d31993451f6bb4059a9b9eec4856b2225e36df0 commit 0f5d32617246810d00dae08c51069873a77b60d1 commit 7b1534188c25948f4ce56dc4af9d8e9234e97592 commit cd6e4c2fbb004f06d9c552761c171fed82ab5225 commit 2616be2eac4b1c361ece55dfd8f942dcecb25de2 commit 6650ebcbea1314bf91bf161802ecaddbb72651b5 commit 5ec7baef52c367cdbda964aa662f7135c25bab1f commit 5ff59dddacd4738edcbd01847d9df7682348cf86 commit 93e97b05d5816ec96bf209a50023cdf9fa750a55 commit 1500296576464dd4f8f7ba409069591648f4e98c commit 3a5d604f90f90a09e35ccfdeeedbadfd06b606db commit 6a8cf6349c7cae12f072889991a2aa0a1ba0bd32 commit de05abe6b9d0fe08f65d744f7f75a4cba4df27ad commit 8c2d34eb53b96755b33a125c65c3e807dbe430a1 commit bc143d8b8387ff0a22e4ef8e2375e63aa24bc311 commit 79c65f3fcbb1288b84473d45e6d001820a971d54 commit 13f5dbd6e3d9a4ea0a8d061bb2a2f19bb21cdacc commit d448157665870bfbf9b6baa5991cd9d6bc98c7e6 commit a79110f2dc0194326d2e8c2cf83db6c784c37e97 commit 28a31774b050261371953401e8072ae15200c91e commit 84176663e70d93836d30d2a480a4201c7f790b42 commit d698a2c4859de2d4d42d2f3c3806d6dce821d663 commit 6ddbd37f10749830e0a6ddf839ca4313a007d3f5 commit a627967e803e58c5525ac92a4af0d15379189a32 commit 7689dab48259073ea13d64d32365b77860b84e7f commit ebfc253335af81db2e40e6e8ed17cd76edf9080f commit 837d542a09cd533055423dfca7e621a9c1d13c5b commit 3bce90bfbaa8de63bc500bc5a4dd262ed8e548ca commit 61d7d0d5adc705f833d8a5dbb596253842486220 commit 3712e7a494596b26861f4dc9b81676d1d0272eaf commit 1a408c710d9e273a22050b0b7b0c131f92847918 commit bcf19fdd507fb679bb6e1b8a119961f32b6cbb95 commit 54c73b51df2958f564b144ce86f15a85e227db90 commit 685fae24d94fd615b7058832fcb437eb588f4860 commit 6492e1b07c03397f85bd6dc0e230ea6cd9394635 commit 7cab2124058d2f5f048f435a4631e176dcd1430d commit 8b0fb0e967c1700bd729ae54b6f229501b8587ec commit 6c2453861f48e4e779cafa01c09e78ddc2c23c6b commit 6d76e9049ad92be32704106668c34493c3e4c0d4 commit 5e67bba301156c85251f49df19f5c695875814d1 commit 2e54fe5d056e7dc82988ef64ded3dca0ef954f0a commit efe17d5a217e6b7dfd16c80dab522abcf2edf1bc commit bdc4292bd3b4337985f716be789b08eef921f7a6 commit b0e2062dc8978869c1dd96d92027f74b361d5eb7 commit 22d4ba53b1c10de6832e588f01d916e24306f6a1 commit 7389a5b837cde5e5cd771619e9f006ae102f5d7d commit cb5cc4f573e18deb7d9143de0ccb62c08181bc85 commit 400ef298f400854544e062023671e927965bc9b0 commit 20c5e425d36a59529f2e6a77ba21d009cdfa8ffa commit c4381d0ee81930097e94e55d1c23f85798ffd093 commit df01fe73ee98daf00c94189967550bd2d2098912 commit df4f0041c6ef497e598a67e367db835489162754 commit 69f91d32c6632e09f0954e690d61ac4921dacbd3 commit ab3b9de65bfeded1d4646c9f66897c163e89abd8 commit 954ea6aa1545a13036851327b4ed251fa7ab2f22 commit e3d833f41c46b8c59c4af53897a6619bf667ebe5 commit 1613f346f86b25121aceb941d03ca927e57af20c commit a85d70a8b4813a955d45b062440fedb9be701421 commit fb825b651de98cafef13e07673eb72d5e2ceb4a9 commit 31425abeda7130e66e61dbd8468502061413631f commit b3523c457380c23cf28d4ee1ef60da337a0a45c0 commit 06cf9bd61a7452df375f212881d9bb6b3c52c3ec commit 5f0754ab2751d1935818459e8e71a8fe26f6403c commit a8e6398ffe171c84b1c03a17eb6d432dc5f703a4 commit e8521d0cd984897b4fa58e7837afebd04e44f0b3 commit b0641cb8a1deae38990cea783d2a1117255f59f5 commit 803abfd8dda540b94ea3c754a70cba69d3825995 commit f4319f72a9bc37c948832c0ef121460ad7c1573f commit dfacce59553b2a65f4357ba6019827eb4b9a0eed commit 3681eb24a9f14e001d05f8d15d2e07a96abef8b3 commit adb9d5a2cc77e8aefe98fe4c11656c5b7025c248 commit 5b529e8d9c387a34ca2b8008dc65f55d539b3ef6 commit 032a125904995985334766911de9e26ee2bbd646 commit 269332997a160b3785690a32d2c5496bce7dae51 commit 71b59439aa03e8de022c31ccbf9aa9bea4578971 commit 12d7d858e63d0769a91aab218828e0526c0ab49d commit 2f609faf5bda9d828ce0229689227ba2edb1918b commit f6bb74e07705579f83252f9c3cbd462d8084bb4d commit 348abd4cf353abb3aca8dc6ebb80ee84acc4f64e commit 366714b0883f0411a4b142b1f7cefc6b184183eb commit 4682a6d99638bb8ae62f00b9466849065c91fd1f commit fee076019d0a3634aeea8df55c1f7ae35ca31d18 commit 2b6dd600dd72573c23ea180b5b0b2f1813405882 commit 6b79f96f4a23846516e5e6e4dd37fc06f43a60dd commit 647bfd26bf054313305ea9c2c4a1c71f3bbfee63 commit e849f7e708600a9d7567ae22f945b5b01d7f7401 commit 6945c53bc712cf4a28a46fe46c2bd8526ea261d1 commit 7e00897be8bf13ef9c68c95a8e386b714c29ad95 commit 0f341974cbc2a4efe074dd24c153e439b8430afe commit 294996a98a641254b72732f3cb36d51f12a6f3d9 commit b5cfe6f7a6e17c6bc7c802d382cf22c4dc405477 commit 83f2726cd9c3b92589f850cd4935ebbc35eee840 commit c34242eea16f7d973501267142dd340cad3caeec commit 3ddd0c90bafd9f2ae1ac9f1e67581537273dfed6 commit 79c0462159a1fa3810ae1869a5fc9fd7782b6b70 commit e475986f182156496fa2991012ca51956fe90bf7 commit 03f6fb84bd0e98a7b929aef5f308b8e3f2f24a0d commit b6efdb02d23ef615464cd0077c211b40a1faca26 commit 4f64ccf4f27c89089f3206446e2158833bda4795 commit d622c094f8fe7a77fda613964ffdd9a248d2550a commit 8697a19ee955e32fe298b00feb0c61fc75cb5261 commit 71b6c4a277dbb2594c260ccedcafaef5154b0da0 commit 22c16d251a79c3156d17627810557878e600dc6a commit f3527a6483fbccbf569f91d9ee9c561b14d86a9f commit 47f29ac1cbae6e18329f0066f7c8d5d2346a5bce commit 7aba117ac9e01dc58afe29490f50025add9d388b commit fd9048dd4425a9dc252153c8b72369f1969a35b3 commit b4c55e525461a9a091421e952d1e052127d558a8 commit 82dcd8eb357caf4b16e6a201f6578b6e8795e541 commit f369e4eba89a6fc1cac619db86c00a964d1fc0a2 commit c1a20f707ac33b1fec1d78bab74e07656c237801 commit 6421c49567d55b1ba8d9389e5832297398a51a1c commit 58c69b53aee24f47741b150e309567d9b38ecd6c commit 9338cb719f0f0b43ee1ab39d17214f9b388c7fbf commit 047db281c026de5971cedb5bb486aa29bd16a39d commit 56ca49cf6004ff328458954dd3d0fcf0189a96a4 commit ce0bdc62e80d40caa346ac4840a20769d5bd1ae6 commit 552b7cb0eed12c184b3bdfcc262e96a954a2bc86 commit 4bd8dd0d61f961e6c13cc118d4ebbdba57f8561f commit dfd6879b98999867ac860a51348b00b5c0c2cafd commit a5e7ffa11974d90d36f818ee34fc170722ec3098 commit 4e68354667716e62089ce3032a3c7e1b6c07e669 commit 41f8aa5d6a8aace5d33e2d908bf5fdc833456a5f commit 6387a3c4b0c45a3932cc06daaf15727e7f83be43 commit acde6234f65bad89a2e27d3e8dd2daf680862545 commit 75ab2b3633ccddd8f7bdf6c76f9ab3f9b2fc5d9d commit d7e3ea83bba81d6d9c8f80c62a99b018165f5808 commit d39bc5c5e10a648c7de9558592816474f45a374d commit cc37b88b02fb590d08dd922ef1c0f7ef3125bba8 commit 028a73e10705af1ffd51f2537460f616dc58680e commit bcc77411e8a65929655cef7b63a36000724cdc4b commit ba3a5ddcf1e5df31f2291006d5297ca62035584f commit 8172375ea95ab8b7f7ea0dda617ad87c439a14ee commit 52506b099e1baa204b56b170f40f680ffcabb4c1 commit 8638b4d8ddc944ef3c1899cb774cb07de0b416f6 commit 54e67e5a2326b99c1461e29eb022e9d07a419abd commit a32762d1db4c13db53ab9005a24fe5465ab511f1 commit 2075a734ed990c50b6c544c6256b0dc0b74b82ea commit 09f137c320633d08b263c54c0782e91d55a6c09f commit b90b6e41379789ed595236113779e0793a63bf18 commit eb9fcf63857556d5eacd67f5c96078e643a8d15a commit 594c504d33343657ad3b24ff8e4ef032cd4de25e commit a868a1e57e3afca98509345d5a8f747a4d745cb1 commit 044cbc7a74c136f12a80c855cadd1b085084aef1 commit c26962803d044a7668e9ea4d5313117ac5b878c8 commit 479e3b02b73a2de2b19df2950863149c59d57bfe commit 86700a402694db56030a74481d09f35520332736 commit 8eb53bb2aa8afa170ba40f9460f2de4d4d138764 commit 33cd016e600ac3417aff7c85f59b9a4b70a947e9 commit 5904e4135f3b3e6cc7bed46bda71118d55a56681 commit 1b08dfb889b2c584b444538c9500af24ba0a6dc7 commit 590e86fe3462da81f1cbc4fc8d4cbf8b16b4f968 commit f61c40c0757a79bcf744314df606c2bc8ae6a729 commit f548f4291e89e6144d3c5b8a9ada66c7dbaa1639 commit 6d1d72fb4fcf85ff0a96de1c16c46162b3baf9a6 commit 6f043b5969a4d6d385ca429388ded37e30e0d179 commit 27535f1d94318f34fd6d41fd01bfa4a970e73bd9 commit 5de6a3de999d0cfeea94f1d3932b78892f3d69e8 commit 198bca93403d04f43c07c5c87c7b75a54f4bcb54 commit 26950f2968e873301c8c536ba0615ba04c17a0de commit 603801d0f2f418941d2524ffc43fa6d8c95873b3 commit 34ed3e83475eab0c8fe6bbb126165a3ff2f2ff90 commit 1358139bdefdb07bb402efb3164c1c51db99e8a5 commit 1d50942dc9304db488d1b3978274b851e890a33b commit b4a1c675d256bfa1d399490847d086b8b463b5d4 commit 784a2ec00904999fccfca12eaf7c63ac3fde5f48 commit 37ff945f804c2d40d030713fc8692e793a81eff8 commit a357dca964e0c77c479075dd65ef86199078d82f commit 4f72fc3c7f3d9f29a438bb0e17c7773f2fc8242a commit 1f73a367420c954f5cae2f899ebb9515be093645 commit 5fe0fdd23e3379833f4346b49fa791733c22ed29 commit cb935c4618bd2ff9058feee4af7088446da6a763 commit 428cb15d5b003102bc33d49f2ab31a6e4e785157 commit b4d775775877453b44834a621eb410aed7891875 commit fe6959a680a4c50f12dbb362c90f9d7157fea334 commit 7305f5b3a5d62d1ce1405e91fa367e6a9126090c commit b3bddb7a3806f26ba3eacb4f77834102ed344b9d commit 70b42b5845c84f33ed2b79a0fa96134710c652f2 commit 17dd7b896abd2c81bbc76ed55899314b1c285677 commit c5274e86da5fe7297fc28a4e12bd29defed1f435 commit 51f2d00909c6153d23edf2344f6b57d45e391945 commit 0bd6c4a1310336af511519a8a853ecff2120d11d commit 9d0bfa7ac97c629542caa860bca903af62b86326 commit 5acbdcd1b12ecba04f1481004b6ce5b40c64b211 commit eb8d73aa63cde11e43ab0619308a5356a691850b commit 15d641c41796fa1e8c8965ea457aac737a28a88e commit 140f70aeef07e4516a338b275e36eb5f8cfb463a commit c9b06cc26f1daace605238adb4720560078b0eb6 commit 2869f599c0d8c9c6492bec40d062951be8caae04 commit 50dc95d561a2552b0d76a9f91b38005195bf2974 commit ce99534e978d4a36787dbe5e5c57749d12e6bf4a commit 8b250cd3b5da18bd90f34ecb04c01661213b65ba commit ff3aeb34deb24f40626c171ce1cfd447a2edafc8 commit cf5b64f7f10b28bebb9b7c9d25e7aee5cbe43918 commit 4fd5e720b709b87f67809a871fde9fb6cb910f28 commit 4a46e5d251a39e7c10493743ac89a31f6f3ce5b5 commit 75478b3b393bcbdca4e6da76fe3a9f1a4133ec5d commit 4adc33f36d80489339f1b43dfeee96bb9ea8e459 commit c03d0b52ff71d580ee235463c7ca9eac31351dcd commit 80ecb5d7c0f224218fdf956faec0ebe73d79f53d commit 85e97b1dd5d29b66a249406624734843b71c0a0c commit 2343bcdb4747d4f418a4daf2e898b94f86c24a59 commit 901abf367d3eecd54f21829ced48c20f53c74c57 commit 828904660a2e0a31d5c8a2ce75711f7123896bd5 commit 6a6c2ab687c8eabaec4a55a4f13eb5ee68181403 commit 239d6de307b0dd1d48ec9b935b57531f07f6db11 commit e0638c7abc4d3d3c46e8f2fc07e02c3877c3c402 commit 974d5ef0dd9d251dd4571e30d5e79e7e4940d424 commit da11407f066c28c49bb7a4ff6a6b742b7a18d7ca commit 56383e8f4d296a33cc5b2a11864025d8205e9438 commit 1c4dba5e14c0085d412429d50cbcf8e9e2a18924 commit 1f2cf08aa010594036ccfb19d207e5b80b5bb7a0 commit a746c77e5ee86829c03dfaf718e18b589f849be3 commit 83a3766b147053e542f3c91c121cb9594239e644 commit f9130b81aea2de3fb6d356e9495a384b2d35b1d1 commit a685572c91b08e2e5143e52f4c5bbdd3d22271b3 commit 25c6aefceee60850bf78e16ae9d7fcc4a9d20884 commit 5e0c8ddf029e0a8533bfb04e4542b46356cbcade commit 0fc2549d55a238da5e4c1b1ae20ebc3856922334 commit dfced44f122c500004a48ecc8db516bb6a295a1b commit 1418b9c38270f4c7843627cb0e9047b19eb3365a commit 5d5c6dba2b43e28845d7d7ed32a36802329a5f52 commit 5bb1465fbdc291593a7c385cede0416ff6873280 commit 29dbcac82f96d06608f3658aacd3e14efb7ac0cd commit 97d1a3b967a3cbeb0dd29a8b5bcd4ac1fd9ccd9b commit 7bbe43f8a4e7775daf6ca62807e0023b0642a20b commit b12252b0538183d8b88bd4a8d8d05a808c46472c commit 4819732f5986ed8b3d88bf4272d2d5bf1ccff9da commit f8f96b17f0fa302b246e35773074f39e43add023 commit 5d447e296701484f3df5b31a7a078cbf1e3a9cc9 commit 1b2dc99e2dc6f35f55f0487e12fc9166fbd023ed commit 381519dff88845bbe522e7446ec1e32e351c670d commit 04022982fc5ddac6cc783d66846f2464fe4985fb commit d6dac2bc12bd968acfcec7a0c92c59d2e19dacc9 commit 1f33bd18d703ecdf7b664168d640439e867d1605 commit e9287ef8d46cee538c9a71bb8978b2f7e975c452 commit d435c1ed56b9f9347189924395588cfdf7489af5 commit 5b680dbfbf6899afaf8bbe59b859509149d59129 commit c282d9512cdd167384fe0d233d13deea538658f2 commit 31d64b8219e057705d7a9debffcf6abbccb7781e commit d9eb8fea6862e63421f7b9c93e32bef348488c41 commit 5279e091616b74ff0e4a24e220e0552b10d88d46 commit ccba4e5bc856471ed009d92747376ee506fcc6ad commit 3ea07c89fbb777669c668452e94275a98dc8afbe commit 1f6c40d5c0095959a260c014a6251a0ac124c721 commit 09ece5ac397f8e3539ea9ffb776e1cc6702acb9a commit d715c9a2cbd4b5dbf72bec82b033698db3c6eca5 commit 9506b8d9626f4fbc230dad30cea1b3b095f1e4d4 commit 2eee829ed48747181b17f3f8d458b23981f2bb7b commit e2d8ea4320c6fcf9f042e432232240f858ae9ed8 commit 1210b17dd4ece454d68a9283f391e3b036aeb010 commit 87e298d6e3a2169831a2f4a29e35575ee5747036 commit b80ddeb29d9df449f875f0b6f5de08d7537c02b8 commit 4a3ad932b2c538c62e4a60dd4b7411f802e018ec commit 2ca97adccdc90247c907541089e85101b2d87574 commit 09db246ceef70bc6bd9c3e0d02b3c855f8fc25fb commit 9cc370435cde6b672b6e2221115c2f535e8bd4ec commit 5f2c1192eba42f6926253a1f2c9b18da05b3c31f commit 72b90723b3760c69721b04f59436f38cd215e2df commit 0c5a0bbb7379625eb2a5b6a931415c008b7a1a16 commit 5cef7e8e2fcc6f9e8d2134668848a31b15c523b8 commit d52e77a3ffcf2da2be1a7892bc8fa67b0e907058 commit 53a35edfd0a767dbd04537596d95f56e94582f50 commit d063e70c6acad14987242f266e9448669db4624e commit f6a3795d35c69bd34a556e1d93000057aed78599 commit 0015cce5cf04d3bd7b2ae4f62d5cea5d35383e8c commit 05d6aea36a69e65b071e6ba897bf83a4aebaeab2 commit 85b8f62b564120943cc0db1e754d6649037e6c7a commit b5d9a483685c37a480420cfe2d41a03d529bc0a5 commit f2bde8349c35d01d7c50456ea06a5c7d5e0e5ed0 commit b9610edcfec216d7a2a5ea2c942734b3e5e26ffc commit 212021297eafe23b79ac117db9b5159d1df2ff30 commit 901e2be20dc55079997ea1885ea77fc72e6826e7 commit d0d66b8c66d04363eff3a5b09da4074fc1dfc758 commit 243c719e872a1322b22efccff80776353357b296 commit 82c3a7a5edbf5f6feae9602d19567d2b5b55121f commit 153a9529d7f372ce7ceb5eae7e2c312c0cd64d41 commit 588a70177df3b1777484267584ef38ab2ca899a2 commit 94ca070cd3737dd5c3b98f615bd4cc950f82a597 commit 5e6d72c643e1262ff02e057620b9f87d7d81141a commit 430e6a0212b2a0eb1de5e9d47a016fa79edf3978 commit ee2016b4b5bb70483e1c06218e7b6288704284cb commit e6f62afe9b2731b7a94b31fe59ef2c5134ad426b commit d726d43c20e744bab1e346c1f77b7a71eff0c40c commit 37d6b1506b80a5cf76238b6b00926070ab544058 commit 3b36f50d3a69ed720e4c464bc9c5fa2c3fadc750 commit 29c52ab2711f0e8ce506c120fbecb30e83f83339 commit 721fd84ea1fe957453587efad5fdc44dfba58e04 commit d8f7f8831bce9ef6a1f562037e137f57b5951501 commit 41e096da18b357ff1d2108c514b9634d67364c41 commit 20f6ac2d5e00d8ff154d9617a5c0b52ff12f3320 commit c3639f3be480529ac82b592e627fa7dd712de83e commit 6a4d8cc6bbbfea4469a063bff0ff0114507df524 commit cec49bce6e0cdf916433a248402bfdecbf6589b0 commit 9f807822abf5e210d8656fb5304f662bee64ca80 commit df216b37333cf2ddb0db86b966e86a53d239a013 commit c20b5d41e9de40a51b7e5516198c08a906fb7770 commit 1d894ce88eca35ef8627901c47c3881cb1f3e74a commit bc1ce503769c51c1c06f5ed126b07a545996d697 commit 8f4f9a3b3a0b733f8fd102f9e0843cad8d055c83 commit de3688e469b08be958914674e8b01cb0cea42388 commit 3f268ef06f8cf3c481dbd5843d564f5170c6df54 commit fda8d552c9c7783d4b29aeb6350d7404b31cdbff commit b889d89ad45f9957ea3eac8f61cb8884c2010940 commit 4be990af2f7ed8bf209cce3b86e1abac33742763 commit d05824796d9cf6c0e59a0aa86333584bde8b51c6 commit bf172a01ea485e630f28b6ad525fb277d73d3e3d commit 96e4c3c0ed4eb85e02bfa438c6b4ef7cea78bd8a commit 8295524a2d5550b56e800ac779a183b7f4d8c33c commit d083c232fe2dc4720d8f0e337613f88909ff9d2a commit 7e31ce581bf034cdcb1a94f84ffcf3cc983988e9 commit 6a6d914de30f15472b2dc36e8ac6bf016cfbaed5 commit e93a590c79faa4aaa4d7eadacdef9240e1e823a1 commit 62236df23d018fc977d2871744440efe6a08a6cc commit db3b3f3e62279b914e1958e93e057fc4d8dee263 commit b229712b26b58d043cd7386827f41ab022a4d109 commit 8ec6a72da65bbc4d341253e5a641a51bb1c0d967 commit a5d092d37eb5d25520d283985082e977bda68eb7 commit 516b33460c5bee78b2055637b0547bdb0e6af754 commit a0f25a6bb319aa05e04dcf51707c97c2881b4f47 commit a7b23fd90c804e79d1edb478b42935848bcd7e36 commit 66755b4871782cb95e3584c9e88b6ed6c52c9022 commit 10dcc8317f6063806ce1d34235af23da5e2fdd7a commit ccecfd013a39d8b8ea837e90f7f907e4ed5abe17 commit df8d1d0abd9439479ae1a0d8812ed57debe48a86 commit 94afe983b5aa56a841f208a6b455691a44eafc7e commit d5410d6974acd0aaea6742ecd8e3f7bdedbddf4b commit fdb5713c7d6f6d60bf23596eafb1ada154869ae9 commit 1439e3bea7b1201a9461ffbff2a9d59f3e65dc1e commit 8acd15a0c8c647ed4cb07c53c3ea4a8768c974ce commit ba4a28bb168aefa98ee422be8e04a0c964256f95 commit 5f825973b491a457c7233e808ecf64726abbeb86 commit 5e66e818e0358fe42704404580b70e1ffc7afb6a commit 9d6bf794084d9258dadf2754d911fcfeb13ea8fc commit 039cacd2393971fe11f855118eea6c83c8f506fa commit 1790b649b01ba7e44af7c08ffcfc0eaa9d4f5ac6 commit b6dca949b88ee69561fc4ed853ab7a2ae13d842f commit ac7c48c0cce00d03b3c95fddcccb0a45257e33e3 commit 367c9b0f1b8750a704070e7ae85234d591290434 commit 6225bb3a88d22594aacea2485dc28ca12d596721 commit a154bf6eda9881aa3dd74cea83dcff6de3ce9680 commit f4e2a66dae996b4fa2cc21b1904798ad1dc83049 commit 75513bf5d72cd1a81401866642f4a8052b2d4420 commit 7270e8957eb9aacf5914605d04865f3829a14bce commit fc6ea4bee130710a77ec16a86d2013e964602503 commit 9a17696049889550ce76a987562e679535943c96 commit 400013b268cb666a44c0827b136bfd4bb741b13d commit 498d46fe7aa7eda5807352d62af133a2f432b814 commit e63fa4dcea2f7afcbf8f2d013dfae23a61a273d8 commit bee7f8d09268dc80da0e841ca99d79f500d03b84 commit 7367540b26214ba5f7236e0f212fd60ec6d07c3f commit 4e13b063d2e510b54e3ffc2e975315d08d14c5af commit f06d9e4eec7320f5a560e49ed652e785c8ab5c45 commit 2f60dd50769efcd6eedd0dc6b3f419cdd1f1f1fa commit 3ed893396b0132fa5a4d3fe3f9ba358678c6dba3 commit e281d5940ae7f2ceff99d5e001a69b5f0884d2f0 commit 8cda7a4f96e435be2fd074009d69521d973d7d31 commit ded81d5b2b67e6e6fce0a1e8b73e4565a28dbfd8 commit 1ec5a44331af283b1cd3b0f0981cf65f0903ec8f commit c57f5ba2c8febe944ddebae53730667d5af179e5 commit c36846f3917962a1f7586a3d39a423e6679df3d7 commit 512712a824de9b856a4e61343e3e4390eba2c391 commit bc1922e5d349db4be14c55513102c024c2ae8a50 commit d29c9930279df7c10348772f812154d3c41562f5 commit c65b3affc6737c99c09925b910c7471d3db26b54 commit 5f721a5d1bb2e3ada83f04a119908b66d909300a commit 14683babf8ee356a232ee76b0acd332aef51fdc4 commit 7a05c5a0c883ed6353f82699dff8d789dae6b673 commit a594525c82e0b8d677a7e5fd13c7c115d41e9722 commit 270677026261ad8d1ea8ed60c3327d37aeb5f372 commit 46f47807738441e354873546dde0b000106c068a commit 9987151a90567785beebcbd5c8ac58d05f254137 commit ef6e871af3126850b429f68e8bd5b657042139f0 commit 063565aca3734de4e73639a0e460a58d9418b3cd commit 2af104290da5e4858e8caefa068827d7392c6a09 commit 8be576837b6e62b2ad0de2f9ba31cef618fa2891 commit 3d082157a24216ca084082ce421a37d14ecfcfad commit d80976d9ffd9d7f89a26134a299b236910477f3b commit f588a1bbfce781042196e68f8e200f08b3d9e8c4 commit 53dbee4926d3706ca9e03f3928fa85b5ec3bc0cc commit 751a9d69b19702af35b0fedfb8ff362027c1cf0c commit c50df701d49e78bea6410b4b111c7be71e2a7c2b commit 8023d3bef18bafe54708faca0c4206e1a36ca155 commit 6149cb68a5be127909ee39f4d40b8f5ba0d047cf commit cc954cfa6fe47579aa8eceaed00677feda0a95b6 commit be0c94ee215043c0a5cdbffc5c45b5073054e125 commit 5cd0664483c1be4a71bcf4ec643f5d3c782e0319 commit 0adc41de818c1a051c18732db57b9ee95b30898e commit a68819cc557cf0a37b7fce50d412abdb73bd69d8 commit 8de5df3b07efd1a04c549e59e0d72e2b3e2c517f commit a35eca01c372dc0f1a3ad663c6a93604c603a782 commit f0d4ce59f4d48622044933054a0e0cefa91ba15e commit c3e27f4307fed7b963d8e99c18dc51682b3431e7 commit 6d6c932daef5c5b3cd5e3692e79507d2a3306031 commit 1d06c820b2b7ceb38bdf0775fac495db4ad4d10e commit 23015f6f900b8b158f6811b85de1f96769be4dc7 commit 00dd7f953b9b1d85e97da8065cc2887a5477008f commit 2efb4adf489dd29526c412c4593d12e08076c68a commit 19d36cfafad0395d1b8a9db7a85d64282c42ae94 commit b5c84a9edcd418cd055becad6a22439e7c5e3bf8 commit 657b15d672f4d89cf0750793473b8963429f8ae3 commit 29b9702ffe70d83b9970abbccaeb287dfda4409f commit 363c4c3811db330dee9ce27dd3cee6f590d44e4c commit 2bf68bbdb6f5a445b26a0e8fe14af229ffcc7f9e commit 86df4141869350edaa53fb994b3db2c2cca5065d commit cd9f7f7ac5932129fe81b4c7559cfcb226ec7c5c commit 70c0b80d0bbb97c072c4a9c3e8b0f68a9e22d7d2 commit f0bb41fad02e0310fa7b222c7254a3603ecaca1b commit 72be4584ae7e23f64c292171cde6c8fd887aefa1 commit 3f1a31ff8e3f6654d2b03a34095ca1658e4cfd77 commit 2ef6d3bf426218440b156d392cf95e830990e0e4 commit 66a19a3a0e2d200121f30a48d13b80532582f1a5 commit 7d296f369d38e12b1f9c552d8635eb0caef71095 commit e71a74122863fd8acd23ab772ab4f7c3a378aa66 commit 0d6419e9c855dea476300e2bb81d29105fe76d38 commit ce2fce2513c5c1076f2a2d6e977c0ac523aad5e3 commit 22ba60f617bd1cfbfae72f73c93ef9507a305c59 commit 18b66ace6b3acb01b645d2fbbd571f66b2705c71 commit d2a197a45daacd4ab3221161405768a6d1d11086 commit d2895ec4ca6c67c5a9c8ce74bd5deba76ea77f6c commit 6a77bce58c6b29167bce2f548559c75326bbaf03 commit f89154b6525c7ca394ca68adc90e6a0d5b3872fa commit 1ca489fc60e2713a9acba4294c6fad66d85961b2 commit 90c44207cdd18091ac9aa7cab8a3e7b0ef00e847 commit a2170b4af62fd347c699ae3cd9ec0a8096466f9d commit 889f84798c5b975125f5f7de910ed222ca8b2677 commit 274b924c3ed18f7d46d237810dd59d3bc89cb4b4 commit 241a074fc1342b8f6a88af4b7bdc014692ebcde7 commit d389eafa3f50944ca272e0ec865143a9fb948e78 commit 219fa961e12497fe6beef478cc0de0da47b3a3e6 commit 88839870c3060a04a2e085ef1efccde4b0d1d440 commit 702f8dd8319fa6e3fe9d90115426202e6ee5d06e commit 9d8033d6beca43e9d8eb952adfa8bf08642a357f commit 2426d71c52876a5558b40af06143688b3978ddb2 commit e8702d0b97dc9fa825715fb28f116c199bbebc87 commit b9d3d50adbc79c3131ff3c5ac35bb9a57442f08f commit 8788e0668f4fd8815f82c982879252aebfa708db commit dfabe59797799bb500897ab4064f8a76aae4026a commit 2750caffa7a9ae82824d7ac3ab0fee65181c4126 commit fd24926676801dd68afa1f39647a858cf4f6ae50 commit 2412d339b30e66f86d9430aec26f5c6a44908b15 commit 05f8c2a87aa01d1000cf148213560117e39a48f6 commit bd682a788c1f4fbefe17b3ee9e0e3debdefeec6d commit dd4dabe4b3c2425878a49ae8d5817d5c5958c6db commit 33413ef964b8cdbb25a23aaf0b4aa8f0a330c4cf commit fcd6b0e270a9dd849981df34051ee6dcbdbb1c0d commit e0a4459d45425fabd5f020a2117d350c5a07477b commit 6927913d700749a4b9550f87f294778df2a7faa4 commit 22f7cc7524081bb2bfb2720e43ab9889e2ed5b00 commit 9308a49d8ee2f0f372fb7f18b8f4a97d9ec676c7 commit 4f860edecdafeb2e5fb29fecc6428090997936fe commit 5d64f9bbb6281a5a89a2266b9d39daa1fca1d6b4 commit 7e2ec174945fa98048b39baf2a87973eddca3241 commit 876f7a438e4247a948268ad77b67c494f709cc30 commit d30b9ae93bf57414160503d3cc62735adeb61557 commit 377c675f3c17ffaefd023ee283bb366bbd6bbcea commit d946bc44aa0bf03ff5c2888e8c3be8646e14467a commit dca384a3bf5af1c781cfa6aec63904bdb5018c36 commit 9277b75675113d64a74ec01a1219973f3720d9a7 commit eea89dff4c39a106f98d1cb5e4d626f8c63908b9 commit a3574119826d9a4ef807fb973cf5150c3b90da43 commit cf1c7fee7ef37cfc09b5e704eb52d9466ca49012 commit eef173954432fe0612acb63421a95deb41155cdc commit b3dcc6dc0f32612d04839c2fb32e94d0ebf92c98 commit 15512021eb3975a8c2366e3883337e252bb0eee5 commit ccbeca4ca04302d129602093c8d611065e3f7958 commit 542898c5aa5c6a3179dffb1d1606884a63f75fed commit 722b717d8e2759d943dc1f55a2f6fe19c55080aa commit 972aa1a161d8eb61bc588c31bf568bd69c7c231b commit 7994369fd3e758ea1fde269ff7c3984a8ab52b59 commit b8c75bd9746e3f1bdb5a1b6288b50dc2fdfec0ef commit 2d022081b333a7f15ba27607696d4a41a7a2b5f9 commit e56694f718f0f6694c18d7595e61533a2663335e commit afa37315917bbc9e71a4359f921eb887470c008c commit 3698807094ecae945436921325f5c309d1123f11 commit f185381b64814bb483416e4dd83d85891018a7c5 commit 5ccbb057c0a1282b39192a346f963fa989ddbc92 commit 73fa13b6a5112b59d09e58b8075973769a15814c commit 011bbb03024f5a22dc04eba370f9296f0cb83502 commit cd9f79103003599e58f9f394c07cb4045883a51e commit 626f7b3190b4c07917f0262162cb7fef7272c34d commit 8668dfc30d3eee695233ce83944abaf5546a5017 commit 2485c12c980a36bb9e23ababb07d73c4ac6a45af commit 5bb6a8fa75fcfda93592bee0a4910420ceab15f3 commit 42c6c48214b726c30918e8dc80e2168607d13ae4 commit 3a9822d7bd623be9000cef8101ecf8479fa53f2c commit 40e8a766a761f7fdc8530347527b344fddf6f1a8 commit bef153b70c6e3594b849d44a23f806328b9c68d4 commit be072b06c7397004e6464b4225e13c31ed0b9ca3 commit 4717fe3d8dec42bc951a44f41efc95d635d26325 commit d1289b41ec4db347794abfed7525e33dd2d9503b commit d763d8030f440441177d9638ffb0be39cba32a03 commit 08a987a8a02b073c620b5f3f363714ccd98c0bc0 commit 9d5dabfeff3ca63925cfc9c427f2d1fe8929402b commit c2db32ce77adf82dd2a4193abc709ec51474f84e commit 2a909ae718715b3bac75d945e38dc0a5e4a0f1ba commit 692996f2bef7aa1737e07554255ba0d9a73fb750 commit 3f1e2e9d9993a3b1e33661fee26566f091e01b2b commit 3f3a24a0a3a58677d2b4f3c442d7a1be05afb123 commit 00b14ce075732edb2935d738de990e9aa96f1e08 commit 447c7997b62a5115ba4da846dcdee4fc12298a6a commit 00d6936dbd5486bd5c0a07870d5747eed6f799ec commit d5e8ff5f7b2a41d503914d4896ed3c6b3befe933 commit a50b048276c4e1bc6f7e869c99b6bdc91b4e237f commit 4e781873fa1359c9a85559b6da6548ac5b07ceb5 commit 29ba7b16b907a1f915aab8b83ef901e209146938 commit de95753cce66582b0c710dc31592cf15d317118b commit bd42571168ed54d309480856fadea3eb99821253 commit 5af779adc3ab0245b94187a3fad6d10f60013c1b commit 2d282665d2613fc7be9dde557811a7783ac01735 commit 7ade3ca9cdb547eac2cdb661c91a481235e21ae8 commit 3c6591e947f5c23c13dec67da3dbff12ccd6e209 commit a89ef0448c9b59c524499663eeb92a43c8bc67fd commit f69c15e15e74fb0250049c5532d8322c75f423ad commit a423746305d41c1e2767b832742cb572ab173af3 commit 6d33f0e820bfbc4f0b9b2f23d0d30df4bd6c3001 commit 3084488a49d6d58005d6ac1b5457b3f13bad1ed3 commit 77a35bb579827216d911ece7a6b909e4ac8e1626 commit b65007590911ad558999073dbffa413cf4861df3 commit ca7f9d0aba9940f4d3e759f44c414c3707a94b21 commit 98ea24e6c563241814abcb1d22ec207a7ec2fd9b commit 559e2655220d56f939a9fbc6212992345025392c commit 39da460fd4c0f8e7290dcc9cbfc9375de9d0eeca commit e8dd130bfdc627d935d4eda4654059a24864a493 commit ed3a56f9c638a4ee42031eac748664c834fe245d commit 66d58bf73ba17ac45fca79f2e5e26870cc224ee3 commit d7d7ddc15672940be0dbbe03e016c5bb617256b8 commit b6fba4ecf3554c515aa5354c54dfdf70d7526ff1 commit 6cbdf12b87356827d35975dfb3030d116782737c commit f54b6bdf4248b1e26ff66932231e1d6a2f16adc0 commit 3786a9bc0455ca58d953319f62daf96b6eb95490 commit bcfab8e35ce81e2fd3230c1575024bfde0d28c8b commit 120cc6e67a5e34069693cf1711ea222b8c414685 commit 68550cbc6129159b7a6434796b721e8b66ee12f6 commit 4a5dc6c73dbec54648fe01af2f1818dc3ae90d5d commit 7938f4218168ae9fc4bdddb15976f9ebbae41999 commit 976b6d97c62347df3e686f60a5f455bb8ed6ea23 commit 0fd9803b985e5d94e2b9f1848a12756b7848b62d commit 270b48bb8da7452b4357d8726933beba72652310 commit 68129f431faab376c1dd1c701f2fb999eea53383 commit 18f5fad275efef015226ee4f90eae34d8f44aa5e commit e09b9aef6807474d6964a2513321e174f5162e8e commit 9285f09e8f96496604cf0755a3d7e91478120609 commit 6abbad2c00bd26531c203f29190d14ad9eebfc0e commit 042ddf6663a86be98b306e6cc9e7048ea4c835c0 commit 84d826c8fb84a57716b44b721591a0fffe4ea1ca commit b20384d9196788dfed70aa7cfb2b3dc458217918 commit a59b026419f33040d7d28b8e3b1cea681b9ce7a7 commit f665147cda30928ce79045a13953eb709fa3dcbc commit 3ab26eddc67a67579a2b52f908b69cbc253f5ff3 commit 5e78d59a1ead969669f64dde4245cfa65b7cc4a9 commit a28fde308c3c1c174249ff9559b57f24e6850086 commit 053f2b85631316a9226f6340c1c0fd95634f7a5b commit 2a3950c43e2ead47ed7456b04da5d4afde58c4b2 commit 6b0076540faffd47f5a899bf12f3528c4f0e726b commit b21a142fd2055d8276169efcc95b624ff908a341 commit f4044ca1967098b44bd2d569ddb99352b599551e commit bf8900406e9e5c928ba578c8fd932b4bc72556be commit 2ecf64a0d26699f5f7458e87bfc873a47a2945bf commit 6e007c3bc97024853e3397cbbf37377fe8cf2b5b commit 7e97596c743c978e81ac67a59940071aa292b2a9 commit 91cb1e11786c4d5cfd8bf32e891232fa42b03cc6 commit 11a1d09c974fd58b8de0474081d6e97bebf4b619 commit a3de31d55b2a9fb672007aaf2b070cf90ac7dac6 commit edbb9242478d3aed8b4d3cb197032e9ded26b3e7 commit a0386bba70934d42f586eaf68b21d5eeaffa7bd0 commit a4c63cafa58b4bd9e15511bab77a4752b93d3aa0 commit 5fd8518d187ed03403a4d4f7f56f52c00b11c148 commit 54f329cc7a7a7ea265c45b206d45e3d09192aba7 commit 02599bc7f7047f2b316ab499f41d72ca14e3b3d3 commit 681260df4dad45337b14ba762f94b402204e9ac3 commit f287a3c5b03f51efa8d8f3e141a79177f91047e0 commit cfbb6b0047448e2d986160d9f30d60f604d9ad0f commit d0fb18b535679a28b1f55a312b7454563b9bb36e commit 89a7a87093d67e2c633e1ed400ba00ffd15bdae5 commit e923be9934a9c54a94e443f9e77bda5b9fbd1ce5 commit 3675c2f26f33ab4928859fb8950a4697a16be5c9 commit 03e5b167bd2020053f3d10b61a361de8b17c5936 commit b1c87b0874a4a2045dc78a8d3d3a77ef61536711 commit 803ec96319eec2897d3828e87bd38180295d0dcc commit efbb7c98f5fa5a547c4bc0369f825c930aed8918 commit 2feb6b0f06b1221b2841ca61b721b1d608bafa79 commit f3b603de2ff41eb915d75163f7212bbf177950d1 commit 28f5f8884e7cb9cff5375db487a8ca7cd3fd599f commit 98476876b837069e4582565fee63e70810c880b2 commit 40f1dc5223ae9b98458124bbeabbabc74c2bccf6 commit de7fbd020d959708282ac0916be3e5498086d9aa commit 6c1a7867734bc6f54e8442f47790c90d3afa07a2 commit 5bdd3eb253544b1e80f904e1205699d0a126d2d6 commit a439b890dbd17457f071e41777aa1d17916258d6 commit 1cbbc8d4f788af4c260ef3cae05902ef7b191197 commit db7b81545f5abdfd1f13b7f0a3f995994701cf92 commit 3b99e8e37d0ffaa0ef95598b9b83c49c89bc0ea2 commit 63b5fa9dbb711e245e59cc14eaae0106eb716447 commit df62ae6fc9b49a9a401afa2efd3f36c0f82ad663 commit f5666d482305900b9622a2c9dd73a864a3b0d281 commit 24524e3f43cf77dfdff7187f76d967b3175f68bf commit ba2c5d15022a565da187d90e2fe44768e33e5034 commit a3c286dcef7f8bc576a20f5d1e80624f6b4b93ee commit aa15c677cc34e626789cb65b8e7375180851c03b commit 67b723f5b74254d27962b1b59bddfee1584575ff commit fe23b56f56532dcc5e49e83e20333b97919dec53 commit ded74cafeea9311c1eaf6fccce963de2516145f7 commit 1528038385c0a706aac9ac165eeb24044fef6825 commit e7a09cea6483b44ea0c82f07145fcbd8a918bf96 commit 24a644ebbfd3b13cda702f98907f9dd123e34bf9 commit 73144c0ce4e9d69c8d0de4078b6bcdbc55f79db8 commit 66b09ddd8b323547e24871ec05fc63c44a557877 commit 69898171829d6fb92e366a989f2f14d8b5b15e21 commit a391e06958b2fe3f53171ba04f60dadf17b09d5b commit f7bc440bc79ae5dcf648b90209910ea8dba6ef0c commit 0f4b58423f3500ee3e3159fbbd6c41a6e6f920d4 commit 0192c25c03cd2feaeaadae375fe6aadff788939a commit 427153ef63a82a4d51c6046e2457787127f4d6d7 commit 92e438619d1603995ecb9f1fb2c322cc304b759d commit a421d8a99216d46926609611cdcf260fdf900645 commit 3ee7fab0f3d2c1f9c2bfe6d4fb8c58106a52e840 commit 420f63cb6d2a691b94662f50e07dc3c9a851bc69 commit 721255b52700b320c4ae2e23d57f7d9ad1db50b9 commit b508d01fa577e21a8f574dec09a16e5f2f6c7d3d commit f3392b85130fdc9e17bf6abe362d5e9e4bc9b8b1 commit 985a0256df3290d318bf937db7ef0633f7654490 commit 88d23eda3c7f8bb560ae93b00d03688ff7920cdd commit 165bbfba34cb4c8f31d1e643abd2d5cb6eba1b90 commit 2528b396d5304a711d28f08047a8fe60daebc3ae commit 154cfae6158141b18d65abb0db679bb51a8294e7 commit c8eb426d47abfffb0713dfba8d25d99ff091f3ab commit be137d791b5067fd5f290a593336f93019ed25c4 commit d21b3be8e14445fbd06109b4831c4fa8f9adad2d commit 8a84e7a176c0a02a97f64ace508c1f2546c30bf6 commit 759d4fff3d2d70d6b689a9f1f7eb4488df337fbd commit 63b81e6063200d01592cc2cf9b3a87dbade2e149 commit 04d4e167522fa9b60c83e04c4a74041b36b2327f commit cad3fab413efbfdb1c64a08808aa3a59fa288457 commit 5d488786a3a18d48bcbd1d215ba9dc6811b7d639 commit 0c63fd3d962525d3eb1001ebc31537206f66720e commit 1a7a8d93db9b8c7ee9cba983fc6aa8576da237ea commit 6148f3653bba417488e0d289bbe60c6fc7c4e711 commit 2b1466ea19182551ceffcd6deed2b22377cb2a53 commit aeb47df35742376f2fa13ee39039f1873daee626 commit 02cae05ec4b6d6f1a1a07c98a34e69ebc1b8f7d7 commit c7703ce38c1ecdeeea6791b54fbee29a08816ea9 commit cc188a73addc8188d73ad11901b697acdc7fd0b0 commit e5af61ffaaef0e952e248de895454cd339080035 commit 5aa71bd773c390891974b1bcbdb3b12aa17c781d commit 574ff46f10102f65c40d24729197033a80458238 commit fd22013a098baca78679656d55f8fd0becb99a8d commit d8a25e48585773afc573e835a52f9cbf409215bc commit f9ed188d5a08cfacb945b21976764f57c0ea9ebd commit 69f915cc97c4bb82b34105a47abf613f7c87215d commit b06b48d7ddae440f3393e5c1ddda4d2537b3a7cc commit c8cb19c7b26d78434ec563088d5d377ec2caf616 commit 60aac460ed97852f620529f43fd58dd05e41644b commit 816d61d51a31bd16d0fec75526462dc987f09114 commit 8bbd4d83a68beaf54ae01b2e2aa2024ff1dfc0ba commit 461fa7b0ac565ef25c1da0ced31005dd437883a7 commit f3986e86b2d861a2ed2d336bafe53b5c404cb995 commit 1915a433954262ac7466469d1a4684ac54218af4 commit b010a46bd3abb161409afe147a73fe58c115858d commit 24992ab0b8b0d2521caa9c3dcbed0e2a56cbe3d0 commit 7f161df1a513e2961f4e3c96a8355c8ce93ad175 commit 123db17ddff007080d464e785689fb14f94cbc7a commit b9c7babe2c2e37a50aa42401b38d597ea78f506e commit d315bdbfebd517cf5efabf666c8099e027ef666f commit c6fc836488c2ca45c06d21213f5281d668b42b95 commit 9a8e720fd064193ef5112dcb221192fd4d0f7809 commit 74fc595465a0f8e54a71a9b2fc8552a1ccaaf5e2 commit d83d5298ba188a829558ebcc395469e39ffdc2b3 commit f9bf77df111a16d00cffc4ed6b7e374956290dc1 commit 5472b3f2d9ae65d809d0443dd8f5cc7e1b20b1af commit 5f2ec9095ce8439614ac289819a44e02f52a5415 commit 82508de228bafb2ea8f048f7bf11bb5547354d62 commit 01b94a9361680d6582dcc2a73a9eb464e0e40888 commit 14da21cc4671dbedfbe3854e495f24adac7866c7 commit 4feb2e9eb95f785ea39d5a7e69b845354c2691b3 commit 548b512e144f890a7ba4aad71985cf4a81611f5b commit 57bfb34a51c7c655335010b3168c1061b5eba354 commit adca62ec370c131ca676ea4fb2e4e450f999fb9e commit 90d4aa20c8cc76f5baecd423b5dc289b899ebc42 commit 0e05fc49c358cb49e59ce8d6ecda652951335e1e commit cecece2ca505dcd47359ae21e3b37ca1f57c08e4 commit 8668658aebb0a19d877d5a81c004baf716c4aaa6 commit 73792e6e66be1225837cc1a40f1e39b1d077751c commit dfa714b88eb0a9d763eba9e5720b089a58dc9496 commit 3fc2b087df2ce87dc11abe4a5e7a02b75b5bb82e commit 7db47b838896ec2bb57e3d0b329804b84f32626c commit d5c6f647aec9ed524aedd04a3aec5ebc21d39007 commit 77608faa77196cb0f7af3fd0e3e26051f3de1db9 commit a6c40b178092f41b9d6cc8615697c14b1e5a1c3a commit d87f36a0635edc58430e322f9e04fdf9aae6641f commit 2243f4937ace91437fb39f9b67d309c3d0d7aed4 commit 71579346991927687c76ff76084bcb1f9da410a2 commit 22b1df28c009aaf78e77b20a9cc8d8bf98e698c8 commit bdb3489cfca16815e9a737359e9e90a4af5d0ff3 commit 311065086ee15b4d5d544fba44b66349fa7cd246 commit 634b56b0f88bda4a20f88af2f3d8bb212ed53027 commit 88bc3cd8450b73ad37c9de4b48c315e6c8002f03 commit cb9561d0e3f4393a31fab2034c33c6cf2162513a commit 80ed77f971c3911d6a6f7c537540b4ee62859455 commit 683bac6b00e1158bf3c56dfd9f55ea34acebcf90 commit a3ace75cdb6979e18ec9ad00862445ff71bb8a71 commit 892a57a975c3bd51834ddb0afa5f27baa19a785b commit 9252d33df597a60416f3718b9b41457657c8540c commit 563285c85ecaa1fcecf304dabf87cbeee1ddbc3f commit 2fbdbe958a15e735a24ce33751671e9bf221e70d commit 1ec1944eb50c8de2d96de1188eec9f8b22d03366 commit 7258fa31eabd882f6c8ed4d6d281f6657a33ef94 commit d2cb0b21b8f809ae04a5c30468d3ccff2b23eec6 commit 009e9a1585059ed517b8e02d0afe11128af5ddca commit 3b853c316c9321e195414a6fb121d1c2d45b1e87 commit b60668cb4c57a7cc451de781ae49f5e9cc375eaf commit df529053590d59ca3e06d5b3232586987b61525e commit f461ea5d8dc425325f4c478dfcddc4de8e24fea2 commit 7e2aa820ac24f9d5c1fc39ef5a2ba7baf3384596 commit 208f6265d519643f380c504ee1c1ef925f2c7d5f commit a6e7a006f5d551ee0827059300148e1c9cf4f9a3 commit a32ba6bdca21fd82cacfca2aa4708cbfdac6bc49 commit e283820cbf8092c87a8d6461260d5bc525da72c9 commit 2509969a9862b522d2208e8663057fb227556687 commit 6ed19359d6bd62e993b09a7a565d7a5ce5e114c3 commit b3d9f59f69289569133730e1be019adcd9e06611 commit 4a564e59bfb7732ec168f66ee77bf1eb81ff9319 commit bcf8b616deb8794179e3e9c6233a53f42664afb2 commit a61732e808672cfa8c8c6028bcf9feacb953ef40 commit d12dd1db809a3f298b4ef6cc02ca64fe3038391d commit c17897428e1d25975da5d45d40f53bfb19d8fdcc commit 3358e2ca0ebd6454307bfb8affab35d26cedb9db commit f12dc0d8431e1fa36a3496f6a0a34edba1fea2f9 commit be78311eaa92f71d2f4c0861defaf185d799e19c commit a19c1d00b0d350fb7b75c6c4da91887f66114a7d commit 4895b90dd510b217852b3d118910f57f3f333b2e commit a874aba8bbc529517ed154d88b08e3c437564c88 commit 93cc7aa0b037f34d9a55c58fb4ab6bbd802fa47c commit ab9e00a3509ab7868cc3d4641f45ff926467b38c commit 680a5cd10b9cf4922e182f768d3a534b1a4427dd commit bd3de31950aecc29abc6e554e3b3f6883080c5be commit 0d53879faada6278209883a9eebf39b9e3a8ba10 commit 573ca6fb97c617eef263b15d982dac2f85fd2854 commit e30e6c7b82a18256a1e4ca2f067ce2b05bbc8871 commit 5f1d00420f46774fea45244effc6dbcd53cb6bdf commit 783782a52340e850840c11d823b649e6ba83a700 commit eed1a5c74216907f79f7b1af725e570e95bab0ea commit 92ede25eceb251ec31e1599065b98d681a419046 commit b874c6671b911ffab69f70b298d074a1897b8aff commit e610941c45bad75aa839af015c27d236ab6749e5 commit 7e2a4cfc62d35a7c567e7d85b0af2651cc6b05c2 commit c85bf88ba5100249451151fb1b76d2ed9e40b634 commit e506db5905d18b014aead347e37b7311858e2750 commit 951be8be7d66fc7c69fc2e2f42664bdbedb48c32 commit ed7208706448953c6f15009cf139135776c15713 commit c5365554514178840400b801787bedb567811064 commit 8639bd70497ac96a83ff26b8118afcdc45f1cfaf commit 4d7ba312dd1f94cce23f1f93f33bdf92db090688 commit d9f2303004581f767f3f4acfa3faba205c9991d9 commit 128f8ed5902a287a6bb4afe0ffdae8a80b2a64ec commit c25badd59cb4978bb702e52ee4c5b5ed1cd03910 commit 43d15db1d067e4cdceb0aebd10b9210b97899789 commit fa39f936dbb96626d3345fd8d66af6be6f47ff9e commit aa79d3808e8cf1f5fd0f1c20c2e6a6865b5b940c commit 17ce8a6907f77b7ac97ddaa071d8a1f6e06ce85b commit d5c831566d34924f62082f8b675d35c078f9b45c commit 29b440d20456033091a0376cecdc23c6875d51c3 commit fdda8f3406f98fd087784f9516b3825bb4b5f6ad commit dfcc3e8c24cc1fcdf9e14ef98803e295b5e4f721 commit 01cbf049e10f2cc4cda5570ca8ad3d0334cebae1 commit d9f8a22aaf84be5640e0fd8e2adf0ace61ee3703 commit 2019bf7cd2135bf4633dcde8357c63fdf1ae87d7 commit 2fbc5086975679a5c2ba1bac3ecc5942cf7726c5 commit b67f00e06f36192da513ac80148b000fbc5b2717 commit 35c27d9578356762e7421f16d61b91ab46dfabee commit 97437f475c5be7804592bc258e3936aa318895a8 commit f99a7eb2d11b00a20c9fd6e724c60151b74b6ce9 commit db090ff8f98d8314fab0442a16e7b1e6a33e16be commit 967af863f23344aed4353ddbcaa8d6d6727b34fa commit 79aa0367385ceaf5351ea77ea1fb66136739ea9d commit a65dbf7cded724a5ed4a5e1a718616b048ca0c34 commit a4c260de9b6bb3c54a509d24baf871c497bca7ca commit baf682144ecacae4b98597daa636ce7b2b3143f6 commit c1c04560ac038da28694a04d71958ced32964647 commit d8b746eafc2ccedfc0d6008df7fbcd96e149ae82 commit f2ed8ef31366467930c98494535a044e33a1b3d4 commit 5224f79096170bf7b92cc8fe42a12f44b91e5f62 commit dd4821baa8b6f0abceac43840673b4556bf73175 commit 2bb116c7fd1fcd80c7727be44876070d1b3ce923 commit 64b14a184e83eb62ea0615e31a409956049d40e7 commit f3f6eff85f94e742ed9f34330993cdf91f83d579 commit de7cc1b48fde1abf13324e800cecc0aad5078ade commit 868f4357ed0d1e2f96bbd67d4ac862aa6335effe commit c477eaa6a79da6af7e59f74e69af7d6b3af52a23 commit f83e14011e042adc196f1dac7cb235c70798c231 commit 4e9b1fa5a2757d11a5c40eed2b2b4837dcb2f12e commit 72b3588e27feef96be6993d493c8c76a13bf8eba commit 068001b711e820184553e90f9bf2ae18fb4c2c06 commit 20c43547add3a60c553c90b730e6cbd39c4d5c16 commit caae42f00924498e78da8a960561936aa7eba503 commit 867e24ca4945249baf34ea07ae6b27ca927210a1 commit 418abce203fc2e936bf8c7632a9a429e861f6283 commit cba07cce39ace4c719e63b0410a53480aee6aaee commit f0d540989597d04905253b54d4d0ee53cfe70a42 commit 0ab5d711ec74d9e60673900974806b7688857947 commit d01899d3db2a553268dd4bc03641d9e80e41d67a commit 8f74f68d907d2a41be211e61aaa7c9268f5532e1 commit 6b5033831febbe1c009b6713338cc9e417b45ceb commit 779596ce6a79e187995f04f143fc5ea44a565ea9 commit 91aa9c8f5282922b2890227724467de2f32fbf84 commit 1957f27de290cde5a0d6e1df46a2c8b3e9c77046 commit 50e14a62ac3a56c62c5676bbb8b39245212e0567 commit a142606d5433c9bfc68c0f40ba32c2e05ad75d09 commit 874bfdfa4735cbb1b0d6e0c6157c712a312371a1 commit b63c54d978236dd6014cf2ffba96d626e97c915c commit edf176f48d87fa25ca93f09362707cf5314bf7ee commit 84073e568eec7b586b2f6fd5fb2fb08f59edec54 commit b71a4a2542e1b092b4f11ce6318eaf82619312e4 commit 9b43698af7c36361c340b95c9601c54523da4f2a commit 7f088bef6b0cd976b5d39eee5a4046ddc920ff29 commit 77f4ec2a4111f1dce0c5903d6db7887413a0a750 commit ed0ccf349ffd9c80e7376d4d8c608643de990e86 commit b70ad01a22176b6d903e9cb2f2184c2aa67ecee0 commit ab597bb3760ce2e7a5c48755cacf7df8abfcda6b commit 79af2404e537e0f74798faa0a26bbd374ece27f8 commit f470b218b0bb7c9bae8aa2b4859d9a6bf97d98d1 commit 61b3b2da10dba0ac1633c699c9d305c702b43720 commit c94d13e9d99bc0432cbcc2371060acf5e10cd7ca commit 48bb92d91ae9331138656f369e66b5cab8f0fa7e commit 89bfcd82b3452b6e47ddd9d573add43dd7de54be commit 93afe1583758105ec390ed130681bc7b70371b7b commit afc2f276057ea1eb165c4249d15cfbc1954411f0 commit 87b5e77f02da9444c630b1860b9f384e805eeba7 commit 935ad3a74c7d231b82e7fca15899a5cab4195b95 commit ec3ca078850a3310c9a393866418c85b7e6d40f8 commit d7fd297cb0f19a87c1eab63fdb90f8ce8f03a533 commit e8c487a6b70f060cfeabf3e155c9daafd627617b commit cec24112e125a228d5077eb05ca793398de619e3 commit 068ea8bdc0aacb3bba3d1392ed41cc1116a671b8 commit 62640f251f4777cbed654e59827fccd3b4c94bce commit 5b723b12301272ed3c6c99c4ad8b43a520f880ea commit 574dce2d2414f7d782536fbbef7d20d1cf027e69 commit f9490399614050a47472ff127c67830cb4e311f4 commit b9d7eb6a31be296ca0af95641a23c4c758703c0a commit 92d0c2ebe564f492ea71bf2ca81de5d95d58d6de commit 5559c7ba93fa6adcfe6a39ed80081466d8165e5d commit 9cc57625a6f374174f716f87af3bb5df87118ca8 commit f9806a172070c2d6094b0a9e488c8c172a6f35ab commit 0b208d60adffb6b3dde41841ee423fb5be0d01e4 commit 501867d0d2a6bee3ec18a6471ad99a7a1af47e08 commit b5b8ed444a7fcbf5229f0469f85c752b5192a9b1 commit 181ebed7dcfce21dc152c3b473e3d44e7e94bf27 commit 8dd8ffb824ca7b897ce9f2082ffa7e64831c22dc commit 6b728595ffa51c087343c716bccbfc260f120e72 commit f257879182867979e64ea8940cccd52e9a01759f commit 1d82ef6552b5b3e8450c49fda90a82621fdb8142 commit d1af7b6f91a56081165bf1c1220bf1e0d9699d29 commit 9b693453a4eba392bbb62169243f9513366a253e commit 2f8a6699c90df7616e5dd03cc0c6ea22d589eba2 commit 8c26491f58538ffc647b813070ba493e35a48984 commit cccd73d607fee52f35b4b030408fa5f6c21ef503 commit e62f25e8b3cdd29224c27938addba817aedd4b54 commit 132aaaf01788d5603a1358cd53a95e5367fd612b commit 87bd701ee268a13babdfddea53894a416209123b commit 5189e3126eb136a2cffacc708f08ca4fe86ebcf4 commit a413c99fc1e49db4db27f4bf0f7791011b4e2132 commit 2cff4b9ed6171c61cc50c38b25534f7c3d30db3c commit 6f84aa1cd47cc0feb38da76999626051491316d7 commit 00e27ad85bc9842e2a775765597e6fe4b6beb584 commit caa574ffc4aaf4f29b890223878c63e2e7772f62 commit 5e3094cfd9fb313be3b8fbf9f91e92a30483bc28 commit 4b31b8e34460af9b2eff0d389a6caefcb694a1bc commit 994ea402c767e54af60f1d01f0c16520480466ed commit e78089da45093e0f421b933849c56b7bc21108c0 commit de45f0a3bef63a754839f008bb0cae86d8f501c1 commit 8f0991cccec93665dd6ecd88dbefd7db2b28c85e commit 72935696f516e3d587838a9f0e1f82d251925840 commit 2b72a38c6f9b9809cb09df4fa5aa886aab6bf05a commit 3c0deb1485c49fb282010d1add65514906ed8928 commit 602e604a899a0d06afcd69c693f15c5fd91742d8 commit 55223c3bedcffcb81400db7f1ed1f207d523eaba commit afea229fe10282da14595870b44f82792451dfb2 commit 476e4063022787b5720758239ee4c22fa2495e82 commit 95ee2a8b4b3cd1fb25f7e14e2202da4045030173 commit 64b2a6a054c40c04a4e48fd70002570654381f9c commit 9648f1c3739505557d94ff749a4f32192ea81fe3 commit 0591ee6a5c428c2309f5fefcdbe40d9eb669634a commit 757f9e4dd51644729d27c9b5e56f75681e8f17d0 commit 22804e03f7a5ed35d86721d037bbf52fbfd0369f commit d4a7eac27ec2e6b5fdb64066e967fc7767cd4574 commit 7342bf6530a78ae80b27d9a13bb10a409fdc20ad commit f141e251474d673f75e8c16dbdabeb4da3939d7e commit e1dd4bbf86d5e1e6ca2eedf9ef9ac680dbdb3132 commit cec2cc7b1c4a31c0facfdd0ee7c2ffb7d6a76556 commit 9dff13f9edf755a15f6507874185a3290c1ae8bb commit 091cd9c3abeb68981552557676985eec761d6fe5 commit 9bc34b4d0f3cb368241684cc5e0445d435dded44 commit 02ed904261481460e6084769416e7ca31bbb92eb commit 390a1f8beb879359359ef38d30a0b0ccf392148e commit 8ab62eda177bc350f34fea4fcea23603b8184bfd commit 3d515ba9ead046a0c06a461697a8d5211298aadc commit cb8f00f27ae7a1e8d047f1e2c96acc257f09d51b commit 92937f170d3f49f41d7acb86243ee691a98eb2be commit 4010ce9fb634c6368ebb9dead9ef83d49c4dde96 commit fe93feb5ab0f6eb1a08295dee51b814bf7227799 commit e6ff5ef81170e11dc0f196b0391f708f04fa8c87 commit f915686bd97a9c234602426e6d132b74a112a8d6 commit 94eb6b244c7cb0fd955f712d38a8ad9bfc7740a3 commit 03a62c40544c057a4b0df86b7c4f17da7f7bb2ac commit 7d7007686b0f999f90690d27eb013aba2eb8dc30 commit d95c25668f2379c807e1fa6328954f494c4e2454 commit d5b8da37c017b182e121e6143979bb969833f482 commit 6d8ebef53c2ccea482ed77769b7b5cbb453b7715 commit 94fa115f7b28a3f02611499175e134f0a823b686 commit b9ef89392c2ac694a3e5624cde8f848fbf393818 commit bbd57d16d5ddeb9d8995a6ded81a6879be6af928 commit e460f244fbe847904abd767e4ae093bad699f218 commit b887d5f9b9232b556fa324e77edb92039e626f66 commit f113cc32e35b5503b268f0bd891fa2b7d6d12137 commit 8f7519b2f3a93f6eae76912be66188366cc47aed commit a0c5fd46b2510cb054bd4e1fa6c2f207424c97e5 commit e7c4723103dc58c3d86fc7bc4e03c2ab500ef8b5 commit 0b1a63487b0fe45750528f89ea688eda2862dfa6 commit b784f42cf78b08932b837b5aa15d620520cd4d95 commit fd546bc5ad909f7ee67f90d91d4882f0fabc7edd commit a7f520bfd0551f9fd672b45b9b3cc56ab4275128 commit 5a82b018230b3947a736f45afa95cab434455248 commit 4683af148fe8f94383ed867ac986fe793381e362 commit d41ff22a4eefe2b933a82c0d3ce8ff47fa86e212 commit 78be946dad6d9f888726fbbb5de81b521f156c01 commit 23da6e0f7d5ebdba2b18ffcc228130a33d5411cc commit cf51c8bc5c0085e77ed956306ec7adbdb7bf5ab0 commit 3679b8518cd213c25d555553ef212e233faf698c commit 3a4bfa509eb0f73daa2e30e409ed907f2a7db82b commit f3067604b8de052c6a1c65eed3305cb6f3f9eb18 commit 2bdcb12ff69df5e42eeebb297ddfc110ee8af203 commit f11d9373b61598f6a231dbcc74829c2f11dd567b commit e0adbe73d75e46e3665cf0fb30f2cfc00dd78c04 commit 2e6e14c9e47dac61e341d4b8128184e3e0eb3568 commit 3e6084aee08b108f5cc489be46c68ba56b13e52e commit 10a9accd4842e6098cc27d79d43d7542254003bc commit 9ff28ab43af4cd9f1771779b502cac1bd0aa4264 commit dfd9be42344d9d3c1ff23778923210301ec5f372 commit c595fb05e392a5cd17c70c4fd996b8cc9735f20e commit aa34ca52a325d9a547158cdc8644f4c21d68562a commit 301306a90ed3b2311f7f2eee6fad239d3a65fac6 commit 5ac34ff1a41b05c3b22f8b4ce4bf7181246c8bc2 commit 0c41b9b561dbd81dd3955c4c8b59d55244a80100 commit 29c9b6cd581de79ef848a50d1c9f06cf567bfd78 commit 504390602444a209a52bfdcc59f539e9832079e3 commit a1235a01e0b208d424c5e72ff2e794dd356f74e4 commit 9e148e8ce29dba471d4812c6a60a3e843f3b6270 commit db749b769ff61a42480c377c30df70b8b722041e commit b74e2476efc40b1a4d895befc31fa05bced5f3b8 commit 5ce5a584cb826f1c1f0625a336134feb4e1142cd commit 15fd09a05a66216a9ad772728e51290f6dea1eb0 commit e2573d5f2a5cebe789bbf415e484b589d8eebad7 commit 5b45b1c8b89f84d01fea8939b672631b51cdf95b commit b51178d6edddbfc8cb4da5b5e9c924f2d24bbcac commit 203bcac9bf2c5676bfb0b33c7f2403ea5d6ed332 commit e776a755abf0dbe14001e4db22aa1ee70290c1dc commit 30424ebae8df0f786835e7a31ad790fa00764f35 commit 24c6bedefbe71de94455032f82cdff2694c002b3 commit 7f44571b53fd07e36ae4d2537a6fb40d79b39462 commit 54f43c17d681f6d9523fcfaeefc9df77993802e1 commit d814833f9e0e1fec2286e7d65c386583139c6a74 commit 4f0f1b58fbacc3d4f60e0cf17b01a6273df1d415 commit 45f0ff404cc92cc97569333314b47e1654a0491a commit 0bb319e7a1146e15f1919cfbffe44831c29e8f82 commit 158a05a0b885f456a86720b9b6b4571943d2e307 commit 2656fd230d21ab765eaea24f6b264a744919f13a commit ce075e75e5e3b1274735118f0a417e79d68f426a commit 8054e2f01c2cd287a3872baa02e30ea836ec8070 commit b3e8239882d9f5870bcd78baa342b0cc42c1fbb3 commit b83e1ba9395dd39f6336358dd0cbc8ca6ced21e7 commit f728eb3a5028aa87ec85f0de5c03daee78fdc544 commit d4da1f27396fb1dde079447a3612f4f512caed07 commit a2151490cc6c57b368d7974ffd447a8b36ade639 commit 0904b83e0cbb3dc1b8d5c0b1a5daeca725600eee commit 11ef5c77abc29d78ccedc26d01deb0bf0b2130f4 commit ab011ab6b007378132b242e6a70813aab3afc2c8 commit b8986c889e7ac26c57cb548f8f344456fa925a2f commit db927686e43ffebfc5d1693c1cb4fd74f462d99b commit 8fbf28934acfdac08073a2d5697c7cacae8d3997 commit 80253168dbfd256bca97cf7f13312863c5a7f2e5 commit cefbe724960bb6b40c019569bc42e02327a09ff9 commit 111aeed25ec6bf4d5b4a7b4cb5654f002ba9f795 commit adf47b75297ebc71c53b6dc2d3c55f42b8fb79fd commit 1a7998dab5dd3d11bada7e3921781922082e7fe6 commit ef0a04a010e2a521c927b071d6025c12a415747a commit 9a48ab11714c955456fefdd4ab532d324fbef563 commit 1be6b46f731392267eeebef9d59600ff9999a987 commit 9659dd2b308bde4143855f5b57b0412be466eb8a commit 1c0b1175e6f3729c91835f179eb9c97b5067bb3a commit 91a33f7e20700d58941b38bcf8eca0d0b281ddb0 commit 219aada263f909d61443a8d1196592797c6e0281 commit 2dce68fa325ecf5be7007b9e8b13174262a185cf commit 4801b99588a2e022da50e43ec5f768707de3f862 commit 98529e950d4cd25c05643f9811e2387df58bc6be commit d9a5696e7d52edf68776599f2a38b9aee1382be9 commit 58fb284c52b6262b9bd43420aa39124c39e2342a commit c723b8ee3864bdf41cc560da958b7ef7f6138f0b commit f3d45c9d556bf6174258507e0e10519ab7f5679f commit 5fc83950572a65d33ccd661cd9d8be7ab885d446 commit 691ebb1109c97da2943e2d753add9ad5fc63200c commit 0df0c76cc3fd99d72bc1b18eae25ee3e8fb9d1f7 commit d2cc01e1794bd13199f7568298614f1bdcea1683 commit 6c64ae228f0826859c56711ce133aff037d6205f commit 4a248f85b3dd8e010ff8335755c927130e9b0764 commit 235582ca96214b50fa03ea77a5e85e59d94cf358 commit 3312a4ac8a464daa66b97452ec148b69c5959bec commit 30b9d1b3ef374403652fc10fa36b9a5f32cc274d commit 26ffcbbef712f6fb52f16e6f7d5cde736b80d8c4 commit f9eb742988e20fb86926de8ad18d7e93b53d1a62 commit f199bf55104d480370515bc736418808e5cfa6b9 commit 2d45f66887055e169173345a7e6249ecf3ee7e21 commit 5558d6c23d18f2143f60d7bb387e43a5d8216fa5 commit 95ae342dc939a220b7afbd3a65f7106258f67cad commit 1e7e8e18db0fdd4da4e91597cf4d59265b8f351f commit 0e65e2e6abb09d84a75c51999e3a6cf80f30c929 commit ffb5c099aaa13ab7f73c29ea6ae26bce8d7575ae commit f85b3f806e4d43a0e3e5c042f40b7fe5faf2f6cf commit 7eef7f670086f06b3a461f1b4d1e84f793ed4861 commit c03d982670335d732e5d623af31c126387ae126a commit e22dfdb63df36427067fad6b9bfdc8c08371ab38 commit 38a15ad9488e21cad8f42d3befca20f91e5b2874 commit 9373505967ffc1b7b8331a21ba86ea436c09b981 commit 503725c2d9865533b2894f7363be16c762260b7e commit 6e0c5bf0cc1369df0057bccb3fc1af3b38d07e32 commit fb87550d2517878ebcd112f080865a2dc38e9bae commit beac7709e40ba85e0827ffe0c6f3d6840588db31 commit c803ae6d826e441b65b96133ac573c0062740bc2 commit eee5215bd784eee5f8520f2deebf437c3fa95abb commit e068ef3fd5a3574359b80ff823089ca59057f9c8 commit e2a1e7abaee128020fde54d386ec8959b1e9eb61 commit a8b2b8b06e10224c547d90ea97c483b4de511b22 commit c0bbed9051b6eb293be6128d060bb49e999ef7d4 commit 150430366b2dcb170d309952143e32eb814fe7f8 commit 944823c9463916dd53f365e9aa07f23360968080 commit 4b88ad503d6d2ea11891a355e656bf428ec815e6 commit 505c4857fb13fb0ea88a42b843c91d0b9f8231fe commit 803efd297e315859ac7830445699f01eeb1f7822 commit c674c5b9342e5cb0f3d9e9bcaf37dbe2087845e5 commit f4c1fdb93992ffc55899f38ddebcc0e1c390226e commit adfadb5638bf32e97326ec05ae379be561e13677 commit 87cb6d80f2d196427e64d2e6179ee9b1a3609dce commit ea4ca894a160002f4488324ec39083d992cc7163 commit e393e2aa0ad7ae0d187de93f4cbcfc480d28b5f6 commit 88ed07cb2737e15b7ea412dd8ab37de2397cccdf commit ff6b19d3a0f939465b1e40040c4c4869154bf516 commit b2006061ae28fe7e84af6c9757ee89c4e505e92b commit 5e2421ce79703b969eeb9684cedaa76be5305ddd commit e41d27eaf5485df99f366bf7c5382375bb2c19ca commit 52e8da704d8d3ca8b951fbc39cf8d6bce5c33db8 commit b8cb6ab68674d7889c0dcfac2d542a63b9e36d82 commit e433d6843310a259f0be18c80de26d75b9f7fd35 commit 38abd56bed580c98e4284a578380f5f70634a0fd commit d58b8a99cbb84c1eb3b3613d23c1a328695a9455 commit 1e242bf8bc1b37c74619403d0dd59d0f862af943 commit 6dc0fded62806373855350ec8c3ccb1567ddd465 commit 4affb123033851381dcff4887982f6c7bad938af commit ca6fcfa8d4461c889636ef5dd51bdec96c6122bd commit 91dcfe5fd9d3a59aec4a40031c1eef00b41b8f74 commit b51759661e2987993fb49eadcc262d6a2ab2a698 commit 01d468d9a420152e4a1270992e69a37ea0c98e04 commit 667c7091a39e8b360d34f37aed5f8dd85bdc45f7 commit 1f211a827cbda87bd0ec145a1f44f2615c3f56d3 commit 35366481d0941e9b470ccf09d85407381b5d6135 commit 9dad47c50f9bf19153c092a73eb4721344f4a78d commit f578a37d19c65361e141735cdcb691d3930b8647 commit 0dca257d6dc5526c4c293f306b7b47765987de22 commit f148c143ef3f6e897f4a1012d1bcae3aa240bd8a commit aa8e65dfc75f684cd46d49f71453ea3512a1e770 commit 149d7ba1f8fe515a2a36ff95fa659720e72fe4ed commit 30e58102d5164ce5df10bbff4c9d05acbd12a5fe commit 80e0c2cb37b6e00ec0b41c7670e24f72b2d54ceb commit 957b0787ee5d5c0848e2dde625c09850e1ada22e commit 7d4108e4ceb30a89c63ae62bea284cf42985cf31 commit 57230f0ce6eda6d47a2029b7b3a39cc5bb63fe32 commit 5aa061474b1e0cc9605877190e23a880cf1551e4 commit e6fac6a9c9eb42a9362f9f093dcb8862f2b38383 commit b6901d93cc126bbfbdc6caf5f0c03b82945e43f2 commit 00bfab4457c2b57897ea710a423684979c5b0239 commit 9a1358bb2ce3738826bce0799d47d6963ccb51bf commit fabe1753851c62d0292a39d89a4a8d7f15c96794 commit d7709eb6a197171715f370227173e817a3da85c8 commit 7952fa0d3e187504d509aa32f46d4d430e4eb634 commit fe5e8f07fc25c850e4f46967699a9b29b0ef647d commit 45a3e06be4d351af8f81b43407b3eafa5c75827d commit 1b537e64105dd8f04c8e7d5fbd8e97f9dda2dadd commit 31f5f46043c7e7fa453b0b64ea12073d524e2150 commit 825e0af0d453f18bb84feb40bff447cf59d61979 commit 3192f1d9b61a59d7c82fef187bffa7281fbdc9f5 commit 701920ca9822eb63b420b3bcb627f2c1ec759903 commit 730ff52194cdb324b7680e5054c546f7b52de8a2 commit dc90f0846df4870b6cc8528c31e5c60f18fb68be commit 27674ef6c73f0c9096a9827dc5d6ba9fc7808422 commit c9e9ce0b6f85ac330adee912745048a0af5f315d commit 2ab82efeeed885c0210a0029df93bb95a316e8c7 commit 863fa85e6a01c8b239009825dd9de1f64d7d020a commit f70b88b994a35755f1a065ba4b43d2ad4b401e15 commit 7a1bae874b5ec07ac97f02018dfad73fb9bae567 commit 5f5d08b7eb0ab09700b22bec2adcecb8a1de1120 commit 575d0df6dae46f1b5d26a35ce0ccbc5aafd40e1d commit 36b362f5af1ee23ef502b519c2a8e2d273b2f156 commit 493a7508d737a03b620bb0806e222bd39a9ebca0 commit 90d282582aa709eeadaf33db71e92718c9471e31 commit 9e08564727fc7770b30715fb81348aee54fa50c3 commit 24bf9fd19740df5aedb3bc801206f81dcb4acc4f commit 811c04dbb3dc43304b35688d4009117e28c1e9ce commit b6065ebf55ff2fe3dae98e7cedb6ec4aa3c33f91 commit 11eb648d014eb9e80bf553004551dd6694dfb5a0 commit c8b0507f40deea3d5014b5b4989b6a06ffedde70 commit b664a56e8626264276ee27edf949e748f6be52de commit d18b8eadd83e3d8d63a45f9479478640dbcfca02 commit 8c7442f026d2e36e1185b9dd79db51601d875b7b commit a190f8dc4aaf6064527bb81c07f7cff1904dc927 commit cdc7893fc93f1969038ed333b33eac1452c8d255 commit 6103b2f24e4a9716ca3f5de654964f2a083086be commit 48e9fbd1a28480caf2ac5ec6fcb79ac221735c5d commit f7ddbf5581b474fe4a0a29244acaa1bf72234675 commit 90f45c42d7d7b0ec0fd797485c07fc421c474e12 commit 17154addc5c1a175bcf3441ff0d9598efa1f05cd commit 43d26c4fc6c446d766253d546f0083d78023d34a commit 53b97af4a44abd21344cc9f13986ba53051287bb commit 4fe4ed07c815044755075eaad5fe1815436a060f commit 117f5bb31c8cdb1e8f0b443f2a0ac761bf54694c commit 176c0b55d9bfe6e2a7c8ccf3edaec7c92d856b2e commit 5c8107dc9a9f33a88a380aea79be564597d00663 commit 4546281e8ab215b2beaba8e79975c99859a84a56 commit e17c6debd4b2d2d474074f83946f8c6522587566 commit 5e7f44b5c2c035fe2e5458193c2bbee56db6a090 commit d55957fb299b74829c438f77fe29896e3aed39fc commit 96a2f0f2c8006d338a9647e068a15c6eb299f864 commit 482d7b582d7f9688a5f64ed2424157a76a17f2a7 commit 955ad0c8ba93256c9eeeefde5644b3480c1ddedd commit 1d38fe6ee6a874675ca3bba6b48e69a0e6176ffc commit c1593ddd894d0518fc96fe7f531f3a5c919b8463 commit 60a9bac8ab48ddbf68dc280cd26879583e9d72ba commit dfe3da812d99b40f99ce018152db4b3a87bd86c4 commit f8d81df285a2fa2e739a9e4774e413ac778d282c commit e96902eb8c69fdcc55fa6beee796c6b34613e0fc commit 37114e4d1547ed230706d07edaee2d2b4b3215a4 commit dc593fd48abbea1e840c847c464eabc9c6bca180 commit 4e6c91847a7fa94a6a0caeeb388718b8ae005d56 commit d5109fe4d1ecba04d3f6903ab0421188d1420d22 commit f321c35feaee8dbde551775210ae3d41534b7a20 commit f6d790e5a7fe42706756c7fa1686d08d230610fc commit 1344794a59db2bd44b4919d2d75300fd3b1c2cd7 commit 3886a86e7e6cc6ce2ce93c440fecd8f42aed0ce7 commit bb7c3e9ce2d43a37b699ca379876089e03a756e3 commit 7c916f95f58df401fef4f8c7549aa80a5739b0dd commit 3b8b44a431b76be2645806cfa0494399c3dbbd85 commit df5a07c45c68fd85cd4d1a4ad7892d3a717a4ccf commit 4984e3aae6fa4f42fc24f2745b74509bf2cb0b03 commit 4189f2938d49d4d6b2e2191c86000c2e04ca7305 commit dbede77ce38df760bcdcbc53287e8673fa65982a commit 3741584519dcb780c38df502dd5e4cf7cea4d9f2 commit d8ff38d8fcd0a7bb66d17ec689135239aca78532 commit 53923e62afad6f52b2b931a74d2ee10274051b28 commit 5fed53c7983654b1658c49a030ac86bba7965fde commit 305f098020920f9ea6ff9162ee46392f4d67e67f commit 76a52f36b636cdff6b5b18f13daf05005e4b0b57 commit 4a897de1d607c15ebb9aa11a424ec3f3243304a3 commit 4185f99094d50a2f402153ff8922bc694f5f6d96 commit e7145aaedd55b19ae4e8bd25cbd4ef8f415b6b89 commit 6e899860f557fc60135506242cc3fb705e64b718 commit 9c1e260e97606330518a78422ae28d9d56ac87d6 commit 84ce38c7bf7a19fb1f9cc61181e830b7e04dd51d commit 32685b32d825ca08c5dec826477332df886c4743 commit 44ca49f046f89a97ad319372b4fdbde67da1b6b3 commit cf689e869cf0339c387397c7a6805e387594656d commit 22f87d99832650d9389b0b3d08f3c970afc53f10 commit 6e6faf7a8364c77f4021f44043a5a5cee91f7025 commit d510eccfa51e09f5e65621a2e8d41f58a8dbd3ba commit 69691c823531c36c7283ecaa040e99e9c12ece07 commit 8718ca1dbf497c302df989afaeb82f05f5a3d961 commit 2e9fda82c98b1e417b90ff5a2f8b8b96cac06fc5 commit 67a359d85ec2679cc8e11b16844df960e3b27c24 commit b38c074b2b07349097d824e3c6c49b5ac8d98910 commit 65722ff6181aa52c3d5b0929004af22a3a63e148 commit e7031d8258f1b4d6d50e5e5b5d92ba16f66eb8b4 commit 0fe382fb82dc6cc6eaba6534d038dc381e2b17b9 commit 6f172ae59a7577dbb73e2a8da18697ba8dc56341 commit a03b288650abf2a92d5ecdaa737e3d04a2a77984 commit a29d44aea1aef0bc58d4951f2ddbe5b22d9a2e94 commit 85ac2021fe3ace59cc0afd6edf005abad35625b0 commit 72a98763b473890e6605604bfcaf71fc212b4720 commit 436afdfa35dc8aaf43959593f6c433d0ad29abc3 commit a0248d543bbf2a977e7e6d9966ce8d96f6e5c358 commit 10499e4055949e4682d2e7c428365175e99e0800 commit a18112ae72d693bd4eb79f2ec09b536eeacb902b commit d853419f5fcce39553ce0f6837fa122f113b15b6 commit c791d75a64f5c628a9c9a7d9b9ec01ef0357e6a3 commit 906fbba2c9d48678fd182d0de4dd193d9dd0cc9c commit 3a0625813bacf12bf188f8242b42b508af28baa0 commit 2716bc822e2325efed0731d6a6a7dff755dc34d7 commit dd15640bcee5a5fa74fc52557dd6220f48b01116 commit a91b402d50072e4801b231925f33574f90e562ce commit cfe7c679412f14811cb3c4119c8025cb97564c48 commit fdf0ece6309d90dc0f9388001239cb2d12671af3 commit 8476269f758221863c01a0a6cccb0d75ec5d60c3 commit 8c0f11ff3895ec96c9523ac607dd51f812ab69a8 commit 4e2f50e2306fdd0e5fc7db3d9a452ba1327b787e commit 9527b9caf82b040e794fba2667f6d8a85a793bb7 commit 3f543552846b9ae47c8442af1c506207bdcc00d2 commit faad5ccac1eaae584f9ac2ea66278bd137edcbe3 commit bd4b9bb77956639e6d9618ed306cb2264c69ba49 commit 58398727e6f4955f2781e93517b8f0a3e8f22e75 commit 28b7382621f0a83f1db795f36ee0fee6f66c10e9 commit 508a47d434bffde45ca3cdb8ece186f28f9d84bf commit 1cbd78879b5f889355b2a6343ea5db7e633438b0 commit 07d01469325c87aef4ab02ad4ec31d73321665ee commit 606d5877592b0a6f945a68399c870ba9d2a9ff7f commit 426c89aa203bcec9d9cf6eea36735eafa1b1f099 commit c94b731da21f10086a9e52d63c21c730e3f6c939 commit 3a84fd1ed53582b31e843a152ee3219e9e4ccb8c commit 278da06c03655c2bb9bc36ebdf45b90a079b3bfd commit f11de8611fd6bb15bd979bbe5de0c4d59452f8d4 commit d14eb80e27795b7b20060f7b151cdfe39722a813 commit c6e90a1c660874736bd09c1fec6312b4b4c2ff7b commit 1d204ee10817aed6666e020ef1b4c643d68bef11 commit a860f266a0e19f271b839451d291a6acf6ddcfe8 commit 9cddf03b2af07443bebdc73cba21acb360c079e8 commit 1937f3feb0e84089ae4065e09c871b8ab4676f01 commit 3ef8b5e19ead5a79600ea55f9549658281415893 commit 00f4150d27d2c01eaeffe1091fc311a7c0872c69 commit ad9c6ee642a61adae93dfa35582b5af16dc5173a commit c5c948aa894a831f96fccd025e47186b1ee41615 commit 9030fb0bb9d607908d51f9ee02efdbe01da355ee commit 5662abf6e21338be6d085d6375d3732ac6147fd2 commit 7344bad7fb6daa4877a1c064b52c7d5f9182c41b commit 3ce62cf4dc3b01d1cbee1293049ca5d4c7d6d749 commit b14ffae378aa1db993e62b01392e70d1e585fb23 commit 21050a39a3b676fbaed4ad6c5871b917a91abe9d commit c73c3576a2227492b448f9be41428ce6a0b5855a commit 34af78c4e616c359ed428d79fe4758a35d2c5473 commit caaf2ae712b7cc3c7717898fe267dbf882a502ef commit 64a8f92fd783e750cdb81af75942dcd53bbf61bd commit 519f490db07e1a539490612f376487f61e48e39c commit 32f90e65251981f061eec883b0fe9e75d74e9665 commit 2d505453f38e18d42ba7d5428aaa17aaa7752c65 commit 60d61f4ed6ead43ad2de31ebb8d1d27c57290529 commit 1647b54ed55d4d48c7199d439f8834626576cbe9 commit b818a5d374542ccec73dcfe578a081574029820e commit 0d8e4eb337644cab528ff3844675d58496ec22db commit 93dde6ccd66d29502506e95f568fd0f49d575d27 commit 3107e1a7ae088ee94323fe9ab05dbefd65b3077f commit 5e8a71cf13bc9184fee915b2220be71b4c6cac74 commit 6bf528ec91fb96e186461215c8f76265c5a35250 commit 7d56a154e22ffb3613fdebf83ec34d5225a22993 commit bd219322dbb41cc7c753da3a6936ce09d502f113 commit c9fbf6435162ed5fb7201d1d4adf6585c6a8c327 commit 02fc996d5098f4c3f65bdf6cdb6b28e3f29ba789 commit e5fc78252ccd8dfc260f87d83905e9dffff6d975 commit a572f7055067d95455850fd242d8b54ff5786cac commit b7dfbd2e601f3fee545bc158feceba4f340fe7cf commit c5650327aba02d15cbd6a1846dcde9231493d549 commit 6ea239adc2a712eb318f04f5c29b018ba65ea38a commit ebbb7bb9e80305820dc2328a371c1b35679f2667 commit 5f3854f1f4e211f494018160b348a1c16e58013f commit 7057c81773ac32fd0dba00e2bb869928f008d3e2 commit 609910db56e72e87755d9745442bfdfa009dc61b commit 0dc386add50b07e1cf9341b4e6e4fea77295c98a commit 15f9cd4334c83716fa32647652a609e3ba6c998d commit 50560ce6a0bdab2fc37384c52aa02c7043909d2c commit 148a650476955705482dd57e7ffcf105d8b65440 commit cb7cbaae7fd9cee64f19cdfd89d097d807b884f5 commit 266d17a8c0d857a579813ad185cd1640b0d6ccac commit a701f370b521b2ed0654a9da7cf424b3ff8fa73d commit 21d139d73f776aed1e86f3175a1e9fb8a10930c7 commit c42ee39c1e78224d3a81bdbe0600abe4581226ed commit 67bae5f28c895f8737a1974c3f31cf12b9170b14 commit f444b2d15f7a025416ace9ec298f0b93ef68be68 commit 38d4e5cf5b08798f093374e53c2f4609d5382dd5 commit cf5c5763eb531ff5120111ad300126e926fb5a56 commit 13043d1a12c54d8b6605bbead5e177e9fb98a287 commit 945da79e6dd058be70bc47442dce319844e14daa commit dda81d9761d07541c404dd5fa93e773a8eda5ddc commit 862a876c3a6372f2fa9d0c6510f1976ac94fc857 commit 95707203407c4cf0b7e520a99d6f46d8aed4b57f commit 58e16c752e9540b28a873c44c3bee83e022007c1 commit 83e9faac9a387894e945e7f33c2bb7a9c348257c commit 2944dbedc7e167221fdb99531f7b0cdbac9ac696 commit b2075fce104b88b789c15ef1ed2b91dc94198e26 commit f4346fb3edf7720db3f7f5e1cab1f667cd024280 commit 4052287a75eb3fc0f487fcc5f768a38bede455c8 commit 96f2b7a3571618a1c8aed694c9e668014c70898b commit ef1a0808a2e20c58d166c5707864fba515832bd7 commit e79a2398e1b2d47060474dca291542368183bc0f commit ca1198849ab0e7af5efb392ef6baf1138f6fc086 commit ebc002e3ee78409c42156e62e4e27ad1d09c5a75 commit 7e8906dc2689cbf562ce520cf4a8ba5b495db0f6 commit 6e93d5b0333279d8968a2972065f47a899fb58b9 commit 879791ad8bf3dc5453061cad74776a617b6e3319 commit 28c25238898a242c58bfaff3f46a006585c2dd94 commit 2f25d8ce09b7ba5d769c132ba3d4eb84a941d2cb commit 72cfb835e56f0eec18f934095fc1a52df1815f0c commit 691b592abb9a5f2b331969393bc06fcc8b564d3c commit dc7d19d27d019d223e74f2f47ef47e778781cb52 commit 995f74807329c97e0aa7449c7a8345fce978a2c4 commit 88711fa9a14f6f473f4a7645155ca51386e36c21 commit 1acb34e7dd7720a1fff00cbd4d000ec3219dc9d6 commit 022074918042465668db9b0f768e2260b1e39c59 commit f8e6b7babfeb40987e946bc1427609a9976017fa commit e4f1541caf60fcbe5a59e9d25805c0b5865e546a commit e3cf2e05441a2c5107fbffadb5b7943113ee11dd commit 887f75cfd0da44c19dda93b2ff9e70ca8792cdc1 commit 4593c1b6d159f1e5c35c07a7f125e79e5a864302 commit aadaeca46ce54af9f8f494792a1ba47a6fbda7ba commit 8e401ff5380a921c309d4c73cacf27b0bdb5f168 commit 9df1e3ff60241ce3fb26db75933970dd1b871213 commit bb02330408a7bde33b5f46aa14fd5d7bfe6093b7 commit f92055ae0acb035891e988ce345d6b81a0316423 commit 5f18c0782b99e26121efa93d20b76c19e17aa1dd commit 298799a28264ce400d9ff95c51b7adcb123d866e commit 169466d4e59ca204683998b7f45673ebf0eb2de6 commit b089c0a9b14c354a0c3a421e09af3208cb7c232c commit 94f4c4965e5513ba624488f4b601d6b385635aec commit c18a2a280c073f70569a91ef0d7434d12e66e200 commit ed911c9f9dcb26849fa688225f002ef2f2c50cf4 commit c05d8332f5d23fa3b521911cbe55a2b67fb21248 commit 4ae4dd2e26fdfebf0b8c6af6c325383eadfefdb4 commit f7e1089f43761ca221914aea9a755b23dc7cbc33 commit 7c6b6e18c890f30965b0589b0a57645e1dbccfde commit f567656f8ab82e43815d8d071d9864941b613a82 commit f95af4a9236695caed24fe6401256bb974e8f2a7 commit 65e54987508b6f0771f56bdfa3ee1926d52785ae commit a71849cdeaec4579696e5e1c45d9279f7b7484bd commit fb8cc3318e47e1a0ced4025ef614317b541147e7 commit 9d9f720733b7e8d11e4cc53b53f461b117dab839 commit 841e512ffb64898db6322c0619f6bbc41266d86f commit 19965d8259fdabc6806da92adda49684f5bcbec5 commit 3dfe85fa87b2a26bdbd292b66653bba065cf9941 commit ca5e2f4d6b677efa3f43a6790777e46dcf806e4d commit aa482ddca85a3485be0e7b83a0789dc4d987670b commit 9b9bd3f640640f94272a461b2dfe558f91b322c5 commit 87fd2b091fb33871a7f812658a0971e8e26f903f commit ab244be47a8f111bc82496a8a20c907236e37f95 commit 3220c3b2115102bb35f8f07d90d2989a3f5eb452 commit ef3a6b70507a2add2cd2e01f5eb9b54d561bacb9 commit a56f445f807b0276fc0660c330bf93a9ea78e8ea commit c65b364c52ba352177dde6944f5efaa29bd40b52 commit b7c15a3ce6fea5da3aa836c897a78ac628467d54 commit 5005e9814698f47c5a3698fcc56c9f5e6f1d4644 commit 370704e707a5f2d3c9a1d4ed8bd8cd67507d7bb5 commit 1d6595b4cd47acfd824550f48f10b54a6f0e93ee commit 3059d9b9f6aa433a55b9d0d21b566396d5497c33 commit 21d1d192890ced87f2f04f8f4dea92406e0b162a commit eb7bac3973d209e5227d1783676362ee5a8a7127 commit 54395a33718af1c04b5098203335b25382291a16 commit 89e96d822bd51f7afe2d3e95a34099480b5c3d55 commit 6e03b13cc7d9427c2c77feed1549191015615202 commit 7123d39dc24dcd21ff23d75f46f926b15269b9da commit 7b1d6924f27ba24b9e47abb9bd53d0bbc430a835 commit 6e4a61cd39685476f7ea74e75fb66666d541050b commit 64eea6805ecf7092a113bdb4cb73860430d39de6 Signed-off-by: Karol Herbst <kherbst@redhat.com>
2022-05-23 17:17:03 +00:00
WARN_ON(!num_fences || !fences);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
/* Allocate the callback structures behind the array. */
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
size += num_fences * sizeof(struct dma_fence_array_cb);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
array = kzalloc(size, GFP_KERNEL);
if (!array)
return NULL;
spin_lock_init(&array->lock);
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
dma_fence_init(&array->base, &dma_fence_array_ops, &array->lock,
context, seqno);
init_irq_work(&array->work, irq_dma_fence_array_work);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
array->num_fences = num_fences;
atomic_set(&array->num_pending, signal_on_any ? 1 : num_fences);
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
array->fences = fences;
array->base.error = PENDING_ERROR;
Merge DRM changes from upstream v5.17..v5.18 This commit was generated using: rhdrm-merge-drm v5.18 2043115 Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2043115 Conflicts: drivers/gpu/drm/drm_cache.c drivers/gpu/drm/drm_gem.c Conflict resolution: diff --cc drivers/gpu/drm/Makefile index 301a44dc18e3,308c302c58e9..c2ef5f9fce54 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@@ -134,4 -132,9 +132,5 @@@ obj-$(CONFIG_DRM_TIDSS) += tidss obj-y += xlnx/ obj-y += gud/ obj-$(CONFIG_DRM_HYPERV) += hyperv/ + obj-y += solomon/ obj-$(CONFIG_DRM_SPRD) += sprd/ - -# Enable shims for the RHEL DRM backport -subdir-ccflags-y += -DRH_DRM_BACKPORT -drm-y += drm_backport.o Commit list: commit cce936f4fff736927ffd53a61d7b2c6a1064e0c5 commit a908db6d98782e8d9a8d545dcc74937db5bfac04 commit ae361eb07e9b498bc224db81113118fd28e35f6e commit c2a9682d2214e834b493c454e38809e571bb3045 commit b8ca477e51318d28f7514abfb5a369e11848a8cf commit e74c6aa955caedd06b5ade58e31e33338e4efde6 commit 637088a21e204b129a03dbd59bc0cd80d0292651 commit d0c0cf22d7071e9ba8d30be91723e1d997a07970 commit 49d535d64d52945e2c874f380705675e20a02b6a commit 11343099d5ae6c7411da1425b6b162c89fb5bf10 commit 60c9ecd705be3a28f79d70ea21c3939db668bf46 commit a36e7dc0af1cc7e5eaa89136c35a5305fd693731 commit 007354597d5c12a8d44a34c66a2e1a089bc7d3d8 commit be5b6985fbbe6ba9580351b3c9168c84e51bee5c commit b96a1d8c5189452d80551f2c38ef50c533c19669 commit 3edcd504077c02c9e6e7b687a43849eacbb8088d commit 9543e3c0511da64a77b1af3ab1f7199c39226e1b commit f21e5fa191be05616e3250723c5c4cadc9baf84a commit 405d5382ba083e6e54df354909b1583f1e3cb0db commit 70704fbf67ddc07ffc81073a3af1f7b2171697eb commit 943e6a8beeac1b676265f2dd81a69d7bede5e41d commit 7e28d0b26759846485978ada860ef4a427e06c8f commit 5995aef006698bb639547a439f47492de5c37f05 commit 5664e3c907e20523cda622268716867e77648d0c commit 6844a28885183a5a2af92a8d315a59f7a0e668b9 commit 825ca9ed1c9f5516b30292bb1c7ab648c2a01b92 commit 980f42e7d57464af190d05b9cc0bc21846734f48 commit 798c5daf3cddff3f39c5542a50a2dbd83879b05d commit 249af7242af72a826dbe93f7058237eee4fac1d6 commit a88afcfa258672601eda5966439d2fc310a34cb7 commit c3c2ac4c77ee2191ae2f1e8d140a59e852104e3b commit cbffbac9c14220b8716b0a9c29d72243f6b14ef3 commit 62eeb9ae1364cd96991ccc6e3c5c69d66b8c64df commit f7747be1410321de8a92e340c5ca6c18a59770e9 commit e35d8762b04f89f9f5a188d0c440d3a2c1d010ed commit 0b464ca3e0dd3cec65f28bc6d396d82f19080f69 commit 6edf615618b8259f16eeb1df98f0ba0d2312c22e commit 5f4f958a0d9dfd7a569c56e76840e39b0c434378 commit 3b26a2916844cf2680de10206e193e1d13f0eb88 commit 50d76e3d3ec0c18dbe2c801af676f7e7cbedbff0 commit 7c442e76c06cb1bef16a6c523487438175584eea commit 7020449b8f5ac0f7444a584645edec02f7168f1a commit f5f05ddc37e0445567e4a2369b73ecf9ee2e187d commit 816e3be74f16f3064e74acb3e6ed69e27f14231b commit 80dfdeb75028084f42a81a4151a986c56aeec1c1 commit 9294914dd5507eca56566c470c56327f46dfd4fa commit 96211b7c56b109a52768e6cc5e23a1f79316eca0 commit b146e343a9e05605b491b1bf4a2b62a39d5638d8 commit 848915c35e22d36614f2b0aeca6ebf7361e8e204 commit 204129a211fc486164c25e6082941e4fe3ba889d commit 5c24c9d227e9bbcba509752a32b3da5faa149aec commit 59dc4632e35becca1186dbab83ac7cf8603afaa9 commit 17190a3492bb20ce1cc695fdadc7e4f7ad5b44ff commit cdeea858d8df9891ed75415f377b3564f899a659 commit d14f0c205302648df29c494a1a81ec3d897a2552 commit 91d8531393be96b4a088290cc67233b2e6ab072f commit 506d9d7414cfbdce02b7126fc8644f04ef234680 commit 59a39fcc21c56845e74bf60c1177925bb0255de4 commit 5313fb2c779f74bc5083e9d3738d9b2c2ebe0aa4 commit 814d5c51f8966895bb20b51c886bd3961f76f3f4 commit 5edaa2b9748979b08fcdb2f65781aac39e6ae011 commit df2d385cb4132e945d5bc17d387d0fb6f5d4d66e commit 9354417750e51c3d120cb6040b1b69f70d9ef43f commit ffa3fe080c77630f87436a9410475fed1e684612 commit 191be00229ef61f9ca0cfa39a09dc71eaf90e78d commit cd1637c7e48043503f8ca6d441568e3889998965 commit 607a264ea7016b0f811f82c33094a3c2eda5968c commit 3dbc84a595d17f64f14fcea00120d31e33e98880 commit 658a0c632625e1db51837ff754fe18a6a7f2ccf8 commit f3cb4a2de5410147b53e53416a3af0ffe26b5f4e commit 903e0387270eef14a711c0feb23b7bf62d2480df commit ab4911b7d411ab2ef3b38322178b9138e156c393 commit 30598d925d466c53c4c218a58f80e043cfe9b085 commit 0af2e827b6acfd22b7794c148943a3ddfe5fbb65 commit 2564c35df5b81a88efce965bbfdcf32c1a1bc834 commit 23d639d7b6df487d59ed23b0c9c04dfd3f909fc3 commit 2ef97818d3aae3c89a6cb1e6b8cd204156434aae commit db583eea5a820ab4afce6420aae61be9be55d05c commit 386e75a41478d8d70889f0d1856e782d610353c0 commit 7e470f103d7579836a536c15862b70118379f7f4 commit b4435717f53b776b770e7a025fd84688e53dcd5f commit a9e4fb51425f680f191bb65c2778cea31bf058c7 commit e1a4bbb6e837d4f4605dffa9eccce722fc59b9cc commit e8c1f36157ce0bf8c150059c3f9f573c13a186df commit 583998c5e8cb3e7a151dca22303b68cbe65c64b5 commit 39a2bd34c933b00f7c7ada923c212b3ff826fb5d commit ebf3c361f43b1c1fd254be5a6d12bd37b922e6b7 commit 2f6b90da919208621725d1703c0391f63724fa62 commit 950505cabe517ad40759cae6f88f33f0bdfbb7c8 commit 60dc43d1190db1bf80c696ab4561ed53f8f42f33 commit 55a9c00021e2393393a26e0833fd66e73d630117 commit f199f71f20916ddaf2bfc4dceea33c776d414428 commit 53c8283ba9b46559c12fb9fd679cbaf72424649e commit 77b6f79df66ed2919dedb834edea630f40079f12 commit afd088ac05f120d22e06f8404b2672f5841d0da0 commit e9f9bcd598e2b6f3cfa617f8e38f83a59738d19c commit cd5d2fdb045fb31a152cbb257e10da78fa4f06ac commit e0d47fcff1f4df458b9c8824a5204adcbf624ae7 commit 3e5cbecb9aa88f00016b61200d4126f727fc71e6 commit ab076d8d79e1e5eb3960e0a489f7a11d729c03bd commit 2b25a93bf07c6b68dd9e2ee427e228cb961f7961 commit 202b1f4c1234b34c15e51acc9c43e613f509f587 commit aa1d6068a460dcb21e69f6d65fa7d3ab483d547a commit d0864ee4f81fd8c782fbb382f80d6c9c531f2967 commit 24ce4d6d2ca626a733f70b578c4a298b200a69de commit 43571e15c057f69734d0ee3be45fdf9e4adee614 commit 919606f5e7d8cfbdef47ab7e24bf37cf86dd1512 commit 3e1f4c491559998615cc8ee287c673f0f7e66534 commit c41aadd26496db9c21deb612445801f3e44ee8b2 commit 5512445c9b64a2fd78f37c41796745d72c02e9a3 commit 1b277c892940af1d06c2433f3f3a39d4bd146c89 commit 4642077775a65566c0d25e63bf918fb5e5235163 commit ca1777797ad84cba3a72b73f74bd80092a7aa220 commit 0b782e669298e30853e235b963fdebfdedf45383 commit b17639c7f7fc1fbb23b761c38ba3233cd5d082d9 commit 38bd13a0b151093f5f26c95ee106659008896995 commit 3f8bd465a6f083a4112d82c18f4a85c9052d2132 commit e592dc320559ebc8166c1dce609faa7e4f3d6da1 commit 9d31993451f6bb4059a9b9eec4856b2225e36df0 commit 0f5d32617246810d00dae08c51069873a77b60d1 commit 7b1534188c25948f4ce56dc4af9d8e9234e97592 commit cd6e4c2fbb004f06d9c552761c171fed82ab5225 commit 2616be2eac4b1c361ece55dfd8f942dcecb25de2 commit 6650ebcbea1314bf91bf161802ecaddbb72651b5 commit 5ec7baef52c367cdbda964aa662f7135c25bab1f commit 5ff59dddacd4738edcbd01847d9df7682348cf86 commit 93e97b05d5816ec96bf209a50023cdf9fa750a55 commit 1500296576464dd4f8f7ba409069591648f4e98c commit 3a5d604f90f90a09e35ccfdeeedbadfd06b606db commit 6a8cf6349c7cae12f072889991a2aa0a1ba0bd32 commit de05abe6b9d0fe08f65d744f7f75a4cba4df27ad commit 8c2d34eb53b96755b33a125c65c3e807dbe430a1 commit bc143d8b8387ff0a22e4ef8e2375e63aa24bc311 commit 79c65f3fcbb1288b84473d45e6d001820a971d54 commit 13f5dbd6e3d9a4ea0a8d061bb2a2f19bb21cdacc commit d448157665870bfbf9b6baa5991cd9d6bc98c7e6 commit a79110f2dc0194326d2e8c2cf83db6c784c37e97 commit 28a31774b050261371953401e8072ae15200c91e commit 84176663e70d93836d30d2a480a4201c7f790b42 commit d698a2c4859de2d4d42d2f3c3806d6dce821d663 commit 6ddbd37f10749830e0a6ddf839ca4313a007d3f5 commit a627967e803e58c5525ac92a4af0d15379189a32 commit 7689dab48259073ea13d64d32365b77860b84e7f commit ebfc253335af81db2e40e6e8ed17cd76edf9080f commit 837d542a09cd533055423dfca7e621a9c1d13c5b commit 3bce90bfbaa8de63bc500bc5a4dd262ed8e548ca commit 61d7d0d5adc705f833d8a5dbb596253842486220 commit 3712e7a494596b26861f4dc9b81676d1d0272eaf commit 1a408c710d9e273a22050b0b7b0c131f92847918 commit bcf19fdd507fb679bb6e1b8a119961f32b6cbb95 commit 54c73b51df2958f564b144ce86f15a85e227db90 commit 685fae24d94fd615b7058832fcb437eb588f4860 commit 6492e1b07c03397f85bd6dc0e230ea6cd9394635 commit 7cab2124058d2f5f048f435a4631e176dcd1430d commit 8b0fb0e967c1700bd729ae54b6f229501b8587ec commit 6c2453861f48e4e779cafa01c09e78ddc2c23c6b commit 6d76e9049ad92be32704106668c34493c3e4c0d4 commit 5e67bba301156c85251f49df19f5c695875814d1 commit 2e54fe5d056e7dc82988ef64ded3dca0ef954f0a commit efe17d5a217e6b7dfd16c80dab522abcf2edf1bc commit bdc4292bd3b4337985f716be789b08eef921f7a6 commit b0e2062dc8978869c1dd96d92027f74b361d5eb7 commit 22d4ba53b1c10de6832e588f01d916e24306f6a1 commit 7389a5b837cde5e5cd771619e9f006ae102f5d7d commit cb5cc4f573e18deb7d9143de0ccb62c08181bc85 commit 400ef298f400854544e062023671e927965bc9b0 commit 20c5e425d36a59529f2e6a77ba21d009cdfa8ffa commit c4381d0ee81930097e94e55d1c23f85798ffd093 commit df01fe73ee98daf00c94189967550bd2d2098912 commit df4f0041c6ef497e598a67e367db835489162754 commit 69f91d32c6632e09f0954e690d61ac4921dacbd3 commit ab3b9de65bfeded1d4646c9f66897c163e89abd8 commit 954ea6aa1545a13036851327b4ed251fa7ab2f22 commit e3d833f41c46b8c59c4af53897a6619bf667ebe5 commit 1613f346f86b25121aceb941d03ca927e57af20c commit a85d70a8b4813a955d45b062440fedb9be701421 commit fb825b651de98cafef13e07673eb72d5e2ceb4a9 commit 31425abeda7130e66e61dbd8468502061413631f commit b3523c457380c23cf28d4ee1ef60da337a0a45c0 commit 06cf9bd61a7452df375f212881d9bb6b3c52c3ec commit 5f0754ab2751d1935818459e8e71a8fe26f6403c commit a8e6398ffe171c84b1c03a17eb6d432dc5f703a4 commit e8521d0cd984897b4fa58e7837afebd04e44f0b3 commit b0641cb8a1deae38990cea783d2a1117255f59f5 commit 803abfd8dda540b94ea3c754a70cba69d3825995 commit f4319f72a9bc37c948832c0ef121460ad7c1573f commit dfacce59553b2a65f4357ba6019827eb4b9a0eed commit 3681eb24a9f14e001d05f8d15d2e07a96abef8b3 commit adb9d5a2cc77e8aefe98fe4c11656c5b7025c248 commit 5b529e8d9c387a34ca2b8008dc65f55d539b3ef6 commit 032a125904995985334766911de9e26ee2bbd646 commit 269332997a160b3785690a32d2c5496bce7dae51 commit 71b59439aa03e8de022c31ccbf9aa9bea4578971 commit 12d7d858e63d0769a91aab218828e0526c0ab49d commit 2f609faf5bda9d828ce0229689227ba2edb1918b commit f6bb74e07705579f83252f9c3cbd462d8084bb4d commit 348abd4cf353abb3aca8dc6ebb80ee84acc4f64e commit 366714b0883f0411a4b142b1f7cefc6b184183eb commit 4682a6d99638bb8ae62f00b9466849065c91fd1f commit fee076019d0a3634aeea8df55c1f7ae35ca31d18 commit 2b6dd600dd72573c23ea180b5b0b2f1813405882 commit 6b79f96f4a23846516e5e6e4dd37fc06f43a60dd commit 647bfd26bf054313305ea9c2c4a1c71f3bbfee63 commit e849f7e708600a9d7567ae22f945b5b01d7f7401 commit 6945c53bc712cf4a28a46fe46c2bd8526ea261d1 commit 7e00897be8bf13ef9c68c95a8e386b714c29ad95 commit 0f341974cbc2a4efe074dd24c153e439b8430afe commit 294996a98a641254b72732f3cb36d51f12a6f3d9 commit b5cfe6f7a6e17c6bc7c802d382cf22c4dc405477 commit 83f2726cd9c3b92589f850cd4935ebbc35eee840 commit c34242eea16f7d973501267142dd340cad3caeec commit 3ddd0c90bafd9f2ae1ac9f1e67581537273dfed6 commit 79c0462159a1fa3810ae1869a5fc9fd7782b6b70 commit e475986f182156496fa2991012ca51956fe90bf7 commit 03f6fb84bd0e98a7b929aef5f308b8e3f2f24a0d commit b6efdb02d23ef615464cd0077c211b40a1faca26 commit 4f64ccf4f27c89089f3206446e2158833bda4795 commit d622c094f8fe7a77fda613964ffdd9a248d2550a commit 8697a19ee955e32fe298b00feb0c61fc75cb5261 commit 71b6c4a277dbb2594c260ccedcafaef5154b0da0 commit 22c16d251a79c3156d17627810557878e600dc6a commit f3527a6483fbccbf569f91d9ee9c561b14d86a9f commit 47f29ac1cbae6e18329f0066f7c8d5d2346a5bce commit 7aba117ac9e01dc58afe29490f50025add9d388b commit fd9048dd4425a9dc252153c8b72369f1969a35b3 commit b4c55e525461a9a091421e952d1e052127d558a8 commit 82dcd8eb357caf4b16e6a201f6578b6e8795e541 commit f369e4eba89a6fc1cac619db86c00a964d1fc0a2 commit c1a20f707ac33b1fec1d78bab74e07656c237801 commit 6421c49567d55b1ba8d9389e5832297398a51a1c commit 58c69b53aee24f47741b150e309567d9b38ecd6c commit 9338cb719f0f0b43ee1ab39d17214f9b388c7fbf commit 047db281c026de5971cedb5bb486aa29bd16a39d commit 56ca49cf6004ff328458954dd3d0fcf0189a96a4 commit ce0bdc62e80d40caa346ac4840a20769d5bd1ae6 commit 552b7cb0eed12c184b3bdfcc262e96a954a2bc86 commit 4bd8dd0d61f961e6c13cc118d4ebbdba57f8561f commit dfd6879b98999867ac860a51348b00b5c0c2cafd commit a5e7ffa11974d90d36f818ee34fc170722ec3098 commit 4e68354667716e62089ce3032a3c7e1b6c07e669 commit 41f8aa5d6a8aace5d33e2d908bf5fdc833456a5f commit 6387a3c4b0c45a3932cc06daaf15727e7f83be43 commit acde6234f65bad89a2e27d3e8dd2daf680862545 commit 75ab2b3633ccddd8f7bdf6c76f9ab3f9b2fc5d9d commit d7e3ea83bba81d6d9c8f80c62a99b018165f5808 commit d39bc5c5e10a648c7de9558592816474f45a374d commit cc37b88b02fb590d08dd922ef1c0f7ef3125bba8 commit 028a73e10705af1ffd51f2537460f616dc58680e commit bcc77411e8a65929655cef7b63a36000724cdc4b commit ba3a5ddcf1e5df31f2291006d5297ca62035584f commit 8172375ea95ab8b7f7ea0dda617ad87c439a14ee commit 52506b099e1baa204b56b170f40f680ffcabb4c1 commit 8638b4d8ddc944ef3c1899cb774cb07de0b416f6 commit 54e67e5a2326b99c1461e29eb022e9d07a419abd commit a32762d1db4c13db53ab9005a24fe5465ab511f1 commit 2075a734ed990c50b6c544c6256b0dc0b74b82ea commit 09f137c320633d08b263c54c0782e91d55a6c09f commit b90b6e41379789ed595236113779e0793a63bf18 commit eb9fcf63857556d5eacd67f5c96078e643a8d15a commit 594c504d33343657ad3b24ff8e4ef032cd4de25e commit a868a1e57e3afca98509345d5a8f747a4d745cb1 commit 044cbc7a74c136f12a80c855cadd1b085084aef1 commit c26962803d044a7668e9ea4d5313117ac5b878c8 commit 479e3b02b73a2de2b19df2950863149c59d57bfe commit 86700a402694db56030a74481d09f35520332736 commit 8eb53bb2aa8afa170ba40f9460f2de4d4d138764 commit 33cd016e600ac3417aff7c85f59b9a4b70a947e9 commit 5904e4135f3b3e6cc7bed46bda71118d55a56681 commit 1b08dfb889b2c584b444538c9500af24ba0a6dc7 commit 590e86fe3462da81f1cbc4fc8d4cbf8b16b4f968 commit f61c40c0757a79bcf744314df606c2bc8ae6a729 commit f548f4291e89e6144d3c5b8a9ada66c7dbaa1639 commit 6d1d72fb4fcf85ff0a96de1c16c46162b3baf9a6 commit 6f043b5969a4d6d385ca429388ded37e30e0d179 commit 27535f1d94318f34fd6d41fd01bfa4a970e73bd9 commit 5de6a3de999d0cfeea94f1d3932b78892f3d69e8 commit 198bca93403d04f43c07c5c87c7b75a54f4bcb54 commit 26950f2968e873301c8c536ba0615ba04c17a0de commit 603801d0f2f418941d2524ffc43fa6d8c95873b3 commit 34ed3e83475eab0c8fe6bbb126165a3ff2f2ff90 commit 1358139bdefdb07bb402efb3164c1c51db99e8a5 commit 1d50942dc9304db488d1b3978274b851e890a33b commit b4a1c675d256bfa1d399490847d086b8b463b5d4 commit 784a2ec00904999fccfca12eaf7c63ac3fde5f48 commit 37ff945f804c2d40d030713fc8692e793a81eff8 commit a357dca964e0c77c479075dd65ef86199078d82f commit 4f72fc3c7f3d9f29a438bb0e17c7773f2fc8242a commit 1f73a367420c954f5cae2f899ebb9515be093645 commit 5fe0fdd23e3379833f4346b49fa791733c22ed29 commit cb935c4618bd2ff9058feee4af7088446da6a763 commit 428cb15d5b003102bc33d49f2ab31a6e4e785157 commit b4d775775877453b44834a621eb410aed7891875 commit fe6959a680a4c50f12dbb362c90f9d7157fea334 commit 7305f5b3a5d62d1ce1405e91fa367e6a9126090c commit b3bddb7a3806f26ba3eacb4f77834102ed344b9d commit 70b42b5845c84f33ed2b79a0fa96134710c652f2 commit 17dd7b896abd2c81bbc76ed55899314b1c285677 commit c5274e86da5fe7297fc28a4e12bd29defed1f435 commit 51f2d00909c6153d23edf2344f6b57d45e391945 commit 0bd6c4a1310336af511519a8a853ecff2120d11d commit 9d0bfa7ac97c629542caa860bca903af62b86326 commit 5acbdcd1b12ecba04f1481004b6ce5b40c64b211 commit eb8d73aa63cde11e43ab0619308a5356a691850b commit 15d641c41796fa1e8c8965ea457aac737a28a88e commit 140f70aeef07e4516a338b275e36eb5f8cfb463a commit c9b06cc26f1daace605238adb4720560078b0eb6 commit 2869f599c0d8c9c6492bec40d062951be8caae04 commit 50dc95d561a2552b0d76a9f91b38005195bf2974 commit ce99534e978d4a36787dbe5e5c57749d12e6bf4a commit 8b250cd3b5da18bd90f34ecb04c01661213b65ba commit ff3aeb34deb24f40626c171ce1cfd447a2edafc8 commit cf5b64f7f10b28bebb9b7c9d25e7aee5cbe43918 commit 4fd5e720b709b87f67809a871fde9fb6cb910f28 commit 4a46e5d251a39e7c10493743ac89a31f6f3ce5b5 commit 75478b3b393bcbdca4e6da76fe3a9f1a4133ec5d commit 4adc33f36d80489339f1b43dfeee96bb9ea8e459 commit c03d0b52ff71d580ee235463c7ca9eac31351dcd commit 80ecb5d7c0f224218fdf956faec0ebe73d79f53d commit 85e97b1dd5d29b66a249406624734843b71c0a0c commit 2343bcdb4747d4f418a4daf2e898b94f86c24a59 commit 901abf367d3eecd54f21829ced48c20f53c74c57 commit 828904660a2e0a31d5c8a2ce75711f7123896bd5 commit 6a6c2ab687c8eabaec4a55a4f13eb5ee68181403 commit 239d6de307b0dd1d48ec9b935b57531f07f6db11 commit e0638c7abc4d3d3c46e8f2fc07e02c3877c3c402 commit 974d5ef0dd9d251dd4571e30d5e79e7e4940d424 commit da11407f066c28c49bb7a4ff6a6b742b7a18d7ca commit 56383e8f4d296a33cc5b2a11864025d8205e9438 commit 1c4dba5e14c0085d412429d50cbcf8e9e2a18924 commit 1f2cf08aa010594036ccfb19d207e5b80b5bb7a0 commit a746c77e5ee86829c03dfaf718e18b589f849be3 commit 83a3766b147053e542f3c91c121cb9594239e644 commit f9130b81aea2de3fb6d356e9495a384b2d35b1d1 commit a685572c91b08e2e5143e52f4c5bbdd3d22271b3 commit 25c6aefceee60850bf78e16ae9d7fcc4a9d20884 commit 5e0c8ddf029e0a8533bfb04e4542b46356cbcade commit 0fc2549d55a238da5e4c1b1ae20ebc3856922334 commit dfced44f122c500004a48ecc8db516bb6a295a1b commit 1418b9c38270f4c7843627cb0e9047b19eb3365a commit 5d5c6dba2b43e28845d7d7ed32a36802329a5f52 commit 5bb1465fbdc291593a7c385cede0416ff6873280 commit 29dbcac82f96d06608f3658aacd3e14efb7ac0cd commit 97d1a3b967a3cbeb0dd29a8b5bcd4ac1fd9ccd9b commit 7bbe43f8a4e7775daf6ca62807e0023b0642a20b commit b12252b0538183d8b88bd4a8d8d05a808c46472c commit 4819732f5986ed8b3d88bf4272d2d5bf1ccff9da commit f8f96b17f0fa302b246e35773074f39e43add023 commit 5d447e296701484f3df5b31a7a078cbf1e3a9cc9 commit 1b2dc99e2dc6f35f55f0487e12fc9166fbd023ed commit 381519dff88845bbe522e7446ec1e32e351c670d commit 04022982fc5ddac6cc783d66846f2464fe4985fb commit d6dac2bc12bd968acfcec7a0c92c59d2e19dacc9 commit 1f33bd18d703ecdf7b664168d640439e867d1605 commit e9287ef8d46cee538c9a71bb8978b2f7e975c452 commit d435c1ed56b9f9347189924395588cfdf7489af5 commit 5b680dbfbf6899afaf8bbe59b859509149d59129 commit c282d9512cdd167384fe0d233d13deea538658f2 commit 31d64b8219e057705d7a9debffcf6abbccb7781e commit d9eb8fea6862e63421f7b9c93e32bef348488c41 commit 5279e091616b74ff0e4a24e220e0552b10d88d46 commit ccba4e5bc856471ed009d92747376ee506fcc6ad commit 3ea07c89fbb777669c668452e94275a98dc8afbe commit 1f6c40d5c0095959a260c014a6251a0ac124c721 commit 09ece5ac397f8e3539ea9ffb776e1cc6702acb9a commit d715c9a2cbd4b5dbf72bec82b033698db3c6eca5 commit 9506b8d9626f4fbc230dad30cea1b3b095f1e4d4 commit 2eee829ed48747181b17f3f8d458b23981f2bb7b commit e2d8ea4320c6fcf9f042e432232240f858ae9ed8 commit 1210b17dd4ece454d68a9283f391e3b036aeb010 commit 87e298d6e3a2169831a2f4a29e35575ee5747036 commit b80ddeb29d9df449f875f0b6f5de08d7537c02b8 commit 4a3ad932b2c538c62e4a60dd4b7411f802e018ec commit 2ca97adccdc90247c907541089e85101b2d87574 commit 09db246ceef70bc6bd9c3e0d02b3c855f8fc25fb commit 9cc370435cde6b672b6e2221115c2f535e8bd4ec commit 5f2c1192eba42f6926253a1f2c9b18da05b3c31f commit 72b90723b3760c69721b04f59436f38cd215e2df commit 0c5a0bbb7379625eb2a5b6a931415c008b7a1a16 commit 5cef7e8e2fcc6f9e8d2134668848a31b15c523b8 commit d52e77a3ffcf2da2be1a7892bc8fa67b0e907058 commit 53a35edfd0a767dbd04537596d95f56e94582f50 commit d063e70c6acad14987242f266e9448669db4624e commit f6a3795d35c69bd34a556e1d93000057aed78599 commit 0015cce5cf04d3bd7b2ae4f62d5cea5d35383e8c commit 05d6aea36a69e65b071e6ba897bf83a4aebaeab2 commit 85b8f62b564120943cc0db1e754d6649037e6c7a commit b5d9a483685c37a480420cfe2d41a03d529bc0a5 commit f2bde8349c35d01d7c50456ea06a5c7d5e0e5ed0 commit b9610edcfec216d7a2a5ea2c942734b3e5e26ffc commit 212021297eafe23b79ac117db9b5159d1df2ff30 commit 901e2be20dc55079997ea1885ea77fc72e6826e7 commit d0d66b8c66d04363eff3a5b09da4074fc1dfc758 commit 243c719e872a1322b22efccff80776353357b296 commit 82c3a7a5edbf5f6feae9602d19567d2b5b55121f commit 153a9529d7f372ce7ceb5eae7e2c312c0cd64d41 commit 588a70177df3b1777484267584ef38ab2ca899a2 commit 94ca070cd3737dd5c3b98f615bd4cc950f82a597 commit 5e6d72c643e1262ff02e057620b9f87d7d81141a commit 430e6a0212b2a0eb1de5e9d47a016fa79edf3978 commit ee2016b4b5bb70483e1c06218e7b6288704284cb commit e6f62afe9b2731b7a94b31fe59ef2c5134ad426b commit d726d43c20e744bab1e346c1f77b7a71eff0c40c commit 37d6b1506b80a5cf76238b6b00926070ab544058 commit 3b36f50d3a69ed720e4c464bc9c5fa2c3fadc750 commit 29c52ab2711f0e8ce506c120fbecb30e83f83339 commit 721fd84ea1fe957453587efad5fdc44dfba58e04 commit d8f7f8831bce9ef6a1f562037e137f57b5951501 commit 41e096da18b357ff1d2108c514b9634d67364c41 commit 20f6ac2d5e00d8ff154d9617a5c0b52ff12f3320 commit c3639f3be480529ac82b592e627fa7dd712de83e commit 6a4d8cc6bbbfea4469a063bff0ff0114507df524 commit cec49bce6e0cdf916433a248402bfdecbf6589b0 commit 9f807822abf5e210d8656fb5304f662bee64ca80 commit df216b37333cf2ddb0db86b966e86a53d239a013 commit c20b5d41e9de40a51b7e5516198c08a906fb7770 commit 1d894ce88eca35ef8627901c47c3881cb1f3e74a commit bc1ce503769c51c1c06f5ed126b07a545996d697 commit 8f4f9a3b3a0b733f8fd102f9e0843cad8d055c83 commit de3688e469b08be958914674e8b01cb0cea42388 commit 3f268ef06f8cf3c481dbd5843d564f5170c6df54 commit fda8d552c9c7783d4b29aeb6350d7404b31cdbff commit b889d89ad45f9957ea3eac8f61cb8884c2010940 commit 4be990af2f7ed8bf209cce3b86e1abac33742763 commit d05824796d9cf6c0e59a0aa86333584bde8b51c6 commit bf172a01ea485e630f28b6ad525fb277d73d3e3d commit 96e4c3c0ed4eb85e02bfa438c6b4ef7cea78bd8a commit 8295524a2d5550b56e800ac779a183b7f4d8c33c commit d083c232fe2dc4720d8f0e337613f88909ff9d2a commit 7e31ce581bf034cdcb1a94f84ffcf3cc983988e9 commit 6a6d914de30f15472b2dc36e8ac6bf016cfbaed5 commit e93a590c79faa4aaa4d7eadacdef9240e1e823a1 commit 62236df23d018fc977d2871744440efe6a08a6cc commit db3b3f3e62279b914e1958e93e057fc4d8dee263 commit b229712b26b58d043cd7386827f41ab022a4d109 commit 8ec6a72da65bbc4d341253e5a641a51bb1c0d967 commit a5d092d37eb5d25520d283985082e977bda68eb7 commit 516b33460c5bee78b2055637b0547bdb0e6af754 commit a0f25a6bb319aa05e04dcf51707c97c2881b4f47 commit a7b23fd90c804e79d1edb478b42935848bcd7e36 commit 66755b4871782cb95e3584c9e88b6ed6c52c9022 commit 10dcc8317f6063806ce1d34235af23da5e2fdd7a commit ccecfd013a39d8b8ea837e90f7f907e4ed5abe17 commit df8d1d0abd9439479ae1a0d8812ed57debe48a86 commit 94afe983b5aa56a841f208a6b455691a44eafc7e commit d5410d6974acd0aaea6742ecd8e3f7bdedbddf4b commit fdb5713c7d6f6d60bf23596eafb1ada154869ae9 commit 1439e3bea7b1201a9461ffbff2a9d59f3e65dc1e commit 8acd15a0c8c647ed4cb07c53c3ea4a8768c974ce commit ba4a28bb168aefa98ee422be8e04a0c964256f95 commit 5f825973b491a457c7233e808ecf64726abbeb86 commit 5e66e818e0358fe42704404580b70e1ffc7afb6a commit 9d6bf794084d9258dadf2754d911fcfeb13ea8fc commit 039cacd2393971fe11f855118eea6c83c8f506fa commit 1790b649b01ba7e44af7c08ffcfc0eaa9d4f5ac6 commit b6dca949b88ee69561fc4ed853ab7a2ae13d842f commit ac7c48c0cce00d03b3c95fddcccb0a45257e33e3 commit 367c9b0f1b8750a704070e7ae85234d591290434 commit 6225bb3a88d22594aacea2485dc28ca12d596721 commit a154bf6eda9881aa3dd74cea83dcff6de3ce9680 commit f4e2a66dae996b4fa2cc21b1904798ad1dc83049 commit 75513bf5d72cd1a81401866642f4a8052b2d4420 commit 7270e8957eb9aacf5914605d04865f3829a14bce commit fc6ea4bee130710a77ec16a86d2013e964602503 commit 9a17696049889550ce76a987562e679535943c96 commit 400013b268cb666a44c0827b136bfd4bb741b13d commit 498d46fe7aa7eda5807352d62af133a2f432b814 commit e63fa4dcea2f7afcbf8f2d013dfae23a61a273d8 commit bee7f8d09268dc80da0e841ca99d79f500d03b84 commit 7367540b26214ba5f7236e0f212fd60ec6d07c3f commit 4e13b063d2e510b54e3ffc2e975315d08d14c5af commit f06d9e4eec7320f5a560e49ed652e785c8ab5c45 commit 2f60dd50769efcd6eedd0dc6b3f419cdd1f1f1fa commit 3ed893396b0132fa5a4d3fe3f9ba358678c6dba3 commit e281d5940ae7f2ceff99d5e001a69b5f0884d2f0 commit 8cda7a4f96e435be2fd074009d69521d973d7d31 commit ded81d5b2b67e6e6fce0a1e8b73e4565a28dbfd8 commit 1ec5a44331af283b1cd3b0f0981cf65f0903ec8f commit c57f5ba2c8febe944ddebae53730667d5af179e5 commit c36846f3917962a1f7586a3d39a423e6679df3d7 commit 512712a824de9b856a4e61343e3e4390eba2c391 commit bc1922e5d349db4be14c55513102c024c2ae8a50 commit d29c9930279df7c10348772f812154d3c41562f5 commit c65b3affc6737c99c09925b910c7471d3db26b54 commit 5f721a5d1bb2e3ada83f04a119908b66d909300a commit 14683babf8ee356a232ee76b0acd332aef51fdc4 commit 7a05c5a0c883ed6353f82699dff8d789dae6b673 commit a594525c82e0b8d677a7e5fd13c7c115d41e9722 commit 270677026261ad8d1ea8ed60c3327d37aeb5f372 commit 46f47807738441e354873546dde0b000106c068a commit 9987151a90567785beebcbd5c8ac58d05f254137 commit ef6e871af3126850b429f68e8bd5b657042139f0 commit 063565aca3734de4e73639a0e460a58d9418b3cd commit 2af104290da5e4858e8caefa068827d7392c6a09 commit 8be576837b6e62b2ad0de2f9ba31cef618fa2891 commit 3d082157a24216ca084082ce421a37d14ecfcfad commit d80976d9ffd9d7f89a26134a299b236910477f3b commit f588a1bbfce781042196e68f8e200f08b3d9e8c4 commit 53dbee4926d3706ca9e03f3928fa85b5ec3bc0cc commit 751a9d69b19702af35b0fedfb8ff362027c1cf0c commit c50df701d49e78bea6410b4b111c7be71e2a7c2b commit 8023d3bef18bafe54708faca0c4206e1a36ca155 commit 6149cb68a5be127909ee39f4d40b8f5ba0d047cf commit cc954cfa6fe47579aa8eceaed00677feda0a95b6 commit be0c94ee215043c0a5cdbffc5c45b5073054e125 commit 5cd0664483c1be4a71bcf4ec643f5d3c782e0319 commit 0adc41de818c1a051c18732db57b9ee95b30898e commit a68819cc557cf0a37b7fce50d412abdb73bd69d8 commit 8de5df3b07efd1a04c549e59e0d72e2b3e2c517f commit a35eca01c372dc0f1a3ad663c6a93604c603a782 commit f0d4ce59f4d48622044933054a0e0cefa91ba15e commit c3e27f4307fed7b963d8e99c18dc51682b3431e7 commit 6d6c932daef5c5b3cd5e3692e79507d2a3306031 commit 1d06c820b2b7ceb38bdf0775fac495db4ad4d10e commit 23015f6f900b8b158f6811b85de1f96769be4dc7 commit 00dd7f953b9b1d85e97da8065cc2887a5477008f commit 2efb4adf489dd29526c412c4593d12e08076c68a commit 19d36cfafad0395d1b8a9db7a85d64282c42ae94 commit b5c84a9edcd418cd055becad6a22439e7c5e3bf8 commit 657b15d672f4d89cf0750793473b8963429f8ae3 commit 29b9702ffe70d83b9970abbccaeb287dfda4409f commit 363c4c3811db330dee9ce27dd3cee6f590d44e4c commit 2bf68bbdb6f5a445b26a0e8fe14af229ffcc7f9e commit 86df4141869350edaa53fb994b3db2c2cca5065d commit cd9f7f7ac5932129fe81b4c7559cfcb226ec7c5c commit 70c0b80d0bbb97c072c4a9c3e8b0f68a9e22d7d2 commit f0bb41fad02e0310fa7b222c7254a3603ecaca1b commit 72be4584ae7e23f64c292171cde6c8fd887aefa1 commit 3f1a31ff8e3f6654d2b03a34095ca1658e4cfd77 commit 2ef6d3bf426218440b156d392cf95e830990e0e4 commit 66a19a3a0e2d200121f30a48d13b80532582f1a5 commit 7d296f369d38e12b1f9c552d8635eb0caef71095 commit e71a74122863fd8acd23ab772ab4f7c3a378aa66 commit 0d6419e9c855dea476300e2bb81d29105fe76d38 commit ce2fce2513c5c1076f2a2d6e977c0ac523aad5e3 commit 22ba60f617bd1cfbfae72f73c93ef9507a305c59 commit 18b66ace6b3acb01b645d2fbbd571f66b2705c71 commit d2a197a45daacd4ab3221161405768a6d1d11086 commit d2895ec4ca6c67c5a9c8ce74bd5deba76ea77f6c commit 6a77bce58c6b29167bce2f548559c75326bbaf03 commit f89154b6525c7ca394ca68adc90e6a0d5b3872fa commit 1ca489fc60e2713a9acba4294c6fad66d85961b2 commit 90c44207cdd18091ac9aa7cab8a3e7b0ef00e847 commit a2170b4af62fd347c699ae3cd9ec0a8096466f9d commit 889f84798c5b975125f5f7de910ed222ca8b2677 commit 274b924c3ed18f7d46d237810dd59d3bc89cb4b4 commit 241a074fc1342b8f6a88af4b7bdc014692ebcde7 commit d389eafa3f50944ca272e0ec865143a9fb948e78 commit 219fa961e12497fe6beef478cc0de0da47b3a3e6 commit 88839870c3060a04a2e085ef1efccde4b0d1d440 commit 702f8dd8319fa6e3fe9d90115426202e6ee5d06e commit 9d8033d6beca43e9d8eb952adfa8bf08642a357f commit 2426d71c52876a5558b40af06143688b3978ddb2 commit e8702d0b97dc9fa825715fb28f116c199bbebc87 commit b9d3d50adbc79c3131ff3c5ac35bb9a57442f08f commit 8788e0668f4fd8815f82c982879252aebfa708db commit dfabe59797799bb500897ab4064f8a76aae4026a commit 2750caffa7a9ae82824d7ac3ab0fee65181c4126 commit fd24926676801dd68afa1f39647a858cf4f6ae50 commit 2412d339b30e66f86d9430aec26f5c6a44908b15 commit 05f8c2a87aa01d1000cf148213560117e39a48f6 commit bd682a788c1f4fbefe17b3ee9e0e3debdefeec6d commit dd4dabe4b3c2425878a49ae8d5817d5c5958c6db commit 33413ef964b8cdbb25a23aaf0b4aa8f0a330c4cf commit fcd6b0e270a9dd849981df34051ee6dcbdbb1c0d commit e0a4459d45425fabd5f020a2117d350c5a07477b commit 6927913d700749a4b9550f87f294778df2a7faa4 commit 22f7cc7524081bb2bfb2720e43ab9889e2ed5b00 commit 9308a49d8ee2f0f372fb7f18b8f4a97d9ec676c7 commit 4f860edecdafeb2e5fb29fecc6428090997936fe commit 5d64f9bbb6281a5a89a2266b9d39daa1fca1d6b4 commit 7e2ec174945fa98048b39baf2a87973eddca3241 commit 876f7a438e4247a948268ad77b67c494f709cc30 commit d30b9ae93bf57414160503d3cc62735adeb61557 commit 377c675f3c17ffaefd023ee283bb366bbd6bbcea commit d946bc44aa0bf03ff5c2888e8c3be8646e14467a commit dca384a3bf5af1c781cfa6aec63904bdb5018c36 commit 9277b75675113d64a74ec01a1219973f3720d9a7 commit eea89dff4c39a106f98d1cb5e4d626f8c63908b9 commit a3574119826d9a4ef807fb973cf5150c3b90da43 commit cf1c7fee7ef37cfc09b5e704eb52d9466ca49012 commit eef173954432fe0612acb63421a95deb41155cdc commit b3dcc6dc0f32612d04839c2fb32e94d0ebf92c98 commit 15512021eb3975a8c2366e3883337e252bb0eee5 commit ccbeca4ca04302d129602093c8d611065e3f7958 commit 542898c5aa5c6a3179dffb1d1606884a63f75fed commit 722b717d8e2759d943dc1f55a2f6fe19c55080aa commit 972aa1a161d8eb61bc588c31bf568bd69c7c231b commit 7994369fd3e758ea1fde269ff7c3984a8ab52b59 commit b8c75bd9746e3f1bdb5a1b6288b50dc2fdfec0ef commit 2d022081b333a7f15ba27607696d4a41a7a2b5f9 commit e56694f718f0f6694c18d7595e61533a2663335e commit afa37315917bbc9e71a4359f921eb887470c008c commit 3698807094ecae945436921325f5c309d1123f11 commit f185381b64814bb483416e4dd83d85891018a7c5 commit 5ccbb057c0a1282b39192a346f963fa989ddbc92 commit 73fa13b6a5112b59d09e58b8075973769a15814c commit 011bbb03024f5a22dc04eba370f9296f0cb83502 commit cd9f79103003599e58f9f394c07cb4045883a51e commit 626f7b3190b4c07917f0262162cb7fef7272c34d commit 8668dfc30d3eee695233ce83944abaf5546a5017 commit 2485c12c980a36bb9e23ababb07d73c4ac6a45af commit 5bb6a8fa75fcfda93592bee0a4910420ceab15f3 commit 42c6c48214b726c30918e8dc80e2168607d13ae4 commit 3a9822d7bd623be9000cef8101ecf8479fa53f2c commit 40e8a766a761f7fdc8530347527b344fddf6f1a8 commit bef153b70c6e3594b849d44a23f806328b9c68d4 commit be072b06c7397004e6464b4225e13c31ed0b9ca3 commit 4717fe3d8dec42bc951a44f41efc95d635d26325 commit d1289b41ec4db347794abfed7525e33dd2d9503b commit d763d8030f440441177d9638ffb0be39cba32a03 commit 08a987a8a02b073c620b5f3f363714ccd98c0bc0 commit 9d5dabfeff3ca63925cfc9c427f2d1fe8929402b commit c2db32ce77adf82dd2a4193abc709ec51474f84e commit 2a909ae718715b3bac75d945e38dc0a5e4a0f1ba commit 692996f2bef7aa1737e07554255ba0d9a73fb750 commit 3f1e2e9d9993a3b1e33661fee26566f091e01b2b commit 3f3a24a0a3a58677d2b4f3c442d7a1be05afb123 commit 00b14ce075732edb2935d738de990e9aa96f1e08 commit 447c7997b62a5115ba4da846dcdee4fc12298a6a commit 00d6936dbd5486bd5c0a07870d5747eed6f799ec commit d5e8ff5f7b2a41d503914d4896ed3c6b3befe933 commit a50b048276c4e1bc6f7e869c99b6bdc91b4e237f commit 4e781873fa1359c9a85559b6da6548ac5b07ceb5 commit 29ba7b16b907a1f915aab8b83ef901e209146938 commit de95753cce66582b0c710dc31592cf15d317118b commit bd42571168ed54d309480856fadea3eb99821253 commit 5af779adc3ab0245b94187a3fad6d10f60013c1b commit 2d282665d2613fc7be9dde557811a7783ac01735 commit 7ade3ca9cdb547eac2cdb661c91a481235e21ae8 commit 3c6591e947f5c23c13dec67da3dbff12ccd6e209 commit a89ef0448c9b59c524499663eeb92a43c8bc67fd commit f69c15e15e74fb0250049c5532d8322c75f423ad commit a423746305d41c1e2767b832742cb572ab173af3 commit 6d33f0e820bfbc4f0b9b2f23d0d30df4bd6c3001 commit 3084488a49d6d58005d6ac1b5457b3f13bad1ed3 commit 77a35bb579827216d911ece7a6b909e4ac8e1626 commit b65007590911ad558999073dbffa413cf4861df3 commit ca7f9d0aba9940f4d3e759f44c414c3707a94b21 commit 98ea24e6c563241814abcb1d22ec207a7ec2fd9b commit 559e2655220d56f939a9fbc6212992345025392c commit 39da460fd4c0f8e7290dcc9cbfc9375de9d0eeca commit e8dd130bfdc627d935d4eda4654059a24864a493 commit ed3a56f9c638a4ee42031eac748664c834fe245d commit 66d58bf73ba17ac45fca79f2e5e26870cc224ee3 commit d7d7ddc15672940be0dbbe03e016c5bb617256b8 commit b6fba4ecf3554c515aa5354c54dfdf70d7526ff1 commit 6cbdf12b87356827d35975dfb3030d116782737c commit f54b6bdf4248b1e26ff66932231e1d6a2f16adc0 commit 3786a9bc0455ca58d953319f62daf96b6eb95490 commit bcfab8e35ce81e2fd3230c1575024bfde0d28c8b commit 120cc6e67a5e34069693cf1711ea222b8c414685 commit 68550cbc6129159b7a6434796b721e8b66ee12f6 commit 4a5dc6c73dbec54648fe01af2f1818dc3ae90d5d commit 7938f4218168ae9fc4bdddb15976f9ebbae41999 commit 976b6d97c62347df3e686f60a5f455bb8ed6ea23 commit 0fd9803b985e5d94e2b9f1848a12756b7848b62d commit 270b48bb8da7452b4357d8726933beba72652310 commit 68129f431faab376c1dd1c701f2fb999eea53383 commit 18f5fad275efef015226ee4f90eae34d8f44aa5e commit e09b9aef6807474d6964a2513321e174f5162e8e commit 9285f09e8f96496604cf0755a3d7e91478120609 commit 6abbad2c00bd26531c203f29190d14ad9eebfc0e commit 042ddf6663a86be98b306e6cc9e7048ea4c835c0 commit 84d826c8fb84a57716b44b721591a0fffe4ea1ca commit b20384d9196788dfed70aa7cfb2b3dc458217918 commit a59b026419f33040d7d28b8e3b1cea681b9ce7a7 commit f665147cda30928ce79045a13953eb709fa3dcbc commit 3ab26eddc67a67579a2b52f908b69cbc253f5ff3 commit 5e78d59a1ead969669f64dde4245cfa65b7cc4a9 commit a28fde308c3c1c174249ff9559b57f24e6850086 commit 053f2b85631316a9226f6340c1c0fd95634f7a5b commit 2a3950c43e2ead47ed7456b04da5d4afde58c4b2 commit 6b0076540faffd47f5a899bf12f3528c4f0e726b commit b21a142fd2055d8276169efcc95b624ff908a341 commit f4044ca1967098b44bd2d569ddb99352b599551e commit bf8900406e9e5c928ba578c8fd932b4bc72556be commit 2ecf64a0d26699f5f7458e87bfc873a47a2945bf commit 6e007c3bc97024853e3397cbbf37377fe8cf2b5b commit 7e97596c743c978e81ac67a59940071aa292b2a9 commit 91cb1e11786c4d5cfd8bf32e891232fa42b03cc6 commit 11a1d09c974fd58b8de0474081d6e97bebf4b619 commit a3de31d55b2a9fb672007aaf2b070cf90ac7dac6 commit edbb9242478d3aed8b4d3cb197032e9ded26b3e7 commit a0386bba70934d42f586eaf68b21d5eeaffa7bd0 commit a4c63cafa58b4bd9e15511bab77a4752b93d3aa0 commit 5fd8518d187ed03403a4d4f7f56f52c00b11c148 commit 54f329cc7a7a7ea265c45b206d45e3d09192aba7 commit 02599bc7f7047f2b316ab499f41d72ca14e3b3d3 commit 681260df4dad45337b14ba762f94b402204e9ac3 commit f287a3c5b03f51efa8d8f3e141a79177f91047e0 commit cfbb6b0047448e2d986160d9f30d60f604d9ad0f commit d0fb18b535679a28b1f55a312b7454563b9bb36e commit 89a7a87093d67e2c633e1ed400ba00ffd15bdae5 commit e923be9934a9c54a94e443f9e77bda5b9fbd1ce5 commit 3675c2f26f33ab4928859fb8950a4697a16be5c9 commit 03e5b167bd2020053f3d10b61a361de8b17c5936 commit b1c87b0874a4a2045dc78a8d3d3a77ef61536711 commit 803ec96319eec2897d3828e87bd38180295d0dcc commit efbb7c98f5fa5a547c4bc0369f825c930aed8918 commit 2feb6b0f06b1221b2841ca61b721b1d608bafa79 commit f3b603de2ff41eb915d75163f7212bbf177950d1 commit 28f5f8884e7cb9cff5375db487a8ca7cd3fd599f commit 98476876b837069e4582565fee63e70810c880b2 commit 40f1dc5223ae9b98458124bbeabbabc74c2bccf6 commit de7fbd020d959708282ac0916be3e5498086d9aa commit 6c1a7867734bc6f54e8442f47790c90d3afa07a2 commit 5bdd3eb253544b1e80f904e1205699d0a126d2d6 commit a439b890dbd17457f071e41777aa1d17916258d6 commit 1cbbc8d4f788af4c260ef3cae05902ef7b191197 commit db7b81545f5abdfd1f13b7f0a3f995994701cf92 commit 3b99e8e37d0ffaa0ef95598b9b83c49c89bc0ea2 commit 63b5fa9dbb711e245e59cc14eaae0106eb716447 commit df62ae6fc9b49a9a401afa2efd3f36c0f82ad663 commit f5666d482305900b9622a2c9dd73a864a3b0d281 commit 24524e3f43cf77dfdff7187f76d967b3175f68bf commit ba2c5d15022a565da187d90e2fe44768e33e5034 commit a3c286dcef7f8bc576a20f5d1e80624f6b4b93ee commit aa15c677cc34e626789cb65b8e7375180851c03b commit 67b723f5b74254d27962b1b59bddfee1584575ff commit fe23b56f56532dcc5e49e83e20333b97919dec53 commit ded74cafeea9311c1eaf6fccce963de2516145f7 commit 1528038385c0a706aac9ac165eeb24044fef6825 commit e7a09cea6483b44ea0c82f07145fcbd8a918bf96 commit 24a644ebbfd3b13cda702f98907f9dd123e34bf9 commit 73144c0ce4e9d69c8d0de4078b6bcdbc55f79db8 commit 66b09ddd8b323547e24871ec05fc63c44a557877 commit 69898171829d6fb92e366a989f2f14d8b5b15e21 commit a391e06958b2fe3f53171ba04f60dadf17b09d5b commit f7bc440bc79ae5dcf648b90209910ea8dba6ef0c commit 0f4b58423f3500ee3e3159fbbd6c41a6e6f920d4 commit 0192c25c03cd2feaeaadae375fe6aadff788939a commit 427153ef63a82a4d51c6046e2457787127f4d6d7 commit 92e438619d1603995ecb9f1fb2c322cc304b759d commit a421d8a99216d46926609611cdcf260fdf900645 commit 3ee7fab0f3d2c1f9c2bfe6d4fb8c58106a52e840 commit 420f63cb6d2a691b94662f50e07dc3c9a851bc69 commit 721255b52700b320c4ae2e23d57f7d9ad1db50b9 commit b508d01fa577e21a8f574dec09a16e5f2f6c7d3d commit f3392b85130fdc9e17bf6abe362d5e9e4bc9b8b1 commit 985a0256df3290d318bf937db7ef0633f7654490 commit 88d23eda3c7f8bb560ae93b00d03688ff7920cdd commit 165bbfba34cb4c8f31d1e643abd2d5cb6eba1b90 commit 2528b396d5304a711d28f08047a8fe60daebc3ae commit 154cfae6158141b18d65abb0db679bb51a8294e7 commit c8eb426d47abfffb0713dfba8d25d99ff091f3ab commit be137d791b5067fd5f290a593336f93019ed25c4 commit d21b3be8e14445fbd06109b4831c4fa8f9adad2d commit 8a84e7a176c0a02a97f64ace508c1f2546c30bf6 commit 759d4fff3d2d70d6b689a9f1f7eb4488df337fbd commit 63b81e6063200d01592cc2cf9b3a87dbade2e149 commit 04d4e167522fa9b60c83e04c4a74041b36b2327f commit cad3fab413efbfdb1c64a08808aa3a59fa288457 commit 5d488786a3a18d48bcbd1d215ba9dc6811b7d639 commit 0c63fd3d962525d3eb1001ebc31537206f66720e commit 1a7a8d93db9b8c7ee9cba983fc6aa8576da237ea commit 6148f3653bba417488e0d289bbe60c6fc7c4e711 commit 2b1466ea19182551ceffcd6deed2b22377cb2a53 commit aeb47df35742376f2fa13ee39039f1873daee626 commit 02cae05ec4b6d6f1a1a07c98a34e69ebc1b8f7d7 commit c7703ce38c1ecdeeea6791b54fbee29a08816ea9 commit cc188a73addc8188d73ad11901b697acdc7fd0b0 commit e5af61ffaaef0e952e248de895454cd339080035 commit 5aa71bd773c390891974b1bcbdb3b12aa17c781d commit 574ff46f10102f65c40d24729197033a80458238 commit fd22013a098baca78679656d55f8fd0becb99a8d commit d8a25e48585773afc573e835a52f9cbf409215bc commit f9ed188d5a08cfacb945b21976764f57c0ea9ebd commit 69f915cc97c4bb82b34105a47abf613f7c87215d commit b06b48d7ddae440f3393e5c1ddda4d2537b3a7cc commit c8cb19c7b26d78434ec563088d5d377ec2caf616 commit 60aac460ed97852f620529f43fd58dd05e41644b commit 816d61d51a31bd16d0fec75526462dc987f09114 commit 8bbd4d83a68beaf54ae01b2e2aa2024ff1dfc0ba commit 461fa7b0ac565ef25c1da0ced31005dd437883a7 commit f3986e86b2d861a2ed2d336bafe53b5c404cb995 commit 1915a433954262ac7466469d1a4684ac54218af4 commit b010a46bd3abb161409afe147a73fe58c115858d commit 24992ab0b8b0d2521caa9c3dcbed0e2a56cbe3d0 commit 7f161df1a513e2961f4e3c96a8355c8ce93ad175 commit 123db17ddff007080d464e785689fb14f94cbc7a commit b9c7babe2c2e37a50aa42401b38d597ea78f506e commit d315bdbfebd517cf5efabf666c8099e027ef666f commit c6fc836488c2ca45c06d21213f5281d668b42b95 commit 9a8e720fd064193ef5112dcb221192fd4d0f7809 commit 74fc595465a0f8e54a71a9b2fc8552a1ccaaf5e2 commit d83d5298ba188a829558ebcc395469e39ffdc2b3 commit f9bf77df111a16d00cffc4ed6b7e374956290dc1 commit 5472b3f2d9ae65d809d0443dd8f5cc7e1b20b1af commit 5f2ec9095ce8439614ac289819a44e02f52a5415 commit 82508de228bafb2ea8f048f7bf11bb5547354d62 commit 01b94a9361680d6582dcc2a73a9eb464e0e40888 commit 14da21cc4671dbedfbe3854e495f24adac7866c7 commit 4feb2e9eb95f785ea39d5a7e69b845354c2691b3 commit 548b512e144f890a7ba4aad71985cf4a81611f5b commit 57bfb34a51c7c655335010b3168c1061b5eba354 commit adca62ec370c131ca676ea4fb2e4e450f999fb9e commit 90d4aa20c8cc76f5baecd423b5dc289b899ebc42 commit 0e05fc49c358cb49e59ce8d6ecda652951335e1e commit cecece2ca505dcd47359ae21e3b37ca1f57c08e4 commit 8668658aebb0a19d877d5a81c004baf716c4aaa6 commit 73792e6e66be1225837cc1a40f1e39b1d077751c commit dfa714b88eb0a9d763eba9e5720b089a58dc9496 commit 3fc2b087df2ce87dc11abe4a5e7a02b75b5bb82e commit 7db47b838896ec2bb57e3d0b329804b84f32626c commit d5c6f647aec9ed524aedd04a3aec5ebc21d39007 commit 77608faa77196cb0f7af3fd0e3e26051f3de1db9 commit a6c40b178092f41b9d6cc8615697c14b1e5a1c3a commit d87f36a0635edc58430e322f9e04fdf9aae6641f commit 2243f4937ace91437fb39f9b67d309c3d0d7aed4 commit 71579346991927687c76ff76084bcb1f9da410a2 commit 22b1df28c009aaf78e77b20a9cc8d8bf98e698c8 commit bdb3489cfca16815e9a737359e9e90a4af5d0ff3 commit 311065086ee15b4d5d544fba44b66349fa7cd246 commit 634b56b0f88bda4a20f88af2f3d8bb212ed53027 commit 88bc3cd8450b73ad37c9de4b48c315e6c8002f03 commit cb9561d0e3f4393a31fab2034c33c6cf2162513a commit 80ed77f971c3911d6a6f7c537540b4ee62859455 commit 683bac6b00e1158bf3c56dfd9f55ea34acebcf90 commit a3ace75cdb6979e18ec9ad00862445ff71bb8a71 commit 892a57a975c3bd51834ddb0afa5f27baa19a785b commit 9252d33df597a60416f3718b9b41457657c8540c commit 563285c85ecaa1fcecf304dabf87cbeee1ddbc3f commit 2fbdbe958a15e735a24ce33751671e9bf221e70d commit 1ec1944eb50c8de2d96de1188eec9f8b22d03366 commit 7258fa31eabd882f6c8ed4d6d281f6657a33ef94 commit d2cb0b21b8f809ae04a5c30468d3ccff2b23eec6 commit 009e9a1585059ed517b8e02d0afe11128af5ddca commit 3b853c316c9321e195414a6fb121d1c2d45b1e87 commit b60668cb4c57a7cc451de781ae49f5e9cc375eaf commit df529053590d59ca3e06d5b3232586987b61525e commit f461ea5d8dc425325f4c478dfcddc4de8e24fea2 commit 7e2aa820ac24f9d5c1fc39ef5a2ba7baf3384596 commit 208f6265d519643f380c504ee1c1ef925f2c7d5f commit a6e7a006f5d551ee0827059300148e1c9cf4f9a3 commit a32ba6bdca21fd82cacfca2aa4708cbfdac6bc49 commit e283820cbf8092c87a8d6461260d5bc525da72c9 commit 2509969a9862b522d2208e8663057fb227556687 commit 6ed19359d6bd62e993b09a7a565d7a5ce5e114c3 commit b3d9f59f69289569133730e1be019adcd9e06611 commit 4a564e59bfb7732ec168f66ee77bf1eb81ff9319 commit bcf8b616deb8794179e3e9c6233a53f42664afb2 commit a61732e808672cfa8c8c6028bcf9feacb953ef40 commit d12dd1db809a3f298b4ef6cc02ca64fe3038391d commit c17897428e1d25975da5d45d40f53bfb19d8fdcc commit 3358e2ca0ebd6454307bfb8affab35d26cedb9db commit f12dc0d8431e1fa36a3496f6a0a34edba1fea2f9 commit be78311eaa92f71d2f4c0861defaf185d799e19c commit a19c1d00b0d350fb7b75c6c4da91887f66114a7d commit 4895b90dd510b217852b3d118910f57f3f333b2e commit a874aba8bbc529517ed154d88b08e3c437564c88 commit 93cc7aa0b037f34d9a55c58fb4ab6bbd802fa47c commit ab9e00a3509ab7868cc3d4641f45ff926467b38c commit 680a5cd10b9cf4922e182f768d3a534b1a4427dd commit bd3de31950aecc29abc6e554e3b3f6883080c5be commit 0d53879faada6278209883a9eebf39b9e3a8ba10 commit 573ca6fb97c617eef263b15d982dac2f85fd2854 commit e30e6c7b82a18256a1e4ca2f067ce2b05bbc8871 commit 5f1d00420f46774fea45244effc6dbcd53cb6bdf commit 783782a52340e850840c11d823b649e6ba83a700 commit eed1a5c74216907f79f7b1af725e570e95bab0ea commit 92ede25eceb251ec31e1599065b98d681a419046 commit b874c6671b911ffab69f70b298d074a1897b8aff commit e610941c45bad75aa839af015c27d236ab6749e5 commit 7e2a4cfc62d35a7c567e7d85b0af2651cc6b05c2 commit c85bf88ba5100249451151fb1b76d2ed9e40b634 commit e506db5905d18b014aead347e37b7311858e2750 commit 951be8be7d66fc7c69fc2e2f42664bdbedb48c32 commit ed7208706448953c6f15009cf139135776c15713 commit c5365554514178840400b801787bedb567811064 commit 8639bd70497ac96a83ff26b8118afcdc45f1cfaf commit 4d7ba312dd1f94cce23f1f93f33bdf92db090688 commit d9f2303004581f767f3f4acfa3faba205c9991d9 commit 128f8ed5902a287a6bb4afe0ffdae8a80b2a64ec commit c25badd59cb4978bb702e52ee4c5b5ed1cd03910 commit 43d15db1d067e4cdceb0aebd10b9210b97899789 commit fa39f936dbb96626d3345fd8d66af6be6f47ff9e commit aa79d3808e8cf1f5fd0f1c20c2e6a6865b5b940c commit 17ce8a6907f77b7ac97ddaa071d8a1f6e06ce85b commit d5c831566d34924f62082f8b675d35c078f9b45c commit 29b440d20456033091a0376cecdc23c6875d51c3 commit fdda8f3406f98fd087784f9516b3825bb4b5f6ad commit dfcc3e8c24cc1fcdf9e14ef98803e295b5e4f721 commit 01cbf049e10f2cc4cda5570ca8ad3d0334cebae1 commit d9f8a22aaf84be5640e0fd8e2adf0ace61ee3703 commit 2019bf7cd2135bf4633dcde8357c63fdf1ae87d7 commit 2fbc5086975679a5c2ba1bac3ecc5942cf7726c5 commit b67f00e06f36192da513ac80148b000fbc5b2717 commit 35c27d9578356762e7421f16d61b91ab46dfabee commit 97437f475c5be7804592bc258e3936aa318895a8 commit f99a7eb2d11b00a20c9fd6e724c60151b74b6ce9 commit db090ff8f98d8314fab0442a16e7b1e6a33e16be commit 967af863f23344aed4353ddbcaa8d6d6727b34fa commit 79aa0367385ceaf5351ea77ea1fb66136739ea9d commit a65dbf7cded724a5ed4a5e1a718616b048ca0c34 commit a4c260de9b6bb3c54a509d24baf871c497bca7ca commit baf682144ecacae4b98597daa636ce7b2b3143f6 commit c1c04560ac038da28694a04d71958ced32964647 commit d8b746eafc2ccedfc0d6008df7fbcd96e149ae82 commit f2ed8ef31366467930c98494535a044e33a1b3d4 commit 5224f79096170bf7b92cc8fe42a12f44b91e5f62 commit dd4821baa8b6f0abceac43840673b4556bf73175 commit 2bb116c7fd1fcd80c7727be44876070d1b3ce923 commit 64b14a184e83eb62ea0615e31a409956049d40e7 commit f3f6eff85f94e742ed9f34330993cdf91f83d579 commit de7cc1b48fde1abf13324e800cecc0aad5078ade commit 868f4357ed0d1e2f96bbd67d4ac862aa6335effe commit c477eaa6a79da6af7e59f74e69af7d6b3af52a23 commit f83e14011e042adc196f1dac7cb235c70798c231 commit 4e9b1fa5a2757d11a5c40eed2b2b4837dcb2f12e commit 72b3588e27feef96be6993d493c8c76a13bf8eba commit 068001b711e820184553e90f9bf2ae18fb4c2c06 commit 20c43547add3a60c553c90b730e6cbd39c4d5c16 commit caae42f00924498e78da8a960561936aa7eba503 commit 867e24ca4945249baf34ea07ae6b27ca927210a1 commit 418abce203fc2e936bf8c7632a9a429e861f6283 commit cba07cce39ace4c719e63b0410a53480aee6aaee commit f0d540989597d04905253b54d4d0ee53cfe70a42 commit 0ab5d711ec74d9e60673900974806b7688857947 commit d01899d3db2a553268dd4bc03641d9e80e41d67a commit 8f74f68d907d2a41be211e61aaa7c9268f5532e1 commit 6b5033831febbe1c009b6713338cc9e417b45ceb commit 779596ce6a79e187995f04f143fc5ea44a565ea9 commit 91aa9c8f5282922b2890227724467de2f32fbf84 commit 1957f27de290cde5a0d6e1df46a2c8b3e9c77046 commit 50e14a62ac3a56c62c5676bbb8b39245212e0567 commit a142606d5433c9bfc68c0f40ba32c2e05ad75d09 commit 874bfdfa4735cbb1b0d6e0c6157c712a312371a1 commit b63c54d978236dd6014cf2ffba96d626e97c915c commit edf176f48d87fa25ca93f09362707cf5314bf7ee commit 84073e568eec7b586b2f6fd5fb2fb08f59edec54 commit b71a4a2542e1b092b4f11ce6318eaf82619312e4 commit 9b43698af7c36361c340b95c9601c54523da4f2a commit 7f088bef6b0cd976b5d39eee5a4046ddc920ff29 commit 77f4ec2a4111f1dce0c5903d6db7887413a0a750 commit ed0ccf349ffd9c80e7376d4d8c608643de990e86 commit b70ad01a22176b6d903e9cb2f2184c2aa67ecee0 commit ab597bb3760ce2e7a5c48755cacf7df8abfcda6b commit 79af2404e537e0f74798faa0a26bbd374ece27f8 commit f470b218b0bb7c9bae8aa2b4859d9a6bf97d98d1 commit 61b3b2da10dba0ac1633c699c9d305c702b43720 commit c94d13e9d99bc0432cbcc2371060acf5e10cd7ca commit 48bb92d91ae9331138656f369e66b5cab8f0fa7e commit 89bfcd82b3452b6e47ddd9d573add43dd7de54be commit 93afe1583758105ec390ed130681bc7b70371b7b commit afc2f276057ea1eb165c4249d15cfbc1954411f0 commit 87b5e77f02da9444c630b1860b9f384e805eeba7 commit 935ad3a74c7d231b82e7fca15899a5cab4195b95 commit ec3ca078850a3310c9a393866418c85b7e6d40f8 commit d7fd297cb0f19a87c1eab63fdb90f8ce8f03a533 commit e8c487a6b70f060cfeabf3e155c9daafd627617b commit cec24112e125a228d5077eb05ca793398de619e3 commit 068ea8bdc0aacb3bba3d1392ed41cc1116a671b8 commit 62640f251f4777cbed654e59827fccd3b4c94bce commit 5b723b12301272ed3c6c99c4ad8b43a520f880ea commit 574dce2d2414f7d782536fbbef7d20d1cf027e69 commit f9490399614050a47472ff127c67830cb4e311f4 commit b9d7eb6a31be296ca0af95641a23c4c758703c0a commit 92d0c2ebe564f492ea71bf2ca81de5d95d58d6de commit 5559c7ba93fa6adcfe6a39ed80081466d8165e5d commit 9cc57625a6f374174f716f87af3bb5df87118ca8 commit f9806a172070c2d6094b0a9e488c8c172a6f35ab commit 0b208d60adffb6b3dde41841ee423fb5be0d01e4 commit 501867d0d2a6bee3ec18a6471ad99a7a1af47e08 commit b5b8ed444a7fcbf5229f0469f85c752b5192a9b1 commit 181ebed7dcfce21dc152c3b473e3d44e7e94bf27 commit 8dd8ffb824ca7b897ce9f2082ffa7e64831c22dc commit 6b728595ffa51c087343c716bccbfc260f120e72 commit f257879182867979e64ea8940cccd52e9a01759f commit 1d82ef6552b5b3e8450c49fda90a82621fdb8142 commit d1af7b6f91a56081165bf1c1220bf1e0d9699d29 commit 9b693453a4eba392bbb62169243f9513366a253e commit 2f8a6699c90df7616e5dd03cc0c6ea22d589eba2 commit 8c26491f58538ffc647b813070ba493e35a48984 commit cccd73d607fee52f35b4b030408fa5f6c21ef503 commit e62f25e8b3cdd29224c27938addba817aedd4b54 commit 132aaaf01788d5603a1358cd53a95e5367fd612b commit 87bd701ee268a13babdfddea53894a416209123b commit 5189e3126eb136a2cffacc708f08ca4fe86ebcf4 commit a413c99fc1e49db4db27f4bf0f7791011b4e2132 commit 2cff4b9ed6171c61cc50c38b25534f7c3d30db3c commit 6f84aa1cd47cc0feb38da76999626051491316d7 commit 00e27ad85bc9842e2a775765597e6fe4b6beb584 commit caa574ffc4aaf4f29b890223878c63e2e7772f62 commit 5e3094cfd9fb313be3b8fbf9f91e92a30483bc28 commit 4b31b8e34460af9b2eff0d389a6caefcb694a1bc commit 994ea402c767e54af60f1d01f0c16520480466ed commit e78089da45093e0f421b933849c56b7bc21108c0 commit de45f0a3bef63a754839f008bb0cae86d8f501c1 commit 8f0991cccec93665dd6ecd88dbefd7db2b28c85e commit 72935696f516e3d587838a9f0e1f82d251925840 commit 2b72a38c6f9b9809cb09df4fa5aa886aab6bf05a commit 3c0deb1485c49fb282010d1add65514906ed8928 commit 602e604a899a0d06afcd69c693f15c5fd91742d8 commit 55223c3bedcffcb81400db7f1ed1f207d523eaba commit afea229fe10282da14595870b44f82792451dfb2 commit 476e4063022787b5720758239ee4c22fa2495e82 commit 95ee2a8b4b3cd1fb25f7e14e2202da4045030173 commit 64b2a6a054c40c04a4e48fd70002570654381f9c commit 9648f1c3739505557d94ff749a4f32192ea81fe3 commit 0591ee6a5c428c2309f5fefcdbe40d9eb669634a commit 757f9e4dd51644729d27c9b5e56f75681e8f17d0 commit 22804e03f7a5ed35d86721d037bbf52fbfd0369f commit d4a7eac27ec2e6b5fdb64066e967fc7767cd4574 commit 7342bf6530a78ae80b27d9a13bb10a409fdc20ad commit f141e251474d673f75e8c16dbdabeb4da3939d7e commit e1dd4bbf86d5e1e6ca2eedf9ef9ac680dbdb3132 commit cec2cc7b1c4a31c0facfdd0ee7c2ffb7d6a76556 commit 9dff13f9edf755a15f6507874185a3290c1ae8bb commit 091cd9c3abeb68981552557676985eec761d6fe5 commit 9bc34b4d0f3cb368241684cc5e0445d435dded44 commit 02ed904261481460e6084769416e7ca31bbb92eb commit 390a1f8beb879359359ef38d30a0b0ccf392148e commit 8ab62eda177bc350f34fea4fcea23603b8184bfd commit 3d515ba9ead046a0c06a461697a8d5211298aadc commit cb8f00f27ae7a1e8d047f1e2c96acc257f09d51b commit 92937f170d3f49f41d7acb86243ee691a98eb2be commit 4010ce9fb634c6368ebb9dead9ef83d49c4dde96 commit fe93feb5ab0f6eb1a08295dee51b814bf7227799 commit e6ff5ef81170e11dc0f196b0391f708f04fa8c87 commit f915686bd97a9c234602426e6d132b74a112a8d6 commit 94eb6b244c7cb0fd955f712d38a8ad9bfc7740a3 commit 03a62c40544c057a4b0df86b7c4f17da7f7bb2ac commit 7d7007686b0f999f90690d27eb013aba2eb8dc30 commit d95c25668f2379c807e1fa6328954f494c4e2454 commit d5b8da37c017b182e121e6143979bb969833f482 commit 6d8ebef53c2ccea482ed77769b7b5cbb453b7715 commit 94fa115f7b28a3f02611499175e134f0a823b686 commit b9ef89392c2ac694a3e5624cde8f848fbf393818 commit bbd57d16d5ddeb9d8995a6ded81a6879be6af928 commit e460f244fbe847904abd767e4ae093bad699f218 commit b887d5f9b9232b556fa324e77edb92039e626f66 commit f113cc32e35b5503b268f0bd891fa2b7d6d12137 commit 8f7519b2f3a93f6eae76912be66188366cc47aed commit a0c5fd46b2510cb054bd4e1fa6c2f207424c97e5 commit e7c4723103dc58c3d86fc7bc4e03c2ab500ef8b5 commit 0b1a63487b0fe45750528f89ea688eda2862dfa6 commit b784f42cf78b08932b837b5aa15d620520cd4d95 commit fd546bc5ad909f7ee67f90d91d4882f0fabc7edd commit a7f520bfd0551f9fd672b45b9b3cc56ab4275128 commit 5a82b018230b3947a736f45afa95cab434455248 commit 4683af148fe8f94383ed867ac986fe793381e362 commit d41ff22a4eefe2b933a82c0d3ce8ff47fa86e212 commit 78be946dad6d9f888726fbbb5de81b521f156c01 commit 23da6e0f7d5ebdba2b18ffcc228130a33d5411cc commit cf51c8bc5c0085e77ed956306ec7adbdb7bf5ab0 commit 3679b8518cd213c25d555553ef212e233faf698c commit 3a4bfa509eb0f73daa2e30e409ed907f2a7db82b commit f3067604b8de052c6a1c65eed3305cb6f3f9eb18 commit 2bdcb12ff69df5e42eeebb297ddfc110ee8af203 commit f11d9373b61598f6a231dbcc74829c2f11dd567b commit e0adbe73d75e46e3665cf0fb30f2cfc00dd78c04 commit 2e6e14c9e47dac61e341d4b8128184e3e0eb3568 commit 3e6084aee08b108f5cc489be46c68ba56b13e52e commit 10a9accd4842e6098cc27d79d43d7542254003bc commit 9ff28ab43af4cd9f1771779b502cac1bd0aa4264 commit dfd9be42344d9d3c1ff23778923210301ec5f372 commit c595fb05e392a5cd17c70c4fd996b8cc9735f20e commit aa34ca52a325d9a547158cdc8644f4c21d68562a commit 301306a90ed3b2311f7f2eee6fad239d3a65fac6 commit 5ac34ff1a41b05c3b22f8b4ce4bf7181246c8bc2 commit 0c41b9b561dbd81dd3955c4c8b59d55244a80100 commit 29c9b6cd581de79ef848a50d1c9f06cf567bfd78 commit 504390602444a209a52bfdcc59f539e9832079e3 commit a1235a01e0b208d424c5e72ff2e794dd356f74e4 commit 9e148e8ce29dba471d4812c6a60a3e843f3b6270 commit db749b769ff61a42480c377c30df70b8b722041e commit b74e2476efc40b1a4d895befc31fa05bced5f3b8 commit 5ce5a584cb826f1c1f0625a336134feb4e1142cd commit 15fd09a05a66216a9ad772728e51290f6dea1eb0 commit e2573d5f2a5cebe789bbf415e484b589d8eebad7 commit 5b45b1c8b89f84d01fea8939b672631b51cdf95b commit b51178d6edddbfc8cb4da5b5e9c924f2d24bbcac commit 203bcac9bf2c5676bfb0b33c7f2403ea5d6ed332 commit e776a755abf0dbe14001e4db22aa1ee70290c1dc commit 30424ebae8df0f786835e7a31ad790fa00764f35 commit 24c6bedefbe71de94455032f82cdff2694c002b3 commit 7f44571b53fd07e36ae4d2537a6fb40d79b39462 commit 54f43c17d681f6d9523fcfaeefc9df77993802e1 commit d814833f9e0e1fec2286e7d65c386583139c6a74 commit 4f0f1b58fbacc3d4f60e0cf17b01a6273df1d415 commit 45f0ff404cc92cc97569333314b47e1654a0491a commit 0bb319e7a1146e15f1919cfbffe44831c29e8f82 commit 158a05a0b885f456a86720b9b6b4571943d2e307 commit 2656fd230d21ab765eaea24f6b264a744919f13a commit ce075e75e5e3b1274735118f0a417e79d68f426a commit 8054e2f01c2cd287a3872baa02e30ea836ec8070 commit b3e8239882d9f5870bcd78baa342b0cc42c1fbb3 commit b83e1ba9395dd39f6336358dd0cbc8ca6ced21e7 commit f728eb3a5028aa87ec85f0de5c03daee78fdc544 commit d4da1f27396fb1dde079447a3612f4f512caed07 commit a2151490cc6c57b368d7974ffd447a8b36ade639 commit 0904b83e0cbb3dc1b8d5c0b1a5daeca725600eee commit 11ef5c77abc29d78ccedc26d01deb0bf0b2130f4 commit ab011ab6b007378132b242e6a70813aab3afc2c8 commit b8986c889e7ac26c57cb548f8f344456fa925a2f commit db927686e43ffebfc5d1693c1cb4fd74f462d99b commit 8fbf28934acfdac08073a2d5697c7cacae8d3997 commit 80253168dbfd256bca97cf7f13312863c5a7f2e5 commit cefbe724960bb6b40c019569bc42e02327a09ff9 commit 111aeed25ec6bf4d5b4a7b4cb5654f002ba9f795 commit adf47b75297ebc71c53b6dc2d3c55f42b8fb79fd commit 1a7998dab5dd3d11bada7e3921781922082e7fe6 commit ef0a04a010e2a521c927b071d6025c12a415747a commit 9a48ab11714c955456fefdd4ab532d324fbef563 commit 1be6b46f731392267eeebef9d59600ff9999a987 commit 9659dd2b308bde4143855f5b57b0412be466eb8a commit 1c0b1175e6f3729c91835f179eb9c97b5067bb3a commit 91a33f7e20700d58941b38bcf8eca0d0b281ddb0 commit 219aada263f909d61443a8d1196592797c6e0281 commit 2dce68fa325ecf5be7007b9e8b13174262a185cf commit 4801b99588a2e022da50e43ec5f768707de3f862 commit 98529e950d4cd25c05643f9811e2387df58bc6be commit d9a5696e7d52edf68776599f2a38b9aee1382be9 commit 58fb284c52b6262b9bd43420aa39124c39e2342a commit c723b8ee3864bdf41cc560da958b7ef7f6138f0b commit f3d45c9d556bf6174258507e0e10519ab7f5679f commit 5fc83950572a65d33ccd661cd9d8be7ab885d446 commit 691ebb1109c97da2943e2d753add9ad5fc63200c commit 0df0c76cc3fd99d72bc1b18eae25ee3e8fb9d1f7 commit d2cc01e1794bd13199f7568298614f1bdcea1683 commit 6c64ae228f0826859c56711ce133aff037d6205f commit 4a248f85b3dd8e010ff8335755c927130e9b0764 commit 235582ca96214b50fa03ea77a5e85e59d94cf358 commit 3312a4ac8a464daa66b97452ec148b69c5959bec commit 30b9d1b3ef374403652fc10fa36b9a5f32cc274d commit 26ffcbbef712f6fb52f16e6f7d5cde736b80d8c4 commit f9eb742988e20fb86926de8ad18d7e93b53d1a62 commit f199bf55104d480370515bc736418808e5cfa6b9 commit 2d45f66887055e169173345a7e6249ecf3ee7e21 commit 5558d6c23d18f2143f60d7bb387e43a5d8216fa5 commit 95ae342dc939a220b7afbd3a65f7106258f67cad commit 1e7e8e18db0fdd4da4e91597cf4d59265b8f351f commit 0e65e2e6abb09d84a75c51999e3a6cf80f30c929 commit ffb5c099aaa13ab7f73c29ea6ae26bce8d7575ae commit f85b3f806e4d43a0e3e5c042f40b7fe5faf2f6cf commit 7eef7f670086f06b3a461f1b4d1e84f793ed4861 commit c03d982670335d732e5d623af31c126387ae126a commit e22dfdb63df36427067fad6b9bfdc8c08371ab38 commit 38a15ad9488e21cad8f42d3befca20f91e5b2874 commit 9373505967ffc1b7b8331a21ba86ea436c09b981 commit 503725c2d9865533b2894f7363be16c762260b7e commit 6e0c5bf0cc1369df0057bccb3fc1af3b38d07e32 commit fb87550d2517878ebcd112f080865a2dc38e9bae commit beac7709e40ba85e0827ffe0c6f3d6840588db31 commit c803ae6d826e441b65b96133ac573c0062740bc2 commit eee5215bd784eee5f8520f2deebf437c3fa95abb commit e068ef3fd5a3574359b80ff823089ca59057f9c8 commit e2a1e7abaee128020fde54d386ec8959b1e9eb61 commit a8b2b8b06e10224c547d90ea97c483b4de511b22 commit c0bbed9051b6eb293be6128d060bb49e999ef7d4 commit 150430366b2dcb170d309952143e32eb814fe7f8 commit 944823c9463916dd53f365e9aa07f23360968080 commit 4b88ad503d6d2ea11891a355e656bf428ec815e6 commit 505c4857fb13fb0ea88a42b843c91d0b9f8231fe commit 803efd297e315859ac7830445699f01eeb1f7822 commit c674c5b9342e5cb0f3d9e9bcaf37dbe2087845e5 commit f4c1fdb93992ffc55899f38ddebcc0e1c390226e commit adfadb5638bf32e97326ec05ae379be561e13677 commit 87cb6d80f2d196427e64d2e6179ee9b1a3609dce commit ea4ca894a160002f4488324ec39083d992cc7163 commit e393e2aa0ad7ae0d187de93f4cbcfc480d28b5f6 commit 88ed07cb2737e15b7ea412dd8ab37de2397cccdf commit ff6b19d3a0f939465b1e40040c4c4869154bf516 commit b2006061ae28fe7e84af6c9757ee89c4e505e92b commit 5e2421ce79703b969eeb9684cedaa76be5305ddd commit e41d27eaf5485df99f366bf7c5382375bb2c19ca commit 52e8da704d8d3ca8b951fbc39cf8d6bce5c33db8 commit b8cb6ab68674d7889c0dcfac2d542a63b9e36d82 commit e433d6843310a259f0be18c80de26d75b9f7fd35 commit 38abd56bed580c98e4284a578380f5f70634a0fd commit d58b8a99cbb84c1eb3b3613d23c1a328695a9455 commit 1e242bf8bc1b37c74619403d0dd59d0f862af943 commit 6dc0fded62806373855350ec8c3ccb1567ddd465 commit 4affb123033851381dcff4887982f6c7bad938af commit ca6fcfa8d4461c889636ef5dd51bdec96c6122bd commit 91dcfe5fd9d3a59aec4a40031c1eef00b41b8f74 commit b51759661e2987993fb49eadcc262d6a2ab2a698 commit 01d468d9a420152e4a1270992e69a37ea0c98e04 commit 667c7091a39e8b360d34f37aed5f8dd85bdc45f7 commit 1f211a827cbda87bd0ec145a1f44f2615c3f56d3 commit 35366481d0941e9b470ccf09d85407381b5d6135 commit 9dad47c50f9bf19153c092a73eb4721344f4a78d commit f578a37d19c65361e141735cdcb691d3930b8647 commit 0dca257d6dc5526c4c293f306b7b47765987de22 commit f148c143ef3f6e897f4a1012d1bcae3aa240bd8a commit aa8e65dfc75f684cd46d49f71453ea3512a1e770 commit 149d7ba1f8fe515a2a36ff95fa659720e72fe4ed commit 30e58102d5164ce5df10bbff4c9d05acbd12a5fe commit 80e0c2cb37b6e00ec0b41c7670e24f72b2d54ceb commit 957b0787ee5d5c0848e2dde625c09850e1ada22e commit 7d4108e4ceb30a89c63ae62bea284cf42985cf31 commit 57230f0ce6eda6d47a2029b7b3a39cc5bb63fe32 commit 5aa061474b1e0cc9605877190e23a880cf1551e4 commit e6fac6a9c9eb42a9362f9f093dcb8862f2b38383 commit b6901d93cc126bbfbdc6caf5f0c03b82945e43f2 commit 00bfab4457c2b57897ea710a423684979c5b0239 commit 9a1358bb2ce3738826bce0799d47d6963ccb51bf commit fabe1753851c62d0292a39d89a4a8d7f15c96794 commit d7709eb6a197171715f370227173e817a3da85c8 commit 7952fa0d3e187504d509aa32f46d4d430e4eb634 commit fe5e8f07fc25c850e4f46967699a9b29b0ef647d commit 45a3e06be4d351af8f81b43407b3eafa5c75827d commit 1b537e64105dd8f04c8e7d5fbd8e97f9dda2dadd commit 31f5f46043c7e7fa453b0b64ea12073d524e2150 commit 825e0af0d453f18bb84feb40bff447cf59d61979 commit 3192f1d9b61a59d7c82fef187bffa7281fbdc9f5 commit 701920ca9822eb63b420b3bcb627f2c1ec759903 commit 730ff52194cdb324b7680e5054c546f7b52de8a2 commit dc90f0846df4870b6cc8528c31e5c60f18fb68be commit 27674ef6c73f0c9096a9827dc5d6ba9fc7808422 commit c9e9ce0b6f85ac330adee912745048a0af5f315d commit 2ab82efeeed885c0210a0029df93bb95a316e8c7 commit 863fa85e6a01c8b239009825dd9de1f64d7d020a commit f70b88b994a35755f1a065ba4b43d2ad4b401e15 commit 7a1bae874b5ec07ac97f02018dfad73fb9bae567 commit 5f5d08b7eb0ab09700b22bec2adcecb8a1de1120 commit 575d0df6dae46f1b5d26a35ce0ccbc5aafd40e1d commit 36b362f5af1ee23ef502b519c2a8e2d273b2f156 commit 493a7508d737a03b620bb0806e222bd39a9ebca0 commit 90d282582aa709eeadaf33db71e92718c9471e31 commit 9e08564727fc7770b30715fb81348aee54fa50c3 commit 24bf9fd19740df5aedb3bc801206f81dcb4acc4f commit 811c04dbb3dc43304b35688d4009117e28c1e9ce commit b6065ebf55ff2fe3dae98e7cedb6ec4aa3c33f91 commit 11eb648d014eb9e80bf553004551dd6694dfb5a0 commit c8b0507f40deea3d5014b5b4989b6a06ffedde70 commit b664a56e8626264276ee27edf949e748f6be52de commit d18b8eadd83e3d8d63a45f9479478640dbcfca02 commit 8c7442f026d2e36e1185b9dd79db51601d875b7b commit a190f8dc4aaf6064527bb81c07f7cff1904dc927 commit cdc7893fc93f1969038ed333b33eac1452c8d255 commit 6103b2f24e4a9716ca3f5de654964f2a083086be commit 48e9fbd1a28480caf2ac5ec6fcb79ac221735c5d commit f7ddbf5581b474fe4a0a29244acaa1bf72234675 commit 90f45c42d7d7b0ec0fd797485c07fc421c474e12 commit 17154addc5c1a175bcf3441ff0d9598efa1f05cd commit 43d26c4fc6c446d766253d546f0083d78023d34a commit 53b97af4a44abd21344cc9f13986ba53051287bb commit 4fe4ed07c815044755075eaad5fe1815436a060f commit 117f5bb31c8cdb1e8f0b443f2a0ac761bf54694c commit 176c0b55d9bfe6e2a7c8ccf3edaec7c92d856b2e commit 5c8107dc9a9f33a88a380aea79be564597d00663 commit 4546281e8ab215b2beaba8e79975c99859a84a56 commit e17c6debd4b2d2d474074f83946f8c6522587566 commit 5e7f44b5c2c035fe2e5458193c2bbee56db6a090 commit d55957fb299b74829c438f77fe29896e3aed39fc commit 96a2f0f2c8006d338a9647e068a15c6eb299f864 commit 482d7b582d7f9688a5f64ed2424157a76a17f2a7 commit 955ad0c8ba93256c9eeeefde5644b3480c1ddedd commit 1d38fe6ee6a874675ca3bba6b48e69a0e6176ffc commit c1593ddd894d0518fc96fe7f531f3a5c919b8463 commit 60a9bac8ab48ddbf68dc280cd26879583e9d72ba commit dfe3da812d99b40f99ce018152db4b3a87bd86c4 commit f8d81df285a2fa2e739a9e4774e413ac778d282c commit e96902eb8c69fdcc55fa6beee796c6b34613e0fc commit 37114e4d1547ed230706d07edaee2d2b4b3215a4 commit dc593fd48abbea1e840c847c464eabc9c6bca180 commit 4e6c91847a7fa94a6a0caeeb388718b8ae005d56 commit d5109fe4d1ecba04d3f6903ab0421188d1420d22 commit f321c35feaee8dbde551775210ae3d41534b7a20 commit f6d790e5a7fe42706756c7fa1686d08d230610fc commit 1344794a59db2bd44b4919d2d75300fd3b1c2cd7 commit 3886a86e7e6cc6ce2ce93c440fecd8f42aed0ce7 commit bb7c3e9ce2d43a37b699ca379876089e03a756e3 commit 7c916f95f58df401fef4f8c7549aa80a5739b0dd commit 3b8b44a431b76be2645806cfa0494399c3dbbd85 commit df5a07c45c68fd85cd4d1a4ad7892d3a717a4ccf commit 4984e3aae6fa4f42fc24f2745b74509bf2cb0b03 commit 4189f2938d49d4d6b2e2191c86000c2e04ca7305 commit dbede77ce38df760bcdcbc53287e8673fa65982a commit 3741584519dcb780c38df502dd5e4cf7cea4d9f2 commit d8ff38d8fcd0a7bb66d17ec689135239aca78532 commit 53923e62afad6f52b2b931a74d2ee10274051b28 commit 5fed53c7983654b1658c49a030ac86bba7965fde commit 305f098020920f9ea6ff9162ee46392f4d67e67f commit 76a52f36b636cdff6b5b18f13daf05005e4b0b57 commit 4a897de1d607c15ebb9aa11a424ec3f3243304a3 commit 4185f99094d50a2f402153ff8922bc694f5f6d96 commit e7145aaedd55b19ae4e8bd25cbd4ef8f415b6b89 commit 6e899860f557fc60135506242cc3fb705e64b718 commit 9c1e260e97606330518a78422ae28d9d56ac87d6 commit 84ce38c7bf7a19fb1f9cc61181e830b7e04dd51d commit 32685b32d825ca08c5dec826477332df886c4743 commit 44ca49f046f89a97ad319372b4fdbde67da1b6b3 commit cf689e869cf0339c387397c7a6805e387594656d commit 22f87d99832650d9389b0b3d08f3c970afc53f10 commit 6e6faf7a8364c77f4021f44043a5a5cee91f7025 commit d510eccfa51e09f5e65621a2e8d41f58a8dbd3ba commit 69691c823531c36c7283ecaa040e99e9c12ece07 commit 8718ca1dbf497c302df989afaeb82f05f5a3d961 commit 2e9fda82c98b1e417b90ff5a2f8b8b96cac06fc5 commit 67a359d85ec2679cc8e11b16844df960e3b27c24 commit b38c074b2b07349097d824e3c6c49b5ac8d98910 commit 65722ff6181aa52c3d5b0929004af22a3a63e148 commit e7031d8258f1b4d6d50e5e5b5d92ba16f66eb8b4 commit 0fe382fb82dc6cc6eaba6534d038dc381e2b17b9 commit 6f172ae59a7577dbb73e2a8da18697ba8dc56341 commit a03b288650abf2a92d5ecdaa737e3d04a2a77984 commit a29d44aea1aef0bc58d4951f2ddbe5b22d9a2e94 commit 85ac2021fe3ace59cc0afd6edf005abad35625b0 commit 72a98763b473890e6605604bfcaf71fc212b4720 commit 436afdfa35dc8aaf43959593f6c433d0ad29abc3 commit a0248d543bbf2a977e7e6d9966ce8d96f6e5c358 commit 10499e4055949e4682d2e7c428365175e99e0800 commit a18112ae72d693bd4eb79f2ec09b536eeacb902b commit d853419f5fcce39553ce0f6837fa122f113b15b6 commit c791d75a64f5c628a9c9a7d9b9ec01ef0357e6a3 commit 906fbba2c9d48678fd182d0de4dd193d9dd0cc9c commit 3a0625813bacf12bf188f8242b42b508af28baa0 commit 2716bc822e2325efed0731d6a6a7dff755dc34d7 commit dd15640bcee5a5fa74fc52557dd6220f48b01116 commit a91b402d50072e4801b231925f33574f90e562ce commit cfe7c679412f14811cb3c4119c8025cb97564c48 commit fdf0ece6309d90dc0f9388001239cb2d12671af3 commit 8476269f758221863c01a0a6cccb0d75ec5d60c3 commit 8c0f11ff3895ec96c9523ac607dd51f812ab69a8 commit 4e2f50e2306fdd0e5fc7db3d9a452ba1327b787e commit 9527b9caf82b040e794fba2667f6d8a85a793bb7 commit 3f543552846b9ae47c8442af1c506207bdcc00d2 commit faad5ccac1eaae584f9ac2ea66278bd137edcbe3 commit bd4b9bb77956639e6d9618ed306cb2264c69ba49 commit 58398727e6f4955f2781e93517b8f0a3e8f22e75 commit 28b7382621f0a83f1db795f36ee0fee6f66c10e9 commit 508a47d434bffde45ca3cdb8ece186f28f9d84bf commit 1cbd78879b5f889355b2a6343ea5db7e633438b0 commit 07d01469325c87aef4ab02ad4ec31d73321665ee commit 606d5877592b0a6f945a68399c870ba9d2a9ff7f commit 426c89aa203bcec9d9cf6eea36735eafa1b1f099 commit c94b731da21f10086a9e52d63c21c730e3f6c939 commit 3a84fd1ed53582b31e843a152ee3219e9e4ccb8c commit 278da06c03655c2bb9bc36ebdf45b90a079b3bfd commit f11de8611fd6bb15bd979bbe5de0c4d59452f8d4 commit d14eb80e27795b7b20060f7b151cdfe39722a813 commit c6e90a1c660874736bd09c1fec6312b4b4c2ff7b commit 1d204ee10817aed6666e020ef1b4c643d68bef11 commit a860f266a0e19f271b839451d291a6acf6ddcfe8 commit 9cddf03b2af07443bebdc73cba21acb360c079e8 commit 1937f3feb0e84089ae4065e09c871b8ab4676f01 commit 3ef8b5e19ead5a79600ea55f9549658281415893 commit 00f4150d27d2c01eaeffe1091fc311a7c0872c69 commit ad9c6ee642a61adae93dfa35582b5af16dc5173a commit c5c948aa894a831f96fccd025e47186b1ee41615 commit 9030fb0bb9d607908d51f9ee02efdbe01da355ee commit 5662abf6e21338be6d085d6375d3732ac6147fd2 commit 7344bad7fb6daa4877a1c064b52c7d5f9182c41b commit 3ce62cf4dc3b01d1cbee1293049ca5d4c7d6d749 commit b14ffae378aa1db993e62b01392e70d1e585fb23 commit 21050a39a3b676fbaed4ad6c5871b917a91abe9d commit c73c3576a2227492b448f9be41428ce6a0b5855a commit 34af78c4e616c359ed428d79fe4758a35d2c5473 commit caaf2ae712b7cc3c7717898fe267dbf882a502ef commit 64a8f92fd783e750cdb81af75942dcd53bbf61bd commit 519f490db07e1a539490612f376487f61e48e39c commit 32f90e65251981f061eec883b0fe9e75d74e9665 commit 2d505453f38e18d42ba7d5428aaa17aaa7752c65 commit 60d61f4ed6ead43ad2de31ebb8d1d27c57290529 commit 1647b54ed55d4d48c7199d439f8834626576cbe9 commit b818a5d374542ccec73dcfe578a081574029820e commit 0d8e4eb337644cab528ff3844675d58496ec22db commit 93dde6ccd66d29502506e95f568fd0f49d575d27 commit 3107e1a7ae088ee94323fe9ab05dbefd65b3077f commit 5e8a71cf13bc9184fee915b2220be71b4c6cac74 commit 6bf528ec91fb96e186461215c8f76265c5a35250 commit 7d56a154e22ffb3613fdebf83ec34d5225a22993 commit bd219322dbb41cc7c753da3a6936ce09d502f113 commit c9fbf6435162ed5fb7201d1d4adf6585c6a8c327 commit 02fc996d5098f4c3f65bdf6cdb6b28e3f29ba789 commit e5fc78252ccd8dfc260f87d83905e9dffff6d975 commit a572f7055067d95455850fd242d8b54ff5786cac commit b7dfbd2e601f3fee545bc158feceba4f340fe7cf commit c5650327aba02d15cbd6a1846dcde9231493d549 commit 6ea239adc2a712eb318f04f5c29b018ba65ea38a commit ebbb7bb9e80305820dc2328a371c1b35679f2667 commit 5f3854f1f4e211f494018160b348a1c16e58013f commit 7057c81773ac32fd0dba00e2bb869928f008d3e2 commit 609910db56e72e87755d9745442bfdfa009dc61b commit 0dc386add50b07e1cf9341b4e6e4fea77295c98a commit 15f9cd4334c83716fa32647652a609e3ba6c998d commit 50560ce6a0bdab2fc37384c52aa02c7043909d2c commit 148a650476955705482dd57e7ffcf105d8b65440 commit cb7cbaae7fd9cee64f19cdfd89d097d807b884f5 commit 266d17a8c0d857a579813ad185cd1640b0d6ccac commit a701f370b521b2ed0654a9da7cf424b3ff8fa73d commit 21d139d73f776aed1e86f3175a1e9fb8a10930c7 commit c42ee39c1e78224d3a81bdbe0600abe4581226ed commit 67bae5f28c895f8737a1974c3f31cf12b9170b14 commit f444b2d15f7a025416ace9ec298f0b93ef68be68 commit 38d4e5cf5b08798f093374e53c2f4609d5382dd5 commit cf5c5763eb531ff5120111ad300126e926fb5a56 commit 13043d1a12c54d8b6605bbead5e177e9fb98a287 commit 945da79e6dd058be70bc47442dce319844e14daa commit dda81d9761d07541c404dd5fa93e773a8eda5ddc commit 862a876c3a6372f2fa9d0c6510f1976ac94fc857 commit 95707203407c4cf0b7e520a99d6f46d8aed4b57f commit 58e16c752e9540b28a873c44c3bee83e022007c1 commit 83e9faac9a387894e945e7f33c2bb7a9c348257c commit 2944dbedc7e167221fdb99531f7b0cdbac9ac696 commit b2075fce104b88b789c15ef1ed2b91dc94198e26 commit f4346fb3edf7720db3f7f5e1cab1f667cd024280 commit 4052287a75eb3fc0f487fcc5f768a38bede455c8 commit 96f2b7a3571618a1c8aed694c9e668014c70898b commit ef1a0808a2e20c58d166c5707864fba515832bd7 commit e79a2398e1b2d47060474dca291542368183bc0f commit ca1198849ab0e7af5efb392ef6baf1138f6fc086 commit ebc002e3ee78409c42156e62e4e27ad1d09c5a75 commit 7e8906dc2689cbf562ce520cf4a8ba5b495db0f6 commit 6e93d5b0333279d8968a2972065f47a899fb58b9 commit 879791ad8bf3dc5453061cad74776a617b6e3319 commit 28c25238898a242c58bfaff3f46a006585c2dd94 commit 2f25d8ce09b7ba5d769c132ba3d4eb84a941d2cb commit 72cfb835e56f0eec18f934095fc1a52df1815f0c commit 691b592abb9a5f2b331969393bc06fcc8b564d3c commit dc7d19d27d019d223e74f2f47ef47e778781cb52 commit 995f74807329c97e0aa7449c7a8345fce978a2c4 commit 88711fa9a14f6f473f4a7645155ca51386e36c21 commit 1acb34e7dd7720a1fff00cbd4d000ec3219dc9d6 commit 022074918042465668db9b0f768e2260b1e39c59 commit f8e6b7babfeb40987e946bc1427609a9976017fa commit e4f1541caf60fcbe5a59e9d25805c0b5865e546a commit e3cf2e05441a2c5107fbffadb5b7943113ee11dd commit 887f75cfd0da44c19dda93b2ff9e70ca8792cdc1 commit 4593c1b6d159f1e5c35c07a7f125e79e5a864302 commit aadaeca46ce54af9f8f494792a1ba47a6fbda7ba commit 8e401ff5380a921c309d4c73cacf27b0bdb5f168 commit 9df1e3ff60241ce3fb26db75933970dd1b871213 commit bb02330408a7bde33b5f46aa14fd5d7bfe6093b7 commit f92055ae0acb035891e988ce345d6b81a0316423 commit 5f18c0782b99e26121efa93d20b76c19e17aa1dd commit 298799a28264ce400d9ff95c51b7adcb123d866e commit 169466d4e59ca204683998b7f45673ebf0eb2de6 commit b089c0a9b14c354a0c3a421e09af3208cb7c232c commit 94f4c4965e5513ba624488f4b601d6b385635aec commit c18a2a280c073f70569a91ef0d7434d12e66e200 commit ed911c9f9dcb26849fa688225f002ef2f2c50cf4 commit c05d8332f5d23fa3b521911cbe55a2b67fb21248 commit 4ae4dd2e26fdfebf0b8c6af6c325383eadfefdb4 commit f7e1089f43761ca221914aea9a755b23dc7cbc33 commit 7c6b6e18c890f30965b0589b0a57645e1dbccfde commit f567656f8ab82e43815d8d071d9864941b613a82 commit f95af4a9236695caed24fe6401256bb974e8f2a7 commit 65e54987508b6f0771f56bdfa3ee1926d52785ae commit a71849cdeaec4579696e5e1c45d9279f7b7484bd commit fb8cc3318e47e1a0ced4025ef614317b541147e7 commit 9d9f720733b7e8d11e4cc53b53f461b117dab839 commit 841e512ffb64898db6322c0619f6bbc41266d86f commit 19965d8259fdabc6806da92adda49684f5bcbec5 commit 3dfe85fa87b2a26bdbd292b66653bba065cf9941 commit ca5e2f4d6b677efa3f43a6790777e46dcf806e4d commit aa482ddca85a3485be0e7b83a0789dc4d987670b commit 9b9bd3f640640f94272a461b2dfe558f91b322c5 commit 87fd2b091fb33871a7f812658a0971e8e26f903f commit ab244be47a8f111bc82496a8a20c907236e37f95 commit 3220c3b2115102bb35f8f07d90d2989a3f5eb452 commit ef3a6b70507a2add2cd2e01f5eb9b54d561bacb9 commit a56f445f807b0276fc0660c330bf93a9ea78e8ea commit c65b364c52ba352177dde6944f5efaa29bd40b52 commit b7c15a3ce6fea5da3aa836c897a78ac628467d54 commit 5005e9814698f47c5a3698fcc56c9f5e6f1d4644 commit 370704e707a5f2d3c9a1d4ed8bd8cd67507d7bb5 commit 1d6595b4cd47acfd824550f48f10b54a6f0e93ee commit 3059d9b9f6aa433a55b9d0d21b566396d5497c33 commit 21d1d192890ced87f2f04f8f4dea92406e0b162a commit eb7bac3973d209e5227d1783676362ee5a8a7127 commit 54395a33718af1c04b5098203335b25382291a16 commit 89e96d822bd51f7afe2d3e95a34099480b5c3d55 commit 6e03b13cc7d9427c2c77feed1549191015615202 commit 7123d39dc24dcd21ff23d75f46f926b15269b9da commit 7b1d6924f27ba24b9e47abb9bd53d0bbc430a835 commit 6e4a61cd39685476f7ea74e75fb66666d541050b commit 64eea6805ecf7092a113bdb4cb73860430d39de6 Signed-off-by: Karol Herbst <kherbst@redhat.com>
2022-05-23 17:17:03 +00:00
/*
* dma_fence_array objects should never contain any other fence
* containers or otherwise we run into recursion and potential kernel
* stack overflow on operations on the dma_fence_array.
*
* The correct way of handling this is to flatten out the array by the
* caller instead.
*
* Enforce this here by checking that we don't create a dma_fence_array
* with any container inside.
*/
while (num_fences--)
WARN_ON(dma_fence_is_container(fences[num_fences]));
dma-buf/fence: add fence_array fences v6 struct fence_array inherits from struct fence and carries a collection of fences that needs to be waited together. It is useful to translate a sync_file to a fence to remove the complexity of dealing with sync_files on DRM drivers. So even if there are many fences in the sync_file that needs to waited for a commit to happen, they all get added to the fence_collection and passed for DRM use as a standard struct fence. That means that no changes needed to any driver besides supporting fences. To avoid fence_array's fence allocates a new timeline if needed (when combining fences from different timelines). v2: Comments by Daniel Vetter: - merge fence_collection_init() and fence_collection_add() - only add callbacks at ->enable_signalling() - remove fence_collection_put() - check for type on to_fence_collection() - adjust fence_is_later() and fence_later() to WARN_ON() if they are used with collection fences. v3: - Initialize fence_cb.node at fence init. Comments by Chris Wilson: - return "unbound" on fence_collection_get_timeline_name() - don't stop adding callbacks if one fails - remove redundant !! on fence_collection_enable_signaling() - remove redundant () on fence_collection_signaled - use fence_default_wait() instead v4 (chk): Rework, simplification and cleanup: - Drop FENCE_NO_CONTEXT handling, always allocate a context. - Rename to fence_array. - Return fixed driver name. - Register only one callback at a time. - Document that create function takes ownership of array. v5 (chk): More work and fixes: - Avoid deadlocks by adding all callbacks at once again. - Stop trying to remove the callbacks. - Provide context and sequence number for the array fence. v6 (chk): Fixes found during testing - Fix stupid typo in _enable_signaling(). Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> [danvet: Improve commit message as suggested by Gustavo.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1464786612-5010-3-git-send-email-deathsimple@vodafone.de
2016-06-01 13:10:03 +00:00
return array;
}
dma-buf: Rename struct fence to dma_fence I plan to usurp the short name of struct fence for a core kernel struct, and so I need to rename the specialised fence/timeline for DMA operations to make room. A consensus was reached in https://lists.freedesktop.org/archives/dri-devel/2016-July/113083.html that making clear this fence applies to DMA operations was a good thing. Since then the patch has grown a bit as usage increases, so hopefully it remains a good thing! (v2...: rebase, rerun spatch) v3: Compile on msm, spotted a manual fixup that I broke. v4: Try again for msm, sorry Daniel coccinelle script: @@ @@ - struct fence + struct dma_fence @@ @@ - struct fence_ops + struct dma_fence_ops @@ @@ - struct fence_cb + struct dma_fence_cb @@ @@ - struct fence_array + struct dma_fence_array @@ @@ - enum fence_flag_bits + enum dma_fence_flag_bits @@ @@ ( - fence_init + dma_fence_init | - fence_release + dma_fence_release | - fence_free + dma_fence_free | - fence_get + dma_fence_get | - fence_get_rcu + dma_fence_get_rcu | - fence_put + dma_fence_put | - fence_signal + dma_fence_signal | - fence_signal_locked + dma_fence_signal_locked | - fence_default_wait + dma_fence_default_wait | - fence_add_callback + dma_fence_add_callback | - fence_remove_callback + dma_fence_remove_callback | - fence_enable_sw_signaling + dma_fence_enable_sw_signaling | - fence_is_signaled_locked + dma_fence_is_signaled_locked | - fence_is_signaled + dma_fence_is_signaled | - fence_is_later + dma_fence_is_later | - fence_later + dma_fence_later | - fence_wait_timeout + dma_fence_wait_timeout | - fence_wait_any_timeout + dma_fence_wait_any_timeout | - fence_wait + dma_fence_wait | - fence_context_alloc + dma_fence_context_alloc | - fence_array_create + dma_fence_array_create | - to_fence_array + to_dma_fence_array | - fence_is_array + dma_fence_is_array | - trace_fence_emit + trace_dma_fence_emit | - FENCE_TRACE + DMA_FENCE_TRACE | - FENCE_WARN + DMA_FENCE_WARN | - FENCE_ERR + DMA_FENCE_ERR ) ( ... ) Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Sumit Semwal <sumit.semwal@linaro.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025120045.28839-1-chris@chris-wilson.co.uk
2016-10-25 12:00:45 +00:00
EXPORT_SYMBOL(dma_fence_array_create);
/**
* dma_fence_match_context - Check if all fences are from the given context
* @fence: [in] fence or fence array
* @context: [in] fence context to check all fences against
*
* Checks the provided fence or, for a fence array, all fences in the array
* against the given context. Returns false if any fence is from a different
* context.
*/
bool dma_fence_match_context(struct dma_fence *fence, u64 context)
{
struct dma_fence_array *array = to_dma_fence_array(fence);
unsigned i;
if (!dma_fence_is_array(fence))
return fence->context == context;
for (i = 0; i < array->num_fences; i++) {
if (array->fences[i]->context != context)
return false;
}
return true;
}
EXPORT_SYMBOL(dma_fence_match_context);
Merge DRM changes from upstream v5.17..v5.18 This commit was generated using: rhdrm-merge-drm v5.18 2043115 Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2043115 Conflicts: drivers/gpu/drm/drm_cache.c drivers/gpu/drm/drm_gem.c Conflict resolution: diff --cc drivers/gpu/drm/Makefile index 301a44dc18e3,308c302c58e9..c2ef5f9fce54 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@@ -134,4 -132,9 +132,5 @@@ obj-$(CONFIG_DRM_TIDSS) += tidss obj-y += xlnx/ obj-y += gud/ obj-$(CONFIG_DRM_HYPERV) += hyperv/ + obj-y += solomon/ obj-$(CONFIG_DRM_SPRD) += sprd/ - -# Enable shims for the RHEL DRM backport -subdir-ccflags-y += -DRH_DRM_BACKPORT -drm-y += drm_backport.o Commit list: commit cce936f4fff736927ffd53a61d7b2c6a1064e0c5 commit a908db6d98782e8d9a8d545dcc74937db5bfac04 commit ae361eb07e9b498bc224db81113118fd28e35f6e commit c2a9682d2214e834b493c454e38809e571bb3045 commit b8ca477e51318d28f7514abfb5a369e11848a8cf commit e74c6aa955caedd06b5ade58e31e33338e4efde6 commit 637088a21e204b129a03dbd59bc0cd80d0292651 commit d0c0cf22d7071e9ba8d30be91723e1d997a07970 commit 49d535d64d52945e2c874f380705675e20a02b6a commit 11343099d5ae6c7411da1425b6b162c89fb5bf10 commit 60c9ecd705be3a28f79d70ea21c3939db668bf46 commit a36e7dc0af1cc7e5eaa89136c35a5305fd693731 commit 007354597d5c12a8d44a34c66a2e1a089bc7d3d8 commit be5b6985fbbe6ba9580351b3c9168c84e51bee5c commit b96a1d8c5189452d80551f2c38ef50c533c19669 commit 3edcd504077c02c9e6e7b687a43849eacbb8088d commit 9543e3c0511da64a77b1af3ab1f7199c39226e1b commit f21e5fa191be05616e3250723c5c4cadc9baf84a commit 405d5382ba083e6e54df354909b1583f1e3cb0db commit 70704fbf67ddc07ffc81073a3af1f7b2171697eb commit 943e6a8beeac1b676265f2dd81a69d7bede5e41d commit 7e28d0b26759846485978ada860ef4a427e06c8f commit 5995aef006698bb639547a439f47492de5c37f05 commit 5664e3c907e20523cda622268716867e77648d0c commit 6844a28885183a5a2af92a8d315a59f7a0e668b9 commit 825ca9ed1c9f5516b30292bb1c7ab648c2a01b92 commit 980f42e7d57464af190d05b9cc0bc21846734f48 commit 798c5daf3cddff3f39c5542a50a2dbd83879b05d commit 249af7242af72a826dbe93f7058237eee4fac1d6 commit a88afcfa258672601eda5966439d2fc310a34cb7 commit c3c2ac4c77ee2191ae2f1e8d140a59e852104e3b commit cbffbac9c14220b8716b0a9c29d72243f6b14ef3 commit 62eeb9ae1364cd96991ccc6e3c5c69d66b8c64df commit f7747be1410321de8a92e340c5ca6c18a59770e9 commit e35d8762b04f89f9f5a188d0c440d3a2c1d010ed commit 0b464ca3e0dd3cec65f28bc6d396d82f19080f69 commit 6edf615618b8259f16eeb1df98f0ba0d2312c22e commit 5f4f958a0d9dfd7a569c56e76840e39b0c434378 commit 3b26a2916844cf2680de10206e193e1d13f0eb88 commit 50d76e3d3ec0c18dbe2c801af676f7e7cbedbff0 commit 7c442e76c06cb1bef16a6c523487438175584eea commit 7020449b8f5ac0f7444a584645edec02f7168f1a commit f5f05ddc37e0445567e4a2369b73ecf9ee2e187d commit 816e3be74f16f3064e74acb3e6ed69e27f14231b commit 80dfdeb75028084f42a81a4151a986c56aeec1c1 commit 9294914dd5507eca56566c470c56327f46dfd4fa commit 96211b7c56b109a52768e6cc5e23a1f79316eca0 commit b146e343a9e05605b491b1bf4a2b62a39d5638d8 commit 848915c35e22d36614f2b0aeca6ebf7361e8e204 commit 204129a211fc486164c25e6082941e4fe3ba889d commit 5c24c9d227e9bbcba509752a32b3da5faa149aec commit 59dc4632e35becca1186dbab83ac7cf8603afaa9 commit 17190a3492bb20ce1cc695fdadc7e4f7ad5b44ff commit cdeea858d8df9891ed75415f377b3564f899a659 commit d14f0c205302648df29c494a1a81ec3d897a2552 commit 91d8531393be96b4a088290cc67233b2e6ab072f commit 506d9d7414cfbdce02b7126fc8644f04ef234680 commit 59a39fcc21c56845e74bf60c1177925bb0255de4 commit 5313fb2c779f74bc5083e9d3738d9b2c2ebe0aa4 commit 814d5c51f8966895bb20b51c886bd3961f76f3f4 commit 5edaa2b9748979b08fcdb2f65781aac39e6ae011 commit df2d385cb4132e945d5bc17d387d0fb6f5d4d66e commit 9354417750e51c3d120cb6040b1b69f70d9ef43f commit ffa3fe080c77630f87436a9410475fed1e684612 commit 191be00229ef61f9ca0cfa39a09dc71eaf90e78d commit cd1637c7e48043503f8ca6d441568e3889998965 commit 607a264ea7016b0f811f82c33094a3c2eda5968c commit 3dbc84a595d17f64f14fcea00120d31e33e98880 commit 658a0c632625e1db51837ff754fe18a6a7f2ccf8 commit f3cb4a2de5410147b53e53416a3af0ffe26b5f4e commit 903e0387270eef14a711c0feb23b7bf62d2480df commit ab4911b7d411ab2ef3b38322178b9138e156c393 commit 30598d925d466c53c4c218a58f80e043cfe9b085 commit 0af2e827b6acfd22b7794c148943a3ddfe5fbb65 commit 2564c35df5b81a88efce965bbfdcf32c1a1bc834 commit 23d639d7b6df487d59ed23b0c9c04dfd3f909fc3 commit 2ef97818d3aae3c89a6cb1e6b8cd204156434aae commit db583eea5a820ab4afce6420aae61be9be55d05c commit 386e75a41478d8d70889f0d1856e782d610353c0 commit 7e470f103d7579836a536c15862b70118379f7f4 commit b4435717f53b776b770e7a025fd84688e53dcd5f commit a9e4fb51425f680f191bb65c2778cea31bf058c7 commit e1a4bbb6e837d4f4605dffa9eccce722fc59b9cc commit e8c1f36157ce0bf8c150059c3f9f573c13a186df commit 583998c5e8cb3e7a151dca22303b68cbe65c64b5 commit 39a2bd34c933b00f7c7ada923c212b3ff826fb5d commit ebf3c361f43b1c1fd254be5a6d12bd37b922e6b7 commit 2f6b90da919208621725d1703c0391f63724fa62 commit 950505cabe517ad40759cae6f88f33f0bdfbb7c8 commit 60dc43d1190db1bf80c696ab4561ed53f8f42f33 commit 55a9c00021e2393393a26e0833fd66e73d630117 commit f199f71f20916ddaf2bfc4dceea33c776d414428 commit 53c8283ba9b46559c12fb9fd679cbaf72424649e commit 77b6f79df66ed2919dedb834edea630f40079f12 commit afd088ac05f120d22e06f8404b2672f5841d0da0 commit e9f9bcd598e2b6f3cfa617f8e38f83a59738d19c commit cd5d2fdb045fb31a152cbb257e10da78fa4f06ac commit e0d47fcff1f4df458b9c8824a5204adcbf624ae7 commit 3e5cbecb9aa88f00016b61200d4126f727fc71e6 commit ab076d8d79e1e5eb3960e0a489f7a11d729c03bd commit 2b25a93bf07c6b68dd9e2ee427e228cb961f7961 commit 202b1f4c1234b34c15e51acc9c43e613f509f587 commit aa1d6068a460dcb21e69f6d65fa7d3ab483d547a commit d0864ee4f81fd8c782fbb382f80d6c9c531f2967 commit 24ce4d6d2ca626a733f70b578c4a298b200a69de commit 43571e15c057f69734d0ee3be45fdf9e4adee614 commit 919606f5e7d8cfbdef47ab7e24bf37cf86dd1512 commit 3e1f4c491559998615cc8ee287c673f0f7e66534 commit c41aadd26496db9c21deb612445801f3e44ee8b2 commit 5512445c9b64a2fd78f37c41796745d72c02e9a3 commit 1b277c892940af1d06c2433f3f3a39d4bd146c89 commit 4642077775a65566c0d25e63bf918fb5e5235163 commit ca1777797ad84cba3a72b73f74bd80092a7aa220 commit 0b782e669298e30853e235b963fdebfdedf45383 commit b17639c7f7fc1fbb23b761c38ba3233cd5d082d9 commit 38bd13a0b151093f5f26c95ee106659008896995 commit 3f8bd465a6f083a4112d82c18f4a85c9052d2132 commit e592dc320559ebc8166c1dce609faa7e4f3d6da1 commit 9d31993451f6bb4059a9b9eec4856b2225e36df0 commit 0f5d32617246810d00dae08c51069873a77b60d1 commit 7b1534188c25948f4ce56dc4af9d8e9234e97592 commit cd6e4c2fbb004f06d9c552761c171fed82ab5225 commit 2616be2eac4b1c361ece55dfd8f942dcecb25de2 commit 6650ebcbea1314bf91bf161802ecaddbb72651b5 commit 5ec7baef52c367cdbda964aa662f7135c25bab1f commit 5ff59dddacd4738edcbd01847d9df7682348cf86 commit 93e97b05d5816ec96bf209a50023cdf9fa750a55 commit 1500296576464dd4f8f7ba409069591648f4e98c commit 3a5d604f90f90a09e35ccfdeeedbadfd06b606db commit 6a8cf6349c7cae12f072889991a2aa0a1ba0bd32 commit de05abe6b9d0fe08f65d744f7f75a4cba4df27ad commit 8c2d34eb53b96755b33a125c65c3e807dbe430a1 commit bc143d8b8387ff0a22e4ef8e2375e63aa24bc311 commit 79c65f3fcbb1288b84473d45e6d001820a971d54 commit 13f5dbd6e3d9a4ea0a8d061bb2a2f19bb21cdacc commit d448157665870bfbf9b6baa5991cd9d6bc98c7e6 commit a79110f2dc0194326d2e8c2cf83db6c784c37e97 commit 28a31774b050261371953401e8072ae15200c91e commit 84176663e70d93836d30d2a480a4201c7f790b42 commit d698a2c4859de2d4d42d2f3c3806d6dce821d663 commit 6ddbd37f10749830e0a6ddf839ca4313a007d3f5 commit a627967e803e58c5525ac92a4af0d15379189a32 commit 7689dab48259073ea13d64d32365b77860b84e7f commit ebfc253335af81db2e40e6e8ed17cd76edf9080f commit 837d542a09cd533055423dfca7e621a9c1d13c5b commit 3bce90bfbaa8de63bc500bc5a4dd262ed8e548ca commit 61d7d0d5adc705f833d8a5dbb596253842486220 commit 3712e7a494596b26861f4dc9b81676d1d0272eaf commit 1a408c710d9e273a22050b0b7b0c131f92847918 commit bcf19fdd507fb679bb6e1b8a119961f32b6cbb95 commit 54c73b51df2958f564b144ce86f15a85e227db90 commit 685fae24d94fd615b7058832fcb437eb588f4860 commit 6492e1b07c03397f85bd6dc0e230ea6cd9394635 commit 7cab2124058d2f5f048f435a4631e176dcd1430d commit 8b0fb0e967c1700bd729ae54b6f229501b8587ec commit 6c2453861f48e4e779cafa01c09e78ddc2c23c6b commit 6d76e9049ad92be32704106668c34493c3e4c0d4 commit 5e67bba301156c85251f49df19f5c695875814d1 commit 2e54fe5d056e7dc82988ef64ded3dca0ef954f0a commit efe17d5a217e6b7dfd16c80dab522abcf2edf1bc commit bdc4292bd3b4337985f716be789b08eef921f7a6 commit b0e2062dc8978869c1dd96d92027f74b361d5eb7 commit 22d4ba53b1c10de6832e588f01d916e24306f6a1 commit 7389a5b837cde5e5cd771619e9f006ae102f5d7d commit cb5cc4f573e18deb7d9143de0ccb62c08181bc85 commit 400ef298f400854544e062023671e927965bc9b0 commit 20c5e425d36a59529f2e6a77ba21d009cdfa8ffa commit c4381d0ee81930097e94e55d1c23f85798ffd093 commit df01fe73ee98daf00c94189967550bd2d2098912 commit df4f0041c6ef497e598a67e367db835489162754 commit 69f91d32c6632e09f0954e690d61ac4921dacbd3 commit ab3b9de65bfeded1d4646c9f66897c163e89abd8 commit 954ea6aa1545a13036851327b4ed251fa7ab2f22 commit e3d833f41c46b8c59c4af53897a6619bf667ebe5 commit 1613f346f86b25121aceb941d03ca927e57af20c commit a85d70a8b4813a955d45b062440fedb9be701421 commit fb825b651de98cafef13e07673eb72d5e2ceb4a9 commit 31425abeda7130e66e61dbd8468502061413631f commit b3523c457380c23cf28d4ee1ef60da337a0a45c0 commit 06cf9bd61a7452df375f212881d9bb6b3c52c3ec commit 5f0754ab2751d1935818459e8e71a8fe26f6403c commit a8e6398ffe171c84b1c03a17eb6d432dc5f703a4 commit e8521d0cd984897b4fa58e7837afebd04e44f0b3 commit b0641cb8a1deae38990cea783d2a1117255f59f5 commit 803abfd8dda540b94ea3c754a70cba69d3825995 commit f4319f72a9bc37c948832c0ef121460ad7c1573f commit dfacce59553b2a65f4357ba6019827eb4b9a0eed commit 3681eb24a9f14e001d05f8d15d2e07a96abef8b3 commit adb9d5a2cc77e8aefe98fe4c11656c5b7025c248 commit 5b529e8d9c387a34ca2b8008dc65f55d539b3ef6 commit 032a125904995985334766911de9e26ee2bbd646 commit 269332997a160b3785690a32d2c5496bce7dae51 commit 71b59439aa03e8de022c31ccbf9aa9bea4578971 commit 12d7d858e63d0769a91aab218828e0526c0ab49d commit 2f609faf5bda9d828ce0229689227ba2edb1918b commit f6bb74e07705579f83252f9c3cbd462d8084bb4d commit 348abd4cf353abb3aca8dc6ebb80ee84acc4f64e commit 366714b0883f0411a4b142b1f7cefc6b184183eb commit 4682a6d99638bb8ae62f00b9466849065c91fd1f commit fee076019d0a3634aeea8df55c1f7ae35ca31d18 commit 2b6dd600dd72573c23ea180b5b0b2f1813405882 commit 6b79f96f4a23846516e5e6e4dd37fc06f43a60dd commit 647bfd26bf054313305ea9c2c4a1c71f3bbfee63 commit e849f7e708600a9d7567ae22f945b5b01d7f7401 commit 6945c53bc712cf4a28a46fe46c2bd8526ea261d1 commit 7e00897be8bf13ef9c68c95a8e386b714c29ad95 commit 0f341974cbc2a4efe074dd24c153e439b8430afe commit 294996a98a641254b72732f3cb36d51f12a6f3d9 commit b5cfe6f7a6e17c6bc7c802d382cf22c4dc405477 commit 83f2726cd9c3b92589f850cd4935ebbc35eee840 commit c34242eea16f7d973501267142dd340cad3caeec commit 3ddd0c90bafd9f2ae1ac9f1e67581537273dfed6 commit 79c0462159a1fa3810ae1869a5fc9fd7782b6b70 commit e475986f182156496fa2991012ca51956fe90bf7 commit 03f6fb84bd0e98a7b929aef5f308b8e3f2f24a0d commit b6efdb02d23ef615464cd0077c211b40a1faca26 commit 4f64ccf4f27c89089f3206446e2158833bda4795 commit d622c094f8fe7a77fda613964ffdd9a248d2550a commit 8697a19ee955e32fe298b00feb0c61fc75cb5261 commit 71b6c4a277dbb2594c260ccedcafaef5154b0da0 commit 22c16d251a79c3156d17627810557878e600dc6a commit f3527a6483fbccbf569f91d9ee9c561b14d86a9f commit 47f29ac1cbae6e18329f0066f7c8d5d2346a5bce commit 7aba117ac9e01dc58afe29490f50025add9d388b commit fd9048dd4425a9dc252153c8b72369f1969a35b3 commit b4c55e525461a9a091421e952d1e052127d558a8 commit 82dcd8eb357caf4b16e6a201f6578b6e8795e541 commit f369e4eba89a6fc1cac619db86c00a964d1fc0a2 commit c1a20f707ac33b1fec1d78bab74e07656c237801 commit 6421c49567d55b1ba8d9389e5832297398a51a1c commit 58c69b53aee24f47741b150e309567d9b38ecd6c commit 9338cb719f0f0b43ee1ab39d17214f9b388c7fbf commit 047db281c026de5971cedb5bb486aa29bd16a39d commit 56ca49cf6004ff328458954dd3d0fcf0189a96a4 commit ce0bdc62e80d40caa346ac4840a20769d5bd1ae6 commit 552b7cb0eed12c184b3bdfcc262e96a954a2bc86 commit 4bd8dd0d61f961e6c13cc118d4ebbdba57f8561f commit dfd6879b98999867ac860a51348b00b5c0c2cafd commit a5e7ffa11974d90d36f818ee34fc170722ec3098 commit 4e68354667716e62089ce3032a3c7e1b6c07e669 commit 41f8aa5d6a8aace5d33e2d908bf5fdc833456a5f commit 6387a3c4b0c45a3932cc06daaf15727e7f83be43 commit acde6234f65bad89a2e27d3e8dd2daf680862545 commit 75ab2b3633ccddd8f7bdf6c76f9ab3f9b2fc5d9d commit d7e3ea83bba81d6d9c8f80c62a99b018165f5808 commit d39bc5c5e10a648c7de9558592816474f45a374d commit cc37b88b02fb590d08dd922ef1c0f7ef3125bba8 commit 028a73e10705af1ffd51f2537460f616dc58680e commit bcc77411e8a65929655cef7b63a36000724cdc4b commit ba3a5ddcf1e5df31f2291006d5297ca62035584f commit 8172375ea95ab8b7f7ea0dda617ad87c439a14ee commit 52506b099e1baa204b56b170f40f680ffcabb4c1 commit 8638b4d8ddc944ef3c1899cb774cb07de0b416f6 commit 54e67e5a2326b99c1461e29eb022e9d07a419abd commit a32762d1db4c13db53ab9005a24fe5465ab511f1 commit 2075a734ed990c50b6c544c6256b0dc0b74b82ea commit 09f137c320633d08b263c54c0782e91d55a6c09f commit b90b6e41379789ed595236113779e0793a63bf18 commit eb9fcf63857556d5eacd67f5c96078e643a8d15a commit 594c504d33343657ad3b24ff8e4ef032cd4de25e commit a868a1e57e3afca98509345d5a8f747a4d745cb1 commit 044cbc7a74c136f12a80c855cadd1b085084aef1 commit c26962803d044a7668e9ea4d5313117ac5b878c8 commit 479e3b02b73a2de2b19df2950863149c59d57bfe commit 86700a402694db56030a74481d09f35520332736 commit 8eb53bb2aa8afa170ba40f9460f2de4d4d138764 commit 33cd016e600ac3417aff7c85f59b9a4b70a947e9 commit 5904e4135f3b3e6cc7bed46bda71118d55a56681 commit 1b08dfb889b2c584b444538c9500af24ba0a6dc7 commit 590e86fe3462da81f1cbc4fc8d4cbf8b16b4f968 commit f61c40c0757a79bcf744314df606c2bc8ae6a729 commit f548f4291e89e6144d3c5b8a9ada66c7dbaa1639 commit 6d1d72fb4fcf85ff0a96de1c16c46162b3baf9a6 commit 6f043b5969a4d6d385ca429388ded37e30e0d179 commit 27535f1d94318f34fd6d41fd01bfa4a970e73bd9 commit 5de6a3de999d0cfeea94f1d3932b78892f3d69e8 commit 198bca93403d04f43c07c5c87c7b75a54f4bcb54 commit 26950f2968e873301c8c536ba0615ba04c17a0de commit 603801d0f2f418941d2524ffc43fa6d8c95873b3 commit 34ed3e83475eab0c8fe6bbb126165a3ff2f2ff90 commit 1358139bdefdb07bb402efb3164c1c51db99e8a5 commit 1d50942dc9304db488d1b3978274b851e890a33b commit b4a1c675d256bfa1d399490847d086b8b463b5d4 commit 784a2ec00904999fccfca12eaf7c63ac3fde5f48 commit 37ff945f804c2d40d030713fc8692e793a81eff8 commit a357dca964e0c77c479075dd65ef86199078d82f commit 4f72fc3c7f3d9f29a438bb0e17c7773f2fc8242a commit 1f73a367420c954f5cae2f899ebb9515be093645 commit 5fe0fdd23e3379833f4346b49fa791733c22ed29 commit cb935c4618bd2ff9058feee4af7088446da6a763 commit 428cb15d5b003102bc33d49f2ab31a6e4e785157 commit b4d775775877453b44834a621eb410aed7891875 commit fe6959a680a4c50f12dbb362c90f9d7157fea334 commit 7305f5b3a5d62d1ce1405e91fa367e6a9126090c commit b3bddb7a3806f26ba3eacb4f77834102ed344b9d commit 70b42b5845c84f33ed2b79a0fa96134710c652f2 commit 17dd7b896abd2c81bbc76ed55899314b1c285677 commit c5274e86da5fe7297fc28a4e12bd29defed1f435 commit 51f2d00909c6153d23edf2344f6b57d45e391945 commit 0bd6c4a1310336af511519a8a853ecff2120d11d commit 9d0bfa7ac97c629542caa860bca903af62b86326 commit 5acbdcd1b12ecba04f1481004b6ce5b40c64b211 commit eb8d73aa63cde11e43ab0619308a5356a691850b commit 15d641c41796fa1e8c8965ea457aac737a28a88e commit 140f70aeef07e4516a338b275e36eb5f8cfb463a commit c9b06cc26f1daace605238adb4720560078b0eb6 commit 2869f599c0d8c9c6492bec40d062951be8caae04 commit 50dc95d561a2552b0d76a9f91b38005195bf2974 commit ce99534e978d4a36787dbe5e5c57749d12e6bf4a commit 8b250cd3b5da18bd90f34ecb04c01661213b65ba commit ff3aeb34deb24f40626c171ce1cfd447a2edafc8 commit cf5b64f7f10b28bebb9b7c9d25e7aee5cbe43918 commit 4fd5e720b709b87f67809a871fde9fb6cb910f28 commit 4a46e5d251a39e7c10493743ac89a31f6f3ce5b5 commit 75478b3b393bcbdca4e6da76fe3a9f1a4133ec5d commit 4adc33f36d80489339f1b43dfeee96bb9ea8e459 commit c03d0b52ff71d580ee235463c7ca9eac31351dcd commit 80ecb5d7c0f224218fdf956faec0ebe73d79f53d commit 85e97b1dd5d29b66a249406624734843b71c0a0c commit 2343bcdb4747d4f418a4daf2e898b94f86c24a59 commit 901abf367d3eecd54f21829ced48c20f53c74c57 commit 828904660a2e0a31d5c8a2ce75711f7123896bd5 commit 6a6c2ab687c8eabaec4a55a4f13eb5ee68181403 commit 239d6de307b0dd1d48ec9b935b57531f07f6db11 commit e0638c7abc4d3d3c46e8f2fc07e02c3877c3c402 commit 974d5ef0dd9d251dd4571e30d5e79e7e4940d424 commit da11407f066c28c49bb7a4ff6a6b742b7a18d7ca commit 56383e8f4d296a33cc5b2a11864025d8205e9438 commit 1c4dba5e14c0085d412429d50cbcf8e9e2a18924 commit 1f2cf08aa010594036ccfb19d207e5b80b5bb7a0 commit a746c77e5ee86829c03dfaf718e18b589f849be3 commit 83a3766b147053e542f3c91c121cb9594239e644 commit f9130b81aea2de3fb6d356e9495a384b2d35b1d1 commit a685572c91b08e2e5143e52f4c5bbdd3d22271b3 commit 25c6aefceee60850bf78e16ae9d7fcc4a9d20884 commit 5e0c8ddf029e0a8533bfb04e4542b46356cbcade commit 0fc2549d55a238da5e4c1b1ae20ebc3856922334 commit dfced44f122c500004a48ecc8db516bb6a295a1b commit 1418b9c38270f4c7843627cb0e9047b19eb3365a commit 5d5c6dba2b43e28845d7d7ed32a36802329a5f52 commit 5bb1465fbdc291593a7c385cede0416ff6873280 commit 29dbcac82f96d06608f3658aacd3e14efb7ac0cd commit 97d1a3b967a3cbeb0dd29a8b5bcd4ac1fd9ccd9b commit 7bbe43f8a4e7775daf6ca62807e0023b0642a20b commit b12252b0538183d8b88bd4a8d8d05a808c46472c commit 4819732f5986ed8b3d88bf4272d2d5bf1ccff9da commit f8f96b17f0fa302b246e35773074f39e43add023 commit 5d447e296701484f3df5b31a7a078cbf1e3a9cc9 commit 1b2dc99e2dc6f35f55f0487e12fc9166fbd023ed commit 381519dff88845bbe522e7446ec1e32e351c670d commit 04022982fc5ddac6cc783d66846f2464fe4985fb commit d6dac2bc12bd968acfcec7a0c92c59d2e19dacc9 commit 1f33bd18d703ecdf7b664168d640439e867d1605 commit e9287ef8d46cee538c9a71bb8978b2f7e975c452 commit d435c1ed56b9f9347189924395588cfdf7489af5 commit 5b680dbfbf6899afaf8bbe59b859509149d59129 commit c282d9512cdd167384fe0d233d13deea538658f2 commit 31d64b8219e057705d7a9debffcf6abbccb7781e commit d9eb8fea6862e63421f7b9c93e32bef348488c41 commit 5279e091616b74ff0e4a24e220e0552b10d88d46 commit ccba4e5bc856471ed009d92747376ee506fcc6ad commit 3ea07c89fbb777669c668452e94275a98dc8afbe commit 1f6c40d5c0095959a260c014a6251a0ac124c721 commit 09ece5ac397f8e3539ea9ffb776e1cc6702acb9a commit d715c9a2cbd4b5dbf72bec82b033698db3c6eca5 commit 9506b8d9626f4fbc230dad30cea1b3b095f1e4d4 commit 2eee829ed48747181b17f3f8d458b23981f2bb7b commit e2d8ea4320c6fcf9f042e432232240f858ae9ed8 commit 1210b17dd4ece454d68a9283f391e3b036aeb010 commit 87e298d6e3a2169831a2f4a29e35575ee5747036 commit b80ddeb29d9df449f875f0b6f5de08d7537c02b8 commit 4a3ad932b2c538c62e4a60dd4b7411f802e018ec commit 2ca97adccdc90247c907541089e85101b2d87574 commit 09db246ceef70bc6bd9c3e0d02b3c855f8fc25fb commit 9cc370435cde6b672b6e2221115c2f535e8bd4ec commit 5f2c1192eba42f6926253a1f2c9b18da05b3c31f commit 72b90723b3760c69721b04f59436f38cd215e2df commit 0c5a0bbb7379625eb2a5b6a931415c008b7a1a16 commit 5cef7e8e2fcc6f9e8d2134668848a31b15c523b8 commit d52e77a3ffcf2da2be1a7892bc8fa67b0e907058 commit 53a35edfd0a767dbd04537596d95f56e94582f50 commit d063e70c6acad14987242f266e9448669db4624e commit f6a3795d35c69bd34a556e1d93000057aed78599 commit 0015cce5cf04d3bd7b2ae4f62d5cea5d35383e8c commit 05d6aea36a69e65b071e6ba897bf83a4aebaeab2 commit 85b8f62b564120943cc0db1e754d6649037e6c7a commit b5d9a483685c37a480420cfe2d41a03d529bc0a5 commit f2bde8349c35d01d7c50456ea06a5c7d5e0e5ed0 commit b9610edcfec216d7a2a5ea2c942734b3e5e26ffc commit 212021297eafe23b79ac117db9b5159d1df2ff30 commit 901e2be20dc55079997ea1885ea77fc72e6826e7 commit d0d66b8c66d04363eff3a5b09da4074fc1dfc758 commit 243c719e872a1322b22efccff80776353357b296 commit 82c3a7a5edbf5f6feae9602d19567d2b5b55121f commit 153a9529d7f372ce7ceb5eae7e2c312c0cd64d41 commit 588a70177df3b1777484267584ef38ab2ca899a2 commit 94ca070cd3737dd5c3b98f615bd4cc950f82a597 commit 5e6d72c643e1262ff02e057620b9f87d7d81141a commit 430e6a0212b2a0eb1de5e9d47a016fa79edf3978 commit ee2016b4b5bb70483e1c06218e7b6288704284cb commit e6f62afe9b2731b7a94b31fe59ef2c5134ad426b commit d726d43c20e744bab1e346c1f77b7a71eff0c40c commit 37d6b1506b80a5cf76238b6b00926070ab544058 commit 3b36f50d3a69ed720e4c464bc9c5fa2c3fadc750 commit 29c52ab2711f0e8ce506c120fbecb30e83f83339 commit 721fd84ea1fe957453587efad5fdc44dfba58e04 commit d8f7f8831bce9ef6a1f562037e137f57b5951501 commit 41e096da18b357ff1d2108c514b9634d67364c41 commit 20f6ac2d5e00d8ff154d9617a5c0b52ff12f3320 commit c3639f3be480529ac82b592e627fa7dd712de83e commit 6a4d8cc6bbbfea4469a063bff0ff0114507df524 commit cec49bce6e0cdf916433a248402bfdecbf6589b0 commit 9f807822abf5e210d8656fb5304f662bee64ca80 commit df216b37333cf2ddb0db86b966e86a53d239a013 commit c20b5d41e9de40a51b7e5516198c08a906fb7770 commit 1d894ce88eca35ef8627901c47c3881cb1f3e74a commit bc1ce503769c51c1c06f5ed126b07a545996d697 commit 8f4f9a3b3a0b733f8fd102f9e0843cad8d055c83 commit de3688e469b08be958914674e8b01cb0cea42388 commit 3f268ef06f8cf3c481dbd5843d564f5170c6df54 commit fda8d552c9c7783d4b29aeb6350d7404b31cdbff commit b889d89ad45f9957ea3eac8f61cb8884c2010940 commit 4be990af2f7ed8bf209cce3b86e1abac33742763 commit d05824796d9cf6c0e59a0aa86333584bde8b51c6 commit bf172a01ea485e630f28b6ad525fb277d73d3e3d commit 96e4c3c0ed4eb85e02bfa438c6b4ef7cea78bd8a commit 8295524a2d5550b56e800ac779a183b7f4d8c33c commit d083c232fe2dc4720d8f0e337613f88909ff9d2a commit 7e31ce581bf034cdcb1a94f84ffcf3cc983988e9 commit 6a6d914de30f15472b2dc36e8ac6bf016cfbaed5 commit e93a590c79faa4aaa4d7eadacdef9240e1e823a1 commit 62236df23d018fc977d2871744440efe6a08a6cc commit db3b3f3e62279b914e1958e93e057fc4d8dee263 commit b229712b26b58d043cd7386827f41ab022a4d109 commit 8ec6a72da65bbc4d341253e5a641a51bb1c0d967 commit a5d092d37eb5d25520d283985082e977bda68eb7 commit 516b33460c5bee78b2055637b0547bdb0e6af754 commit a0f25a6bb319aa05e04dcf51707c97c2881b4f47 commit a7b23fd90c804e79d1edb478b42935848bcd7e36 commit 66755b4871782cb95e3584c9e88b6ed6c52c9022 commit 10dcc8317f6063806ce1d34235af23da5e2fdd7a commit ccecfd013a39d8b8ea837e90f7f907e4ed5abe17 commit df8d1d0abd9439479ae1a0d8812ed57debe48a86 commit 94afe983b5aa56a841f208a6b455691a44eafc7e commit d5410d6974acd0aaea6742ecd8e3f7bdedbddf4b commit fdb5713c7d6f6d60bf23596eafb1ada154869ae9 commit 1439e3bea7b1201a9461ffbff2a9d59f3e65dc1e commit 8acd15a0c8c647ed4cb07c53c3ea4a8768c974ce commit ba4a28bb168aefa98ee422be8e04a0c964256f95 commit 5f825973b491a457c7233e808ecf64726abbeb86 commit 5e66e818e0358fe42704404580b70e1ffc7afb6a commit 9d6bf794084d9258dadf2754d911fcfeb13ea8fc commit 039cacd2393971fe11f855118eea6c83c8f506fa commit 1790b649b01ba7e44af7c08ffcfc0eaa9d4f5ac6 commit b6dca949b88ee69561fc4ed853ab7a2ae13d842f commit ac7c48c0cce00d03b3c95fddcccb0a45257e33e3 commit 367c9b0f1b8750a704070e7ae85234d591290434 commit 6225bb3a88d22594aacea2485dc28ca12d596721 commit a154bf6eda9881aa3dd74cea83dcff6de3ce9680 commit f4e2a66dae996b4fa2cc21b1904798ad1dc83049 commit 75513bf5d72cd1a81401866642f4a8052b2d4420 commit 7270e8957eb9aacf5914605d04865f3829a14bce commit fc6ea4bee130710a77ec16a86d2013e964602503 commit 9a17696049889550ce76a987562e679535943c96 commit 400013b268cb666a44c0827b136bfd4bb741b13d commit 498d46fe7aa7eda5807352d62af133a2f432b814 commit e63fa4dcea2f7afcbf8f2d013dfae23a61a273d8 commit bee7f8d09268dc80da0e841ca99d79f500d03b84 commit 7367540b26214ba5f7236e0f212fd60ec6d07c3f commit 4e13b063d2e510b54e3ffc2e975315d08d14c5af commit f06d9e4eec7320f5a560e49ed652e785c8ab5c45 commit 2f60dd50769efcd6eedd0dc6b3f419cdd1f1f1fa commit 3ed893396b0132fa5a4d3fe3f9ba358678c6dba3 commit e281d5940ae7f2ceff99d5e001a69b5f0884d2f0 commit 8cda7a4f96e435be2fd074009d69521d973d7d31 commit ded81d5b2b67e6e6fce0a1e8b73e4565a28dbfd8 commit 1ec5a44331af283b1cd3b0f0981cf65f0903ec8f commit c57f5ba2c8febe944ddebae53730667d5af179e5 commit c36846f3917962a1f7586a3d39a423e6679df3d7 commit 512712a824de9b856a4e61343e3e4390eba2c391 commit bc1922e5d349db4be14c55513102c024c2ae8a50 commit d29c9930279df7c10348772f812154d3c41562f5 commit c65b3affc6737c99c09925b910c7471d3db26b54 commit 5f721a5d1bb2e3ada83f04a119908b66d909300a commit 14683babf8ee356a232ee76b0acd332aef51fdc4 commit 7a05c5a0c883ed6353f82699dff8d789dae6b673 commit a594525c82e0b8d677a7e5fd13c7c115d41e9722 commit 270677026261ad8d1ea8ed60c3327d37aeb5f372 commit 46f47807738441e354873546dde0b000106c068a commit 9987151a90567785beebcbd5c8ac58d05f254137 commit ef6e871af3126850b429f68e8bd5b657042139f0 commit 063565aca3734de4e73639a0e460a58d9418b3cd commit 2af104290da5e4858e8caefa068827d7392c6a09 commit 8be576837b6e62b2ad0de2f9ba31cef618fa2891 commit 3d082157a24216ca084082ce421a37d14ecfcfad commit d80976d9ffd9d7f89a26134a299b236910477f3b commit f588a1bbfce781042196e68f8e200f08b3d9e8c4 commit 53dbee4926d3706ca9e03f3928fa85b5ec3bc0cc commit 751a9d69b19702af35b0fedfb8ff362027c1cf0c commit c50df701d49e78bea6410b4b111c7be71e2a7c2b commit 8023d3bef18bafe54708faca0c4206e1a36ca155 commit 6149cb68a5be127909ee39f4d40b8f5ba0d047cf commit cc954cfa6fe47579aa8eceaed00677feda0a95b6 commit be0c94ee215043c0a5cdbffc5c45b5073054e125 commit 5cd0664483c1be4a71bcf4ec643f5d3c782e0319 commit 0adc41de818c1a051c18732db57b9ee95b30898e commit a68819cc557cf0a37b7fce50d412abdb73bd69d8 commit 8de5df3b07efd1a04c549e59e0d72e2b3e2c517f commit a35eca01c372dc0f1a3ad663c6a93604c603a782 commit f0d4ce59f4d48622044933054a0e0cefa91ba15e commit c3e27f4307fed7b963d8e99c18dc51682b3431e7 commit 6d6c932daef5c5b3cd5e3692e79507d2a3306031 commit 1d06c820b2b7ceb38bdf0775fac495db4ad4d10e commit 23015f6f900b8b158f6811b85de1f96769be4dc7 commit 00dd7f953b9b1d85e97da8065cc2887a5477008f commit 2efb4adf489dd29526c412c4593d12e08076c68a commit 19d36cfafad0395d1b8a9db7a85d64282c42ae94 commit b5c84a9edcd418cd055becad6a22439e7c5e3bf8 commit 657b15d672f4d89cf0750793473b8963429f8ae3 commit 29b9702ffe70d83b9970abbccaeb287dfda4409f commit 363c4c3811db330dee9ce27dd3cee6f590d44e4c commit 2bf68bbdb6f5a445b26a0e8fe14af229ffcc7f9e commit 86df4141869350edaa53fb994b3db2c2cca5065d commit cd9f7f7ac5932129fe81b4c7559cfcb226ec7c5c commit 70c0b80d0bbb97c072c4a9c3e8b0f68a9e22d7d2 commit f0bb41fad02e0310fa7b222c7254a3603ecaca1b commit 72be4584ae7e23f64c292171cde6c8fd887aefa1 commit 3f1a31ff8e3f6654d2b03a34095ca1658e4cfd77 commit 2ef6d3bf426218440b156d392cf95e830990e0e4 commit 66a19a3a0e2d200121f30a48d13b80532582f1a5 commit 7d296f369d38e12b1f9c552d8635eb0caef71095 commit e71a74122863fd8acd23ab772ab4f7c3a378aa66 commit 0d6419e9c855dea476300e2bb81d29105fe76d38 commit ce2fce2513c5c1076f2a2d6e977c0ac523aad5e3 commit 22ba60f617bd1cfbfae72f73c93ef9507a305c59 commit 18b66ace6b3acb01b645d2fbbd571f66b2705c71 commit d2a197a45daacd4ab3221161405768a6d1d11086 commit d2895ec4ca6c67c5a9c8ce74bd5deba76ea77f6c commit 6a77bce58c6b29167bce2f548559c75326bbaf03 commit f89154b6525c7ca394ca68adc90e6a0d5b3872fa commit 1ca489fc60e2713a9acba4294c6fad66d85961b2 commit 90c44207cdd18091ac9aa7cab8a3e7b0ef00e847 commit a2170b4af62fd347c699ae3cd9ec0a8096466f9d commit 889f84798c5b975125f5f7de910ed222ca8b2677 commit 274b924c3ed18f7d46d237810dd59d3bc89cb4b4 commit 241a074fc1342b8f6a88af4b7bdc014692ebcde7 commit d389eafa3f50944ca272e0ec865143a9fb948e78 commit 219fa961e12497fe6beef478cc0de0da47b3a3e6 commit 88839870c3060a04a2e085ef1efccde4b0d1d440 commit 702f8dd8319fa6e3fe9d90115426202e6ee5d06e commit 9d8033d6beca43e9d8eb952adfa8bf08642a357f commit 2426d71c52876a5558b40af06143688b3978ddb2 commit e8702d0b97dc9fa825715fb28f116c199bbebc87 commit b9d3d50adbc79c3131ff3c5ac35bb9a57442f08f commit 8788e0668f4fd8815f82c982879252aebfa708db commit dfabe59797799bb500897ab4064f8a76aae4026a commit 2750caffa7a9ae82824d7ac3ab0fee65181c4126 commit fd24926676801dd68afa1f39647a858cf4f6ae50 commit 2412d339b30e66f86d9430aec26f5c6a44908b15 commit 05f8c2a87aa01d1000cf148213560117e39a48f6 commit bd682a788c1f4fbefe17b3ee9e0e3debdefeec6d commit dd4dabe4b3c2425878a49ae8d5817d5c5958c6db commit 33413ef964b8cdbb25a23aaf0b4aa8f0a330c4cf commit fcd6b0e270a9dd849981df34051ee6dcbdbb1c0d commit e0a4459d45425fabd5f020a2117d350c5a07477b commit 6927913d700749a4b9550f87f294778df2a7faa4 commit 22f7cc7524081bb2bfb2720e43ab9889e2ed5b00 commit 9308a49d8ee2f0f372fb7f18b8f4a97d9ec676c7 commit 4f860edecdafeb2e5fb29fecc6428090997936fe commit 5d64f9bbb6281a5a89a2266b9d39daa1fca1d6b4 commit 7e2ec174945fa98048b39baf2a87973eddca3241 commit 876f7a438e4247a948268ad77b67c494f709cc30 commit d30b9ae93bf57414160503d3cc62735adeb61557 commit 377c675f3c17ffaefd023ee283bb366bbd6bbcea commit d946bc44aa0bf03ff5c2888e8c3be8646e14467a commit dca384a3bf5af1c781cfa6aec63904bdb5018c36 commit 9277b75675113d64a74ec01a1219973f3720d9a7 commit eea89dff4c39a106f98d1cb5e4d626f8c63908b9 commit a3574119826d9a4ef807fb973cf5150c3b90da43 commit cf1c7fee7ef37cfc09b5e704eb52d9466ca49012 commit eef173954432fe0612acb63421a95deb41155cdc commit b3dcc6dc0f32612d04839c2fb32e94d0ebf92c98 commit 15512021eb3975a8c2366e3883337e252bb0eee5 commit ccbeca4ca04302d129602093c8d611065e3f7958 commit 542898c5aa5c6a3179dffb1d1606884a63f75fed commit 722b717d8e2759d943dc1f55a2f6fe19c55080aa commit 972aa1a161d8eb61bc588c31bf568bd69c7c231b commit 7994369fd3e758ea1fde269ff7c3984a8ab52b59 commit b8c75bd9746e3f1bdb5a1b6288b50dc2fdfec0ef commit 2d022081b333a7f15ba27607696d4a41a7a2b5f9 commit e56694f718f0f6694c18d7595e61533a2663335e commit afa37315917bbc9e71a4359f921eb887470c008c commit 3698807094ecae945436921325f5c309d1123f11 commit f185381b64814bb483416e4dd83d85891018a7c5 commit 5ccbb057c0a1282b39192a346f963fa989ddbc92 commit 73fa13b6a5112b59d09e58b8075973769a15814c commit 011bbb03024f5a22dc04eba370f9296f0cb83502 commit cd9f79103003599e58f9f394c07cb4045883a51e commit 626f7b3190b4c07917f0262162cb7fef7272c34d commit 8668dfc30d3eee695233ce83944abaf5546a5017 commit 2485c12c980a36bb9e23ababb07d73c4ac6a45af commit 5bb6a8fa75fcfda93592bee0a4910420ceab15f3 commit 42c6c48214b726c30918e8dc80e2168607d13ae4 commit 3a9822d7bd623be9000cef8101ecf8479fa53f2c commit 40e8a766a761f7fdc8530347527b344fddf6f1a8 commit bef153b70c6e3594b849d44a23f806328b9c68d4 commit be072b06c7397004e6464b4225e13c31ed0b9ca3 commit 4717fe3d8dec42bc951a44f41efc95d635d26325 commit d1289b41ec4db347794abfed7525e33dd2d9503b commit d763d8030f440441177d9638ffb0be39cba32a03 commit 08a987a8a02b073c620b5f3f363714ccd98c0bc0 commit 9d5dabfeff3ca63925cfc9c427f2d1fe8929402b commit c2db32ce77adf82dd2a4193abc709ec51474f84e commit 2a909ae718715b3bac75d945e38dc0a5e4a0f1ba commit 692996f2bef7aa1737e07554255ba0d9a73fb750 commit 3f1e2e9d9993a3b1e33661fee26566f091e01b2b commit 3f3a24a0a3a58677d2b4f3c442d7a1be05afb123 commit 00b14ce075732edb2935d738de990e9aa96f1e08 commit 447c7997b62a5115ba4da846dcdee4fc12298a6a commit 00d6936dbd5486bd5c0a07870d5747eed6f799ec commit d5e8ff5f7b2a41d503914d4896ed3c6b3befe933 commit a50b048276c4e1bc6f7e869c99b6bdc91b4e237f commit 4e781873fa1359c9a85559b6da6548ac5b07ceb5 commit 29ba7b16b907a1f915aab8b83ef901e209146938 commit de95753cce66582b0c710dc31592cf15d317118b commit bd42571168ed54d309480856fadea3eb99821253 commit 5af779adc3ab0245b94187a3fad6d10f60013c1b commit 2d282665d2613fc7be9dde557811a7783ac01735 commit 7ade3ca9cdb547eac2cdb661c91a481235e21ae8 commit 3c6591e947f5c23c13dec67da3dbff12ccd6e209 commit a89ef0448c9b59c524499663eeb92a43c8bc67fd commit f69c15e15e74fb0250049c5532d8322c75f423ad commit a423746305d41c1e2767b832742cb572ab173af3 commit 6d33f0e820bfbc4f0b9b2f23d0d30df4bd6c3001 commit 3084488a49d6d58005d6ac1b5457b3f13bad1ed3 commit 77a35bb579827216d911ece7a6b909e4ac8e1626 commit b65007590911ad558999073dbffa413cf4861df3 commit ca7f9d0aba9940f4d3e759f44c414c3707a94b21 commit 98ea24e6c563241814abcb1d22ec207a7ec2fd9b commit 559e2655220d56f939a9fbc6212992345025392c commit 39da460fd4c0f8e7290dcc9cbfc9375de9d0eeca commit e8dd130bfdc627d935d4eda4654059a24864a493 commit ed3a56f9c638a4ee42031eac748664c834fe245d commit 66d58bf73ba17ac45fca79f2e5e26870cc224ee3 commit d7d7ddc15672940be0dbbe03e016c5bb617256b8 commit b6fba4ecf3554c515aa5354c54dfdf70d7526ff1 commit 6cbdf12b87356827d35975dfb3030d116782737c commit f54b6bdf4248b1e26ff66932231e1d6a2f16adc0 commit 3786a9bc0455ca58d953319f62daf96b6eb95490 commit bcfab8e35ce81e2fd3230c1575024bfde0d28c8b commit 120cc6e67a5e34069693cf1711ea222b8c414685 commit 68550cbc6129159b7a6434796b721e8b66ee12f6 commit 4a5dc6c73dbec54648fe01af2f1818dc3ae90d5d commit 7938f4218168ae9fc4bdddb15976f9ebbae41999 commit 976b6d97c62347df3e686f60a5f455bb8ed6ea23 commit 0fd9803b985e5d94e2b9f1848a12756b7848b62d commit 270b48bb8da7452b4357d8726933beba72652310 commit 68129f431faab376c1dd1c701f2fb999eea53383 commit 18f5fad275efef015226ee4f90eae34d8f44aa5e commit e09b9aef6807474d6964a2513321e174f5162e8e commit 9285f09e8f96496604cf0755a3d7e91478120609 commit 6abbad2c00bd26531c203f29190d14ad9eebfc0e commit 042ddf6663a86be98b306e6cc9e7048ea4c835c0 commit 84d826c8fb84a57716b44b721591a0fffe4ea1ca commit b20384d9196788dfed70aa7cfb2b3dc458217918 commit a59b026419f33040d7d28b8e3b1cea681b9ce7a7 commit f665147cda30928ce79045a13953eb709fa3dcbc commit 3ab26eddc67a67579a2b52f908b69cbc253f5ff3 commit 5e78d59a1ead969669f64dde4245cfa65b7cc4a9 commit a28fde308c3c1c174249ff9559b57f24e6850086 commit 053f2b85631316a9226f6340c1c0fd95634f7a5b commit 2a3950c43e2ead47ed7456b04da5d4afde58c4b2 commit 6b0076540faffd47f5a899bf12f3528c4f0e726b commit b21a142fd2055d8276169efcc95b624ff908a341 commit f4044ca1967098b44bd2d569ddb99352b599551e commit bf8900406e9e5c928ba578c8fd932b4bc72556be commit 2ecf64a0d26699f5f7458e87bfc873a47a2945bf commit 6e007c3bc97024853e3397cbbf37377fe8cf2b5b commit 7e97596c743c978e81ac67a59940071aa292b2a9 commit 91cb1e11786c4d5cfd8bf32e891232fa42b03cc6 commit 11a1d09c974fd58b8de0474081d6e97bebf4b619 commit a3de31d55b2a9fb672007aaf2b070cf90ac7dac6 commit edbb9242478d3aed8b4d3cb197032e9ded26b3e7 commit a0386bba70934d42f586eaf68b21d5eeaffa7bd0 commit a4c63cafa58b4bd9e15511bab77a4752b93d3aa0 commit 5fd8518d187ed03403a4d4f7f56f52c00b11c148 commit 54f329cc7a7a7ea265c45b206d45e3d09192aba7 commit 02599bc7f7047f2b316ab499f41d72ca14e3b3d3 commit 681260df4dad45337b14ba762f94b402204e9ac3 commit f287a3c5b03f51efa8d8f3e141a79177f91047e0 commit cfbb6b0047448e2d986160d9f30d60f604d9ad0f commit d0fb18b535679a28b1f55a312b7454563b9bb36e commit 89a7a87093d67e2c633e1ed400ba00ffd15bdae5 commit e923be9934a9c54a94e443f9e77bda5b9fbd1ce5 commit 3675c2f26f33ab4928859fb8950a4697a16be5c9 commit 03e5b167bd2020053f3d10b61a361de8b17c5936 commit b1c87b0874a4a2045dc78a8d3d3a77ef61536711 commit 803ec96319eec2897d3828e87bd38180295d0dcc commit efbb7c98f5fa5a547c4bc0369f825c930aed8918 commit 2feb6b0f06b1221b2841ca61b721b1d608bafa79 commit f3b603de2ff41eb915d75163f7212bbf177950d1 commit 28f5f8884e7cb9cff5375db487a8ca7cd3fd599f commit 98476876b837069e4582565fee63e70810c880b2 commit 40f1dc5223ae9b98458124bbeabbabc74c2bccf6 commit de7fbd020d959708282ac0916be3e5498086d9aa commit 6c1a7867734bc6f54e8442f47790c90d3afa07a2 commit 5bdd3eb253544b1e80f904e1205699d0a126d2d6 commit a439b890dbd17457f071e41777aa1d17916258d6 commit 1cbbc8d4f788af4c260ef3cae05902ef7b191197 commit db7b81545f5abdfd1f13b7f0a3f995994701cf92 commit 3b99e8e37d0ffaa0ef95598b9b83c49c89bc0ea2 commit 63b5fa9dbb711e245e59cc14eaae0106eb716447 commit df62ae6fc9b49a9a401afa2efd3f36c0f82ad663 commit f5666d482305900b9622a2c9dd73a864a3b0d281 commit 24524e3f43cf77dfdff7187f76d967b3175f68bf commit ba2c5d15022a565da187d90e2fe44768e33e5034 commit a3c286dcef7f8bc576a20f5d1e80624f6b4b93ee commit aa15c677cc34e626789cb65b8e7375180851c03b commit 67b723f5b74254d27962b1b59bddfee1584575ff commit fe23b56f56532dcc5e49e83e20333b97919dec53 commit ded74cafeea9311c1eaf6fccce963de2516145f7 commit 1528038385c0a706aac9ac165eeb24044fef6825 commit e7a09cea6483b44ea0c82f07145fcbd8a918bf96 commit 24a644ebbfd3b13cda702f98907f9dd123e34bf9 commit 73144c0ce4e9d69c8d0de4078b6bcdbc55f79db8 commit 66b09ddd8b323547e24871ec05fc63c44a557877 commit 69898171829d6fb92e366a989f2f14d8b5b15e21 commit a391e06958b2fe3f53171ba04f60dadf17b09d5b commit f7bc440bc79ae5dcf648b90209910ea8dba6ef0c commit 0f4b58423f3500ee3e3159fbbd6c41a6e6f920d4 commit 0192c25c03cd2feaeaadae375fe6aadff788939a commit 427153ef63a82a4d51c6046e2457787127f4d6d7 commit 92e438619d1603995ecb9f1fb2c322cc304b759d commit a421d8a99216d46926609611cdcf260fdf900645 commit 3ee7fab0f3d2c1f9c2bfe6d4fb8c58106a52e840 commit 420f63cb6d2a691b94662f50e07dc3c9a851bc69 commit 721255b52700b320c4ae2e23d57f7d9ad1db50b9 commit b508d01fa577e21a8f574dec09a16e5f2f6c7d3d commit f3392b85130fdc9e17bf6abe362d5e9e4bc9b8b1 commit 985a0256df3290d318bf937db7ef0633f7654490 commit 88d23eda3c7f8bb560ae93b00d03688ff7920cdd commit 165bbfba34cb4c8f31d1e643abd2d5cb6eba1b90 commit 2528b396d5304a711d28f08047a8fe60daebc3ae commit 154cfae6158141b18d65abb0db679bb51a8294e7 commit c8eb426d47abfffb0713dfba8d25d99ff091f3ab commit be137d791b5067fd5f290a593336f93019ed25c4 commit d21b3be8e14445fbd06109b4831c4fa8f9adad2d commit 8a84e7a176c0a02a97f64ace508c1f2546c30bf6 commit 759d4fff3d2d70d6b689a9f1f7eb4488df337fbd commit 63b81e6063200d01592cc2cf9b3a87dbade2e149 commit 04d4e167522fa9b60c83e04c4a74041b36b2327f commit cad3fab413efbfdb1c64a08808aa3a59fa288457 commit 5d488786a3a18d48bcbd1d215ba9dc6811b7d639 commit 0c63fd3d962525d3eb1001ebc31537206f66720e commit 1a7a8d93db9b8c7ee9cba983fc6aa8576da237ea commit 6148f3653bba417488e0d289bbe60c6fc7c4e711 commit 2b1466ea19182551ceffcd6deed2b22377cb2a53 commit aeb47df35742376f2fa13ee39039f1873daee626 commit 02cae05ec4b6d6f1a1a07c98a34e69ebc1b8f7d7 commit c7703ce38c1ecdeeea6791b54fbee29a08816ea9 commit cc188a73addc8188d73ad11901b697acdc7fd0b0 commit e5af61ffaaef0e952e248de895454cd339080035 commit 5aa71bd773c390891974b1bcbdb3b12aa17c781d commit 574ff46f10102f65c40d24729197033a80458238 commit fd22013a098baca78679656d55f8fd0becb99a8d commit d8a25e48585773afc573e835a52f9cbf409215bc commit f9ed188d5a08cfacb945b21976764f57c0ea9ebd commit 69f915cc97c4bb82b34105a47abf613f7c87215d commit b06b48d7ddae440f3393e5c1ddda4d2537b3a7cc commit c8cb19c7b26d78434ec563088d5d377ec2caf616 commit 60aac460ed97852f620529f43fd58dd05e41644b commit 816d61d51a31bd16d0fec75526462dc987f09114 commit 8bbd4d83a68beaf54ae01b2e2aa2024ff1dfc0ba commit 461fa7b0ac565ef25c1da0ced31005dd437883a7 commit f3986e86b2d861a2ed2d336bafe53b5c404cb995 commit 1915a433954262ac7466469d1a4684ac54218af4 commit b010a46bd3abb161409afe147a73fe58c115858d commit 24992ab0b8b0d2521caa9c3dcbed0e2a56cbe3d0 commit 7f161df1a513e2961f4e3c96a8355c8ce93ad175 commit 123db17ddff007080d464e785689fb14f94cbc7a commit b9c7babe2c2e37a50aa42401b38d597ea78f506e commit d315bdbfebd517cf5efabf666c8099e027ef666f commit c6fc836488c2ca45c06d21213f5281d668b42b95 commit 9a8e720fd064193ef5112dcb221192fd4d0f7809 commit 74fc595465a0f8e54a71a9b2fc8552a1ccaaf5e2 commit d83d5298ba188a829558ebcc395469e39ffdc2b3 commit f9bf77df111a16d00cffc4ed6b7e374956290dc1 commit 5472b3f2d9ae65d809d0443dd8f5cc7e1b20b1af commit 5f2ec9095ce8439614ac289819a44e02f52a5415 commit 82508de228bafb2ea8f048f7bf11bb5547354d62 commit 01b94a9361680d6582dcc2a73a9eb464e0e40888 commit 14da21cc4671dbedfbe3854e495f24adac7866c7 commit 4feb2e9eb95f785ea39d5a7e69b845354c2691b3 commit 548b512e144f890a7ba4aad71985cf4a81611f5b commit 57bfb34a51c7c655335010b3168c1061b5eba354 commit adca62ec370c131ca676ea4fb2e4e450f999fb9e commit 90d4aa20c8cc76f5baecd423b5dc289b899ebc42 commit 0e05fc49c358cb49e59ce8d6ecda652951335e1e commit cecece2ca505dcd47359ae21e3b37ca1f57c08e4 commit 8668658aebb0a19d877d5a81c004baf716c4aaa6 commit 73792e6e66be1225837cc1a40f1e39b1d077751c commit dfa714b88eb0a9d763eba9e5720b089a58dc9496 commit 3fc2b087df2ce87dc11abe4a5e7a02b75b5bb82e commit 7db47b838896ec2bb57e3d0b329804b84f32626c commit d5c6f647aec9ed524aedd04a3aec5ebc21d39007 commit 77608faa77196cb0f7af3fd0e3e26051f3de1db9 commit a6c40b178092f41b9d6cc8615697c14b1e5a1c3a commit d87f36a0635edc58430e322f9e04fdf9aae6641f commit 2243f4937ace91437fb39f9b67d309c3d0d7aed4 commit 71579346991927687c76ff76084bcb1f9da410a2 commit 22b1df28c009aaf78e77b20a9cc8d8bf98e698c8 commit bdb3489cfca16815e9a737359e9e90a4af5d0ff3 commit 311065086ee15b4d5d544fba44b66349fa7cd246 commit 634b56b0f88bda4a20f88af2f3d8bb212ed53027 commit 88bc3cd8450b73ad37c9de4b48c315e6c8002f03 commit cb9561d0e3f4393a31fab2034c33c6cf2162513a commit 80ed77f971c3911d6a6f7c537540b4ee62859455 commit 683bac6b00e1158bf3c56dfd9f55ea34acebcf90 commit a3ace75cdb6979e18ec9ad00862445ff71bb8a71 commit 892a57a975c3bd51834ddb0afa5f27baa19a785b commit 9252d33df597a60416f3718b9b41457657c8540c commit 563285c85ecaa1fcecf304dabf87cbeee1ddbc3f commit 2fbdbe958a15e735a24ce33751671e9bf221e70d commit 1ec1944eb50c8de2d96de1188eec9f8b22d03366 commit 7258fa31eabd882f6c8ed4d6d281f6657a33ef94 commit d2cb0b21b8f809ae04a5c30468d3ccff2b23eec6 commit 009e9a1585059ed517b8e02d0afe11128af5ddca commit 3b853c316c9321e195414a6fb121d1c2d45b1e87 commit b60668cb4c57a7cc451de781ae49f5e9cc375eaf commit df529053590d59ca3e06d5b3232586987b61525e commit f461ea5d8dc425325f4c478dfcddc4de8e24fea2 commit 7e2aa820ac24f9d5c1fc39ef5a2ba7baf3384596 commit 208f6265d519643f380c504ee1c1ef925f2c7d5f commit a6e7a006f5d551ee0827059300148e1c9cf4f9a3 commit a32ba6bdca21fd82cacfca2aa4708cbfdac6bc49 commit e283820cbf8092c87a8d6461260d5bc525da72c9 commit 2509969a9862b522d2208e8663057fb227556687 commit 6ed19359d6bd62e993b09a7a565d7a5ce5e114c3 commit b3d9f59f69289569133730e1be019adcd9e06611 commit 4a564e59bfb7732ec168f66ee77bf1eb81ff9319 commit bcf8b616deb8794179e3e9c6233a53f42664afb2 commit a61732e808672cfa8c8c6028bcf9feacb953ef40 commit d12dd1db809a3f298b4ef6cc02ca64fe3038391d commit c17897428e1d25975da5d45d40f53bfb19d8fdcc commit 3358e2ca0ebd6454307bfb8affab35d26cedb9db commit f12dc0d8431e1fa36a3496f6a0a34edba1fea2f9 commit be78311eaa92f71d2f4c0861defaf185d799e19c commit a19c1d00b0d350fb7b75c6c4da91887f66114a7d commit 4895b90dd510b217852b3d118910f57f3f333b2e commit a874aba8bbc529517ed154d88b08e3c437564c88 commit 93cc7aa0b037f34d9a55c58fb4ab6bbd802fa47c commit ab9e00a3509ab7868cc3d4641f45ff926467b38c commit 680a5cd10b9cf4922e182f768d3a534b1a4427dd commit bd3de31950aecc29abc6e554e3b3f6883080c5be commit 0d53879faada6278209883a9eebf39b9e3a8ba10 commit 573ca6fb97c617eef263b15d982dac2f85fd2854 commit e30e6c7b82a18256a1e4ca2f067ce2b05bbc8871 commit 5f1d00420f46774fea45244effc6dbcd53cb6bdf commit 783782a52340e850840c11d823b649e6ba83a700 commit eed1a5c74216907f79f7b1af725e570e95bab0ea commit 92ede25eceb251ec31e1599065b98d681a419046 commit b874c6671b911ffab69f70b298d074a1897b8aff commit e610941c45bad75aa839af015c27d236ab6749e5 commit 7e2a4cfc62d35a7c567e7d85b0af2651cc6b05c2 commit c85bf88ba5100249451151fb1b76d2ed9e40b634 commit e506db5905d18b014aead347e37b7311858e2750 commit 951be8be7d66fc7c69fc2e2f42664bdbedb48c32 commit ed7208706448953c6f15009cf139135776c15713 commit c5365554514178840400b801787bedb567811064 commit 8639bd70497ac96a83ff26b8118afcdc45f1cfaf commit 4d7ba312dd1f94cce23f1f93f33bdf92db090688 commit d9f2303004581f767f3f4acfa3faba205c9991d9 commit 128f8ed5902a287a6bb4afe0ffdae8a80b2a64ec commit c25badd59cb4978bb702e52ee4c5b5ed1cd03910 commit 43d15db1d067e4cdceb0aebd10b9210b97899789 commit fa39f936dbb96626d3345fd8d66af6be6f47ff9e commit aa79d3808e8cf1f5fd0f1c20c2e6a6865b5b940c commit 17ce8a6907f77b7ac97ddaa071d8a1f6e06ce85b commit d5c831566d34924f62082f8b675d35c078f9b45c commit 29b440d20456033091a0376cecdc23c6875d51c3 commit fdda8f3406f98fd087784f9516b3825bb4b5f6ad commit dfcc3e8c24cc1fcdf9e14ef98803e295b5e4f721 commit 01cbf049e10f2cc4cda5570ca8ad3d0334cebae1 commit d9f8a22aaf84be5640e0fd8e2adf0ace61ee3703 commit 2019bf7cd2135bf4633dcde8357c63fdf1ae87d7 commit 2fbc5086975679a5c2ba1bac3ecc5942cf7726c5 commit b67f00e06f36192da513ac80148b000fbc5b2717 commit 35c27d9578356762e7421f16d61b91ab46dfabee commit 97437f475c5be7804592bc258e3936aa318895a8 commit f99a7eb2d11b00a20c9fd6e724c60151b74b6ce9 commit db090ff8f98d8314fab0442a16e7b1e6a33e16be commit 967af863f23344aed4353ddbcaa8d6d6727b34fa commit 79aa0367385ceaf5351ea77ea1fb66136739ea9d commit a65dbf7cded724a5ed4a5e1a718616b048ca0c34 commit a4c260de9b6bb3c54a509d24baf871c497bca7ca commit baf682144ecacae4b98597daa636ce7b2b3143f6 commit c1c04560ac038da28694a04d71958ced32964647 commit d8b746eafc2ccedfc0d6008df7fbcd96e149ae82 commit f2ed8ef31366467930c98494535a044e33a1b3d4 commit 5224f79096170bf7b92cc8fe42a12f44b91e5f62 commit dd4821baa8b6f0abceac43840673b4556bf73175 commit 2bb116c7fd1fcd80c7727be44876070d1b3ce923 commit 64b14a184e83eb62ea0615e31a409956049d40e7 commit f3f6eff85f94e742ed9f34330993cdf91f83d579 commit de7cc1b48fde1abf13324e800cecc0aad5078ade commit 868f4357ed0d1e2f96bbd67d4ac862aa6335effe commit c477eaa6a79da6af7e59f74e69af7d6b3af52a23 commit f83e14011e042adc196f1dac7cb235c70798c231 commit 4e9b1fa5a2757d11a5c40eed2b2b4837dcb2f12e commit 72b3588e27feef96be6993d493c8c76a13bf8eba commit 068001b711e820184553e90f9bf2ae18fb4c2c06 commit 20c43547add3a60c553c90b730e6cbd39c4d5c16 commit caae42f00924498e78da8a960561936aa7eba503 commit 867e24ca4945249baf34ea07ae6b27ca927210a1 commit 418abce203fc2e936bf8c7632a9a429e861f6283 commit cba07cce39ace4c719e63b0410a53480aee6aaee commit f0d540989597d04905253b54d4d0ee53cfe70a42 commit 0ab5d711ec74d9e60673900974806b7688857947 commit d01899d3db2a553268dd4bc03641d9e80e41d67a commit 8f74f68d907d2a41be211e61aaa7c9268f5532e1 commit 6b5033831febbe1c009b6713338cc9e417b45ceb commit 779596ce6a79e187995f04f143fc5ea44a565ea9 commit 91aa9c8f5282922b2890227724467de2f32fbf84 commit 1957f27de290cde5a0d6e1df46a2c8b3e9c77046 commit 50e14a62ac3a56c62c5676bbb8b39245212e0567 commit a142606d5433c9bfc68c0f40ba32c2e05ad75d09 commit 874bfdfa4735cbb1b0d6e0c6157c712a312371a1 commit b63c54d978236dd6014cf2ffba96d626e97c915c commit edf176f48d87fa25ca93f09362707cf5314bf7ee commit 84073e568eec7b586b2f6fd5fb2fb08f59edec54 commit b71a4a2542e1b092b4f11ce6318eaf82619312e4 commit 9b43698af7c36361c340b95c9601c54523da4f2a commit 7f088bef6b0cd976b5d39eee5a4046ddc920ff29 commit 77f4ec2a4111f1dce0c5903d6db7887413a0a750 commit ed0ccf349ffd9c80e7376d4d8c608643de990e86 commit b70ad01a22176b6d903e9cb2f2184c2aa67ecee0 commit ab597bb3760ce2e7a5c48755cacf7df8abfcda6b commit 79af2404e537e0f74798faa0a26bbd374ece27f8 commit f470b218b0bb7c9bae8aa2b4859d9a6bf97d98d1 commit 61b3b2da10dba0ac1633c699c9d305c702b43720 commit c94d13e9d99bc0432cbcc2371060acf5e10cd7ca commit 48bb92d91ae9331138656f369e66b5cab8f0fa7e commit 89bfcd82b3452b6e47ddd9d573add43dd7de54be commit 93afe1583758105ec390ed130681bc7b70371b7b commit afc2f276057ea1eb165c4249d15cfbc1954411f0 commit 87b5e77f02da9444c630b1860b9f384e805eeba7 commit 935ad3a74c7d231b82e7fca15899a5cab4195b95 commit ec3ca078850a3310c9a393866418c85b7e6d40f8 commit d7fd297cb0f19a87c1eab63fdb90f8ce8f03a533 commit e8c487a6b70f060cfeabf3e155c9daafd627617b commit cec24112e125a228d5077eb05ca793398de619e3 commit 068ea8bdc0aacb3bba3d1392ed41cc1116a671b8 commit 62640f251f4777cbed654e59827fccd3b4c94bce commit 5b723b12301272ed3c6c99c4ad8b43a520f880ea commit 574dce2d2414f7d782536fbbef7d20d1cf027e69 commit f9490399614050a47472ff127c67830cb4e311f4 commit b9d7eb6a31be296ca0af95641a23c4c758703c0a commit 92d0c2ebe564f492ea71bf2ca81de5d95d58d6de commit 5559c7ba93fa6adcfe6a39ed80081466d8165e5d commit 9cc57625a6f374174f716f87af3bb5df87118ca8 commit f9806a172070c2d6094b0a9e488c8c172a6f35ab commit 0b208d60adffb6b3dde41841ee423fb5be0d01e4 commit 501867d0d2a6bee3ec18a6471ad99a7a1af47e08 commit b5b8ed444a7fcbf5229f0469f85c752b5192a9b1 commit 181ebed7dcfce21dc152c3b473e3d44e7e94bf27 commit 8dd8ffb824ca7b897ce9f2082ffa7e64831c22dc commit 6b728595ffa51c087343c716bccbfc260f120e72 commit f257879182867979e64ea8940cccd52e9a01759f commit 1d82ef6552b5b3e8450c49fda90a82621fdb8142 commit d1af7b6f91a56081165bf1c1220bf1e0d9699d29 commit 9b693453a4eba392bbb62169243f9513366a253e commit 2f8a6699c90df7616e5dd03cc0c6ea22d589eba2 commit 8c26491f58538ffc647b813070ba493e35a48984 commit cccd73d607fee52f35b4b030408fa5f6c21ef503 commit e62f25e8b3cdd29224c27938addba817aedd4b54 commit 132aaaf01788d5603a1358cd53a95e5367fd612b commit 87bd701ee268a13babdfddea53894a416209123b commit 5189e3126eb136a2cffacc708f08ca4fe86ebcf4 commit a413c99fc1e49db4db27f4bf0f7791011b4e2132 commit 2cff4b9ed6171c61cc50c38b25534f7c3d30db3c commit 6f84aa1cd47cc0feb38da76999626051491316d7 commit 00e27ad85bc9842e2a775765597e6fe4b6beb584 commit caa574ffc4aaf4f29b890223878c63e2e7772f62 commit 5e3094cfd9fb313be3b8fbf9f91e92a30483bc28 commit 4b31b8e34460af9b2eff0d389a6caefcb694a1bc commit 994ea402c767e54af60f1d01f0c16520480466ed commit e78089da45093e0f421b933849c56b7bc21108c0 commit de45f0a3bef63a754839f008bb0cae86d8f501c1 commit 8f0991cccec93665dd6ecd88dbefd7db2b28c85e commit 72935696f516e3d587838a9f0e1f82d251925840 commit 2b72a38c6f9b9809cb09df4fa5aa886aab6bf05a commit 3c0deb1485c49fb282010d1add65514906ed8928 commit 602e604a899a0d06afcd69c693f15c5fd91742d8 commit 55223c3bedcffcb81400db7f1ed1f207d523eaba commit afea229fe10282da14595870b44f82792451dfb2 commit 476e4063022787b5720758239ee4c22fa2495e82 commit 95ee2a8b4b3cd1fb25f7e14e2202da4045030173 commit 64b2a6a054c40c04a4e48fd70002570654381f9c commit 9648f1c3739505557d94ff749a4f32192ea81fe3 commit 0591ee6a5c428c2309f5fefcdbe40d9eb669634a commit 757f9e4dd51644729d27c9b5e56f75681e8f17d0 commit 22804e03f7a5ed35d86721d037bbf52fbfd0369f commit d4a7eac27ec2e6b5fdb64066e967fc7767cd4574 commit 7342bf6530a78ae80b27d9a13bb10a409fdc20ad commit f141e251474d673f75e8c16dbdabeb4da3939d7e commit e1dd4bbf86d5e1e6ca2eedf9ef9ac680dbdb3132 commit cec2cc7b1c4a31c0facfdd0ee7c2ffb7d6a76556 commit 9dff13f9edf755a15f6507874185a3290c1ae8bb commit 091cd9c3abeb68981552557676985eec761d6fe5 commit 9bc34b4d0f3cb368241684cc5e0445d435dded44 commit 02ed904261481460e6084769416e7ca31bbb92eb commit 390a1f8beb879359359ef38d30a0b0ccf392148e commit 8ab62eda177bc350f34fea4fcea23603b8184bfd commit 3d515ba9ead046a0c06a461697a8d5211298aadc commit cb8f00f27ae7a1e8d047f1e2c96acc257f09d51b commit 92937f170d3f49f41d7acb86243ee691a98eb2be commit 4010ce9fb634c6368ebb9dead9ef83d49c4dde96 commit fe93feb5ab0f6eb1a08295dee51b814bf7227799 commit e6ff5ef81170e11dc0f196b0391f708f04fa8c87 commit f915686bd97a9c234602426e6d132b74a112a8d6 commit 94eb6b244c7cb0fd955f712d38a8ad9bfc7740a3 commit 03a62c40544c057a4b0df86b7c4f17da7f7bb2ac commit 7d7007686b0f999f90690d27eb013aba2eb8dc30 commit d95c25668f2379c807e1fa6328954f494c4e2454 commit d5b8da37c017b182e121e6143979bb969833f482 commit 6d8ebef53c2ccea482ed77769b7b5cbb453b7715 commit 94fa115f7b28a3f02611499175e134f0a823b686 commit b9ef89392c2ac694a3e5624cde8f848fbf393818 commit bbd57d16d5ddeb9d8995a6ded81a6879be6af928 commit e460f244fbe847904abd767e4ae093bad699f218 commit b887d5f9b9232b556fa324e77edb92039e626f66 commit f113cc32e35b5503b268f0bd891fa2b7d6d12137 commit 8f7519b2f3a93f6eae76912be66188366cc47aed commit a0c5fd46b2510cb054bd4e1fa6c2f207424c97e5 commit e7c4723103dc58c3d86fc7bc4e03c2ab500ef8b5 commit 0b1a63487b0fe45750528f89ea688eda2862dfa6 commit b784f42cf78b08932b837b5aa15d620520cd4d95 commit fd546bc5ad909f7ee67f90d91d4882f0fabc7edd commit a7f520bfd0551f9fd672b45b9b3cc56ab4275128 commit 5a82b018230b3947a736f45afa95cab434455248 commit 4683af148fe8f94383ed867ac986fe793381e362 commit d41ff22a4eefe2b933a82c0d3ce8ff47fa86e212 commit 78be946dad6d9f888726fbbb5de81b521f156c01 commit 23da6e0f7d5ebdba2b18ffcc228130a33d5411cc commit cf51c8bc5c0085e77ed956306ec7adbdb7bf5ab0 commit 3679b8518cd213c25d555553ef212e233faf698c commit 3a4bfa509eb0f73daa2e30e409ed907f2a7db82b commit f3067604b8de052c6a1c65eed3305cb6f3f9eb18 commit 2bdcb12ff69df5e42eeebb297ddfc110ee8af203 commit f11d9373b61598f6a231dbcc74829c2f11dd567b commit e0adbe73d75e46e3665cf0fb30f2cfc00dd78c04 commit 2e6e14c9e47dac61e341d4b8128184e3e0eb3568 commit 3e6084aee08b108f5cc489be46c68ba56b13e52e commit 10a9accd4842e6098cc27d79d43d7542254003bc commit 9ff28ab43af4cd9f1771779b502cac1bd0aa4264 commit dfd9be42344d9d3c1ff23778923210301ec5f372 commit c595fb05e392a5cd17c70c4fd996b8cc9735f20e commit aa34ca52a325d9a547158cdc8644f4c21d68562a commit 301306a90ed3b2311f7f2eee6fad239d3a65fac6 commit 5ac34ff1a41b05c3b22f8b4ce4bf7181246c8bc2 commit 0c41b9b561dbd81dd3955c4c8b59d55244a80100 commit 29c9b6cd581de79ef848a50d1c9f06cf567bfd78 commit 504390602444a209a52bfdcc59f539e9832079e3 commit a1235a01e0b208d424c5e72ff2e794dd356f74e4 commit 9e148e8ce29dba471d4812c6a60a3e843f3b6270 commit db749b769ff61a42480c377c30df70b8b722041e commit b74e2476efc40b1a4d895befc31fa05bced5f3b8 commit 5ce5a584cb826f1c1f0625a336134feb4e1142cd commit 15fd09a05a66216a9ad772728e51290f6dea1eb0 commit e2573d5f2a5cebe789bbf415e484b589d8eebad7 commit 5b45b1c8b89f84d01fea8939b672631b51cdf95b commit b51178d6edddbfc8cb4da5b5e9c924f2d24bbcac commit 203bcac9bf2c5676bfb0b33c7f2403ea5d6ed332 commit e776a755abf0dbe14001e4db22aa1ee70290c1dc commit 30424ebae8df0f786835e7a31ad790fa00764f35 commit 24c6bedefbe71de94455032f82cdff2694c002b3 commit 7f44571b53fd07e36ae4d2537a6fb40d79b39462 commit 54f43c17d681f6d9523fcfaeefc9df77993802e1 commit d814833f9e0e1fec2286e7d65c386583139c6a74 commit 4f0f1b58fbacc3d4f60e0cf17b01a6273df1d415 commit 45f0ff404cc92cc97569333314b47e1654a0491a commit 0bb319e7a1146e15f1919cfbffe44831c29e8f82 commit 158a05a0b885f456a86720b9b6b4571943d2e307 commit 2656fd230d21ab765eaea24f6b264a744919f13a commit ce075e75e5e3b1274735118f0a417e79d68f426a commit 8054e2f01c2cd287a3872baa02e30ea836ec8070 commit b3e8239882d9f5870bcd78baa342b0cc42c1fbb3 commit b83e1ba9395dd39f6336358dd0cbc8ca6ced21e7 commit f728eb3a5028aa87ec85f0de5c03daee78fdc544 commit d4da1f27396fb1dde079447a3612f4f512caed07 commit a2151490cc6c57b368d7974ffd447a8b36ade639 commit 0904b83e0cbb3dc1b8d5c0b1a5daeca725600eee commit 11ef5c77abc29d78ccedc26d01deb0bf0b2130f4 commit ab011ab6b007378132b242e6a70813aab3afc2c8 commit b8986c889e7ac26c57cb548f8f344456fa925a2f commit db927686e43ffebfc5d1693c1cb4fd74f462d99b commit 8fbf28934acfdac08073a2d5697c7cacae8d3997 commit 80253168dbfd256bca97cf7f13312863c5a7f2e5 commit cefbe724960bb6b40c019569bc42e02327a09ff9 commit 111aeed25ec6bf4d5b4a7b4cb5654f002ba9f795 commit adf47b75297ebc71c53b6dc2d3c55f42b8fb79fd commit 1a7998dab5dd3d11bada7e3921781922082e7fe6 commit ef0a04a010e2a521c927b071d6025c12a415747a commit 9a48ab11714c955456fefdd4ab532d324fbef563 commit 1be6b46f731392267eeebef9d59600ff9999a987 commit 9659dd2b308bde4143855f5b57b0412be466eb8a commit 1c0b1175e6f3729c91835f179eb9c97b5067bb3a commit 91a33f7e20700d58941b38bcf8eca0d0b281ddb0 commit 219aada263f909d61443a8d1196592797c6e0281 commit 2dce68fa325ecf5be7007b9e8b13174262a185cf commit 4801b99588a2e022da50e43ec5f768707de3f862 commit 98529e950d4cd25c05643f9811e2387df58bc6be commit d9a5696e7d52edf68776599f2a38b9aee1382be9 commit 58fb284c52b6262b9bd43420aa39124c39e2342a commit c723b8ee3864bdf41cc560da958b7ef7f6138f0b commit f3d45c9d556bf6174258507e0e10519ab7f5679f commit 5fc83950572a65d33ccd661cd9d8be7ab885d446 commit 691ebb1109c97da2943e2d753add9ad5fc63200c commit 0df0c76cc3fd99d72bc1b18eae25ee3e8fb9d1f7 commit d2cc01e1794bd13199f7568298614f1bdcea1683 commit 6c64ae228f0826859c56711ce133aff037d6205f commit 4a248f85b3dd8e010ff8335755c927130e9b0764 commit 235582ca96214b50fa03ea77a5e85e59d94cf358 commit 3312a4ac8a464daa66b97452ec148b69c5959bec commit 30b9d1b3ef374403652fc10fa36b9a5f32cc274d commit 26ffcbbef712f6fb52f16e6f7d5cde736b80d8c4 commit f9eb742988e20fb86926de8ad18d7e93b53d1a62 commit f199bf55104d480370515bc736418808e5cfa6b9 commit 2d45f66887055e169173345a7e6249ecf3ee7e21 commit 5558d6c23d18f2143f60d7bb387e43a5d8216fa5 commit 95ae342dc939a220b7afbd3a65f7106258f67cad commit 1e7e8e18db0fdd4da4e91597cf4d59265b8f351f commit 0e65e2e6abb09d84a75c51999e3a6cf80f30c929 commit ffb5c099aaa13ab7f73c29ea6ae26bce8d7575ae commit f85b3f806e4d43a0e3e5c042f40b7fe5faf2f6cf commit 7eef7f670086f06b3a461f1b4d1e84f793ed4861 commit c03d982670335d732e5d623af31c126387ae126a commit e22dfdb63df36427067fad6b9bfdc8c08371ab38 commit 38a15ad9488e21cad8f42d3befca20f91e5b2874 commit 9373505967ffc1b7b8331a21ba86ea436c09b981 commit 503725c2d9865533b2894f7363be16c762260b7e commit 6e0c5bf0cc1369df0057bccb3fc1af3b38d07e32 commit fb87550d2517878ebcd112f080865a2dc38e9bae commit beac7709e40ba85e0827ffe0c6f3d6840588db31 commit c803ae6d826e441b65b96133ac573c0062740bc2 commit eee5215bd784eee5f8520f2deebf437c3fa95abb commit e068ef3fd5a3574359b80ff823089ca59057f9c8 commit e2a1e7abaee128020fde54d386ec8959b1e9eb61 commit a8b2b8b06e10224c547d90ea97c483b4de511b22 commit c0bbed9051b6eb293be6128d060bb49e999ef7d4 commit 150430366b2dcb170d309952143e32eb814fe7f8 commit 944823c9463916dd53f365e9aa07f23360968080 commit 4b88ad503d6d2ea11891a355e656bf428ec815e6 commit 505c4857fb13fb0ea88a42b843c91d0b9f8231fe commit 803efd297e315859ac7830445699f01eeb1f7822 commit c674c5b9342e5cb0f3d9e9bcaf37dbe2087845e5 commit f4c1fdb93992ffc55899f38ddebcc0e1c390226e commit adfadb5638bf32e97326ec05ae379be561e13677 commit 87cb6d80f2d196427e64d2e6179ee9b1a3609dce commit ea4ca894a160002f4488324ec39083d992cc7163 commit e393e2aa0ad7ae0d187de93f4cbcfc480d28b5f6 commit 88ed07cb2737e15b7ea412dd8ab37de2397cccdf commit ff6b19d3a0f939465b1e40040c4c4869154bf516 commit b2006061ae28fe7e84af6c9757ee89c4e505e92b commit 5e2421ce79703b969eeb9684cedaa76be5305ddd commit e41d27eaf5485df99f366bf7c5382375bb2c19ca commit 52e8da704d8d3ca8b951fbc39cf8d6bce5c33db8 commit b8cb6ab68674d7889c0dcfac2d542a63b9e36d82 commit e433d6843310a259f0be18c80de26d75b9f7fd35 commit 38abd56bed580c98e4284a578380f5f70634a0fd commit d58b8a99cbb84c1eb3b3613d23c1a328695a9455 commit 1e242bf8bc1b37c74619403d0dd59d0f862af943 commit 6dc0fded62806373855350ec8c3ccb1567ddd465 commit 4affb123033851381dcff4887982f6c7bad938af commit ca6fcfa8d4461c889636ef5dd51bdec96c6122bd commit 91dcfe5fd9d3a59aec4a40031c1eef00b41b8f74 commit b51759661e2987993fb49eadcc262d6a2ab2a698 commit 01d468d9a420152e4a1270992e69a37ea0c98e04 commit 667c7091a39e8b360d34f37aed5f8dd85bdc45f7 commit 1f211a827cbda87bd0ec145a1f44f2615c3f56d3 commit 35366481d0941e9b470ccf09d85407381b5d6135 commit 9dad47c50f9bf19153c092a73eb4721344f4a78d commit f578a37d19c65361e141735cdcb691d3930b8647 commit 0dca257d6dc5526c4c293f306b7b47765987de22 commit f148c143ef3f6e897f4a1012d1bcae3aa240bd8a commit aa8e65dfc75f684cd46d49f71453ea3512a1e770 commit 149d7ba1f8fe515a2a36ff95fa659720e72fe4ed commit 30e58102d5164ce5df10bbff4c9d05acbd12a5fe commit 80e0c2cb37b6e00ec0b41c7670e24f72b2d54ceb commit 957b0787ee5d5c0848e2dde625c09850e1ada22e commit 7d4108e4ceb30a89c63ae62bea284cf42985cf31 commit 57230f0ce6eda6d47a2029b7b3a39cc5bb63fe32 commit 5aa061474b1e0cc9605877190e23a880cf1551e4 commit e6fac6a9c9eb42a9362f9f093dcb8862f2b38383 commit b6901d93cc126bbfbdc6caf5f0c03b82945e43f2 commit 00bfab4457c2b57897ea710a423684979c5b0239 commit 9a1358bb2ce3738826bce0799d47d6963ccb51bf commit fabe1753851c62d0292a39d89a4a8d7f15c96794 commit d7709eb6a197171715f370227173e817a3da85c8 commit 7952fa0d3e187504d509aa32f46d4d430e4eb634 commit fe5e8f07fc25c850e4f46967699a9b29b0ef647d commit 45a3e06be4d351af8f81b43407b3eafa5c75827d commit 1b537e64105dd8f04c8e7d5fbd8e97f9dda2dadd commit 31f5f46043c7e7fa453b0b64ea12073d524e2150 commit 825e0af0d453f18bb84feb40bff447cf59d61979 commit 3192f1d9b61a59d7c82fef187bffa7281fbdc9f5 commit 701920ca9822eb63b420b3bcb627f2c1ec759903 commit 730ff52194cdb324b7680e5054c546f7b52de8a2 commit dc90f0846df4870b6cc8528c31e5c60f18fb68be commit 27674ef6c73f0c9096a9827dc5d6ba9fc7808422 commit c9e9ce0b6f85ac330adee912745048a0af5f315d commit 2ab82efeeed885c0210a0029df93bb95a316e8c7 commit 863fa85e6a01c8b239009825dd9de1f64d7d020a commit f70b88b994a35755f1a065ba4b43d2ad4b401e15 commit 7a1bae874b5ec07ac97f02018dfad73fb9bae567 commit 5f5d08b7eb0ab09700b22bec2adcecb8a1de1120 commit 575d0df6dae46f1b5d26a35ce0ccbc5aafd40e1d commit 36b362f5af1ee23ef502b519c2a8e2d273b2f156 commit 493a7508d737a03b620bb0806e222bd39a9ebca0 commit 90d282582aa709eeadaf33db71e92718c9471e31 commit 9e08564727fc7770b30715fb81348aee54fa50c3 commit 24bf9fd19740df5aedb3bc801206f81dcb4acc4f commit 811c04dbb3dc43304b35688d4009117e28c1e9ce commit b6065ebf55ff2fe3dae98e7cedb6ec4aa3c33f91 commit 11eb648d014eb9e80bf553004551dd6694dfb5a0 commit c8b0507f40deea3d5014b5b4989b6a06ffedde70 commit b664a56e8626264276ee27edf949e748f6be52de commit d18b8eadd83e3d8d63a45f9479478640dbcfca02 commit 8c7442f026d2e36e1185b9dd79db51601d875b7b commit a190f8dc4aaf6064527bb81c07f7cff1904dc927 commit cdc7893fc93f1969038ed333b33eac1452c8d255 commit 6103b2f24e4a9716ca3f5de654964f2a083086be commit 48e9fbd1a28480caf2ac5ec6fcb79ac221735c5d commit f7ddbf5581b474fe4a0a29244acaa1bf72234675 commit 90f45c42d7d7b0ec0fd797485c07fc421c474e12 commit 17154addc5c1a175bcf3441ff0d9598efa1f05cd commit 43d26c4fc6c446d766253d546f0083d78023d34a commit 53b97af4a44abd21344cc9f13986ba53051287bb commit 4fe4ed07c815044755075eaad5fe1815436a060f commit 117f5bb31c8cdb1e8f0b443f2a0ac761bf54694c commit 176c0b55d9bfe6e2a7c8ccf3edaec7c92d856b2e commit 5c8107dc9a9f33a88a380aea79be564597d00663 commit 4546281e8ab215b2beaba8e79975c99859a84a56 commit e17c6debd4b2d2d474074f83946f8c6522587566 commit 5e7f44b5c2c035fe2e5458193c2bbee56db6a090 commit d55957fb299b74829c438f77fe29896e3aed39fc commit 96a2f0f2c8006d338a9647e068a15c6eb299f864 commit 482d7b582d7f9688a5f64ed2424157a76a17f2a7 commit 955ad0c8ba93256c9eeeefde5644b3480c1ddedd commit 1d38fe6ee6a874675ca3bba6b48e69a0e6176ffc commit c1593ddd894d0518fc96fe7f531f3a5c919b8463 commit 60a9bac8ab48ddbf68dc280cd26879583e9d72ba commit dfe3da812d99b40f99ce018152db4b3a87bd86c4 commit f8d81df285a2fa2e739a9e4774e413ac778d282c commit e96902eb8c69fdcc55fa6beee796c6b34613e0fc commit 37114e4d1547ed230706d07edaee2d2b4b3215a4 commit dc593fd48abbea1e840c847c464eabc9c6bca180 commit 4e6c91847a7fa94a6a0caeeb388718b8ae005d56 commit d5109fe4d1ecba04d3f6903ab0421188d1420d22 commit f321c35feaee8dbde551775210ae3d41534b7a20 commit f6d790e5a7fe42706756c7fa1686d08d230610fc commit 1344794a59db2bd44b4919d2d75300fd3b1c2cd7 commit 3886a86e7e6cc6ce2ce93c440fecd8f42aed0ce7 commit bb7c3e9ce2d43a37b699ca379876089e03a756e3 commit 7c916f95f58df401fef4f8c7549aa80a5739b0dd commit 3b8b44a431b76be2645806cfa0494399c3dbbd85 commit df5a07c45c68fd85cd4d1a4ad7892d3a717a4ccf commit 4984e3aae6fa4f42fc24f2745b74509bf2cb0b03 commit 4189f2938d49d4d6b2e2191c86000c2e04ca7305 commit dbede77ce38df760bcdcbc53287e8673fa65982a commit 3741584519dcb780c38df502dd5e4cf7cea4d9f2 commit d8ff38d8fcd0a7bb66d17ec689135239aca78532 commit 53923e62afad6f52b2b931a74d2ee10274051b28 commit 5fed53c7983654b1658c49a030ac86bba7965fde commit 305f098020920f9ea6ff9162ee46392f4d67e67f commit 76a52f36b636cdff6b5b18f13daf05005e4b0b57 commit 4a897de1d607c15ebb9aa11a424ec3f3243304a3 commit 4185f99094d50a2f402153ff8922bc694f5f6d96 commit e7145aaedd55b19ae4e8bd25cbd4ef8f415b6b89 commit 6e899860f557fc60135506242cc3fb705e64b718 commit 9c1e260e97606330518a78422ae28d9d56ac87d6 commit 84ce38c7bf7a19fb1f9cc61181e830b7e04dd51d commit 32685b32d825ca08c5dec826477332df886c4743 commit 44ca49f046f89a97ad319372b4fdbde67da1b6b3 commit cf689e869cf0339c387397c7a6805e387594656d commit 22f87d99832650d9389b0b3d08f3c970afc53f10 commit 6e6faf7a8364c77f4021f44043a5a5cee91f7025 commit d510eccfa51e09f5e65621a2e8d41f58a8dbd3ba commit 69691c823531c36c7283ecaa040e99e9c12ece07 commit 8718ca1dbf497c302df989afaeb82f05f5a3d961 commit 2e9fda82c98b1e417b90ff5a2f8b8b96cac06fc5 commit 67a359d85ec2679cc8e11b16844df960e3b27c24 commit b38c074b2b07349097d824e3c6c49b5ac8d98910 commit 65722ff6181aa52c3d5b0929004af22a3a63e148 commit e7031d8258f1b4d6d50e5e5b5d92ba16f66eb8b4 commit 0fe382fb82dc6cc6eaba6534d038dc381e2b17b9 commit 6f172ae59a7577dbb73e2a8da18697ba8dc56341 commit a03b288650abf2a92d5ecdaa737e3d04a2a77984 commit a29d44aea1aef0bc58d4951f2ddbe5b22d9a2e94 commit 85ac2021fe3ace59cc0afd6edf005abad35625b0 commit 72a98763b473890e6605604bfcaf71fc212b4720 commit 436afdfa35dc8aaf43959593f6c433d0ad29abc3 commit a0248d543bbf2a977e7e6d9966ce8d96f6e5c358 commit 10499e4055949e4682d2e7c428365175e99e0800 commit a18112ae72d693bd4eb79f2ec09b536eeacb902b commit d853419f5fcce39553ce0f6837fa122f113b15b6 commit c791d75a64f5c628a9c9a7d9b9ec01ef0357e6a3 commit 906fbba2c9d48678fd182d0de4dd193d9dd0cc9c commit 3a0625813bacf12bf188f8242b42b508af28baa0 commit 2716bc822e2325efed0731d6a6a7dff755dc34d7 commit dd15640bcee5a5fa74fc52557dd6220f48b01116 commit a91b402d50072e4801b231925f33574f90e562ce commit cfe7c679412f14811cb3c4119c8025cb97564c48 commit fdf0ece6309d90dc0f9388001239cb2d12671af3 commit 8476269f758221863c01a0a6cccb0d75ec5d60c3 commit 8c0f11ff3895ec96c9523ac607dd51f812ab69a8 commit 4e2f50e2306fdd0e5fc7db3d9a452ba1327b787e commit 9527b9caf82b040e794fba2667f6d8a85a793bb7 commit 3f543552846b9ae47c8442af1c506207bdcc00d2 commit faad5ccac1eaae584f9ac2ea66278bd137edcbe3 commit bd4b9bb77956639e6d9618ed306cb2264c69ba49 commit 58398727e6f4955f2781e93517b8f0a3e8f22e75 commit 28b7382621f0a83f1db795f36ee0fee6f66c10e9 commit 508a47d434bffde45ca3cdb8ece186f28f9d84bf commit 1cbd78879b5f889355b2a6343ea5db7e633438b0 commit 07d01469325c87aef4ab02ad4ec31d73321665ee commit 606d5877592b0a6f945a68399c870ba9d2a9ff7f commit 426c89aa203bcec9d9cf6eea36735eafa1b1f099 commit c94b731da21f10086a9e52d63c21c730e3f6c939 commit 3a84fd1ed53582b31e843a152ee3219e9e4ccb8c commit 278da06c03655c2bb9bc36ebdf45b90a079b3bfd commit f11de8611fd6bb15bd979bbe5de0c4d59452f8d4 commit d14eb80e27795b7b20060f7b151cdfe39722a813 commit c6e90a1c660874736bd09c1fec6312b4b4c2ff7b commit 1d204ee10817aed6666e020ef1b4c643d68bef11 commit a860f266a0e19f271b839451d291a6acf6ddcfe8 commit 9cddf03b2af07443bebdc73cba21acb360c079e8 commit 1937f3feb0e84089ae4065e09c871b8ab4676f01 commit 3ef8b5e19ead5a79600ea55f9549658281415893 commit 00f4150d27d2c01eaeffe1091fc311a7c0872c69 commit ad9c6ee642a61adae93dfa35582b5af16dc5173a commit c5c948aa894a831f96fccd025e47186b1ee41615 commit 9030fb0bb9d607908d51f9ee02efdbe01da355ee commit 5662abf6e21338be6d085d6375d3732ac6147fd2 commit 7344bad7fb6daa4877a1c064b52c7d5f9182c41b commit 3ce62cf4dc3b01d1cbee1293049ca5d4c7d6d749 commit b14ffae378aa1db993e62b01392e70d1e585fb23 commit 21050a39a3b676fbaed4ad6c5871b917a91abe9d commit c73c3576a2227492b448f9be41428ce6a0b5855a commit 34af78c4e616c359ed428d79fe4758a35d2c5473 commit caaf2ae712b7cc3c7717898fe267dbf882a502ef commit 64a8f92fd783e750cdb81af75942dcd53bbf61bd commit 519f490db07e1a539490612f376487f61e48e39c commit 32f90e65251981f061eec883b0fe9e75d74e9665 commit 2d505453f38e18d42ba7d5428aaa17aaa7752c65 commit 60d61f4ed6ead43ad2de31ebb8d1d27c57290529 commit 1647b54ed55d4d48c7199d439f8834626576cbe9 commit b818a5d374542ccec73dcfe578a081574029820e commit 0d8e4eb337644cab528ff3844675d58496ec22db commit 93dde6ccd66d29502506e95f568fd0f49d575d27 commit 3107e1a7ae088ee94323fe9ab05dbefd65b3077f commit 5e8a71cf13bc9184fee915b2220be71b4c6cac74 commit 6bf528ec91fb96e186461215c8f76265c5a35250 commit 7d56a154e22ffb3613fdebf83ec34d5225a22993 commit bd219322dbb41cc7c753da3a6936ce09d502f113 commit c9fbf6435162ed5fb7201d1d4adf6585c6a8c327 commit 02fc996d5098f4c3f65bdf6cdb6b28e3f29ba789 commit e5fc78252ccd8dfc260f87d83905e9dffff6d975 commit a572f7055067d95455850fd242d8b54ff5786cac commit b7dfbd2e601f3fee545bc158feceba4f340fe7cf commit c5650327aba02d15cbd6a1846dcde9231493d549 commit 6ea239adc2a712eb318f04f5c29b018ba65ea38a commit ebbb7bb9e80305820dc2328a371c1b35679f2667 commit 5f3854f1f4e211f494018160b348a1c16e58013f commit 7057c81773ac32fd0dba00e2bb869928f008d3e2 commit 609910db56e72e87755d9745442bfdfa009dc61b commit 0dc386add50b07e1cf9341b4e6e4fea77295c98a commit 15f9cd4334c83716fa32647652a609e3ba6c998d commit 50560ce6a0bdab2fc37384c52aa02c7043909d2c commit 148a650476955705482dd57e7ffcf105d8b65440 commit cb7cbaae7fd9cee64f19cdfd89d097d807b884f5 commit 266d17a8c0d857a579813ad185cd1640b0d6ccac commit a701f370b521b2ed0654a9da7cf424b3ff8fa73d commit 21d139d73f776aed1e86f3175a1e9fb8a10930c7 commit c42ee39c1e78224d3a81bdbe0600abe4581226ed commit 67bae5f28c895f8737a1974c3f31cf12b9170b14 commit f444b2d15f7a025416ace9ec298f0b93ef68be68 commit 38d4e5cf5b08798f093374e53c2f4609d5382dd5 commit cf5c5763eb531ff5120111ad300126e926fb5a56 commit 13043d1a12c54d8b6605bbead5e177e9fb98a287 commit 945da79e6dd058be70bc47442dce319844e14daa commit dda81d9761d07541c404dd5fa93e773a8eda5ddc commit 862a876c3a6372f2fa9d0c6510f1976ac94fc857 commit 95707203407c4cf0b7e520a99d6f46d8aed4b57f commit 58e16c752e9540b28a873c44c3bee83e022007c1 commit 83e9faac9a387894e945e7f33c2bb7a9c348257c commit 2944dbedc7e167221fdb99531f7b0cdbac9ac696 commit b2075fce104b88b789c15ef1ed2b91dc94198e26 commit f4346fb3edf7720db3f7f5e1cab1f667cd024280 commit 4052287a75eb3fc0f487fcc5f768a38bede455c8 commit 96f2b7a3571618a1c8aed694c9e668014c70898b commit ef1a0808a2e20c58d166c5707864fba515832bd7 commit e79a2398e1b2d47060474dca291542368183bc0f commit ca1198849ab0e7af5efb392ef6baf1138f6fc086 commit ebc002e3ee78409c42156e62e4e27ad1d09c5a75 commit 7e8906dc2689cbf562ce520cf4a8ba5b495db0f6 commit 6e93d5b0333279d8968a2972065f47a899fb58b9 commit 879791ad8bf3dc5453061cad74776a617b6e3319 commit 28c25238898a242c58bfaff3f46a006585c2dd94 commit 2f25d8ce09b7ba5d769c132ba3d4eb84a941d2cb commit 72cfb835e56f0eec18f934095fc1a52df1815f0c commit 691b592abb9a5f2b331969393bc06fcc8b564d3c commit dc7d19d27d019d223e74f2f47ef47e778781cb52 commit 995f74807329c97e0aa7449c7a8345fce978a2c4 commit 88711fa9a14f6f473f4a7645155ca51386e36c21 commit 1acb34e7dd7720a1fff00cbd4d000ec3219dc9d6 commit 022074918042465668db9b0f768e2260b1e39c59 commit f8e6b7babfeb40987e946bc1427609a9976017fa commit e4f1541caf60fcbe5a59e9d25805c0b5865e546a commit e3cf2e05441a2c5107fbffadb5b7943113ee11dd commit 887f75cfd0da44c19dda93b2ff9e70ca8792cdc1 commit 4593c1b6d159f1e5c35c07a7f125e79e5a864302 commit aadaeca46ce54af9f8f494792a1ba47a6fbda7ba commit 8e401ff5380a921c309d4c73cacf27b0bdb5f168 commit 9df1e3ff60241ce3fb26db75933970dd1b871213 commit bb02330408a7bde33b5f46aa14fd5d7bfe6093b7 commit f92055ae0acb035891e988ce345d6b81a0316423 commit 5f18c0782b99e26121efa93d20b76c19e17aa1dd commit 298799a28264ce400d9ff95c51b7adcb123d866e commit 169466d4e59ca204683998b7f45673ebf0eb2de6 commit b089c0a9b14c354a0c3a421e09af3208cb7c232c commit 94f4c4965e5513ba624488f4b601d6b385635aec commit c18a2a280c073f70569a91ef0d7434d12e66e200 commit ed911c9f9dcb26849fa688225f002ef2f2c50cf4 commit c05d8332f5d23fa3b521911cbe55a2b67fb21248 commit 4ae4dd2e26fdfebf0b8c6af6c325383eadfefdb4 commit f7e1089f43761ca221914aea9a755b23dc7cbc33 commit 7c6b6e18c890f30965b0589b0a57645e1dbccfde commit f567656f8ab82e43815d8d071d9864941b613a82 commit f95af4a9236695caed24fe6401256bb974e8f2a7 commit 65e54987508b6f0771f56bdfa3ee1926d52785ae commit a71849cdeaec4579696e5e1c45d9279f7b7484bd commit fb8cc3318e47e1a0ced4025ef614317b541147e7 commit 9d9f720733b7e8d11e4cc53b53f461b117dab839 commit 841e512ffb64898db6322c0619f6bbc41266d86f commit 19965d8259fdabc6806da92adda49684f5bcbec5 commit 3dfe85fa87b2a26bdbd292b66653bba065cf9941 commit ca5e2f4d6b677efa3f43a6790777e46dcf806e4d commit aa482ddca85a3485be0e7b83a0789dc4d987670b commit 9b9bd3f640640f94272a461b2dfe558f91b322c5 commit 87fd2b091fb33871a7f812658a0971e8e26f903f commit ab244be47a8f111bc82496a8a20c907236e37f95 commit 3220c3b2115102bb35f8f07d90d2989a3f5eb452 commit ef3a6b70507a2add2cd2e01f5eb9b54d561bacb9 commit a56f445f807b0276fc0660c330bf93a9ea78e8ea commit c65b364c52ba352177dde6944f5efaa29bd40b52 commit b7c15a3ce6fea5da3aa836c897a78ac628467d54 commit 5005e9814698f47c5a3698fcc56c9f5e6f1d4644 commit 370704e707a5f2d3c9a1d4ed8bd8cd67507d7bb5 commit 1d6595b4cd47acfd824550f48f10b54a6f0e93ee commit 3059d9b9f6aa433a55b9d0d21b566396d5497c33 commit 21d1d192890ced87f2f04f8f4dea92406e0b162a commit eb7bac3973d209e5227d1783676362ee5a8a7127 commit 54395a33718af1c04b5098203335b25382291a16 commit 89e96d822bd51f7afe2d3e95a34099480b5c3d55 commit 6e03b13cc7d9427c2c77feed1549191015615202 commit 7123d39dc24dcd21ff23d75f46f926b15269b9da commit 7b1d6924f27ba24b9e47abb9bd53d0bbc430a835 commit 6e4a61cd39685476f7ea74e75fb66666d541050b commit 64eea6805ecf7092a113bdb4cb73860430d39de6 Signed-off-by: Karol Herbst <kherbst@redhat.com>
2022-05-23 17:17:03 +00:00
struct dma_fence *dma_fence_array_first(struct dma_fence *head)
{
struct dma_fence_array *array;
if (!head)
return NULL;
array = to_dma_fence_array(head);
if (!array)
return head;
if (!array->num_fences)
return NULL;
return array->fences[0];
}
EXPORT_SYMBOL(dma_fence_array_first);
struct dma_fence *dma_fence_array_next(struct dma_fence *head,
unsigned int index)
{
struct dma_fence_array *array = to_dma_fence_array(head);
if (!array || index >= array->num_fences)
return NULL;
return array->fences[index];
}
EXPORT_SYMBOL(dma_fence_array_next);