From 4304f1a6de428f7e51fcc418fc866063c4e8cafb Mon Sep 17 00:00:00 2001
From: YohannFaure <39982595+YohannFaure@users.noreply.github.com>
Date: Thu, 6 Jun 2019 11:17:56 -0400
Subject: [PATCH 1/3] Update quickstart.rst
Made it easier to read, removed to non working part, made it more "begginer-friendly", added the mention of emcee 3.
---
docs/quickstart.rst | 406 ++++++++++++++++++++++----------------------
1 file changed, 200 insertions(+), 206 deletions(-)
diff --git a/docs/quickstart.rst b/docs/quickstart.rst
index e316c3e..d551ac2 100644
--- a/docs/quickstart.rst
+++ b/docs/quickstart.rst
@@ -2,288 +2,282 @@
A quickstart example
====================
+Fit a single-wavelength data set
+--------------------------------
+
In this page we show how to use |galario| in some typical use cases, e.g. the fit of some interferometric data sets.
-|galario| has been designed to simplify and accelerate the task of computing the synthetic visibilities given a model
-image, leaving to the user the freedom to choose the most appropriate statistical tool for the parameter space exploration.
+|galario| has been designed to simplify and accelerate the task of computing the synthetic visibilities given a model image, leaving to the user the freedom to choose the most appropriate statistical tool for the parameter space exploration.
-For the purpose of these examples we will adopt a Bayesian approach, using Monte Carlo Markov chains to explore the
-parameter space and to produce a sampling of the posterior probability function. In particular, we will use the MCMC
-implementation in the `emcee `_ Python package.
+For the purpose of these examples we will adopt a Bayesian approach, using Monte Carlo Markov chains to explore the parameter space and to produce a sampling of the posterior probability function. In particular, we will use the MCMC implementation in the `emcee `_ Python package.
+
+In this page we will show how to fit the mock observations of a protoplanetary disk. In particular, in the example we will analyse mock visibilities of the disk continuum emission at :math:`\lambda=` 1 mm whose synthetized map is shown in this figure:
-In this page we will show how to fit the mock observations of a protoplanetary disk. In particular, in the example we will
-analyse mock visibilities of the disk continuum emission at :math:`\lambda=` 1 mm whose synthetized map is shown in this figure:
.. image:: images/disk_example.jpg
:scale: 90 %
:alt: Protoplanetary disk continuum map
:align: center
-You can download `here `_ an ASCII version of the uv-table used in this example.
-
---------------
-
-
-Fit a single-wavelength data set
---------------------------------
-**1) Import the uv table**
-
- First, let's import the table containing the interferometric observations. Typically, an interferometric data set
- can be exported to a table containing the :math:`(u_j, v_j)` coordinates (:math:`j=1...M`), the Real and Imaginary part of the complex visibilities
- :math:`V_{obs\ j}`, and their theoretical weight :math:`w_{j}`, for example:
-
- .. code-block:: python
- u [m] v [m] Re [Jy] Im [Jy] w
- -------------------------------------------------------------------------
- -155.90093 234.34887 0.01810 0.13799 200.05723
- 9.290660 362.97853 -0.05827 0.02820 216.95405
- 95.23531 109.22704 0.06314 -0.16727 167.18789
- 94.01319 251.97293 0.01974 0.04358 179.69114
- -60.45751 211.33346 0.14856 -0.07756 188.09953
- 91.59843 68.94947 0.12741 -0.12871 156.32432
- 23.29531 251.71338 0.01568 -0.12316 189.58017
- -135.83509 -29.77982 -0.02017 -0.00010 207.29354
- 59.38624 144.99431 0.04759 -0.08606 201.32301
- 192.43093 171.57617 -0.02176 -0.02661 208.52030
- -243.91416 76.18790 -0.02306 -0.01430 207.16036
- 58.72442 276.64959 0.03325 0.04560 173.15922
- 35.56591 111.28235 0.03777 -0.11856 194.83899
- ... ... ... ... ...
-
- You can download `here `_ an ASCII version of the uv-table used in this example.
-
- A table like this one can be read with:
-
- .. code-block:: python
-
- u, v, Re, Im, w = np.require(np.loadtxt("uvtable.txt", unpack=True), requirements='C')
- wle = 1e-3 # [m]
- u /= wle
- v /= wle
-
- where the :math:`u_j` and :math:`v_j` coordinates have been converted in units of the observing wavelength, 1 mm in this example. The `np.require` command is necessary to ensure that the arrays are C-contiguous as required by |galario| (see :ref:`FAQ 1.1 `).
-
-**2) Determine the image size**
- Once imported the uv table, we can start using |galario| to compute the optimal image size
-
- .. code-block:: python
-
- from galario.double import get_image_size
+You can download `here `_ an ASCII version of the uv-table used in this example.
- nxy, dxy = get_image_size(u, v, verbose=True)
+1) Import the useful modules
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: python
+
+ ##### Import modules
+ import numpy as np
+ import matplotlib.pyplot as plt
+ import math
+ ##### galario
+ from galario.double import get_image_size, chi2Profile # computes the image size required from the (u,v) data , computes a chi2
+ from galario import deg, arcsec # for conversions
+ ##### Emcee
+ from emcee import EnsembleSampler
+ import corner
+ from multiprocessing import Pool
+
+ ##### Because we don't want each thread to use multiple core for numpy computation.
+ #That forces the use of a proper multithreading
+ import os
+ os.environ["OMP_NUM_THREADS"] = "1"
+
+2) Import the uv table
+^^^^^^^^^^^^^^^^^^^^^^
+
+First, let’s import the table containing the interferometric observations. Typically, an interferometric data set can be exported to a table containing the :math:`(u_j, v_j)` coordinates (:math:`j=1,...,M`), the Real and Imaginary part of the complex visibilities :math:`V_{obs,j}`, and their theoretical weight :math:`w_{j}`, for example:
+
+.. code-block:: python
+
+ u [m] v [m] Re [Jy] Im [Jy] w
+ -------------------------------------------------------------------------
+ -155.90093 234.34887 0.01810 0.13799 200.05723
+ 9.290660 362.97853 -0.05827 0.02820 216.95405
+ 95.23531 109.22704 0.06314 -0.16727 167.18789
+ 94.01319 251.97293 0.01974 0.04358 179.69114
+ -60.45751 211.33346 0.14856 -0.07756 188.09953
+ 91.59843 68.94947 0.12741 -0.12871 156.32432
+ 23.29531 251.71338 0.01568 -0.12316 189.58017
+ -135.83509 -29.77982 -0.02017 -0.00010 207.29354
+ 59.38624 144.99431 0.04759 -0.08606 201.32301
+ 192.43093 171.57617 -0.02176 -0.02661 208.52030
+ -243.91416 76.18790 -0.02306 -0.01430 207.16036
+ 58.72442 276.64959 0.03325 0.04560 173.15922
+ 35.56591 111.28235 0.03777 -0.11856 194.83899
+ ... ... ... ... ...
- where the returned values are the number of pixels (`nxy`) and the pixel size (`dxy`) in radians.
- `nxy` and `dxy` are chosen to fulfil criteria that ensure a correct computation of the synthetic visibilities.
- For more details, refer to Sect. 3.2 in `Tazzari, Beaujean and Testi (2017) `_.
+You can download `here `_ an ASCII version of the uv-table used in this example.
-**3) Define the brightness model**
- Let us define the model: for this example, we will use a very simple Gaussian profile:
+code:
- .. code-block:: python
+.. code-block:: python
- from galario import arcsec
+ ##### load data
+ u, v, Re, Im, w = np.require(np.loadtxt("uvtable.txt", unpack=True), requirements='C')
- def GaussianProfile(f0, sigma, Rmin, dR, nR):
- """ Gaussian brightness profile. """
+ ##### for conversion
+ wavelength = 1e-3 # [m]
+ u /= wavelength
+ v /= wavelength
- # radial grid
- R = np.linspace(Rmin, Rmin + dR*nR, nR, endpoint=False)
+The :math:`u_j` and :math:`v_j` coordinates have been converted in units of the observing wavelength, 1 mm in this example. The ``np.require`` command is necessary to ensure that the arrays are C-contiguous as required by |galario| (see `FAQ 1.1 `_\ ).
- return f0 * np.exp(-0.5*(R/sigma)**2)
+3) Determine and fix the geometry
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- where `f0` (Jy/sr) is a normalization, `sigma` is the width of the Gaussian, `Rmin` is the
- innermost radius of the grid, `dR` is the size of radial grid and `nR` is the number of radial grid cells.
- `sigma`, `Rmin`, `dR` should be passed to `GaussianProfile()` in arcseconds and `f0` in Jy/sr.
+Once imported the uv table, we can start using |galario| to compute the optimal image size.
-**4) Setup the MCMC Ensemble Sampler**
- In our fit we will have 6 free parameters: on top of the model parameters `f0` and `sigma` we want to fit
- the inclination `inc`, the position angle `PA`, and the angular offsets :math:`(\Delta RA, \Delta Dec)`
- with respect to the phase center.
- Following the notation of the `emcee `_ documentation, we initialise the EnsembleSampler
+.. code-block:: python
- .. code-block:: python
+ ##### get size of the image
+ nxy, dxy = get_image_size(u, v, verbose=False) # Number of pixel, width of a pixel in rad
- from emcee import EnsembleSampler
+the returned values are the number of pixels (\ ``nxy``\ ) and the pixel size (\ ``dxy``\ ) in radians. ``nxy`` and ``dxy`` are chosen to fulfil criteria that ensure a correct computation of the synthetic visibilities. For more details, refer to Sect. 3.2 in `Tazzari, Beaujean and Testi (2017) `_.
- # radial grid parameters
- Rmin = 1e-4 # arcsec
- dR = 0.01 # arcsec
- nR = 2000
+Then we define the mesh we will use to compute the model. Here is a 1D mesh manualy defined and fixed all through the example.
- # parameter space domain
- p_ranges = [[1, 20],
- [0., 8.],
- [0., 90.],
- [0., 180.],
- [-2., 2.],
- [-2., 2.]]
+.. code-block:: python
- ndim = len(p_ranges) # number of dimensions
- nwalkers = 40 # number of walkers
+ ##### radial grid parameters, fixed
+ Rmin = 1e-4 # arcsec
+ dR = 0.005 # arcsec
+ nR = 2000
- nthreads = 4 # CPU threads that emcee should use
+ ##### convert it to use it with galario.double.chi2Profile
+ dR *= arcsec
+ Rmin*=arcsec
- sampler = EnsembleSampler(nwalkers, ndim, lnpostfn,
- args=[p_ranges, Rmin, dR, nR, nxy, dxy, u, v, Re, Im, w],
- threads=nthreads)
+ ##### Define a mesh for the space
+ R = np.linspace(Rmin, Rmin + dR*nR, nR, endpoint=False)
- where:
+Defining the mesh out of the functions, as a global constant, makes the computation faster for larger examples. Yet you might need to pass it as an argument, in which case you should refer to the documentation of `emcee `_.
- - `p_ranges` is a rectangular domain in the parameter space that defines the search region;
- - `lnpostfn` is the posterior probability function;
- - `args` defines an array of fixed parameters that `lnpostfn` takes additionally in input.
+4) Define the brightness model
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-**5) Define the posterior and the prior probability functions**
- Let us now implement the posterior function, using |galario| to compute the :math:`\chi^2`. Since in this example
- we are assuming an axisymmetric brightness profile we will use the `chi2Profile` function, but the same design holds
- for the `chi2Image` function that should be used for non-axisymmetric profiles.
+Let us define the model: for this example, we will use a very simple Gaussian profile:
- .. code-block:: python
+.. code-block:: python
- from galario import deg, arcsec
- from galario.double import chi2Profile
+ ##### Define a gaussian profile
+ def GaussianProfile(f0, sigma):
+ """ Gaussian brightness profile.
+ """
+ return( f0 * np.exp(-(0.5/(sigma**2.))*(R**2.) ))
- def lnpostfn(p, p_ranges, Rmin, dR, nR, nxy, dxy, u, v, Re, Im, w):
- """ Log of posterior probability function """
+``f0`` (Jy/sr) is a normalization, ``sigma`` is the width of the Gaussian, and ``R`` is the globaly defined mesh.
- lnprior = lnpriorfn(p, p_ranges) # apply prior
- if not np.isfinite(lnprior):
- return -np.inf
+5) Setup the MCMC Ensemble Sampler
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- # unpack the parameters
- f0, sigma, inc, PA, dRA, dDec = p
+In our fit we will have 6 free parameters: on top of the model parameters ``f0`` and ``sigma`` we want to fit the inclination ``inc``, the position angle ``PA``, and the angular offsets (\ ``dRA`` and\ ``dDec``\ ) with respect to the phase center. Following the notation of the `emcee `_ documentation, we initialise the EnsembleSampler.
- f0 = 10.**f0 # convert from log to real space
+``p_range`` is a rectangular domain in the parameter space that defines the search region.
- # convert to radians
- sigma *= arcsec
- Rmin *= arcsec
- dR *= arcsec
- inc *= deg
- PA *= deg
- dRA *= arcsec
- dDec *= arcsec
+.. code-block:: python
- # compute the model brightness profile
- f = GaussianProfile(f0, sigma, Rmin, dR, nR)
+ ##### Initialise the "first guess"
+ p0 = np.array([10., 0.5, 70., 60., 0.1, 0.1]) # 2 parameters for the model + 4 (inc, PA, dRA, dDec)
- chi2 = chi2Profile(f, Rmin, dR, nxy, dxy, u, v, Re, Im, w,
- inc=inc, PA=PA, dRA=dRA, dDec=dDec)
+ ##### parameter space domain: the parameters can't go out of these
+ p_range = np.array([[1., 20.], #f0
+ [0., 8.], #sigma
+ [0., 90.], #inc
+ [0., 180.], #pa
+ [-2., 2.], #dra
+ [-2., 2.]]) #ddec
- return -0.5 * chi2 + lnprior
+ ##### define emcee parameters
+ ndim = len(p_range) # number of parameters to fit
+ nwalkers = 40 # number of walkers (at least twice ndim)
+ nthreads = 4 # CPU threads that emcee should use
+ iterations = 3000 # total number of MCMC steps
- where the normalization `f0` is explored in the logarithmic space to achieve a faster convergence and `lnpriorfn`
- is the prior probability function defined as a uniform prior:
+ ##### initialize the walkers with an ndim-dimensional ball
+ pos = np.array([(1. + 1e-4 * np.random.random(ndim)) * p0 for i in range(nwalkers)])
- .. code-block:: python
+6) Define the posterior and the prior probability functions
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- def lnpriorfn(p, par_ranges):
- """ Uniform prior probability function """
+We now need to define a likelyhood for our model, a way to evaluate how close to the data it is. For that, we implement the posterior function, using galario to compute the :math:`\chi^2`.
- for i in range(len(p)):
- if p[i] < par_ranges[i][0] or p[i] > par_ranges[i][1]:
- return -np.inf
+Since in this example we are assuming an axisymmetric brightness profile we will use the ``chi2Profile`` function, but the same design holds for the ``chi2Image`` function that should be used for non-axisymmetric profiles.
- jacob = -p[0] # jacobian of the log transformation
+First we need to ensure we stay in the boundaries we fixed.
- return jacob
+.. code-block:: python
- which, up to a constant, basically checks that `p` lies inside the rectangular domain defined by the extents in `p_ranges`.
+ def lnpriorfn(p):
+ # if we are out of range
+ if np.any(pp_range[:,1]):
+ return(-np.inf)
+ return(0.)
-**6) Ready to go: run the MCMC!**
- We are now ready to start the MCMC:
+And then we implement the full cost function, using a conversion for the units of ``chi2Profile``\ , and a logarithmic value for ``f0`` as it speeds up the convergence.
- .. code-block:: python
+.. code-block:: python
- nsteps = 3000 # total number of MCMC steps
+ ##### Define a conversion to translate the data for galario.double.chi2Profile
+ def convertp(p):
+ f0, sigma, inc, PA, dRA, dDec = p
+ return(10.**f0, sigma*arcsec, inc*deg, PA*deg, dRA*arcsec, dDec*arcsec)
- # initial guess for the parameters
- p0 = [10, 0.5, 70., 60., 0., 0.] # 3 parameters for the model + 4 (inc, PA, dRA, dDec)
+ ##### Define the cost
+ def lnpostfn(p):
+ """ Log of posterior probability function """
+ # test if we are in the boundaries
+ lnp = lnpriorfn(p)
+ if not np.isfinite(lnp):
+ return -np.inf
+ # unpack the parameters
+ f0, sigma, inc, PA, dRA, dDec = convertp(p)
+ # compute the model brightness profile
+ f = GaussianProfile(f0, sigma)
+ # compute the cost
+ chi2 = chi2Profile(f, Rmin, dR, nxy, dxy, u, v, Re, Im, w, inc=inc, PA=PA, dRA=dRA, dDec=dDec)
+ return(-0.5 * chi2)
- # initialize the walkers with an ndim-dimensional Gaussian ball
- pos = [p0 + 1e-4*np.random.randn(ndim) for i in range(nwalkers)]
+7) Launching the MCMC process
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- # execute the MCMC
- pos, prob, state = sampler.run_mcmc(pos, nsteps, rstate0=state, lnprob0=prob)
+According to your version of emcee:
- It is possible to run the whole fit collecting the code blocks above into a single `quickstart.py` file and running `python quickstart.py`. For reference, using `nthreads=4`, the run takes approximately 5-8 mins on a laptop with an Intel i5 2.9GHz.
-**7) Plot the fit results**
+* Version 3 (with progress bar)
- Once the run has completed, we can inspect the fit results. We will produce two informative plots. First, the so called corner plot, which shows the 1D and 2D marginalised posterior distributions of the free parameters (bottom left figure). To produce this plot we use the `corner `_ package, which can be easily installed with `pip install corner`.
+.. code-block:: python
- .. code-block:: python
+ ##### execute the MCMC
+ with Pool(processes=nthreads) as pool:
+ sampler = EnsembleSampler(nwalkers, ndim, lnpostfn,pool=pool)
+ pos, prob, state = sampler.run_mcmc(pos, iterations, progress=True)
- # do the corner plot
- import corner
- samples = sampler.chain[:, -1000:, :].reshape((-1, ndim))
- fig = corner.corner(samples, labels=["$f_0$", "$\sigma$", r"$i$", r"PA", r"$\Delta$RA", r"$\Delta$Dec"],
- show_titles=True, quantiles=[0.16, 0.50, 0.84],
- label_kwargs={'labelpad':20, 'fontsize':0}, fontsize=8)
- fig.savefig("triangle_example.png")
+* Version 2 (conda's default)
- Second, the so called uv-plot which shows the comparison between the visibilities of the bestfit model and the observed ones (bottom right figure). To produce the uv-plot we use the `uvplot `_ package, which can be easily installed with `pip install uvplot`.
+.. code-block:: python
- .. code-block:: python
+ sampler = EnsembleSampler(nwalkers, ndim, lnpostfn,threads=nthreads)
+ pos, prob, state = sampler.run_mcmc(pos, iterations)
- # do the uv-plot
- # select the bestfit model (here, e.g., the model with median parameters)
- bestfit = [np.percentile(samples[:, i], 50) for i in range(ndim)]
+8) Plot the optimization
+^^^^^^^^^^^^^^^^^^^^^^^^
- f0, sigma, inc, PA, dRA, dDec = bestfit
+You can see the advancement of each parameter and check their convergence using these few lines.
- f0 = 10.**f0 # convert from log to real space
+.. code-block:: python
- # convert to radians
- sigma *= arcsec
- Rmin *= arcsec
- dR *= arcsec
- inc *= deg
- PA *= deg
- dRA *= arcsec
- dDec *= arcsec
+ samples = sampler.chain
- f = GaussianProfile(f0, sigma, Rmin, dR, nR)
+ ##### Get the shape of the plot
+ nwalkers,iterations,ndims = samples.shape
+ ncols = 2
+ nrows = 3
- # compute the visibilities of the bestfit model
- vis_mod = g_double.sampleProfile(f, Rmin, dR, nxy, dxy, u, v,
- inc=inc, PA=PA, dRA=dRA, dDec=dDec)
+ ##### labeling
+ labels=[r"$f_0$", r"$\sigma$", r"$Inc$", r"PA", r"$\Delta$RA", r"$\Delta$Dec"]
- from uvplot import UVTable
+ ##### Make a figure
+ fig, axes = plt.subplots(nrows=nrows,ncols=ncols, figsize=(15, 10), sharex=True)
+ for i in range(ndims):
+ ax = axes.flatten()[i]
+ _=ax.plot(np.transpose(samples[:, :, i]), "k", alpha=0.3)
+ _=ax.set_xlim(0, iterations)
+ _=ax.set_ylabel(labels[i])
+ # _=ax.yaxis.set_label_coords(-0.1, 0.5)
+ # _=ax.plot([0,iterations],[p_range[i,0],p_range[i,0]])
+ # _=ax.plot([0,iterations],[p_range[i,1],p_range[i,1]])
- uvbin_size = 30e3 # uv-distance bin, units: wle
+ _=ax.set_xlabel('iterations')
+ plt.tight_layout()
+ plt.show()
- # observations uv-plot
- uv = UVTable(uvtable=[u*wle, v*wle, Re, Im, w], wle=wle)
- uv.apply_phase(-dRA, -dDec) # center the source on the phase center
- uv.deproject(inc, PA)
- axes = uv.plot(linestyle='.', color='k', label='Data', uvbin_size=uvbin_size)
- # model uv-plot
- uv_mod = UVTable(uvtable=[u*wle, v*wle, vis_mod.real, vis_mod.imag, w], wle=wle)
- uv_mod.apply_phase(-dRA, -dDec) # center the source on the phase center
- uv_mod.deproject(inc, PA)
- uv_mod.plot(axes=axes, linestyle='-', color='r', label='Model', yerr=False, uvbin_size=uvbin_size)
+.. image:: images/advancingplot.jpg
+ :scale: 90 %
+ :alt: Evolution of the emcee parameters
+ :align: center
- axes[0].figure.savefig("uvplot_example.pdf")
+It is possible to run the whole fit collecting the code blocks above into a single ``quickstart.py`` file and running ``python quickstart.py``. For reference, using ``nthreads=4``\ , the run takes approximately 5 minutes on a laptop with an Intel Core i5 @ 2.9GHz.
- +-------------------------------------------------------+-----------------------------------------------+
- |.. image:: images/quickstart_triangle_whole_chain.png | .. image:: images/uvplot.png |
- | :width: 80% | :width: 98% |
- | :alt: Chains | :alt: Chains |
- +-------------------------------------------------------+-----------------------------------------------+
- | Corner plot showing the marginalised posteriors | Uv-plot showing the deprojected visibilities |
- +-------------------------------------------------------+-----------------------------------------------+
+9) Plot the fit results
+^^^^^^^^^^^^^^^^^^^^^^^
-**7) CPU vs GPU execution**
- So far we have run |galario| on the CPU. Running it on a GPU can be done by just changing the import at the beginning:
+You now can plot the corelation between each parameter, using a corner plot.
- .. code-block:: python
+.. code-block:: python
- from galario import double_cuda as g_double
+ ##### Reshape on the converged zone
+ cornering=(samples[:,-1000:,:].reshape((-1,ndims)))
- All the rest of the code remains the same!
+ ##### plot
+ fig = corner.corner(cornering,
+ quantiles=[0.16, 0.50, 0.84],
+ labels=labels,
+ show_titles=True,
+ label_kwargs={'labelpad':20, 'fontsize':0},
+ fontsize=8)
- For more details on the GPU vs CPU execution, see the :ref:`Cookbook `.
\ No newline at end of file
+ fig.show()
From 37e5a0dde08e87b8b28bd85429d3688102a52cf0 Mon Sep 17 00:00:00 2001
From: YohannFaure <39982595+YohannFaure@users.noreply.github.com>
Date: Thu, 6 Jun 2019 11:20:41 -0400
Subject: [PATCH 2/3] Add image for the doc
---
docs/images/advancingplot.jpg | Bin 0 -> 970659 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 docs/images/advancingplot.jpg
diff --git a/docs/images/advancingplot.jpg b/docs/images/advancingplot.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ec740e4eddb7855b3cb252d9269cacc24cbd423f
GIT binary patch
literal 970659
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