SlideShare a Scribd company logo
1 of 30
Download to read offline
IWSC ‘17
CREST, University College London, UK
Using Compilation/Decompilation
to Enhance Clone Detection
Chaiyong Ragkhitwetsagul, Jens Krinke
Clone 

det.
Plag 

det.
Comp.
Others
ccfx
deckard
iclones
nicad
simian
jplag-java
jplag-text
plaggie
sherlock
simjava
simtext
7zncd-BZip2
7zncd-LZMA
7zncd-LZMA2
7zncd-Deflate
7zncd-Deflate64
7zncd-PPMd
bzip2ncd
gzipncd
icd
ncd-bzlib
ncd-zlib
xz-ncd
bsdiff
diff
py-difflib
py-fuzzywuzzy
py-jellyfish
py-ngram
py-sklearn
0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 F1
Orig.
Dec.
Ragkhitwetsagul et al., 2016
Clone 

det.
Plag 

det.
Comp.
Others
ccfx
deckard
iclones
nicad
simian
jplag-java
jplag-text
plaggie
sherlock
simjava
simtext
7zncd-BZip2
7zncd-LZMA
7zncd-LZMA2
7zncd-Deflate
7zncd-Deflate64
7zncd-PPMd
bzip2ncd
gzipncd
icd
ncd-bzlib
ncd-zlib
xz-ncd
bsdiff
diff
py-difflib
py-fuzzywuzzy
py-jellyfish
py-ngram
py-sklearn
0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 F1
Orig.
Dec.
4
O. Kononenko, C. Zhang, and M. W. Godfrey, ICSME ‘14
What Happens?
Compiling Clones:
and Decompiling
4
What Happens?
Compiling Clones:
Source
Code
and Decompiling
4
What Happens?
Compiling Clones:
Existing
tools
Source
Code
and Decompiling
4
What Happens?
Compiling Clones:
Missing
Source
Existing
tools
Source
Code
and Decompiling
4
What Happens?
Compiling Clones:
C. Ragkhitwetsagul J. Krinke CREST, UCL, UK
decomp.
clones
clone
mapper
decomp. &
mapped clones
compiler
decompiler
decompiled software
clone
detector
original
clones
5
software
common
clones
disjoint
clones
manual investigation
Experimental Framework
C. Ragkhitwetsagul J. Krinke CREST, UCL, UK 6
System Ver.
Original Decompiled
Files SLOC Files SLOC
4.1.3 203 9,777 311 11,233
1.5.0 644 96,711 669 85,251
9.0 1,688 241,924 2603 256,974
Apache Tomcat®
Software Systems
7
Tool Config. Parameters
NiCad Type-1 UPI=0.0, renaming=none
Type-2 UPI=0.0, renaming=consistent
Type-3 UPI=0.3, renaming=consistent
Tools
javac Procyon NiCad
Compiler Decompiler Clone Detector
8
Clone Mapper
decompiled
clone report
DCP1(dm1, dm2)
decompiled clone
pairs
software
m1
m2
m4
m3
mn
…
DCP2(dm1, dm3)
DCP3(dm2, dm4)
…
DCPn(dmm, dmo)
set of methods (M)
mo
decompiled-and-mapped
clone report
DCP*1((dm1,dm2),(m1,m2))
DCP*2((dm1,dm3),(m1,m3))
DCP*3((dm2,dm4),(m2,m4))
DCP*n((dmm,dmo),(mm,mo))
…
decompiled-and-mapped
clone pairs
…
C. Ragkhitwetsagul J. Krinke CREST, UCL, UK 9
Common & Disjoint Clone Pairs
Ccommon
Corig-only Cdecomp-only
Original Decompiled
C. Ragkhitwetsagul J. Krinke CREST, UCL, UK 10
Results
11
JUnit
Original Decompiled
Type-1
Type-2
Type-3
6
3
12
JFreeChart
Original Decompiled
Type-1
Type-2
Type-3
159
155
33
15
48
1
17
27
3
13
Tomcat
Original Decompiled
Type-1
Type-2
Type-3
217
608
20
25
141
22
3
23
1
C. Ragkhitwetsagul J. Krinke CREST, UCL, UK 14
Manual Investigation
15
No.ofclonepairs
0
10
20
30
40
50
Type-1 Type-2 Type-3
47
15
1
48
15
1
Candidates TP
JFreeChart
Cforig-only
No.ofclonepairs
0
6
12
18
24
30
Type-1 Type-2 Type-3
27
17
3
27
17
3
Cfdecomp-only
16
No.ofclonepairs
0
32
64
96
128
160
Type-1 Type-2 Type-3
141
2522
141
2522
Candidates TP
Tomcat
Cforig-only
No.ofclonepairs
0
6
12
18
24
30
Type-1 Type-2 Type-3
23
31
23
31
Cfdecomp-only
Clone set Reasons
Cforig-only
Too small after decomp.
Too diff. after decomp.
Smaller after decomp. higher dissimilarity
Unknown
Cfdecomp-only
Having deleted/added stmt., type cast, package
name.
Different if-else statements
Different loop statements
Inner class methods
Unknown
Characteristics of Disjoint Clones
Clone set Reasons
Cforig-only Too small after decomp.
Too diff. after decomp.
Smaller after decomp. higher
dissimilarity
Unknown
Cfdecomp-only
Having deleted/added stmt., type
cast, package name.
Different if-else statements
Different loop statements
Inner class methods
Unknown
JFreeChart
0 10 20 30 40 50
5
11
32
6
9
T1 T2 T3
0 2 4 6 8 10 12 14 16
12
4
3
8
12
53
Clone set Reasons
Cforig-only Too small after decomp.
Too diff. after decomp.
Smaller after decomp. higher
dissimilarity
Unknown
Cfdecomp-only
Having deleted/added stmt., type
cast, package name.
Different if-else statements
Different loop statements
Inner class methods
Unknown
Tomcat
0 28 56 84 112 140
16
5
120
19
6
T1 T2 T3
0 5 10 15 20 25 30
20
2
1
3
2
@Override	
	 public	Range	findRangeBounds(XYDataset	dataset)	{	
	 	 if	(dataset	!=	null)	{	
	 	 	 Range	r	=	DatasetUtilities.findRangeBounds(dataset,	false);	
	 	 	 if	(r	==	null)	{	
	 	 	 	 return	null;	
	 	 	 }	else	{	
	 	 	 	 return	new	Range(r.getLowerBound()	+	this.yOffset,	
																																																																								r.getUpperBound()	+	this.blockHeight	+	this.yOffset);	
	 	 	 }	
	 	 }	else	{	
	 	 	 return	null;	
	 	 }	
	 }		
	 @Override	
	 public	Range	findDomainBounds(XYDataset	dataset)	{	
	 	 if	(dataset	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 Range	r	=	DatasetUtilities.findDomainBounds(dataset,	false);	
	 	 if	(r	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 return	new	Range(r.getLowerBound()	+	this.xOffset,		
	 	 	 	 									r.getUpperBound()	+	this.blockWidth	+	this.xOffset);	
	 }
O
R
I
G
I
N
A
L
@Override	
	 public	Range	findRangeBounds(XYDataset	dataset)	{	
	 	 if	(dataset	!=	null)	{	
	 	 	 Range	r	=	DatasetUtilities.findRangeBounds(dataset,	false);	
	 	 	 if	(r	==	null)	{	
	 	 	 	 return	null;	
	 	 	 }	else	{	
	 	 	 	 return	new	Range(r.getLowerBound()	+	this.yOffset,	
																																																																								r.getUpperBound()	+	this.blockHeight	+	this.yOffset);	
	 	 	 }	
	 	 }	else	{	
	 	 	 return	null;	
	 	 }	
	 }		
	 @Override	
	 public	Range	findDomainBounds(XYDataset	dataset)	{	
	 	 if	(dataset	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 Range	r	=	DatasetUtilities.findDomainBounds(dataset,	false);	
	 	 if	(r	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 return	new	Range(r.getLowerBound()	+	this.xOffset,		
	 	 	 	 									r.getUpperBound()	+	this.blockWidth	+	this.xOffset);	
	 }
O
R
I
G
I
N
A
L
@Override	
	 public	Range	findDomainBounds(final	XYDataset	dataset)	{	
	 	 if	(dataset	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 final	Range	r	=	DatasetUtilities.findDomainBounds(dataset,	false);	
	 	 if	(r	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 return	new	Range(r.getLowerBound()	+	this.xOffset,		
																																																						r.getUpperBound()	+	this.blockWidth	+	this.xOffset);	
	 }
	 @Override	
	 public	Range	findRangeBounds(final	XYDataset	dataset)	{	
	 	 if	(dataset	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 final	Range	r	=	DatasetUtilities.findRangeBounds(dataset,	false);	
	 	 if	(r	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 return	new	Range(r.getLowerBound()	+	this.yOffset,		
	 	 	 	 									r.getUpperBound()	+	this.blockHeight	+	this.yOffset);	
	 }
D
E
C
O
M
P
I
L
E
D
public	void	clearRangeMarkers()	{	
				if	(this.backgroundRangeMarkers	!=	null)	{	
								Set<Integer>	keys	=		
																										this.backgroundRangeMarkers.keySet();	
								for	(Integer	key	:	keys)	{	
												clearRangeMarkers(key);	
								}	
								this.backgroundRangeMarkers.clear();	
				}	
				if	(this.foregroundRangeMarkers	!=	null)	{	
								Set<Integer>	keys	=		
																									this.foregroundRangeMarkers.keySet();	
								for	(Integer	key	:	keys)	{	
												clearRangeMarkers(key);	
								}	
								this.foregroundRangeMarkers.clear();	
				}	
				fireChangeEvent();	
}
				public	void	clearRangeMarkers()	{	
								if	(this.backgroundRangeMarkers	!=	null)	{	
												Set	keys	=		
																				this.backgroundRangeMarkers.keySet();	
												Iterator	iterator	=	keys.iterator();	
												while	(iterator.hasNext())	{	
																Integer	key	=	(Integer)	iterator.next();	
																clearRangeMarkers(key.intValue());	
												}	
												this.backgroundRangeMarkers.clear();	
								}	
								if	(this.foregroundRangeMarkers	!=	null)	{	
												Set	keys	=		
																				this.foregroundRangeMarkers.keySet();	
												Iterator	iterator	=	keys.iterator();	
												while	(iterator.hasNext())	{	
																Integer	key	=	(Integer)	iterator.next();	
																clearRangeMarkers(key.intValue());	
												}	
												this.foregroundRangeMarkers.clear();	
								}	
								fireChangeEvent();	
}	
ORIGINAL
public	void	clearRangeMarkers()	{	
				if	(this.backgroundRangeMarkers	!=	null)	{	
								Set<Integer>	keys	=		
																										this.backgroundRangeMarkers.keySet();	
								for	(Integer	key	:	keys)	{	
												clearRangeMarkers(key);	
								}	
								this.backgroundRangeMarkers.clear();	
				}	
				if	(this.foregroundRangeMarkers	!=	null)	{	
								Set<Integer>	keys	=		
																									this.foregroundRangeMarkers.keySet();	
								for	(Integer	key	:	keys)	{	
												clearRangeMarkers(key);	
								}	
								this.foregroundRangeMarkers.clear();	
				}	
				fireChangeEvent();	
}
				public	void	clearRangeMarkers()	{	
								if	(this.backgroundRangeMarkers	!=	null)	{	
												Set	keys	=		
																				this.backgroundRangeMarkers.keySet();	
												Iterator	iterator	=	keys.iterator();	
												while	(iterator.hasNext())	{	
																Integer	key	=	(Integer)	iterator.next();	
																clearRangeMarkers(key.intValue());	
												}	
												this.backgroundRangeMarkers.clear();	
								}	
								if	(this.foregroundRangeMarkers	!=	null)	{	
												Set	keys	=		
																				this.foregroundRangeMarkers.keySet();	
												Iterator	iterator	=	keys.iterator();	
												while	(iterator.hasNext())	{	
																Integer	key	=	(Integer)	iterator.next();	
																clearRangeMarkers(key.intValue());	
												}	
												this.foregroundRangeMarkers.clear();	
								}	
								fireChangeEvent();	
}	
ORIGINAL
public	void	clearRangeMarkers()	{	
				if	(this.backgroundDomainMarkers	!=	null)	{	
								final	Set<Integer>	keys	=		
																		this.backgroundDomainMarkers.keySet();	
												for	(final	Integer	key	:	keys)	{	
																this.clearDomainMarkers(key);	
												}	
												this.backgroundDomainMarkers.clear();	
								}	
								if	(this.foregroundDomainMarkers	!=	null)	{	
												final	Set<Integer>	keys	=		
																						this.foregroundDomainMarkers.keySet();	
												for	(final	Integer	key	:	keys)	{	
																this.clearDomainMarkers(key);	
												}	
												this.foregroundDomainMarkers.clear();	
								}	
								this.fireChangeEvent();	
}
				public	void	clearRangeMarkers()	{	
								if	(this.backgroundRangeMarkers	!=	null)	{	
												final	Set	keys	=		
																this.backgroundRangeMarkers.keySet();	
												for	(final	Integer	key	:	keys)	{	
																this.clearRangeMarkers(key);	
												}	
												this.backgroundRangeMarkers.clear();	
								}	
								if	(this.foregroundRangeMarkers	!=	null)	{	
								final	Set	keys	=		
												this.foregroundRangeMarkers.keySet();	
								for	(final	Integer	key	:	keys)	{	
												this.clearRangeMarkers(key);	
								}	
								this.foregroundRangeMarkers.clear();	
								}	
								this.fireChangeEvent();	
				}
DECOMPILED
26
Study on 3 real-world systems: JUnit, JFreeChart, Tomcat
Using Compilation/Decompilation 

to Enhance Clone Detection
1 Clone pairs before and after decompilation are mostly
similar for all three clone types.
Findings:
2 One can complement the original clone results by
incorporating clones after decompilation.
Characteristics of disjoint clones3
C. Ragkhitwetsagul, J. Krinke
cragkhit.github.io/crjk-iwsc17

More Related Content

Viewers also liked

Device-specific Clang Tooling for Embedded Systems
Device-specific Clang Tooling for Embedded SystemsDevice-specific Clang Tooling for Embedded Systems
Device-specific Clang Tooling for Embedded Systems
emBO_Conference
 
Inventario de perasonalidad pexposicion
Inventario de perasonalidad pexposicionInventario de perasonalidad pexposicion
Inventario de perasonalidad pexposicion
Talita Mtz
 
A historia do noso planeta
A historia do noso planetaA historia do noso planeta
A historia do noso planeta
irenetraba
 
A estrutura e dinámica da terra
A estrutura e dinámica da terraA estrutura e dinámica da terra
A estrutura e dinámica da terra
irenetraba
 
A saúde e a enfermidade
A saúde e a enfermidadeA saúde e a enfermidade
A saúde e a enfermidade
irenetraba
 
Estudo dos ecosistemas
Estudo dos ecosistemasEstudo dos ecosistemas
Estudo dos ecosistemas
irenetraba
 
A información xenética
A información xenéticaA información xenética
A información xenética
irenetraba
 
MERCA PRESENTACION
MERCA PRESENTACIONMERCA PRESENTACION
MERCA PRESENTACION
lu2205
 
Presentación SDL Trados vs Déjà-vu
Presentación SDL Trados vs Déjà-vuPresentación SDL Trados vs Déjà-vu
Presentación SDL Trados vs Déjà-vu
OLEXI
 

Viewers also liked (17)

Device-specific Clang Tooling for Embedded Systems
Device-specific Clang Tooling for Embedded SystemsDevice-specific Clang Tooling for Embedded Systems
Device-specific Clang Tooling for Embedded Systems
 
Meetup: Spark + Kerberos
Meetup: Spark + KerberosMeetup: Spark + Kerberos
Meetup: Spark + Kerberos
 
Inventario de perasonalidad pexposicion
Inventario de perasonalidad pexposicionInventario de perasonalidad pexposicion
Inventario de perasonalidad pexposicion
 
Power point fuisha
Power point fuishaPower point fuisha
Power point fuisha
 
A historia do noso planeta
A historia do noso planetaA historia do noso planeta
A historia do noso planeta
 
公聽會資料─豐富專案區段徵收
公聽會資料─豐富專案區段徵收公聽會資料─豐富專案區段徵收
公聽會資料─豐富專案區段徵收
 
A estrutura e dinámica da terra
A estrutura e dinámica da terraA estrutura e dinámica da terra
A estrutura e dinámica da terra
 
A saúde e a enfermidade
A saúde e a enfermidadeA saúde e a enfermidade
A saúde e a enfermidade
 
El bulling
El bullingEl bulling
El bulling
 
Estudo dos ecosistemas
Estudo dos ecosistemasEstudo dos ecosistemas
Estudo dos ecosistemas
 
A información xenética
A información xenéticaA información xenética
A información xenética
 
MERCA PRESENTACION
MERCA PRESENTACIONMERCA PRESENTACION
MERCA PRESENTACION
 
Presentación SDL Trados vs Déjà-vu
Presentación SDL Trados vs Déjà-vuPresentación SDL Trados vs Déjà-vu
Presentación SDL Trados vs Déjà-vu
 
Los niñ@s de Villar de Olalla visitan Toledo, por Vicente Jiménez
Los niñ@s de Villar de Olalla visitan Toledo, por Vicente JiménezLos niñ@s de Villar de Olalla visitan Toledo, por Vicente Jiménez
Los niñ@s de Villar de Olalla visitan Toledo, por Vicente Jiménez
 
Roma
RomaRoma
Roma
 
Inhalation analytical techniques 1
Inhalation analytical techniques 1Inhalation analytical techniques 1
Inhalation analytical techniques 1
 
La amistad
La amistadLa amistad
La amistad
 

Similar to Using Compilation/Decompilation to Enhance Clone Detection

Internship - Final Presentation (26-08-2015)
Internship - Final Presentation (26-08-2015)Internship - Final Presentation (26-08-2015)
Internship - Final Presentation (26-08-2015)
Sean Krail
 
Convolutional neural networks for image classification — evidence from Kaggle...
Convolutional neural networks for image classification — evidence from Kaggle...Convolutional neural networks for image classification — evidence from Kaggle...
Convolutional neural networks for image classification — evidence from Kaggle...
Dmytro Mishkin
 
Putting a Fork in Fork (Linux Process and Memory Management)
Putting a Fork in Fork (Linux Process and Memory Management)Putting a Fork in Fork (Linux Process and Memory Management)
Putting a Fork in Fork (Linux Process and Memory Management)
David Evans
 

Similar to Using Compilation/Decompilation to Enhance Clone Detection (20)

Cram
CramCram
Cram
 
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
 
Internship - Final Presentation (26-08-2015)
Internship - Final Presentation (26-08-2015)Internship - Final Presentation (26-08-2015)
Internship - Final Presentation (26-08-2015)
 
LINE スタンプショップにおける Zipkin 利用事例
LINE スタンプショップにおける Zipkin 利用事例LINE スタンプショップにおける Zipkin 利用事例
LINE スタンプショップにおける Zipkin 利用事例
 
Android & PostgreSQL
Android & PostgreSQLAndroid & PostgreSQL
Android & PostgreSQL
 
Zarzadzanie pamiecia w .NET - WDI
Zarzadzanie pamiecia w .NET - WDIZarzadzanie pamiecia w .NET - WDI
Zarzadzanie pamiecia w .NET - WDI
 
Debugging Ruby Systems
Debugging Ruby SystemsDebugging Ruby Systems
Debugging Ruby Systems
 
No dark magic - Byte code engineering in the real world
No dark magic - Byte code engineering in the real worldNo dark magic - Byte code engineering in the real world
No dark magic - Byte code engineering in the real world
 
Functional manipulations of large data graphs 20160601
Functional manipulations of large data graphs 20160601Functional manipulations of large data graphs 20160601
Functional manipulations of large data graphs 20160601
 
Xdp and ebpf_maps
Xdp and ebpf_mapsXdp and ebpf_maps
Xdp and ebpf_maps
 
High Performance Systems Without Tears - Scala Days Berlin 2018
High Performance Systems Without Tears - Scala Days Berlin 2018High Performance Systems Without Tears - Scala Days Berlin 2018
High Performance Systems Without Tears - Scala Days Berlin 2018
 
(Slightly) Smarter Smart Pointers
(Slightly) Smarter Smart Pointers(Slightly) Smarter Smart Pointers
(Slightly) Smarter Smart Pointers
 
IDS.pptx
IDS.pptxIDS.pptx
IDS.pptx
 
Debugging Ruby
Debugging RubyDebugging Ruby
Debugging Ruby
 
Bioinfo ngs data format visualization v2
Bioinfo ngs data format visualization v2Bioinfo ngs data format visualization v2
Bioinfo ngs data format visualization v2
 
Convolutional neural networks for image classification — evidence from Kaggle...
Convolutional neural networks for image classification — evidence from Kaggle...Convolutional neural networks for image classification — evidence from Kaggle...
Convolutional neural networks for image classification — evidence from Kaggle...
 
Lrz kurse: r as superglue
Lrz kurse: r as superglueLrz kurse: r as superglue
Lrz kurse: r as superglue
 
Welcome, Java 15! (Japanese)
Welcome, Java 15! (Japanese)Welcome, Java 15! (Japanese)
Welcome, Java 15! (Japanese)
 
CodeQL + DTrace = Memory Disclosure Vulnerabilities in XNU
CodeQL + DTrace = Memory Disclosure Vulnerabilities in XNUCodeQL + DTrace = Memory Disclosure Vulnerabilities in XNU
CodeQL + DTrace = Memory Disclosure Vulnerabilities in XNU
 
Putting a Fork in Fork (Linux Process and Memory Management)
Putting a Fork in Fork (Linux Process and Memory Management)Putting a Fork in Fork (Linux Process and Memory Management)
Putting a Fork in Fork (Linux Process and Memory Management)
 

Recently uploaded

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ssuser89054b
 
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
amitlee9823
 
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
dharasingh5698
 
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
dollysharma2066
 
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Recently uploaded (20)

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
 
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
 
Thermal Engineering Unit - I & II . ppt
Thermal Engineering  Unit - I & II . pptThermal Engineering  Unit - I & II . ppt
Thermal Engineering Unit - I & II . ppt
 
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
 
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
Bhosari ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For ...
Bhosari ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For ...Bhosari ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For ...
Bhosari ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For ...
 
KubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlyKubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghly
 
Thermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VThermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - V
 
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
 
(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7
(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7
(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdf
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
 
UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performance
 
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
 
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
 
PVC VS. FIBERGLASS (FRP) GRAVITY SEWER - UNI BELL
PVC VS. FIBERGLASS (FRP) GRAVITY SEWER - UNI BELLPVC VS. FIBERGLASS (FRP) GRAVITY SEWER - UNI BELL
PVC VS. FIBERGLASS (FRP) GRAVITY SEWER - UNI BELL
 
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
 

Using Compilation/Decompilation to Enhance Clone Detection