    
go-chassis Go Chassis
Copyright 2019-present, tianxiaoliang

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

================================================================
The Apache 2.0 License
================================================================

The following components are provided under the  Apache 2.0 License  (https://opensource.org/licenses/Apache-2.0). See project link for details.

github.com/apache/thrift/lib/go/thrift                                         
github.com/matttproud/golang_protobuf_extensions/pbutil                        
github.com/opentracing-contrib/go-observer                                     
github.com/prometheus/client_golang/prometheus/promhttp                       
github.com/prometheus/client_model/go                                         
github.com/prometheus/common                                                  
github.com/prometheus/procfs/xfs
k8s.io/apimachinery/pkg/util/sets

================================================================
The ISC License
================================================================

The following components are provided under the  ISC License  (https://opensource.org/licenses/ISC). See project link for details.

github.com/davecgh/go-spew/spew

================================================================
The MIT License
================================================================

The following components are provided under the  MIT License  (http://www.opensource.org/licenses/mit-license.php). See project link for details.

github.com/beorn7/perks/quantile
github.com/cactus/go-statsd-client
github.com/cenkalti/backoff
github.com/DataDog/datadog-go
github.com/eapache/go-resiliency/breaker
github.com/eapache/go-xerial-snappy
github.com/eapache/queue
github.com/emicklei/go-restful/log
github.com/emicklei/go-restful-swagger12
github.com/klauspost/cpuid
github.com/onsi/ginkgo
github.com/onsi/gomega
github.com/opentracing/opentracing-go
github.com/openzipkin/zipkin-go-opentracing
github.com/patrickmn/go-cache
github.com/reactivex/rxgo
github.com/smartystreets/assertions
github.com/smartystreets/goconvey
github.com/spf13/cast
github.com/valyala/fasthttp
go.uber.org/ratelimit

================================================================
The BSD Licenses
================================================================

The following components are provided under the BSD Licenses (http://www.opensource.org/licenses/bsd-license.php). See project link for details.

golang.org/x/net/context
github.com/rcrowley/go-metrics
github.com/klauspost/crc32
github.com/klauspost/compress
github.com/gorilla/websocket
github.com/golang/snappy
github.com/golang/protobuf/proto
github.com/gogo/protobuf/proto
github.com/fsnotify/fsnotify
github.com/shirou/gopsutil

================================================================
Notice for gopkg.in/yaml.v2:

The following files were ported to Go from C files of libyaml, and thus
are still covered by their original copyright and license:

    apic.go
    emitterc.go
    parserc.go
    readerc.go
    scannerc.go
    writerc.go
    yamlh.go
    yamlprivateh.go

Copyright (c) 2006 Kirill Simonov

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

==========================================
For core/loadbalance/default.go,third_party/forked/go-micro,
core/loadbalance/default_test.go(Forked from github.com/micro/go-micro)

   Copyright 2015 Asim Aslam.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

==========================================
For metrics/prometheusmetrics.go,metrics/prometheusmetrics_test.go(Forked from github.com/deathowl/go-metrics-prometheus)

   Copyright 2016 Csergő Bálint github.com/deathowl

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

==========================================
For vendor/github.com/go-chassis/paas-lager/third_party/forked/cloudfoundry/lager(Forked from github.com/cloudfoundry/lager)

Copyright (c) 2015-Present CloudFoundry.org Foundation, Inc. All Rights Reserved.

This project contains software that is Copyright (c) 2014-2015 Pivotal Software, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

This project may include a number of subcomponents with separate
copyright notices and license terms. Your use of these subcomponents
is subject to the terms and conditions of each subcomponent's license,
as noted in the LICENSE file.


==========================================
For third_party/forked/afex/hystrix-go,vendor/github.com/go-chassis/cse-collector/cse_collector.go(Forked from github.com/afex/hystrix-go/hystrix)
The MIT License (MIT)

Copyright (c) 2013 keith

==========================================
For vendor/github.com/go-chassis/auth/third_party/forked/datastream/aws(Forked from github.com/datastream/aws)

Copyright (c) 2014, Xianjie
All rights reserved.

==========================================
For core/provider/default_provider.go(Forked from github.com/golang/go)

Copyright 2009 The Go Authors. All rights reserved.