import%20marimo%0A%0A__generated_with%20%3D%20%220.23.16%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0Aasync%20with%20app.setup(hide_code%3DTrue)%3A%0A%20%20%20%20%23%20Setup%20cell%20for%20marimo%20notebook%2C%20can%20be%20ignored%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20sys%0A%0A%20%20%20%20%23%20Import%20packages%20if%20running%20on%20marimo%20playground%0A%20%20%20%20if%20sys.executable%20%3D%3D%20%22%2Fhome%2Fpyodide%2Fthis.program%22%3A%0A%20%20%20%20%20%20%20%20import%20micropip%0A%0A%20%20%20%20%20%20%20%20await%20micropip.install(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22pint_pandas%3C%3D0.7%22%2C%20%22typing_extensions%3E%3D4.15.0%22%2C%20%22simbio%3E%3D1.1.0%22%2C%20%22matplotlib%22%5D%2C%20verbose%20%3D%20False%0A%20%20%20%20%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20Using%20volume%20in%20simbio%0A%20%20%20%20Simbio%20has%20the%20ability%20to%20keep%20track%20of%20a%20model's%20volume%20and%20whether%20variables%20represent%20concentrations%20or%20absolute%20amounts%2C%20varying%20equations%20accordingly.%20To%20use%20it%20we%20create%20a%20%60Compartment%60%2C%20which%20is%20similar%20to%20a%20%60System%60%20but%20it%20reacts%20to%20volume%2C%20and%20use%20%60Species%60%20instead%20of%20%60Variable%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20from%20simbio%20import%20Compartment%2C%20System%2C%20Parameter%2C%20Species%2C%20RateLaw%2C%20MassAction%2C%20AbsoluteRateLaw%2C%20Simulator%2C%20Constant%2C%20assign%2C%20amount%2C%20concentration%2C%20volume%2C%20Volume%0A%0A%0A%20%20%20%20import%20pint%20%0A%20%20%20%20u%20%3D%20pint.UnitRegistry()%0A%0A%20%20%20%20class%20Model(Compartment)%3A%0A%20%20%20%20%20%20%20%20V%3A%20Volume%20%3D%20volume(default%3D2%20*%20u.L)%20%23%20add%20volume%20to%20the%20compartment%0A%20%20%20%20%20%20%20%20A%3A%20Species%20%3D%20concentration(default%3D2%20*%20u.mol%2Fu.L)%20%23%20create%20Species%20A%20wich%20represents%20concentration%0A%20%20%20%20%20%20%20%20B%3A%20Species%20%3D%20amount(default%3D3%20*%20u.mol)%20%23%20create%20Species%20B%20wich%20represents%20absolute%20amount%0A%20%20%20%20%20%20%20%20AB%3A%20Species%20%3D%20concentration(default%3D0*%20u.mol%2Fu.L)%20%23%20create%20Species%20AB%20wich%20represents%20concentration%0A%0A%0A%20%20%20%20%20%20%20%20r1%20%3D%20RateLaw(reactants%20%3D%20%5B2*A%2C%20B%5D%2C%20products%20%3D%20%5BAB%5D%2C%20rate_law%20%3D%200.1*u.mol%2Fu.L%2Fu.s)%20%23%202*A%20-%3E%20B%20at%20constant%20rate%0A%20%20%20%20%20%20%20%20r2%20%3D%20MassAction(reactants%20%3D%20%5B2*A%2C%20B%5D%2C%20products%20%3D%20%5BAB%5D%2C%20rate%20%3D%200.2*u.mol%2Fu.L%2Fu.s%20*%20(u.mol%2Fu.L)**-3)%20%23%202*A%20-%3E%20B%20at%20mass%20action%20rate%0A%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20AbsoluteRateLaw%2C%0A%20%20%20%20%20%20%20%20Compartment%2C%0A%20%20%20%20%20%20%20%20Constant%2C%0A%20%20%20%20%20%20%20%20MassAction%2C%0A%20%20%20%20%20%20%20%20Model%2C%0A%20%20%20%20%20%20%20%20Parameter%2C%0A%20%20%20%20%20%20%20%20Simulator%2C%0A%20%20%20%20%20%20%20%20Species%2C%0A%20%20%20%20%20%20%20%20Volume%2C%0A%20%20%20%20%20%20%20%20amount%2C%0A%20%20%20%20%20%20%20%20assign%2C%0A%20%20%20%20%20%20%20%20concentration%2C%0A%20%20%20%20%20%20%20%20np%2C%0A%20%20%20%20%20%20%20%20u%2C%0A%20%20%20%20%20%20%20%20volume%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Let's%20unpack%20all%20this%3A%20we%20created%20a%20%60Compartment%60%20called%20model%20and%20assinged%20to%20it%20a%20%60Volume%60%20named%20%60V%60.%20Inside%20%60Model%60%20we%20have%203%20species%3A%20%60A%60%20and%20%60AB%60%2C%20which%20represent%20concentrations%2C%20and%20%60B%60%20which%20represents%20an%20absolute%20amount%3B%20their%20units%20are%20set%20accordingly.%20When%20we%20create%20the%20%60RateLaw%60%20simbio%20will%20take%20this%20into%20account%2C%20so%20the%20equations%20equivalent%20to%20r1%20would%20be%3A%0A%20%20%20%20%24%24%5Cfrac%7BdA%7D%7Bdt%7D%20%3D%20-2%20%24%24%0A%20%20%20%20%24%24%5Cfrac%7BdB%7D%7Bdt%7D%20%3D%20%20-2V%24%24%0A%20%20%20%20%24%24%5Cfrac%7BdAB%7D%7Bdt%7D%20%3D%20%202%24%24%0A%0A%20%20%20%20%60RateLaw%60%20acts%20on%20concentrations%20by%20default%2C%20but%20%60B%60%20represents%20the%20absolute%20amount%2C%20so%20to%20accomplish%20a%20change%20of%202%20mol%2FL%20to%20the%20conentration%20we%20need%20to%20change%20the%20amount%20by%202%20mol%2FL%20%24V%24.%20The%20%60MassAction%60%20reaction%20r2%20represents%20the%20equations%3A%0A%20%20%20%20%24%24%5Cfrac%7BdA%7D%7Bdt%7D%20%3D%20-3%20A%5E2%20%5Cfrac%7BB%7D%7BV%7D%20%24%24%0A%20%20%20%20%24%24%5Cfrac%7BdB%7D%7Bdt%7D%20%3D%20-%203%20A%5E2%20%5Cfrac%7BB%7D%7BV%7D%20V%20%24%24%0A%20%20%20%20%24%24%5Cfrac%7BdAB%7D%7Bdt%7D%20%3D%203%20A%5E2%20%5Cfrac%7BB%7D%7BV%7D%20%24%24%0A%20%20%20%20Since%20%60B%60%20is%20an%20absolute%20amount%2C%20to%20get%20the%20concentration%20for%20the%20mass%20action%20law%20we%20must%20divide%20by%20the%20volume%2C%20and%20in%20the%20second%20equation%20we%20must%20again%20multiply%20by%20%24V%24%20to%20represent%20the%20change%20in%20amount.%20This%20example%20uses%20units%20via%20%5B%60pint%60%5D(https%3A%2F%2Fgithub.com%2Fhgrecco%2Fpint)%20to%20make%20the%20difference%20between%20concentrations%20and%20amounts%20clearer%2C%20but%20it's%20not%20necessary.%0A%0A%20%20%20%20Simulation%20for%20Compartments%20is%20identical%20to%20systems%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Model%2C%20Simulator%2C%20np)%3A%0A%20%20%20%20sim%20%3D%20Simulator(Model)%0A%20%20%20%20sim.solve(save_at%3Dnp.linspace(1%2C5%2C%2050)).to_dataframe().plot()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20Absolute%20rate%20laws%0A%20%20%20%20To%20create%20reactions%20that%20act%20directly%20on%20concentrations%20we%20can%20create%20an%20%60AbsoluteRateLaw%60%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20AbsoluteRateLaw%2C%0A%20%20%20%20Compartment%2C%0A%20%20%20%20Species%2C%0A%20%20%20%20Volume%2C%0A%20%20%20%20amount%2C%0A%20%20%20%20concentration%2C%0A%20%20%20%20u%2C%0A%20%20%20%20volume%2C%0A)%3A%0A%20%20%20%20class%20Model2(Compartment)%3A%0A%20%20%20%20%20%20%20%20V%3A%20Volume%20%3D%20volume(default%3D2%20*%20u.L)%20%23%20add%20volume%20to%20the%20compartment%0A%20%20%20%20%20%20%20%20A%3A%20Species%20%3D%20concentration(default%3D2%20*%20u.mol%2Fu.L)%20%23%20create%20Species%20A%20wich%20represents%20concentration%0A%20%20%20%20%20%20%20%20B%3A%20Species%20%3D%20amount(default%3D3%20*%20u.mol)%20%23%20create%20Species%20B%20wich%20represents%20absolute%20amount%0A%20%20%20%20%20%20%20%20AB%3A%20Species%20%3D%20concentration(default%3D0*%20u.mol%2Fu.L)%20%23%20create%20Species%20AB%20wich%20represents%20concentration%0A%0A%0A%20%20%20%20%20%20%20%20r1%20%3D%20AbsoluteRateLaw(reactants%20%3D%20%5B2*A%2C%20B%5D%2C%20products%20%3D%20%5BAB%5D%2C%20rate_law%20%3D%200.1*u.mol%2Fu.s)%20%23%202*A%20-%3E%20B%20at%20constant%20rate%0A%0A%20%20%20%20return%20(Model2%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20In%20this%20case%20r1%20represents%20the%20equations%3A%0A%20%20%20%20%24%24%5Cfrac%7BdA%7D%7Bdt%7D%20%3D%20-2%2FV%20%24%24%0A%20%20%20%20%24%24%5Cfrac%7BdB%7D%7Bdt%7D%20%3D%20%20-2%24%24%0A%20%20%20%20%24%24%5Cfrac%7BdAB%7D%7Bdt%7D%20%3D%20%202%2FV%24%24%0A%20%20%20%20since%20absolute%20rate%20laws%20work%20on%20absolute%20amounts%2C%20we%20now%20have%20to%20divide%20by%20%24V%24%20in%20the%20equations%20for%20%60A%60%20and%20%60AB%60%20to%20represent%20the%20changes%20in%20concentration.%20Once%20again%20simulation%20works%20as%20normal%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Model2%2C%20Simulator%2C%20np)%3A%0A%20%20%20%20sim_2%20%3D%20Simulator(Model2)%0A%20%20%20%20sim_2.solve(save_at%3Dnp.linspace(1%2C5%2C%2050)).to_dataframe().plot()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20Dynamic%20volume%0A%20%20%20%20%60Volume%60%20is%20a%20variable%20like%20any%20other%2C%20so%20we%20can%20give%20it%20equations%20to%20represent%20its%20change.%20We%20can%20represent%20a%20%60compartment%60%20expanding%20linearly%20with%20time%20as%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20Compartment%2C%0A%20%20%20%20MassAction%2C%0A%20%20%20%20Parameter%2C%0A%20%20%20%20Simulator%2C%0A%20%20%20%20Species%2C%0A%20%20%20%20Volume%2C%0A%20%20%20%20amount%2C%0A%20%20%20%20assign%2C%0A%20%20%20%20np%2C%0A%20%20%20%20u%2C%0A%20%20%20%20volume%2C%0A)%3A%0A%20%20%20%20class%20Model3(Compartment)%3A%0A%20%20%20%20%20%20%20%20V%3A%20Volume%20%3D%20volume(default%3D2%20*%20u.L)%20%23%20add%20volume%20to%20the%20compartment%0A%20%20%20%20%20%20%20%20A%3A%20Species%20%3D%20amount(default%3D2%20*%20u.mol)%20%23%20create%20Species%20A%20wich%20represents%20absolute%20amount%0A%20%20%20%20%20%20%20%20B%3A%20Species%20%3D%20amount(default%3D3%20*%20u.mol)%20%23%20create%20Species%20B%20wich%20represents%20absolute%20amount%0A%20%20%20%20%20%20%20%20AB%3A%20Species%20%3D%20amount(default%3D0*%20u.mol)%20%23%20create%20Species%20AB%20wich%20represents%20absolute%20amount%0A%20%20%20%20%20%20%20%20expansion_rate%3A%20Parameter%20%3D%20assign(default%20%3D%200.1%20*%20u.L%2Fu.s)%0A%0A%20%20%20%20%20%20%20%20r2%20%3D%20MassAction(reactants%20%3D%20%5B2*A%2C%20B%5D%2C%20products%20%3D%20%5BAB%5D%2C%20rate%20%3D%200.2*u.mol%2Fu.L%2Fu.s%20*%20(u.mol%2Fu.L)**-3)%20%23%202*A%20-%3E%20B%20at%20mass%20action%20rate%0A%20%20%20%20%20%20%20%20v_eq%20%3D%20V.derive()%20%3C%3C%20expansion_rate%20%23%20V'%20%3D%201%20%0A%20%20%20%20sim_3%20%3D%20Simulator(Model3)%0A%20%20%20%20sim_3.solve(save_at%3Dnp.linspace(0%2C5%2C50)).to_dataframe().plot()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Note%20that%20if%20a%20%60Species%60%20represents%20a%20conencentration%20in%20a%20comparment%20with%20changing%20volume%20it%20will%2C%20ignoring%20the%20reactions%2C%20stay%20constant%20as%20volume%20expands%2C%20resulting%20in%20an%20effective%20creation%20of%20the%20substance.%20%20So%20unless%20this%20is%20the%20intended%20behaviour%20(such%20as%20a%20comparment%20expanding%20into%20a%20medium%20with%20a%20constant%20conenctration%20of%20a%20certain%20substance)%20it%20is%20not%20recommneded.%20If%20it%20is%20still%20desierd%20to%20input%20and%20output%20concentrations%20we%20can%20use%20%60Constant%60%20to%20jointly%20set%20inital%20conditions%20and%20transform%20to%20divide%20the%20output%20by%20volume%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20Compartment%2C%0A%20%20%20%20Constant%2C%0A%20%20%20%20MassAction%2C%0A%20%20%20%20Parameter%2C%0A%20%20%20%20Simulator%2C%0A%20%20%20%20Species%2C%0A%20%20%20%20Volume%2C%0A%20%20%20%20amount%2C%0A%20%20%20%20assign%2C%0A%20%20%20%20np%2C%0A%20%20%20%20u%2C%0A%20%20%20%20volume%2C%0A)%3A%0A%20%20%20%20class%20Model4(Compartment)%3A%0A%20%20%20%20%20%20%20%20V_0%3A%20Constant%20%3D%20assign(default%3D2%20*%20u.L%2C%20constant%3DTrue)%0A%20%20%20%20%20%20%20%20V%3A%20Volume%20%3D%20volume(default%3D2%20*%20u.L)%20%23%20add%20volume%20to%20the%20compartment%0A%20%20%20%20%20%20%20%20A%3A%20Species%20%3D%20amount(default%3D2%20*%20u.mol%2Fu.L%20*%20V_0)%20%23%20create%20Species%20A%20%0A%20%20%20%20%20%20%20%20B%3A%20Species%20%3D%20amount(default%3D3%20*%20u.mol)%20%23%20create%20Species%20B%20%0A%20%20%20%20%20%20%20%20AB%3A%20Species%20%3D%20amount(default%3D0*%20u.mol%2Fu.L%20*%20V_0)%20%23%20create%20Species%20AB%20%0A%20%20%20%20%20%20%20%20expansion_rate%3A%20Parameter%20%3D%20assign(default%20%3D%200.1%20*%20u.L%2Fu.s)%0A%0A%20%20%20%20%20%20%20%20r2%20%3D%20MassAction(reactants%20%3D%20%5B2*A%2C%20B%5D%2C%20products%20%3D%20%5BAB%5D%2C%20rate%20%3D%200.2*u.mol%2Fu.L%2Fu.s%20*%20(u.mol%2Fu.L)**-3)%20%23%202*A%20-%3E%20B%20at%20mass%20action%20rate%0A%20%20%20%20%20%20%20%20v_eq%20%3D%20V.derive()%20%3C%3C%20expansion_rate%20%23%20V'%20%3D%201%0A%20%20%20%20sim_4%20%3D%20Simulator(Model4%2C%20transform%20%3D%20%7B%22A%22%3A%20Model4.A%2FModel4.V%2C%20%22B%22%3A%20Model4.B%2C%20%22AB%22%3A%20Model4.AB%2FModel4.V%2C%20%22V%22%3A%20Model4.V%20%7D)%0A%20%20%20%20sim_4.solve(save_at%3Dnp.linspace(0%2C5%2C50)).to_dataframe().plot()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20Compartments%20and%20composition%0A%0A%20%20%20%20%20Poincare%20and%20simbio%20allow%20for%20the%20composition%20fo%20smaller%20models%20to%20make%20more%20complex%20ones%3B%20to%20learn%20more%20about%20this%20see%20the%20correspoinding%20tutorial%20in%20%5Bpoincare's%20documentation%5D(https%3A%2F%2Fdyscolab.github.io%2Fpoincare%2F).%20A%20%60Compartment%60%20can%20be%20composed%20into%20other%20models%2C%20but%20it%20has%20its%20quirks.%20%60System%60%20can%20represent%20either%20a%20logical%20units%2C%20when%20external%20variables%20are%20passed%20to%20it%20and%20it%20is%20used%20to%20assign%20interactions%20to%20them%2C%20or%20a%20physical%20units%2C%20when%20it%20is%20instantiated%20without%20external%20variables%20and%20let%20to%20it%20create%20its%20own.%20Since%20compartments%20are%20meant%20to%20represent%20physical%20compartments%20with%20a%20volume%20and%20a%20certain%20amount%20or%20concentration%20of%20different%20species%20it%20only%20ever%20makes%20sense%20to%20instantiate%20them%20as%20physiscal%20units.%20To%20ensure%20this%20the%20linking%20of%20internal%20%60Species%60%20or%20%60Volume%60%20to%20external%20%60Species%60%20or%20%60Volume%60%20is%20disallowed%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Compartment%2C%20Species%2C%20Volume%2C%20amount%2C%20volume)%3A%0A%20%20%20%20class%20Internal(Compartment)%3A%0A%20%20%20%20%20%20%20%20V%3A%20Volume%20%3D%20volume(default%3D1)%0A%20%20%20%20%20%20%20%20A%3A%20Species%20%3D%20amount(default%3D1)%0A%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20class%20External(Compartment)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20V%3A%20Volume%20%3D%20volume(default%3D1)%0A%20%20%20%20%20%20%20%20%20%20%20%20ext_A%3A%20Species%20%3D%20amount(default%3D1)%0A%20%20%20%20%20%20%20%20%20%20%20%20int%20%3D%20Internal(A%20%3D%20ext_A)%0A%20%20%20%20except%20TypeError%20as%20err%3A%0A%20%20%20%20%20%20%20%20print(%22TypeError%3A%20%22%2C%20err)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20This%20also%20prevents%20ambiguity%3A%20it's%20wouldn't%20be%20clear%20in%20a%20reaction%20wether%20%60A%60%20should%20use%20Internal's%20or%20External's%20volume.%20The%20passing%20of%20regular%20%60Parameters%60%20and%20%60Variables%60%20is%20allowed%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20Compartment%2C%0A%20%20%20%20Parameter%2C%0A%20%20%20%20Simulator%2C%0A%20%20%20%20Species%2C%0A%20%20%20%20Volume%2C%0A%20%20%20%20amount%2C%0A%20%20%20%20assign%2C%0A%20%20%20%20np%2C%0A%20%20%20%20volume%2C%0A)%3A%0A%20%20%20%20from%20simbio.reactions%20import%20Destruction%0A%0A%20%20%20%20class%20Internal2(Compartment)%3A%0A%20%20%20%20%20%20%20%20V%3A%20Volume%20%3D%20volume(default%3D1)%0A%20%20%20%20%20%20%20%20A%3A%20Species%20%3D%20amount(default%3D20)%0A%20%20%20%20%20%20%20%20T%3A%20Parameter%20%3D%20assign(default%3D25)%0A%0A%20%20%20%20%20%20%20%20r%20%3D%20Destruction(A%3D%20A%2C%20rate%20%3D%200.01*T)%0A%0A%20%20%20%20class%20External2(Compartment)%3A%0A%20%20%20%20%20%20%20%20V%3A%20Volume%20%3D%20volume(default%3D1)%0A%20%20%20%20%20%20%20%20ext_T%3A%20Parameter%20%3D%20assign(default%3D25)%0A%0A%20%20%20%20%20%20%20%20int%20%3D%20Internal2(T%20%3D%20ext_T)%0A%0A%20%20%20%20sim_5%20%3D%20Simulator(External2)%0A%20%20%20%20sim_5.solve(save_at%3Dnp.linspace(0%2C5%2C50)).to_dataframe().plot()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20In%20this%20case%20%60A%60%20is%20destroyed%20at%20a%20rate%20proportional%20to%20temperatre%2C%20and%20to%20ensure%20uniform%20temperature%20across%20the%20entire%20system%20we%20can%20link%20the%20internal%20temperature%20%60T%60%20to%20the%20external%20temperature%20%60ext_T%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
7b8c41c09a0065fbe002be299692344b