►
From YouTube: GitHub Quick Reviews
Description
00:00:00 - Approved: SslStream API improvements for enhanced use cases https://github.com/dotnet/runtime/issues/37933#issuecomment-646228075
01:12:54 - Needs Work: CompareAttribute.Validate method does not create a ValidationResult with MemberNames https://github.com/dotnet/runtime/issues/29214
01:21:41 - Needs Work: Add support for validating complex or collection properties using System.ComponentModel.DataAnnotations.Validator https://github.com/dotnet/runtime/issues/31400#issuecomment-646249648
01:57:38 - Approved: Add easy way to create a certificate from a multi-PEM or cert-PEM + key-PEM https://github.com/dotnet/runtime/issues/31944#issuecomment-646253846
B
So
so
this
is
Arthur
I'm,
the
area
owner
nominally
for
this,
but
we
need
print,
have
to
actually
make
any
progress,
I've
already
discussed
with
him
and
mo
offline
on
doing
these
things,
but
he
was
the
one
bringing
these
to
the
API
review.
So
if
he's
not
here,
I,
don't
think
we
can
proceed
with
these.
B
A
C
So
this
is
something
which
we've
been
primarily
asked
by
Kestrel
in
New
York.
There
are
some
shortcomings
in
the
corona,
so
so
stream,
API
and
behavior.
They
would
like
us
to
fix.
So
that's
something
we
discussed
with
Jeremy
and
is
David
Fowler,
and
this
is
the
outcome.
So
there
are
a
couple
of
problems
we
trying
to
solve
here.
C
One
an
SSL
stream
is
called
to
negotiate
SSL
it.
My
new
sink
calls
or
saying
HTTP
calls
behind
the
scenes
to
fetch
artifacts
like
intermediate
certificates
and
the
color
has
no
control
over
it
whatsoever.
There
were
cases
where
the
whole
service,
for
example,
was
taken
down
because
they
were
network
connectivity
problem
to
the
CAS
and
were
not
and
again
I
all
happens
behind
the
scenes,
so
you
might
think
erasing
and
it's
stuff
gets
messy.
C
C
C
So
there's
a
delegate
that,
if
you
are
in
a
situation,
then
you
can
set
the
server
certificate
dynamically
to
a
callback.
However,
this
callback,
it's
synchronous,
so
it's
very
problematic
for
people
to
actually
fetch
the
certificates
from
key
world
or
from
a
database.
There
are
some
people
who
try
to
do.
Logging
in
the
callback
for
auditing
purposes
has
been
also
problematic,
so
that
was
asked
to
actually
make
this
callback
asynchronous.
So
if
this
action,
which
needs
parking
you
can
park,
it
do
your
I/o
and
come
back
with
the
answer.
C
The
other
part
of
the
ask
was
to
basically
be
able
to
impact
more
things
than
just
as
server
certificate.
So,
for
example,
in
case
of
reverse
proxies.
If
you
are
in
the
multi
multi
tenant
situation,
maybe
some
sites
you
want
to
allow
SSL
or
TLS
100
or
1
1
for
legacy
reasons,
maybe
some
sites,
don't
you
might
have
different
cipher
policies.
You
might
have
some
other
things
you
might
set
for
sort
of
a
server
or
site
or
HTTP
server,
and
right
now
this
is
not
really
possible.
C
So
after
again,
some
discussions
back
and
forth
what
the
proposal
is
that,
rather
than
having
of
the
decade
for
outer
decade,
server
s
which
takes
an
option
bag
and
consolation
token,
you
would
have
a
value
task,
delegate,
a
stern
escarpment
delegate,
which
would
then
give
you
the
options
based
on
the
server
name.
So
you
would
basically
postpone
the
decision
the
similar
way,
what
we
do
for
certificates.
C
C
So
that's
the
general
spirit
of
of
the
delegate
and
the
options
we
discussed
is
right.
Now,
Tallulah
get
would
take
the
center
which
in
a
pass
he
would
have
just
object
and
right
now
with
Treaty,
SSL
stream
itself
would
take
the
host
name
or
the
name.
The
client
asks
for
and
will
take
the
and
it
would
get.
The
consolation,
though,
could
be
just
passed
through
the
original
call.
C
It
would
just
that
be
passed
to,
and
the
discussion
was
whether,
first
of
all,
we
need
a
host
name
because,
as
a
proposal,
the
prop
or
paper
to
make
the
homestand
available
on
a
stream
itself,
so
we
don't
necessarily
need
to
pass
it
in
as
a
parameter,
which
is
what
we
did
in
a
past.
Any
call
back
and
possibly
there
was
also
a
question
whether
we
would
need
or
who'll
be
used
to
have
more
information
from
the
client,
hello.
C
C
C
And
you'd
be
right
now
pretty
easy,
so
we
can
choose
what
we
put
to
this
struct
or
a
class
and
could
be
just
the
host
name.
But
we
already
have
a
hello
parse
error
which
can
actually
give
more
information.
So
if
we
choose
to,
we
can
expose
the
information
we
already
have
and
or
and
if
you
scroll
down
Jeremy
or
whoever
is
driving
I
put
it
into
the
alternative
designs.
C
So
one
option
we
could
have
is
we
can
just
shove
the
raw
client
hello
data
into
this.
And
if
anybody
wants
through
an
additional
parsing,
they
could
do
that
without
doing
extra
magic
of
buffering
up
front
and
try
to
sneak
between
the
socket
and
the
SSS
stream
and
whatnot
and
so
again,
I,
don't
know
how
we
would
feel
about
it.
Basically
providing
access
to
the
raw
data,
possibly
additionally,
to
respond
to
your
reports
and
P
populate
that.
E
E
A
D
G
E
C
I
had
sort
of
similar
concerns.
Originally
this
the
internal
keyless
parser
that
in
most
cases
we
would
see
exactly
two
fields,
but
you
know
it's
technically
a
list,
so
I
think
if
he
could
come
up
with
a
proposal
there,
at
least
for
a
normal
case.
We
don't
need
to
allocate
I
think
that
we
trade
and
obviously
you
can
drop
it
from
the
initial
proposal,
but
then
again,
I
think
it'd
be
nice
to
have
a
plan.
C
What
we
would
do
if
somebody
asks
for
the
LPM,
because
I
could
see
that
this
could
be
somewhat
useful,
especially
at
a
point
where
you
try
to
set
of
crypto
that,
for
example,
HTTP
to
specification
requires
you
to
drop
certain
ciphers
if
you
do
HTTP
to
so.
You
know
if
I
could
see
that
in
this
case,
for
example,
if
the
server
is
linked
to
HTTP
and
sees
that
it
asks
for
HTTP,
we
can
set
aside
for
policies
or
do
some
other
things.
D
D
C
D
C
A
I
mean
I'd,
probably
do
it
as
a
read-only
collection.
It
avoids
the
complication
of
there
being
a
span
and
in
an
async
context.
Also
whether
or
not
the
struck
needs
to
be
a
ref
struct,
and
these
the
SSL
application
protocol
objects
themselves,
aren't
just
I,
don't
think
they're,
just
blit
over
the
or
just
a
projection
over.
E
C
Why
don't
we
take
it
or
pocket
and
I
can
do
more
research
and
if
he
are
okay
of
creating
a
basically
struct
or
a
class?
Let's
move
is
the
server
name
and
maybe
DSS
Oracle's,
which
are
easy
to
do
for
now
and
if
we
choose
to
do
a
LPN
and
five
I
can
write
up
another
proposal.
So
at
least
you
real
unblocked
on
this-
and
we
can
in
do
more
prototyping
core
discussion-
how
to
do
the
LTL
unless
anybody
wants
to
push
it
to
completion
here.
D
No,
those
those
would
be
two
different
things
yeah.
We
only
make
it
a
restaurant
if
we
needed
to
have
it
rapper,
ref,
struct
or
if
we
like,
wanted
to
try
and
rely
on
that
to
force
some
particular
in
use
tape
usage.
What
we
want
to
do,
but
we
would
have
to
delegate,
because
if
the
struct
was
so
big
or
we
were
concerned
about
getting
so
big
that
copying
it
was
problematic
with
just
two
fields:
it's
not
you
can
just
be
by
value,
but
if.
G
D
Expect
some
day
this
might
be
sixteen
fields,
you
know
I'm
fine
with
leaving
it
as
as
not
in.
If
we
think
it's
gonna
be
you
know,
maybe
a
couple
more
I
mean
we're
talking
about.
We
that
we're
talking
about
something
on
the
path
of
establishing
a
new
SSL
connection,
so
there
are
already
much
more
expensive
things
happening
than
this
yeah.
C
C
Was
something
would
leave
I
pointed
out
it
and
sort
of
our
hours
thinking?
Maybe
the
allocation
be
okay,
since
the
SSL
handshake
itself,
it's
rather
expensive
and
a
school
of
crypto,
but
also
I
could
see
that
you
know
the
general
tend
to
be
conservative
and
avoid
allocations.
You
can
or
try
to
make
it
efficient,
so
I
mean.
D
D
A
D
A
C
Feel
that
if
you
have
to
need
I
would
rather
than
maybe
again
exposed
to
raw
data
and
say
here
it
is
do
whatever
you
want
to
do
visit.
If
there's
real
need
and
it
again
it
might
not
be
ever,
and
if
we
have
some
small
additions,
maybe
they
can
just
go
in
directly
and
have
to
fall
back
to
the
read-only
span
on
raw
data
as
the
backup
if
this
would
be
on
V
or
super
large
right.
So
let's
say
somebody
was
the
whole
cipher,
C
or
cypher
list.
Then
maybe
it'll
be
time
just
keep
them.
D
Yeah,
there
was
one
more
thing
that
I
didn't
hear
mentioned
earlier,
which
is
so
the
the
new
method
that's
being
introduced
on
SSL
stream,
authenticated
server,
async.
G
D
A
D
E
E
C
G
D
The
developer,
and
so,
if
we're
concerned
about
it
being
disused,
like
we're,
gonna
use
it
correctly,
and
so
you
know
when,
when
there's
only
one
consumer-
and
it's
us
I'm
much
happier
with
a
value
desk,
yeah
I,
wasn't
I
wasn't
worried
about
misuse.
Honestly,
it
just
struck
me
that
there
was
a
mismatch
there.
It
sounds
like
we
expect
this
valued
has
to
be
to
be
synchronous.
Most
of
the
time
in
asynchronous
part
of
the
time
is
that
what
I
heard.
A
What
yeah
so
the
the
called
the
sni
callback,
which
is
what
that
is
really
yeah,
so
the
sni
callback,
the
async
state,
would
be
it's
the
first
time
you've
seen
a
host
and
you
have
the
the
cert
material
to
use
in
key
vault.
So
you
had
a
cache
miss.
So
now
you
have
to
go
ASCII,
vault
and
now
you've
got
it
and
now
you're
not
gonna.
Ask
again,
and
so
that's
the
the
use
case
that
at
least
as
I
understood
it
when
I
was
chatting
with
about
this
before.
A
F
Just
to
give
the
scenario
like
people
have
starts
in
key
vault
and
they
make
requests
looking
at
the
host
name
on
the
fly
to
pull
the
circum
key
ball.
I
assume
they're
gonna
catch
it
for
some
amount
of
time,
but
that's
why
we
had,
after
the
tomato
to
make
this
asynchronous
in
the
past
mmm-hmm.
That.
D
Yeah
I
feel
like
out
of
any
possible
use
case
for
value
to
ask
this
ends
up
sort
of
checking
all
the
boxes,
the
99%
case.
It
completes
synchronously,
it's
returning,
something
that
can't
easily
be
cached
in
the
general
case,
and
there
are
basically
there's
one
consumer
anywhere
and
it's
a
developer.
That
knows
what
they're
doing
awesome.
A
C
Originally
kind
of
was
objected,
I
got
comments
on
whites,
object
and
item
lessee
reason
to
be
an
object
are
aside
from
we've
done
it
in
the
past
thought,
and
then
people
are
over
again
I've
seen
github
discussions
where
people
are
confused
and
like.
Why
do
you
need
to
cast
then?
Yes,
you
can
cast
it
or
not,
but
if.
A
D
The
the
reason,
the
reason
for
object
sender
is
a
throwback
to
wind
forms
in
the
good
old
days
of
VB,
honestly,
where
you
would
have
a
single
called
out
hooked
up
to
multiple
control,
UI
event,
handlers,
dark
and
yeah,
and
you
didn't
necessarily
you
couldn't
necessarily
have
a
single
class
for
sender.
So
it
was
just
kind
of
object
by
default
in
this
case,
because
this
callback
is
associated
with
a
very
specific
type,
it
would
make
sense
to
have
that
type
as
a
center
yeah.
D
It
should
absolutely
be
as
a
South
Stream,
there's
no
I
mean
otherwise.
Someone
doesn't
know
what
they
can
cast
it
to.
If
they
do
cast
it,
they
pay
for
it,
and
even
if,
if
there
was
some
guideline
that
we
were
archaically
following,
we
could
just
rename
the
term
sender.
This
isn't
an
event
handler
yeah.
A
A
C
Okay,
so
the
last
piece
on
this
one,
it's
a
new
property
on
SSO
stream,
and
so
we
don't
have
all
these
circle
banks.
This
primarily
came
from
a
client
site
where,
if
you
say
I'll
take
as
a
client,
you
try
to
connect
to
a
server.
And
then
you
have
a
remote
certificate,
validation
callback
that
one
doesn't
have
any
information
about
what
server
you
were
trying
to
connect
to,
and
so
people
do
all
kinds
of
weird
stuff
to
kind
of
know
which
stream
they
use
to
connect
to
what
server.
C
C
C
A
It
looks
like
all
the
new,
so
you
know,
comparing
what's
virtual
and
not
like
all
of
the
new
authenticate
as
server
methods
are
non
virtual.
No
wait,
I
just
can't
read
they're
all
virtual,
except
the
one
that
takes
an
authentication
options,
so
the
newest
one
is
non
virtual
and
a
bunch
of
other
stuff
is
virtual,
so
yeah
I
mean
if
everything
else
is
virtual,
then
virtual
is
okay,
but
then
why
wasn't
the
authenticated
server?
Async
virtual
is
Mike
Mike.
Really,
it
seems
like
if
we're
saying
everything
on
this
class
is
virtual.
C
C
D
C
Neri
again,
that's
even
how
it
works.
Intro
lady
popularized
business
tricking
empty
and
we
basically
just
return
whatever
is
in
there.
So
people
who
need
to
worry
about
mobility
and
whatnot,
so
so
woody
you
men
will
be
keep
it
as
a
distance
trip.
The
virtual
just
leave
it
public
stream,
hostname
right.
A
C
A
D
C
D
A
Thing
is
better
yeah
I
feel
like
target
name
is
better
because
it's
what
the
client
passed
his
target
name
and
it's
what
the
reserved
receive?
Does
the
client
target
name?
Isn't
it
was
it
called
inspect
the
I
just
like
looking
at
host
name?
My
immediate
response
is
that
they're,
my
gut
feel
I'm
Oh
there's
a
bunch
of
context,
but
looking
at
it,
it's
like
that.
I
I
expect
that
to
be
Who
am
I,
instead
of
who
do
I.
Think
I'm
talking
to
I,
know
for
this.
A
If
you're
the
server
and
you're
looking
at
it,
it's
who
does
the
client
think
they're
talking
to,
but
since
it's
really,
who
does
the
client
want
to
talk
to
that
it
feels
like
hostname
is
either
it
needs.
A
disambiguate,
er
or
target
name
target
host
name
is
fine
requested
host
name
is
fine,
but
just
their.
F
A
C
F
F
C
D
I'm
curious
damage:
do
you
have
a
use
case
in
line
when
they're
state,
including
to
passing
I,
asked
only
because
there's
this
is
a
little
sided
coin
in
that?
Yes,
you
would
save
on
allocation
for
a
closure
if
you
did
need
to
pass
in
state,
but
if
you
don't
need
to
pass
in
state,
we
still
need
to
thread
it
through.
It's
still,
gonna
end
up
on
a
sync
state
machines.
It's
still
gonna,
it's
gonna
blow
the
size
of
those
state
machines.
So
it's
not
a
it's
not
like
it's
free
yeah.
D
E
A
But
I
mean
if
you,
if
you
wanted
to
do
state
and
minimize
allocations,
you
could
make
one
object.
That
holds
a
mutable
context
and
then
you
just
take
a
nap
one
delegate
to
it
once
and
then
it's
so
you're
not
creating
a
you're,
not
creating
a
closure.
Every
time
you're
using
the
same
closure
with
the
same
target
with
a
mutable
secondary
target
like.
A
F
D
Steve
question:
if
we
pass
in
a
state,
doesn't
it
only
bloat
the
state
machine
if
the
state
machine
gets
hoisted,
as
in
the
task,
is
completing
asynchronously
yeah,
wherever
whatever
state
machines
this
ends
up
on,
which
presumably
would
include
one
in
authenticated
as
a
as
client,
async
and
one
in
the
delegate
callback,
it
would
only
for
each
of
those
they
would
end
up
on
this.
Well,
it's
gonna
end
up
on
the
state
machine
regardless,
it's
only
gonna
increase
the
size
of
the
heap
object.
D
If
that
thing
gets
promoted
to
the
right,
that's-
and
that
comes
back
to
the
earlier
question
about
like
is
this
thing
almost
always
going
to
complete
synchronously
and
only
rarely
will
complete
asynchronously
like
does
that
factor
into
this
discussion
at
all.
It
does,
but
there's
multiple
places.
This
would
show
up.
So
this.
D
D
But
I
mean
to
the
discussion
earlier
like:
yes,
we
should
strive
to
reduce
allocations.
Yes,
we
should
strive
to
reduce
all
forms
of
overhead.
This
particular
code
path
is
already
very
expensive.
So
while
we
should
strive
to
do
like
the
important
things
well,
I
expect
everything
else.
Gonna
be
noise,
I.
F
F
G
F
D
F
H
D
Is
this
is
this?
Is
this
delegate
invoked
from
anywhere
other
than
the
handshake?
Maybe
I
misunderstood?
No,
it
is
not
and
clearly
I'm
fine
I'm
fine
with
the
object
state
I
just
want
to
make
sure
like
yeah.
You
actually
believe
it'll
be
useful
if
it's
just
if
it's
just
like
we,
because
we
can-
we
probably
shouldn't,
but
it's
because
it's
useful
to
we-
should
I.
F
Guess
what
worries
me
in
general
with
that
approach
is
what
is
up
happening?
Is
it
gets
used
and
there's
no
callback?
So
it's?
What
is
a
closure
and
people
deal
with
it
because
we
didn't
think
to
either
to
add
a
stake
or
to
add
a
state
overload,
and
we
are
inconsistent
across
the
stack
about
that
right.
F
D
F
B
D
A
D
F
E
A
So
when
I
was
chatting
with
Tomas
and
I
suggested
the
name
create
for
server
where
it
can
go
ahead,
and
so,
if
it's
called
create
for
server
I,
think
that
it
should
probably
throw
if
the
server
is
not
about
or
if
the
search
doesn't
isn't
valid
as
a
TLS
server
certificate.
So
it
gives
you
client
verification
of
you've
picked
the
wrong
services.
Like
your
code.
A
A
It
takes
this
state
here
and
then
it
builds
whether
it's
you
know
offline
first
and
then
warn
and
then
move
to
online,
but
that
it
builds
the
chain
to
make
sure
that
everything's
normalized
and
in
the
right
order
and
there's
no
redundant
information,
that'll
confuse
the
other
side
or
etcetera
right,
and
so
it's
now
it
turned
possibly
unordered
input
into
pristine
input,
and
that
holds
that
data
and
but
one
of
the
checks
it
can
do.
While
doing
that
normalization
is.
A
F
I,
like
that,
what
I
don't
like
is
that
policy
is
wrapped
in
that
call,
and
it
can't
be
changed
by
the
caller
and
there's
no
way
to
create
this
context.
Outside
of
this
call
right,
it's
dizzi
only
call
that.
Does
that
context
all
right,
can
you
be
a
bully,
don't
do
stuff,
then,
if
it's
a
default
does
stuff?
Is
there
a
default?
That
says,
like
don't
do
the
policy
and
let
me
do
it
and
then
you
trust
me
dangerous
right.
A
So
that
that
was
discussed
in
particular
for
scenarios
with
cross
certified
routes,
where
maybe
for
compatibility,
you're
trying
to
present
a
more
complicated
route
than
the
one
that
the
platform
would
build
to.
The
I
would
say
that
the
problem
that
I
understand
what
that
one
is,
you
can
say,
build
this
thing
and
and
I
promise
it
works
and
then
on
Windows
we're
gonna
completely
ignore
it,
because
we
can't
actually
pass
that
data
down
to
as
a
cell
stream.
Sorry
too,
as
channel.
F
F
A
F
E
F
A
A
A
A
I
F
Two
two
scenarios:
one
is
a
server
startup
where
you
pass
in
app
info
achayan
file,
and
that
happens
like
before
the
sequence
even
runs,
and
then
the
other
scenario
is
where
you
really
don't
notice.
Certain
till
you
have
a
hostname,
so
you
run
this
in
the
callback
doing
sync
IO
in
that
callback
once
hopefully
per
host
name
and
you
catch
it
there.
F
In
that
scenario,
I'm
guessing
that
there's
still
be
kind
of
this,
like
flood
of
of
connection,
is
trying
to
get
the
trying
to
connect
to
the
to
call
the
callback,
and
they
be
all
stuck
on
this
on
this
call
until
that
was
the
case
right,
is
that
work
right.
G
A
S
and
I
call
back,
you
call
key
vault,
you
get
the
pfx
it
doesn't
you
have
it
where
it
only
contains
the
leaf
cert
and
not
the
intermediate.
It
goes
to
build
the
chain.
It
has
to
go
figure
out
how
to
normalize
the
chain,
but
then
again,
assuming
it
all
works
with
all
the
like.
If
everything
works,
then
all
the
stuff
gets
cached
in
various
places,
and
so
not
just
the
in-memory
cache.
C
There's
still
option
right,
even
if
you
fetch
it
from
a
wall,
you
can
build
the
chain
offline
and
if
you
see
that
it's
missing
certificates,
you
can
do
async
IO
yourself
to
fetch
the
intermediates.
If
you
know
where
and
how
and
you
build
a
chain
and
again
whatever
you
pass
into
this,
it's
the
complete
set
right,
it'll
be
more
complicated
code,
but
I
don't
see
that
possible.
Well,.
A
C
F
This
seems
this
seems
fine.
We
just
have
to
figure
out
if,
if,
if,
if
I'm
in
that
case,
where
I'm
doing
I/o
in
the
car
back
or
trying
to
do
things
in
the
callback
that
ends
up
doing
isle
for
everyone
hitting
that
same
hostname
at
the
same
time,
right
and
I
have
to
guard
myself
for
a
hostname.
So
I
don't
have
like
duplicate
audio
for
that
same
cert,
for
example,
from
key
ball
right,
you
would
need.
D
C
C
F
G
A
A
C
A
C
A
It
would,
and
that's
presumably
what
you
would
have
it
do
in
in
this
case.
If
building
the
chain,
even
an
online
mode
failed
and
then
you
would
be
like
well.
I
I
have
only
the
target
cert,
so
I'm
gonna
do
nothing
or
I
have
the
target
certain
an
intermediate,
but
I
couldn't
figure
out
a
route
for
it,
so
I'm
gonna
send
but
I
have,
and
hopefully
the
other
side
knows
what
to
do
with
that.
D
A
F
D
F
A
If,
if
offline
is
false,
then
theoretically
there's
some
time
span,
timeouts
that
could
be
edited,
there's
other
stuff
on
the
chain
like
contextual
routes
and
and
things
of
that
nature,
but
the
the
the
simplest
mode
would
be.
This
has
offline,
and
if
you
want
any
of
the
other
complicated
stuff,
you
build
the
chain
yourself
and
then
give
it
to
this
with
puffs
line.
D
C
F
But
you
don't
have
to
be
if
you,
if
the
flag
is
called
like
just
use,
what
I
gave
you
and
then
it's
up
to
someone?
If
we
add
other
guys
to
create
the
right
context,
then
it
may
be
fine,
but
if
it's
just
offline,
then
maybe
we're
at
risk
of
having
to
add
more
I
mean
offline
is
kind
of
a
flight
that
can
represent
OCSP
and
CR
ELLs
and
intermediates,
but
I'm
not
sure
do
we
wanna
do
we
want
to
well.
A
Because
the
OCSP
stuff,
at
least
what
I
had
in
mind,
is,
would
never
be
public.
That
would
just
be
that
this
is
using
it
as
a
as
a
cache
object,
internal
to
SSL
streams,
consumption
right,
but
it
would
have
no
public
impact
and
the
offline
here
that
I
for
great
for
server
would
only
be
about
building
the
original
context,
not
saying
that
this
whole
context
is
offline,
because
the
context
is
offline.
It
doesn't
do
anything.
The
fact
that
it
right
this
one
object
happens
to
be
the
no
CSP
responder
cache
is
a
hidden
detail.
D
The
Jeremy
I
understood,
said
earlier
correctly.
Your
assertion
was
basically,
if
we
give
this
thing,
a
boolean
vote
that
says
offline
use.
Only
what
I
gave
you,
then
any
other
scenario
could
be
achieved
by
doing
what
you
wanted
to
up
front
and
giving
the
results
to
this
and
then
either
it
would
succeed
or
fail,
because
you
said
only
use
what
I
gave
you
yeah
the.
A
One
thing
that
would
fail
is
a
scenario
that
Kevin
Jones
pointed
out
with
regard
to
multipath
chains
is
and
again
on
Windows.
As
far
as
I
know,
there's
nothing
we
can
do
about
this,
but
I'm,
not
an
s
channel
expert.
Is
you
pass
the
thing
you
pass?
You
know
create
for
server
a
target,
here's
a
bunch
of
additional
stuff,
including
all
the
stuff.
It
needs
to
build
the
longer
path
and
offline.
A
And
then
the
system
says:
hey
I
found
a
trusted
path
that
was
shorter,
so
I'm
throwing
away
half
of
your
data
that
there's
no
way
that
you
could
there's
nothing.
You
can
do
to
override
that
behavior
if
we
wanted.
If
we
thought
that
was
important,
even
though
we
can't
make
it
work
on
Windows,
then
we
would
have
to
do
something
else,
and
that
could
be
that
we
have
two
different
things
here.
One
is
the
create
for
server,
which
does
normalization
and
the
other
one
is.
We
had.
A
D
Seems
reasonable,
that's
me
with
the
with
the
bool,
okay
or
in
heating,
but
really
wanted
to,
but
a
bool
seems
fun.
My
last
question
is
just
back
to
the
name.
Is
there
a
client
equivalent
to
this
that
we
can
imagine
in
the
future
or
is
the
four
server
just
to
provide
more
context
about
what
we're
creating
I.
A
Mean
there
are
client
authentication
certificates,
and
so
this
is
back
to
the
does
create
for
server
verify
the
server
EKU.
If
it,
if
everybody
thinks
it's
silly,
that
the
server
is
verifying
its
own
state,
because
I
believe
right,
I
think
Tomas
said
it
doesn't
right
now
it.
The
client
will
just
reject
it.
With
this,
the
cert
made
no
sense
in
context,
then
it
would
just
be
create.
D
Would
we
consider
a
model?
What
if
we,
what
if
we
started
with
that,
just
create
and
it
doesn't
do
the
server
validation
and
then,
if
we
really
found
we
needed
the
server
validation.
We
did
one
of
two
things:
either
we
added
the
crate
per
crate
for
server
overload,
or
we
added
an
instance
method
that,
basically,
you
know,
took
the
instance
validated
it
and
returned
to
new
instance
or
more
validated
in
place
and
updated
the
state
of
the
object
or
some
such
thing.
F
Cash
flow
does
the
looks,
not
happy
gay.
You
so
wouldn't
really
help,
because
we
I
think
we
well
I.
Guess
today.
If
you
pass
it
indirectly,
we
don't
check
of
it.
We
could
check
in
cash,
which
is
fine,
I,
think
it
is
not
to
be
in
this
API
cuz
it.
It
seems
fine
that
the
server
itself
would
check
for
a
server
scenario.
A
D
A
No
way,
that's
yeah,
so
the
if
I,
if
I
understood
the
way
everything
is
plumbed
right
now.
If
you
call
the
authenticated
server
and
you
pass
in
a
certificate
that
does
not
have
that
is
not
appropriate
as
a
TLS
server,
we're
still
gonna
push
it
on
the
wire
s.
Channel
I
may
or
may
not
push
it
on
the
wire.
It
may
fail.
I,
don't
know
I,
think
Tomas
said
it
worked.
I
could
let
him
speak
for
himself,
but
apparently
I've
decided
not
to
and
then
the
when
the
client
gets
it
and
it
runs
the
verify.
D
A
D
Context
like
I
meant
like
if,
if
the
developer
really
wanted
to
give
a
non
server
cert,
we
should
allow
that
and
then
maybe
they're
using
it
to
validate
their
clients
and
so
they're
validating
that
we
may
get
a
add
cert
like
they
do
the
right
things.
I,
don't
know
it
just
feels
like
it's
unnecessary,
additional
enforcement
that
would
generally
be
done
by
the
server
itself
if
it
wanted
to,
and
so
we
don't
need
to
complicate,
be
a
bad
boy.
That's
my
opinion,
but
I'm,
not
an
expert
in
this
domain.
C
So
one
thing
we
discussed
one
option
is
that
if
you
give
us
the
collection,
we
use
it
as
it
is,
and
if
you
don't
give
us
the
collection,
they
do
the
best
thing
which
means
between
the
certificates.
I
know
it
might
be
more
hard
to
describe,
but
basically
take
the
collection
always
as
is,
and
if
you
don't,
if
you
don't
do
it,
we
we
do
it
for
you.
A
Yeah
I
mean
it
it.
It
is
still
a
little
strange
and
that
that
would
give
you
again.
We
can
decide
garbage
in
garbage
out
in
context
is
all
fine,
but
if,
if
on
Linux
or
Mac,
if
I
gave
a
target
and
then
in
additional
certificates,
I
gave
a
bunch
of
completely
unrelated
data,
then
on
those
systems
it
will
send
everything
the
way
that
it
was
presented.
Possibly
it's
the
right
data,
but
backwards
and
that'll
possibly
break
a
client,
but
on
Windows
we're
the
only
thing
that
matters
is
target,
then
everything
works.
A
That
is
pretty
so
it's
you
end
up
with
a
weird
like
defenses
like
on
Windows.
That
essentially
is
always
treated
as
if
this
was
null
and
on
on
other
systems.
It's
not,
and
that's
actually
still
true,
because
if
you
I
guess
yeah
no
matter
what
that'll
be
true,
if
you
pass
in
additional
certificates
now
that
Windows
can't
find
with
its
chain,
it
won't
send
them
because
we
can't
pass
it
to
s
channel.
So
maybe
the
distinction
of
null
means
use
ambient
context
and
non
null
means
use.
G
A
A
D
C
A
A
C
A
C
I
H
So
this
is
mostly
a
like
a
difference
in
implementation,
slash
bug
and
how
the
compare
a
compute
works
today.
So,
if
you
look
at
the
annotations,
the
the
validation
result.
Object
has
a
property
that
says
what
member
was
and
what
member
had
the
error,
and
this
is
useful
if
you
calling
like
posit
a
turn
on
an
object
graph
and
then
you're
trying
to
figure
out
which
property
or
member
was
like
incorrect.
H
The
bad
attribute
doesn't
set
this
value,
so
you
know
when
validation
comes
back
out,
like
you
can't
sort
of
reason
about
what
property
isn't
like
was
invalid
and
blazer
like
relies
on
like
data
annotations,
for
it's
all
this
validation.
So
you
know
it
uses
it
to
highlight
like
input
boxes
in
the
UI.
H
So
when
we
get
like
this
comparator,
B
result
that
comes
back
with
like
no
value
greater
we're
like
well,
we
don't
know
what
it's
associated
with
and
we
end
up
like
associating
with
like
the
model
itself,
and
you
know
we
were
trying
to
like
figure
out
how
to
fix
us.
The
hesitation
in
this
areas
that,
like
a
lot
of
this
code,
hasn't
been
touched
in
ages
and
I.
Think
we
don't.
We
don't
really
know
how
a
lot
of
these
api's
get
used
and
what
sort
of
assumptions
people
make
about
it.
B
B
You
know
this
is
a
set
of
attributes
that
it's
basically
used
in
two
different
ways.
One
is
directly
as
a
validation
framework,
which
is
what
Blaser
is
using
it
for,
but
it's
also
used
as
a
mechanism
to
theoretically
in
an
abstract
way,
annotate
your
model
with
things
that
then
can
be
consumed
to
determine
how
to
deal
with
your
model.
So,
for
example,
EF
will
really
read
these
data
annotations
and
take
act.
B
You
know,
take
actions
based
on
that
and
there's
a
lot
of
code
out
there
that
reads
the
annotations
and
if
we
make
updates
to
the
annotations,
then,
unless
the
consumers
are
also
updated
to
understand
those,
it
becomes
very
confusing,
so
we're
basically
not
evolving
these
api's
forward
as
a
way
to
annotate
abstract
things
on
your
model.
On
the
other
hand,
I
do
think
it's
reasonable
to
bring
changes
to
their
validation
function,
since
that
is
a
kind
of
well
known
single
way
of
using
these.
B
H
One
was
like
we
could
just
go
fix
it,
but,
like
you
know,
clearly
there
is
a
risk
that
we
destabilize
some
library
that
it
relies
on
the
old
behavior
or
we
could
add,
like
an
or
property
to
the,
not
repeat
itself.
That
says
like.
Please
do
this.
You
know
basically
a
context
by
such
so
it's
a
certain
to
the
new,
correct,
behavior
coding
code
and
I'm,
basically
open
to
all
of
them.
This
was
my
like
the
first.
The
API
proposal
simply
happens
to
be
because
that's
what
he
ended
up
doing.
A
H
B
So
pronoun
one
we
talked
about
this
before
you,
we
had
discussed
actually
not
creating
a
new
attribute
for
this
case.
I
believe
did
you
investigate
updating
the
existing
attribute
to
also
have
this
behavior?
Potentially,
you
know
behind
a
behind
on
option,
if
necessary,
to
avoid
breaking,
because
it
feels
like
in
this
case
it's
not
really
a
new
attribute.
We
just
want
to
add
a
new
kind
of
validation
behavior
into
it
right.
H
B
B
I
think
I
think
we
should
try
that
first
I
can't
tell
you
know
I,
don't
know
the
code
well
enough
and
I
know
there's
a
lot
of.
It
is
not
obvious
in
the
in
the
way
it
does
particularly
around
you
know.
Attributes
in
dotnet
framework
had
some
particularly
specific
rules
in
the
early
days
due
to
the
way
designers
work.
B
So
some
of
it
is
non
obvious
where
it
validates
stuff
and
everything
so
I
think
I
need
to
see
like
the
PR
to
see
how
it
integrates,
but
I
think
that
would
be
a
better
way
to
go
initially
on
this
and
then
only
to
bring
a
new
attribute
as
an
API.
If
we
really
think
we
need
something
new,
as
opposed
to
just
kind
of
adding
functions
of
existing
one.
Okay.
H
B
Yeah
I
mean,
ideally,
we
don't
need
to
add
a
add
a
flag
or
anything
right.
Ideally,
we
just
do
a
bug,
fix
and
and
we're
confident
with
enough
reviews
that
we're
not
breaking
existing
scenarios.
I
suspect
that
fairly
unlikely
I
suspect
we
can
still
put
something
in
here.
That's
relatively
plea
doesn't
involve
a
new
attribute.
Okay,.
H
B
H
So
if
you
look
at
like
the
validation
result
out
there,
that
would
return
like
a
non
null
property.
Basically,
that's
the
difference
so,
like
validation
result,
has
a
property
that
says
member
name
right
now.
It's
null
and
like
after
this
change,
it'll
basically
have
the
property
on
which
its
applied,
which.
B
In
if
itself
sounds
fine,
it's
just
all
the
issues
around
initialization
and
how
those
things
are.
Actually
you
know
when
they're,
initialized
and
consumed,
because
we
did
look
at
changes
in
this
area
a
couple
years
ago
and
then
it
rolling
back
a
couple
because
of
the
non-obvious
way
the
attributes
work.
So
ideally,
this
is
just
a
bug
fix
and
that's
what
we
should
go
for.
First
I
guess.
I
What
I'm,
what
I'm
trying
to
assess
is
like
so
the
so
within
core
I,
think
we
have
a
bar
for
breaking
trainers.
That
would
probably
be
low
enough
that
we
could
say
you
know,
let's
give
it
a
shot
and
see
where
it
lands.
But
my
concern
is,
if
you
write
portable
code
that
works
on
full
framework
and
core,
and
then
we
don't
fix
it
on
framework.
B
So
in
general,
that's
another
reason
why
we
haven't
wanted
to
move
this
forward,
because
it
does
get
very
confusing
when
it
works
one
way
and
dotnet
framework
and
one
way
and
our
net
core
I
think
this
one
may
be
okay,
especially
given
that
it's
primarily
for
use
by
blazer
and
and
so
there
isn't
any
dotnet
framework
component
to
it.
But
again
we
should
be.
We
should
be
careful
about
not
making
that
too
confusing
I
agree
make.
I
A
I
G
B
G
I
G
B
G
G
H
H
So
the
suggestion
was
basically
we
would
add,
would
we
would
add
a
property
that
say
is
that,
like
that,
he
would
apply
to
a
you
would
add
an
attribute
that
you
would
apply
to
a
property
that
says
Taos
ivali
validated
that
you
need
to
like
step
into
this
object,
and
it's
only
one
level.
It's
not
recursive
and
then
basically
validate
those.
And
that's
pretty
much
all
there
is
to
it
because,
like
the
idea
is
that
this
is
a
new
property,
like
consumers
are
like
opting
into
this,
so
it's
kind
of
non
breaking
so.
B
This
is
a
case
where
it
does
feel
to
me
that
a
new
API
is
appropriate
here.
It's
also
generally
useful.
I
think
this
is
not
something.
This
is
not
something
that
specifically
for
Blaser.
It's
definitely
something
that
people
have
asked
again.
I,
don't
think
updating
the
existing
thing
makes
sense
here,
because
it
will
likely
be
breaking
and
it
will
be
less
clean
than
just
adding
a
new
thing
that
does
this
so
I'm
in
favor
of
a
new
API
here.
H
H
B
If
it's
a
new
attribute
but
yeah
I'm,
not
sure
on
that
one,
because
people
would
have
to
be
using
the
new
attribute
to
opt
into
this
anyway,
right
right.
H
H
H
B
The
that
does,
though,
start
to
produce
the
comp,
the
the
confusion
that
we
can
have
if
you
have
two
components
like
MVC
and
blazer
and
they're,
both
using
the
validation
framework,
where
MVC
doesn't
understand
the
new
attribute,
because
it
doesn't
call
a
new
method
and
it's
never
been
updated
to
do
it.
So
now
you
put
validate
complex
type
on
your
members,
and
your
boys
are
out
validates
them
and
your
MVC
app
doesn't
or
whatever
I'm
using
MVC
is
an
amble,
but
any
existing
existing
thing
out
there.
B
H
Sure
yeah
like
that,
that
seems
fine,
like
the
one
thing
I
guess
like
just
as
a
part
of
an
implementation,
is
that,
like
you,
now
have
like
additional
like
context
and
state
that
you
need
to
store
if
you,
if
you
want
to
walk
a
complex
graph,
just
to
avoid
like
recursions
and
things
like
that.
So
you.
A
H
B
For
example,
the
f6
is
another
example:
F
record
doesn't
do
validation,
but
in
a
f6
we
call
validate
object
in
certain
scenarios
for
you,
and
so
again
that
would
be
a
case
unless
we
updated
ef6,
you
start
applying,
validate
complex
type
attribute,
and
nothing
would
happen
and
it'd
be.
Very
you
know
weird
right.
B
G
B
G
Did
I
did
my
tour
I
know
you
know
one
pardon
just
for
the
random
brain
dump
of
details,
I'm
not
sure
if
they
they
coalesce
into
a
coherent
thought
or
not,
but
and
one
one
detail
is
as
we're
walking
that
graph
kind
of,
depending
on
the
context
in
which
you're
doing
this
validation,
you
might
want
different
graph,
walking
algorithms,
so
I
know.
That
was
one
of
the
reasons
why
we
held
off.
On
that
you
know
doing
client-side
validation.
We
had
one
graph
walk
and
server-side.
We
did
a
different
graph
walk,
so
different
implementations
there.
G
Also
when
you're
walking
the
graph
as
you
go
to
do,
validate
object
on
child
objects.
You
need
to
construct
validation
context
around
each
one
and
there
were
cases
especially
server-side
where
construction
validation
context
using
service
provider.
Implementations
could
actually
get
expensive,
so
it
might
feel
like
this
is
going
to
be
a
relatively
cheap
operation
to
validate
a
complex
type,
but
it
could
become
unexpectedly
expensive,
especially
when
you've
got
a
raise
and
make
certain
collections
of
items
in
the
mix.
G
So
we
wanted
to
make
sure
that
was
understood
by
the
caller
to
and
as
and
we
also
had
had
validation
context,
the
construction
of
that
and
the
asp
net
and
of
CF
ria
services
scenarios.
We
had
extensibility
hooks
so
that
you
could
participate
in
the
construction
of
that
context
and
make
sure
all
the
services
you
wanted
were
plugged
in
there
too.
So
I
don't
know
you
know
ten
years
later
and
how
much
those
extensibility
hooks
have
actually
been
used
outside
of
dub
CF
grey
services.
G
B
A
Because
one
thing
you
know
that
the
mention
of
this
new
attribute
would
only
really
be
understood
by
the
new
overload
and
the
new
colorways
are
gonna
get.
It
is
if
you're
supposed
to
be
interacting
with
the
any
of
the
colors
that
don't
understand
it,
in
particular,
if
you're
going
between
core
and
framework,
because
you're
a
nougat
library
like,
what's
the
what's
the
way
that
you're
supposed
to
write,
something
that
it
works
best
with
compat.
Or
is
this
just
a
if
you
want
the
fancy
thing,
your
net
five
and
only
blazer
and
like
it?
A
A
And
but
that
it
to
me
granted
I've
never
used
this
to
me.
It
just
sounds
confusing
and
that
that
it
would
be
better
if
there
was
a
way
that
this
new
attribute
just
meant
that
the
existing
path
would
call
into
the
existing
object
in
a
different
way,
but
granted.
That
means
we
still
can't
fix
that
on
framework.
So
I,
don't
know
how
important
that
compat
is.
This
may
be
a
you
know,
and
we
have
to
wait
another
10
years
before
we
can
make
this
kind
of
change.
The.
B
Other
option
here
is
for
blazer
to
do
something
that
is
specifically
for
blazer
and
but
that
then
starts
the
divergence
of
saying
validation.
Is
you
know,
application
or
app
patent,
at
least
specific
and
I?
Don't
know
if
we
want
to
go
like
down
that
path,
but
that's
basically
what
we're
doing
for
the
other
use
of
this,
where
it's
like
abstract
types
like
EF,
is
just
introducing
its
own
attributes
for
that
kind
of
thing,
rather
than
rather
than
doing
new
stuff,
but
for
validation.
Again,
it's
I
think
it's
not
as
clear-cut
as
that.
Yeah.
G
We
tried
really
hard
to
blade
anything
that
was
app
framework
specific.
When
we
were
creating
this,
so
we
did,
we
did
put
a
an
escape
out
you're.
Looking
back
at
some,
my
other
notes,
we
did
put
another
hook
in
here
and
it
was
part
of
what
we
used
in
resources
at
the
time
to
pull
this
off,
and
that
was
the
interface
of
I
valuable
object
that
if
I
recall
correctly
the
way
we
implemented
the
graph
walk
for
our
server-side
validation.
G
Andrea
services
was
the
we
extended
the
domain,
the
entities,
the
entity
types
to
implement,
evaluatable
object
by
default
and
we
then
had
an
implement,
relate
default.
Implementation
of
those
that
would
do
the
graph
walk
with
the
algorithm
that
we
wanted
and
then
consumers
could.
Your
users
could
implement
the
interface
themselves
if
they
wanted
a
different
graph
walk
algorithm.
So
we
gave
that
default.
So
I
don't
know.
If
maybe
another
approach
to
this
would
be
for
Blaser
to
do
something
similar
where
we
just
use
that
existing
hook
of
my
validated
object,
I
mean.
H
So
the
problem
there
is,
though,
like
he
suggests,
like
users,
poco
type
like
their
their
app
models
and
now
you're
sort
of
pushing
the
problem
of
doing
the
class
walk
onto
them,
which
is
kind
of
why
we
wanted
to
like
solve
this
in
the
first
place.
So
like
the
one
possibilities
are
like
I
kind
of,
like
wasn't
sure
is:
are
you
able
to
like
make
this
attribute
like
net
5?
Only
like
can
we
cross,
compile
this
library
and,
like
this?
That's
all
this
problem
to
an
extent.
A
It
removes
a
source
of
user
confusion
while
adding
a
source
of
user
complexity,
but
that
may
be,
if
you
only
care
about
validate
complex
type,
and
you
only
care
about
net
five
plus,
then
there's
no
real
complexity
for
you
other
than
perhaps
the
scenario
where
you've
written
a
thing
using
this
new
model,
and
you
interact
with
an
older
component
that
still
works
on
net
five,
and
it
doesn't
understand
that
you
have
an
attribute
here
at
all.
Slightly
like
EF.
Six
would
be
classic
example
of
that.
H
A
I
This
problem
about
to
be
it's
all
right,
because
attributes
are
always
basically
some
part
of
the
stack
has
to
honor
that
and
if
some
party
doesn't
honor,
then
that's
what
happens,
but
in
that
sense,
there's
no
different
from
let's
say,
malleable
annotations
that
ef6
poly
will
also
not
be
lightin
Timon
right.
So
in
that
sense,
it's
kind
of
the
problem
that
we
have
a
bit
of
every
attribute
right.
This
one
is
not
special
in
that
way.
Right.
I
I
Fine
I
mean,
like
we
said
many
times:
it's
it's
it's
in
its
maintenance
mode,
right,
so
I,
don't
think
that's
unreasonable
to
say
you
know
we
innovated
in
an
area
that
not
all
existing
tech
minor
fits
from
right,
but
that
shouldn't
mean
that
we
don't
innovate
in
that
space.
Yeah.
I
I
mean
to
the
earlier
point
of
it
if
you
were
to
lose
attribute
for
an
ED
Center
to
Oh
library
and
then
existing
stuff
doesn't
work
with
it.
That's
more
problematic
because
we
basically
go
out
of
her
way
to
retroactively.
They
make
it
available
to
the
past
of
what
updating
said
past.
If
we
only
edit
in
at
5,
then
well
yeah.
If
something
old
runs
on
that
5,
that
might
still
not
know
about
it.
But
that
seems
easier
to
explain
than
the
reverse.
A
H
G
B
I
thought
that
I
think
was
kind
of
what
I
was
suggesting
the
beginning.
Although
I
like
the
idea
of
putting
the
implementation
in
the
attribute,
that
seems
that
seems
good,
but
I
think
I
think
the
issue
there
is
that
you're
going
to
like
MVC
is
going
to
start
doing
different
things.
When
you
put
this
attribute
on
which
pronoun
was
pushing
back
on
a
little
bit.
G
B
A
Yeah
I
think
it
would
be.
It
seems
like
a
better
thing
if
the
the
validator
class
engine,
whatever
thing
is
what
understands
this
attribute
and
or
like
that
that
effectively
the
attribute
is
what
says
the
thing
is
different.
Instead
of
you
had
to
call
a
different
method
to
get
it
to
to
have
meaning,
and
then
that
that
means
that,
yes,
you
slap
it
on
and
and
it
it's
consistent
in
all
the
places
that
would
have
previously
walked
it
with
the
the
about
the
base
validation
attribute.
B
I
think
validate
object
is
there's
a
raise
reasonably
generic
in
not
generic
in
technical,
in
the
sense
that
it's
it's
a
it
has
a
broad
applicability.
It
does.
It's
not
very
specific,
I
can't
think
of
way
implementations
we
get
horribly
messed
up
by
this
new
attribute.
Certainly
if
it's
not
there
and
nothing
should
change
it
feels
like
probably
having
it.
There
won't
also
be
problematic.
I
feel
like
that's.
Okay,
I
feel
like
if
we
start
validating
this
after
view
as
a
new
attribute,
and
we
do
it
with.
B
E
G
And,
and
that
then
leads
down
the
path
of
what
do
you
have?
Is
the
member
name
for
those
those
deeply
nested
validation
results?
We
had
that
as
a
problem
as
well
train.
G
A
Don't
want
the
aggregate
exception
style,
bundling
I
want
the
the
details,
give
me
more
than
one
result
per
per
potential
call
and
then
that's
the
caller
gets
to
opt
into
I
want
better
details,
but
no
one's
confused
by
the
validator
didn't
run
yeah,
because
I
think
it's
more
that
that
what
is
more
important
is
that
success
means
success
and
failure
means
failure
and
success
doesn't
mean
I.
Wasn't
aware
that
you
wanted
me
to
fail.
Yes,.
A
B
So
so
then,
if
I
understand
what
you're
saying
we
introduced
the
new
attribute
and
we
update
the
existing
calls
that
people
make
so
that
it
will
honor
the
existing
attribute
and
fail
if
validation
of
that
fails,
but
we
may
also
add
new
API
that
lets
you
do
something
more
specific.
If
you
know
that
you're
also
consuming
there,
some
want
to
and
want
to
get
special
information
out
right.
G
H
H
H
But
wouldn't
you
want
the
individual
like,
so
the
idea
was
in
one
case
like
you
would
have
one
validation
result
for
like
the
aggregate
result
right
like,
in
the
other
case
you
sort
of
on
the
details.
This
is
the
API
that
says
Kim.
Give
me
the
individual
evaluation
results
for
each
of
the
details,
because,
like
the
consumer
has
no
way
to
like
unwrap
it,
there's
no
API,
I,
guess.
B
What
I'm
asking
is
is
the
differentiation
between
the
details
and
the
aggregate
is
that
is
that
necessary,
or
is
it
I
mean,
given
that
you
just
treat
this
as
a
list
of
validation
results
anyway?
Can
it
not
say,
okay,
you
know
at
the
top
level
is
failed
and
then
at
the
next
level
this
failed
as
another
result
and
then-
and
you
know,
on
this
one-
it
failed
I
mean
you
may
get
lots
of
things
in
your
results,
because
you
know
basically
validating
the
entire
graph.
H
I
mean
like
it
isn't
talking
about
like
what
NBC
and
laser,
like
you
kind
of
reconstruct
what
UI
element
triggered
the
validation
failure.
So
you
want
to
like
people
to
like,
highlight
it
or
put
a
CSS
attribute
on
it,
or
something
like
that.
If
all
we
had
was
like
well,
something
in
address
field
like
it's
kind
of
useless,
because
address
might
not
even
show
up
as
a
UI
element.
B
G
H
G
Yeah
I
was
I,
don't
even
remember
if
we
ended
up
with
a
string
based
representation
or
of
that
or
if
we
were
actually
just
admitting
a
true
object
graph
that
mimics
you
know
mimic
the
shape
of
your
I
feel
like
that's
where
we
actually
landed
was
having
something
that
movie
the
shape
of
your
entities,
but
instead
of
it
being
the
entity
data,
it
was
the
validation
result.
Data
feel
like
that's
where
we
actually
landed,
but
that
was
all
generated
code.
G
H
Amy's
he
walks
it,
but
it
thing
is
just
like
it
does
reconstruct
the
path
from
strings.
G
H
You
know
obviously
like
there
are
a
bunch
of
code
just
trying
to
like
hypothesize
what
the
path
could
be
and
then
like
crime
map
it
back
to
a
property.
Pleaser
does
the
same
thing,
but,
like
so
far
likely
it
hasn't
had
the
problem
of
like
doing
anything
more
than
like
looking
up
member
names,
because
that's
all
you
get
from
validation
today,
it's
just
kind
of
what
we're
trying
to
solve
I
see.
B
So
having
the
pool
flag
here
definitely
makes
it
safer
in
terms
of
not
changing
the
existing
behavior
for
anyone.
I'm
not
calm,
still
not
100%
convinced
it's
necessary,
but
if
we
want
to
err
on
the
side
of
not
breaking,
you
know
existing
expectations
and
breaking
the
front
page
of
applications.
Where
now
the
validation
fails
and
nobody
can
log
in
and
you
might
want
to
go
there
yeah.
G
H
H
G
G
So
yeah
I
didn't
get
to
finish.
Reading
on
that,
I
think
it
was
a
multipass
on
required
fields
first
and
then
only
if
all
required
fields
have
been
satisfied.
We
do
the
next
level
of
validation
across
everything
else.
You
can
say
validate
all
properties,
I
believe
that's
what
that
it
was
go
ahead
and
validate
all
properties,
regardless
of
required
field
validation,
because
that
was
cases
when
you
could
actually
have
validation,
attributes
relying
on
required
fields
already
being
fulfilled.
Yes,
actually
have
all
refs.
H
G
H
G
H
I
mean
we
can
start
the
day
easy
one
like
and
I
think
at
least
four
Blazers
scenarios
like
we
can
try
and
keep
the
implementations
simple
enough
that
like
we
would
do
it
and
hope
that
nobody
actually
wants
to
like
parse
these
strings,
because
I
don't
think
it
necessarily
say
that
these
strings
are
meant
to
represent
paths
or
like
them
like
they're,
just
strings.
It
means
so
like
if
you
happen
to
parse
it.
Well,
it's
your
own
fault.
If
we're.
B
H
G
Brain
yeah,
yeah
or
maybe
even
just
kind
of
dodge
it
and
say
all
right,
something
on
a
dress.
You
just
say
just
stop
at
a
dress
say
your
address
is
invalid
and
not
even
try
to
represent.
Why
and
then.
If
somebody
needs
to
understand
why
a
dress
was
invalid,
they
can
come
back
and
reevaluate.
Just
that
address
object.
A
Alright,
so
the
notes
that
I've
captured
our
new
attribute
seems
fine,
but
be
careful
and
how
it
gets
consumed.
So
it's
not
a
surprise.
Users
use
the
objects
in
multiple
contexts,
and
it
seems
like
some
new
data
belongs
on
validation
context.
Instead
of
overloads
to
try
/
non
try
validate
object
with
some
more
words,
but
it
sounds
like
we
don't
know
what
that
would
be
right
now.
So
sounds
good.
So
I
think
that
this
goes
back
as
more
work.
A
All
right,
you've
already
rubber-stamped
us,
but
maybe
now
that
he's
here,
he'll
care
slightly.
So
one
of
the
things
that
we
talked
about
during
the
ssl
stream
API
improvements
was
the
way
that
people
load
certificates
classically
in
dotnet.
If
you
want
a
certificate
with
a
private
key,
it
either
came
from
a
cert
store
or
a
pfx.
A
We've
been
incremental
e,
adding
support
for
how
you
can
do
that
after
the
fact,
based
on
like
assert
that
PIM
and
a
private
key
file,
or
whatever
names,
cert
bot,
uses
by
default,
and
then
this
is
taking
where
you
could
have
written
utility
methods
yourself
and
putting
them
as
static
methods
on
x.509
certificate,
2
and
X
5,
and
a
certificate
to
collection.
So
PIM
is
PIM
just
means
PIM
these
days.
Technically
it
means
privacy,
enhanced
mail.
A
But
this
is
just
one
of
the
encoding
formats
of
a
certificate
and
then
the
idea
is,
you
can
create
it
from
you
load
the
contents
of
the
file
or
the
you
pass
in
the
path
to
a
file.
But
since
we're
using
a
span
of
char
for
different
purposes,
this
is
PIM
file
and
this
is
PIM
and
then
that
there's
optionally,
a
path
to
where
the
key
lives.
The
difference
between
this
and
the
existing
thing.
A
A
A
Has
instance
import,
and
so
this
is,
you
know,
adding
words
to
say
why
this
one
behaves
different
than
the
existing
instance
import
methods
and
then
that
the
x.509
certificate
to
does
not
have
any
current
creates.
We
could
certainly
make
creates
that
look
exactly
like
the
constructor.
If
you
think
that
once
we
have
one
set
of
creates,
we
want
parody
on
having
all
the
things
be,
creates
and,
and
then
we
sort
of
deprecated
doing
new
things
with
the
Constructors.
I
I
I
think
the
pattern
makes
sense,
I
mean
we
know
we
had
this
thing
in
Jason,
maybe
quantification
over
load
versus
parse
and
that
confused
the
ton
of
people
so
I
actually
like
the
idea
that
we
just
subjected
to
a
file
when
it's
a
you
know
loading
from
a
physical
thing
on
disk
rather
than
taking
things
from
a
memory.
So
that
makes
sense
to
me
yep.
D
A
A
Utf-16
le,
if
it's
a
PF,
X
or
or
it
uses
a
KDF
that
uses
the
the
PF
x
KDF
and
if
it's
any
of
the
simple
KDF,
then
it's
utf-8.
If
you
pass
the
one
in
byte
form,
then
we
don't
normalize
it
all
and
we
just
pass
the
bytes
as
they
are
as
input
into
the
KDF,
that
this
is
just
copying.
What
we
did
for
a
symmetric
algorithm
import,
their
import,
encrypted,
pkcs7,
okay,
awesome,
not
seven!
Yeah.
A
Is
the
complicated
one
and
it's
for
if,
when
we
picked
utf-8,
because
the
KDF
s--
work
in
bytes,
instead
of
chars
that
if
we
picked
utf-8,
but
you
happen
to
know
that
you're
interacting
with
something
that
did
you
see
s2,
then
you
can
give
the
bytes
and
we'll
just
pass
them
straight
through
instead
of
failing
so
it's
it
is
a
very
it's.
In
fact,
it's
super
nation.
We
could
say
that
we
don't
need
it
on
the
certificate.
One
that'd
be
fine
with
dropping
it
here.
D
A
And
then
the
only
thing,
that's
weird,
which
is
again
good-
that
this
is
from
a
method
instead
of
from
another
constructor
overload,
is
if
you
load
from
a
pfx
the
default
is
the
key
file
gets
imported
into
the
system,
key
store
on
windows,
and
this
one
will
be
as
if
you
passed
the
ephemeral
key
set
flag,
meaning
the
key
is
only
in
memory,
so
this
actually
won't
work
for
SSL
stream.
You'd
have
to
take
this
load.
This
export
it
to
pfx
and
import
it
to
BFX
because
of
bug
in
Windows.
I
A
But
Kestrel
could
like
Kestrel,
will
have
an
accelerator
for
like
loading
from
these
paths
and
it
will
have
to
do
the
export
and
re-import
to
to
work
around
that.
Windows
SSL
stream
only
works
with
key
files
that
are
persisted
to
disk
sorry,
with
cert
keys
that
are
persisted
to
disk,
so
but
people
don't
use,
pin
files
on
Windows
anyway,.