Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [egit-dev] Hang during "replace with"

... so much for „attached“... ;) Here it is, this time for real.

 

Von: egit-dev-bounces@xxxxxxxxxxx [mailto:egit-dev-bounces@xxxxxxxxxxx] Im Auftrag von Duft Markus
Gesendet: Freitag, 23. Januar 2015 11:03
An: EGit developer discussion (egit-dev@xxxxxxxxxxx)
Betreff: [egit-dev] Hang during "replace with"

 

Hey,

 

I just got a report from a colleague that tried to use “Replace with HEAD revision” on a single file. Eclipse froze for multiple minutes. He created a stack dump (attached). The main thread is busy walking the repo:

 

"main" prio=10 tid=0x00007ffd78024000 nid=0x847 runnable [0x00007ffd7f6d5000]

   java.lang.Thread.State: RUNNABLE

                at org.eclipse.jgit.treewalk.CanonicalTreeParser.parseEntry(CanonicalTreeParser.java:359)

                at org.eclipse.jgit.treewalk.CanonicalTreeParser.next(CanonicalTreeParser.java:283)

                at org.eclipse.jgit.treewalk.AbstractTreeIterator.skip(AbstractTreeIterator.java:636)

                at org.eclipse.jgit.treewalk.TreeWalk.skipEntriesEqual(TreeWalk.java:964)

                at org.eclipse.jgit.treewalk.TreeWalk.next(TreeWalk.java:561)

                at org.eclipse.jgit.revwalk.TreeRevFilter.include(TreeRevFilter.java:196)

                at org.eclipse.jgit.revwalk.PendingGenerator.next(PendingGenerator.java:141)

                at org.eclipse.jgit.revwalk.BlockRevQueue.<init>(BlockRevQueue.java:65)

                at org.eclipse.jgit.revwalk.FIFORevQueue.<init>(FIFORevQueue.java:64)

                at org.eclipse.jgit.revwalk.StartGenerator.next(StartGenerator.java:162)

                at org.eclipse.jgit.revwalk.RevWalk.next(RevWalk.java:422)

                at org.eclipse.egit.ui.internal.CompareUtils.getHeadTypedElement(CompareUtils.java:845)

                at org.eclipse.egit.ui.internal.CompareUtils.prepareCompareInput(CompareUtils.java:516)

                at org.eclipse.egit.ui.internal.CompareUtils.compareWorkspaceWithRef(CompareUtils.java:456)

                at org.eclipse.egit.ui.internal.CompareUtils.compare(CompareUtils.java:581)

                at org.eclipse.egit.ui.internal.actions.CompareWithHeadActionHandler.execute(CompareWithHeadActionHandler.java:41)

                at org.eclipse.egit.ui.internal.actions.RepositoryAction.run(RepositoryAction.java:77)

                at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)

                at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)

 

Is this supposed to run in the UI thread? Is there a reason for it being so slow? This does definitely /not/ happen always. It’s just here and there a few of the times.

 

Cheers, Thanks,

Markus

 

--

Mit freundlichen Grüßen / Best regards

 

Markus Duft | Software Architect

SSI SCHÄFER | Salomon Automation GmbH | Friesachstraße 15 | 8114 Friesach bei Graz | Austria

Phone +43 3127 200-575 | Fax +43 3127 200-22

markus.duft@xxxxxxxxxxxxxxxx

Website | Blog | YouTube | Facebook

 

Salomon Automation GmbH | Friesachstrasse 15 | 8114 Friesach bei Graz | Austria
Registered Office: Friesach bei Graz | Commercial Register: 49324 K | VAT no. ATU28654300
Commercial Court: Landesgericht für Zivilrechtssachen Graz

Salomon Automation GmbH | Friesachstrasse 15 | 8114 Friesach bei Graz | Austria
Registered Office: Friesach bei Graz | Commercial Register: 49324 K | VAT no. ATU28654300
Commercial Court: Landesgericht für Zivilrechtssachen Graz
2015-01-23 10:48:25
Full thread dump OpenJDK 64-Bit Server VM (24.65-b04 mixed mode):

"Attach Listener" daemon prio=10 tid=0x00007ffd30002000 nid=0x285b waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=10 tid=0x00007ffd7a9ec000 nid=0x27e4 in Object.wait() [0x00007ffd6d6e7000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:179)
	- locked <0x00000007b18aff48> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"Worker-28" prio=10 tid=0x00007ffc3404b800 nid=0x2786 in Object.wait() [0x00007ffd6d8e9000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188)
	- locked <0x000000078187abc0> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50)

"org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=10 tid=0x00007ffd7a479000 nid=0xe1e in Object.wait() [0x00007ffd573e8000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:179)
	- locked <0x000000079e02dfd0> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"Worker-19" prio=10 tid=0x00007ffcb0001000 nid=0xbf2 in Object.wait() [0x00007ffd65bfb000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188)
	- locked <0x000000078187abc0> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50)

"Worker-16" prio=10 tid=0x00007ffc94003800 nid=0xa9f in Object.wait() [0x00007ffd641f6000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.ui.internal.Semaphore.acquire(Semaphore.java:43)
	- locked <0x00000007b369ee98> (a org.eclipse.ui.internal.Semaphore)
	at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:168)
	at org.eclipse.swt.widgets.Display.syncExec(Display.java:4491)
	at org.eclipse.egit.ui.Activator.isActive(Activator.java:245)
	at org.eclipse.egit.ui.Activator$RepositoryChangeScanner.run(Activator.java:472)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

"Connect thread wamas5.sources.salomon.at session" prio=10 tid=0x00007ffca8018000 nid=0x8e1 runnable [0x00007ffd65950000]
   java.lang.Thread.State: RUNNABLE
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(SocketInputStream.java:152)
	at java.net.SocketInputStream.read(SocketInputStream.java:122)
	at com.jcraft.jsch.IO.getByte(IO.java:82)
	at com.jcraft.jsch.Session.read(Session.java:908)
	at com.jcraft.jsch.Session.run(Session.java:1378)
	at java.lang.Thread.run(Thread.java:745)

"org.eclipse.jface.text.reconciler.MonoReconciler" daemon prio=10 tid=0x00007ffd79b49000 nid=0x87b in Object.wait() [0x00007ffd6e132000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:179)
	- locked <0x000000078a61e270> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"[ThreadPool Manager] - Idle Thread" daemon prio=10 tid=0x00007ffcfc00b800 nid=0x87a in Object.wait() [0x00007ffd579ee000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:503)
	at org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor.run(Executor.java:106)
	- locked <0x0000000787e665d0> (a org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor)

"com.google.inject.internal.util.$Finalizer" daemon prio=10 tid=0x00007ffcac16c800 nid=0x879 in Object.wait() [0x00007ffd57aef000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x0000000785d38990> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
	- locked <0x0000000785d38990> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
	at com.google.inject.internal.util.$Finalizer.run(Finalizer.java:114)

"com.jniwrapper.NativeResourceCollector" daemon prio=10 tid=0x00007ffca8072000 nid=0x876 in Object.wait() [0x00007ffd57bf0000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
	- locked <0x00000007837703c8> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
	at com.jniwrapper.a.run(SourceFile:160)

"Java indexing" daemon prio=10 tid=0x00007ffce8195000 nid=0x874 in Object.wait() [0x00007ffd57ffe000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:503)
	at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:382)
	- locked <0x0000000782c94648> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager)
	at java.lang.Thread.run(Thread.java:745)

"org.eclipse.jface.text.reconciler.MonoReconciler" daemon prio=10 tid=0x00007ffd7955e800 nid=0x86d in Object.wait() [0x00007ffd6d5e6000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:179)
	- locked <0x0000000782adbcb8> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"EMF Reference Cleaner" daemon prio=10 tid=0x00007ffd785dd800 nid=0x866 in Object.wait() [0x00007ffd6d4e5000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
	- locked <0x000000078212d4a8> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
	at org.eclipse.emf.common.util.CommonUtil$1ReferenceClearingQueuePollingThread.run(CommonUtil.java:70)

"Provisioning Event Dispatcher" daemon prio=10 tid=0x00007ffd0021d000 nid=0x863 in Object.wait() [0x00007ffd6d7e8000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x00000007819f4980> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at java.lang.Object.wait(Object.java:503)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400)
	- locked <0x00000007819f4980> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336)

"Worker-JM" prio=10 tid=0x00007ffd00286800 nid=0x861 in Object.wait() [0x00007ffd6daf4000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.core.internal.jobs.InternalWorker.run(InternalWorker.java:58)
	- locked <0x0000000781d94e28> (a java.util.ArrayList)

"[Timer] - Main Queue Handler" daemon prio=10 tid=0x00007ffd0018c800 nid=0x860 in Object.wait() [0x00007ffd6d9f3000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.equinox.internal.util.impl.tpt.timer.TimerImpl.run(TimerImpl.java:141)
	- locked <0x0000000781b0a150> (a java.lang.Object)
	at java.lang.Thread.run(Thread.java:745)

"Bundle File Closer" daemon prio=10 tid=0x00007ffd0042b800 nid=0x85d in Object.wait() [0x00007ffd6de2f000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:503)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400)
	- locked <0x0000000780cfbf78> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336)

"Start Level Event Dispatcher" daemon prio=10 tid=0x00007ffd78495800 nid=0x85b in Object.wait() [0x00007ffd6df30000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x0000000780a15c08> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at java.lang.Object.wait(Object.java:503)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400)
	- locked <0x0000000780a15c08> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336)

"Framework Event Dispatcher" daemon prio=10 tid=0x00007ffd78494800 nid=0x85a in Object.wait() [0x00007ffd6e031000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:503)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400)
	- locked <0x0000000780cfc160> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336)

"Framework Active Thread" prio=10 tid=0x00007ffd78442000 nid=0x858 in Object.wait() [0x00007ffd6e233000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.osgi.framework.internal.core.Framework.run(Framework.java:1862)
	- locked <0x000000078099ca80> (a org.eclipse.osgi.framework.internal.core.Framework)
	at java.lang.Thread.run(Thread.java:745)

"Service Thread" daemon prio=10 tid=0x00007ffd7821d800 nid=0x856 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" daemon prio=10 tid=0x00007ffd7821b000 nid=0x855 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" daemon prio=10 tid=0x00007ffd78218000 nid=0x854 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x00007ffd78215000 nid=0x853 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=10 tid=0x00007ffd781e7000 nid=0x852 in Object.wait() [0x00007ffd6fbfa000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
	- locked <0x0000000780c9b8d8> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

"Reference Handler" daemon prio=10 tid=0x00007ffd781e5000 nid=0x851 in Object.wait() [0x00007ffd6fcfb000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:503)
	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
	- locked <0x0000000780cec318> (a java.lang.ref.Reference$Lock)

"main" prio=10 tid=0x00007ffd78024000 nid=0x847 runnable [0x00007ffd7f6d5000]
   java.lang.Thread.State: RUNNABLE
	at org.eclipse.jgit.treewalk.CanonicalTreeParser.parseEntry(CanonicalTreeParser.java:359)
	at org.eclipse.jgit.treewalk.CanonicalTreeParser.next(CanonicalTreeParser.java:283)
	at org.eclipse.jgit.treewalk.AbstractTreeIterator.skip(AbstractTreeIterator.java:636)
	at org.eclipse.jgit.treewalk.TreeWalk.skipEntriesEqual(TreeWalk.java:964)
	at org.eclipse.jgit.treewalk.TreeWalk.next(TreeWalk.java:561)
	at org.eclipse.jgit.revwalk.TreeRevFilter.include(TreeRevFilter.java:196)
	at org.eclipse.jgit.revwalk.PendingGenerator.next(PendingGenerator.java:141)
	at org.eclipse.jgit.revwalk.BlockRevQueue.<init>(BlockRevQueue.java:65)
	at org.eclipse.jgit.revwalk.FIFORevQueue.<init>(FIFORevQueue.java:64)
	at org.eclipse.jgit.revwalk.StartGenerator.next(StartGenerator.java:162)
	at org.eclipse.jgit.revwalk.RevWalk.next(RevWalk.java:422)
	at org.eclipse.egit.ui.internal.CompareUtils.getHeadTypedElement(CompareUtils.java:845)
	at org.eclipse.egit.ui.internal.CompareUtils.prepareCompareInput(CompareUtils.java:516)
	at org.eclipse.egit.ui.internal.CompareUtils.compareWorkspaceWithRef(CompareUtils.java:456)
	at org.eclipse.egit.ui.internal.CompareUtils.compare(CompareUtils.java:581)
	at org.eclipse.egit.ui.internal.actions.CompareWithHeadActionHandler.execute(CompareWithHeadActionHandler.java:41)
	at org.eclipse.egit.ui.internal.actions.RepositoryAction.run(RepositoryAction.java:77)
	at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)
	at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
	at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
	at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1392)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3742)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3363)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:138)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:610)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1426)

"VM Thread" prio=10 tid=0x00007ffd781e0800 nid=0x850 runnable 

"GC task thread#0 (ParallelGC)" prio=10 tid=0x00007ffd78039800 nid=0x848 runnable 

"GC task thread#1 (ParallelGC)" prio=10 tid=0x00007ffd7803b800 nid=0x849 runnable 

"GC task thread#2 (ParallelGC)" prio=10 tid=0x00007ffd7803e800 nid=0x84a runnable 

"GC task thread#3 (ParallelGC)" prio=10 tid=0x00007ffd78040800 nid=0x84b runnable 

"GC task thread#4 (ParallelGC)" prio=10 tid=0x00007ffd78042800 nid=0x84c runnable 

"GC task thread#5 (ParallelGC)" prio=10 tid=0x00007ffd78044000 nid=0x84d runnable 

"GC task thread#6 (ParallelGC)" prio=10 tid=0x00007ffd78046000 nid=0x84e runnable 

"GC task thread#7 (ParallelGC)" prio=10 tid=0x00007ffd78048000 nid=0x84f runnable 

"VM Periodic Task Thread" prio=10 tid=0x00007ffd78220000 nid=0x857 waiting on condition 

JNI global references: 1382


Back to the top