WEBVTT
Kind: captions
Language: en

00:00:01.160 --> 00:00:06.690 align:start position:0%
 
[Music]

00:00:06.690 --> 00:00:06.700 align:start position:0%
 
 

00:00:06.700 --> 00:00:13.030 align:start position:0%
 
[Music]

00:00:13.030 --> 00:00:13.040 align:start position:0%
 
 

00:00:13.040 --> 00:00:16.870 align:start position:0%
 
okay<00:00:14.040><c> good</c><00:00:14.240><c> day</c><00:00:14.879><c> my</c><00:00:15.080><c> name</c><00:00:15.360><c> is</c><00:00:15.719><c> Tony</c><00:00:16.199><c> I</c><00:00:16.320><c> work</c><00:00:16.600><c> at</c>

00:00:16.870 --> 00:00:16.880 align:start position:0%
okay good day my name is Tony I work at
 

00:00:16.880 --> 00:00:19.950 align:start position:0%
okay good day my name is Tony I work at
the<00:00:17.279><c> nomic</c><00:00:17.840><c> foundation</c><00:00:18.439><c> in</c><00:00:18.640><c> applied</c>

00:00:19.950 --> 00:00:19.960 align:start position:0%
the nomic foundation in applied
 

00:00:19.960 --> 00:00:23.710 align:start position:0%
the nomic foundation in applied
research<00:00:20.960><c> uh</c><00:00:21.080><c> I</c><00:00:21.160><c> was</c><00:00:21.439><c> previously</c><00:00:22.359><c> a</c><00:00:22.720><c> co-lead</c>

00:00:23.710 --> 00:00:23.720 align:start position:0%
research uh I was previously a co-lead
 

00:00:23.720 --> 00:00:26.269 align:start position:0%
research uh I was previously a co-lead
on<00:00:24.000><c> the</c><00:00:24.080><c> slang</c><00:00:24.880><c> project</c><00:00:25.439><c> and</c><00:00:25.560><c> it's</c><00:00:25.720><c> in</c><00:00:25.960><c> this</c>

00:00:26.269 --> 00:00:26.279 align:start position:0%
on the slang project and it's in this
 

00:00:26.279 --> 00:00:28.070 align:start position:0%
on the slang project and it's in this
capacity<00:00:26.880><c> that</c><00:00:27.039><c> I'm</c><00:00:27.279><c> going</c><00:00:27.359><c> to</c><00:00:27.560><c> speak</c><00:00:27.760><c> to</c><00:00:27.920><c> you</c>

00:00:28.070 --> 00:00:28.080 align:start position:0%
capacity that I'm going to speak to you
 

00:00:28.080 --> 00:00:30.150 align:start position:0%
capacity that I'm going to speak to you
today

00:00:30.150 --> 00:00:30.160 align:start position:0%
today
 

00:00:30.160 --> 00:00:32.790 align:start position:0%
today
I<00:00:30.240><c> have</c><00:00:30.359><c> a</c><00:00:30.560><c> fantastic</c><00:00:31.359><c> job</c><00:00:31.880><c> working</c><00:00:32.279><c> with</c>

00:00:32.790 --> 00:00:32.800 align:start position:0%
I have a fantastic job working with
 

00:00:32.800 --> 00:00:35.869 align:start position:0%
I have a fantastic job working with
excellent<00:00:33.320><c> people</c><00:00:34.200><c> at</c><00:00:34.360><c> nomc</c><00:00:34.920><c> nomic</c><00:00:35.360><c> is</c><00:00:35.440><c> a</c>

00:00:35.869 --> 00:00:35.879 align:start position:0%
excellent people at nomc nomic is a
 

00:00:35.879 --> 00:00:39.830 align:start position:0%
excellent people at nomc nomic is a
nonprofit<00:00:36.879><c> and</c><00:00:37.079><c> our</c><00:00:37.320><c> number</c><00:00:37.719><c> one</c><00:00:38.719><c> core</c><00:00:39.079><c> value</c>

00:00:39.830 --> 00:00:39.840 align:start position:0%
nonprofit and our number one core value
 

00:00:39.840 --> 00:00:43.029 align:start position:0%
nonprofit and our number one core value
is<00:00:40.239><c> kindness</c><00:00:40.719><c> and</c><00:00:40.840><c> we</c><00:00:40.960><c> live</c><00:00:41.200><c> this</c><00:00:41.440><c> every</c><00:00:42.039><c> day</c>

00:00:43.029 --> 00:00:43.039 align:start position:0%
is kindness and we live this every day
 

00:00:43.039 --> 00:00:45.150 align:start position:0%
is kindness and we live this every day
and<00:00:43.160><c> we</c><00:00:43.320><c> are</c><00:00:43.559><c> hiring</c><00:00:44.399><c> there's</c><00:00:44.600><c> meant</c><00:00:44.760><c> to</c><00:00:44.879><c> be</c><00:00:45.000><c> a</c>

00:00:45.150 --> 00:00:45.160 align:start position:0%
and we are hiring there's meant to be a
 

00:00:45.160 --> 00:00:47.189 align:start position:0%
and we are hiring there's meant to be a
QR<00:00:45.480><c> code</c><00:00:45.680><c> at</c><00:00:45.800><c> the</c><00:00:45.879><c> end</c><00:00:46.039><c> of</c><00:00:46.199><c> my</c><00:00:46.320><c> slides</c><00:00:46.760><c> but</c><00:00:47.039><c> I'm</c>

00:00:47.189 --> 00:00:47.199 align:start position:0%
QR code at the end of my slides but I'm
 

00:00:47.199 --> 00:00:50.910 align:start position:0%
QR code at the end of my slides but I'm
afraid<00:00:47.719><c> it</c><00:00:47.879><c> didn't</c><00:00:48.199><c> make</c><00:00:48.719><c> it</c><00:00:49.719><c> uh</c><00:00:50.480><c> and</c><00:00:50.719><c> I</c><00:00:50.800><c> want</c>

00:00:50.910 --> 00:00:50.920 align:start position:0%
afraid it didn't make it uh and I want
 

00:00:50.920 --> 00:00:53.630 align:start position:0%
afraid it didn't make it uh and I want
to<00:00:51.120><c> give</c><00:00:51.559><c> heartfelt</c><00:00:52.239><c> thanks</c><00:00:52.600><c> to</c><00:00:53.320><c> the</c>

00:00:53.630 --> 00:00:53.640 align:start position:0%
to give heartfelt thanks to the
 

00:00:53.640 --> 00:00:57.310 align:start position:0%
to give heartfelt thanks to the
co-founders<00:00:54.320><c> of</c><00:00:54.520><c> nomic</c><00:00:55.520><c> p</c><00:00:56.199><c> and</c><00:00:56.559><c> Fran</c><00:00:57.039><c> for</c>

00:00:57.310 --> 00:00:57.320 align:start position:0%
co-founders of nomic p and Fran for
 

00:00:57.320 --> 00:01:00.470 align:start position:0%
co-founders of nomic p and Fran for
creating<00:00:57.800><c> and</c><00:00:58.120><c> maintaining</c><00:00:59.120><c> such</c><00:00:59.359><c> an</c><00:01:00.039><c> amazing</c>

00:01:00.470 --> 00:01:00.480 align:start position:0%
creating and maintaining such an amazing
 

00:01:00.480 --> 00:01:02.270 align:start position:0%
creating and maintaining such an amazing
place<00:01:00.719><c> to</c>

00:01:02.270 --> 00:01:02.280 align:start position:0%
place to
 

00:01:02.280 --> 00:01:06.070 align:start position:0%
place to
work<00:01:03.559><c> so</c><00:01:04.559><c> today</c><00:01:04.839><c> we're</c><00:01:04.960><c> going</c><00:01:05.080><c> to</c><00:01:05.280><c> explore</c><00:01:05.760><c> the</c>

00:01:06.070 --> 00:01:06.080 align:start position:0%
work so today we're going to explore the
 

00:01:06.080 --> 00:01:08.870 align:start position:0%
work so today we're going to explore the
slang<00:01:06.600><c> query</c><00:01:07.000><c> API</c><00:01:07.640><c> which</c><00:01:07.759><c> is</c><00:01:07.960><c> a</c><00:01:08.080><c> new</c><00:01:08.240><c> feature</c>

00:01:08.870 --> 00:01:08.880 align:start position:0%
slang query API which is a new feature
 

00:01:08.880 --> 00:01:11.510 align:start position:0%
slang query API which is a new feature
which<00:01:09.560><c> makes</c><00:01:09.880><c> working</c><00:01:10.280><c> with</c><00:01:10.520><c> solidity</c><00:01:11.119><c> code</c>

00:01:11.510 --> 00:01:11.520 align:start position:0%
which makes working with solidity code
 

00:01:11.520 --> 00:01:13.990 align:start position:0%
which makes working with solidity code
surprisingly<00:01:12.680><c> straightforward</c><00:01:13.680><c> and</c><00:01:13.799><c> now</c>

00:01:13.990 --> 00:01:14.000 align:start position:0%
surprisingly straightforward and now
 

00:01:14.000 --> 00:01:15.950 align:start position:0%
surprisingly straightforward and now
this<00:01:14.080><c> is</c><00:01:14.200><c> not</c><00:01:14.360><c> a</c><00:01:14.560><c> tutorial</c><00:01:15.240><c> so</c><00:01:15.520><c> some</c><00:01:15.680><c> of</c><00:01:15.799><c> the</c>

00:01:15.950 --> 00:01:15.960 align:start position:0%
this is not a tutorial so some of the
 

00:01:15.960 --> 00:01:18.230 align:start position:0%
this is not a tutorial so some of the
details<00:01:16.320><c> have</c><00:01:16.479><c> been</c><00:01:16.840><c> omitted</c><00:01:17.560><c> you</c><00:01:17.720><c> can't</c><00:01:18.000><c> copy</c>

00:01:18.230 --> 00:01:18.240 align:start position:0%
details have been omitted you can't copy
 

00:01:18.240 --> 00:01:19.830 align:start position:0%
details have been omitted you can't copy
and<00:01:18.439><c> paste</c><00:01:18.720><c> any</c><00:01:18.880><c> of</c><00:01:19.000><c> the</c><00:01:19.159><c> code</c><00:01:19.479><c> that</c><00:01:19.600><c> I'm</c><00:01:19.759><c> going</c>

00:01:19.830 --> 00:01:19.840 align:start position:0%
and paste any of the code that I'm going
 

00:01:19.840 --> 00:01:23.230 align:start position:0%
and paste any of the code that I'm going
to<00:01:20.000><c> be</c><00:01:20.520><c> providing</c><00:01:21.520><c> it's</c><00:01:22.079><c> just</c><00:01:22.520><c> so</c><00:01:22.799><c> that</c><00:01:23.000><c> you</c>

00:01:23.230 --> 00:01:23.240 align:start position:0%
to be providing it's just so that you
 

00:01:23.240 --> 00:01:25.990 align:start position:0%
to be providing it's just so that you
can<00:01:23.720><c> well</c><00:01:23.960><c> I'm</c><00:01:24.119><c> hoping</c><00:01:24.360><c> to</c><00:01:24.600><c> inspire</c><00:01:25.079><c> you</c><00:01:25.799><c> so</c>

00:01:25.990 --> 00:01:26.000 align:start position:0%
can well I'm hoping to inspire you so
 

00:01:26.000 --> 00:01:27.710 align:start position:0%
can well I'm hoping to inspire you so
that<00:01:26.200><c> you</c><00:01:26.560><c> uh</c><00:01:26.680><c> go</c><00:01:26.799><c> and</c><00:01:27.000><c> find</c><00:01:27.159><c> out</c><00:01:27.320><c> some</c><00:01:27.479><c> more</c>

00:01:27.710 --> 00:01:27.720 align:start position:0%
that you uh go and find out some more
 

00:01:27.720 --> 00:01:30.590 align:start position:0%
that you uh go and find out some more
details<00:01:28.680><c> okay</c><00:01:28.880><c> so</c><00:01:29.400><c> 20</c><00:01:29.680><c> minutes</c>

00:01:30.590 --> 00:01:30.600 align:start position:0%
details okay so 20 minutes
 

00:01:30.600 --> 00:01:32.630 align:start position:0%
details okay so 20 minutes
is<00:01:30.720><c> a</c><00:01:30.840><c> bit</c><00:01:30.960><c> of</c><00:01:31.079><c> a</c><00:01:31.200><c> Sprint</c><00:01:32.079><c> so</c><00:01:32.280><c> I'm</c><00:01:32.360><c> going</c><00:01:32.479><c> to</c>

00:01:32.630 --> 00:01:32.640 align:start position:0%
is a bit of a Sprint so I'm going to
 

00:01:32.640 --> 00:01:34.990 align:start position:0%
is a bit of a Sprint so I'm going to
speed<00:01:32.960><c> up</c><00:01:33.360><c> let's</c>

00:01:34.990 --> 00:01:35.000 align:start position:0%
speed up let's
 

00:01:35.000 --> 00:01:39.149 align:start position:0%
speed up let's
go<00:01:36.000><c> okay</c><00:01:36.159><c> so</c><00:01:36.320><c> what</c><00:01:36.439><c> is</c><00:01:36.880><c> slang</c><00:01:37.880><c> so</c><00:01:38.119><c> slang's</c><00:01:38.680><c> our</c>

00:01:39.149 --> 00:01:39.159 align:start position:0%
go okay so what is slang so slang's our
 

00:01:39.159 --> 00:01:42.590 align:start position:0%
go okay so what is slang so slang's our
solidity<00:01:39.759><c> compiler</c><00:01:40.360><c> Library</c><00:01:41.200><c> it's</c><00:01:41.960><c> uh</c>

00:01:42.590 --> 00:01:42.600 align:start position:0%
solidity compiler Library it's uh
 

00:01:42.600 --> 00:01:45.910 align:start position:0%
solidity compiler Library it's uh
basically<00:01:43.600><c> a</c><00:01:44.360><c> developer</c><00:01:44.880><c> tool</c><00:01:45.320><c> that</c><00:01:45.439><c> enables</c>

00:01:45.910 --> 00:01:45.920 align:start position:0%
basically a developer tool that enables
 

00:01:45.920 --> 00:01:49.389 align:start position:0%
basically a developer tool that enables
you<00:01:46.119><c> to</c><00:01:46.320><c> write</c><00:01:46.560><c> better</c><00:01:47.040><c> tools</c><00:01:48.040><c> it</c><00:01:48.280><c> passes</c><00:01:49.119><c> and</c>

00:01:49.389 --> 00:01:49.399 align:start position:0%
you to write better tools it passes and
 

00:01:49.399 --> 00:01:52.709 align:start position:0%
you to write better tools it passes and
analyzes<00:01:50.000><c> solidity</c><00:01:50.520><c> code</c><00:01:50.840><c> from</c><00:01:51.640><c> version</c>

00:01:52.709 --> 00:01:52.719 align:start position:0%
analyzes solidity code from version
 

00:01:52.719 --> 00:01:55.590 align:start position:0%
analyzes solidity code from version
0.4.1<00:01:53.719><c> to</c><00:01:54.280><c> the</c><00:01:54.439><c> latest</c>

00:01:55.590 --> 00:01:55.600 align:start position:0%
0.4.1 to the latest
 

00:01:55.600 --> 00:01:58.950 align:start position:0%
0.4.1 to the latest
0.8<00:01:56.600><c> which</c><00:01:56.719><c> is</c><00:01:56.920><c> basically</c><00:01:57.479><c> all</c><00:01:57.680><c> of</c><00:01:57.880><c> the</c><00:01:58.399><c> cility</c>

00:01:58.950 --> 00:01:58.960 align:start position:0%
0.8 which is basically all of the cility
 

00:01:58.960 --> 00:02:00.670 align:start position:0%
0.8 which is basically all of the cility
code<00:01:59.240><c> that</c><00:01:59.360><c> is</c>

00:02:00.670 --> 00:02:00.680 align:start position:0%
code that is
 

00:02:00.680 --> 00:02:04.950 align:start position:0%
code that is
live<00:02:01.680><c> uh</c><00:02:01.840><c> our</c><00:02:02.039><c> focus</c><00:02:02.399><c> is</c><00:02:02.560><c> on</c><00:02:02.880><c> correctness</c><00:02:03.799><c> and</c>

00:02:04.950 --> 00:02:04.960 align:start position:0%
live uh our focus is on correctness and
 

00:02:04.960 --> 00:02:07.230 align:start position:0%
live uh our focus is on correctness and
convenience<00:02:05.960><c> uh</c><00:02:06.079><c> we're</c><00:02:06.280><c> about</c><00:02:06.479><c> to</c><00:02:06.680><c> release</c>

00:02:07.230 --> 00:02:07.240 align:start position:0%
convenience uh we're about to release
 

00:02:07.240 --> 00:02:09.229 align:start position:0%
convenience uh we're about to release
version<00:02:07.600><c> one</c><00:02:08.319><c> which</c><00:02:08.479><c> covers</c><00:02:08.800><c> the</c><00:02:08.920><c> typical</c>

00:02:09.229 --> 00:02:09.239 align:start position:0%
version one which covers the typical
 

00:02:09.239 --> 00:02:12.550 align:start position:0%
version one which covers the typical
front<00:02:09.479><c> end</c><00:02:09.720><c> features</c><00:02:10.360><c> of</c><00:02:10.560><c> a</c><00:02:11.160><c> compiler</c><00:02:12.160><c> and</c><00:02:12.319><c> our</c>

00:02:12.550 --> 00:02:12.560 align:start position:0%
front end features of a compiler and our
 

00:02:12.560 --> 00:02:14.830 align:start position:0%
front end features of a compiler and our
main<00:02:13.080><c> objective</c><00:02:13.640><c> as</c><00:02:13.720><c> I</c><00:02:13.879><c> said</c><00:02:14.160><c> is</c><00:02:14.319><c> to</c><00:02:14.519><c> enable</c>

00:02:14.830 --> 00:02:14.840 align:start position:0%
main objective as I said is to enable
 

00:02:14.840 --> 00:02:16.910 align:start position:0%
main objective as I said is to enable
you<00:02:14.959><c> to</c><00:02:15.120><c> develop</c><00:02:15.760><c> better</c>

00:02:16.910 --> 00:02:16.920 align:start position:0%
you to develop better
 

00:02:16.920 --> 00:02:20.949 align:start position:0%
you to develop better
tools<00:02:17.920><c> uh</c><00:02:18.080><c> slang</c><00:02:18.480><c> has</c><00:02:18.599><c> a</c><00:02:18.840><c> radical</c><00:02:19.840><c> open</c><00:02:20.840><c> uh</c>

00:02:20.949 --> 00:02:20.959 align:start position:0%
tools uh slang has a radical open uh
 

00:02:20.959 --> 00:02:23.309 align:start position:0%
tools uh slang has a radical open uh
declarative<00:02:21.599><c> met</c>

00:02:23.309 --> 00:02:23.319 align:start position:0%
declarative met
 

00:02:23.319 --> 00:02:25.910 align:start position:0%
declarative met
architecture<00:02:24.319><c> slang's</c><00:02:24.920><c> a</c><00:02:25.160><c> error</c><00:02:25.480><c> correcting</c>

00:02:25.910 --> 00:02:25.920 align:start position:0%
architecture slang's a error correcting
 

00:02:25.920 --> 00:02:28.150 align:start position:0%
architecture slang's a error correcting
compiler<00:02:26.360><c> so</c><00:02:26.519><c> it</c><00:02:26.680><c> always</c><00:02:27.080><c> produces</c><00:02:27.560><c> output</c>

00:02:28.150 --> 00:02:28.160 align:start position:0%
compiler so it always produces output
 

00:02:28.160 --> 00:02:31.350 align:start position:0%
compiler so it always produces output
even<00:02:28.400><c> if</c><00:02:28.519><c> you've</c><00:02:28.720><c> got</c><00:02:28.879><c> source</c><00:02:29.280><c> code</c><00:02:29.519><c> errors</c>

00:02:31.350 --> 00:02:31.360 align:start position:0%
even if you've got source code errors
 

00:02:31.360 --> 00:02:33.150 align:start position:0%
even if you've got source code errors
uh<00:02:31.519><c> a</c><00:02:31.720><c> key</c><00:02:31.920><c> feature</c><00:02:32.280><c> of</c><00:02:32.400><c> slang</c><00:02:32.800><c> which</c><00:02:32.920><c> is</c><00:02:33.040><c> what</c>

00:02:33.150 --> 00:02:33.160 align:start position:0%
uh a key feature of slang which is what
 

00:02:33.160 --> 00:02:35.550 align:start position:0%
uh a key feature of slang which is what
we're<00:02:33.360><c> here</c><00:02:33.480><c> to</c><00:02:33.680><c> talk</c><00:02:33.920><c> about</c><00:02:34.760><c> is</c><00:02:34.920><c> its</c><00:02:35.200><c> query</c>

00:02:35.550 --> 00:02:35.560 align:start position:0%
we're here to talk about is its query
 

00:02:35.560 --> 00:02:38.710 align:start position:0%
we're here to talk about is its query
API<00:02:35.959><c> for</c><00:02:36.160><c> code</c>

00:02:38.710 --> 00:02:38.720 align:start position:0%
 
 

00:02:38.720 --> 00:02:41.149 align:start position:0%
 
analysis<00:02:39.720><c> so</c><00:02:39.959><c> compiler</c><00:02:40.400><c> front</c><00:02:40.599><c> ends</c><00:02:40.879><c> fall</c>

00:02:41.149 --> 00:02:41.159 align:start position:0%
analysis so compiler front ends fall
 

00:02:41.159 --> 00:02:43.390 align:start position:0%
analysis so compiler front ends fall
into<00:02:41.400><c> two</c><00:02:41.640><c> main</c><00:02:41.959><c> categories</c><00:02:42.879><c> there</c><00:02:42.959><c> are</c><00:02:43.200><c> those</c>

00:02:43.390 --> 00:02:43.400 align:start position:0%
into two main categories there are those
 

00:02:43.400 --> 00:02:44.869 align:start position:0%
into two main categories there are those
that<00:02:43.599><c> produce</c><00:02:43.920><c> what's</c><00:02:44.120><c> called</c><00:02:44.400><c> concrete</c>

00:02:44.869 --> 00:02:44.879 align:start position:0%
that produce what's called concrete
 

00:02:44.879 --> 00:02:46.990 align:start position:0%
that produce what's called concrete
syntax<00:02:45.319><c> trees</c><00:02:45.760><c> and</c><00:02:45.959><c> then</c><00:02:46.120><c> produce</c><00:02:46.800><c> an</c>

00:02:46.990 --> 00:02:47.000 align:start position:0%
syntax trees and then produce an
 

00:02:47.000 --> 00:02:49.309 align:start position:0%
syntax trees and then produce an
abstract<00:02:47.440><c> syntax</c><00:02:47.840><c> tree</c><00:02:48.120><c> from</c><00:02:48.360><c> that</c><00:02:49.080><c> and</c><00:02:49.200><c> there</c>

00:02:49.309 --> 00:02:49.319 align:start position:0%
abstract syntax tree from that and there
 

00:02:49.319 --> 00:02:51.589 align:start position:0%
abstract syntax tree from that and there
are<00:02:49.480><c> those</c><00:02:49.680><c> that</c><00:02:49.840><c> produce</c><00:02:50.239><c> abstract</c><00:02:50.680><c> syntax</c>

00:02:51.589 --> 00:02:51.599 align:start position:0%
are those that produce abstract syntax
 

00:02:51.599 --> 00:02:52.790 align:start position:0%
are those that produce abstract syntax
trees

00:02:52.790 --> 00:02:52.800 align:start position:0%
trees
 

00:02:52.800 --> 00:02:54.910 align:start position:0%
trees
directly<00:02:53.800><c> uh</c><00:02:54.000><c> so</c><00:02:54.239><c> what's</c><00:02:54.440><c> the</c><00:02:54.599><c> difference</c>

00:02:54.910 --> 00:02:54.920 align:start position:0%
directly uh so what's the difference
 

00:02:54.920 --> 00:02:58.229 align:start position:0%
directly uh so what's the difference
between<00:02:55.640><c> concrete</c><00:02:56.200><c> syntax</c><00:02:57.200><c> and</c><00:02:57.800><c> Abstract</c>

00:02:58.229 --> 00:02:58.239 align:start position:0%
between concrete syntax and Abstract
 

00:02:58.239 --> 00:03:01.110 align:start position:0%
between concrete syntax and Abstract
syntax<00:02:58.800><c> well</c><00:02:59.440><c> concrete</c><00:03:00.040><c> syntax</c><00:03:00.800><c> as</c><00:03:00.920><c> you</c><00:03:01.000><c> can</c>

00:03:01.110 --> 00:03:01.120 align:start position:0%
syntax well concrete syntax as you can
 

00:03:01.120 --> 00:03:03.070 align:start position:0%
syntax well concrete syntax as you can
see<00:03:01.360><c> on</c><00:03:01.519><c> this</c><00:03:01.720><c> slide</c><00:03:02.400><c> is</c><00:03:02.519><c> a</c><00:03:02.680><c> complete</c>

00:03:03.070 --> 00:03:03.080 align:start position:0%
see on this slide is a complete
 

00:03:03.080 --> 00:03:05.030 align:start position:0%
see on this slide is a complete
representation<00:03:03.720><c> of</c><00:03:03.840><c> the</c><00:03:03.920><c> source</c><00:03:04.280><c> code</c><00:03:04.879><c> it</c>

00:03:05.030 --> 00:03:05.040 align:start position:0%
representation of the source code it
 

00:03:05.040 --> 00:03:06.990 align:start position:0%
representation of the source code it
includes<00:03:05.519><c> every</c><00:03:05.879><c> character</c><00:03:06.480><c> every</c><00:03:06.680><c> bit</c><00:03:06.799><c> of</c>

00:03:06.990 --> 00:03:07.000 align:start position:0%
includes every character every bit of
 

00:03:07.000 --> 00:03:10.149 align:start position:0%
includes every character every bit of
Whit<00:03:07.319><c> space</c><00:03:08.159><c> every</c><00:03:08.720><c> comment</c><00:03:09.720><c> it's</c><00:03:09.920><c> like</c>

00:03:10.149 --> 00:03:10.159 align:start position:0%
Whit space every comment it's like
 

00:03:10.159 --> 00:03:11.910 align:start position:0%
Whit space every comment it's like
having<00:03:10.560><c> as</c><00:03:10.640><c> I</c><00:03:10.799><c> say</c><00:03:11.080><c> like</c><00:03:11.280><c> having</c><00:03:11.440><c> the</c><00:03:11.560><c> full</c>

00:03:11.910 --> 00:03:11.920 align:start position:0%
having as I say like having the full
 

00:03:11.920 --> 00:03:13.910 align:start position:0%
having as I say like having the full
book<00:03:12.920><c> like</c><00:03:13.080><c> a</c>

00:03:13.910 --> 00:03:13.920 align:start position:0%
book like a
 

00:03:13.920 --> 00:03:17.589 align:start position:0%
book like a
PDF<00:03:14.920><c> uh</c><00:03:15.080><c> whereas</c><00:03:15.319><c> an</c><00:03:15.519><c> abstract</c><00:03:16.040><c> syntax</c>

00:03:17.589 --> 00:03:17.599 align:start position:0%
PDF uh whereas an abstract syntax
 

00:03:17.599 --> 00:03:20.910 align:start position:0%
PDF uh whereas an abstract syntax
tree<00:03:18.599><c> is</c><00:03:18.959><c> a</c><00:03:19.120><c> simplified</c><00:03:19.680><c> tree</c><00:03:20.040><c> representation</c>

00:03:20.910 --> 00:03:20.920 align:start position:0%
tree is a simplified tree representation
 

00:03:20.920 --> 00:03:24.070 align:start position:0%
tree is a simplified tree representation
so<00:03:21.159><c> it</c><00:03:21.280><c> doesn't</c><00:03:21.599><c> include</c><00:03:22.360><c> wh</c><00:03:22.680><c> space</c><00:03:23.159><c> and</c><00:03:23.480><c> equal</c>

00:03:24.070 --> 00:03:24.080 align:start position:0%
so it doesn't include wh space and equal
 

00:03:24.080 --> 00:03:27.550 align:start position:0%
so it doesn't include wh space and equal
signs<00:03:24.680><c> and</c><00:03:25.319><c> and</c><00:03:26.000><c> punctuation</c><00:03:27.000><c> it's</c><00:03:27.239><c> just</c><00:03:27.400><c> got</c>

00:03:27.550 --> 00:03:27.560 align:start position:0%
signs and and punctuation it's just got
 

00:03:27.560 --> 00:03:28.750 align:start position:0%
signs and and punctuation it's just got
the<00:03:27.720><c> essential</c>

00:03:28.750 --> 00:03:28.760 align:start position:0%
the essential
 

00:03:28.760 --> 00:03:31.429 align:start position:0%
the essential
details<00:03:29.840><c> like</c><00:03:30.000><c> if</c><00:03:30.080><c> you</c><00:03:30.159><c> were</c><00:03:30.319><c> reading</c><00:03:30.760><c> the</c><00:03:31.239><c> the</c>

00:03:31.429 --> 00:03:31.439 align:start position:0%
details like if you were reading the the
 

00:03:31.439 --> 00:03:33.030 align:start position:0%
details like if you were reading the the
plot<00:03:31.720><c> of</c><00:03:31.799><c> a</c><00:03:31.920><c> book</c><00:03:32.200><c> but</c><00:03:32.319><c> you</c><00:03:32.439><c> didn't</c><00:03:32.760><c> actually</c>

00:03:33.030 --> 00:03:33.040 align:start position:0%
plot of a book but you didn't actually
 

00:03:33.040 --> 00:03:34.550 align:start position:0%
plot of a book but you didn't actually
have<00:03:33.239><c> the</c>

00:03:34.550 --> 00:03:34.560 align:start position:0%
have the
 

00:03:34.560 --> 00:03:37.710 align:start position:0%
have the
text<00:03:35.560><c> so</c><00:03:35.920><c> here's</c><00:03:36.120><c> an</c><00:03:36.319><c> example</c><00:03:36.840><c> of</c><00:03:36.959><c> a</c><00:03:37.120><c> contract</c>

00:03:37.710 --> 00:03:37.720 align:start position:0%
text so here's an example of a contract
 

00:03:37.720 --> 00:03:40.550 align:start position:0%
text so here's an example of a contract
of<00:03:37.840><c> a</c><00:03:37.959><c> concrete</c><00:03:38.480><c> syntax</c><00:03:38.959><c> tree</c><00:03:39.959><c> so</c><00:03:40.159><c> we've</c><00:03:40.319><c> got</c><00:03:40.439><c> a</c>

00:03:40.550 --> 00:03:40.560 align:start position:0%
of a concrete syntax tree so we've got a
 

00:03:40.560 --> 00:03:43.309 align:start position:0%
of a concrete syntax tree so we've got a
simple<00:03:40.920><c> variable</c><00:03:41.400><c> declaration</c><00:03:42.319><c> here</c><00:03:43.080><c> and</c>

00:03:43.309 --> 00:03:43.319 align:start position:0%
simple variable declaration here and
 

00:03:43.319 --> 00:03:44.830 align:start position:0%
simple variable declaration here and
every<00:03:43.599><c> single</c><00:03:43.959><c> element</c><00:03:44.280><c> of</c><00:03:44.360><c> the</c><00:03:44.480><c> original</c>

00:03:44.830 --> 00:03:44.840 align:start position:0%
every single element of the original
 

00:03:44.840 --> 00:03:47.630 align:start position:0%
every single element of the original
source<00:03:45.200><c> is</c><00:03:45.400><c> represented</c><00:03:46.080><c> nothing</c><00:03:46.519><c> is</c><00:03:47.159><c> removed</c>

00:03:47.630 --> 00:03:47.640 align:start position:0%
source is represented nothing is removed
 

00:03:47.640 --> 00:03:48.390 align:start position:0%
source is represented nothing is removed
or

00:03:48.390 --> 00:03:48.400 align:start position:0%
or
 

00:03:48.400 --> 00:03:50.789 align:start position:0%
or
simplified<00:03:49.400><c> now</c><00:03:49.720><c> this</c><00:03:49.840><c> is</c><00:03:50.239><c> different</c><00:03:50.519><c> from</c><00:03:50.680><c> an</c>

00:03:50.789 --> 00:03:50.799 align:start position:0%
simplified now this is different from an
 

00:03:50.799 --> 00:03:52.589 align:start position:0%
simplified now this is different from an
as<00:03:51.280><c> which</c><00:03:51.360><c> will</c><00:03:51.560><c> eliminate</c><00:03:52.000><c> some</c><00:03:52.120><c> of</c><00:03:52.280><c> these</c>

00:03:52.589 --> 00:03:52.599 align:start position:0%
as which will eliminate some of these
 

00:03:52.599 --> 00:03:54.869 align:start position:0%
as which will eliminate some of these
details<00:03:53.599><c> so</c><00:03:54.040><c> if</c><00:03:54.120><c> we</c><00:03:54.280><c> look</c><00:03:54.480><c> what</c><00:03:54.599><c> we've</c><00:03:54.760><c> got</c>

00:03:54.869 --> 00:03:54.879 align:start position:0%
details so if we look what we've got
 

00:03:54.879 --> 00:03:57.429 align:start position:0%
details so if we look what we've got
here<00:03:55.000><c> it's</c><00:03:55.120><c> a</c><00:03:55.239><c> simple</c><00:03:55.560><c> variable</c><00:03:56.439><c> declaration</c>

00:03:57.429 --> 00:03:57.439 align:start position:0%
here it's a simple variable declaration
 

00:03:57.439 --> 00:03:59.750 align:start position:0%
here it's a simple variable declaration
now<00:03:57.640><c> it</c><00:03:57.799><c> consists</c><00:03:58.280><c> of</c><00:03:58.560><c> a</c><00:03:58.799><c> type</c><00:03:59.079><c> name</c><00:03:59.519><c> which</c>

00:03:59.750 --> 00:03:59.760 align:start position:0%
now it consists of a type name which
 

00:03:59.760 --> 00:04:02.190 align:start position:0%
now it consists of a type name which
which<00:03:59.840><c> is</c><00:03:59.959><c> uint</c><00:04:00.840><c> then</c><00:04:01.000><c> some</c><00:04:01.239><c> wh</c><00:04:01.560><c> space</c><00:04:01.959><c> an</c>

00:04:02.190 --> 00:04:02.200 align:start position:0%
which is uint then some wh space an
 

00:04:02.200 --> 00:04:05.069 align:start position:0%
which is uint then some wh space an
identifier<00:04:02.959><c> some</c><00:04:03.200><c> wh</c><00:04:03.560><c> space</c><00:04:04.360><c> punctuation</c>

00:04:05.069 --> 00:04:05.079 align:start position:0%
identifier some wh space punctuation
 

00:04:05.079 --> 00:04:07.550 align:start position:0%
identifier some wh space punctuation
your<00:04:05.239><c> equal</c><00:04:05.680><c> sign</c><00:04:06.319><c> some</c><00:04:06.560><c> Whit</c><00:04:06.840><c> space</c><00:04:07.120><c> a</c><00:04:07.280><c> number</c>

00:04:07.550 --> 00:04:07.560 align:start position:0%
your equal sign some Whit space a number
 

00:04:07.560 --> 00:04:11.149 align:start position:0%
your equal sign some Whit space a number
literal<00:04:08.120><c> one</c><00:04:08.840><c> and</c><00:04:08.959><c> then</c><00:04:09.120><c> the</c>

00:04:11.149 --> 00:04:11.159 align:start position:0%
literal one and then the
 

00:04:11.159 --> 00:04:13.990 align:start position:0%
literal one and then the
semicolon<00:04:12.159><c> now</c><00:04:12.959><c> what's</c><00:04:13.200><c> crucial</c><00:04:13.519><c> to</c>

00:04:13.990 --> 00:04:14.000 align:start position:0%
semicolon now what's crucial to
 

00:04:14.000 --> 00:04:17.150 align:start position:0%
semicolon now what's crucial to
understand<00:04:14.799><c> is</c><00:04:15.040><c> that</c><00:04:15.560><c> we're</c><00:04:16.560><c> preserving</c>

00:04:17.150 --> 00:04:17.160 align:start position:0%
understand is that we're preserving
 

00:04:17.160 --> 00:04:18.949 align:start position:0%
understand is that we're preserving
every<00:04:17.400><c> single</c><00:04:17.799><c> character</c><00:04:18.239><c> in</c><00:04:18.400><c> fact</c><00:04:18.600><c> even</c><00:04:18.799><c> if</c>

00:04:18.949 --> 00:04:18.959 align:start position:0%
every single character in fact even if
 

00:04:18.959 --> 00:04:20.949 align:start position:0%
every single character in fact even if
there's<00:04:19.120><c> an</c><00:04:19.320><c> error</c><00:04:19.680><c> in</c><00:04:19.799><c> the</c><00:04:19.919><c> source</c><00:04:20.320><c> code</c>

00:04:20.949 --> 00:04:20.959 align:start position:0%
there's an error in the source code
 

00:04:20.959 --> 00:04:22.710 align:start position:0%
there's an error in the source code
you'll<00:04:21.199><c> find</c><00:04:21.440><c> it</c><00:04:21.600><c> in</c><00:04:21.680><c> the</c><00:04:21.840><c> concrete</c><00:04:22.280><c> syntax</c>

00:04:22.710 --> 00:04:22.720 align:start position:0%
you'll find it in the concrete syntax
 

00:04:22.720 --> 00:04:25.430 align:start position:0%
you'll find it in the concrete syntax
tree<00:04:23.000><c> so</c><00:04:23.199><c> why</c><00:04:23.320><c> is</c><00:04:23.479><c> this</c><00:04:24.080><c> important</c><00:04:25.080><c> well</c><00:04:25.280><c> when</c>

00:04:25.430 --> 00:04:25.440 align:start position:0%
tree so why is this important well when
 

00:04:25.440 --> 00:04:28.469 align:start position:0%
tree so why is this important well when
we're<00:04:26.040><c> developing</c><00:04:27.040><c> uh</c><00:04:27.479><c> building</c><00:04:27.919><c> developer</c>

00:04:28.469 --> 00:04:28.479 align:start position:0%
we're developing uh building developer
 

00:04:28.479 --> 00:04:31.469 align:start position:0%
we're developing uh building developer
tools<00:04:29.479><c> uh</c><00:04:29.720><c> or</c><00:04:29.919><c> transforming</c><00:04:30.680><c> code</c><00:04:31.000><c> we</c><00:04:31.199><c> often</c>

00:04:31.469 --> 00:04:31.479 align:start position:0%
tools uh or transforming code we often
 

00:04:31.479 --> 00:04:33.430 align:start position:0%
tools uh or transforming code we often
need<00:04:31.759><c> the</c><00:04:31.960><c> complete</c><00:04:32.400><c> information</c><00:04:32.960><c> so</c><00:04:33.160><c> we</c><00:04:33.280><c> can</c>

00:04:33.430 --> 00:04:33.440 align:start position:0%
need the complete information so we can
 

00:04:33.440 --> 00:04:35.749 align:start position:0%
need the complete information so we can
round<00:04:33.840><c> trip</c><00:04:34.720><c> if</c><00:04:34.840><c> we</c><00:04:34.960><c> were</c><00:04:35.160><c> just</c><00:04:35.360><c> concerned</c>

00:04:35.749 --> 00:04:35.759 align:start position:0%
round trip if we were just concerned
 

00:04:35.759 --> 00:04:37.070 align:start position:0%
round trip if we were just concerned
with<00:04:35.880><c> the</c><00:04:36.000><c> meaning</c><00:04:36.240><c> of</c><00:04:36.360><c> the</c><00:04:36.520><c> code</c><00:04:36.759><c> then</c><00:04:36.880><c> we'd</c>

00:04:37.070 --> 00:04:37.080 align:start position:0%
with the meaning of the code then we'd
 

00:04:37.080 --> 00:04:39.749 align:start position:0%
with the meaning of the code then we'd
use<00:04:37.240><c> an</c><00:04:37.360><c> abstract</c><00:04:37.840><c> syntax</c><00:04:38.280><c> tree</c><00:04:39.120><c> but</c><00:04:39.280><c> for</c><00:04:39.479><c> many</c>

00:04:39.749 --> 00:04:39.759 align:start position:0%
use an abstract syntax tree but for many
 

00:04:39.759 --> 00:04:42.189 align:start position:0%
use an abstract syntax tree but for many
tools<00:04:40.600><c> like</c><00:04:40.840><c> formatters</c><00:04:41.600><c> linters</c><00:04:42.039><c> or</c>

00:04:42.189 --> 00:04:42.199 align:start position:0%
tools like formatters linters or
 

00:04:42.199 --> 00:04:44.350 align:start position:0%
tools like formatters linters or
refactoring<00:04:42.759><c> tools</c><00:04:43.479><c> we</c><00:04:43.639><c> often</c><00:04:43.840><c> want</c><00:04:44.039><c> the</c><00:04:44.120><c> full</c>

00:04:44.350 --> 00:04:44.360 align:start position:0%
refactoring tools we often want the full
 

00:04:44.360 --> 00:04:45.909 align:start position:0%
refactoring tools we often want the full
syntactic<00:04:44.880><c> details</c><00:04:45.280><c> you</c><00:04:45.360><c> don't</c><00:04:45.479><c> want</c><00:04:45.560><c> to</c><00:04:45.680><c> lose</c>

00:04:45.909 --> 00:04:45.919 align:start position:0%
syntactic details you don't want to lose
 

00:04:45.919 --> 00:04:47.070 align:start position:0%
syntactic details you don't want to lose
comments<00:04:46.280><c> when</c><00:04:46.400><c> you're</c>

00:04:47.070 --> 00:04:47.080 align:start position:0%
comments when you're
 

00:04:47.080 --> 00:04:49.150 align:start position:0%
comments when you're
refactoring<00:04:48.080><c> uh</c><00:04:48.240><c> and</c><00:04:48.639><c> sometimes</c><00:04:48.840><c> you</c><00:04:48.919><c> want</c><00:04:49.039><c> to</c>

00:04:49.150 --> 00:04:49.160 align:start position:0%
refactoring uh and sometimes you want to
 

00:04:49.160 --> 00:04:51.990 align:start position:0%
refactoring uh and sometimes you want to
know<00:04:49.440><c> if</c><00:04:49.520><c> you've</c><00:04:49.720><c> left</c><00:04:49.960><c> two</c><00:04:50.240><c> blank</c><00:04:50.880><c> lines</c><00:04:51.880><c> uh</c>

00:04:51.990 --> 00:04:52.000 align:start position:0%
know if you've left two blank lines uh
 

00:04:52.000 --> 00:04:53.629 align:start position:0%
know if you've left two blank lines uh
and<00:04:52.080><c> you</c><00:04:52.160><c> want</c><00:04:52.280><c> to</c><00:04:52.440><c> preserve</c>

00:04:53.629 --> 00:04:53.639 align:start position:0%
and you want to preserve
 

00:04:53.639 --> 00:04:57.029 align:start position:0%
and you want to preserve
that<00:04:54.639><c> this</c><00:04:54.960><c> level</c><00:04:55.199><c> of</c><00:04:55.400><c> detail</c><00:04:56.000><c> is</c><00:04:56.240><c> great</c><00:04:56.919><c> but</c>

00:04:57.029 --> 00:04:57.039 align:start position:0%
that this level of detail is great but
 

00:04:57.039 --> 00:04:58.909 align:start position:0%
that this level of detail is great but
it's<00:04:57.240><c> also</c><00:04:57.520><c> challenging</c><00:04:58.000><c> it's</c><00:04:58.320><c> quite</c>

00:04:58.909 --> 00:04:58.919 align:start position:0%
it's also challenging it's quite
 

00:04:58.919 --> 00:05:01.469 align:start position:0%
it's also challenging it's quite
difficult<00:04:59.199><c> to</c><00:04:59.840><c> process</c><00:05:00.360><c> this</c><00:05:01.080><c> on</c><00:05:01.199><c> the</c><00:05:01.320><c> one</c>

00:05:01.469 --> 00:05:01.479 align:start position:0%
difficult to process this on the one
 

00:05:01.479 --> 00:05:03.590 align:start position:0%
difficult to process this on the one
hand<00:05:01.680><c> we</c><00:05:01.800><c> have</c><00:05:01.960><c> complete</c><00:05:02.440><c> information</c><00:05:03.440><c> but</c>

00:05:03.590 --> 00:05:03.600 align:start position:0%
hand we have complete information but
 

00:05:03.600 --> 00:05:05.270 align:start position:0%
hand we have complete information but
working<00:05:03.919><c> with</c><00:05:04.120><c> detailed</c><00:05:04.600><c> trees</c><00:05:04.919><c> can</c><00:05:05.080><c> be</c>

00:05:05.270 --> 00:05:05.280 align:start position:0%
working with detailed trees can be
 

00:05:05.280 --> 00:05:06.629 align:start position:0%
working with detailed trees can be
complex<00:05:05.680><c> and</c><00:05:05.840><c> that's</c><00:05:06.000><c> the</c><00:05:06.120><c> challenge</c><00:05:06.479><c> that</c>

00:05:06.629 --> 00:05:06.639 align:start position:0%
complex and that's the challenge that
 

00:05:06.639 --> 00:05:10.189 align:start position:0%
complex and that's the challenge that
the<00:05:06.759><c> query</c><00:05:07.120><c> API</c><00:05:08.120><c> solves</c><00:05:09.120><c> so</c><00:05:09.320><c> from</c><00:05:09.520><c> now</c><00:05:09.720><c> on</c><00:05:10.000><c> I'll</c>

00:05:10.189 --> 00:05:10.199 align:start position:0%
the query API solves so from now on I'll
 

00:05:10.199 --> 00:05:12.670 align:start position:0%
the query API solves so from now on I'll
admit<00:05:10.520><c> trivia</c><00:05:10.919><c> nodes</c><00:05:11.240><c> and</c><00:05:11.440><c> white</c><00:05:11.759><c> space</c><00:05:12.520><c> from</c>

00:05:12.670 --> 00:05:12.680 align:start position:0%
admit trivia nodes and white space from
 

00:05:12.680 --> 00:05:15.550 align:start position:0%
admit trivia nodes and white space from
the<00:05:12.960><c> examples</c><00:05:13.960><c> they're</c><00:05:14.160><c> still</c><00:05:14.479><c> there</c><00:05:14.759><c> but</c><00:05:15.400><c> you</c>

00:05:15.550 --> 00:05:15.560 align:start position:0%
the examples they're still there but you
 

00:05:15.560 --> 00:05:19.350 align:start position:0%
the examples they're still there but you
I<00:05:15.680><c> don't</c><00:05:15.840><c> need</c><00:05:16.000><c> to</c><00:05:16.080><c> show</c><00:05:16.680><c> them</c><00:05:18.039><c> so</c><00:05:19.039><c> let's</c><00:05:19.240><c> look</c>

00:05:19.350 --> 00:05:19.360 align:start position:0%
I don't need to show them so let's look
 

00:05:19.360 --> 00:05:22.590 align:start position:0%
I don't need to show them so let's look
at<00:05:19.479><c> a</c><00:05:19.600><c> slightly</c><00:05:20.039><c> more</c><00:05:20.639><c> complex</c><00:05:21.400><c> example</c><00:05:22.400><c> this</c>

00:05:22.590 --> 00:05:22.600 align:start position:0%
at a slightly more complex example this
 

00:05:22.600 --> 00:05:24.790 align:start position:0%
at a slightly more complex example this
definition<00:05:23.280><c> shows</c><00:05:23.880><c> how</c><00:05:24.160><c> different</c><00:05:24.400><c> elements</c>

00:05:24.790 --> 00:05:24.800 align:start position:0%
definition shows how different elements
 

00:05:24.800 --> 00:05:26.070 align:start position:0%
definition shows how different elements
Nest<00:05:25.080><c> within</c><00:05:25.400><c> each</c>

00:05:26.070 --> 00:05:26.080 align:start position:0%
Nest within each
 

00:05:26.080 --> 00:05:28.510 align:start position:0%
Nest within each
other<00:05:27.080><c> uh</c><00:05:27.280><c> and</c><00:05:27.479><c> once</c><00:05:27.720><c> again</c><00:05:27.919><c> notice</c><00:05:28.280><c> how</c>

00:05:28.510 --> 00:05:28.520 align:start position:0%
other uh and once again notice how
 

00:05:28.520 --> 00:05:31.150 align:start position:0%
other uh and once again notice how
everything<00:05:28.880><c> is</c><00:05:29.160><c> preserved</c><00:05:29.840><c> here</c><00:05:30.560><c> we've</c><00:05:30.759><c> got</c><00:05:30.960><c> a</c>

00:05:31.150 --> 00:05:31.160 align:start position:0%
everything is preserved here we've got a
 

00:05:31.160 --> 00:05:32.990 align:start position:0%
everything is preserved here we've got a
function<00:05:31.639><c> definition</c><00:05:32.199><c> we've</c><00:05:32.360><c> got</c><00:05:32.600><c> the</c><00:05:32.840><c> the</c>

00:05:32.990 --> 00:05:33.000 align:start position:0%
function definition we've got the the
 

00:05:33.000 --> 00:05:35.309 align:start position:0%
function definition we've got the the
keyword<00:05:33.560><c> function</c><00:05:34.080><c> the</c><00:05:34.199><c> identifier</c><00:05:35.120><c> we've</c>

00:05:35.309 --> 00:05:35.319 align:start position:0%
keyword function the identifier we've
 

00:05:35.319 --> 00:05:36.749 align:start position:0%
keyword function the identifier we've
got<00:05:35.400><c> a</c><00:05:35.520><c> parameter</c><00:05:35.919><c> list</c><00:05:36.199><c> which</c><00:05:36.319><c> in</c><00:05:36.440><c> this</c><00:05:36.600><c> case</c>

00:05:36.749 --> 00:05:36.759 align:start position:0%
got a parameter list which in this case
 

00:05:36.759 --> 00:05:39.029 align:start position:0%
got a parameter list which in this case
is<00:05:36.919><c> empty</c><00:05:37.240><c> but</c><00:05:37.360><c> we</c><00:05:37.520><c> still</c><00:05:38.120><c> preserve</c><00:05:38.479><c> it</c><00:05:38.919><c> and</c>

00:05:39.029 --> 00:05:39.039 align:start position:0%
is empty but we still preserve it and
 

00:05:39.039 --> 00:05:40.710 align:start position:0%
is empty but we still preserve it and
then<00:05:39.199><c> nested</c><00:05:39.600><c> in</c><00:05:39.720><c> that</c><00:05:39.880><c> is</c><00:05:40.000><c> a</c><00:05:40.120><c> block</c><00:05:40.360><c> and</c><00:05:40.479><c> a</c>

00:05:40.710 --> 00:05:40.720 align:start position:0%
then nested in that is a block and a
 

00:05:40.720 --> 00:05:43.990 align:start position:0%
then nested in that is a block and a
return<00:05:41.000><c> statement</c><00:05:42.000><c> and</c><00:05:42.160><c> so</c>

00:05:43.990 --> 00:05:44.000 align:start position:0%
return statement and so
 

00:05:44.000 --> 00:05:48.189 align:start position:0%
return statement and so
on<00:05:45.000><c> now</c><00:05:45.280><c> this</c><00:05:45.400><c> level</c><00:05:45.680><c> of</c><00:05:45.840><c> detail</c><00:05:46.520><c> allows</c><00:05:46.919><c> us</c><00:05:47.240><c> to</c>

00:05:48.189 --> 00:05:48.199 align:start position:0%
on now this level of detail allows us to
 

00:05:48.199 --> 00:05:50.469 align:start position:0%
on now this level of detail allows us to
maintain<00:05:49.080><c> complete</c><00:05:49.400><c> Source</c><00:05:49.720><c> Fidelity</c><00:05:50.240><c> as</c><00:05:50.360><c> I</c>

00:05:50.469 --> 00:05:50.479 align:start position:0%
maintain complete Source Fidelity as I
 

00:05:50.479 --> 00:05:52.469 align:start position:0%
maintain complete Source Fidelity as I
said<00:05:50.639><c> if</c><00:05:50.720><c> we're</c><00:05:50.880><c> going</c><00:05:51.000><c> to</c><00:05:51.199><c> roundtrip</c><00:05:52.199><c> we</c><00:05:52.319><c> can</c>

00:05:52.469 --> 00:05:52.479 align:start position:0%
said if we're going to roundtrip we can
 

00:05:52.479 --> 00:05:55.350 align:start position:0%
said if we're going to roundtrip we can
track<00:05:52.800><c> precise</c><00:05:53.240><c> cord</c><00:05:53.800><c> code</c><00:05:54.080><c> locations</c><00:05:55.080><c> so</c><00:05:55.280><c> if</c>

00:05:55.350 --> 00:05:55.360 align:start position:0%
track precise cord code locations so if
 

00:05:55.360 --> 00:05:57.350 align:start position:0%
track precise cord code locations so if
you<00:05:55.479><c> want</c><00:05:55.600><c> to</c><00:05:55.720><c> do</c><00:05:56.039><c> error</c>

00:05:57.350 --> 00:05:57.360 align:start position:0%
you want to do error
 

00:05:57.360 --> 00:06:01.270 align:start position:0%
you want to do error
reporting<00:05:58.360><c> uh</c><00:05:58.759><c> it</c><00:05:59.199><c> handles</c><00:05:59.720><c> formatting</c>

00:06:01.270 --> 00:06:01.280 align:start position:0%
reporting uh it handles formatting
 

00:06:01.280 --> 00:06:04.430 align:start position:0%
reporting uh it handles formatting
preservation<00:06:02.720><c> and</c><00:06:03.720><c> when</c><00:06:03.919><c> you're</c><00:06:04.120><c> Building</c>

00:06:04.430 --> 00:06:04.440 align:start position:0%
preservation and when you're Building
 

00:06:04.440 --> 00:06:06.150 align:start position:0%
preservation and when you're Building
Development<00:06:04.800><c> tools</c><00:06:05.160><c> this</c><00:06:05.319><c> detailed</c>

00:06:06.150 --> 00:06:06.160 align:start position:0%
Development tools this detailed
 

00:06:06.160 --> 00:06:08.150 align:start position:0%
Development tools this detailed
structure<00:06:06.960><c> is</c>

00:06:08.150 --> 00:06:08.160 align:start position:0%
structure is
 

00:06:08.160 --> 00:06:10.189 align:start position:0%
structure is
essential<00:06:09.160><c> for</c><00:06:09.479><c> certain</c><00:06:09.800><c> class</c><00:06:10.039><c> of</c>

00:06:10.189 --> 00:06:10.199 align:start position:0%
essential for certain class of
 

00:06:10.199 --> 00:06:11.990 align:start position:0%
essential for certain class of
development

00:06:11.990 --> 00:06:12.000 align:start position:0%
development
 

00:06:12.000 --> 00:06:15.350 align:start position:0%
development
tools<00:06:13.000><c> so</c><00:06:13.360><c> to</c><00:06:13.560><c> emphasize</c><00:06:14.039><c> this</c><00:06:14.240><c> point</c><00:06:15.120><c> and</c><00:06:15.240><c> I</c>

00:06:15.350 --> 00:06:15.360 align:start position:0%
tools so to emphasize this point and I
 

00:06:15.360 --> 00:06:17.230 align:start position:0%
tools so to emphasize this point and I
know<00:06:15.720><c> I'm</c><00:06:15.880><c> being</c><00:06:16.280><c> repetitive</c><00:06:16.800><c> here</c><00:06:16.960><c> I</c><00:06:17.080><c> really</c>

00:06:17.230 --> 00:06:17.240 align:start position:0%
know I'm being repetitive here I really
 

00:06:17.240 --> 00:06:19.150 align:start position:0%
know I'm being repetitive here I really
want<00:06:17.319><c> to</c><00:06:17.479><c> make</c><00:06:17.680><c> this</c><00:06:17.880><c> point</c><00:06:18.199><c> though</c><00:06:18.840><c> why</c><00:06:18.960><c> do</c><00:06:19.039><c> we</c>

00:06:19.150 --> 00:06:19.160 align:start position:0%
want to make this point though why do we
 

00:06:19.160 --> 00:06:22.870 align:start position:0%
want to make this point though why do we
need<00:06:19.280><c> a</c><00:06:19.440><c> concrete</c><00:06:19.840><c> syntax</c><00:06:20.560><c> tree</c><00:06:21.560><c> well</c><00:06:22.319><c> we</c>

00:06:22.870 --> 00:06:22.880 align:start position:0%
need a concrete syntax tree well we
 

00:06:22.880 --> 00:06:25.790 align:start position:0%
need a concrete syntax tree well we
really<00:06:23.240><c> want</c><00:06:23.520><c> to</c><00:06:24.039><c> in</c><00:06:24.199><c> a</c><00:06:24.360><c> lot</c><00:06:24.560><c> of</c><00:06:24.720><c> tools</c><00:06:25.599><c> for</c>

00:06:25.790 --> 00:06:25.800 align:start position:0%
really want to in a lot of tools for
 

00:06:25.800 --> 00:06:29.589 align:start position:0%
really want to in a lot of tools for
example<00:06:26.120><c> in</c><00:06:26.720><c> pra</c><00:06:27.720><c> uh</c><00:06:27.919><c> which</c><00:06:28.639><c> is</c><00:06:28.880><c> now</c><00:06:29.240><c> used</c>

00:06:29.589 --> 00:06:29.599 align:start position:0%
example in pra uh which is now used
 

00:06:29.599 --> 00:06:31.790 align:start position:0%
example in pra uh which is now used
using<00:06:29.919><c> slang</c><00:06:30.440><c> by</c><00:06:30.560><c> the</c><00:06:30.680><c> way</c><00:06:31.080><c> using</c><00:06:31.440><c> this</c>

00:06:31.790 --> 00:06:31.800 align:start position:0%
using slang by the way using this
 

00:06:31.800 --> 00:06:34.830 align:start position:0%
using slang by the way using this
technology<00:06:32.800><c> uh</c><00:06:32.960><c> pretty</c><00:06:33.199><c> a</c><00:06:33.560><c> solidity</c><00:06:34.560><c> we</c><00:06:34.720><c> want</c>

00:06:34.830 --> 00:06:34.840 align:start position:0%
technology uh pretty a solidity we want
 

00:06:34.840 --> 00:06:36.670 align:start position:0%
technology uh pretty a solidity we want
to<00:06:35.000><c> make</c><00:06:35.199><c> sure</c><00:06:35.479><c> that</c><00:06:35.639><c> we</c><00:06:35.759><c> can</c><00:06:35.919><c> preserve</c><00:06:36.440><c> every</c>

00:06:36.670 --> 00:06:36.680 align:start position:0%
to make sure that we can preserve every
 

00:06:36.680 --> 00:06:39.270 align:start position:0%
to make sure that we can preserve every
single<00:06:37.120><c> character</c><00:06:37.840><c> especially</c><00:06:38.319><c> comments</c><00:06:39.080><c> for</c>

00:06:39.270 --> 00:06:39.280 align:start position:0%
single character especially comments for
 

00:06:39.280 --> 00:06:40.790 align:start position:0%
single character especially comments for
example<00:06:39.680><c> you</c><00:06:39.800><c> might</c><00:06:40.000><c> have</c><00:06:40.120><c> a</c><00:06:40.240><c> tool</c><00:06:40.479><c> that</c><00:06:40.599><c> wants</c>

00:06:40.790 --> 00:06:40.800 align:start position:0%
example you might have a tool that wants
 

00:06:40.800 --> 00:06:43.390 align:start position:0%
example you might have a tool that wants
to<00:06:40.919><c> deal</c><00:06:41.199><c> with</c><00:06:41.400><c> comments</c><00:06:42.280><c> wants</c><00:06:42.520><c> to</c><00:06:42.840><c> encode</c>

00:06:43.390 --> 00:06:43.400 align:start position:0%
to deal with comments wants to encode
 

00:06:43.400 --> 00:06:45.070 align:start position:0%
to deal with comments wants to encode
validation<00:06:44.000><c> information</c><00:06:44.479><c> in</c><00:06:44.599><c> a</c><00:06:44.800><c> special</c>

00:06:45.070 --> 00:06:45.080 align:start position:0%
validation information in a special
 

00:06:45.080 --> 00:06:46.870 align:start position:0%
validation information in a special
comment<00:06:45.360><c> format</c><00:06:46.319><c> not</c><00:06:46.520><c> like</c><00:06:46.720><c> the</c>

00:06:46.870 --> 00:06:46.880 align:start position:0%
comment format not like the
 

00:06:46.880 --> 00:06:49.070 align:start position:0%
comment format not like the
documentation<00:06:47.639><c> comment</c><00:06:48.520><c> but</c><00:06:48.680><c> your</c><00:06:48.840><c> own</c>

00:06:49.070 --> 00:06:49.080 align:start position:0%
documentation comment but your own
 

00:06:49.080 --> 00:06:50.550 align:start position:0%
documentation comment but your own
special<00:06:49.400><c> comment</c><00:06:49.720><c> format</c><00:06:50.080><c> so</c><00:06:50.199><c> you</c><00:06:50.280><c> want</c><00:06:50.400><c> to</c>

00:06:50.550 --> 00:06:50.560 align:start position:0%
special comment format so you want to
 

00:06:50.560 --> 00:06:52.830 align:start position:0%
special comment format so you want to
preserve<00:06:50.960><c> those</c>

00:06:52.830 --> 00:06:52.840 align:start position:0%
preserve those
 

00:06:52.840 --> 00:06:56.790 align:start position:0%
preserve those
comments<00:06:53.840><c> an</c><00:06:54.039><c> as</c><00:06:54.800><c> on</c><00:06:54.919><c> the</c><00:06:55.039><c> other</c><00:06:55.280><c> hand</c><00:06:56.280><c> is</c>

00:06:56.790 --> 00:06:56.800 align:start position:0%
comments an as on the other hand is
 

00:06:56.800 --> 00:06:58.390 align:start position:0%
comments an as on the other hand is
focusing<00:06:57.199><c> on</c><00:06:57.360><c> the</c><00:06:57.520><c> essential</c><00:06:57.960><c> structure</c>

00:06:58.390 --> 00:06:58.400 align:start position:0%
focusing on the essential structure
 

00:06:58.400 --> 00:07:00.790 align:start position:0%
focusing on the essential structure
which<00:06:58.520><c> is</c><00:06:58.680><c> good</c><00:06:58.840><c> for</c><00:06:59.080><c> seman</c><00:06:59.840><c> processing</c>

00:07:00.790 --> 00:07:00.800 align:start position:0%
which is good for seman processing
 

00:07:00.800 --> 00:07:02.110 align:start position:0%
which is good for seman processing
doesn't<00:07:01.160><c> contain</c><00:07:01.479><c> the</c><00:07:01.599><c> formatting</c>

00:07:02.110 --> 00:07:02.120 align:start position:0%
doesn't contain the formatting
 

00:07:02.120 --> 00:07:04.390 align:start position:0%
doesn't contain the formatting
information<00:07:03.120><c> simplifies</c>

00:07:04.390 --> 00:07:04.400 align:start position:0%
information simplifies
 

00:07:04.400 --> 00:07:06.790 align:start position:0%
information simplifies
expressions<00:07:05.400><c> and</c><00:07:05.639><c> it</c><00:07:05.800><c> adits</c><00:07:06.080><c> all</c><00:07:06.319><c> comments</c><00:07:06.639><c> in</c>

00:07:06.790 --> 00:07:06.800 align:start position:0%
expressions and it adits all comments in
 

00:07:06.800 --> 00:07:12.670 align:start position:0%
expressions and it adits all comments in
white

00:07:12.670 --> 00:07:12.680 align:start position:0%
 
 

00:07:12.680 --> 00:07:15.070 align:start position:0%
 
space<00:07:13.680><c> so</c><00:07:13.960><c> now</c><00:07:14.120><c> that</c><00:07:14.240><c> we</c><00:07:14.639><c> understand</c><00:07:14.840><c> what</c><00:07:14.919><c> a</c>

00:07:15.070 --> 00:07:15.080 align:start position:0%
space so now that we understand what a
 

00:07:15.080 --> 00:07:17.749 align:start position:0%
space so now that we understand what a
CST<00:07:15.520><c> is</c><00:07:15.680><c> for</c><00:07:16.400><c> let's</c><00:07:16.840><c> look</c><00:07:17.000><c> at</c><00:07:17.160><c> how</c><00:07:17.360><c> you</c><00:07:17.520><c> might</c>

00:07:17.749 --> 00:07:17.759 align:start position:0%
CST is for let's look at how you might
 

00:07:17.759 --> 00:07:20.909 align:start position:0%
CST is for let's look at how you might
traditionally<00:07:18.479><c> process</c><00:07:18.840><c> a</c><00:07:19.400><c> CST</c><00:07:20.400><c> so</c><00:07:20.680><c> this</c><00:07:20.759><c> is</c>

00:07:20.909 --> 00:07:20.919 align:start position:0%
traditionally process a CST so this is
 

00:07:20.919 --> 00:07:23.710 align:start position:0%
traditionally process a CST so this is
the<00:07:21.120><c> kind</c><00:07:21.280><c> of</c><00:07:21.479><c> code</c><00:07:21.800><c> that</c><00:07:21.960><c> you</c><00:07:22.360><c> often</c><00:07:22.639><c> see</c><00:07:23.560><c> a</c>

00:07:23.710 --> 00:07:23.720 align:start position:0%
the kind of code that you often see a
 

00:07:23.720 --> 00:07:25.950 align:start position:0%
the kind of code that you often see a
lot<00:07:24.000><c> of</c><00:07:25.000><c> you</c><00:07:25.160><c> know</c><00:07:25.319><c> what</c><00:07:25.440><c> it's</c><00:07:25.639><c> like</c><00:07:25.800><c> to</c>

00:07:25.950 --> 00:07:25.960 align:start position:0%
lot of you know what it's like to
 

00:07:25.960 --> 00:07:28.390 align:start position:0%
lot of you know what it's like to
Traverse<00:07:26.360><c> a</c><00:07:26.520><c> tree</c><00:07:27.000><c> especially</c><00:07:27.400><c> a</c><00:07:27.560><c> very</c><00:07:27.840><c> deep</c>

00:07:28.390 --> 00:07:28.400 align:start position:0%
Traverse a tree especially a very deep
 

00:07:28.400 --> 00:07:29.990 align:start position:0%
Traverse a tree especially a very deep
and<00:07:28.639><c> complex</c><00:07:29.080><c> tree</c><00:07:29.319><c> which</c><00:07:29.520><c> which</c><00:07:29.599><c> is</c><00:07:29.759><c> what</c><00:07:29.840><c> you</c>

00:07:29.990 --> 00:07:30.000 align:start position:0%
and complex tree which which is what you
 

00:07:30.000 --> 00:07:31.869 align:start position:0%
and complex tree which which is what you
typically<00:07:30.360><c> get</c><00:07:30.560><c> out</c><00:07:30.680><c> of</c><00:07:30.800><c> a</c>

00:07:31.869 --> 00:07:31.879 align:start position:0%
typically get out of a
 

00:07:31.879 --> 00:07:35.230 align:start position:0%
typically get out of a
compiler<00:07:32.879><c> uh</c><00:07:33.160><c> and</c><00:07:33.280><c> it's</c><00:07:33.440><c> not</c><00:07:34.120><c> pretty</c><00:07:35.120><c> what</c>

00:07:35.230 --> 00:07:35.240 align:start position:0%
compiler uh and it's not pretty what
 

00:07:35.240 --> 00:07:36.670 align:start position:0%
compiler uh and it's not pretty what
we're<00:07:35.400><c> trying</c><00:07:35.599><c> to</c><00:07:35.759><c> do</c><00:07:36.000><c> is</c><00:07:36.199><c> actually</c><00:07:36.479><c> quite</c>

00:07:36.670 --> 00:07:36.680 align:start position:0%
we're trying to do is actually quite
 

00:07:36.680 --> 00:07:37.990 align:start position:0%
we're trying to do is actually quite
simple<00:07:37.000><c> we</c><00:07:37.120><c> just</c><00:07:37.199><c> want</c><00:07:37.360><c> to</c><00:07:37.520><c> find</c><00:07:37.720><c> all</c><00:07:37.879><c> the</c>

00:07:37.990 --> 00:07:38.000 align:start position:0%
simple we just want to find all the
 

00:07:38.000 --> 00:07:40.510 align:start position:0%
simple we just want to find all the
variable<00:07:38.520><c> declarations</c><00:07:39.520><c> in</c><00:07:39.720><c> some</c><00:07:39.919><c> solidity</c>

00:07:40.510 --> 00:07:40.520 align:start position:0%
variable declarations in some solidity
 

00:07:40.520 --> 00:07:43.070 align:start position:0%
variable declarations in some solidity
code<00:07:41.360><c> but</c><00:07:41.560><c> look</c><00:07:41.720><c> at</c><00:07:41.919><c> what</c><00:07:42.039><c> we</c><00:07:42.199><c> have</c><00:07:42.319><c> to</c>

00:07:43.070 --> 00:07:43.080 align:start position:0%
code but look at what we have to
 

00:07:43.080 --> 00:07:45.469 align:start position:0%
code but look at what we have to
do<00:07:44.080><c> so</c><00:07:44.440><c> first</c><00:07:44.639><c> of</c><00:07:44.800><c> all</c><00:07:44.960><c> we're</c><00:07:45.080><c> writing</c><00:07:45.319><c> a</c>

00:07:45.469 --> 00:07:45.479 align:start position:0%
do so first of all we're writing a
 

00:07:45.479 --> 00:07:47.430 align:start position:0%
do so first of all we're writing a
recursive<00:07:46.000><c> function</c><00:07:46.599><c> we</c><00:07:46.720><c> need</c><00:07:46.919><c> recursion</c>

00:07:47.430 --> 00:07:47.440 align:start position:0%
recursive function we need recursion
 

00:07:47.440 --> 00:07:48.629 align:start position:0%
recursive function we need recursion
because<00:07:47.599><c> we</c><00:07:47.720><c> don't</c><00:07:47.879><c> know</c><00:07:48.039><c> how</c><00:07:48.199><c> deep</c><00:07:48.360><c> in</c><00:07:48.479><c> the</c>

00:07:48.629 --> 00:07:48.639 align:start position:0%
because we don't know how deep in the
 

00:07:48.639 --> 00:07:51.510 align:start position:0%
because we don't know how deep in the
tree<00:07:49.240><c> it</c><00:07:49.400><c> is</c><00:07:50.360><c> could</c><00:07:50.520><c> be</c><00:07:50.639><c> at</c><00:07:50.759><c> the</c><00:07:50.879><c> contract</c>

00:07:51.510 --> 00:07:51.520 align:start position:0%
tree it is could be at the contract
 

00:07:51.520 --> 00:07:54.270 align:start position:0%
tree it is could be at the contract
inside<00:07:51.800><c> a</c><00:07:51.960><c> function</c><00:07:52.479><c> inside</c><00:07:52.759><c> a</c><00:07:52.879><c> block</c>

00:07:54.270 --> 00:07:54.280 align:start position:0%
inside a function inside a block
 

00:07:54.280 --> 00:07:57.869 align:start position:0%
inside a function inside a block
anywhere<00:07:55.280><c> and</c><00:07:55.479><c> then</c><00:07:55.879><c> when</c><00:07:56.039><c> we</c><00:07:56.199><c> find</c><00:07:56.479><c> each</c><00:07:56.879><c> node</c>

00:07:57.869 --> 00:07:57.879 align:start position:0%
anywhere and then when we find each node
 

00:07:57.879 --> 00:08:00.469 align:start position:0%
anywhere and then when we find each node
we've<00:07:58.159><c> got</c><00:07:58.319><c> to</c><00:07:58.560><c> manually</c><00:07:58.960><c> check</c><00:07:59.159><c> its</c><00:07:59.599><c> kind</c>

00:08:00.469 --> 00:08:00.479 align:start position:0%
we've got to manually check its kind
 

00:08:00.479 --> 00:08:03.230 align:start position:0%
we've got to manually check its kind
we've<00:08:00.720><c> got</c><00:08:00.919><c> to</c><00:08:01.319><c> search</c><00:08:01.759><c> through</c><00:08:02.159><c> the</c><00:08:03.039><c> uh</c>

00:08:03.230 --> 00:08:03.240 align:start position:0%
we've got to search through the uh
 

00:08:03.240 --> 00:08:05.189 align:start position:0%
we've got to search through the uh
children<00:08:04.120><c> we've</c><00:08:04.280><c> got</c><00:08:04.400><c> to</c><00:08:04.560><c> handle</c><00:08:04.879><c> all</c><00:08:05.039><c> the</c>

00:08:05.189 --> 00:08:05.199 align:start position:0%
children we've got to handle all the
 

00:08:05.199 --> 00:08:07.070 align:start position:0%
children we've got to handle all the
edge<00:08:05.599><c> cases</c><00:08:06.120><c> and</c><00:08:06.280><c> we've</c><00:08:06.440><c> got</c><00:08:06.520><c> to</c><00:08:06.639><c> manage</c><00:08:06.960><c> the</c>

00:08:07.070 --> 00:08:07.080 align:start position:0%
edge cases and we've got to manage the
 

00:08:07.080 --> 00:08:09.029 align:start position:0%
edge cases and we've got to manage the
recursion<00:08:07.680><c> stack</c><00:08:08.520><c> especially</c><00:08:08.840><c> if</c><00:08:08.919><c> you're</c>

00:08:09.029 --> 00:08:09.039 align:start position:0%
recursion stack especially if you're
 

00:08:09.039 --> 00:08:11.670 align:start position:0%
recursion stack especially if you're
threading<00:08:09.520><c> State</c><00:08:10.360><c> and</c><00:08:10.479><c> this</c><00:08:10.599><c> is</c><00:08:10.720><c> a</c><00:08:10.919><c> simple</c>

00:08:11.670 --> 00:08:11.680 align:start position:0%
threading State and this is a simple
 

00:08:11.680 --> 00:08:14.070 align:start position:0%
threading State and this is a simple
example<00:08:12.680><c> in</c><00:08:12.879><c> real</c><00:08:13.199><c> life</c><00:08:13.400><c> code</c><00:08:13.680><c> you'd</c><00:08:13.879><c> have</c><00:08:14.000><c> to</c>

00:08:14.070 --> 00:08:14.080 align:start position:0%
example in real life code you'd have to
 

00:08:14.080 --> 00:08:16.149 align:start position:0%
example in real life code you'd have to
handle<00:08:14.319><c> Eric</c><00:08:14.720><c> cases</c><00:08:15.120><c> deal</c><00:08:15.360><c> with</c><00:08:15.560><c> unexpected</c>

00:08:16.149 --> 00:08:16.159 align:start position:0%
handle Eric cases deal with unexpected
 

00:08:16.159 --> 00:08:18.189 align:start position:0%
handle Eric cases deal with unexpected
node<00:08:16.520><c> types</c><00:08:17.240><c> which</c><00:08:17.360><c> is</c><00:08:17.520><c> what</c><00:08:17.639><c> you</c><00:08:17.759><c> can</c><00:08:17.919><c> get</c><00:08:18.120><c> if</c>

00:08:18.189 --> 00:08:18.199 align:start position:0%
node types which is what you can get if
 

00:08:18.199 --> 00:08:19.790 align:start position:0%
node types which is what you can get if
you've<00:08:18.360><c> got</c><00:08:18.479><c> a</c><00:08:18.599><c> source</c><00:08:18.919><c> code</c><00:08:19.159><c> error</c><00:08:19.520><c> for</c>

00:08:19.790 --> 00:08:19.800 align:start position:0%
you've got a source code error for
 

00:08:19.800 --> 00:08:21.990 align:start position:0%
you've got a source code error for
example<00:08:20.800><c> manage</c><00:08:21.159><c> your</c><00:08:21.360><c> state</c><00:08:21.680><c> during</c>

00:08:21.990 --> 00:08:22.000 align:start position:0%
example manage your state during
 

00:08:22.000 --> 00:08:23.350 align:start position:0%
example manage your state during
traversal<00:08:22.639><c> and</c><00:08:22.759><c> if</c><00:08:22.840><c> you've</c><00:08:23.000><c> written</c><00:08:23.240><c> a</c>

00:08:23.350 --> 00:08:23.360 align:start position:0%
traversal and if you've written a
 

00:08:23.360 --> 00:08:24.990 align:start position:0%
traversal and if you've written a
visitor<00:08:23.800><c> patent</c><00:08:24.120><c> you</c><00:08:24.240><c> know</c><00:08:24.400><c> that</c><00:08:24.520><c> it's</c><00:08:24.639><c> a</c><00:08:24.800><c> pain</c>

00:08:24.990 --> 00:08:25.000 align:start position:0%
visitor patent you know that it's a pain
 

00:08:25.000 --> 00:08:27.149 align:start position:0%
visitor patent you know that it's a pain
in<00:08:25.120><c> the</c><00:08:25.240><c> ask</c><00:08:25.479><c> to</c><00:08:26.000><c> manage</c><00:08:26.360><c> your</c>

00:08:27.149 --> 00:08:27.159 align:start position:0%
in the ask to manage your
 

00:08:27.159 --> 00:08:29.149 align:start position:0%
in the ask to manage your
state<00:08:28.159><c> you've</c><00:08:28.319><c> got</c><00:08:28.400><c> to</c><00:08:28.560><c> handle</c><00:08:28.919><c> parent</c>

00:08:29.149 --> 00:08:29.159 align:start position:0%
state you've got to handle parent
 

00:08:29.159 --> 00:08:30.909 align:start position:0%
state you've got to handle parent
refence<00:08:29.720><c> es</c><00:08:29.960><c> and</c><00:08:30.039><c> you've</c><00:08:30.199><c> got</c><00:08:30.280><c> to</c><00:08:30.440><c> manage</c><00:08:30.759><c> the</c>

00:08:30.909 --> 00:08:30.919 align:start position:0%
refence es and you've got to manage the
 

00:08:30.919 --> 00:08:32.990 align:start position:0%
refence es and you've got to manage the
position<00:08:31.280><c> in</c><00:08:31.400><c> the</c><00:08:31.560><c> source</c>

00:08:32.990 --> 00:08:33.000 align:start position:0%
position in the source
 

00:08:33.000 --> 00:08:35.350 align:start position:0%
position in the source
code<00:08:34.000><c> now</c><00:08:34.200><c> the</c><00:08:34.320><c> problems</c><00:08:34.640><c> with</c><00:08:34.800><c> this</c><00:08:35.000><c> approach</c>

00:08:35.350 --> 00:08:35.360 align:start position:0%
code now the problems with this approach
 

00:08:35.360 --> 00:08:38.029 align:start position:0%
code now the problems with this approach
are<00:08:36.000><c> numerous</c><00:08:37.000><c> first</c><00:08:37.320><c> it's</c><00:08:37.560><c> incredibly</c>

00:08:38.029 --> 00:08:38.039 align:start position:0%
are numerous first it's incredibly
 

00:08:38.039 --> 00:08:39.990 align:start position:0%
are numerous first it's incredibly
verbose<00:08:38.880><c> the</c><00:08:39.000><c> amount</c><00:08:39.200><c> of</c><00:08:39.320><c> code</c><00:08:39.560><c> you</c><00:08:39.640><c> need</c><00:08:39.839><c> to</c>

00:08:39.990 --> 00:08:40.000 align:start position:0%
verbose the amount of code you need to
 

00:08:40.000 --> 00:08:42.709 align:start position:0%
verbose the amount of code you need to
write<00:08:40.200><c> to</c><00:08:40.320><c> do</c><00:08:40.479><c> even</c><00:08:40.719><c> simple</c><00:08:41.159><c> analysis</c><00:08:41.719><c> is</c>

00:08:42.709 --> 00:08:42.719 align:start position:0%
write to do even simple analysis is
 

00:08:42.719 --> 00:08:44.910 align:start position:0%
write to do even simple analysis is
substantial<00:08:43.719><c> and</c><00:08:43.839><c> the</c><00:08:43.959><c> more</c><00:08:44.159><c> code</c><00:08:44.440><c> you</c><00:08:44.640><c> write</c>

00:08:44.910 --> 00:08:44.920 align:start position:0%
substantial and the more code you write
 

00:08:44.920 --> 00:08:46.829 align:start position:0%
substantial and the more code you write
the<00:08:45.000><c> more</c><00:08:45.160><c> you</c><00:08:45.279><c> have</c><00:08:45.480><c> to</c><00:08:45.600><c> maintain</c><00:08:46.600><c> and</c><00:08:46.760><c> the</c>

00:08:46.829 --> 00:08:46.839 align:start position:0%
the more you have to maintain and the
 

00:08:46.839 --> 00:08:48.949 align:start position:0%
the more you have to maintain and the
more<00:08:47.080><c> places</c><00:08:47.399><c> there</c><00:08:47.519><c> are</c><00:08:47.640><c> for</c><00:08:47.800><c> bugs</c><00:08:48.080><c> to</c>

00:08:48.949 --> 00:08:48.959 align:start position:0%
more places there are for bugs to
 

00:08:48.959 --> 00:08:52.949 align:start position:0%
more places there are for bugs to
hide<00:08:49.959><c> uh</c><00:08:50.120><c> second</c><00:08:50.600><c> it's</c><00:08:50.839><c> Error</c><00:08:51.600><c> prone</c><00:08:52.600><c> uh</c><00:08:52.760><c> not</c>

00:08:52.949 --> 00:08:52.959 align:start position:0%
hide uh second it's Error prone uh not
 

00:08:52.959 --> 00:08:54.430 align:start position:0%
hide uh second it's Error prone uh not
only<00:08:53.240><c> because</c><00:08:53.440><c> of</c><00:08:53.560><c> the</c><00:08:53.680><c> volume</c><00:08:53.920><c> of</c><00:08:54.040><c> the</c><00:08:54.160><c> code</c>

00:08:54.430 --> 00:08:54.440 align:start position:0%
only because of the volume of the code
 

00:08:54.440 --> 00:08:55.790 align:start position:0%
only because of the volume of the code
but<00:08:54.560><c> also</c><00:08:54.760><c> it's</c><00:08:54.920><c> quite</c><00:08:55.120><c> tricky</c><00:08:55.399><c> to</c><00:08:55.519><c> write</c>

00:08:55.790 --> 00:08:55.800 align:start position:0%
but also it's quite tricky to write
 

00:08:55.800 --> 00:08:56.710 align:start position:0%
but also it's quite tricky to write
these<00:08:55.959><c> when</c><00:08:56.080><c> you're</c><00:08:56.200><c> dealing</c><00:08:56.519><c> with</c>

00:08:56.710 --> 00:08:56.720 align:start position:0%
these when you're dealing with
 

00:08:56.720 --> 00:08:58.870 align:start position:0%
these when you're dealing with
complicated<00:08:57.279><c> trees</c><00:08:58.279><c> for</c><00:08:58.440><c> example</c><00:08:58.720><c> in</c>

00:08:58.870 --> 00:08:58.880 align:start position:0%
complicated trees for example in
 

00:08:58.880 --> 00:09:00.630 align:start position:0%
complicated trees for example in
solidity<00:08:59.440><c> variable</c><00:08:59.800><c> declarations</c><00:09:00.399><c> can</c>

00:09:00.630 --> 00:09:00.640 align:start position:0%
solidity variable declarations can
 

00:09:00.640 --> 00:09:03.870 align:start position:0%
solidity variable declarations can
appear<00:09:01.399><c> in</c><00:09:01.560><c> for</c><00:09:01.920><c> loop</c><00:09:02.600><c> initializers</c><00:09:03.600><c> I</c><00:09:03.680><c> don't</c>

00:09:03.870 --> 00:09:03.880 align:start position:0%
appear in for loop initializers I don't
 

00:09:03.880 --> 00:09:05.949 align:start position:0%
appear in for loop initializers I don't
know<00:09:04.000><c> if</c><00:09:04.120><c> this</c><00:09:04.279><c> code</c><00:09:04.519><c> would</c><00:09:04.720><c> handle</c>

00:09:05.949 --> 00:09:05.959 align:start position:0%
know if this code would handle
 

00:09:05.959 --> 00:09:09.030 align:start position:0%
know if this code would handle
that<00:09:06.959><c> it's</c><00:09:07.120><c> a</c><00:09:07.399><c> question</c><00:09:07.680><c> for</c><00:09:07.839><c> the</c><00:09:07.959><c> reader</c><00:09:08.880><c> it's</c>

00:09:09.030 --> 00:09:09.040 align:start position:0%
that it's a question for the reader it's
 

00:09:09.040 --> 00:09:11.430 align:start position:0%
that it's a question for the reader it's
hard<00:09:09.240><c> to</c><00:09:09.720><c> maintain</c><00:09:10.720><c> when</c><00:09:10.920><c> the</c><00:09:11.040><c> language</c>

00:09:11.430 --> 00:09:11.440 align:start position:0%
hard to maintain when the language
 

00:09:11.440 --> 00:09:14.910 align:start position:0%
hard to maintain when the language
evolves<00:09:11.880><c> and</c><00:09:12.079><c> as</c><00:09:12.200><c> you</c><00:09:12.320><c> know</c><00:09:12.600><c> solidity</c><00:09:13.240><c> evolves</c>

00:09:14.910 --> 00:09:14.920 align:start position:0%
evolves and as you know solidity evolves
 

00:09:14.920 --> 00:09:16.670 align:start position:0%
evolves and as you know solidity evolves
significantly<00:09:15.920><c> uh</c><00:09:16.040><c> in</c><00:09:16.160><c> all</c><00:09:16.320><c> sorts</c><00:09:16.560><c> of</c>

00:09:16.670 --> 00:09:16.680 align:start position:0%
significantly uh in all sorts of
 

00:09:16.680 --> 00:09:20.110 align:start position:0%
significantly uh in all sorts of
interesting<00:09:17.120><c> ways</c><00:09:17.920><c> like</c><00:09:18.120><c> in</c><00:09:18.680><c> one</c><00:09:18.839><c> of</c><00:09:18.959><c> the</c><00:09:19.120><c> 0.5s</c>

00:09:20.110 --> 00:09:20.120 align:start position:0%
interesting ways like in one of the 0.5s
 

00:09:20.120 --> 00:09:21.910 align:start position:0%
interesting ways like in one of the 0.5s
where<00:09:20.320><c> the</c><00:09:20.600><c> exponentiation</c><00:09:21.519><c> operator</c>

00:09:21.910 --> 00:09:21.920 align:start position:0%
where the exponentiation operator
 

00:09:21.920 --> 00:09:23.710 align:start position:0%
where the exponentiation operator
changed

00:09:23.710 --> 00:09:23.720 align:start position:0%
changed
 

00:09:23.720 --> 00:09:25.710 align:start position:0%
changed
associativity<00:09:24.720><c> uh</c><00:09:24.959><c> so</c><00:09:25.120><c> when</c><00:09:25.240><c> the</c><00:09:25.360><c> language</c>

00:09:25.710 --> 00:09:25.720 align:start position:0%
associativity uh so when the language
 

00:09:25.720 --> 00:09:26.829 align:start position:0%
associativity uh so when the language
evolves<00:09:26.079><c> you</c><00:09:26.160><c> need</c><00:09:26.320><c> to</c><00:09:26.440><c> update</c><00:09:26.720><c> your</c>

00:09:26.829 --> 00:09:26.839 align:start position:0%
evolves you need to update your
 

00:09:26.839 --> 00:09:29.470 align:start position:0%
evolves you need to update your
traversal<00:09:27.440><c> code</c><00:09:28.440><c> and</c><00:09:28.600><c> that's</c><00:09:28.800><c> because</c><00:09:29.040><c> the</c>

00:09:29.470 --> 00:09:29.480 align:start position:0%
traversal code and that's because the
 

00:09:29.480 --> 00:09:31.190 align:start position:0%
traversal code and that's because the
veral<00:09:29.760><c> code</c><00:09:30.000><c> is</c><00:09:30.160><c> mixed</c><00:09:30.399><c> with</c><00:09:30.560><c> the</c><00:09:30.680><c> analysis</c>

00:09:31.190 --> 00:09:31.200 align:start position:0%
veral code is mixed with the analysis
 

00:09:31.200 --> 00:09:33.870 align:start position:0%
veral code is mixed with the analysis
code<00:09:31.760><c> so</c><00:09:31.959><c> what</c><00:09:32.079><c> you</c><00:09:32.160><c> want</c><00:09:32.279><c> to</c><00:09:32.480><c> do</c><00:09:32.800><c> for</c><00:09:33.200><c> analysis</c>

00:09:33.870 --> 00:09:33.880 align:start position:0%
code so what you want to do for analysis
 

00:09:33.880 --> 00:09:36.829 align:start position:0%
code so what you want to do for analysis
is<00:09:34.000><c> mixed</c><00:09:34.320><c> in</c><00:09:34.480><c> with</c><00:09:34.640><c> the</c><00:09:34.800><c> mechanics</c><00:09:35.240><c> of</c>

00:09:36.829 --> 00:09:36.839 align:start position:0%
is mixed in with the mechanics of
 

00:09:36.839 --> 00:09:39.230 align:start position:0%
is mixed in with the mechanics of
traversal<00:09:37.839><c> to</c><00:09:38.040><c> make</c><00:09:38.279><c> changes</c><00:09:38.880><c> you're</c><00:09:39.040><c> often</c>

00:09:39.230 --> 00:09:39.240 align:start position:0%
traversal to make changes you're often
 

00:09:39.240 --> 00:09:42.430 align:start position:0%
traversal to make changes you're often
going<00:09:39.360><c> to</c><00:09:39.480><c> break</c><00:09:39.920><c> things</c><00:09:40.920><c> finally</c><00:09:41.560><c> and</c><00:09:41.760><c> more</c>

00:09:42.430 --> 00:09:42.440 align:start position:0%
going to break things finally and more
 

00:09:42.440 --> 00:09:44.750 align:start position:0%
going to break things finally and more
importantly<00:09:43.440><c> this</c><00:09:43.680><c> forces</c><00:09:44.079><c> you</c><00:09:44.200><c> to</c><00:09:44.399><c> think</c>

00:09:44.750 --> 00:09:44.760 align:start position:0%
importantly this forces you to think
 

00:09:44.760 --> 00:09:48.230 align:start position:0%
importantly this forces you to think
about<00:09:45.760><c> what</c><00:09:46.360><c> or</c><00:09:46.680><c> how</c><00:09:46.920><c> you</c><00:09:47.040><c> want</c><00:09:47.200><c> to</c><00:09:47.360><c> do</c><00:09:47.600><c> things</c>

00:09:48.230 --> 00:09:48.240 align:start position:0%
about what or how you want to do things
 

00:09:48.240 --> 00:09:50.990 align:start position:0%
about what or how you want to do things
rather<00:09:48.480><c> than</c><00:09:48.720><c> what</c><00:09:48.880><c> you</c><00:09:49.000><c> want</c><00:09:49.120><c> to</c><00:09:49.720><c> do</c><00:09:50.720><c> and</c><00:09:50.880><c> the</c>

00:09:50.990 --> 00:09:51.000 align:start position:0%
rather than what you want to do and the
 

00:09:51.000 --> 00:09:53.110 align:start position:0%
rather than what you want to do and the
intent<00:09:51.320><c> of</c><00:09:51.480><c> this</c><00:09:51.680><c> code</c><00:09:52.320><c> finding</c><00:09:52.760><c> variable</c>

00:09:53.110 --> 00:09:53.120 align:start position:0%
intent of this code finding variable
 

00:09:53.120 --> 00:09:55.550 align:start position:0%
intent of this code finding variable
declarations<00:09:53.760><c> is</c><00:09:53.959><c> buried</c><00:09:54.360><c> in</c><00:09:54.600><c> here</c><00:09:55.279><c> you</c><00:09:55.399><c> could</c>

00:09:55.550 --> 00:09:55.560 align:start position:0%
declarations is buried in here you could
 

00:09:55.560 --> 00:09:57.509 align:start position:0%
declarations is buried in here you could
look<00:09:55.680><c> at</c><00:09:55.800><c> a</c><00:09:55.920><c> big</c><00:09:56.160><c> tra</c><00:09:56.519><c> bit</c><00:09:56.640><c> of</c><00:09:56.760><c> traversal</c><00:09:57.279><c> code</c>

00:09:57.509 --> 00:09:57.519 align:start position:0%
look at a big tra bit of traversal code
 

00:09:57.519 --> 00:09:58.870 align:start position:0%
look at a big tra bit of traversal code
and<00:09:57.640><c> you</c><00:09:57.720><c> wouldn't</c><00:09:58.040><c> know</c><00:09:58.360><c> what</c><00:09:58.480><c> it</c><00:09:58.600><c> was</c><00:09:58.720><c> meant</c>

00:09:58.870 --> 00:09:58.880 align:start position:0%
and you wouldn't know what it was meant
 

00:09:58.880 --> 00:10:00.350 align:start position:0%
and you wouldn't know what it was meant
to<00:09:58.959><c> be</c><00:09:59.079><c> doing</c>

00:10:00.350 --> 00:10:00.360 align:start position:0%
to be doing
 

00:10:00.360 --> 00:10:02.150 align:start position:0%
to be doing
we<00:10:00.519><c> need</c><00:10:00.720><c> something</c>

00:10:02.150 --> 00:10:02.160 align:start position:0%
we need something
 

00:10:02.160 --> 00:10:04.870 align:start position:0%
we need something
better<00:10:03.160><c> so</c><00:10:03.720><c> we'll</c><00:10:03.920><c> have</c><00:10:04.040><c> a</c><00:10:04.279><c> look</c><00:10:04.440><c> at</c><00:10:04.600><c> some</c>

00:10:04.870 --> 00:10:04.880 align:start position:0%
better so we'll have a look at some
 

00:10:04.880 --> 00:10:07.509 align:start position:0%
better so we'll have a look at some
specific<00:10:05.360><c> challenges</c><00:10:06.360><c> with</c><00:10:06.519><c> manual</c>

00:10:07.509 --> 00:10:07.519 align:start position:0%
specific challenges with manual
 

00:10:07.519 --> 00:10:10.389 align:start position:0%
specific challenges with manual
traversal<00:10:08.519><c> so</c><00:10:08.880><c> recursion</c><00:10:09.519><c> management</c><00:10:10.240><c> you've</c>

00:10:10.389 --> 00:10:10.399 align:start position:0%
traversal so recursion management you've
 

00:10:10.399 --> 00:10:13.150 align:start position:0%
traversal so recursion management you've
got<00:10:10.519><c> to</c><00:10:10.640><c> handle</c><00:10:10.920><c> deep</c><00:10:11.200><c> nesting</c><00:10:12.160><c> efficiently</c>

00:10:13.150 --> 00:10:13.160 align:start position:0%
got to handle deep nesting efficiently
 

00:10:13.160 --> 00:10:14.750 align:start position:0%
got to handle deep nesting efficiently
avoiding<00:10:13.560><c> stack</c><00:10:13.920><c> Overflow</c><00:10:14.440><c> you've</c><00:10:14.560><c> got</c><00:10:14.680><c> to</c>

00:10:14.750 --> 00:10:14.760 align:start position:0%
avoiding stack Overflow you've got to
 

00:10:14.760 --> 00:10:16.269 align:start position:0%
avoiding stack Overflow you've got to
make<00:10:14.880><c> sure</c><00:10:15.040><c> you</c><00:10:15.160><c> don't</c><00:10:15.399><c> have</c><00:10:15.560><c> any</c><00:10:15.720><c> infinite</c>

00:10:16.269 --> 00:10:16.279 align:start position:0%
make sure you don't have any infinite
 

00:10:16.279 --> 00:10:18.389 align:start position:0%
make sure you don't have any infinite
Loops<00:10:17.279><c> you've</c><00:10:17.480><c> got</c><00:10:17.560><c> to</c><00:10:17.720><c> maintain</c><00:10:18.160><c> your</c>

00:10:18.389 --> 00:10:18.399 align:start position:0%
Loops you've got to maintain your
 

00:10:18.399 --> 00:10:20.389 align:start position:0%
Loops you've got to maintain your
context<00:10:19.120><c> State</c><00:10:19.440><c> Management</c><00:10:19.959><c> you</c><00:10:20.079><c> got</c><00:10:20.160><c> to</c><00:10:20.279><c> know</c>

00:10:20.389 --> 00:10:20.399 align:start position:0%
context State Management you got to know
 

00:10:20.399 --> 00:10:22.470 align:start position:0%
context State Management you got to know
when<00:10:20.519><c> to</c><00:10:20.680><c> stop</c><00:10:20.880><c> recursing</c><00:10:21.839><c> once</c><00:10:22.079><c> again</c><00:10:22.240><c> if</c><00:10:22.360><c> you</c>

00:10:22.470 --> 00:10:22.480 align:start position:0%
when to stop recursing once again if you
 

00:10:22.480 --> 00:10:23.790 align:start position:0%
when to stop recursing once again if you
use<00:10:22.600><c> a</c><00:10:22.760><c> visitor</c><00:10:23.120><c> pattern</c><00:10:23.440><c> where</c><00:10:23.519><c> you've</c><00:10:23.680><c> got</c>

00:10:23.790 --> 00:10:23.800 align:start position:0%
use a visitor pattern where you've got
 

00:10:23.800 --> 00:10:26.750 align:start position:0%
use a visitor pattern where you've got
an<00:10:24.040><c> external</c><00:10:25.040><c> visitor</c><00:10:25.560><c> driving</c><00:10:26.360><c> external</c>

00:10:26.750 --> 00:10:26.760 align:start position:0%
an external visitor driving external
 

00:10:26.760 --> 00:10:28.910 align:start position:0%
an external visitor driving external
code<00:10:27.040><c> driving</c><00:10:27.360><c> your</c><00:10:27.519><c> visitor</c><00:10:28.399><c> you</c><00:10:28.600><c> often</c><00:10:28.800><c> want</c>

00:10:28.910 --> 00:10:28.920 align:start position:0%
code driving your visitor you often want
 

00:10:28.920 --> 00:10:30.949 align:start position:0%
code driving your visitor you often want
to<00:10:29.040><c> stop</c><00:10:29.360><c> top</c><00:10:29.680><c> or</c><00:10:29.839><c> you</c><00:10:30.000><c> don't</c><00:10:30.200><c> want</c><00:10:30.320><c> to</c><00:10:30.560><c> go</c><00:10:30.720><c> into</c>

00:10:30.949 --> 00:10:30.959 align:start position:0%
to stop top or you don't want to go into
 

00:10:30.959 --> 00:10:32.550 align:start position:0%
to stop top or you don't want to go into
the<00:10:31.079><c> children</c><00:10:31.360><c> of</c><00:10:31.519><c> this</c><00:10:31.640><c> node</c><00:10:32.000><c> how</c><00:10:32.079><c> do</c><00:10:32.200><c> you</c><00:10:32.360><c> do</c>

00:10:32.550 --> 00:10:32.560 align:start position:0%
the children of this node how do you do
 

00:10:32.560 --> 00:10:34.870 align:start position:0%
the children of this node how do you do
that<00:10:33.440><c> that</c><00:10:33.560><c> means</c><00:10:34.079><c> you</c><00:10:34.240><c> end</c><00:10:34.399><c> up</c><00:10:34.519><c> with</c><00:10:34.640><c> a</c><00:10:34.720><c> more</c>

00:10:34.870 --> 00:10:34.880 align:start position:0%
that that means you end up with a more
 

00:10:34.880 --> 00:10:38.030 align:start position:0%
that that means you end up with a more
complicated<00:10:35.839><c> API</c><00:10:36.839><c> State</c><00:10:37.279><c> tracking</c><00:10:37.600><c> is</c><00:10:37.760><c> quite</c>

00:10:38.030 --> 00:10:38.040 align:start position:0%
complicated API State tracking is quite
 

00:10:38.040 --> 00:10:39.470 align:start position:0%
complicated API State tracking is quite
complex<00:10:38.399><c> you</c><00:10:38.480><c> need</c><00:10:38.639><c> to</c><00:10:38.760><c> keep</c><00:10:38.959><c> track</c><00:10:39.160><c> of</c><00:10:39.279><c> the</c>

00:10:39.470 --> 00:10:39.480 align:start position:0%
complex you need to keep track of the
 

00:10:39.480 --> 00:10:43.150 align:start position:0%
complex you need to keep track of the
parent<00:10:39.839><c> node</c><00:10:40.600><c> when</c><00:10:40.760><c> you're</c><00:10:41.519><c> um</c><00:10:42.519><c> uh</c><00:10:42.639><c> walking</c><00:10:42.959><c> a</c>

00:10:43.150 --> 00:10:43.160 align:start position:0%
parent node when you're um uh walking a
 

00:10:43.160 --> 00:10:44.750 align:start position:0%
parent node when you're um uh walking a
tree<00:10:43.519><c> you</c><00:10:43.639><c> need</c><00:10:43.800><c> to</c><00:10:43.920><c> maintain</c><00:10:44.360><c> scope</c>

00:10:44.750 --> 00:10:44.760 align:start position:0%
tree you need to maintain scope
 

00:10:44.760 --> 00:10:46.629 align:start position:0%
tree you need to maintain scope
information<00:10:45.279><c> in</c><00:10:45.360><c> the</c><00:10:45.440><c> case</c><00:10:45.600><c> of</c><00:10:45.720><c> a</c><00:10:45.880><c> compiler</c>

00:10:46.629 --> 00:10:46.639 align:start position:0%
information in the case of a compiler
 

00:10:46.639 --> 00:10:48.550 align:start position:0%
information in the case of a compiler
build<00:10:46.880><c> up</c><00:10:47.000><c> your</c><00:10:47.200><c> composite</c><00:10:47.680><c> results</c><00:10:48.240><c> handle</c>

00:10:48.550 --> 00:10:48.560 align:start position:0%
build up your composite results handle
 

00:10:48.560 --> 00:10:50.910 align:start position:0%
build up your composite results handle
cross<00:10:48.880><c> node</c><00:10:49.279><c> relationships</c><00:10:50.279><c> I.E</c><00:10:50.639><c> you</c><00:10:50.720><c> want</c><00:10:50.839><c> to</c>

00:10:50.910 --> 00:10:50.920 align:start position:0%
cross node relationships I.E you want to
 

00:10:50.920 --> 00:10:53.470 align:start position:0%
cross node relationships I.E you want to
link<00:10:51.200><c> this</c><00:10:51.360><c> node</c><00:10:51.959><c> which</c><00:10:52.079><c> you</c><00:10:52.320><c> visited</c><00:10:53.320><c> you</c>

00:10:53.470 --> 00:10:53.480 align:start position:0%
link this node which you visited you
 

00:10:53.480 --> 00:10:56.030 align:start position:0%
link this node which you visited you
know<00:10:54.160><c> 30</c><00:10:54.519><c> minutes</c><00:10:54.839><c> ago</c><00:10:55.279><c> with</c><00:10:55.440><c> this</c><00:10:55.560><c> other</c><00:10:55.760><c> node</c>

00:10:56.030 --> 00:10:56.040 align:start position:0%
know 30 minutes ago with this other node
 

00:10:56.040 --> 00:10:57.310 align:start position:0%
know 30 minutes ago with this other node
which<00:10:56.160><c> you're</c><00:10:56.320><c> visiting</c>

00:10:57.310 --> 00:10:57.320 align:start position:0%
which you're visiting
 

00:10:57.320 --> 00:11:02.310 align:start position:0%
which you're visiting
now<00:10:58.320><c> now</c><00:10:58.519><c> error</c><00:10:58.839><c> handling</c><00:10:59.399><c> multiplies</c><00:10:59.920><c> the</c>

00:11:02.310 --> 00:11:02.320 align:start position:0%
 
 

00:11:02.320 --> 00:11:04.949 align:start position:0%
 
complexity<00:11:03.320><c> and</c><00:11:03.480><c> edge</c><00:11:03.800><c> cases</c><00:11:04.240><c> keep</c><00:11:04.480><c> appearing</c>

00:11:04.949 --> 00:11:04.959 align:start position:0%
complexity and edge cases keep appearing
 

00:11:04.959 --> 00:11:07.750 align:start position:0%
complexity and edge cases keep appearing
for<00:11:05.120><c> example</c><00:11:05.800><c> parenthesized</c><00:11:06.760><c> Expressions</c>

00:11:07.750 --> 00:11:07.760 align:start position:0%
for example parenthesized Expressions
 

00:11:07.760 --> 00:11:11.030 align:start position:0%
for example parenthesized Expressions
nested<00:11:08.240><c> structures</c><00:11:08.959><c> optional</c><00:11:09.639><c> elements</c><00:11:10.639><c> and</c>

00:11:11.030 --> 00:11:11.040 align:start position:0%
nested structures optional elements and
 

00:11:11.040 --> 00:11:13.350 align:start position:0%
nested structures optional elements and
language<00:11:11.480><c> specific</c><00:11:11.880><c> quirks</c><00:11:12.880><c> of</c><00:11:13.040><c> which</c><00:11:13.240><c> there</c>

00:11:13.350 --> 00:11:13.360 align:start position:0%
language specific quirks of which there
 

00:11:13.360 --> 00:11:14.949 align:start position:0%
language specific quirks of which there
are<00:11:13.600><c> plenty</c><00:11:13.920><c> in</c>

00:11:14.949 --> 00:11:14.959 align:start position:0%
are plenty in
 

00:11:14.959 --> 00:11:17.150 align:start position:0%
are plenty in
solidity<00:11:15.959><c> and</c><00:11:16.160><c> finally</c><00:11:16.600><c> you've</c><00:11:16.760><c> got</c><00:11:16.880><c> a</c><00:11:17.000><c> big</c>

00:11:17.150 --> 00:11:17.160 align:start position:0%
solidity and finally you've got a big
 

00:11:17.160 --> 00:11:19.150 align:start position:0%
solidity and finally you've got a big
maintenance<00:11:17.680><c> budget</c><00:11:18.200><c> now</c><00:11:18.360><c> I</c><00:11:18.480><c> know</c><00:11:18.680><c> I'm</c>

00:11:19.150 --> 00:11:19.160 align:start position:0%
maintenance budget now I know I'm
 

00:11:19.160 --> 00:11:21.430 align:start position:0%
maintenance budget now I know I'm
repeating<00:11:19.760><c> this</c><00:11:19.959><c> point</c><00:11:20.600><c> but</c><00:11:20.839><c> this</c><00:11:21.000><c> is</c>

00:11:21.430 --> 00:11:21.440 align:start position:0%
repeating this point but this is
 

00:11:21.440 --> 00:11:22.870 align:start position:0%
repeating this point but this is
significant<00:11:21.959><c> as</c><00:11:22.079><c> you'll</c><00:11:22.200><c> see</c><00:11:22.399><c> when</c><00:11:22.519><c> we</c><00:11:22.639><c> get</c><00:11:22.760><c> to</c>

00:11:22.870 --> 00:11:22.880 align:start position:0%
significant as you'll see when we get to
 

00:11:22.880 --> 00:11:26.910 align:start position:0%
significant as you'll see when we get to
queries<00:11:23.560><c> which</c><00:11:23.720><c> I</c><00:11:23.839><c> think</c><00:11:23.959><c> is</c><00:11:24.079><c> the</c><00:11:24.279><c> next</c>

00:11:26.910 --> 00:11:26.920 align:start position:0%
 
 

00:11:26.920 --> 00:11:31.750 align:start position:0%
 
slide<00:11:27.920><c> so</c><00:11:28.200><c> this</c><00:11:28.320><c> is</c><00:11:28.600><c> where</c><00:11:29.480><c> queries</c><00:11:30.240><c> come</c><00:11:30.760><c> in</c>

00:11:31.750 --> 00:11:31.760 align:start position:0%
slide so this is where queries come in
 

00:11:31.760 --> 00:11:33.710 align:start position:0%
slide so this is where queries come in
so<00:11:32.120><c> let's</c><00:11:32.360><c> look</c><00:11:32.480><c> at</c><00:11:32.639><c> how</c><00:11:32.800><c> we</c><00:11:32.959><c> solve</c><00:11:33.320><c> some</c><00:11:33.480><c> of</c>

00:11:33.710 --> 00:11:33.720 align:start position:0%
so let's look at how we solve some of
 

00:11:33.720 --> 00:11:37.150 align:start position:0%
so let's look at how we solve some of
those<00:11:34.160><c> same</c><00:11:34.680><c> problems</c><00:11:35.600><c> using</c><00:11:35.959><c> queries</c><00:11:36.839><c> so</c>

00:11:37.150 --> 00:11:37.160 align:start position:0%
those same problems using queries so
 

00:11:37.160 --> 00:11:38.670 align:start position:0%
those same problems using queries so
this<00:11:37.320><c> is</c><00:11:37.440><c> our</c><00:11:37.639><c> first</c><00:11:37.920><c> example</c><00:11:38.360><c> we</c><00:11:38.440><c> want</c><00:11:38.560><c> to</c>

00:11:38.670 --> 00:11:38.680 align:start position:0%
this is our first example we want to
 

00:11:38.680 --> 00:11:41.389 align:start position:0%
this is our first example we want to
find<00:11:38.920><c> all</c><00:11:39.040><c> the</c><00:11:39.200><c> unit</c><00:11:39.560><c> variable</c><00:11:40.560><c> uh</c><00:11:40.959><c> all</c><00:11:41.160><c> the</c>

00:11:41.389 --> 00:11:41.399 align:start position:0%
find all the unit variable uh all the
 

00:11:41.399 --> 00:11:43.389 align:start position:0%
find all the unit variable uh all the
uint<00:11:41.959><c> variable</c>

00:11:43.389 --> 00:11:43.399 align:start position:0%
uint variable
 

00:11:43.399 --> 00:11:46.150 align:start position:0%
uint variable
declarations<00:11:44.399><c> it's</c><00:11:44.560><c> as</c><00:11:44.720><c> simple</c><00:11:45.000><c> as</c><00:11:45.160><c> saying</c>

00:11:46.150 --> 00:11:46.160 align:start position:0%
declarations it's as simple as saying
 

00:11:46.160 --> 00:11:48.150 align:start position:0%
declarations it's as simple as saying
inv<00:11:46.480><c> variable</c><00:11:46.880><c> declarations</c><00:11:47.560><c> where</c><00:11:47.760><c> the</c><00:11:47.920><c> type</c>

00:11:48.150 --> 00:11:48.160 align:start position:0%
inv variable declarations where the type
 

00:11:48.160 --> 00:11:51.190 align:start position:0%
inv variable declarations where the type
name<00:11:48.360><c> is</c><00:11:48.519><c> uint</c><00:11:49.480><c> and</c><00:11:49.600><c> it's</c><00:11:49.800><c> got</c><00:11:49.920><c> an</c><00:11:50.200><c> identifier</c>

00:11:51.190 --> 00:11:51.200 align:start position:0%
name is uint and it's got an identifier
 

00:11:51.200 --> 00:11:55.670 align:start position:0%
name is uint and it's got an identifier
bind<00:11:51.560><c> that</c><00:11:51.680><c> and</c><00:11:52.000><c> return</c><00:11:52.200><c> it</c><00:11:52.880><c> no</c>

00:11:55.670 --> 00:11:55.680 align:start position:0%
 
 

00:11:55.680 --> 00:11:58.870 align:start position:0%
 
traversal<00:11:56.680><c> no</c><00:11:56.959><c> edge</c><00:11:57.399><c> cases</c><00:11:58.399><c> hardly</c><00:11:58.720><c> any</c>

00:11:58.870 --> 00:11:58.880 align:start position:0%
traversal no edge cases hardly any
 

00:11:58.880 --> 00:12:01.670 align:start position:0%
traversal no edge cases hardly any
maintenance<00:11:59.680><c> no</c><00:11:59.959><c> efficiency</c><00:12:00.480><c> problems</c><00:12:01.480><c> so</c>

00:12:01.670 --> 00:12:01.680 align:start position:0%
maintenance no efficiency problems so
 

00:12:01.680 --> 00:12:03.310 align:start position:0%
maintenance no efficiency problems so
the<00:12:01.880><c> second</c><00:12:02.200><c> example</c><00:12:02.560><c> shows</c><00:12:02.839><c> something</c><00:12:03.079><c> a</c><00:12:03.200><c> bit</c>

00:12:03.310 --> 00:12:03.320 align:start position:0%
the second example shows something a bit
 

00:12:03.320 --> 00:12:05.310 align:start position:0%
the second example shows something a bit
more<00:12:03.519><c> powerful</c><00:12:04.399><c> in</c><00:12:04.560><c> this</c><00:12:04.720><c> case</c><00:12:04.920><c> we</c><00:12:05.040><c> want</c><00:12:05.160><c> to</c>

00:12:05.310 --> 00:12:05.320 align:start position:0%
more powerful in this case we want to
 

00:12:05.320 --> 00:12:06.829 align:start position:0%
more powerful in this case we want to
find<00:12:05.600><c> immediately</c><00:12:06.079><c> nested</c><00:12:06.519><c> function</c>

00:12:06.829 --> 00:12:06.839 align:start position:0%
find immediately nested function
 

00:12:06.839 --> 00:12:09.069 align:start position:0%
find immediately nested function
declarations<00:12:07.519><c> are</c><00:12:07.839><c> a</c><00:12:07.959><c> function</c><00:12:08.680><c> inside</c>

00:12:09.069 --> 00:12:09.079 align:start position:0%
declarations are a function inside
 

00:12:09.079 --> 00:12:09.949 align:start position:0%
declarations are a function inside
another

00:12:09.949 --> 00:12:09.959 align:start position:0%
another
 

00:12:09.959 --> 00:12:13.069 align:start position:0%
another
function<00:12:10.959><c> so</c><00:12:11.240><c> here</c><00:12:11.399><c> we're</c><00:12:11.600><c> saying</c><00:12:12.600><c> in</c><00:12:12.800><c> every</c>

00:12:13.069 --> 00:12:13.079 align:start position:0%
function so here we're saying in every
 

00:12:13.079 --> 00:12:14.750 align:start position:0%
function so here we're saying in every
contract<00:12:13.519><c> definition</c><00:12:14.320><c> there</c><00:12:14.399><c> are</c><00:12:14.560><c> some</c>

00:12:14.750 --> 00:12:14.760 align:start position:0%
contract definition there are some
 

00:12:14.760 --> 00:12:17.230 align:start position:0%
contract definition there are some
contract<00:12:15.320><c> members</c><00:12:16.320><c> in</c><00:12:16.480><c> the</c><00:12:16.639><c> contract</c><00:12:16.959><c> members</c>

00:12:17.230 --> 00:12:17.240 align:start position:0%
contract members in the contract members
 

00:12:17.240 --> 00:12:19.829 align:start position:0%
contract members in the contract members
is<00:12:17.399><c> a</c><00:12:17.560><c> contract</c><00:12:17.959><c> member</c><00:12:18.959><c> for</c><00:12:19.199><c> every</c><00:12:19.440><c> function</c>

00:12:19.829 --> 00:12:19.839 align:start position:0%
is a contract member for every function
 

00:12:19.839 --> 00:12:21.949 align:start position:0%
is a contract member for every function
definition<00:12:20.240><c> in</c><00:12:20.440><c> there</c><00:12:20.639><c> find</c><00:12:20.880><c> the</c><00:12:21.040><c> block</c><00:12:21.800><c> and</c>

00:12:21.949 --> 00:12:21.959 align:start position:0%
definition in there find the block and
 

00:12:21.959 --> 00:12:24.069 align:start position:0%
definition in there find the block and
look<00:12:22.120><c> for</c><00:12:22.360><c> the</c><00:12:22.920><c> a</c><00:12:23.199><c> statement</c><00:12:23.600><c> in</c><00:12:23.760><c> there</c><00:12:23.959><c> that</c>

00:12:24.069 --> 00:12:24.079 align:start position:0%
look for the a statement in there that
 

00:12:24.079 --> 00:12:27.150 align:start position:0%
look for the a statement in there that
is<00:12:24.240><c> a</c><00:12:24.519><c> itself</c><00:12:24.800><c> a</c><00:12:24.959><c> function</c><00:12:25.760><c> definition</c><00:12:26.760><c> call</c>

00:12:27.150 --> 00:12:27.160 align:start position:0%
is a itself a function definition call
 

00:12:27.160 --> 00:12:29.790 align:start position:0%
is a itself a function definition call
bind<00:12:27.399><c> that</c><00:12:27.519><c> to</c><00:12:27.639><c> a</c><00:12:27.760><c> variable</c><00:12:28.720><c> called</c><00:12:29.199><c> tested</c>

00:12:29.790 --> 00:12:29.800 align:start position:0%
bind that to a variable called tested
 

00:12:29.800 --> 00:12:31.509 align:start position:0%
bind that to a variable called tested
and<00:12:30.120><c> return</c>

00:12:31.509 --> 00:12:31.519 align:start position:0%
and return
 

00:12:31.519 --> 00:12:34.269 align:start position:0%
and return
it<00:12:32.519><c> so</c><00:12:32.959><c> why</c><00:12:33.079><c> is</c><00:12:33.199><c> this</c><00:12:33.360><c> so</c><00:12:33.560><c> powerful</c><00:12:33.959><c> well</c><00:12:34.120><c> first</c>

00:12:34.269 --> 00:12:34.279 align:start position:0%
it so why is this so powerful well first
 

00:12:34.279 --> 00:12:36.189 align:start position:0%
it so why is this so powerful well first
of<00:12:34.399><c> all</c><00:12:34.560><c> it's</c><00:12:34.760><c> declarative</c><00:12:35.440><c> we</c><00:12:35.560><c> it's</c><00:12:35.760><c> saying</c>

00:12:36.189 --> 00:12:36.199 align:start position:0%
of all it's declarative we it's saying
 

00:12:36.199 --> 00:12:39.629 align:start position:0%
of all it's declarative we it's saying
what<00:12:36.360><c> we</c><00:12:36.560><c> want</c><00:12:37.160><c> not</c><00:12:37.440><c> how</c><00:12:37.639><c> we</c><00:12:37.760><c> want</c><00:12:37.920><c> to</c><00:12:38.079><c> do</c><00:12:38.639><c> it</c>

00:12:39.629 --> 00:12:39.639 align:start position:0%
what we want not how we want to do it
 

00:12:39.639 --> 00:12:41.790 align:start position:0%
what we want not how we want to do it
makes<00:12:39.880><c> that</c><00:12:40.079><c> code</c><00:12:40.320><c> easier</c><00:12:40.639><c> to</c><00:12:41.040><c> understand</c><00:12:41.199><c> and</c>

00:12:41.790 --> 00:12:41.800 align:start position:0%
makes that code easier to understand and
 

00:12:41.800 --> 00:12:43.829 align:start position:0%
makes that code easier to understand and
maintain<00:12:42.800><c> and</c><00:12:42.959><c> when</c><00:12:43.079><c> you</c><00:12:43.199><c> look</c><00:12:43.360><c> at</c><00:12:43.519><c> this</c><00:12:43.639><c> two</c>

00:12:43.829 --> 00:12:43.839 align:start position:0%
maintain and when you look at this two
 

00:12:43.839 --> 00:12:45.230 align:start position:0%
maintain and when you look at this two
months<00:12:44.079><c> later</c><00:12:44.360><c> it's</c><00:12:44.560><c> obvious</c><00:12:44.880><c> what</c><00:12:45.000><c> it's</c>

00:12:45.230 --> 00:12:45.240 align:start position:0%
months later it's obvious what it's
 

00:12:45.240 --> 00:12:47.389 align:start position:0%
months later it's obvious what it's
doing<00:12:46.160><c> whereas</c><00:12:46.480><c> I'd</c><00:12:46.680><c> suggest</c><00:12:47.040><c> that</c><00:12:47.160><c> you'd</c>

00:12:47.389 --> 00:12:47.399 align:start position:0%
doing whereas I'd suggest that you'd
 

00:12:47.399 --> 00:12:50.030 align:start position:0%
doing whereas I'd suggest that you'd
have<00:12:47.560><c> a</c><00:12:47.639><c> couple</c><00:12:47.880><c> of</c><00:12:48.079><c> pages</c><00:12:48.399><c> of</c><00:12:49.040><c> code</c>

00:12:50.030 --> 00:12:50.040 align:start position:0%
have a couple of pages of code
 

00:12:50.040 --> 00:12:52.550 align:start position:0%
have a couple of pages of code
traversing<00:12:50.560><c> your</c><00:12:50.760><c> tree</c><00:12:51.639><c> if</c><00:12:51.760><c> you</c><00:12:51.880><c> were</c><00:12:52.040><c> using</c>

00:12:52.550 --> 00:12:52.560 align:start position:0%
traversing your tree if you were using
 

00:12:52.560 --> 00:12:54.670 align:start position:0%
traversing your tree if you were using
manual<00:12:52.920><c> traversal</c><00:12:53.920><c> and</c><00:12:54.040><c> it</c><00:12:54.160><c> wouldn't</c><00:12:54.480><c> be</c>

00:12:54.670 --> 00:12:54.680 align:start position:0%
manual traversal and it wouldn't be
 

00:12:54.680 --> 00:12:56.590 align:start position:0%
manual traversal and it wouldn't be
obvious<00:12:55.079><c> what</c><00:12:55.199><c> it</c><00:12:55.279><c> was</c><00:12:55.480><c> actually</c><00:12:55.680><c> meant</c><00:12:55.880><c> to</c>

00:12:56.590 --> 00:12:56.600 align:start position:0%
obvious what it was actually meant to
 

00:12:56.600 --> 00:13:00.269 align:start position:0%
obvious what it was actually meant to
do<00:12:57.600><c> so</c><00:12:57.920><c> it's</c><00:12:58.120><c> structure</c><00:12:58.639><c> aware</c>

00:13:00.269 --> 00:13:00.279 align:start position:0%
do so it's structure aware
 

00:13:00.279 --> 00:13:03.590 align:start position:0%
do so it's structure aware
so<00:13:00.839><c> the</c><00:13:00.959><c> query</c><00:13:01.680><c> understands</c><00:13:02.199><c> solidity</c><00:13:03.120><c> syntax</c>

00:13:03.590 --> 00:13:03.600 align:start position:0%
so the query understands solidity syntax
 

00:13:03.600 --> 00:13:05.790 align:start position:0%
so the query understands solidity syntax
structure<00:13:04.560><c> it</c><00:13:04.680><c> knows</c><00:13:04.959><c> about</c><00:13:05.240><c> scope</c><00:13:05.560><c> and</c><00:13:05.680><c> it</c>

00:13:05.790 --> 00:13:05.800 align:start position:0%
structure it knows about scope and it
 

00:13:05.800 --> 00:13:08.150 align:start position:0%
structure it knows about scope and it
knows<00:13:06.040><c> about</c><00:13:06.399><c> nesting</c><00:13:07.399><c> and</c><00:13:07.480><c> it</c><00:13:07.639><c> also</c><00:13:07.880><c> knows</c>

00:13:08.150 --> 00:13:08.160 align:start position:0%
knows about nesting and it also knows
 

00:13:08.160 --> 00:13:10.269 align:start position:0%
knows about nesting and it also knows
where<00:13:08.399><c> type</c><00:13:08.680><c> name</c><00:13:08.959><c> for</c><00:13:09.120><c> example</c><00:13:09.800><c> in</c><00:13:09.959><c> the</c><00:13:10.199><c> in</c>

00:13:10.269 --> 00:13:10.279 align:start position:0%
where type name for example in the in
 

00:13:10.279 --> 00:13:14.910 align:start position:0%
where type name for example in the in
the<00:13:10.440><c> first</c><00:13:10.720><c> case</c><00:13:11.040><c> here</c><00:13:11.600><c> appears</c><00:13:11.920><c> in</c><00:13:12.040><c> the</c>

00:13:14.910 --> 00:13:14.920 align:start position:0%
 
 

00:13:14.920 --> 00:13:18.710 align:start position:0%
 
tree<00:13:15.920><c> these</c><00:13:16.160><c> patterns</c><00:13:16.639><c> are</c><00:13:17.360><c> composable</c><00:13:18.360><c> so</c><00:13:18.600><c> we</c>

00:13:18.710 --> 00:13:18.720 align:start position:0%
tree these patterns are composable so we
 

00:13:18.720 --> 00:13:21.629 align:start position:0%
tree these patterns are composable so we
can<00:13:18.880><c> build</c><00:13:19.560><c> complex</c><00:13:20.519><c> pattern</c><00:13:20.839><c> matching</c><00:13:21.360><c> from</c>

00:13:21.629 --> 00:13:21.639 align:start position:0%
can build complex pattern matching from
 

00:13:21.639 --> 00:13:23.870 align:start position:0%
can build complex pattern matching from
simple<00:13:22.000><c> pattern</c><00:13:22.320><c> matching</c><00:13:23.279><c> so</c><00:13:23.480><c> if</c><00:13:23.600><c> we</c><00:13:23.680><c> wanted</c>

00:13:23.870 --> 00:13:23.880 align:start position:0%
simple pattern matching so if we wanted
 

00:13:23.880 --> 00:13:25.790 align:start position:0%
simple pattern matching so if we wanted
to<00:13:24.040><c> find</c><00:13:24.279><c> uint</c><00:13:24.720><c> variables</c><00:13:25.320><c> Within</c><00:13:25.639><c> These</c>

00:13:25.790 --> 00:13:25.800 align:start position:0%
to find uint variables Within These
 

00:13:25.800 --> 00:13:27.990 align:start position:0%
to find uint variables Within These
nested<00:13:26.240><c> function</c><00:13:26.680><c> definitions</c><00:13:27.560><c> it</c><00:13:27.680><c> would</c><00:13:27.839><c> be</c>

00:13:27.990 --> 00:13:28.000 align:start position:0%
nested function definitions it would be
 

00:13:28.000 --> 00:13:30.829 align:start position:0%
nested function definitions it would be
as<00:13:28.160><c> simple</c><00:13:28.480><c> as</c><00:13:28.920><c> put</c><00:13:29.120><c> putting</c><00:13:29.399><c> that</c><00:13:30.160><c> appending</c>

00:13:30.829 --> 00:13:30.839 align:start position:0%
as simple as put putting that appending
 

00:13:30.839 --> 00:13:35.269 align:start position:0%
as simple as put putting that appending
that<00:13:31.839><c> first</c><00:13:32.519><c> query</c><00:13:33.519><c> below</c><00:13:33.839><c> the</c><00:13:33.959><c> second</c><00:13:34.279><c> query</c>

00:13:35.269 --> 00:13:35.279 align:start position:0%
that first query below the second query
 

00:13:35.279 --> 00:13:36.350 align:start position:0%
that first query below the second query
but<00:13:35.519><c> most</c>

00:13:36.350 --> 00:13:36.360 align:start position:0%
but most
 

00:13:36.360 --> 00:13:38.990 align:start position:0%
but most
importantly<00:13:37.360><c> this</c><00:13:37.560><c> is</c><00:13:37.920><c> focusing</c><00:13:38.480><c> once</c><00:13:38.760><c> again</c>

00:13:38.990 --> 00:13:39.000 align:start position:0%
importantly this is focusing once again
 

00:13:39.000 --> 00:13:41.350 align:start position:0%
importantly this is focusing once again
on<00:13:39.279><c> what</c><00:13:39.480><c> we're</c><00:13:39.680><c> trying</c><00:13:39.920><c> to</c><00:13:40.120><c> achieve</c><00:13:41.079><c> we</c><00:13:41.199><c> can</c>

00:13:41.350 --> 00:13:41.360 align:start position:0%
on what we're trying to achieve we can
 

00:13:41.360 --> 00:13:43.269 align:start position:0%
on what we're trying to achieve we can
think<00:13:41.560><c> about</c><00:13:41.880><c> code</c><00:13:42.199><c> patterns</c><00:13:42.600><c> and</c><00:13:42.800><c> structure</c>

00:13:43.269 --> 00:13:43.279 align:start position:0%
think about code patterns and structure
 

00:13:43.279 --> 00:13:45.430 align:start position:0%
think about code patterns and structure
design<00:13:44.079><c> without</c><00:13:44.360><c> getting</c><00:13:44.639><c> bobbed</c><00:13:45.120><c> bogged</c>

00:13:45.430 --> 00:13:45.440 align:start position:0%
design without getting bobbed bogged
 

00:13:45.440 --> 00:13:47.069 align:start position:0%
design without getting bobbed bogged
down<00:13:45.600><c> in</c><00:13:45.720><c> the</c><00:13:45.839><c> implementation</c>

00:13:47.069 --> 00:13:47.079 align:start position:0%
down in the implementation
 

00:13:47.079 --> 00:13:49.069 align:start position:0%
down in the implementation
details<00:13:48.079><c> so</c><00:13:48.399><c> let's</c><00:13:48.560><c> have</c><00:13:48.680><c> a</c><00:13:48.760><c> look</c><00:13:48.880><c> at</c><00:13:48.959><c> some</c>

00:13:49.069 --> 00:13:49.079 align:start position:0%
details so let's have a look at some
 

00:13:49.079 --> 00:13:50.509 align:start position:0%
details so let's have a look at some
more<00:13:49.240><c> advanced</c><00:13:49.639><c> query</c>

00:13:50.509 --> 00:13:50.519 align:start position:0%
more advanced query
 

00:13:50.519 --> 00:13:52.629 align:start position:0%
more advanced query
patterns<00:13:51.519><c> this</c><00:13:51.639><c> one</c><00:13:51.839><c> for</c><00:13:52.199><c> well</c><00:13:52.399><c> this</c><00:13:52.519><c> one</c>

00:13:52.629 --> 00:13:52.639 align:start position:0%
patterns this one for well this one
 

00:13:52.639 --> 00:13:54.670 align:start position:0%
patterns this one for well this one
isn't<00:13:52.880><c> that</c><00:13:53.040><c> advanced</c><00:13:53.600><c> but</c><00:13:54.040><c> for</c><00:13:54.199><c> example</c><00:13:54.519><c> in</c>

00:13:54.670 --> 00:13:54.680 align:start position:0%
isn't that advanced but for example in
 

00:13:54.680 --> 00:13:56.189 align:start position:0%
isn't that advanced but for example in
an<00:13:54.839><c> unchecked</c><00:13:55.279><c> block</c><00:13:55.480><c> you</c><00:13:55.560><c> want</c><00:13:55.680><c> to</c><00:13:55.800><c> find</c><00:13:56.000><c> all</c>

00:13:56.189 --> 00:13:56.199 align:start position:0%
an unchecked block you want to find all
 

00:13:56.199 --> 00:13:58.470 align:start position:0%
an unchecked block you want to find all
function<00:13:56.560><c> calls</c><00:13:57.360><c> as</c><00:13:57.519><c> easy</c><00:13:57.800><c> of</c><00:13:57.959><c> that</c><00:13:58.120><c> and</c><00:13:58.240><c> it's</c>

00:13:58.470 --> 00:13:58.480 align:start position:0%
function calls as easy of that and it's
 

00:13:58.480 --> 00:14:00.150 align:start position:0%
function calls as easy of that and it's
obvious<00:13:58.839><c> what</c><00:13:59.160><c> it</c><00:13:59.279><c> does</c><00:13:59.639><c> you</c><00:13:59.759><c> could</c><00:13:59.920><c> write</c>

00:14:00.150 --> 00:14:00.160 align:start position:0%
obvious what it does you could write
 

00:14:00.160 --> 00:14:03.629 align:start position:0%
obvious what it does you could write
this<00:14:00.279><c> on</c><00:14:00.440><c> one</c>

00:14:03.629 --> 00:14:03.639 align:start position:0%
 
 

00:14:03.639 --> 00:14:06.389 align:start position:0%
 
line<00:14:04.639><c> the</c><00:14:04.800><c> second</c><00:14:05.120><c> example</c><00:14:05.680><c> is</c><00:14:05.839><c> a</c><00:14:06.000><c> bit</c><00:14:06.160><c> more</c>

00:14:06.389 --> 00:14:06.399 align:start position:0%
line the second example is a bit more
 

00:14:06.399 --> 00:14:08.470 align:start position:0%
line the second example is a bit more
complicated<00:14:07.360><c> but</c><00:14:07.560><c> here</c><00:14:07.720><c> we're</c><00:14:07.959><c> looking</c><00:14:08.199><c> for</c>

00:14:08.470 --> 00:14:08.480 align:start position:0%
complicated but here we're looking for
 

00:14:08.480 --> 00:14:09.470 align:start position:0%
complicated but here we're looking for
variable

00:14:09.470 --> 00:14:09.480 align:start position:0%
variable
 

00:14:09.480 --> 00:14:11.350 align:start position:0%
variable
declarations<00:14:10.480><c> uh</c><00:14:10.600><c> State</c><00:14:10.920><c> variable</c>

00:14:11.350 --> 00:14:11.360 align:start position:0%
declarations uh State variable
 

00:14:11.360 --> 00:14:13.110 align:start position:0%
declarations uh State variable
declarations<00:14:12.160><c> that</c><00:14:12.279><c> have</c><00:14:12.399><c> a</c><00:14:12.600><c> type</c><00:14:12.839><c> that</c><00:14:12.959><c> is</c>

00:14:13.110 --> 00:14:13.120 align:start position:0%
declarations that have a type that is
 

00:14:13.120 --> 00:14:18.710 align:start position:0%
declarations that have a type that is
either<00:14:13.399><c> map</c><00:14:13.759><c> a</c><00:14:13.880><c> mapping</c><00:14:14.680><c> or</c><00:14:14.880><c> an</c>

00:14:18.710 --> 00:14:18.720 align:start position:0%
 
 

00:14:18.720 --> 00:14:20.749 align:start position:0%
 
array<00:14:19.720><c> and</c><00:14:19.880><c> think</c><00:14:20.079><c> about</c><00:14:20.320><c> what</c><00:14:20.440><c> this</c><00:14:20.560><c> would</c>

00:14:20.749 --> 00:14:20.759 align:start position:0%
array and think about what this would
 

00:14:20.759 --> 00:14:22.949 align:start position:0%
array and think about what this would
take<00:14:20.959><c> if</c><00:14:21.079><c> you</c><00:14:21.279><c> doing</c><00:14:21.480><c> manual</c><00:14:21.800><c> traversal</c><00:14:22.759><c> You'</c>

00:14:22.949 --> 00:14:22.959 align:start position:0%
take if you doing manual traversal You'
 

00:14:22.959 --> 00:14:25.470 align:start position:0%
take if you doing manual traversal You'
need<00:14:23.160><c> scope</c><00:14:23.480><c> tracking</c><00:14:24.079><c> type</c><00:14:24.320><c> checking</c><00:14:24.680><c> logic</c>

00:14:25.470 --> 00:14:25.480 align:start position:0%
need scope tracking type checking logic
 

00:14:25.480 --> 00:14:28.150 align:start position:0%
need scope tracking type checking logic
complex<00:14:26.120><c> conditional</c><00:14:26.680><c> logic</c><00:14:27.680><c> and</c><00:14:27.800><c> you'd</c><00:14:28.000><c> need</c>

00:14:28.150 --> 00:14:28.160 align:start position:0%
complex conditional logic and you'd need
 

00:14:28.160 --> 00:14:30.230 align:start position:0%
complex conditional logic and you'd need
to<00:14:28.399><c> hand</c><00:14:28.600><c> carefully</c><00:14:29.160><c> handle</c><00:14:29.519><c> the</c><00:14:29.800><c> nested</c>

00:14:30.230 --> 00:14:30.240 align:start position:0%
to hand carefully handle the nested
 

00:14:30.240 --> 00:14:34.030 align:start position:0%
to hand carefully handle the nested
structure

00:14:34.030 --> 00:14:34.040 align:start position:0%
 
 

00:14:34.040 --> 00:14:37.269 align:start position:0%
 
here<00:14:35.040><c> so</c><00:14:35.360><c> what</c><00:14:35.480><c> are</c><00:14:35.639><c> the</c><00:14:35.920><c> use</c><00:14:36.240><c> cases</c><00:14:36.600><c> for</c><00:14:36.800><c> this</c>

00:14:37.269 --> 00:14:37.279 align:start position:0%
here so what are the use cases for this
 

00:14:37.279 --> 00:14:39.069 align:start position:0%
here so what are the use cases for this
or<00:14:37.440><c> some</c><00:14:37.720><c> use</c><00:14:38.040><c> cases</c><00:14:38.360><c> CU</c><00:14:38.519><c> I'm</c><00:14:38.639><c> hoping</c><00:14:38.920><c> that</c>

00:14:39.069 --> 00:14:39.079 align:start position:0%
or some use cases CU I'm hoping that
 

00:14:39.079 --> 00:14:41.629 align:start position:0%
or some use cases CU I'm hoping that
people<00:14:39.320><c> come</c><00:14:39.519><c> up</c><00:14:39.720><c> with</c><00:14:40.600><c> far</c><00:14:40.800><c> more</c><00:14:41.000><c> use</c><00:14:41.320><c> cases</c>

00:14:41.629 --> 00:14:41.639 align:start position:0%
people come up with far more use cases
 

00:14:41.639 --> 00:14:44.310 align:start position:0%
people come up with far more use cases
than<00:14:41.800><c> we</c><00:14:41.959><c> know</c><00:14:42.440><c> we</c><00:14:42.600><c> want</c><00:14:42.880><c> sort</c><00:14:43.079><c> of</c><00:14:43.639><c> emergent</c>

00:14:44.310 --> 00:14:44.320 align:start position:0%
than we know we want sort of emergent
 

00:14:44.320 --> 00:14:47.790 align:start position:0%
than we know we want sort of emergent
benefits<00:14:44.759><c> from</c><00:14:45.120><c> this</c><00:14:46.120><c> well</c><00:14:47.040><c> if</c><00:14:47.160><c> you</c><00:14:47.279><c> wanted</c><00:14:47.560><c> to</c>

00:14:47.790 --> 00:14:47.800 align:start position:0%
benefits from this well if you wanted to
 

00:14:47.800 --> 00:14:49.470 align:start position:0%
benefits from this well if you wanted to
have<00:14:48.040><c> custom</c><00:14:48.399><c> coding</c><00:14:48.720><c> standards</c><00:14:49.120><c> you</c><00:14:49.199><c> want</c><00:14:49.320><c> to</c>

00:14:49.470 --> 00:14:49.480 align:start position:0%
have custom coding standards you want to
 

00:14:49.480 --> 00:14:51.590 align:start position:0%
have custom coding standards you want to
enforce<00:14:49.839><c> custom</c><00:14:50.160><c> coding</c><00:14:50.560><c> standards</c><00:14:51.399><c> you've</c>

00:14:51.590 --> 00:14:51.600 align:start position:0%
enforce custom coding standards you've
 

00:14:51.600 --> 00:14:53.509 align:start position:0%
enforce custom coding standards you've
got<00:14:51.880><c> project</c><00:14:52.320><c> specific</c><00:14:52.759><c> restrictions</c><00:14:53.399><c> that</c>

00:14:53.509 --> 00:14:53.519 align:start position:0%
got project specific restrictions that
 

00:14:53.519 --> 00:14:55.710 align:start position:0%
got project specific restrictions that
you<00:14:53.639><c> want</c><00:14:53.759><c> to</c><00:14:54.040><c> check</c><00:14:55.040><c> or</c><00:14:55.199><c> you</c><00:14:55.279><c> want</c><00:14:55.399><c> to</c><00:14:55.480><c> do</c>

00:14:55.710 --> 00:14:55.720 align:start position:0%
you want to check or you want to do
 

00:14:55.720 --> 00:14:57.310 align:start position:0%
you want to check or you want to do
version<00:14:56.079><c> compatibility</c><00:14:56.720><c> check</c><00:14:57.000><c> so</c><00:14:57.120><c> you</c><00:14:57.199><c> want</c>

00:14:57.310 --> 00:14:57.320 align:start position:0%
version compatibility check so you want
 

00:14:57.320 --> 00:14:58.749 align:start position:0%
version compatibility check so you want
to<00:14:57.440><c> make</c><00:14:57.600><c> sure</c><00:14:57.800><c> that</c><00:14:57.920><c> you</c><00:14:58.040><c> don't</c><00:14:58.240><c> use</c><00:14:58.480><c> certain</c>

00:14:58.749 --> 00:14:58.759 align:start position:0%
to make sure that you don't use certain
 

00:14:58.759 --> 00:15:02.230 align:start position:0%
to make sure that you don't use certain
featur<00:14:59.040><c> pies</c><00:14:59.279><c> of</c>

00:15:02.230 --> 00:15:02.240 align:start position:0%
 
 

00:15:02.240 --> 00:15:04.509 align:start position:0%
 
solidity<00:15:03.240><c> uh</c><00:15:03.440><c> style</c><00:15:03.800><c> checking</c><00:15:04.279><c> well</c><00:15:04.399><c> if</c>

00:15:04.509 --> 00:15:04.519 align:start position:0%
solidity uh style checking well if
 

00:15:04.519 --> 00:15:06.230 align:start position:0%
solidity uh style checking well if
you've<00:15:04.720><c> got</c><00:15:05.000><c> specific</c><00:15:05.399><c> naming</c><00:15:05.800><c> patterns</c><00:15:06.120><c> you</c>

00:15:06.230 --> 00:15:06.240 align:start position:0%
you've got specific naming patterns you
 

00:15:06.240 --> 00:15:08.829 align:start position:0%
you've got specific naming patterns you
want<00:15:06.360><c> to</c><00:15:06.759><c> enforce</c><00:15:07.759><c> uh</c><00:15:07.959><c> specific</c><00:15:08.360><c> structural</c>

00:15:08.829 --> 00:15:08.839 align:start position:0%
want to enforce uh specific structural
 

00:15:08.839 --> 00:15:10.829 align:start position:0%
want to enforce uh specific structural
conventions<00:15:09.839><c> and</c><00:15:09.959><c> you</c><00:15:10.040><c> can</c><00:15:10.199><c> have</c><00:15:10.399><c> context</c>

00:15:10.829 --> 00:15:10.839 align:start position:0%
conventions and you can have context
 

00:15:10.839 --> 00:15:12.829 align:start position:0%
conventions and you can have context
Weare<00:15:11.079><c> rules</c><00:15:11.480><c> now</c><00:15:11.639><c> you</c><00:15:11.759><c> might</c><00:15:11.959><c> be</c><00:15:12.160><c> thinking</c>

00:15:12.829 --> 00:15:12.839 align:start position:0%
Weare rules now you might be thinking
 

00:15:12.839 --> 00:15:15.189 align:start position:0%
Weare rules now you might be thinking
well<00:15:13.079><c> can't</c><00:15:13.279><c> I</c><00:15:13.399><c> use</c><00:15:13.560><c> a</c><00:15:13.680><c> linter</c><00:15:14.040><c> to</c><00:15:14.199><c> do</c><00:15:14.440><c> this</c>

00:15:15.189 --> 00:15:15.199 align:start position:0%
well can't I use a linter to do this
 

00:15:15.199 --> 00:15:16.949 align:start position:0%
well can't I use a linter to do this
well<00:15:15.480><c> yes</c><00:15:15.720><c> but</c><00:15:15.880><c> this</c><00:15:16.000><c> is</c><00:15:16.160><c> meant</c><00:15:16.399><c> to</c><00:15:16.560><c> write</c><00:15:16.839><c> the</c>

00:15:16.949 --> 00:15:16.959 align:start position:0%
well yes but this is meant to write the
 

00:15:16.959 --> 00:15:19.790 align:start position:0%
well yes but this is meant to write the
linter<00:15:17.440><c> this</c><00:15:17.560><c> is</c><00:15:18.279><c> designed</c><00:15:18.920><c> for</c><00:15:19.360><c> writing</c>

00:15:19.790 --> 00:15:19.800 align:start position:0%
linter this is designed for writing
 

00:15:19.800 --> 00:15:21.910 align:start position:0%
linter this is designed for writing
linters<00:15:20.320><c> so</c><00:15:20.759><c> that's</c><00:15:20.959><c> why</c><00:15:21.199><c> these</c><00:15:21.360><c> are</c><00:15:21.480><c> the</c><00:15:21.639><c> use</c>

00:15:21.910 --> 00:15:21.920 align:start position:0%
linters so that's why these are the use
 

00:15:21.920 --> 00:15:24.030 align:start position:0%
linters so that's why these are the use
cases<00:15:22.600><c> this</c><00:15:22.680><c> is</c><00:15:22.839><c> not</c><00:15:23.040><c> an</c><00:15:23.160><c> end</c><00:15:23.399><c> user</c><00:15:23.680><c> tool</c><00:15:23.959><c> this</c>

00:15:24.030 --> 00:15:24.040 align:start position:0%
cases this is not an end user tool this
 

00:15:24.040 --> 00:15:29.389 align:start position:0%
cases this is not an end user tool this
is<00:15:24.160><c> a</c><00:15:24.320><c> tool</c><00:15:24.600><c> for</c><00:15:24.880><c> developers</c><00:15:25.880><c> to</c><00:15:26.120><c> write</c><00:15:26.600><c> tools</c>

00:15:29.389 --> 00:15:29.399 align:start position:0%
is a tool for developers to write tools
 

00:15:29.399 --> 00:15:31.910 align:start position:0%
is a tool for developers to write tools
uh<00:15:29.560><c> so</c><00:15:29.800><c> you</c><00:15:29.959><c> can</c><00:15:30.240><c> do</c><00:15:30.519><c> patent</c><00:15:30.800><c> detection</c><00:15:31.560><c> anti</c>

00:15:31.910 --> 00:15:31.920 align:start position:0%
uh so you can do patent detection anti
 

00:15:31.920 --> 00:15:34.670 align:start position:0%
uh so you can do patent detection anti
patents<00:15:32.279><c> for</c><00:15:32.759><c> example</c><00:15:33.759><c> uh</c><00:15:33.920><c> optimization</c>

00:15:34.670 --> 00:15:34.680 align:start position:0%
patents for example uh optimization
 

00:15:34.680 --> 00:15:36.030 align:start position:0%
patents for example uh optimization
opportunities<00:15:35.399><c> which</c><00:15:35.519><c> may</c><00:15:35.720><c> not</c><00:15:35.880><c> be</c>

00:15:36.030 --> 00:15:36.040 align:start position:0%
opportunities which may not be
 

00:15:36.040 --> 00:15:37.629 align:start position:0%
opportunities which may not be
immediately<00:15:36.519><c> obvious</c><00:15:36.959><c> if</c><00:15:37.040><c> you've</c><00:15:37.199><c> got</c><00:15:37.279><c> a</c><00:15:37.399><c> big</c>

00:15:37.629 --> 00:15:37.639 align:start position:0%
immediately obvious if you've got a big
 

00:15:37.639 --> 00:15:40.990 align:start position:0%
immediately obvious if you've got a big
library<00:15:38.560><c> of</c><00:15:38.959><c> things</c><00:15:39.959><c> uh</c><00:15:40.120><c> detecting</c><00:15:40.639><c> complex</c>

00:15:40.990 --> 00:15:41.000 align:start position:0%
library of things uh detecting complex
 

00:15:41.000 --> 00:15:42.350 align:start position:0%
library of things uh detecting complex
structural<00:15:41.440><c> patterns</c><00:15:41.839><c> that</c><00:15:41.920><c> you</c><00:15:42.040><c> might</c><00:15:42.240><c> want</c>

00:15:42.350 --> 00:15:42.360 align:start position:0%
structural patterns that you might want
 

00:15:42.360 --> 00:15:45.150 align:start position:0%
structural patterns that you might want
to<00:15:42.600><c> simplify</c><00:15:43.279><c> or</c><00:15:43.519><c> or</c><00:15:44.000><c> Mark</c><00:15:44.399><c> so</c><00:15:44.639><c> once</c><00:15:44.839><c> again</c>

00:15:45.150 --> 00:15:45.160 align:start position:0%
to simplify or or Mark so once again
 

00:15:45.160 --> 00:15:48.670 align:start position:0%
to simplify or or Mark so once again
this<00:15:45.240><c> is</c><00:15:45.360><c> a</c><00:15:45.480><c> kind</c><00:15:45.600><c> of</c><00:15:45.720><c> an</c><00:15:45.839><c> es</c><00:15:46.399><c> linter</c><00:15:47.399><c> uh</c>

00:15:48.670 --> 00:15:48.680 align:start position:0%
this is a kind of an es linter uh
 

00:15:48.680 --> 00:15:51.230 align:start position:0%
this is a kind of an es linter uh
equivalent<00:15:49.680><c> code</c><00:15:50.000><c> transformation</c><00:15:50.720><c> automated</c>

00:15:51.230 --> 00:15:51.240 align:start position:0%
equivalent code transformation automated
 

00:15:51.240 --> 00:15:52.710 align:start position:0%
equivalent code transformation automated
refactoring<00:15:51.920><c> refactoring</c><00:15:52.480><c> is</c>

00:15:52.710 --> 00:15:52.720 align:start position:0%
refactoring refactoring is
 

00:15:52.720 --> 00:15:55.550 align:start position:0%
refactoring refactoring is
Transformations<00:15:53.639><c> that</c><00:15:54.319><c> um</c><00:15:54.519><c> preserve</c><00:15:54.920><c> the</c>

00:15:55.550 --> 00:15:55.560 align:start position:0%
Transformations that um preserve the
 

00:15:55.560 --> 00:15:58.110 align:start position:0%
Transformations that um preserve the
semantics<00:15:56.560><c> uh</c><00:15:56.680><c> code</c><00:15:57.000><c> modernization</c><00:15:57.920><c> it's</c>

00:15:58.110 --> 00:15:58.120 align:start position:0%
semantics uh code modernization it's
 

00:15:58.120 --> 00:15:59.509 align:start position:0%
semantics uh code modernization it's
very<00:15:58.360><c> easy</c><00:15:58.600><c> to</c><00:15:58.759><c> write</c>

00:15:59.509 --> 00:15:59.519 align:start position:0%
very easy to write
 

00:15:59.519 --> 00:16:02.829 align:start position:0%
very easy to write
um<00:15:59.759><c> patterns</c><00:16:00.240><c> that</c><00:16:00.440><c> then</c><00:16:00.680><c> transform</c><00:16:01.480><c> into</c><00:16:02.480><c> uh</c>

00:16:02.829 --> 00:16:02.839 align:start position:0%
um patterns that then transform into uh
 

00:16:02.839 --> 00:16:05.470 align:start position:0%
um patterns that then transform into uh
more<00:16:03.120><c> modern</c><00:16:03.560><c> code</c><00:16:04.319><c> automated</c><00:16:04.839><c> modifications</c>

00:16:05.470 --> 00:16:05.480 align:start position:0%
more modern code automated modifications
 

00:16:05.480 --> 00:16:07.069 align:start position:0%
more modern code automated modifications
i.<00:16:05.800><c> things</c><00:16:05.959><c> that</c><00:16:06.079><c> aren't</c><00:16:06.279><c> refactorings</c><00:16:06.880><c> that</c>

00:16:07.069 --> 00:16:07.079 align:start position:0%
i. things that aren't refactorings that
 

00:16:07.079 --> 00:16:10.189 align:start position:0%
i. things that aren't refactorings that
actually<00:16:07.279><c> change</c><00:16:07.639><c> the</c><00:16:07.920><c> code</c><00:16:08.920><c> and</c><00:16:09.199><c> formatting</c>

00:16:10.189 --> 00:16:10.199 align:start position:0%
actually change the code and formatting
 

00:16:10.199 --> 00:16:14.189 align:start position:0%
actually change the code and formatting
and<00:16:10.399><c> as</c><00:16:10.519><c> I</c><00:16:10.720><c> said</c><00:16:11.720><c> uh</c><00:16:11.920><c> pretty</c><00:16:12.800><c> solidity</c><00:16:13.800><c> is</c>

00:16:14.189 --> 00:16:14.199 align:start position:0%
and as I said uh pretty solidity is
 

00:16:14.199 --> 00:16:17.870 align:start position:0%
and as I said uh pretty solidity is
already<00:16:14.600><c> using</c><00:16:15.600><c> uh</c>

00:16:17.870 --> 00:16:17.880 align:start position:0%
 
 

00:16:17.880 --> 00:16:20.309 align:start position:0%
 
slang<00:16:18.880><c> uh</c><00:16:19.079><c> one</c><00:16:19.440><c> important</c><00:16:19.839><c> point</c><00:16:20.000><c> I</c><00:16:20.079><c> want</c><00:16:20.199><c> to</c>

00:16:20.309 --> 00:16:20.319 align:start position:0%
slang uh one important point I want to
 

00:16:20.319 --> 00:16:25.470 align:start position:0%
slang uh one important point I want to
make<00:16:20.600><c> here</c><00:16:20.920><c> is</c><00:16:21.399><c> that</c><00:16:22.560><c> uh</c><00:16:23.560><c> we</c><00:16:23.800><c> support</c><00:16:24.279><c> WM</c><00:16:25.279><c> and</c>

00:16:25.470 --> 00:16:25.480 align:start position:0%
make here is that uh we support WM and
 

00:16:25.480 --> 00:16:27.749 align:start position:0%
make here is that uh we support WM and
we<00:16:25.680><c> support</c><00:16:26.079><c> in</c><00:16:26.319><c> spe</c><00:16:26.959><c> specifically</c><00:16:27.560><c> the</c>

00:16:27.749 --> 00:16:27.759 align:start position:0%
we support in spe specifically the
 

00:16:27.759 --> 00:16:31.389 align:start position:0%
we support in spe specifically the
component<00:16:28.319><c> spec</c><00:16:29.040><c> and</c><00:16:29.319><c> WID</c><00:16:30.240><c> so</c><00:16:30.519><c> for</c><00:16:30.759><c> those</c><00:16:31.040><c> who</c>

00:16:31.389 --> 00:16:31.399 align:start position:0%
component spec and WID so for those who
 

00:16:31.399 --> 00:16:34.110 align:start position:0%
component spec and WID so for those who
know<00:16:31.680><c> what</c><00:16:31.839><c> that</c><00:16:32.000><c> means</c><00:16:32.720><c> this</c><00:16:32.880><c> means</c><00:16:33.240><c> that</c><00:16:33.959><c> uh</c>

00:16:34.110 --> 00:16:34.120 align:start position:0%
know what that means this means that uh
 

00:16:34.120 --> 00:16:35.870 align:start position:0%
know what that means this means that uh
all<00:16:34.279><c> of</c><00:16:34.440><c> this</c><00:16:34.639><c> technology</c><00:16:35.120><c> works</c><00:16:35.360><c> in</c><00:16:35.480><c> the</c>

00:16:35.870 --> 00:16:35.880 align:start position:0%
all of this technology works in the
 

00:16:35.880 --> 00:16:38.230 align:start position:0%
all of this technology works in the
browser<00:16:36.880><c> it's</c><00:16:37.079><c> also</c><00:16:37.319><c> available</c><00:16:37.720><c> as</c><00:16:37.839><c> a</c><00:16:37.920><c> rust</c>

00:16:38.230 --> 00:16:38.240 align:start position:0%
browser it's also available as a rust
 

00:16:38.240 --> 00:16:41.110 align:start position:0%
browser it's also available as a rust
API<00:16:38.839><c> or</c><00:16:39.440><c> uh</c><00:16:39.600><c> as</c><00:16:39.800><c> typescript</c><00:16:40.639><c> which</c><00:16:40.800><c> is</c><00:16:40.920><c> our</c>

00:16:41.110 --> 00:16:41.120 align:start position:0%
API or uh as typescript which is our
 

00:16:41.120 --> 00:16:44.030 align:start position:0%
API or uh as typescript which is our
first<00:16:41.399><c> Target</c><00:16:41.800><c> because</c><00:16:42.000><c> most</c><00:16:42.319><c> people</c><00:16:43.319><c> uh</c><00:16:43.880><c> are</c>

00:16:44.030 --> 00:16:44.040 align:start position:0%
first Target because most people uh are
 

00:16:44.040 --> 00:16:48.430 align:start position:0%
first Target because most people uh are
using

00:16:48.430 --> 00:16:48.440 align:start position:0%
 
 

00:16:48.440 --> 00:16:50.790 align:start position:0%
 
typescript<00:16:49.440><c> so</c><00:16:49.759><c> some</c><00:16:49.880><c> more</c><00:16:50.079><c> applications</c>

00:16:50.790 --> 00:16:50.800 align:start position:0%
typescript so some more applications
 

00:16:50.800 --> 00:16:52.509 align:start position:0%
typescript so some more applications
code<00:16:51.079><c> trans</c><00:16:51.680><c> I've</c><00:16:51.839><c> already</c><00:16:52.040><c> done</c><00:16:52.279><c> that</c>

00:16:52.509 --> 00:16:52.519 align:start position:0%
code trans I've already done that
 

00:16:52.519 --> 00:16:55.430 align:start position:0%
code trans I've already done that
documentation<00:16:53.600><c> generation</c><00:16:54.600><c> uh</c><00:16:54.720><c> it's</c><00:16:54.920><c> easy</c><00:16:55.199><c> to</c>

00:16:55.430 --> 00:16:55.440 align:start position:0%
documentation generation uh it's easy to
 

00:16:55.440 --> 00:16:57.269 align:start position:0%
documentation generation uh it's easy to
generate<00:16:55.839><c> automatic</c><00:16:56.319><c> documents</c><00:16:57.040><c> by</c>

00:16:57.269 --> 00:16:57.279 align:start position:0%
generate automatic documents by
 

00:16:57.279 --> 00:16:59.590 align:start position:0%
generate automatic documents by
extracting<00:16:57.759><c> function</c><00:16:58.160><c> signatures</c><00:16:59.279><c> doing</c>

00:16:59.590 --> 00:16:59.600 align:start position:0%
extracting function signatures doing
 

00:16:59.600 --> 00:17:02.870 align:start position:0%
extracting function signatures doing
structure<00:17:00.560><c> analysis</c><00:17:01.560><c> um</c><00:17:02.120><c> checking</c><00:17:02.480><c> for</c>

00:17:02.870 --> 00:17:02.880 align:start position:0%
structure analysis um checking for
 

00:17:02.880 --> 00:17:04.470 align:start position:0%
structure analysis um checking for
particular<00:17:03.279><c> usage</c><00:17:03.720><c> patterns</c><00:17:04.240><c> and</c>

00:17:04.470 --> 00:17:04.480 align:start position:0%
particular usage patterns and
 

00:17:04.480 --> 00:17:06.510 align:start position:0%
particular usage patterns and
documenting<00:17:05.000><c> them</c><00:17:05.480><c> and</c><00:17:05.679><c> processing</c><00:17:06.120><c> comments</c>

00:17:06.510 --> 00:17:06.520 align:start position:0%
documenting them and processing comments
 

00:17:06.520 --> 00:17:08.710 align:start position:0%
documenting them and processing comments
as<00:17:06.640><c> I</c><00:17:06.720><c> mentioned</c><00:17:07.079><c> before</c><00:17:07.360><c> you</c><00:17:07.480><c> might</c><00:17:07.760><c> have</c>

00:17:08.710 --> 00:17:08.720 align:start position:0%
as I mentioned before you might have
 

00:17:08.720 --> 00:17:11.350 align:start position:0%
as I mentioned before you might have
validation<00:17:09.720><c> uh</c><00:17:10.120><c> information</c><00:17:10.600><c> in</c><00:17:10.760><c> a</c><00:17:10.919><c> certain</c>

00:17:11.350 --> 00:17:11.360 align:start position:0%
validation uh information in a certain
 

00:17:11.360 --> 00:17:14.309 align:start position:0%
validation uh information in a certain
specialized<00:17:12.000><c> Contex</c><00:17:12.600><c> uh</c><00:17:12.880><c> comment</c><00:17:13.240><c> format</c><00:17:14.199><c> now</c>

00:17:14.309 --> 00:17:14.319 align:start position:0%
specialized Contex uh comment format now
 

00:17:14.319 --> 00:17:15.789 align:start position:0%
specialized Contex uh comment format now
you<00:17:14.400><c> can</c><00:17:14.559><c> also</c><00:17:14.880><c> use</c><00:17:15.039><c> this</c><00:17:15.240><c> technology</c><00:17:15.640><c> in</c>

00:17:15.789 --> 00:17:15.799 align:start position:0%
you can also use this technology in
 

00:17:15.799 --> 00:17:18.270 align:start position:0%
you can also use this technology in
combination<00:17:16.360><c> with</c><00:17:16.919><c> AI</c><00:17:17.280><c> tooling</c><00:17:17.679><c> for</c><00:17:17.880><c> example</c>

00:17:18.270 --> 00:17:18.280 align:start position:0%
combination with AI tooling for example
 

00:17:18.280 --> 00:17:21.870 align:start position:0%
combination with AI tooling for example
to<00:17:18.679><c> produce</c><00:17:19.679><c> uh</c><00:17:19.880><c> diagrams</c><00:17:20.720><c> from</c><00:17:20.959><c> your</c><00:17:21.160><c> code</c>

00:17:21.870 --> 00:17:21.880 align:start position:0%
to produce uh diagrams from your code
 

00:17:21.880 --> 00:17:24.949 align:start position:0%
to produce uh diagrams from your code
you<00:17:22.000><c> can</c><00:17:22.160><c> use</c><00:17:22.360><c> this</c><00:17:22.600><c> with</c><00:17:23.199><c> uh</c><00:17:23.360><c> by</c><00:17:23.839><c> encoding</c><00:17:24.839><c> uh</c>

00:17:24.949 --> 00:17:24.959 align:start position:0%
you can use this with uh by encoding uh
 

00:17:24.959 --> 00:17:27.830 align:start position:0%
you can use this with uh by encoding uh
the<00:17:25.039><c> slang</c><00:17:25.559><c> API</c><00:17:26.160><c> as</c><00:17:26.280><c> a</c>

00:17:27.830 --> 00:17:27.840 align:start position:0%
the slang API as a
 

00:17:27.840 --> 00:17:30.390 align:start position:0%
the slang API as a
rag<00:17:28.919><c> so</c><00:17:29.160><c> what</c><00:17:29.280><c> are</c><00:17:29.400><c> the</c><00:17:29.520><c> key</c><00:17:29.720><c> benefits</c><00:17:30.160><c> well</c>

00:17:30.390 --> 00:17:30.400 align:start position:0%
rag so what are the key benefits well
 

00:17:30.400 --> 00:17:32.710 align:start position:0%
rag so what are the key benefits well
structure<00:17:30.799><c> aware</c><00:17:31.160><c> queries</c><00:17:32.080><c> your</c><00:17:32.280><c> queries</c>

00:17:32.710 --> 00:17:32.720 align:start position:0%
structure aware queries your queries
 

00:17:32.720 --> 00:17:34.390 align:start position:0%
structure aware queries your queries
naturally<00:17:33.200><c> align</c><00:17:33.520><c> with</c><00:17:33.640><c> a</c><00:17:33.760><c> structure</c><00:17:34.080><c> of</c><00:17:34.200><c> the</c>

00:17:34.390 --> 00:17:34.400 align:start position:0%
naturally align with a structure of the
 

00:17:34.400 --> 00:17:36.029 align:start position:0%
naturally align with a structure of the
code<00:17:34.640><c> that</c><00:17:34.760><c> you're</c><00:17:34.880><c> trying</c><00:17:35.039><c> to</c><00:17:35.200><c> match</c><00:17:35.880><c> you</c>

00:17:36.029 --> 00:17:36.039 align:start position:0%
code that you're trying to match you
 

00:17:36.039 --> 00:17:37.270 align:start position:0%
code that you're trying to match you
don't<00:17:36.200><c> have</c><00:17:36.320><c> to</c><00:17:36.400><c> think</c><00:17:36.559><c> about</c><00:17:36.880><c> trees</c><00:17:37.080><c> and</c>

00:17:37.270 --> 00:17:37.280 align:start position:0%
don't have to think about trees and
 

00:17:37.280 --> 00:17:39.830 align:start position:0%
don't have to think about trees and
nodes<00:17:37.720><c> and</c><00:17:38.559><c> and</c><00:17:38.880><c> uh</c>

00:17:39.830 --> 00:17:39.840 align:start position:0%
nodes and and uh
 

00:17:39.840 --> 00:17:42.630 align:start position:0%
nodes and and uh
traversal<00:17:40.840><c> uh</c><00:17:41.160><c> complete</c><00:17:41.520><c> syntax</c>

00:17:42.630 --> 00:17:42.640 align:start position:0%
traversal uh complete syntax
 

00:17:42.640 --> 00:17:45.070 align:start position:0%
traversal uh complete syntax
preservation<00:17:43.640><c> you</c><00:17:43.840><c> never</c><00:17:44.039><c> lose</c>

00:17:45.070 --> 00:17:45.080 align:start position:0%
preservation you never lose
 

00:17:45.080 --> 00:17:47.150 align:start position:0%
preservation you never lose
information<00:17:46.080><c> perform</c><00:17:46.440><c> Transformations</c>

00:17:47.150 --> 00:17:47.160 align:start position:0%
information perform Transformations
 

00:17:47.160 --> 00:17:49.270 align:start position:0%
information perform Transformations
without<00:17:47.400><c> losing</c><00:17:47.679><c> the</c><00:17:47.919><c> formatting</c><00:17:48.919><c> and</c><00:17:49.120><c> you</c>

00:17:49.270 --> 00:17:49.280 align:start position:0%
without losing the formatting and you
 

00:17:49.280 --> 00:17:51.990 align:start position:0%
without losing the formatting and you
can<00:17:49.720><c> round</c><00:17:50.360><c> trip</c><00:17:51.120><c> from</c><00:17:51.320><c> a</c>

00:17:51.990 --> 00:17:52.000 align:start position:0%
can round trip from a
 

00:17:52.000 --> 00:17:54.149 align:start position:0%
can round trip from a
CST<00:17:53.000><c> uh</c><00:17:53.160><c> back</c><00:17:53.280><c> to</c>

00:17:54.149 --> 00:17:54.159 align:start position:0%
CST uh back to
 

00:17:54.159 --> 00:17:56.950 align:start position:0%
CST uh back to
Source<00:17:55.159><c> efficient</c><00:17:55.559><c> patent</c><00:17:55.840><c> matching</c><00:17:56.240><c> so</c><00:17:56.640><c> we</c>

00:17:56.950 --> 00:17:56.960 align:start position:0%
Source efficient patent matching so we
 

00:17:56.960 --> 00:17:58.870 align:start position:0%
Source efficient patent matching so we
can<00:17:57.200><c> spend</c><00:17:57.679><c> all</c><00:17:57.840><c> the</c><00:17:57.960><c> effort</c><00:17:58.280><c> required</c><00:17:58.600><c> to</c>

00:17:58.870 --> 00:17:58.880 align:start position:0%
can spend all the effort required to
 

00:17:58.880 --> 00:18:00.750 align:start position:0%
can spend all the effort required to
make<00:17:59.039><c> this</c><00:17:59.240><c> efficient</c><00:18:00.039><c> if</c><00:18:00.159><c> you</c><00:18:00.240><c> know</c><00:18:00.440><c> anything</c>

00:18:00.750 --> 00:18:00.760 align:start position:0%
make this efficient if you know anything
 

00:18:00.760 --> 00:18:03.029 align:start position:0%
make this efficient if you know anything
about<00:18:01.440><c> the</c><00:18:01.600><c> state-of-the-art</c><00:18:02.360><c> in</c><00:18:02.520><c> terms</c><00:18:02.799><c> of</c>

00:18:03.029 --> 00:18:03.039 align:start position:0%
about the state-of-the-art in terms of
 

00:18:03.039 --> 00:18:05.110 align:start position:0%
about the state-of-the-art in terms of
tree<00:18:03.440><c> pattern</c><00:18:03.799><c> matching</c><00:18:04.480><c> and</c><00:18:04.640><c> in</c><00:18:04.760><c> fact</c><00:18:04.960><c> we're</c>

00:18:05.110 --> 00:18:05.120 align:start position:0%
tree pattern matching and in fact we're
 

00:18:05.120 --> 00:18:08.510 align:start position:0%
tree pattern matching and in fact we're
not<00:18:05.400><c> a</c><00:18:06.039><c> a</c><00:18:06.200><c> search</c><00:18:06.520><c> engine</c><00:18:06.919><c> we</c><00:18:07.039><c> are</c><00:18:07.200><c> a</c><00:18:07.520><c> unifier</c>

00:18:08.510 --> 00:18:08.520 align:start position:0%
not a a search engine we are a unifier
 

00:18:08.520 --> 00:18:12.510 align:start position:0%
not a a search engine we are a unifier
so<00:18:08.760><c> we</c><00:18:08.919><c> use</c><00:18:09.120><c> a</c><00:18:09.640><c> prolog</c><00:18:10.640><c> datalog</c><00:18:11.559><c> based</c><00:18:12.360><c> uh</c>

00:18:12.510 --> 00:18:12.520 align:start position:0%
so we use a prolog datalog based uh
 

00:18:12.520 --> 00:18:14.230 align:start position:0%
so we use a prolog datalog based uh
mechanism<00:18:13.000><c> which</c><00:18:13.320><c> returns</c><00:18:13.520><c> you</c><00:18:13.760><c> all</c><00:18:14.000><c> the</c>

00:18:14.230 --> 00:18:14.240 align:start position:0%
mechanism which returns you all the
 

00:18:14.240 --> 00:18:16.310 align:start position:0%
mechanism which returns you all the
potential<00:18:14.600><c> matching</c><00:18:15.080><c> results</c><00:18:15.720><c> not</c><00:18:15.960><c> just</c><00:18:16.120><c> the</c>

00:18:16.310 --> 00:18:16.320 align:start position:0%
potential matching results not just the
 

00:18:16.320 --> 00:18:18.870 align:start position:0%
potential matching results not just the
first<00:18:16.600><c> one</c><00:18:17.600><c> you</c><00:18:17.720><c> can</c><00:18:17.919><c> avoid</c><00:18:18.240><c> unnecessary</c>

00:18:18.870 --> 00:18:18.880 align:start position:0%
first one you can avoid unnecessary
 

00:18:18.880 --> 00:18:20.789 align:start position:0%
first one you can avoid unnecessary
traversals<00:18:19.480><c> we</c><00:18:19.600><c> can</c><00:18:19.760><c> case</c><00:18:20.120><c> results</c><00:18:20.520><c> we</c><00:18:20.640><c> can</c>

00:18:20.789 --> 00:18:20.799 align:start position:0%
traversals we can case results we can
 

00:18:20.799 --> 00:18:23.270 align:start position:0%
traversals we can case results we can
index<00:18:21.200><c> the</c><00:18:21.320><c> syntax</c><00:18:21.799><c> tree</c><00:18:22.600><c> make</c><00:18:22.880><c> it</c><00:18:23.039><c> very</c>

00:18:23.270 --> 00:18:23.280 align:start position:0%
index the syntax tree make it very
 

00:18:23.280 --> 00:18:25.149 align:start position:0%
index the syntax tree make it very
efficient<00:18:23.679><c> it</c><00:18:23.799><c> would</c><00:18:23.960><c> take</c><00:18:24.120><c> a</c><00:18:24.280><c> lot</c><00:18:24.400><c> of</c><00:18:24.600><c> effort</c>

00:18:25.149 --> 00:18:25.159 align:start position:0%
efficient it would take a lot of effort
 

00:18:25.159 --> 00:18:27.750 align:start position:0%
efficient it would take a lot of effort
to<00:18:25.520><c> uh</c><00:18:25.640><c> get</c><00:18:25.799><c> the</c><00:18:26.000><c> same</c><00:18:26.960><c> uh</c><00:18:27.120><c> result</c><00:18:27.440><c> if</c><00:18:27.559><c> you</c>

00:18:27.750 --> 00:18:27.760 align:start position:0%
to uh get the same uh result if you
 

00:18:27.760 --> 00:18:29.789 align:start position:0%
to uh get the same uh result if you
doing<00:18:27.960><c> it</c><00:18:28.080><c> yourself</c>

00:18:29.789 --> 00:18:29.799 align:start position:0%
doing it yourself
 

00:18:29.799 --> 00:18:32.270 align:start position:0%
doing it yourself
composable<00:18:30.360><c> syntax</c><00:18:30.799><c> rules</c><00:18:31.640><c> you</c><00:18:31.760><c> can</c><00:18:31.960><c> combine</c>

00:18:32.270 --> 00:18:32.280 align:start position:0%
composable syntax rules you can combine
 

00:18:32.280 --> 00:18:33.789 align:start position:0%
composable syntax rules you can combine
simple<00:18:32.600><c> rules</c><00:18:32.880><c> to</c><00:18:32.960><c> make</c><00:18:33.159><c> bigger</c><00:18:33.400><c> ones</c><00:18:33.600><c> you</c><00:18:33.679><c> can</c>

00:18:33.789 --> 00:18:33.799 align:start position:0%
simple rules to make bigger ones you can
 

00:18:33.799 --> 00:18:37.110 align:start position:0%
simple rules to make bigger ones you can
have<00:18:33.919><c> a</c><00:18:34.039><c> big</c><00:18:34.280><c> library</c><00:18:35.159><c> of</c><00:18:35.400><c> these</c><00:18:36.039><c> uh</c><00:18:36.240><c> pattern</c>

00:18:37.110 --> 00:18:37.120 align:start position:0%
have a big library of these uh pattern
 

00:18:37.120 --> 00:18:40.310 align:start position:0%
have a big library of these uh pattern
and<00:18:37.240><c> you</c><00:18:37.360><c> can</c><00:18:37.520><c> reuse</c><00:18:38.039><c> them</c><00:18:38.640><c> uh</c><00:18:38.799><c> over</c><00:18:39.039><c> your</c><00:18:39.320><c> code</c>

00:18:40.310 --> 00:18:40.320 align:start position:0%
and you can reuse them uh over your code
 

00:18:40.320 --> 00:18:42.669 align:start position:0%
and you can reuse them uh over your code
share<00:18:40.679><c> queries</c><00:18:41.120><c> between</c><00:18:41.440><c> your</c>

00:18:42.669 --> 00:18:42.679 align:start position:0%
share queries between your
 

00:18:42.679 --> 00:18:44.870 align:start position:0%
share queries between your
projects<00:18:43.679><c> you've</c><00:18:43.880><c> got</c><00:18:44.039><c> maintainable</c>

00:18:44.870 --> 00:18:44.880 align:start position:0%
projects you've got maintainable
 

00:18:44.880 --> 00:18:47.549 align:start position:0%
projects you've got maintainable
analysis<00:18:45.440><c> code</c><00:18:46.159><c> so</c><00:18:46.400><c> the</c><00:18:46.520><c> queries</c><00:18:47.159><c> express</c>

00:18:47.549 --> 00:18:47.559 align:start position:0%
analysis code so the queries express
 

00:18:47.559 --> 00:18:49.909 align:start position:0%
analysis code so the queries express
your<00:18:47.760><c> intent</c><00:18:48.480><c> not</c><00:18:48.760><c> how</c><00:18:48.960><c> you</c><00:18:49.440><c> not</c><00:18:49.640><c> what</c><00:18:49.799><c> you</c>

00:18:49.909 --> 00:18:49.919 align:start position:0%
your intent not how you not what you
 

00:18:49.919 --> 00:18:51.870 align:start position:0%
your intent not how you not what you
want<00:18:50.080><c> to</c><00:18:50.240><c> do</c><00:18:50.600><c> uh</c><00:18:50.720><c> how</c><00:18:50.880><c> you</c><00:18:50.960><c> want</c><00:18:51.080><c> to</c><00:18:51.240><c> do</c><00:18:51.360><c> it</c><00:18:51.679><c> but</c>

00:18:51.870 --> 00:18:51.880 align:start position:0%
want to do uh how you want to do it but
 

00:18:51.880 --> 00:18:53.830 align:start position:0%
want to do uh how you want to do it but
what<00:18:52.000><c> you</c><00:18:52.120><c> want</c><00:18:52.240><c> to</c><00:18:52.400><c> do</c><00:18:52.880><c> your</c><00:18:53.039><c> code</c><00:18:53.320><c> is</c><00:18:53.440><c> shorter</c>

00:18:53.830 --> 00:18:53.840 align:start position:0%
what you want to do your code is shorter
 

00:18:53.840 --> 00:18:56.310 align:start position:0%
what you want to do your code is shorter
it's<00:18:54.000><c> easier</c><00:18:54.320><c> to</c><00:18:54.799><c> understand</c><00:18:55.559><c> any</c><00:18:55.799><c> changes</c><00:18:56.159><c> to</c>

00:18:56.310 --> 00:18:56.320 align:start position:0%
it's easier to understand any changes to
 

00:18:56.320 --> 00:18:58.950 align:start position:0%
it's easier to understand any changes to
the<00:18:56.480><c> language</c><00:18:57.400><c> we</c><00:18:57.600><c> say</c><00:18:57.880><c> ter</c><00:18:58.200><c> that</c><00:18:58.320><c> slang</c><00:18:58.760><c> takes</c>

00:18:58.950 --> 00:18:58.960 align:start position:0%
the language we say ter that slang takes
 

00:18:58.960 --> 00:19:00.669 align:start position:0%
the language we say ter that slang takes
care<00:18:59.120><c> of</c><00:18:59.240><c> that</c><00:18:59.360><c> so</c><00:18:59.480><c> you</c><00:18:59.559><c> don't</c><00:18:59.799><c> have</c><00:18:59.919><c> to</c><00:19:00.440><c> less</c>

00:19:00.669 --> 00:19:00.679 align:start position:0%
care of that so you don't have to less
 

00:19:00.679 --> 00:19:03.430 align:start position:0%
care of that so you don't have to less
code<00:19:01.039><c> means</c><00:19:01.360><c> fewer</c><00:19:01.799><c> bugs</c><00:19:02.520><c> and</c><00:19:02.679><c> these</c><00:19:02.919><c> benefits</c>

00:19:03.430 --> 00:19:03.440 align:start position:0%
code means fewer bugs and these benefits
 

00:19:03.440 --> 00:19:06.549 align:start position:0%
code means fewer bugs and these benefits
compound<00:19:04.200><c> it's</c><00:19:04.360><c> not</c><00:19:04.559><c> 1+</c><00:19:05.080><c> 1+</c><00:19:05.600><c> one</c><00:19:05.919><c> it's</c><00:19:06.440><c> you</c>

00:19:06.549 --> 00:19:06.559 align:start position:0%
compound it's not 1+ 1+ one it's you
 

00:19:06.559 --> 00:19:09.230 align:start position:0%
compound it's not 1+ 1+ one it's you
know<00:19:07.000><c> far</c><00:19:07.360><c> this</c><00:19:07.720><c> the</c><00:19:08.080><c> uh</c><00:19:08.440><c> whole</c><00:19:08.840><c> is</c><00:19:09.039><c> far</c>

00:19:09.230 --> 00:19:09.240 align:start position:0%
know far this the uh whole is far
 

00:19:09.240 --> 00:19:13.470 align:start position:0%
know far this the uh whole is far
greater<00:19:09.520><c> than</c><00:19:09.640><c> the</c><00:19:09.720><c> sum</c><00:19:09.880><c> of</c><00:19:10.000><c> the</c>

00:19:13.470 --> 00:19:13.480 align:start position:0%
 
 

00:19:13.480 --> 00:19:16.230 align:start position:0%
 
parts<00:19:14.480><c> so</c><00:19:15.200><c> what</c><00:19:15.400><c> impact</c><00:19:15.679><c> does</c><00:19:15.840><c> this</c><00:19:16.000><c> have</c><00:19:16.120><c> on</c>

00:19:16.230 --> 00:19:16.240 align:start position:0%
parts so what impact does this have on
 

00:19:16.240 --> 00:19:18.630 align:start position:0%
parts so what impact does this have on
your<00:19:16.360><c> development</c><00:19:16.840><c> well</c><00:19:17.159><c> before</c><00:19:18.159><c> using</c><00:19:18.480><c> this</c>

00:19:18.630 --> 00:19:18.640 align:start position:0%
your development well before using this
 

00:19:18.640 --> 00:19:21.390 align:start position:0%
your development well before using this
query<00:19:19.200><c> API</c><00:19:20.200><c> it</c><00:19:20.400><c> spend</c><00:19:20.760><c> significant</c><00:19:21.240><c> time</c>

00:19:21.390 --> 00:19:21.400 align:start position:0%
query API it spend significant time
 

00:19:21.400 --> 00:19:23.870 align:start position:0%
query API it spend significant time
writing<00:19:21.720><c> and</c><00:19:21.840><c> debugging</c><00:19:22.280><c> the</c><00:19:22.400><c> traversal</c><00:19:22.960><c> code</c>

00:19:23.870 --> 00:19:23.880 align:start position:0%
writing and debugging the traversal code
 

00:19:23.880 --> 00:19:25.710 align:start position:0%
writing and debugging the traversal code
you'd<00:19:24.159><c> struggle</c><00:19:24.600><c> with</c><00:19:24.799><c> maintaining</c><00:19:25.480><c> the</c>

00:19:25.710 --> 00:19:25.720 align:start position:0%
you'd struggle with maintaining the
 

00:19:25.720 --> 00:19:28.110 align:start position:0%
you'd struggle with maintaining the
analysis<00:19:26.320><c> logic</c><00:19:27.039><c> and</c><00:19:27.159><c> you'd</c><00:19:27.400><c> face</c><00:19:27.679><c> challenges</c>

00:19:28.110 --> 00:19:28.120 align:start position:0%
analysis logic and you'd face challenges
 

00:19:28.120 --> 00:19:29.270 align:start position:0%
analysis logic and you'd face challenges
when<00:19:28.280><c> adding</c><00:19:28.480><c> new</c>

00:19:29.270 --> 00:19:29.280 align:start position:0%
when adding new
 

00:19:29.280 --> 00:19:31.950 align:start position:0%
when adding new
features<00:19:30.280><c> after</c><00:19:30.520><c> it</c><00:19:31.039><c> you</c><00:19:31.200><c> end</c><00:19:31.400><c> up</c><00:19:31.520><c> with</c><00:19:31.679><c> clear</c>

00:19:31.950 --> 00:19:31.960 align:start position:0%
features after it you end up with clear
 

00:19:31.960 --> 00:19:34.230 align:start position:0%
features after it you end up with clear
Focus<00:19:32.400><c> code</c><00:19:32.720><c> it's</c><00:19:32.880><c> easy</c><00:19:33.120><c> to</c><00:19:33.280><c> maintain</c><00:19:34.080><c> you've</c>

00:19:34.230 --> 00:19:34.240 align:start position:0%
Focus code it's easy to maintain you've
 

00:19:34.240 --> 00:19:36.070 align:start position:0%
Focus code it's easy to maintain you've
got<00:19:34.360><c> a</c><00:19:34.520><c> robust</c><00:19:34.960><c> implementation</c><00:19:35.640><c> and</c><00:19:35.799><c> it's</c>

00:19:36.070 --> 00:19:36.080 align:start position:0%
got a robust implementation and it's
 

00:19:36.080 --> 00:19:37.750 align:start position:0%
got a robust implementation and it's
highly

00:19:37.750 --> 00:19:37.760 align:start position:0%
highly
 

00:19:37.760 --> 00:19:44.390 align:start position:0%
highly
extensible<00:19:38.760><c> and</c><00:19:39.240><c> that</c><00:19:39.400><c> is</c><00:19:39.559><c> it</c><00:19:40.320><c> any</c>

00:19:44.390 --> 00:19:44.400 align:start position:0%
 
 

00:19:44.400 --> 00:19:47.630 align:start position:0%
 
questions<00:19:45.679><c> fantastic</c><00:19:46.679><c> thank</c><00:19:46.840><c> you</c><00:19:47.000><c> Anthony</c>

00:19:47.630 --> 00:19:47.640 align:start position:0%
questions fantastic thank you Anthony
 

00:19:47.640 --> 00:19:49.950 align:start position:0%
questions fantastic thank you Anthony
all<00:19:47.760><c> right</c><00:19:47.919><c> let's</c><00:19:48.120><c> get</c><00:19:48.320><c> with</c><00:19:48.600><c> the</c><00:19:49.559><c> let's</c><00:19:49.760><c> get</c>

00:19:49.950 --> 00:19:49.960 align:start position:0%
all right let's get with the let's get
 

00:19:49.960 --> 00:19:53.190 align:start position:0%
all right let's get with the let's get
with<00:19:50.120><c> the</c><00:19:50.320><c> questions</c><00:19:51.320><c> so</c><00:19:52.159><c> folks</c><00:19:52.559><c> remember</c><00:19:53.080><c> you</c>

00:19:53.190 --> 00:19:53.200 align:start position:0%
with the questions so folks remember you
 

00:19:53.200 --> 00:19:55.710 align:start position:0%
with the questions so folks remember you
can<00:19:53.320><c> scan</c><00:19:53.640><c> that</c><00:19:53.799><c> QR</c><00:19:54.159><c> code</c><00:19:54.720><c> add</c><00:19:55.120><c> questions</c><00:19:55.480><c> to</c>

00:19:55.710 --> 00:19:55.720 align:start position:0%
can scan that QR code add questions to
 

00:19:55.720 --> 00:19:58.230 align:start position:0%
can scan that QR code add questions to
that<00:19:55.919><c> list</c><00:19:56.400><c> smash</c><00:19:56.840><c> that</c><00:19:57.159><c> up</c><00:19:57.360><c> vote</c><00:19:57.600><c> button</c><00:19:58.039><c> that</c>

00:19:58.230 --> 00:19:58.240 align:start position:0%
that list smash that up vote button that
 

00:19:58.240 --> 00:20:01.270 align:start position:0%
that list smash that up vote button that
the<00:19:58.360><c> most</c><00:19:58.799><c> interesting</c><00:19:59.159><c> question</c><00:19:59.559><c> gets</c><00:20:00.280><c> asked</c>

00:20:01.270 --> 00:20:01.280 align:start position:0%
the most interesting question gets asked
 

00:20:01.280 --> 00:20:03.950 align:start position:0%
the most interesting question gets asked
let's<00:20:01.520><c> go</c><00:20:01.679><c> with</c><00:20:01.799><c> the</c><00:20:01.960><c> first</c><00:20:02.240><c> one</c><00:20:03.240><c> what</c><00:20:03.360><c> are</c>

00:20:03.950 --> 00:20:03.960 align:start position:0%
let's go with the first one what are
 

00:20:03.960 --> 00:20:06.950 align:start position:0%
let's go with the first one what are
advantages<00:20:04.960><c> to</c><00:20:05.159><c> using</c><00:20:05.480><c> slang</c><00:20:06.120><c> compared</c><00:20:06.440><c> to</c>

00:20:06.950 --> 00:20:06.960 align:start position:0%
advantages to using slang compared to
 

00:20:06.960 --> 00:20:09.470 align:start position:0%
advantages to using slang compared to
srep<00:20:07.960><c> uh</c><00:20:08.080><c> well</c><00:20:08.200><c> I</c><00:20:08.320><c> must</c><00:20:08.520><c> admit</c><00:20:08.799><c> I'm</c><00:20:08.919><c> not</c>

00:20:09.470 --> 00:20:09.480 align:start position:0%
srep uh well I must admit I'm not
 

00:20:09.480 --> 00:20:12.070 align:start position:0%
srep uh well I must admit I'm not
familiar<00:20:10.000><c> with</c><00:20:10.799><c> uh</c><00:20:10.960><c> srep</c><00:20:11.559><c> but</c><00:20:11.640><c> I</c><00:20:11.720><c> know</c><00:20:11.919><c> the</c>

00:20:12.070 --> 00:20:12.080 align:start position:0%
familiar with uh srep but I know the
 

00:20:12.080 --> 00:20:14.669 align:start position:0%
familiar with uh srep but I know the
general<00:20:12.799><c> uh</c><00:20:13.000><c> concept</c><00:20:13.880><c> the</c><00:20:14.080><c> specific</c><00:20:14.440><c> thing</c>

00:20:14.669 --> 00:20:14.679 align:start position:0%
general uh concept the specific thing
 

00:20:14.679 --> 00:20:16.270 align:start position:0%
general uh concept the specific thing
here<00:20:14.799><c> that</c><00:20:14.960><c> this</c><00:20:15.039><c> is</c><00:20:15.120><c> a</c><00:20:15.320><c> programmatic</c><00:20:15.919><c> tool</c>

00:20:16.270 --> 00:20:16.280 align:start position:0%
here that this is a programmatic tool
 

00:20:16.280 --> 00:20:18.710 align:start position:0%
here that this is a programmatic tool
that<00:20:16.400><c> you</c><00:20:16.559><c> use</c><00:20:16.799><c> to</c><00:20:16.960><c> build</c><00:20:17.240><c> other</c><00:20:17.480><c> tools</c><00:20:18.400><c> now</c><00:20:18.559><c> of</c>

00:20:18.710 --> 00:20:18.720 align:start position:0%
that you use to build other tools now of
 

00:20:18.720 --> 00:20:20.630 align:start position:0%
that you use to build other tools now of
course<00:20:18.880><c> you</c><00:20:19.000><c> can</c><00:20:19.200><c> combine</c><00:20:19.640><c> things</c><00:20:19.880><c> like</c>

00:20:20.630 --> 00:20:20.640 align:start position:0%
course you can combine things like
 

00:20:20.640 --> 00:20:24.549 align:start position:0%
course you can combine things like
srep<00:20:21.640><c> uh</c><00:20:21.960><c> I</c><00:20:22.360><c> imagine</c><00:20:23.360><c> uh</c><00:20:23.520><c> but</c><00:20:23.720><c> I</c><00:20:23.799><c> don't</c><00:20:24.039><c> know</c><00:20:24.360><c> if</c>

00:20:24.549 --> 00:20:24.559 align:start position:0%
srep uh I imagine uh but I don't know if
 

00:20:24.559 --> 00:20:26.350 align:start position:0%
srep uh I imagine uh but I don't know if
that<00:20:24.679><c> is</c><00:20:24.840><c> something</c><00:20:25.159><c> that</c><00:20:25.280><c> you</c><00:20:25.400><c> would</c><00:20:25.760><c> include</c>

00:20:26.350 --> 00:20:26.360 align:start position:0%
that is something that you would include
 

00:20:26.360 --> 00:20:29.549 align:start position:0%
that is something that you would include
in<00:20:26.520><c> a</c><00:20:26.679><c> tool</c><00:20:27.400><c> for</c><00:20:27.880><c> analyzing</c><00:20:29.120><c> lots</c><00:20:29.320><c> of</c>

00:20:29.549 --> 00:20:29.559 align:start position:0%
in a tool for analyzing lots of
 

00:20:29.559 --> 00:20:31.789 align:start position:0%
in a tool for analyzing lots of
different<00:20:29.880><c> versions</c><00:20:30.320><c> of</c><00:20:30.640><c> solidity</c><00:20:31.640><c> that</c>

00:20:31.789 --> 00:20:31.799 align:start position:0%
different versions of solidity that
 

00:20:31.799 --> 00:20:34.149 align:start position:0%
different versions of solidity that
makes<00:20:32.039><c> sense</c><00:20:32.360><c> thank</c><00:20:32.520><c> you</c><00:20:33.360><c> how</c><00:20:33.559><c> does</c><00:20:33.760><c> slang</c>

00:20:34.149 --> 00:20:34.159 align:start position:0%
makes sense thank you how does slang
 

00:20:34.159 --> 00:20:36.909 align:start position:0%
makes sense thank you how does slang
differ<00:20:34.600><c> from</c><00:20:34.760><c> a</c><00:20:35.000><c> fine-tuned</c><00:20:35.960><c> llm</c><00:20:36.760><c> could</c>

00:20:36.909 --> 00:20:36.919 align:start position:0%
differ from a fine-tuned llm could
 

00:20:36.919 --> 00:20:39.630 align:start position:0%
differ from a fine-tuned llm could
slang's<00:20:37.280><c> modularity</c><00:20:38.159><c> allow</c><00:20:38.480><c> to</c><00:20:38.640><c> use</c><00:20:38.880><c> llms</c><00:20:39.520><c> in</c>

00:20:39.630 --> 00:20:39.640 align:start position:0%
slang's modularity allow to use llms in
 

00:20:39.640 --> 00:20:42.310 align:start position:0%
slang's modularity allow to use llms in
the<00:20:39.760><c> future</c><00:20:40.480><c> oh</c><00:20:40.720><c> this</c><00:20:40.840><c> is</c><00:20:41.280><c> I'm</c><00:20:41.400><c> in</c><00:20:41.559><c> applied</c>

00:20:42.310 --> 00:20:42.320 align:start position:0%
the future oh this is I'm in applied
 

00:20:42.320 --> 00:20:45.270 align:start position:0%
the future oh this is I'm in applied
research<00:20:43.320><c> and</c><00:20:43.919><c> uh</c><00:20:44.120><c> this</c><00:20:44.240><c> is</c><00:20:44.400><c> something</c><00:20:44.960><c> that</c>

00:20:45.270 --> 00:20:45.280 align:start position:0%
research and uh this is something that
 

00:20:45.280 --> 00:20:48.470 align:start position:0%
research and uh this is something that
is<00:20:45.840><c> very</c><00:20:46.200><c> actively</c><00:20:46.640><c> under</c><00:20:47.200><c> research</c><00:20:48.200><c> I'm</c><00:20:48.320><c> not</c>

00:20:48.470 --> 00:20:48.480 align:start position:0%
is very actively under research I'm not
 

00:20:48.480 --> 00:20:52.710 align:start position:0%
is very actively under research I'm not
making<00:20:48.799><c> any</c><00:20:49.440><c> commitment</c><00:20:50.440><c> uh</c><00:20:51.320><c> but</c><00:20:52.320><c> if</c><00:20:52.440><c> you've</c>

00:20:52.710 --> 00:20:52.720 align:start position:0%
making any commitment uh but if you've
 

00:20:52.720 --> 00:20:55.870 align:start position:0%
making any commitment uh but if you've
used<00:20:53.080><c> fine-tuned</c><00:20:53.880><c> llms</c><00:20:54.880><c> uh</c><00:20:55.159><c> and</c><00:20:55.480><c> I've</c><00:20:55.640><c> used</c>

00:20:55.870 --> 00:20:55.880 align:start position:0%
used fine-tuned llms uh and I've used
 

00:20:55.880 --> 00:20:57.590 align:start position:0%
used fine-tuned llms uh and I've used
them<00:20:56.039><c> a</c><00:20:56.159><c> lot</c><00:20:56.320><c> for</c><00:20:56.480><c> example</c><00:20:56.919><c> a</c><00:20:57.000><c> lot</c><00:20:57.120><c> of</c><00:20:57.240><c> the</c><00:20:57.360><c> code</c>

00:20:57.590 --> 00:20:57.600 align:start position:0%
them a lot for example a lot of the code
 

00:20:57.600 --> 00:20:59.789 align:start position:0%
them a lot for example a lot of the code
that<00:20:57.720><c> I</c><00:20:57.880><c> write</c><00:20:58.600><c> is</c><00:20:58.760><c> actually</c><00:20:59.039><c> written</c><00:20:59.360><c> by</c>

00:20:59.789 --> 00:20:59.799 align:start position:0%
that I write is actually written by
 

00:20:59.799 --> 00:21:02.669 align:start position:0%
that I write is actually written by
Claude<00:21:00.799><c> uh</c><00:21:00.960><c> a</c><00:21:01.080><c> lot</c><00:21:01.200><c> of</c><00:21:01.320><c> this</c><00:21:01.520><c> presentation</c><00:21:02.520><c> was</c>

00:21:02.669 --> 00:21:02.679 align:start position:0%
Claude uh a lot of this presentation was
 

00:21:02.679 --> 00:21:06.669 align:start position:0%
Claude uh a lot of this presentation was
written<00:21:03.000><c> by</c><00:21:03.280><c> Claude</c><00:21:04.280><c> um</c><00:21:05.000><c> amazing</c><00:21:05.520><c> tool</c><00:21:05.960><c> but</c>

00:21:06.669 --> 00:21:06.679 align:start position:0%
written by Claude um amazing tool but
 

00:21:06.679 --> 00:21:08.750 align:start position:0%
written by Claude um amazing tool but
you<00:21:06.840><c> always</c><00:21:07.080><c> need</c><00:21:07.240><c> a</c><00:21:07.400><c> human</c><00:21:07.640><c> in</c><00:21:07.799><c> the</c><00:21:07.919><c> loop</c><00:21:08.480><c> so</c>

00:21:08.750 --> 00:21:08.760 align:start position:0%
you always need a human in the loop so
 

00:21:08.760 --> 00:21:12.149 align:start position:0%
you always need a human in the loop so
yes<00:21:08.919><c> you</c><00:21:09.080><c> can</c><00:21:09.280><c> do</c><00:21:09.559><c> this</c><00:21:10.200><c> uh</c><00:21:10.559><c> using</c><00:21:11.000><c> llms</c><00:21:11.640><c> but</c>

00:21:12.149 --> 00:21:12.159 align:start position:0%
yes you can do this uh using llms but
 

00:21:12.159 --> 00:21:14.070 align:start position:0%
yes you can do this uh using llms but
the<00:21:12.279><c> thing</c><00:21:12.440><c> with</c><00:21:12.600><c> llms</c><00:21:13.159><c> is</c><00:21:13.279><c> that</c><00:21:13.480><c> they</c><00:21:13.640><c> are</c><00:21:13.919><c> a</c>

00:21:14.070 --> 00:21:14.080 align:start position:0%
the thing with llms is that they are a
 

00:21:14.080 --> 00:21:16.549 align:start position:0%
the thing with llms is that they are a
human<00:21:14.320><c> augmentation</c><00:21:15.039><c> tool</c><00:21:15.840><c> whereas</c><00:21:16.400><c> the</c>

00:21:16.549 --> 00:21:16.559 align:start position:0%
human augmentation tool whereas the
 

00:21:16.559 --> 00:21:17.750 align:start position:0%
human augmentation tool whereas the
approach<00:21:16.880><c> that</c><00:21:17.000><c> we're</c><00:21:17.159><c> talking</c><00:21:17.360><c> about</c><00:21:17.600><c> here</c>

00:21:17.750 --> 00:21:17.760 align:start position:0%
approach that we're talking about here
 

00:21:17.760 --> 00:21:20.950 align:start position:0%
approach that we're talking about here
is<00:21:18.000><c> exact</c><00:21:18.480><c> and</c><00:21:18.880><c> precise</c><00:21:19.880><c> if</c><00:21:20.000><c> you've</c><00:21:20.159><c> used</c><00:21:20.480><c> llms</c>

00:21:20.950 --> 00:21:20.960 align:start position:0%
is exact and precise if you've used llms
 

00:21:20.960 --> 00:21:23.870 align:start position:0%
is exact and precise if you've used llms
to<00:21:21.120><c> do</c><00:21:21.320><c> this</c><00:21:21.480><c> you</c><00:21:21.640><c> know</c><00:21:21.960><c> that</c><00:21:22.799><c> you</c><00:21:23.279><c> you</c><00:21:23.480><c> spend</c><00:21:23.760><c> a</c>

00:21:23.870 --> 00:21:23.880 align:start position:0%
to do this you know that you you spend a
 

00:21:23.880 --> 00:21:25.789 align:start position:0%
to do this you know that you you spend a
lot<00:21:24.000><c> of</c><00:21:24.120><c> time</c><00:21:24.279><c> on</c><00:21:24.440><c> prompt</c><00:21:24.760><c> engineering</c><00:21:25.679><c> and</c>

00:21:25.789 --> 00:21:25.799 align:start position:0%
lot of time on prompt engineering and
 

00:21:25.799 --> 00:21:27.350 align:start position:0%
lot of time on prompt engineering and
then<00:21:25.919><c> you</c><00:21:26.080><c> cross</c><00:21:26.320><c> your</c><00:21:26.440><c> fingers</c><00:21:27.200><c> and</c>

00:21:27.350 --> 00:21:27.360 align:start position:0%
then you cross your fingers and
 

00:21:27.360 --> 00:21:29.110 align:start position:0%
then you cross your fingers and
something<00:21:27.679><c> comes</c><00:21:28.039><c> back</c><00:21:28.600><c> and</c><00:21:28.679><c> it</c><00:21:28.799><c> doesn't</c>

00:21:29.110 --> 00:21:29.120 align:start position:0%
something comes back and it doesn't
 

00:21:29.120 --> 00:21:31.149 align:start position:0%
something comes back and it doesn't
quite<00:21:29.360><c> work</c><00:21:29.799><c> and</c><00:21:29.919><c> you</c><00:21:30.120><c> prompt</c><00:21:30.400><c> it</c><00:21:30.600><c> again</c><00:21:31.000><c> and</c>

00:21:31.149 --> 00:21:31.159 align:start position:0%
quite work and you prompt it again and
 

00:21:31.159 --> 00:21:34.590 align:start position:0%
quite work and you prompt it again and
so<00:21:31.320><c> on</c><00:21:31.480><c> and</c><00:21:31.600><c> so</c><00:21:31.799><c> forth</c><00:21:32.559><c> so</c><00:21:33.559><c> yes</c><00:21:34.279><c> this</c><00:21:34.440><c> is</c>

00:21:34.590 --> 00:21:34.600 align:start position:0%
so on and so forth so yes this is
 

00:21:34.600 --> 00:21:36.310 align:start position:0%
so on and so forth so yes this is
certainly<00:21:35.039><c> something</c><00:21:35.520><c> that</c><00:21:35.840><c> uh</c><00:21:36.000><c> could</c><00:21:36.159><c> be</c>

00:21:36.310 --> 00:21:36.320 align:start position:0%
certainly something that uh could be
 

00:21:36.320 --> 00:21:38.789 align:start position:0%
certainly something that uh could be
included<00:21:36.760><c> in</c><00:21:36.880><c> the</c><00:21:37.000><c> future</c><00:21:37.720><c> there's</c><00:21:37.919><c> a</c><00:21:38.159><c> chance</c>

00:21:38.789 --> 00:21:38.799 align:start position:0%
included in the future there's a chance
 

00:21:38.799 --> 00:21:41.190 align:start position:0%
included in the future there's a chance
but<00:21:39.200><c> maybe</c><00:21:39.480><c> not</c><00:21:39.760><c> now</c><00:21:40.360><c> I</c><00:21:40.440><c> mean</c><00:21:40.600><c> not</c><00:21:40.760><c> immediately</c>

00:21:41.190 --> 00:21:41.200 align:start position:0%
but maybe not now I mean not immediately
 

00:21:41.200 --> 00:21:43.590 align:start position:0%
but maybe not now I mean not immediately
certainly<00:21:41.559><c> not</c><00:21:41.799><c> now</c><00:21:42.400><c> okay</c><00:21:43.240><c> are</c><00:21:43.440><c> the</c>

00:21:43.590 --> 00:21:43.600 align:start position:0%
certainly not now okay are the
 

00:21:43.600 --> 00:21:45.630 align:start position:0%
certainly not now okay are the
limitations<00:21:44.240><c> of</c><00:21:44.400><c> an</c><00:21:44.600><c> of</c><00:21:44.760><c> a</c><00:21:44.880><c> tree</c><00:21:45.200><c> visitor</c>

00:21:45.630 --> 00:21:45.640 align:start position:0%
limitations of an of a tree visitor
 

00:21:45.640 --> 00:21:47.750 align:start position:0%
limitations of an of a tree visitor
based<00:21:46.039><c> approach</c><00:21:46.520><c> not</c><00:21:46.760><c> solved</c><00:21:47.200><c> by</c><00:21:47.320><c> using</c><00:21:47.600><c> an</c>

00:21:47.750 --> 00:21:47.760 align:start position:0%
based approach not solved by using an
 

00:21:47.760 --> 00:21:49.630 align:start position:0%
based approach not solved by using an
API<00:21:48.200><c> with</c><00:21:48.360><c> CFG</c><00:21:48.840><c> and</c><00:21:49.039><c> intermediate</c>

00:21:49.630 --> 00:21:49.640 align:start position:0%
API with CFG and intermediate
 

00:21:49.640 --> 00:21:52.549 align:start position:0%
API with CFG and intermediate
representation<00:21:50.320><c> like</c><00:21:50.520><c> Slither</c>

00:21:52.549 --> 00:21:52.559 align:start position:0%
representation like Slither
 

00:21:52.559 --> 00:21:54.110 align:start position:0%
representation like Slither
provides

00:21:54.110 --> 00:21:54.120 align:start position:0%
provides
 

00:21:54.120 --> 00:21:57.470 align:start position:0%
provides
uh<00:21:55.120><c> well</c><00:21:55.400><c> if</c><00:21:55.640><c> if</c><00:21:55.799><c> by</c><00:21:56.039><c> CFG</c><00:21:57.039><c> well</c><00:21:57.120><c> you're</c><00:21:57.279><c> either</c>

00:21:57.470 --> 00:21:57.480 align:start position:0%
uh well if if by CFG well you're either
 

00:21:57.480 --> 00:21:58.870 align:start position:0%
uh well if if by CFG well you're either
meaning<00:21:57.799><c> two</c><00:21:58.000><c> things</c><00:21:58.200><c> you're</c><00:21:58.320><c> either</c><00:21:58.640><c> meaning</c>

00:21:58.870 --> 00:21:58.880 align:start position:0%
meaning two things you're either meaning
 

00:21:58.880 --> 00:22:01.190 align:start position:0%
meaning two things you're either meaning
the<00:21:59.000><c> control</c><00:21:59.279><c> flow</c><00:21:59.640><c> graph</c><00:22:00.600><c> uh</c><00:22:00.760><c> which</c><00:22:00.919><c> is</c>

00:22:01.190 --> 00:22:01.200 align:start position:0%
the control flow graph uh which is
 

00:22:01.200 --> 00:22:02.510 align:start position:0%
the control flow graph uh which is
typically<00:22:01.559><c> something</c><00:22:01.840><c> you'd</c><00:22:02.039><c> find</c><00:22:02.200><c> in</c><00:22:02.320><c> an</c>

00:22:02.510 --> 00:22:02.520 align:start position:0%
typically something you'd find in an
 

00:22:02.520 --> 00:22:05.909 align:start position:0%
typically something you'd find in an
abstract<00:22:02.960><c> syntax</c><00:22:03.520><c> tree</c><00:22:04.520><c> uh</c><00:22:04.640><c> or</c><00:22:04.880><c> if</c><00:22:05.000><c> you</c><00:22:05.200><c> mean</c>

00:22:05.909 --> 00:22:05.919 align:start position:0%
abstract syntax tree uh or if you mean
 

00:22:05.919 --> 00:22:07.950 align:start position:0%
abstract syntax tree uh or if you mean
control<00:22:06.279><c> flow</c><00:22:06.760><c> as</c><00:22:06.960><c> exposed</c><00:22:07.360><c> by</c><00:22:07.480><c> rust</c><00:22:07.799><c> for</c>

00:22:07.950 --> 00:22:07.960 align:start position:0%
control flow as exposed by rust for
 

00:22:07.960 --> 00:22:10.230 align:start position:0%
control flow as exposed by rust for
example<00:22:08.960><c> uh</c><00:22:09.159><c> and</c><00:22:09.520><c> this</c><00:22:09.600><c> is</c><00:22:09.760><c> something</c><00:22:10.120><c> where</c>

00:22:10.230 --> 00:22:10.240 align:start position:0%
example uh and this is something where
 

00:22:10.240 --> 00:22:12.590 align:start position:0%
example uh and this is something where
you<00:22:10.400><c> reify</c><00:22:10.960><c> your</c><00:22:11.120><c> control</c><00:22:11.440><c> flow</c><00:22:12.120><c> so</c><00:22:12.320><c> you</c>

00:22:12.590 --> 00:22:12.600 align:start position:0%
you reify your control flow so you
 

00:22:12.600 --> 00:22:13.950 align:start position:0%
you reify your control flow so you
return<00:22:12.760><c> a</c><00:22:12.919><c> token</c><00:22:13.200><c> in</c><00:22:13.360><c> your</c><00:22:13.520><c> visitor</c><00:22:13.840><c> which</c>

00:22:13.950 --> 00:22:13.960 align:start position:0%
return a token in your visitor which
 

00:22:13.960 --> 00:22:15.750 align:start position:0%
return a token in your visitor which
says<00:22:14.200><c> do</c><00:22:14.320><c> you</c><00:22:14.400><c> want</c><00:22:14.520><c> to</c><00:22:14.679><c> continue</c><00:22:15.400><c> do</c><00:22:15.559><c> you</c><00:22:15.679><c> want</c>

00:22:15.750 --> 00:22:15.760 align:start position:0%
says do you want to continue do you want
 

00:22:15.760 --> 00:22:19.750 align:start position:0%
says do you want to continue do you want
to<00:22:15.960><c> go</c><00:22:16.200><c> down</c><00:22:17.200><c> uh</c><00:22:17.360><c> the</c><00:22:17.720><c> trees</c><00:22:18.720><c> um</c><00:22:18.960><c> now</c><00:22:19.200><c> this</c><00:22:19.440><c> Tree</c>

00:22:19.750 --> 00:22:19.760 align:start position:0%
to go down uh the trees um now this Tree
 

00:22:19.760 --> 00:22:23.630 align:start position:0%
to go down uh the trees um now this Tree
Visitor<00:22:20.720><c> uh</c><00:22:21.720><c> these</c>

00:22:23.630 --> 00:22:23.640 align:start position:0%
Visitor uh these
 

00:22:23.640 --> 00:22:25.909 align:start position:0%
Visitor uh these
um<00:22:24.640><c> solution</c>

00:22:25.909 --> 00:22:25.919 align:start position:0%
um solution
 

00:22:25.919 --> 00:22:30.350 align:start position:0%
um solution
these<00:22:26.919><c> Slither</c><00:22:27.600><c> May</c><00:22:28.039><c> well</c><00:22:28.760><c> um</c><00:22:29.400><c> solve</c><00:22:29.880><c> the</c><00:22:30.039><c> same</c>

00:22:30.350 --> 00:22:30.360 align:start position:0%
these Slither May well um solve the same
 

00:22:30.360 --> 00:22:32.830 align:start position:0%
these Slither May well um solve the same
kind<00:22:30.559><c> of</c><00:22:30.799><c> problem</c><00:22:31.520><c> we</c><00:22:31.760><c> have</c><00:22:32.080><c> a</c><00:22:32.320><c> different</c><00:22:32.640><c> set</c>

00:22:32.830 --> 00:22:32.840 align:start position:0%
kind of problem we have a different set
 

00:22:32.840 --> 00:22:35.269 align:start position:0%
kind of problem we have a different set
of<00:22:33.039><c> constraints</c><00:22:34.039><c> for</c><00:22:34.200><c> example</c><00:22:34.600><c> our</c><00:22:34.840><c> query</c>

00:22:35.269 --> 00:22:35.279 align:start position:0%
of constraints for example our query
 

00:22:35.279 --> 00:22:39.310 align:start position:0%
of constraints for example our query
language<00:22:36.279><c> uh</c><00:22:36.480><c> is</c><00:22:36.840><c> intended</c><00:22:37.279><c> to</c><00:22:37.440><c> be</c><00:22:38.320><c> extended</c>

00:22:39.310 --> 00:22:39.320 align:start position:0%
language uh is intended to be extended
 

00:22:39.320 --> 00:22:41.990 align:start position:0%
language uh is intended to be extended
with<00:22:39.640><c> semantic</c><00:22:40.440><c> predicates</c><00:22:41.440><c> and</c><00:22:41.640><c> with</c><00:22:41.799><c> the</c>

00:22:41.990 --> 00:22:42.000 align:start position:0%
with semantic predicates and with the
 

00:22:42.000 --> 00:22:44.029 align:start position:0%
with semantic predicates and with the
ability<00:22:42.400><c> to</c><00:22:42.600><c> do</c><00:22:42.840><c> arbitrary</c><00:22:43.360><c> recursion</c><00:22:43.919><c> by</c>

00:22:44.029 --> 00:22:44.039 align:start position:0%
ability to do arbitrary recursion by
 

00:22:44.039 --> 00:22:47.470 align:start position:0%
ability to do arbitrary recursion by
skipping<00:22:44.480><c> over</c><00:22:45.120><c> arbitrary</c><00:22:46.120><c> subtes</c><00:22:47.120><c> uh</c><00:22:47.279><c> so</c>

00:22:47.470 --> 00:22:47.480 align:start position:0%
skipping over arbitrary subtes uh so
 

00:22:47.480 --> 00:22:49.070 align:start position:0%
skipping over arbitrary subtes uh so
there's<00:22:47.679><c> a</c><00:22:47.840><c> lot</c><00:22:48.120><c> that</c><00:22:48.240><c> we</c><00:22:48.360><c> want</c><00:22:48.480><c> to</c><00:22:48.640><c> do</c><00:22:48.880><c> there</c>

00:22:49.070 --> 00:22:49.080 align:start position:0%
there's a lot that we want to do there
 

00:22:49.080 --> 00:22:52.070 align:start position:0%
there's a lot that we want to do there
so<00:22:49.440><c> I</c><00:22:49.559><c> wouldn't</c><00:22:49.919><c> say</c><00:22:50.320><c> that</c><00:22:51.200><c> that</c><00:22:51.640><c> um</c><00:22:51.880><c> in</c>

00:22:52.070 --> 00:22:52.080 align:start position:0%
so I wouldn't say that that um in
 

00:22:52.080 --> 00:22:54.549 align:start position:0%
so I wouldn't say that that um in
slyther<00:22:52.720><c> you</c><00:22:52.960><c> can</c><00:22:53.200><c> or</c><00:22:53.400><c> cannot</c><00:22:53.720><c> do</c><00:22:53.919><c> that</c><00:22:54.400><c> I'm</c>

00:22:54.549 --> 00:22:54.559 align:start position:0%
slyther you can or cannot do that I'm
 

00:22:54.559 --> 00:22:57.710 align:start position:0%
slyther you can or cannot do that I'm
not<00:22:54.760><c> familiar</c><00:22:55.240><c> enough</c><00:22:55.720><c> with</c><00:22:56.320><c> slither</c><00:22:57.320><c> perfect</c>

00:22:57.710 --> 00:22:57.720 align:start position:0%
not familiar enough with slither perfect
 

00:22:57.720 --> 00:22:58.990 align:start position:0%
not familiar enough with slither perfect
thank<00:22:57.840><c> you</c><00:22:58.039><c> is</c><00:22:58.120><c> there</c><00:22:58.240><c> a</c><00:22:58.320><c> question</c><00:22:58.679><c> you</c><00:22:58.799><c> like</c>

00:22:58.990 --> 00:22:59.000 align:start position:0%
thank you is there a question you like
 

00:22:59.000 --> 00:23:01.830 align:start position:0%
thank you is there a question you like
most<00:22:59.240><c> in</c>

00:23:01.830 --> 00:23:01.840 align:start position:0%
 
 

00:23:01.840 --> 00:23:04.190 align:start position:0%
 
there<00:23:02.840><c> uh</c><00:23:02.960><c> well</c><00:23:03.120><c> will</c><00:23:03.360><c> this</c><00:23:03.720><c> work</c><00:23:04.000><c> with</c>

00:23:04.190 --> 00:23:04.200 align:start position:0%
there uh well will this work with
 

00:23:04.200 --> 00:23:05.990 align:start position:0%
there uh well will this work with
different<00:23:04.480><c> evm</c><00:23:04.960><c> versions</c><00:23:05.520><c> yes</c><00:23:05.640><c> it</c><00:23:05.760><c> will</c>

00:23:05.990 --> 00:23:06.000 align:start position:0%
different evm versions yes it will
 

00:23:06.000 --> 00:23:07.230 align:start position:0%
different evm versions yes it will
because<00:23:06.200><c> we're</c><00:23:06.320><c> dealing</c><00:23:06.600><c> with</c><00:23:06.720><c> Source</c><00:23:07.039><c> where</c>

00:23:07.230 --> 00:23:07.240 align:start position:0%
because we're dealing with Source where
 

00:23:07.240 --> 00:23:10.310 align:start position:0%
because we're dealing with Source where
well<00:23:07.480><c> before</c><00:23:07.760><c> evm</c><00:23:08.440><c> slang</c><00:23:08.840><c> is</c><00:23:09.000><c> a</c><00:23:09.520><c> compiler</c><00:23:10.200><c> and</c>

00:23:10.310 --> 00:23:10.320 align:start position:0%
well before evm slang is a compiler and
 

00:23:10.320 --> 00:23:12.029 align:start position:0%
well before evm slang is a compiler and
it'll<00:23:10.640><c> produce</c><00:23:11.120><c> bite</c><00:23:11.400><c> code</c><00:23:11.640><c> so</c><00:23:11.799><c> that's</c><00:23:11.919><c> a</c>

00:23:12.029 --> 00:23:12.039 align:start position:0%
it'll produce bite code so that's a
 

00:23:12.039 --> 00:23:13.789 align:start position:0%
it'll produce bite code so that's a
question<00:23:12.320><c> about</c><00:23:12.520><c> the</c><00:23:12.679><c> compiler</c><00:23:13.320><c> not</c><00:23:13.480><c> about</c>

00:23:13.789 --> 00:23:13.799 align:start position:0%
question about the compiler not about
 

00:23:13.799 --> 00:23:16.029 align:start position:0%
question about the compiler not about
querying<00:23:14.799><c> have</c><00:23:14.919><c> we</c><00:23:15.159><c> published</c><00:23:15.600><c> the</c><00:23:15.720><c> grammar</c>

00:23:16.029 --> 00:23:16.039 align:start position:0%
querying have we published the grammar
 

00:23:16.039 --> 00:23:18.990 align:start position:0%
querying have we published the grammar
for<00:23:16.200><c> slang</c><00:23:16.880><c> yes</c><00:23:17.120><c> we</c><00:23:17.320><c> have</c><00:23:18.240><c> uh</c><00:23:18.360><c> slang</c><00:23:18.799><c> is</c>

00:23:18.990 --> 00:23:19.000 align:start position:0%
for slang yes we have uh slang is
 

00:23:19.000 --> 00:23:23.590 align:start position:0%
for slang yes we have uh slang is
actually<00:23:19.640><c> a</c><00:23:20.640><c> uh</c><00:23:20.960><c> declarative</c><00:23:21.960><c> meta</c><00:23:22.679><c> project</c>

00:23:23.590 --> 00:23:23.600 align:start position:0%
actually a uh declarative meta project
 

00:23:23.600 --> 00:23:26.070 align:start position:0%
actually a uh declarative meta project
so<00:23:23.880><c> you</c><00:23:24.039><c> can</c><00:23:24.240><c> use</c><00:23:24.400><c> it</c><00:23:24.520><c> for</c><00:23:24.720><c> any</c><00:23:25.600><c> programming</c>

00:23:26.070 --> 00:23:26.080 align:start position:0%
so you can use it for any programming
 

00:23:26.080 --> 00:23:29.350 align:start position:0%
so you can use it for any programming
language<00:23:26.480><c> not</c><00:23:26.720><c> just</c><00:23:27.120><c> solidity</c><00:23:28.120><c> and</c><00:23:28.520><c> we</c><00:23:28.679><c> have</c>

00:23:29.350 --> 00:23:29.360 align:start position:0%
language not just solidity and we have
 

00:23:29.360 --> 00:23:31.149 align:start position:0%
language not just solidity and we have
um<00:23:29.559><c> published</c><00:23:29.960><c> that</c><00:23:30.200><c> everything</c><00:23:30.520><c> we</c><00:23:30.640><c> do</c><00:23:30.880><c> is</c>

00:23:31.149 --> 00:23:31.159 align:start position:0%
um published that everything we do is
 

00:23:31.159 --> 00:23:33.549 align:start position:0%
um published that everything we do is
open<00:23:31.679><c> source</c><00:23:32.679><c> uh</c>

00:23:33.549 --> 00:23:33.559 align:start position:0%
open source uh
 

00:23:33.559 --> 00:23:37.230 align:start position:0%
open source uh
nomic<00:23:34.559><c> foundation</c><00:23:35.440><c> on</c><00:23:35.799><c> GitHub</c><00:23:36.799><c> all</c><00:23:36.960><c> of</c><00:23:37.080><c> our</c>

00:23:37.230 --> 00:23:37.240 align:start position:0%
nomic foundation on GitHub all of our
 

00:23:37.240 --> 00:23:39.190 align:start position:0%
nomic foundation on GitHub all of our
development<00:23:37.760><c> is</c><00:23:37.880><c> in</c><00:23:38.039><c> the</c><00:23:38.200><c> open</c><00:23:38.520><c> you</c><00:23:38.640><c> can</c><00:23:38.799><c> reuse</c>

00:23:39.190 --> 00:23:39.200 align:start position:0%
development is in the open you can reuse
 

00:23:39.200 --> 00:23:42.669 align:start position:0%
development is in the open you can reuse
all<00:23:39.360><c> of</c><00:23:39.600><c> this</c>

00:23:42.669 --> 00:23:42.679 align:start position:0%
 
 

00:23:42.679 --> 00:23:46.549 align:start position:0%
 
awesome<00:23:43.679><c> uh</c><00:23:43.880><c> how</c><00:23:44.120><c> important</c><00:23:44.679><c> well</c><00:23:45.120><c> uh</c><00:23:45.400><c> so</c><00:23:46.400><c> how</c>

00:23:46.549 --> 00:23:46.559 align:start position:0%
awesome uh how important well uh so how
 

00:23:46.559 --> 00:23:48.190 align:start position:0%
awesome uh how important well uh so how
important<00:23:46.880><c> is</c><00:23:47.000><c> it</c><00:23:47.120><c> to</c><00:23:47.240><c> maintain</c><00:23:47.640><c> code</c><00:23:48.000><c> with</c>

00:23:48.190 --> 00:23:48.200 align:start position:0%
important is it to maintain code with
 

00:23:48.200 --> 00:23:50.110 align:start position:0%
important is it to maintain code with
different<00:23:48.520><c> solidity</c><00:23:49.039><c> versions</c><00:23:49.600><c> why</c><00:23:49.799><c> why</c><00:23:49.919><c> not</c>

00:23:50.110 --> 00:23:50.120 align:start position:0%
different solidity versions why why not
 

00:23:50.120 --> 00:23:53.149 align:start position:0%
different solidity versions why why not
just<00:23:50.320><c> use</c><00:23:50.559><c> one</c><00:23:50.919><c> version</c><00:23:51.919><c> because</c><00:23:52.559><c> if</c><00:23:52.720><c> you</c><00:23:53.000><c> want</c>

00:23:53.149 --> 00:23:53.159 align:start position:0%
just use one version because if you want
 

00:23:53.159 --> 00:23:55.909 align:start position:0%
just use one version because if you want
to<00:23:53.640><c> be</c><00:23:53.799><c> able</c><00:23:54.039><c> to</c><00:23:54.240><c> provide</c><00:23:54.559><c> tools</c><00:23:54.919><c> that</c><00:23:55.120><c> analyze</c>

00:23:55.909 --> 00:23:55.919 align:start position:0%
to be able to provide tools that analyze
 

00:23:55.919 --> 00:23:59.549 align:start position:0%
to be able to provide tools that analyze
a<00:23:56.080><c> large</c><00:23:56.400><c> number</c><00:23:56.640><c> of</c><00:23:57.039><c> contracts</c><00:23:58.039><c> which</c><00:23:58.760><c> may</c><00:23:59.200><c> be</c>

00:23:59.549 --> 00:23:59.559 align:start position:0%
a large number of contracts which may be
 

00:23:59.559 --> 00:24:02.549 align:start position:0%
a large number of contracts which may be
an<00:23:59.760><c> earlier</c><00:24:00.480><c> version</c><00:24:01.039><c> of</c><00:24:01.240><c> solidity</c><00:24:02.240><c> than</c><00:24:02.440><c> the</c>

00:24:02.549 --> 00:24:02.559 align:start position:0%
an earlier version of solidity than the
 

00:24:02.559 --> 00:24:04.669 align:start position:0%
an earlier version of solidity than the
latest<00:24:02.960><c> one</c><00:24:03.520><c> for</c><00:24:03.720><c> example</c>

00:24:04.669 --> 00:24:04.679 align:start position:0%
latest one for example
 

00:24:04.679 --> 00:24:07.909 align:start position:0%
latest one for example
0411<00:24:05.679><c> there's</c><00:24:05.880><c> a</c><00:24:06.080><c> a</c><00:24:06.240><c> contract</c><00:24:06.919><c> on</c><00:24:07.080><c> mainnet</c>

00:24:07.909 --> 00:24:07.919 align:start position:0%
0411 there's a a contract on mainnet
 

00:24:07.919 --> 00:24:09.870 align:start position:0%
0411 there's a a contract on mainnet
that<00:24:08.039><c> is</c><00:24:08.200><c> 0411</c><00:24:09.080><c> you</c><00:24:09.159><c> want</c><00:24:09.240><c> to</c><00:24:09.360><c> get</c><00:24:09.480><c> the</c><00:24:09.600><c> source</c>

00:24:09.870 --> 00:24:09.880 align:start position:0%
that is 0411 you want to get the source
 

00:24:09.880 --> 00:24:12.390 align:start position:0%
that is 0411 you want to get the source
to<00:24:10.080><c> that</c><00:24:10.480><c> you</c><00:24:10.600><c> want</c><00:24:10.760><c> to</c><00:24:11.320><c> um</c><00:24:11.520><c> provide</c><00:24:11.880><c> analysis</c>

00:24:12.390 --> 00:24:12.400 align:start position:0%
to that you want to um provide analysis
 

00:24:12.400 --> 00:24:14.669 align:start position:0%
to that you want to um provide analysis
tools<00:24:12.760><c> for</c><00:24:12.960><c> it</c><00:24:13.799><c> that's</c><00:24:13.960><c> why</c><00:24:14.080><c> we</c><00:24:14.200><c> want</c><00:24:14.320><c> to</c>

00:24:14.669 --> 00:24:14.679 align:start position:0%
tools for it that's why we want to
 

00:24:14.679 --> 00:24:16.710 align:start position:0%
tools for it that's why we want to
support<00:24:15.000><c> all</c><00:24:15.120><c> of</c><00:24:15.279><c> these</c><00:24:15.480><c> versions</c><00:24:16.320><c> now</c><00:24:16.600><c> we</c>

00:24:16.710 --> 00:24:16.720 align:start position:0%
support all of these versions now we
 

00:24:16.720 --> 00:24:19.390 align:start position:0%
support all of these versions now we
don't<00:24:16.960><c> go</c><00:24:17.159><c> back</c><00:24:17.360><c> to</c><00:24:18.000><c> 001</c><00:24:18.840><c> or</c><00:24:19.000><c> whatever</c><00:24:19.279><c> the</c>

00:24:19.390 --> 00:24:19.400 align:start position:0%
don't go back to 001 or whatever the
 

00:24:19.400 --> 00:24:21.710 align:start position:0%
don't go back to 001 or whatever the
first<00:24:19.679><c> version</c><00:24:20.080><c> was</c><00:24:20.640><c> so</c><00:24:20.880><c> we're</c><00:24:21.159><c> pragmatic</c>

00:24:21.710 --> 00:24:21.720 align:start position:0%
first version was so we're pragmatic
 

00:24:21.720 --> 00:24:23.950 align:start position:0%
first version was so we're pragmatic
about<00:24:21.919><c> it</c><00:24:22.559><c> but</c><00:24:22.960><c> these</c><00:24:23.120><c> are</c><00:24:23.320><c> the</c><00:24:23.480><c> versions</c><00:24:23.840><c> that</c>

00:24:23.950 --> 00:24:23.960 align:start position:0%
about it but these are the versions that
 

00:24:23.960 --> 00:24:26.149 align:start position:0%
about it but these are the versions that
are<00:24:24.200><c> live</c><00:24:24.919><c> and</c><00:24:25.039><c> our</c><00:24:25.240><c> goal</c><00:24:25.440><c> is</c><00:24:25.559><c> to</c><00:24:25.720><c> support</c><00:24:26.039><c> all</c>

00:24:26.149 --> 00:24:26.159 align:start position:0%
are live and our goal is to support all
 

00:24:26.159 --> 00:24:27.750 align:start position:0%
are live and our goal is to support all
the<00:24:26.279><c> versions</c><00:24:26.640><c> that</c><00:24:26.720><c> are</c><00:24:26.919><c> live</c><00:24:27.360><c> how</c><00:24:27.480><c> do</c><00:24:27.600><c> you</c>

00:24:27.750 --> 00:24:27.760 align:start position:0%
the versions that are live how do you
 

00:24:27.760 --> 00:24:29.549 align:start position:0%
the versions that are live how do you
determine<00:24:28.159><c> the</c><00:24:28.399><c> cut</c><00:24:28.600><c> off</c>

00:24:29.549 --> 00:24:29.559 align:start position:0%
determine the cut off
 

00:24:29.559 --> 00:24:33.669 align:start position:0%
determine the cut off
version<00:24:30.559><c> uh</c><00:24:31.039><c> what's</c><00:24:32.000><c> analysis</c><00:24:33.000><c> an</c><00:24:33.240><c> analysis</c>

00:24:33.669 --> 00:24:33.679 align:start position:0%
version uh what's analysis an analysis
 

00:24:33.679 --> 00:24:35.710 align:start position:0%
version uh what's analysis an analysis
of<00:24:33.919><c> the</c><00:24:34.240><c> of</c><00:24:34.440><c> m</c><00:24:34.720><c> net</c><00:24:34.880><c> and</c><00:24:34.960><c> all</c><00:24:35.080><c> the</c><00:24:35.240><c> contracts</c>

00:24:35.710 --> 00:24:35.720 align:start position:0%
of the of m net and all the contracts
 

00:24:35.720 --> 00:24:37.750 align:start position:0%
of the of m net and all the contracts
that<00:24:35.840><c> are</c><00:24:36.039><c> live</c><00:24:36.880><c> okay</c><00:24:37.000><c> is</c><00:24:37.080><c> it</c><00:24:37.240><c> the</c><00:24:37.360><c> number</c><00:24:37.600><c> of</c>

00:24:37.750 --> 00:24:37.760 align:start position:0%
that are live okay is it the number of
 

00:24:37.760 --> 00:24:39.669 align:start position:0%
that are live okay is it the number of
contract<00:24:38.240><c> is</c><00:24:38.320><c> it</c><00:24:38.480><c> the</c><00:24:38.640><c> value</c><00:24:38.960><c> stored</c><00:24:39.279><c> in</c><00:24:39.480><c> those</c>

00:24:39.669 --> 00:24:39.679 align:start position:0%
contract is it the value stored in those
 

00:24:39.679 --> 00:24:41.590 align:start position:0%
contract is it the value stored in those
is<00:24:39.760><c> it</c><00:24:39.880><c> the</c><00:24:40.000><c> amount</c><00:24:40.200><c> of</c><00:24:40.360><c> transactions</c><00:24:41.279><c> no</c><00:24:41.480><c> the</c>

00:24:41.590 --> 00:24:41.600 align:start position:0%
is it the amount of transactions no the
 

00:24:41.600 --> 00:24:44.669 align:start position:0%
is it the amount of transactions no the
earliest<00:24:42.520><c> the</c><00:24:43.039><c> um</c><00:24:43.960><c> I</c><00:24:44.080><c> didn't</c><00:24:44.360><c> do</c><00:24:44.520><c> this</c>

00:24:44.669 --> 00:24:44.679 align:start position:0%
earliest the um I didn't do this
 

00:24:44.679 --> 00:24:46.549 align:start position:0%
earliest the um I didn't do this
analysis<00:24:45.159><c> so</c><00:24:45.320><c> I</c><00:24:45.399><c> must</c><00:24:45.640><c> admit</c><00:24:45.960><c> I</c><00:24:46.039><c> don't</c><00:24:46.200><c> know</c>

00:24:46.549 --> 00:24:46.559 align:start position:0%
analysis so I must admit I don't know
 

00:24:46.559 --> 00:24:48.909 align:start position:0%
analysis so I must admit I don't know
what<00:24:47.039><c> process</c><00:24:47.399><c> we</c><00:24:47.559><c> use</c><00:24:47.799><c> to</c><00:24:47.960><c> determine</c><00:24:48.440><c> that</c>

00:24:48.909 --> 00:24:48.919 align:start position:0%
what process we use to determine that
 

00:24:48.919 --> 00:24:50.710 align:start position:0%
what process we use to determine that
but<00:24:49.120><c> it</c><00:24:49.240><c> is</c><00:24:49.440><c> the</c><00:24:49.600><c> case</c><00:24:49.919><c> that</c><00:24:50.039><c> the</c><00:24:50.200><c> earliest</c>

00:24:50.710 --> 00:24:50.720 align:start position:0%
but it is the case that the earliest
 

00:24:50.720 --> 00:24:54.070 align:start position:0%
but it is the case that the earliest
contract<00:24:51.480><c> in</c><00:24:51.679><c> use</c><00:24:52.000><c> apparently</c><00:24:52.679><c> is</c><00:24:53.080><c> 0411</c>

00:24:54.070 --> 00:24:54.080 align:start position:0%
contract in use apparently is 0411
 

00:24:54.080 --> 00:24:57.149 align:start position:0%
contract in use apparently is 0411
fantastic<00:24:54.640><c> thank</c><00:24:55.159><c> you</c><00:24:56.159><c> um</c><00:24:56.360><c> what's</c><00:24:56.520><c> the</c><00:24:56.960><c> best</c>

00:24:57.149 --> 00:24:57.159 align:start position:0%
fantastic thank you um what's the best
 

00:24:57.159 --> 00:24:58.950 align:start position:0%
fantastic thank you um what's the best
practice<00:24:57.440><c> for</c><00:24:57.600><c> using</c><00:24:57.840><c> slang</c><00:24:58.159><c> to</c><00:24:58.440><c> analyze</c><00:24:58.799><c> a</c>

00:24:58.950 --> 00:24:58.960 align:start position:0%
practice for using slang to analyze a
 

00:24:58.960 --> 00:25:00.630 align:start position:0%
practice for using slang to analyze a
large<00:24:59.200><c> number</c><00:24:59.440><c> of</c><00:24:59.640><c> program</c><00:25:00.159><c> where</c><00:25:00.279><c> should</c><00:25:00.480><c> the</c>

00:25:00.630 --> 00:25:00.640 align:start position:0%
large number of program where should the
 

00:25:00.640 --> 00:25:02.590 align:start position:0%
large number of program where should the
data<00:25:00.880><c> be</c><00:25:01.000><c> stored</c><00:25:01.320><c> and</c><00:25:01.440><c> in</c><00:25:01.600><c> what</c><00:25:01.799><c> format</c>

00:25:02.590 --> 00:25:02.600 align:start position:0%
data be stored and in what format
 

00:25:02.600 --> 00:25:03.669 align:start position:0%
data be stored and in what format
imagine<00:25:02.919><c> this</c><00:25:03.039><c> is</c><00:25:03.159><c> something</c><00:25:03.360><c> you</c><00:25:03.480><c> run</c>

00:25:03.669 --> 00:25:03.679 align:start position:0%
imagine this is something you run
 

00:25:03.679 --> 00:25:06.470 align:start position:0%
imagine this is something you run
locally<00:25:04.159><c> correct</c><00:25:04.960><c> yes</c><00:25:05.120><c> it</c><00:25:05.320><c> is</c><00:25:05.840><c> perfect</c><00:25:06.279><c> thank</c>

00:25:06.470 --> 00:25:06.480 align:start position:0%
locally correct yes it is perfect thank
 

00:25:06.480 --> 00:25:08.909 align:start position:0%
locally correct yes it is perfect thank
you<00:25:07.080><c> all</c><00:25:07.240><c> right</c><00:25:07.840><c> what</c><00:25:08.039><c> update</c><00:25:08.320><c> in</c><00:25:08.480><c> solidity</c>

00:25:08.909 --> 00:25:08.919 align:start position:0%
you all right what update in solidity
 

00:25:08.919 --> 00:25:11.190 align:start position:0%
you all right what update in solidity
was<00:25:09.120><c> the</c><00:25:09.240><c> artist</c><00:25:09.640><c> to</c><00:25:09.880><c> that</c><00:25:10.080><c> for</c><00:25:10.320><c> you</c><00:25:10.399><c> mentioned</c>

00:25:11.190 --> 00:25:11.200 align:start position:0%
was the artist to that for you mentioned
 

00:25:11.200 --> 00:25:13.789 align:start position:0%
was the artist to that for you mentioned
quirks<00:25:11.799><c> and</c><00:25:12.200><c> weird</c><00:25:12.600><c> updates</c><00:25:12.960><c> in</c><00:25:13.080><c> solidity</c>

00:25:13.789 --> 00:25:13.799 align:start position:0%
quirks and weird updates in solidity
 

00:25:13.799 --> 00:25:16.070 align:start position:0%
quirks and weird updates in solidity
which<00:25:13.919><c> one</c><00:25:14.159><c> was</c><00:25:14.480><c> the</c><00:25:14.720><c> hardest</c>

00:25:16.070 --> 00:25:16.080 align:start position:0%
which one was the hardest
 

00:25:16.080 --> 00:25:20.190 align:start position:0%
which one was the hardest
or<00:25:17.080><c> none</c><00:25:17.279><c> of</c><00:25:17.480><c> them</c><00:25:17.760><c> was</c><00:25:18.039><c> particularly</c><00:25:19.039><c> hard</c><00:25:20.039><c> uh</c>

00:25:20.190 --> 00:25:20.200 align:start position:0%
or none of them was particularly hard uh
 

00:25:20.200 --> 00:25:22.789 align:start position:0%
or none of them was particularly hard uh
the<00:25:20.399><c> volume</c><00:25:20.760><c> of</c><00:25:20.960><c> quirks</c><00:25:21.960><c> is</c><00:25:22.360><c> what</c><00:25:22.520><c> is</c><00:25:22.640><c> a</c>

00:25:22.789 --> 00:25:22.799 align:start position:0%
the volume of quirks is what is a
 

00:25:22.799 --> 00:25:24.870 align:start position:0%
the volume of quirks is what is a
challenge<00:25:23.600><c> I</c><00:25:23.679><c> mean</c><00:25:23.960><c> we've</c><00:25:24.399><c> we've</c><00:25:24.600><c> got</c>

00:25:24.870 --> 00:25:24.880 align:start position:0%
challenge I mean we've we've got
 

00:25:24.880 --> 00:25:27.470 align:start position:0%
challenge I mean we've we've got
hundreds<00:25:25.399><c> of</c><00:25:25.600><c> edge</c><00:25:25.960><c> cases</c><00:25:26.679><c> we</c><00:25:26.799><c> had</c><00:25:26.919><c> to</c><00:25:27.080><c> analyze</c>

00:25:27.470 --> 00:25:27.480 align:start position:0%
hundreds of edge cases we had to analyze
 

00:25:27.480 --> 00:25:29.430 align:start position:0%
hundreds of edge cases we had to analyze
Sal<00:25:27.840><c> C</c><00:25:28.039><c> because</c><00:25:28.399><c> that's</c><00:25:28.600><c> the</c><00:25:28.720><c> only</c><00:25:29.039><c> definition</c>

00:25:29.430 --> 00:25:29.440 align:start position:0%
Sal C because that's the only definition
 

00:25:29.440 --> 00:25:32.350 align:start position:0%
Sal C because that's the only definition
of<00:25:29.559><c> the</c><00:25:30.000><c> language</c><00:25:31.000><c> uh</c><00:25:31.399><c> and</c><00:25:31.840><c> go</c><00:25:32.039><c> through</c><00:25:32.200><c> the</c>

00:25:32.350 --> 00:25:32.360 align:start position:0%
of the language uh and go through the
 

00:25:32.360 --> 00:25:34.510 align:start position:0%
of the language uh and go through the
code<00:25:33.000><c> and</c><00:25:33.120><c> then</c><00:25:33.279><c> test</c><00:25:33.559><c> it</c><00:25:34.000><c> and</c><00:25:34.080><c> then</c><00:25:34.200><c> go</c><00:25:34.320><c> to</c>

00:25:34.510 --> 00:25:34.520 align:start position:0%
code and then test it and then go to
 

00:25:34.520 --> 00:25:37.350 align:start position:0%
code and then test it and then go to
sanctuary<00:25:35.360><c> and</c><00:25:35.520><c> look</c><00:25:35.640><c> at</c><00:25:35.919><c> massive</c><00:25:36.919><c> uh</c><00:25:37.039><c> numbers</c>

00:25:37.350 --> 00:25:37.360 align:start position:0%
sanctuary and look at massive uh numbers
 

00:25:37.360 --> 00:25:38.590 align:start position:0%
sanctuary and look at massive uh numbers
of

00:25:38.590 --> 00:25:38.600 align:start position:0%
of
 

00:25:38.600 --> 00:25:41.909 align:start position:0%
of
contracts<00:25:39.600><c> uh</c><00:25:39.760><c> run</c><00:25:40.520><c> uh</c><00:25:40.679><c> our</c><00:25:40.919><c> compiler</c><00:25:41.640><c> over</c>

00:25:41.909 --> 00:25:41.919 align:start position:0%
contracts uh run uh our compiler over
 

00:25:41.919 --> 00:25:43.830 align:start position:0%
contracts uh run uh our compiler over
them<00:25:42.080><c> or</c><00:25:42.240><c> run</c><00:25:42.440><c> our</c><00:25:42.600><c> paer</c><00:25:43.039><c> over</c><00:25:43.240><c> them</c><00:25:43.640><c> what</c>

00:25:43.830 --> 00:25:43.840 align:start position:0%
them or run our paer over them what
 

00:25:43.840 --> 00:25:46.990 align:start position:0%
them or run our paer over them what
breaks<00:25:44.520><c> what</c><00:25:44.720><c> doesn't</c><00:25:45.360><c> we've</c><00:25:45.559><c> got</c><00:25:46.000><c> extensive</c>

00:25:46.990 --> 00:25:47.000 align:start position:0%
breaks what doesn't we've got extensive
 

00:25:47.000 --> 00:25:49.710 align:start position:0%
breaks what doesn't we've got extensive
uh<00:25:47.159><c> test</c><00:25:47.559><c> cases</c><00:25:48.480><c> so</c><00:25:48.880><c> that</c><00:25:49.000><c> was</c><00:25:49.159><c> the</c><00:25:49.320><c> challenge</c>

00:25:49.710 --> 00:25:49.720 align:start position:0%
uh test cases so that was the challenge
 

00:25:49.720 --> 00:25:52.110 align:start position:0%
uh test cases so that was the challenge
it's<00:25:49.919><c> the</c><00:25:50.080><c> number</c><00:25:50.559><c> not</c><00:25:51.080><c> not</c><00:25:51.279><c> any</c><00:25:51.520><c> particular</c>

00:25:52.110 --> 00:25:52.120 align:start position:0%
it's the number not not any particular
 

00:25:52.120 --> 00:25:53.830 align:start position:0%
it's the number not not any particular
difficulty<00:25:52.520><c> fantastic</c><00:25:53.240><c> thank</c><00:25:53.440><c> you</c><00:25:53.600><c> do</c><00:25:53.720><c> you</c>

00:25:53.830 --> 00:25:53.840 align:start position:0%
difficulty fantastic thank you do you
 

00:25:53.840 --> 00:25:56.830 align:start position:0%
difficulty fantastic thank you do you
dream<00:25:54.120><c> in</c><00:25:54.320><c> bite</c><00:25:54.679><c> code</c><00:25:55.679><c> uh</c><00:25:55.880><c> no</c><00:25:56.399><c> no</c><00:25:56.559><c> I</c><00:25:56.679><c> don't</c>

00:25:56.830 --> 00:25:56.840 align:start position:0%
dream in bite code uh no no I don't
 

00:25:56.840 --> 00:25:59.549 align:start position:0%
dream in bite code uh no no I don't
dream<00:25:57.279><c> I</c><00:25:57.360><c> dream</c><00:25:57.679><c> compilers</c><00:25:58.520><c> actually</c><00:25:59.480><c> all</c>

00:25:59.549 --> 00:25:59.559 align:start position:0%
dream I dream compilers actually all
 

00:25:59.559 --> 00:26:00.909 align:start position:0%
dream I dream compilers actually all
right<00:25:59.720><c> Anthony</c><00:26:00.080><c> thank</c><00:26:00.200><c> you</c><00:26:00.320><c> a</c><00:26:00.399><c> lot</c><00:26:00.559><c> for</c><00:26:00.679><c> your</c>

00:26:00.909 --> 00:26:00.919 align:start position:0%
right Anthony thank you a lot for your
 

00:26:00.919 --> 00:26:03.990 align:start position:0%
right Anthony thank you a lot for your
time<00:26:01.200><c> and</c><00:26:01.360><c> all</c><00:26:01.480><c> the</c><00:26:01.600><c> best</c><00:26:01.760><c> to</c><00:26:01.880><c> you</c><00:26:02.760><c> thank</c><00:26:03.000><c> you</c>

00:26:03.990 --> 00:26:04.000 align:start position:0%
time and all the best to you thank you
 

00:26:04.000 --> 00:26:06.389 align:start position:0%
time and all the best to you thank you
people<00:26:04.520><c> our</c><00:26:04.880><c> next</c><00:26:05.159><c> session</c><00:26:05.640><c> will</c><00:26:05.799><c> start</c><00:26:06.080><c> in</c><00:26:06.279><c> a</c>

00:26:06.389 --> 00:26:06.399 align:start position:0%
people our next session will start in a
 

00:26:06.399 --> 00:26:09.350 align:start position:0%
people our next session will start in a
few<00:26:06.600><c> minutes</c><00:26:07.320><c> I</c><00:26:07.440><c> am</c><00:26:07.840><c> off</c><00:26:08.240><c> for</c><00:26:08.520><c> today</c><00:26:09.000><c> thank</c><00:26:09.200><c> you</c>

00:26:09.350 --> 00:26:09.360 align:start position:0%
few minutes I am off for today thank you
 

00:26:09.360 --> 00:26:10.909 align:start position:0%
few minutes I am off for today thank you
for<00:26:09.679><c> those</c><00:26:09.840><c> who</c><00:26:10.000><c> spent</c><00:26:10.200><c> a</c><00:26:10.279><c> bit</c><00:26:10.440><c> of</c><00:26:10.600><c> time</c><00:26:10.760><c> with</c>

00:26:10.909 --> 00:26:10.919 align:start position:0%
for those who spent a bit of time with
 

00:26:10.919 --> 00:26:16.000 align:start position:0%
for those who spent a bit of time with
me<00:26:11.320><c> this</c><00:26:11.799><c> morning</c><00:26:12.799><c> um</c><00:26:13.080><c> and</c><00:26:13.240><c> I'll</c><00:26:13.399><c> see</c><00:26:13.559><c> you</c><00:26:13.640><c> soon</c>

